本文通過(guò)簡(jiǎn)短的語(yǔ)言解釋渲染管線,無(wú)論是第一次了解渲染管線,還是回顧,都有幫助。
一、完整渲染流程
在介紹渲染管線之前,先全局視角了解一下整個(gè)渲染引擎。

工具階段、資產(chǎn)調(diào)節(jié)階段、應(yīng)用程序階段、幾何階段、光柵化階段每個(gè)字停留一秒,多看幾眼。專業(yè)名稱自帶勸退buff
渲染引擎:對(duì)各種模型進(jìn)行染色、光照、陰影等渲染,繪制出屏幕畫面的功能模塊。
資產(chǎn)調(diào)節(jié)階段:轉(zhuǎn)換模型格式(處理幾何和材質(zhì))應(yīng)用程序階段:為渲染管線做準(zhǔn)備。準(zhǔn)備要渲染的模型(網(wǎng)格)幾何階段:處理網(wǎng)格頂點(diǎn)數(shù)據(jù),轉(zhuǎn)成屏幕空間的頂點(diǎn)信息光柵化階段:著色,輸出最終效果
已經(jīng)盡量少專業(yè)名詞了。
二、渲染管線的介紹
渲染管線:嚴(yán)格來(lái)講,是GPU處理數(shù)據(jù)生成圖像的整個(gè)過(guò)程
渲染流程:圖像繪制的流程。CPU和GPU一起完成的但是不可否認(rèn),CPU也是整個(gè)過(guò)程必不可少的,所以把它加上。變成這樣。
基本信息了解之后,下面進(jìn)入管線細(xì)節(jié)。(八股文警告)
介紹的圖很多,偏愛這張。各個(gè)圖流程介紹細(xì)節(jié)上有所不同,重點(diǎn)在于便于理解
一堆原始圖形數(shù)據(jù)途經(jīng)一個(gè)輸送管道,期間經(jīng)過(guò)各種變化處理最終出現(xiàn)在屏幕的過(guò)程
提交幾何圖元:提交網(wǎng)格、材質(zhì)等數(shù)據(jù),建立GPU命令表控制著色器參數(shù): uniform
應(yīng)用程序階段做的事情偏引擎向,所以介紹渲染管線的文章基本都不會(huì)提及干了啥,只會(huì)說(shuō),提供頂點(diǎn)數(shù)據(jù)。 事實(shí)上3件事中每件都是一個(gè)大的模塊,非引擎程序員了解干了啥就足夠了。幾何幾何,從名字就知道,處理的是幾何數(shù)據(jù)。主要流程包括:頂點(diǎn)著色器、圖元裝置(投影變換)、裁剪和屏幕映射頂點(diǎn)著色器:進(jìn)行頂點(diǎn)坐標(biāo)變換。將輸入的模型空間頂點(diǎn)坐標(biāo)變換到裁剪空間頂點(diǎn)坐標(biāo)。圖元裝配:將頂點(diǎn)裝配成指定圖元的形狀(如三角形)。幾何著色器:改變圖元。通過(guò)產(chǎn)生新頂點(diǎn)構(gòu)造出新的圖元來(lái)生成其他形狀。外殼著色器和域著色器可編程,鑲嵌器是由硬件管理。事實(shí)上,圖云裝置階段可以細(xì)分,有的地方叫曲面細(xì)分。增加表面的三角面的數(shù)量,包括外殼著色器、鑲嵌器和域著色器構(gòu)成,其中外殼著色器和域著色器是可編程的,而鑲嵌器是有硬件管理。2.4 光柵化階段
把圖元映射為最終屏幕上顯示的顏色。
光柵化:把圖元映射為最終屏幕上相應(yīng)的像素(把三角型切分成一個(gè)個(gè)像素)。
片段著色器:計(jì)算每個(gè)像素的最終顏色。深度測(cè)試和混合階段:判斷像素的遮擋關(guān)系和透明度,決定是否應(yīng)該丟棄和怎么顯示。
2.具體過(guò)程
1. 渲染管線就是一堆原始圖形數(shù)據(jù)經(jīng)過(guò)各種變化處理最終出現(xiàn)在屏幕的過(guò)程。渲染管線可分為三個(gè)階段,應(yīng)用程序階段,幾何階段,和光柵化階段
2. 應(yīng)用程序階段由CPU主要負(fù)責(zé)。CPU將GPU渲染需要的燈光、模型準(zhǔn)備好,并設(shè)置好渲染狀態(tài),為GPU渲染做好準(zhǔn)備。
3. 幾何階段把輸入的3D數(shù)據(jù)轉(zhuǎn)換成2D數(shù)據(jù)。包括頂點(diǎn)著色器、圖元裝置、裁剪和屏幕映射幾個(gè)過(guò)程。頂點(diǎn)著色器主要進(jìn)行頂點(diǎn)坐標(biāo)變換。將輸入的模型空間頂點(diǎn)坐標(biāo)變換到裁剪空間頂點(diǎn)坐標(biāo)。幾何著色器改變圖元。通過(guò)產(chǎn)生新頂點(diǎn)構(gòu)造出新的圖元來(lái)生成其他形狀。
4. 光柵化階段把圖元映射為最終屏幕上顯示的顏色。包括光柵化,片段著色,深度測(cè)試和混合。光柵化將頂點(diǎn)轉(zhuǎn)為屏幕上的像素。片段著色器計(jì)算每個(gè)像素的最終顏色。深度測(cè)試通過(guò)深度信息判斷像素的遮擋關(guān)系。混合階段通過(guò)透明度將像素進(jìn)行混合。
5. 最終渲染好的顏色先被送入后置緩沖,隨后再替換前置緩沖,顯示在屏幕上。
1. 渲染管線就是一堆原始圖形數(shù)據(jù)經(jīng)過(guò)各種變化處理最終出現(xiàn)在屏幕的過(guò)程。渲染管線可分為三個(gè)階段,應(yīng)用程序階段,幾何階段,和光柵化階段。2. 應(yīng)用程序階段由CPU主要負(fù)責(zé)。CPU將GPU渲染需要的燈光、模型準(zhǔn)備好,隨后向GPU下達(dá)一個(gè)渲染指令Draw Call,即往命令緩沖區(qū)中放入命令,GPU則依次取出命令執(zhí)行3. 幾何階段把輸入的3D數(shù)據(jù)轉(zhuǎn)換成2D數(shù)據(jù)。包括頂點(diǎn)著色器、圖元裝置、裁剪和屏幕映射幾個(gè)過(guò)程。頂點(diǎn)著色器主要進(jìn)行頂點(diǎn)坐標(biāo)變換。將輸入的模型空間頂點(diǎn)坐標(biāo)變換到裁剪空間頂點(diǎn)坐標(biāo)。圖元裝配將頂點(diǎn)裝配成指定圖元的形狀??梢?strong>細(xì)分為外殼著色器、鑲嵌器和域著色器。幾何著色器通過(guò)產(chǎn)生新頂點(diǎn)構(gòu)造出新的圖元來(lái)生成其他形狀。圖元組裝將輸入的頂點(diǎn)組裝成指定的圖元。圖元組裝后會(huì)進(jìn)行屏幕映射的操作,包括透視除法(投影、裁剪轉(zhuǎn)成2維)和視口變換(映射,適配到屏幕),將圖元從三維空間映射到二維平面上,這是由硬件完成的。
(tips: 注形狀(圖元)組裝和圖元裝配的區(qū)別。翻譯成中文容易產(chǎn)生歧義形狀裝配(shape assemly),把點(diǎn)裝成一個(gè)個(gè)的圖元(如三角型),傳入幾何著色器圖元組裝(primitive setup),把3D轉(zhuǎn)2D,并適配哪個(gè)叫組裝哪個(gè)叫裝配無(wú)所謂,只要記住具體的做法就行,名字混了也無(wú)所謂。)
4. 光柵化階段把圖元映射為最終屏幕上顯示的顏色,包括光柵化,片段著色,透明度測(cè)試和模板測(cè)試和混合。光柵化將頂點(diǎn)轉(zhuǎn)為屏幕上的像素。會(huì)進(jìn)行三角形遍歷。三角型遍歷,檢測(cè)出所有被三角型覆蓋的像素。(此處可拓展出怎么劃分片元、怎么抗鋸齒)片段著色器計(jì)算每個(gè)像素的最終顏色。是一個(gè)可編程的階段,主要的光照處理都在這個(gè)階段。透明度(Alpha)測(cè)試通過(guò)深度信息決定像素是否顯示。可設(shè)置閾值,顯示的像素將與顏色緩沖區(qū)中顏色混合。模板測(cè)試通過(guò)片元的模板值與模板緩沖區(qū)的模板值的比較來(lái)篩選像素。深度測(cè)試通過(guò)深度信息判斷像素的遮擋關(guān)系。篩選掉被遮擋的像素?,F(xiàn)在大多數(shù) GPU 都支持提前深度測(cè)試(Early depth testing),在片元著色器之前測(cè)試,由硬件功能完成。5. 最終渲染好的顏色先被送入后置緩沖,隨后再替換前置緩沖,顯示在屏幕上
常見的坐標(biāo)系有哪些?有什么含義?為什么需要?怎么轉(zhuǎn)換?抗鋸齒算法有哪些?
在學(xué)習(xí)階段,可以也通過(guò)這些問(wèn)題深入了解渲染管線,扎實(shí)理解。
以上僅供參考,完全可根據(jù)自身了解情況深入或者刪減。最好能用自己的話復(fù)述一遍。