裁剪是個(gè)很大的概念,裁剪包括了視錐體裁剪(應(yīng)用程序階段)、視口裁剪(圖元裝配——幾何階段的最后一步)、背面剔除(光柵化階段)、遮擋剔除(光柵化階段)。
1.視錐體裁剪
視錐裁剪算法是在應(yīng)用程序階段執(zhí)行的。虛擬攝像機(jī)制定了場景對觀察者可見的部分,即我們將依據(jù)哪部分3D場景來創(chuàng)建2D圖像。
2. 視口裁剪
幾何階段處理結(jié)束后,送到光柵化階段的是一堆三角形面片,所以中幾何階段中需要對頂點(diǎn)進(jìn)行圖元裝配。所謂的圖元裝配,即根據(jù)頂點(diǎn)原始的連接關(guān)系,還原出模型的網(wǎng)格結(jié)構(gòu)。網(wǎng)格由頂點(diǎn)和索引組成,在之前的流水線中是對頂點(diǎn)的處理,而在這階段是根據(jù)索引將頂點(diǎn)連接中一起,組成線、面單元。然后對超出視口外的三角形進(jìn)行裁剪(視口裁剪)。
3.背面剔除(光柵化階段)
渲染的對象都是三角面,有相機(jī),就是有正面和反面。正面可以被看見,反面看不見,就需要渲染,就叫背面剔除。
4.遮擋裁剪
在cry引擎中的遮擋算法,使用的是軟件光柵化,大致流程就是,在編輯器中放置一些正交的長方體作為遮擋體,在渲染時(shí),每幀都在CPU上面光柵化這些遮擋體(當(dāng)然是在分辨率比較小的渲染目標(biāo)上進(jìn)行),然后對遠(yuǎn)處物體進(jìn)行查詢。
現(xiàn)代GPU中運(yùn)用了Early-Z的技術(shù),在Vertex階段和Fragment階段之間(光柵化之后,fragment之前)進(jìn)行一次深度測試,如果深度測試失敗,就不必進(jìn)行fragment階段的計(jì)算了,因此在性能上會有很大的提升。但是最終的ZTest仍然需要進(jìn)行,以保證最終的遮擋關(guān)系結(jié)果正確。
二、遮擋剔除的方法
1. 傳統(tǒng)的PVS光線投射子劃分
將場景內(nèi)相交的多邊形進(jìn)行切割,保證場景內(nèi)的三角形沒有相交(如bsp),將屏幕分成8x8的像素網(wǎng)格,做8x8條從視點(diǎn)開始的射線出去即可,這樣做能保證比較高效。然后對光線進(jìn)行碰撞檢測看光線落到哪個(gè)多邊形上。如果相鄰射線沒有落在同一個(gè)三角形上,那么以這兩條射線的中點(diǎn)再做出一條新的射線出去,直到相鄰射線落在相同的三角形上或者同一個(gè)像素上。這樣相交多邊形中圍繞每束光線的多邊形基本都能被繪制了。性能很好但存在一定誤差,兩束光線中間極小的多邊形可能被錯(cuò)過。
2. 光柵化線段遮擋法
不同于光柵化z,光柵化z計(jì)算量大些,這只是將待渲染多邊形光柵化為有左右兩個(gè)端點(diǎn)的水平掃描線,然后與同一行的掃描線進(jìn)行比較和切割,只保留最靠近攝像機(jī)的線段,如果待繪制線段在該像素行比較下來全部被其它更靠近攝像機(jī)的線段覆蓋了,則該行不可見,三角形所有行不可見則該包圍體不可見。光柵化z適合gpu,這個(gè)方法更適合cpu,特別適合分辨率很高而多邊形數(shù)量不算太高的時(shí)候,優(yōu)化方法是x軸均勻分為8個(gè)區(qū)間,這樣可以迅速的定位。
3. 八叉樹簡易PVS
說道簡易版本的 PVS,其實(shí)就是八叉樹了,這是很多3D引擎的偷懶版本實(shí)現(xiàn):八叉樹組織空間,下面接 BSP, Portal,地形四叉樹lod,先判斷頂層包圍盒在不在視錐,不再就直接退出了,再的話,遞歸八個(gè)子節(jié)點(diǎn)的包圍盒再不再視錐,不再就直接剔除,再的話再在該節(jié)點(diǎn)遞歸下去
Untiiy5中的遮擋剔除使用的是Umbra的解決方案,Umbra也在虛幻3和虛幻4中作為插件來使用。
三、討論的兩個(gè)問答題
1.在Unity中遮擋剔除在渲染過程中,處于哪個(gè)階段?
遮擋剔除一般在光柵化階段進(jìn)行。
關(guān)于遮擋剔除,開始的時(shí)候覺得應(yīng)該在應(yīng)用階段進(jìn)行,只需要一個(gè)八叉樹的搜素,但是這個(gè)需要相機(jī)來判斷,其實(shí)相機(jī)作為為虛擬相機(jī),只需要給對象做標(biāo)記即可。
在官方文檔中說,遮擋剔除是需要在場景中建立一個(gè)虛擬相機(jī),來判斷是否可見。準(zhǔn)備好后,unity確保只有可見的對象送去渲染 。
unity中的遮擋裁剪以Cell作為基礎(chǔ)單元,每個(gè)cell對應(yīng)一個(gè)二叉樹。unity中使用了兩顆樹,一棵對應(yīng)靜態(tài)對象,一棵對應(yīng)動態(tài)對象。
需要注意的是,對象若太大,對遮擋剔除來說,意義不大,太小構(gòu)建時(shí)間太長,頂點(diǎn)數(shù)也多,造成過多的drawCall,總之,注意平衡!沒有放之四海而皆準(zhǔn)的方法。
2.裁剪,相機(jī)(視錐體)的裁剪和背面剔除,這個(gè)是分別在不同階段。
視錐裁剪一般在應(yīng)用程序階段進(jìn)行, 這個(gè)沒有問題。而背面裁剪剔除一般在光柵化階段進(jìn)行。
背面剔除在光柵化階段進(jìn)行,在Vertex Shader 之后,在Fragment Shader片元著色器之前。
-
裁剪
+關(guān)注
關(guān)注
0文章
8瀏覽量
7151 -
PVS
+關(guān)注
關(guān)注
0文章
4瀏覽量
18826
原文標(biāo)題:三維渲染中的裁剪總匯
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
如何運(yùn)用LabVIEW中的三維散點(diǎn)控件
什么讓三維掃描數(shù)據(jù)栩栩如生
三維快速建模技術(shù)與三維掃描建模的應(yīng)用
廣西掃描服務(wù)三維檢測三維掃描儀
三維設(shè)計(jì)應(yīng)用案例
三維立體數(shù)字沙盤是是什么?
上海黃浦三維媒體動畫技術(shù)
廣州三維動畫制作流程(一)
基于掃描測量的三維人體模型
三維圖形引擎綜述

《三維聲編解碼及渲染》行業(yè)標(biāo)準(zhǔn)發(fā)布 三維菁彩聲將迎來更加穩(wěn)健繁榮的產(chǎn)業(yè)生態(tài)
RayDF:實(shí)時(shí)渲染!基于射線的三維重建新方法

泰來三維|文物三維掃描,文物三維模型怎樣制作

評論