日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

图形学渲染管线

發(fā)布時(shí)間:2024/3/24 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图形学渲染管线 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


本文由@淺墨_毛星云?出品,轉(zhuǎn)載請(qǐng)注明出處。??
文章鏈接:?http://blog.csdn.net/poem_qianmo/article/details/70544201




這篇文章是解析計(jì)算機(jī)圖形學(xué)界“九陰真經(jīng)總綱”一般存在的《Real-Time Rendering 3rd》系列文章的第二篇。將帶來(lái)RTR3第二章內(nèi)容“Chapter 2 The Graphics Rendering Pipeline 圖形渲染管線(xiàn)”的總結(jié)、概括與提煉。


文章分為全文內(nèi)容思維導(dǎo)圖、核心內(nèi)容分章節(jié)提煉、本章內(nèi)容提煉總結(jié)三個(gè)部分來(lái)呈現(xiàn),其中:

  • 文章的第一部分,“全文內(nèi)容思維導(dǎo)圖”,分為“章節(jié)框架思維導(dǎo)圖”和“知識(shí)結(jié)構(gòu)思維導(dǎo)圖”兩個(gè)部分。
  • 文章的第二部分,“核心內(nèi)容分節(jié)提煉”,是按原書(shū)章節(jié)順序分布的知識(shí)梳理。
  • 而文章的第三部分“本章內(nèi)容提煉總結(jié)”,則是更加精煉,只提煉出關(guān)鍵信息的知識(shí)總結(jié)。



一、全文內(nèi)容思維導(dǎo)圖



1.章節(jié)框架思維導(dǎo)圖



?


2.知識(shí)結(jié)構(gòu)思維導(dǎo)圖



?





二、核心內(nèi)容分節(jié)提煉

?


2.1 圖像渲染管線(xiàn)架構(gòu)概述 Architecture


渲染管線(xiàn)的主要功能就是決定在給定虛擬相機(jī)、三維物體、光源、照明模式,以及紋理等諸多條件的情況下,生成或繪制一幅二維圖像的過(guò)程。對(duì)于實(shí)時(shí)渲染來(lái)說(shuō),渲染管線(xiàn)就是基礎(chǔ)。因此,我們可以說(shuō),渲染管線(xiàn)是實(shí)時(shí)渲染的底層工具。

圖2.1展示了使用渲染管線(xiàn)步驟。渲染出的圖像的位置、形狀是由它們的幾何形狀,環(huán)境特性,攝像機(jī)位置決定的。而物體的外觀由材質(zhì)特性,光源,紋理和著色模型確定。

?

原書(shū)圖2.1 左圖中,相機(jī)放在棱椎的頂端(四條線(xiàn)段的交匯點(diǎn)),只有可視體內(nèi)部的圖元會(huì)被渲染。

?

在概念上可以將圖形渲染管線(xiàn)分為三個(gè)階段:

  • 應(yīng)用程序階段(The Application Stage)
  • 幾何階段(The Geometry Stage)
  • 光柵化階段(The Rasterizer Stage)

?

如下圖:


原書(shū)圖2.2 繪制管線(xiàn)的基本結(jié)構(gòu)包括3個(gè)階段:應(yīng)用程序、幾何、光柵化。

?

?

幾個(gè)要點(diǎn):

  • 每個(gè)階段本身也可能是一條管線(xiàn),如圖中的幾何階段所示。此外,還可以對(duì)有的階段進(jìn)行全部或者部分的并行化處理,如圖中的光柵化階段。應(yīng)用程序階段雖然是一個(gè)單獨(dú)的過(guò)程,但是依然可以對(duì)之進(jìn)行管線(xiàn)化或者并行化處理。
  • 最慢的管線(xiàn)階段決定繪制速度,即圖像的更新速度,這種速度一般用FPS來(lái)表示,也就是每秒繪制的圖像數(shù)量,或者用Hz來(lái)表示。

?

?

2.2 應(yīng)用程序階段 The Application Stage

