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













