陰影體技術(shù)介紹_第1頁
陰影體技術(shù)介紹_第2頁
陰影體技術(shù)介紹_第3頁
陰影體技術(shù)介紹_第4頁
陰影體技術(shù)介紹_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、陰影體技術(shù)介紹圖形相關(guān) 2008-08-26 22:29:14 閱讀48 評(píng)論0 字號(hào):大中小 轉(zhuǎn)自 前言:真實(shí)的游戲效果shadow volume 這個(gè)術(shù)語幾乎是隨著 DOOM3 的發(fā)布而成為FPS 玩家和圖形學(xué)愛好者談?wù)摰膶?duì)象的。雖然這個(gè)游戲還沒有上市,但是憑借 John Carmack 的傳奇經(jīng)歷以及 DOOM3發(fā)布的一些讓人驚訝的預(yù)覽圖片,我們?nèi)匀挥欣碛烧J(rèn)為它將會(huì)是 2004 年最熱門的 FPS 游戲之一。 id software向來都不吝惜為了達(dá)到最好的圖像效果而使用最先進(jìn)的渲染技術(shù) ,這曾經(jīng)使得玩家為了玩它開發(fā)的游戲而不得不掏光口袋里面的錢來升級(jí)電腦,不知道這次我們可以幸免嗎?自

2、DX9 發(fā)布以來,大家的注意力似乎都被 shader 吸引住了, BBS里面談?wù)摰脑掝}也總是離不開 shader based rendering ,前一段時(shí)間關(guān)于 GPU內(nèi)部精度的討論大有遮天蔽日之感,但其實(shí)和閃閃發(fā)光的金屬小球以及波光鱗鱗的水面比較,幾個(gè)簡(jiǎn)簡(jiǎn)單單的影子常常能帶給場(chǎng)景更多的真實(shí)感。也許這就是為什么DOOM3 能夠在多如牛毛的 FPS 游戲中脫穎而出的原因之一。陰影的實(shí)現(xiàn)方法有很多種,現(xiàn)在比較流行的主要是 shadow mapping 和shadow volume. 前者實(shí)現(xiàn)起來相對(duì)簡(jiǎn)單,可以發(fā)揮現(xiàn)在 GPU 可編程流水線的能力,但是由于先天不足,shadow mapping在處

3、理動(dòng)態(tài)光源/物體的時(shí)候開銷過大,經(jīng)常作為一種靜態(tài)場(chǎng)景中的廉價(jià)替代物。而 Shadow volume 的強(qiáng)項(xiàng)恰恰是 shadowmapping 的短處,像 DOOM3 這種大量運(yùn)用動(dòng)態(tài)光源,并且要對(duì)時(shí)刻都在運(yùn)動(dòng)中的物體投射陰影,shadow volume是現(xiàn)階段唯一的選擇。Shadow mapping 的原理: 一個(gè)物體之所以會(huì)處在陰影當(dāng)中,是由于在它和光源之間存在著遮蔽物,或者說遮蔽物離光源的距離比物體要近,這就是 shadow mapping 算法的基本原理。Pass1: 以光源為視點(diǎn),或者說在光源坐標(biāo)系下面對(duì)整個(gè)場(chǎng)景進(jìn)行渲染,目的是要得到一副所有物體相對(duì)于光源的 depth map (也就

4、是我們所說的shadow map ) , 也就是這副圖像中每個(gè)象素的值代表著場(chǎng)景里面離光源最近的 fragment 的深度值。由于這個(gè) pass中我們感興趣的只是象素的深度值,所以可以把所有的光照計(jì)算關(guān)掉,打開 z-test 和 z-write 的 render state 。Pass2: 將視點(diǎn)恢復(fù)到原來的正常位置,渲染整個(gè)場(chǎng)景,對(duì)每個(gè)象素計(jì)算它和光源的距離,然后將這個(gè)值和 depth map中相應(yīng)的值比較,以確定這個(gè)象素點(diǎn)是否處在陰影當(dāng)中。然后根據(jù)比較的結(jié)果,對(duì) shadowed fragment 和 lightedfragment 分別進(jìn)行不同的光照計(jì)算,這樣就可以得到陰影的效果了。從上