?

  • 應(yīng)用程序階段一般是圖形渲染管線(xiàn)概念上的第一個(gè)階段。應(yīng)用程序階段是通過(guò)軟件方式來(lái)實(shí)現(xiàn)的階段,開(kāi)發(fā)者能夠?qū)υ撾A段發(fā)生的情況進(jìn)行完全控制,可以通過(guò)改變實(shí)現(xiàn)方法來(lái)改變實(shí)際性能。其他階段,他們?nèi)炕蛘卟糠纸⒃谟布A(chǔ)上,因此要改變實(shí)現(xiàn)過(guò)程會(huì)非常困難。
  • 正因應(yīng)用程序階段是軟件方式實(shí)現(xiàn),因此不能像幾何和光柵化階段那樣繼續(xù)分為若干個(gè)子階段。但為了提高性能,該階段還是可以在幾個(gè)并行處理器上同時(shí)執(zhí)行。在CPU設(shè)計(jì)上,稱(chēng)這種形式為超標(biāo)量體系(superscalar)結(jié)構(gòu),因?yàn)樗梢栽谕浑A段同一時(shí)間做不同的幾件事情。
  • 應(yīng)用程序階段通常實(shí)現(xiàn)的方法有碰撞檢測(cè)、加速算法、輸入檢測(cè),動(dòng)畫(huà),力反饋以及紋理動(dòng)畫(huà),變換仿真、幾何變形,以及一些不在其他階段執(zhí)行的計(jì)算,如層次視錐裁剪等加速算法就可以在這里實(shí)現(xiàn)。
  • 應(yīng)用程序階段的主要任務(wù):在應(yīng)用程序階段的末端,將需要在屏幕上(具體形式取決于具體輸入設(shè)備)顯示出來(lái)繪制的幾何體(也就是繪制圖元,rendering primitives,如點(diǎn)、線(xiàn)、矩形等)輸入到繪制管線(xiàn)的下一個(gè)階段。
  • 對(duì)于被渲染的每一幀,應(yīng)用程序階段將攝像機(jī)位置,光照和模型的圖元輸出到管線(xiàn)的下一個(gè)主要階段——幾何階段。

?


2.3 幾何階段 The Geometry Stage

?

幾何階段主要負(fù)責(zé)大部分多邊形操作和頂點(diǎn)操作。可以將這個(gè)階段進(jìn)一步劃分成如下幾個(gè)功能階段:

  • 模型視點(diǎn)變換Model & View Transform
  • 頂點(diǎn)著色Vertex Shading
  • 投影 Projection
  • 裁剪 Clipping
  • 屏幕映射Screen Mapping

?

如圖2.3所示。

原書(shū)圖2.3 幾何階段細(xì)分為的功能階段管線(xiàn)

?

需要注意:

  • 根據(jù)具體實(shí)現(xiàn),這些階段可以和管線(xiàn)階段等同,也可以不等同。在一些情況下,一系列連續(xù)的功能階段可以形成單個(gè)管線(xiàn)階段(和其他管線(xiàn)階段并行運(yùn)行)。在另外情況下,一個(gè)功能階段可以劃分成其他更細(xì)小的管線(xiàn)階段。
  • 幾何階段執(zhí)行的是計(jì)算量非常高的任務(wù),在只有一個(gè)光源的情況下,每個(gè)頂點(diǎn)大約需要100次左右的精確的浮點(diǎn)運(yùn)算操作。

?

?

2.3.1 模型和視圖變換 Model and View Transform

?

  • 在屏幕上的顯示過(guò)程中,模型通常需要變換到若干不同的空間或坐標(biāo)系中。模型變換的變換對(duì)象一般是模型的頂點(diǎn)和法線(xiàn)。物體的坐標(biāo)稱(chēng)為模型坐標(biāo)。世界空間是唯一的,所有的模型經(jīng)過(guò)變換后都位于同一個(gè)空間中。
  • 不難理解,應(yīng)該僅對(duì)相機(jī)(或者視點(diǎn))可以看到的模型進(jìn)行繪制。而相機(jī)在世界空間中有一個(gè)位置方向,用來(lái)放置和校準(zhǔn)相機(jī)。
  • 為了便于投影和裁剪,必須對(duì)相機(jī)和所有的模型進(jìn)行視點(diǎn)變換。變換的目的就是要把相機(jī)放在原點(diǎn),然后進(jìn)行視點(diǎn)校準(zhǔn),使其朝向Z軸負(fù)方向,y軸指向上方,x軸指向右邊。在視點(diǎn)變換后,實(shí)際位置和方向就依賴(lài)于當(dāng)前的API。我們稱(chēng)上述空間為相機(jī)空間或者觀察空間。


下圖顯示了視點(diǎn)變換對(duì)相機(jī)和模型的影響。


