前言
伴隨著VR/AR的飛速發展,Unity開發引擎逐漸成為了VR/AR開發的主力引擎。為了滿足VR高清高幀率的極限渲染,著色器編程(Shader)也成為了Unity程序開發人員的必備知識。本篇主要講解圖形學基礎知識,了解Unity圖像渲染機制,以及圖像渲染管線流程。
-
Unity圖像渲染機制
在Unity引擎中,任何圖像渲染都需要一個很重要的文件屬性——Material(材質球),在MeshRenderer、LineRenderer、UI渲染、拖尾渲染都可以見到它的影子。因此,我們可以將Material理解為Unity中圖像渲染的工具,而Shader(著色器)即可以理解為Material這個工具的加工廠,Shader(加工廠)定義了Material渲染的解決方案,定義了Material渲染所需要的原材料,而此時所講的原材料,即Shader中的屬性(數值,顏色,紋理,貼圖等等)。
Unity圖像渲染機制
下面舉例說明,在Unity中設置一個網格渲染的具體流程: -
想要渲染一個網格,首先需要創建一個材質球;
創建材質球 -
在材質球中,選擇合適的Shader;
選擇Shader -
將材質球添加到網格渲染器中;
添加材質球到網格渲染器 -
調整材質球中的屬性信息;
調整材質屬性 -
查看調整后的渲染效果。
查看渲染效果 -
渲染繪圖管線
了解了Unity圖像渲染機制,下面我來介紹渲染繪圖管線。那么何為渲染繪圖管線呢?渲染管線也稱為渲染流水線,是顯示芯片內部處理圖形信號相互獨立的并行處理單元。在Unity中,即將3D場景模型繪制成屏幕2D圖片的過程。
渲染繪圖管線
下面我們詳細講解圖像渲染流水線中各個模塊的詳細操作步驟: -
第一個步驟——頂點處理
1.當模型制作完成后,模型只有一個自身中心以及自身的前后左右上下方位,我們稱之為本地坐標系。當模型置入3D場景中,每個頂點都擁有了一個世界坐標,因此頂點處理第一步是從本地坐標到世界坐標的過程。
本地坐標-->世界坐標
2.有了世界坐標后,模型在不同角度觀察,所看到的畫面是不同的,因此下一個步驟是從世界坐標系到觀察坐標系的過程。
世界坐標-->投影坐標
3.觀察坐標系還是一個3D視角,但我們所看到的畫面其實是一個2D的平面,只是有了陰影,有了光照,有了3D模型的角度渲染,我們看起來比較又3D點感覺。最后一個步驟,即觀察坐標系(3D)到投影坐標系(2D)到過程。
觀察坐標-->投影坐標 -
第二個步驟——面處理
1.剛剛操作已經獲取到了2D平面上每個頂點的坐標,下面面處理第一個步驟即將所有頂點連線,組裝成面。
面組裝
2.當然面組裝成型后,會有我們看不到的地方不需要渲染,因此要將看得到的面截取,將看不到的面剔除,因此有了面截取和面剔除步驟。
面截取與面剔除 -
第三個步驟——光柵化
光柵化是渲染管線流程中重要的一步,即將面渲染所需要的像素數量,位置等信息計算出來,也可以理解為是將面拆分成一個個的像素的過程。
光柵化 -
最后一個步驟——像素處理(像素著色)
最后一步,即給每個像素著色,形成我們想要看到的畫面。
像素處理
結束語
圖形學是計算機領域比較晦澀難懂的一部分,本篇用簡單的語言及詳細的配圖,闡述了Unity圖像渲染機制及圖形學渲染管線流程。相信大家能夠對圖形學又一個大概的認識,UnityShader系列篇會陸續上線,大家敬請期待,下一篇我們來學習固定管線Shader。