5、面的分析可以看出來,depth map的渲染只和光源的位置以及場(chǎng)景中物體的位置有關(guān),無論視點(diǎn)怎么運(yùn)動(dòng),只要光源和物體的相互位置關(guān)系不變,shadow map就可以被重復(fù)使用,因此對(duì)于沒有動(dòng)態(tài)光源的場(chǎng)景, shadow mapping 是很明智的一種選擇。除了上面提到的不能很好應(yīng)付動(dòng)態(tài)光源場(chǎng)景的限制之外,shadow mapping 還存在著所有使用 texture的場(chǎng)景面臨的共同問題鋸齒。根據(jù)采樣定理,只有紋理分辨率小于或者等于物體的實(shí)際分辨率時(shí)才不會(huì)失真,而當(dāng)一副很大的紋理被貼到尺寸比它小的物體上時(shí),會(huì)出現(xiàn)一個(gè) fragment 覆蓋多個(gè) texel 的情況,這時(shí)要準(zhǔn)確的再現(xiàn)這個(gè) fragm

6、ent 的顏色信息,就要綜合考慮所有被它覆蓋的texel 產(chǎn)生的影響,這就是各種紋理濾波方法最基本的原理。但是由于 depth map 是在不斷的變化當(dāng)中,所以不能像一般的紋理那樣把各個(gè)mip -map 事先計(jì)算好放到顯存里面。有一種利用 pixel shader 的方法對(duì) depth map 做 bilinearfiltering, 但是開銷很大,在現(xiàn)階段不具備實(shí)用意義。同樣的問題在紋理分辨率小于屏幕分辨率的時(shí)候仍然存在,這時(shí)多個(gè) fragment會(huì)被投射到同一個(gè) texel 上面,雖然從再現(xiàn)紋理的角度來說并不存在失真,但是由于多個(gè) fragment共用同一個(gè)紋理值,鋸齒問題還是存在。更糟糕

7、的是,沒有一種濾波技術(shù)可以從根本上解決這樣的鋸齒,因?yàn)閺臄?shù)學(xué)上講,人們不可能通過運(yùn)算來創(chuàng)造出比原始量更多 的信息。近年來,為了解決 shadow mapping 的鋸齒問題,人們做了很多努力,比較有前景的是 adaptive shadowmap(ASM) 和 perspective shadow map(PSM) 。兩者的基本原理都是在可能產(chǎn)生鋸齒的地方人為增加采樣率,使得一個(gè)fragment 至少對(duì)應(yīng)一個(gè) texel , 區(qū)別是 ASM 增加采樣率的地方是在 shadow 邊緣,而 PSM是在靠近視點(diǎn)的地方。修補(bǔ)一個(gè)本身存在缺陷的方法從數(shù)學(xué)上來說是缺乏美感的,正像 John Carmack

8、在 2002年8月的一封 email中所說:“ Shadow buffers makegood looking demos with controlled circumstances, but when you startusing them for a “real” application, you find that you need absolutelymassive resolution to get acceptable results for omni directionallights, and a lot of the artifacts need to be tweaked

9、on a per-lightbasis. While it is possible to do shadow buffers on GF1/radeon classhardware, without percentage closer filtering they look wretched. If wewere targeting only the newest hardware, shadow buffers would have abetter shot, but even then, they have more drawbacks than are commonlyappreciat

10、ed. ” 看起來似乎 John Carmack 找到了實(shí)現(xiàn)陰影更好的方法?讓我們來看看它究竟是什么。    Shadow volume 的原理:Shadow volume 這種算法第一次被提出是在Franklin C. Crow 在 1977 年寫的一篇論文 “SHADOW ALGORITHMS FOR COMPUTERGRAPHICS ”里。其基本原理是根據(jù)光源和遮蔽物的位置關(guān)系計(jì)算出場(chǎng)景中會(huì)產(chǎn)生陰影的區(qū)域( shadow volume),然后對(duì)所有物體進(jìn)行檢測(cè),以確定其會(huì)不會(huì)受陰影的影響。圖中的綠色物體就是所謂的遮蔽物,而灰色的區(qū)域就是 shadow vol