原書(shū)圖2.4 在左圖中,攝像機(jī)根據(jù)用戶(hù)指定的位置進(jìn)行放置和定位。在右圖中,視點(diǎn)變換從原點(diǎn)沿著Z軸負(fù)方向?qū)ο鄼C(jī)重新定位,這樣可以使裁剪和投影操作更簡(jiǎn)單、更快速。可視范圍是一個(gè)平截椎體,因此可以認(rèn)為它是透視模式。

?

【總結(jié)】模型和視圖變換階段分為模型變換和視圖變換。模型變換的目的是將模型變換到適合渲染的空間當(dāng)中,而視圖變換的目的是將攝像機(jī)放置于坐標(biāo)原點(diǎn),方便后續(xù)步驟的操作。

?



2.3.2 頂點(diǎn)著色 Vertex Shading



為了產(chǎn)生逼真的場(chǎng)景,渲染形狀和位置是遠(yuǎn)遠(yuǎn)不夠的,我們需要對(duì)物體的外觀進(jìn)行建模。而物體經(jīng)過(guò)建模,會(huì)得到對(duì)包括每個(gè)對(duì)象的材質(zhì),以及照射在對(duì)象上的任何光源的效果在內(nèi)的一些描述。且光照和材質(zhì)可以用任意數(shù)量的方式,從簡(jiǎn)單的顏色描述到復(fù)雜的物理描述來(lái)模擬。

確定材質(zhì)上的光照效果的這種操作被稱(chēng)為著色(shading),著色過(guò)程涉及在對(duì)象上的各個(gè)點(diǎn)處計(jì)算著色方程(shading equation)。通常,這些計(jì)算中的一些在幾何階段期間在模型的頂點(diǎn)上執(zhí)行(vertex shading),而其他計(jì)算可以在每像素光柵化(per-pixel rasterization)期間執(zhí)行。可以在每個(gè)頂點(diǎn)處存儲(chǔ)各種材料數(shù)據(jù),諸如點(diǎn)的位置,法線(xiàn),顏色或計(jì)算著色方程所需的任何其它數(shù)字信息。頂點(diǎn)著色的結(jié)果(其可以是顏色,向量,紋理坐標(biāo)或任何其他種類(lèi)的陰著色數(shù)據(jù))計(jì)算完成后,會(huì)被發(fā)送到光柵化階段以進(jìn)行插值操作。

通常,著色計(jì)算通常認(rèn)為是在世界空間中進(jìn)行的。在實(shí)踐中,有時(shí)需要將相關(guān)實(shí)體(諸如相機(jī)和光源)轉(zhuǎn)換到一些其它空間(諸如模型或觀察空間)并在那里執(zhí)行計(jì)算,也可以得到正確的結(jié)果。

這是因?yàn)槿绻^(guò)程中所有的實(shí)體變換到了相同的空間,著色計(jì)算中需要的諸如光源,相機(jī)和模型之間的相對(duì)關(guān)系是不會(huì)變的。

?

【總結(jié)】頂點(diǎn)著色階段的目的在于確定模型上頂點(diǎn)處材質(zhì)的光照效果。




2.3.3 投影 Projection


在光照處理之后,渲染系統(tǒng)就開(kāi)始進(jìn)行投影操作,即將視體變換到一個(gè)對(duì)角頂點(diǎn)分別是(-1,-1,-1)和(1,1,1)單位立方體(unit cube)內(nèi),這個(gè)單位立方體通常也被稱(chēng)為規(guī)范立方體(Canonical View Volume,CVV)。

目前,主要有兩種投影方法,即:

  • 正交投影(orthographic projection,或稱(chēng)parallel projection)。
  • 透視投影(perspective projection)。

?

如下圖所示。

?

原書(shū)圖2.5 左邊為正交投影,右邊為透視投影

?

兩種投影方式的主要異同點(diǎn):

  • 正交投影。正交投影的可視體通常是一個(gè)矩形,正交投影可以把這個(gè)視體變換為單位立方體。正交投影的主要特性是平行線(xiàn)在變換之后彼此之間仍然保持平行,這種變換是平移與縮放的組合。
  • 透視投影。相比之下,透視投影比正交投影復(fù)雜一些。在這種投影中,越遠(yuǎn)離攝像機(jī)的物體,它在投影后看起來(lái)越小。更進(jìn)一步來(lái)說(shuō),平行線(xiàn)將在地平線(xiàn)處會(huì)聚。透視投影的變換其實(shí)就是模擬人類(lèi)感知物體的方式。
  • 正交投影和透視投影都可以通過(guò)4 x 4的矩陣來(lái)實(shí)現(xiàn),在任何一種變換之后,都可以認(rèn)為模型位于歸一化處理之后的設(shè)備坐標(biāo)系中。