11、ume。只有處于 shadow volume 里面的物體才會(huì)受陰影的影響。  shadow volume的算法 現(xiàn)在清楚了 shadow volume 的基本原理,那么如何確定一個(gè)物體或者一個(gè)物體的某一部分處于 shadow volume 中呢?這就要用到 stencil buffer 的幫助了。z-pass 算法:z-pass 是 shadow volume 一開始的標(biāo)準(zhǔn)算法,用來確定某一個(gè)象素是否處于陰影當(dāng)中。其原理是:Pass1:eNABlez-buffer write ,渲染整個(gè)場(chǎng)景,得到關(guān)于所有物體的 depth map 。注意這里的 depth map 和 sh

12、adowmapping 里面的區(qū)別是 shadow volume 里面的 depth map 是以真實(shí)視點(diǎn)作為視點(diǎn)得到的,而 shadowmapping 里面的 depth map 是以光源為視點(diǎn)得到的。Pass2:disable z-buffer write , eNABlestencil buffer write, 然后渲染所有的 shadow volume 。對(duì)于 shadow volume 的 frontface( 既面對(duì)視點(diǎn)的這一面 ) ,如果 depth test 的結(jié)果是 pass, 那么和這個(gè)象素對(duì)應(yīng)的 stencil 值加一。如果depth test 的結(jié)果是 fail, s

13、tencil 值不變。而對(duì)于 shadow volume 的 back face(遠(yuǎn)離視點(diǎn)的一側(cè) ) ,如果 depth test 的結(jié)果是 fail, stencil 值減一,否則保持不變。用一句簡(jiǎn)單的話來概括 z-pass的算法就是從視點(diǎn)向物體引一條視線,當(dāng)這條射線進(jìn)入 shadow volume 的時(shí)候, stencil 值加一,而當(dāng)這條射線離開 shadowvolume 的時(shí)候,stencil 值減一。如果 stencil 值為零,則表示實(shí)現(xiàn)進(jìn)入和離開 shadow volume的次數(shù)相等,自然就表示物體不在 shadow volume 內(nèi)了。 Pass3:第二步完成以后,根據(jù)每個(gè)象素

14、的 stencil 值判斷其是否處于陰影當(dāng)中(如果 stencil 的值大于零,則這個(gè)象素在 shadow volume 內(nèi),否則在 shadow volume 的外面),然后據(jù)此繪制陰影效果。 在這副圖里面,視線三進(jìn)三出 shadow volume, 最后的 stencil 值為零,表示物體在 shadow volume 外,不受陰影的影響。這副圖里面視線三進(jìn)一出, stencil 值為 2 ,表示物體在 shadow volume 內(nèi),有陰影產(chǎn)生。 這副圖里面從視點(diǎn)到物體的視線中止于 shadow volume 前,也就是說所有的 z-test 都是 fail, 相應(yīng)的 stencil 值

15、為零,表示物體在陰影外面。z-pass 算法缺點(diǎn)及補(bǔ)救辦法 以上的討論都是基于視點(diǎn)在 shadow volume 外面的情況。在這個(gè)條件可以得到滿足的情況下,z-pass 算法工作的很好,不過一旦視點(diǎn)進(jìn)入到了 shadow volume 里面,z-pass 算法就會(huì)立即失效。 這副圖里面的視線二進(jìn)二出,按照 z-pass的算法,最后的 stencil 值為 0,表示物體在陰影外,可實(shí)際上物體是處于陰影內(nèi)的。錯(cuò)誤的原因就在于視點(diǎn)進(jìn)入到陰影內(nèi),使得視線失去了一次進(jìn)入 shadow volume的機(jī)會(huì),讓原本應(yīng)該是 1 的 stencil 值變成了 0 。 Z-Pass 這種錯(cuò)誤的行為可以從下圖中看

16、出 : 注意地下的影子Z-Fail 算法:Z-Fail 算法是 John Carmack,Bill Bilodeau 和 Mike Songy 各自獨(dú)立發(fā)明的,其目的就是解決視點(diǎn)進(jìn)入 shadow volume 后 z-pass 算法失效的問題。Pass1:eNABle z-write/z-test, 渲染整個(gè)場(chǎng)景,得到 depth map 。 ( 這一步和 z-pass 的完全一樣 ) Pass2:disable z-write, eNABlez-test/stencil-write 。渲染 shadow volume, 對(duì)于它的 back face ,如果 z-test 的結(jié)果是fail,