?

雖然這些矩陣變換是從一個(gè)可視體變換到另一個(gè),但它們?nèi)员环Q(chēng)為投影,因?yàn)樵谕瓿娠@示后,Z坐標(biāo)將不會(huì)再保存于的得到的投影圖片中。通過(guò)這樣的投影方法,就將模型從三維空間投影到了二維的空間中。

?

【總結(jié)】投影階段就是將模型從三維空間投射到了二維的空間中的過(guò)程。


?


2.3.4 ?裁剪 Clipping

?

只有當(dāng)圖元完全或部分存在于視體(也就是上文的規(guī)范立方體,CVV)內(nèi)部的時(shí)候,才需要將其發(fā)送到光柵化階段,這個(gè)階段可以把這些圖元在屏幕上繪制出來(lái)。

不難理解,一個(gè)圖元相對(duì)視體內(nèi)部的位置,分為三種情況:完全位于內(nèi)部、完全位于外部、部分位于內(nèi)部。所以就要分情況進(jìn)行處理:

  • 當(dāng)圖元完全位于視體內(nèi)部,那么它可以直接進(jìn)行下一個(gè)階段。
  • 當(dāng)圖元完全位于視體外部,不會(huì)進(jìn)入下一個(gè)階段,可直接丟棄,因?yàn)樗鼈儫o(wú)需進(jìn)行渲染。
  • 當(dāng)圖元部分位于視體內(nèi)部,則需要對(duì)那些部分位于視體內(nèi)的圖元進(jìn)行裁剪處理。


對(duì)部分位于視體內(nèi)部的圖元進(jìn)行裁剪操作,這就是裁剪過(guò)程存在的意義。裁剪過(guò)程見(jiàn)下圖。

原書(shū)圖2.6 投影變換后,只對(duì)單位立方體內(nèi)的圖元(相應(yīng)的是視錐內(nèi)可見(jiàn)圖元)繼續(xù)進(jìn)行處理,因此,將單位立方體之外的圖元剔除掉,保留單位立方體內(nèi)部的圖元,同時(shí)沿著單位立方體將與單位立方體相交的圖元裁剪掉,因此,就會(huì)產(chǎn)生新的圖元,同時(shí)舍棄舊的圖元。

?

【總結(jié)】裁剪階段的目的,就是對(duì)部分位于視體內(nèi)部的圖元進(jìn)行裁剪操作。

?



2.3.5 屏幕映射 Screen Mapping


只有在視體內(nèi)部經(jīng)過(guò)裁剪的圖元,以及之前完全位于視體內(nèi)部的圖元,才可以進(jìn)入到屏幕映射階段。進(jìn)入到這個(gè)階段時(shí),坐標(biāo)仍然是三維的(但顯示狀態(tài)在經(jīng)過(guò)投影階段后已經(jīng)成了二維),每個(gè)圖元的x和y坐標(biāo)變換到了屏幕坐標(biāo)系中,屏幕坐標(biāo)系連同z坐標(biāo)一起稱(chēng)為窗口坐標(biāo)系。

?

假定在一個(gè)窗口里對(duì)場(chǎng)景進(jìn)行繪制,窗口的最小坐標(biāo)為(x1,y1),最大坐標(biāo)為(x2,y2),其中x1<x2,y1<y2。屏幕映射首先進(jìn)行平移,隨后進(jìn)行縮放,在映射過(guò)程中z坐標(biāo)不受影響。新的x和y坐標(biāo)稱(chēng)為屏幕坐標(biāo)系,與z坐標(biāo)一起(-1≦ z ≦ 1)進(jìn)入光柵化階段。如下圖:

?

原書(shū)圖2.8 經(jīng)過(guò)投影變換,圖元全部位于單位立方體之內(nèi),而屏幕映射主要目的就是找到屏幕上對(duì)應(yīng)的坐標(biāo)

?

屏幕映射階段的一個(gè)常見(jiàn)困惑是整型和浮點(diǎn)型的點(diǎn)值如何與像素坐標(biāo)(或紋理坐標(biāo))進(jìn)行關(guān)聯(lián)。可以使用Heckbert[書(shū)后參考文獻(xiàn)第520篇]的策略,用一個(gè)轉(zhuǎn)換公式進(jìn)行解決。

?

【總結(jié)】屏幕映射階段的主要目的,就是將之前步驟得到的坐標(biāo)映射到對(duì)應(yīng)的屏幕坐標(biāo)系上。

?

?


2.4 光柵化階段 The Rasterizer Stage


給定經(jīng)過(guò)變換和投影之后的頂點(diǎn),顏色以及紋理坐標(biāo)(均來(lái)自于幾何階段),給每個(gè)像素(Pixel)正確配色,以便正確繪制整幅圖像。這個(gè)過(guò)個(gè)過(guò)程叫光珊化(rasterization)或掃描變換(scan conversion),即從二維頂點(diǎn)所處的屏幕空間(所有頂點(diǎn)都包含Z值即深度值,及各種與相關(guān)的著色信息)到屏幕上的像素的轉(zhuǎn)換。

與幾何階段相似,該階段細(xì)分為幾個(gè)功能階段:

?

  • 三角形設(shè)定(Triangle Setup)階段
  • 三角形遍歷(Triangle Traversal)階段
  • ?像素著色(Pixel Shading)階段
  • ?融合(Merging)階段

?

?

如下圖所示:

?

原書(shū)圖2.8 ?光柵化階段一般細(xì)分為三角形設(shè)定,三角形遍歷,像素著色和融合四個(gè)子階段。

?

?

2.4.1 三角形設(shè)定 Triangle Setup


三角形設(shè)定階段主要用來(lái)計(jì)算三角形表面的差異和三角形表面的其他相關(guān)數(shù)據(jù)。該數(shù)據(jù)主要用于掃描轉(zhuǎn)換(scan conversion),以及由幾何階段處理的各種著色數(shù)據(jù)的插值操作所用。 該過(guò)程在專(zhuān)門(mén)為其設(shè)計(jì)的硬件上執(zhí)行。

?



2.4.2 三角形遍歷 Triangle Traversal


在三角形遍歷階段將進(jìn)行逐像素檢查操作,檢查該像素處的像素中心是否由三角形覆蓋,而對(duì)于有三角形部分重合的像素,將在其重合部分生成片段(fragment)。

找到哪些采樣點(diǎn)或像素在三角形中的過(guò)程通常叫三角形遍歷(TriangleTraversal)或掃描轉(zhuǎn)換(scan conversion)。每個(gè)三角形片段的屬性均由三個(gè)三角形頂點(diǎn)的數(shù)據(jù)插值而生成(在第五章會(huì)有講解)。這些屬性包括片段的深度,以及來(lái)自幾何階段的著色數(shù)據(jù)。

?

【總結(jié)】找到哪些采樣點(diǎn)或像素在三角形中的過(guò)程通常叫三角形遍歷(TriangleTraversal)或掃描轉(zhuǎn)換(scan conversion)。

?

?


2.4.3 像素著色 Pixel Shading

?

所有逐像素的著色計(jì)算都在像素著色階段進(jìn)行,使用插值得來(lái)的著色數(shù)據(jù)作為輸入,輸出結(jié)果為一種或多種將被傳送到下一階段的顏色信息。紋理貼圖操作就是在這階段進(jìn)行的。

?

像素著色階段是在可編程GPU內(nèi)執(zhí)行的,在這一階段有大量的技術(shù)可以使用,其中最常見(jiàn),最重要的技術(shù)之一就是紋理貼圖(Texturing)。紋理貼圖在書(shū)的第六章會(huì)詳細(xì)講到。簡(jiǎn)單來(lái)說(shuō),紋理貼圖就是將指定圖片“貼”到指定物體上的過(guò)程。而指定的圖片可以是一維,二維,或者三維的,其中,自然是二維圖片最為常見(jiàn)。如下圖所示:

?

?

原書(shū)圖2.9 ?左上角為一沒(méi)有紋理貼圖的飛龍模型。左下角為一貼上圖像紋理的飛龍。右圖為所用的紋理貼圖。


【總結(jié)】像素著色階段的主要目的是計(jì)算所有需逐像素操作的過(guò)程。

?



2.4.4 融合 Merging