17、 stencil 值加一,如果 z-test 的結(jié)果是 pass, stencil 值不變。對(duì)于 front face, 如果z-test 的結(jié)果是 fail, stencil 值減 一 ,如果結(jié)果是 pass, stencil 值不變。圖中所有的 shadow volume 都處在 z-pass 的位置,因此 stencil 值不會(huì)改變。視點(diǎn)在 shadow volume 內(nèi)也沒有問題,最后 stencil 的值是 2, 表示物體在陰影內(nèi)。上面那個(gè) Z-Pass 無法處理的場(chǎng)景,用 Z-Fail 計(jì)算則可以得到正確的結(jié)果: 如何建立 shadow volume? shadow vo

18、lume的建立是整個(gè)算法里面最重要的部分,在 GPU 出現(xiàn)以前, shadow volume 的建立都是基于 CPU 的。隨著 GPU應(yīng)用的逐漸開展,人們又將 shadow volume 運(yùn)算移植到了 GPU上,不過后面一種方法需要對(duì)物體的幾何數(shù)據(jù)進(jìn)行預(yù)處理,下面就對(duì)兩種方法分別進(jìn)行解釋: CPU based method(基于CPU建立方法):想必熟悉 shadow volume 的朋友對(duì)silhouette edge 這個(gè)詞會(huì)很熟悉。它表示從光源的角度看物體所得到的輪廓線。 Shadow volume 就是由silhouette edge 擴(kuò)展到一定距離以外或者無窮遠(yuǎn)處得到的。 silho

19、uette edge的確定方法有很多種,基本思想就是找出那些被朝向相反 ( 一個(gè)面向光源,另一個(gè)背向光源 ) 的兩個(gè)三角形 ( 相對(duì)于光源來說 )所共享的邊,因?yàn)橹挥羞@樣的邊會(huì)最終成為 silhouette edge ,其他的邊在光源看來都在物體投影的內(nèi)部而不是邊緣。  這副圖是一個(gè)由 4 個(gè)三角形組成的多邊形,假設(shè)光源處在讀者頭部的位置,那么外圍的一圈實(shí)線就是所謂的 silhouette edge 。我們所要做的就是從原始數(shù)據(jù)里面將內(nèi)部多余的 4 條邊 ( 虛線 ) 去掉。具體實(shí)現(xiàn)是這樣:?  遍歷模型的所有三角形 ?  計(jì)算 dot3( light_direc

20、tion , triangle_normal ) 。用這個(gè)結(jié)果判斷三角形是面向光源 (dot3>0) 還是背向光源 (dot<0) 。 ?  對(duì)于面向光源的三角形,將所有的三條邊壓入一個(gè) 棧 ,和里面的邊進(jìn)行比較,如果發(fā)現(xiàn)重復(fù)的 (edge1 和 edge2) ,將這些邊刪除 ?  檢測(cè)過所有三角形的 所有邊 以后, 棧 里面剩下的 邊就是 當(dāng)前光源 / 物體位置下面的 silhouette edge. ?  根據(jù)光源方向 , 利用 CPU 或者 vertex shader 將這些 silhouette edge 投射出去形成 shadow volum

21、e. 值得一提的是,這種方法正是 DOOM3所采用的方案,但是其中有一個(gè)問題就是 silhouette edge是由光源和物體的相互位置確定的,也就是說這二者之間有一個(gè)的位置發(fā)生了變化, silhouette edge就要重新計(jì)算,更新的數(shù)據(jù)也要傳回顯卡才能渲染 shadow volume ,這對(duì) CPU 的計(jì)算能力以及 AGP的帶寬不能不說是一個(gè)不小的考驗(yàn)。 GPU based method(基于GPU建立方法):Vertex shader一出現(xiàn)人們就在思考能不能利用它來加速 shadow volume 的渲染速度。但即使是現(xiàn)在最先進(jìn)的 vertex shader 3.0也不具備創(chuàng)建新的幾何

22、物體的能力。簡(jiǎn)單點(diǎn)說 vertex shader 只能接受一個(gè)頂點(diǎn),修改這個(gè)頂點(diǎn)的屬性 ( 位置,顏色,紋理坐標(biāo),etc), 之后輸出這個(gè)頂點(diǎn)到光柵化部分,繼而進(jìn)行 pixel shader 運(yùn)算。碰到需要?jiǎng)?chuàng)建新頂點(diǎn)的地方,就只有依靠 CPU 直接操作vertex buffer 了。 另外一個(gè)方法就是事先把 shadow volume需要的空間留出來,然后再通過 vertex shader的運(yùn)算使之外形達(dá)到我們需要的樣子。這就好比我要存儲(chǔ)一串?dāng)?shù)據(jù),但又不很確定具體的規(guī)模是多大,只好事先分配一塊很大的區(qū)域,這樣不免會(huì)造成很大浪費(fèi),但也是不得以而為之。     由于物