每個(gè)像素的信息都儲(chǔ)存在顏色緩沖器中,而顏色緩沖器是一個(gè)顏色的矩陣列(每種顏色包含紅、綠、藍(lán)三個(gè)分量)。融合階段的主要任務(wù)是合成當(dāng)前儲(chǔ)存于緩沖器中的由之前的像素著色階段產(chǎn)生的片段顏色。不像其它著色階段,通常運(yùn)行該階段的GPU子單元并非完全可編程的,但其高度可配置,可支持多種特效。

?

此外,這個(gè)階段還負(fù)責(zé)可見(jiàn)性問(wèn)題的處理。這意味著當(dāng)繪制完整場(chǎng)景的時(shí)候,顏色緩沖器中應(yīng)該還包含從相機(jī)視點(diǎn)處可以觀察到的場(chǎng)景圖元。對(duì)于大多數(shù)圖形硬件來(lái)說(shuō),這個(gè)過(guò)程是通過(guò)Z緩沖(也稱(chēng)深度緩沖器)算法來(lái)實(shí)現(xiàn)的。Z緩沖算法非常簡(jiǎn)單,具有O(n)復(fù)雜度(n是需要繪制的像素?cái)?shù)量),只要對(duì)每個(gè)圖元計(jì)算出相應(yīng)的像素z值,就可以使用這種方法,大概內(nèi)容是:

Z緩沖器器和顏色緩沖器形狀大小一樣,每個(gè)像素都存儲(chǔ)著一個(gè)z值,這個(gè)z值是從相機(jī)到最近圖元之間的距離。每次將一個(gè)圖元繪制為相應(yīng)像素時(shí),需要計(jì)算像素位置處圖元的z值,并與同一像素處的z緩沖器內(nèi)容進(jìn)行比較。如果新計(jì)算出的z值,遠(yuǎn)遠(yuǎn)小于z緩沖器中的z值,那么說(shuō)明即將繪制的圖元與相機(jī)的距離比原來(lái)距離相機(jī)最近的圖元還要近。這樣,像素的z值和顏色就由當(dāng)前圖元對(duì)應(yīng)的值和顏色進(jìn)行更新。反之,若計(jì)算出的z值遠(yuǎn)遠(yuǎn)大于z緩沖器中的z值,那么z緩沖器和顏色緩沖器中的值就無(wú)需改變。

?