23、體上的每條邊都有可能成為 silhouetteedge ,所以我們需要事先插入 degenerate quad( 上圖的紅色三角形 ), 這些 quad的面積為零,不作任何變換的話是不可見的,不會(huì)造成視覺瑕疵。但是在需要的地方,可以把這些 quad 拉伸成為 shadow volume 的側(cè)壁。顯然,插入冗余的頂點(diǎn)會(huì)造成極大的浪費(fèi)。因?yàn)榇蟛糠值倪呑罱K 并不會(huì)成為 silhouette edge ,也就是說插入的 degenerate quad是無用的。不過這樣做的好處是幾何數(shù)據(jù)只需要傳輸?shù)斤@卡一次,之后無論光源的位置在哪里,預(yù)處理過后的幾何體都可以用來生成 shadowvolume ,不像剛才

24、解釋過的方法那樣一旦光源和物體的相對(duì)位置發(fā)生變化,就需要重新用 CPU 計(jì)算 silhouette edge,之后再把結(jié)果 傳送給顯卡。實(shí)際編程的時(shí)候,可以做一下改進(jìn),由于平坦的表面是不會(huì)產(chǎn)生陰影的,所以在這些表面所包含的邊上就沒必要插入 degenerate quad。而且所有的預(yù)處理應(yīng)該在軟件開發(fā)過程中完成,用戶啟動(dòng)程序以后直接調(diào)用的就是插入過 quad 的模型,不需要 CPU 再進(jìn)行計(jì)算。建立/渲染 shadow volume 的 shader 代碼:/ c0     : Light position in object space/ c1  &#

25、160;  : 1, 1, 1, 0/ c2- c5   : Light * View * Proj = LightClip/ c6- c9   : WorldInvLight matrix/ c10    : Color for exposing the shadow volumemov oD0, c10        / 輸出特定的顏色使 shadow volume 可見sub r1, v0, c0      &

26、#160; / 光源方向m4x4 r4, v0, c6        / 將頂點(diǎn)變換到光源坐標(biāo)系nrm r1, r1        / 光源向量歸一化,這是為了 shadow volume 的各個(gè)邊一樣長(zhǎng)mov r10, c1dp3 r10.w, v1, r1        /dp3 頂點(diǎn)法向量和光源向量,確定頂點(diǎn)的朝向slt r10, c1.w, r10  

27、0;     / 根據(jù) dp3 的結(jié)果設(shè)置 r10 寄存器的第四個(gè)單元mul r4, r4, r10        / 設(shè)定 r4 的 w 位m4x4 r5, r4, c2        / 輸出頂點(diǎn)到 clip spacemov oPos , r5Shadow volume 的算法優(yōu)化(一) Shadow volume 的基本算法講到這里就基本完成了,下面說一下現(xiàn)在比較常用的一些優(yōu)化算法。 (一)Z-Pass .V

28、S. Z-Fail前面提到過,Z-Pass 比 Z-Fail 速度要快,因此我們可以在不會(huì)產(chǎn)生問題的場(chǎng)合下適當(dāng)使用 Z-Pass 來提高性能,但是如何確定何時(shí) Z-Pass 不會(huì)帶來問題呢? Z-Pass 失效主要是由于兩種原因 : 原因一:視點(diǎn)進(jìn)入 shadow volume 內(nèi),比如下圖:只要能探測(cè)出這兩種情況,就能在需要的時(shí)候切換到 Z-Fail 算法。條件 A 的判定可以參照下圖,在視點(diǎn)和光源之間做一條連線,如果這條線和遮蔽物相交,那么可以肯定視點(diǎn)在 shadow volume 內(nèi),將切換到 Z-Fail 算法。原因二:shadow volume 與近 剪裁面 相交至于情況 B 的判定