上面剛說(shuō)道,顏色緩沖器用來(lái)存儲(chǔ)顏色,z緩沖器用來(lái)存儲(chǔ)每個(gè)像素的z值,還有其他緩沖器可以用來(lái)過(guò)濾和捕獲片段信息。

  • 比如alpha通道(alpha channel)和顏色緩沖器聯(lián)系在一起可以存儲(chǔ)一個(gè)與每個(gè)像素相關(guān)的不透明值。可選的alpha測(cè)試可在深度測(cè)試執(zhí)行前在傳入片段上運(yùn)行。片段的alpha值與參考值作某些特定的測(cè)試(如等于,大于等),如果片斷未能通過(guò)測(cè)試,它將不再進(jìn)行進(jìn)一步的處理。alpha測(cè)試經(jīng)常用于不影響深度緩存的全透明片段(見(jiàn)6.6節(jié))的處理。
  • 模板緩沖器(stencil buffer)是用于記錄所呈現(xiàn)圖元位置的離屏緩存。每個(gè)像素通常與占用8個(gè)位。圖元可使用各種方法渲染到模板緩沖器中,而緩沖器中的內(nèi)容可以控制顏色緩存和Z緩存的渲染。舉個(gè)例子,假設(shè)在模版緩沖器中繪制出了一個(gè)實(shí)心圓形,那么可以使用一系列操作符來(lái)將后續(xù)的圖元僅在圓形所出現(xiàn)的像素處繪制,類(lèi)似一個(gè)mask的操作。模板緩沖器是制作特效的強(qiáng)大工具。而在管線(xiàn)末端的所有這些功能都叫做光柵操作(raster operations ,ROP)或混合操作(blend?? operations)。
  • 幀緩沖器(frame buffer)通常包含一個(gè)系統(tǒng)所具有的所有緩沖器,但有時(shí)也可以認(rèn)為是顏色緩沖器和z緩沖器的組合。
  • 累計(jì)緩沖器(accumulation buffer),是1990年,Haeberli和Akeley提出的一種緩沖器,是對(duì)幀緩沖器的補(bǔ)充。這個(gè)緩沖器可以用一組操作符對(duì)圖像進(jìn)行累積。例如,為了產(chǎn)生運(yùn)動(dòng)模糊(motion blur.,可以對(duì)一系列物體運(yùn)動(dòng)的圖像進(jìn)行累積和平均。此外,其他的一些可產(chǎn)生的效果包括景深(e depth of field),反走樣(antialiasing)和軟陰影(soft shadows)等。

?

而當(dāng)圖元通過(guò)光柵化階段之后,從相機(jī)視點(diǎn)處看到的東西就可以在熒幕上顯示出來(lái)。為了避免觀察者體驗(yàn)到對(duì)圖元進(jìn)行處理并發(fā)送到屏幕的過(guò)程,圖形系統(tǒng)一般使用了雙緩沖(double buffering)機(jī)制,這意味著屏幕繪制是在一個(gè)后置緩沖器(backbuffer)中以離屏的方式進(jìn)行的。一旦屏幕已在后置緩沖器中繪制,后置緩沖器中的內(nèi)容就不斷與已經(jīng)在屏幕上顯示過(guò)的前置緩沖器中的內(nèi)容進(jìn)行交換。注意,只有當(dāng)不影響顯示的時(shí)候,才進(jìn)行交換。

?

【總結(jié)】融合階段的主要任務(wù)是合成當(dāng)前儲(chǔ)存于緩沖器中的由之前的像素著色階段產(chǎn)生的片段顏色。此外,融合階段還負(fù)責(zé)可見(jiàn)性問(wèn)題(Z緩沖相關(guān))的處理。

?


2.5 管線(xiàn)縱覽與總結(jié)


在概念上可以將圖形渲染管線(xiàn)分為三個(gè)階段:應(yīng)用程序階段、幾何階段、光柵化階段。

這樣的管線(xiàn)結(jié)構(gòu)是API和圖形硬件十年來(lái)以實(shí)時(shí)渲染應(yīng)用程序?yàn)槟繕?biāo)進(jìn)行演化的結(jié)果。需要注意的是這個(gè)進(jìn)化不僅僅是在我們所說(shuō)的渲染管線(xiàn)中,離線(xiàn)渲染管線(xiàn)(offline rendering pipelines)也是另一種進(jìn)化的路徑。且電影產(chǎn)品的渲染通常使用微多邊形管線(xiàn)(micropolygon pipelines)。而學(xué)術(shù)研究和預(yù)測(cè)渲染的(predictive rendering)應(yīng)用,比如建筑重建(architectural previsualization)通常采用的是光線(xiàn)跟蹤渲染器(ray tracing renderers)

?





三、本章內(nèi)容提煉總結(jié)



以下是對(duì)《Real Time Rendering 3rd》第二章“圖形渲染管線(xiàn)”內(nèi)容的文字版概括總結(jié):

?

圖形渲染管線(xiàn)的主要功能就是決定在給定虛擬相機(jī)、三維物體、光源、照明模式,以及紋理等諸多條件的情況下,生成或繪制一幅二維圖像的過(guò)程。在概念上可以將圖形渲染管線(xiàn)分為三個(gè)階段:應(yīng)用程序階段、幾何階段、光柵化階段。

?



1、應(yīng)用程序階段



應(yīng)用程序階段的主要任務(wù),是將需要繪制圖元輸入到繪制管線(xiàn)的下一個(gè)階段,以及實(shí)現(xiàn)一些軟件方式來(lái)實(shí)現(xiàn)的方法。主要方法有碰撞檢測(cè)、加速算法、輸入檢測(cè),動(dòng)畫(huà),力反饋以及紋理動(dòng)畫(huà),變換仿真、幾何變形,以及一些不在其他階段執(zhí)行的計(jì)算,如層次視錐裁剪等加速算法。

對(duì)于被渲染的每一幀,應(yīng)用程序階段將攝像機(jī)位置,光照和模型的圖元輸出到管線(xiàn)的下一個(gè)主要階段,即幾何階段。

?



2、幾何階段