29、可以利用光源和近 剪裁面 形成的light-pyramid( 紅色陰影部分 ) 與遮蔽物的交匯關(guān)系。如果遮蔽物完全在 light-pyramid 之外,則由它生成的shadow volume 不會(huì)和近 剪裁面 相交,可以使用 Z-Pass 算法,否則將只能使用 Z-Fail 算法。 Shadow volume 的算法優(yōu)化(二) (二)tricks to save fillrate : 前面提到過,shadow volume算法里面兩個(gè)最耗時(shí)的步驟就是 silhouette edge determination 和 shadow volume rendering。其中 shadow volume

30、 rendering 是完全考驗(yàn) GPU 填充率的步驟,雖然現(xiàn)在的顯卡動(dòng)輒就有幾十 G fragment/s的填充率能力,但是遇到復(fù)雜的場(chǎng)景,流水線也不免不堪重負(fù)。此外,頻繁的 stencil buffer操作也會(huì)占據(jù)一部分顯存帶寬,如果能夠找出一些辦法盡量減小 shadow volume 的尺寸,將會(huì)是效果很明顯的一種優(yōu)化方法:限定光照的范圍(Attenuated Light Bounds):如果所用的光源有衰減效應(yīng),則可以利用 scissortest 將渲染的范圍限定在光源的作用范圍之內(nèi),因?yàn)槌隽诉@個(gè)范圍就不會(huì)有陰影存在,自然用不著去渲染那部分的 shadow volume了。所謂 sc

31、issor test 就是人為地在屏幕坐標(biāo)系下面定義一個(gè)矩形,只有坐標(biāo)處在這個(gè)矩形范圍內(nèi)的 fragment才能夠通過測(cè)試,其內(nèi)容才能被寫入 幀 緩存。 NVIDIA的陰影加速技術(shù)(ultra shadow):ultra shadow這項(xiàng)技術(shù)是隨著NV35 的發(fā)布而浮出水面的,進(jìn)而在 NV36/38 中得到了繼承,我們基本上可以在 NVIDIA 今后的產(chǎn)品中,這項(xiàng)技術(shù)會(huì)得到持續(xù)的應(yīng)用。 id software 的當(dāng)家程序員 JohnCarmack 曾經(jīng)說過 NV35 是為 DOOM3 量身打造的 GPU ,我們?cè)谶@里有理由懷疑 Carmack說這番話的原因很有可能就是由于 NV35 中集成了

32、ultra shadow 陰影加速技術(shù)(近日GeForceFX系列已經(jīng)成為DOOM3的推薦GPU),那么 ultra shadow 究竟是什么,它如何加速陰影的渲染速度呢? 其實(shí) ultra shadow 技術(shù)僅僅利用了一個(gè) NVIDIA 新近提交的 OpenGL 擴(kuò)展 EXT_depth_bounds_test,我們先來看一下 NVIDIA 官方在 GDC2003 上對(duì)這個(gè)擴(kuò)展的介紹:首先注意一下名稱的問題,GDC2003在三月舉行,那時(shí)這個(gè)擴(kuò)展還只是 NVIDIA 獨(dú)家的東西,到了 4 月這個(gè)擴(kuò)展更名為 EXT_depth_bounds_test 。 EXT開頭的擴(kuò)展表示有多家廠商在開發(fā)這

33、項(xiàng)技術(shù),也許不久以后我們就會(huì)看到 ultra shadow 在 ATI 的 GPU 上面實(shí)現(xiàn)。Depth bounds test 的作用是比較由當(dāng)前 fragment 的屏幕坐標(biāo)( xw , yw )指定的 depth buffer 中的 z 值與用戶通過 glDepthBoundsNV(GLclampd zmin , GLclampd zmax )所指定的 zmin,zmax , 如果 z 值在次范圍之外,則將當(dāng)前的 fragment 從流水線中剔除掉,不進(jìn)行此處的 stencilbuffer 操作。注意這里比較的并不是 fragment(shadow volume) 的 z 值,而是前一個(gè) path 中已經(jīng)渲染過的shadow receiver 的 z 值。具體情況請(qǐng)看下圖:可以看到,由于 A 點(diǎn)的 z 值在 zmin,zmax 范圍之外,此點(diǎn)沒有可能被陰影遮住,因此 A1/A2 點(diǎn)處的 fragment 就可以被丟棄

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論