幾何階段主要負(fù)責(zé)大部分多邊形操作和頂點(diǎn)操作,可以將這個(gè)階段進(jìn)一步劃分成如下幾個(gè)功能階段:模型視點(diǎn)變換、頂點(diǎn)著色、投影、裁剪、屏幕映射。這些功能階段的主要功能如下:

  • 【模型和視圖變換階段】:模型變換的目的是將模型變換到適合渲染的空間當(dāng)中,而視圖變換的目的是將攝像機(jī)放置于坐標(biāo)原點(diǎn),方便后續(xù)步驟的操作。
  • 【頂點(diǎn)著色階段】:頂點(diǎn)著色的目的在于確定模型上頂點(diǎn)處材質(zhì)的光照效果。
  • 【投影階段】:投影階段就是將模型從三維空間投射到了二維的空間中的一個(gè)過(guò)程。投影階段也可以理解為將視體變換到一個(gè)對(duì)角頂點(diǎn)分別是(-1,-1,-1)和(1,1,1)單位立方體內(nèi)的過(guò)程 。
  • 【裁剪階段】裁剪階段的目的,就是對(duì)部分位于視體內(nèi)部的圖元進(jìn)行裁剪操作。
  • 【屏幕映射階段】屏幕映射階段的主要目的,就是將之前步驟得到的坐標(biāo)映射到對(duì)應(yīng)的屏幕坐標(biāo)系上。

?在幾何階段,首先,對(duì)模型的頂點(diǎn)和法線(xiàn)進(jìn)行矩陣變換,并將模型置于觀察空間中(模型和視圖變換),然后,根據(jù)材質(zhì)、紋理、以及光源屬性進(jìn)行頂點(diǎn)光照的計(jì)算(頂點(diǎn)著色階段),接著,將該模型投影變換到一個(gè)單位立方體內(nèi),并舍棄所有立方體之外的圖元(投影階段),而為了得到所有位于立方體內(nèi)部的圖元,接下來(lái)對(duì)與單位立方體相交的圖元進(jìn)行裁剪(裁剪階段),然后將頂點(diǎn)映射到屏幕上的窗口中(屏幕映射階段)。在對(duì)每個(gè)多邊形執(zhí)行完這些操作后,將最終數(shù)據(jù)傳遞到光柵,這樣就來(lái)到了管線(xiàn)中的最后一個(gè)階段,光柵化階段。

?



3、光柵化階段


給定經(jīng)過(guò)變換和投影之后的頂點(diǎn),顏色以及紋理坐標(biāo)(均來(lái)自于幾何階段),給每個(gè)像素正確配色,以便正確繪制整幅圖像。這個(gè)過(guò)個(gè)過(guò)程叫光柵化,即從二維頂點(diǎn)所處的屏幕空間(所有頂點(diǎn)都包含Z值即深度值,及各種與相關(guān)的著色信息)到屏幕上的像素的轉(zhuǎn)換。光柵化階段可分為三角形設(shè)定階段、三角形遍歷階段、像素著色階段、融合階段。這些功能階段的主要功能如下:

  • 【三角形設(shè)定階段】三角形設(shè)定階段主要用來(lái)計(jì)算三角形表面的差異和三角形表面的其他相關(guān)數(shù)據(jù)。
  • 【三角形遍歷階段】找到哪些采樣點(diǎn)或像素在三角形中的過(guò)程通常叫三角形遍歷。
  • 【像素著色階段】像素著色階段的主要目的是計(jì)算所有需逐像素計(jì)算操作的過(guò)程。
  • 【融合階段】融合階段的主要任務(wù)是合成當(dāng)前儲(chǔ)存于緩沖器中的由之前的像素著色階段產(chǎn)生的片段顏色。此外,融合階段還負(fù)責(zé)可見(jiàn)性問(wèn)題(Z緩沖相關(guān))的處理。

?

在光柵化階段,所有圖元會(huì)被光柵化,進(jìn)而轉(zhuǎn)換為屏幕上的像素。首先,計(jì)算三角形表面的差異和三角形表面的其他相關(guān)數(shù)據(jù)(三角形設(shè)定階段),然后,找到哪些采樣點(diǎn)或像素在三角形中(三角形遍歷階段),接著計(jì)算所有需逐像素計(jì)算操作(像素著色階段),然后,合成當(dāng)前儲(chǔ)存于緩沖器中的由之前的像素著色階段產(chǎn)生的片段顏色,可見(jiàn)性問(wèn)題可通過(guò)Z緩存算法解決,隨同的還有可選的alpha測(cè)試和模版測(cè)試(融合階段)。所有對(duì)像依次處理,而最后的圖像顯示在屏幕上。



The end.PS:從早上9點(diǎn)寫(xiě)到晚上9點(diǎn),好累...


圖片來(lái)自《地平線(xiàn):黎明時(shí)分》。


總結(jié)

以上是生活随笔為你收集整理的图形学渲染管线的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。