• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            實(shí)時(shí)陰影繪制技術(shù)研究

            C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
              48 Posts :: 20 Stories :: 57 Comments :: 0 Trackbacks
            脫去Doom3的美麗外衣 Doom3游戲引擎解析
            2004-11-24    PLAY!LAB·游戲引擎研究部    《家用電腦與游戲》雜志2004年10月號    點(diǎn)擊: 1762
            實(shí)時(shí)陰影的威力

              Shadow Volume!
              打從Doom3資料被公布的第一天起,人們就開始關(guān)注這個(gè)詞匯了。這個(gè)Shadow Volume究竟是什么?注意了,這就是和Doom3那幾可亂真的陰影技術(shù)相關(guān)的重要名詞——“陰影錐”!比較酷一點(diǎn)的說法叫做“陰影容積”,不過反而更難以理解了^^

            09-ShadowVolume
              如圖9這種解釋陰影錐的圖片已經(jīng)太多太多了。很多人認(rèn)為這是一種跨時(shí)代的技術(shù),其實(shí)早在Quake3時(shí)代,這種陰影技術(shù)就已經(jīng)開始使用了。在Quake3中有3種陰影:
              第一種是人物腳下一個(gè)黑斑,這個(gè)其實(shí)不能算實(shí)時(shí)陰影。
              第二種是平面陰影(Planar Shadow),它把物體映射在一個(gè)平面上,然后很據(jù)光線數(shù)據(jù)把這個(gè)陰影“貼”在它應(yīng)該在的表面上。這種方法在環(huán)境簡單時(shí)非常不錯(cuò),比如球場上的球員陰影。但其缺點(diǎn)在于,被映射的物體形狀越復(fù)雜,計(jì)算效率越低,且不能把陰影映射在曲面上。
              第三種就是Doom3所采用的體積陰影技術(shù),當(dāng)時(shí)因?yàn)橛?jì)算能力限制,只能簡單運(yùn)用在人物身上,外加場景復(fù)雜度不夠,所以并未產(chǎn)生驚人效果。

              隨著硬件和游戲引擎的飛速發(fā)展,體積陰影技術(shù)終于在Doom3引擎上大規(guī)模應(yīng)用,我們就來看看體積陰影技術(shù)究竟有什么秘密:
              名詞解釋:體積陰影,測定投影空間式陰影,Volumetric Shadow。該算法最早于1977年提出,其基本原理是根據(jù)光源和遮蔽物的位置關(guān)系計(jì)算出場景中會產(chǎn)生陰影的區(qū)域,即陰影錐。然后對所有物體進(jìn)行檢測,以確定其會不會受陰影的影響。這個(gè)方法的要點(diǎn)在于,它不是利用“把物體投影到環(huán)境表面”的方式來產(chǎn)生陰影,而是去找出場景中有哪些像素是在陰影中。


              如圖10,我們可以做個(gè)實(shí)驗(yàn):拿一個(gè)小球,正對光源(比如一盞臺燈)。光線是向四面八方直線傳播的,既然小球不透光,那么小球必然會在擋住朝小球方向的光線,在小球的逆光面形成一個(gè)錐形的無光線區(qū)域,也就是陰影錐。很明顯的,只要任何物體或物體的部分位于這個(gè)區(qū)域以內(nèi),就會處在陰影之中。
              現(xiàn)在我們深入一些,假設(shè)有一個(gè)已經(jīng)繪制完成的3D場景,因?yàn)槭褂肸軸緩沖(Z buffer,用以表現(xiàn)場景的深度)的關(guān)系,對每一個(gè)像素而言都有一個(gè)Z值,即表示該像素和觀察者的距離的值。假設(shè)現(xiàn)在有一個(gè)三角形物體,把陰影投射到這個(gè)場景中,并畫出這個(gè)物體的陰影錐。因?yàn)槲矬w是一個(gè)三角形,所以它的陰影錐也是一個(gè)三角錐。那么,要如何知道場景中有哪些像素會受這個(gè)陰影錐的影響,從而處在陰影內(nèi)呢?
              其實(shí)方法很簡單:想象許多射線,由觀察者射向每個(gè)像素。如果射線和陰影錐完全沒有交集,它所對應(yīng)的像素當(dāng)然就不會受陰影錐影響,就不會處于陰影中。不過,即使是射線和陰影錐有交集,并不一定表示該射線對應(yīng)的像素就一定受陰影錐影響,因?yàn)樯渚€可能會穿越陰影錐。所以,只有在射線射入陰影錐之后,在離開陰影錐之前就遇到其對應(yīng)的像素時(shí),才表示這個(gè)像素和受陰影錐影響,處于陰影之中。
              我們以圖11來講解這幾種不同的情形:

            11-陰影錐分析
              圖中的(1)和(2)都是面對觀察者的面,它們所涵蓋的像素,是“射線會射入陰影錐”的像素。而(3)是背對觀察者的面,它所涵蓋的像素是“射線會離開陰影錐”的像素。所以,會受陰影錐影響,處于陰影中的像素,就是(1)+(2)-(3)的那些像素,也就是陰影所在的位置。
              要怎么在3D繪圖中,得到(1)+(2)- (3)的結(jié)果呢?這就需要OpenGL的模板緩沖區(qū)(Stencil Buffer)。OpenGL的模板緩沖區(qū)可以讓顯卡進(jìn)行“加1”和“減1”的計(jì)算。所以,只要把模板緩沖區(qū)設(shè)定成在繪制(1)和(2)的面時(shí),讓模板緩沖區(qū)加1;而在繪制(3)的面時(shí),讓模板緩沖區(qū)減1。這樣一來,在繪制完(1)至(3)時(shí),那些模板值不為0的像素就是陰影了。最后,把所有模板不為0的像素亮度降低,就可以達(dá)到繪制陰影的效果。
              體積陰影最主要的缺點(diǎn)是在于它過于復(fù)雜。要做出有效率的“陰影錐”,需要對物體做相當(dāng)麻煩的處理,基本上就是要找出物體在某個(gè)方向的 “外緣”(Silhouette)。這需要花費(fèi)相當(dāng)?shù)娘@卡核心處理時(shí)間。另外,為所有的物體繪制出陰影錐,需要耗費(fèi)相當(dāng)大的填充率、顯存帶寬甚至是CPU 占用率——這顯然不適合需要一定幀數(shù)率的Doom3。

              那么,我們就要看看Doom3是怎樣加速陰影生成的:
              沒錯(cuò),又是Vertex Shader)!頂點(diǎn)引擎的可編程特性可以讓生成Shadow Volume的工作由顯卡核心完成,這樣可以大幅度減輕CPU的運(yùn)算負(fù)擔(dān)。與此同時(shí),借助頂點(diǎn)引擎的寄存器組,連數(shù)據(jù)的來回傳輸都省略了,這樣就可以帶來驚人的速度提升。
              此外還有Ultra Shadow技術(shù)。它是NVIDIA在NV35以后的GPU中增加的功能,關(guān)于此技術(shù)對提升Doom3運(yùn)行效能的作用在本雜志今年第6期GeForce 6顯卡介紹文章中有詳細(xì)介紹,這里就不復(fù)述了。不過,Doom3默認(rèn)并未開啟Ultra Shadow技術(shù),我們可以在Doom3安裝目錄下的Doomconfig文件中加入“set r_usedepthboundstest 1”語句來開啟Doom3對Ultra Shadow技術(shù)的支持。不過,使用NV35以下GPU的用戶就不要做無意義的嘗試了。
              值得一提的是,Ultra Shadow技術(shù)是開放的,所以有可能會有其它廠商采用。當(dāng)然,這其中很多優(yōu)化特性依靠軟件也可以執(zhí)行,僅僅速度的提升不如GPU直接參于那么明顯罷了。

            12-沒有體積陰影的架子

            13-打開體積陰影的架子
            原文地址:http://www.playgamer.com/article.php?articleid=453&pagenum=2
            posted on 2005-12-23 00:21 苦行僧 閱讀(845) 評論(0)  編輯 收藏 引用 所屬分類: 轉(zhuǎn)載
            久久精品国产一区| 99久久国产综合精品五月天喷水| 2021国内久久精品| 国产美女亚洲精品久久久综合| 久久国产精品成人片免费| 99久久无码一区人妻| 精品久久久无码21p发布| 国产精品久久久久影视不卡| 久久国产视频99电影| 韩国无遮挡三级久久| 久久性精品| 久久99热国产这有精品| 思思久久99热只有频精品66| 国产精品久久一区二区三区| 一本久道久久综合狠狠躁AV| 青青草原1769久久免费播放| 亚洲精品tv久久久久久久久| 四虎国产精品成人免费久久| 91久久精品视频| 精品国产福利久久久| 久久久久久毛片免费播放| 亚洲婷婷国产精品电影人久久 | www亚洲欲色成人久久精品| 亚洲人成网站999久久久综合| 蜜桃麻豆www久久| 91精品国产乱码久久久久久| 国产成年无码久久久免费| 久久久久久久97| 久久久无码精品亚洲日韩蜜臀浪潮| 久久精品国产99久久久香蕉| 久久av高潮av无码av喷吹| 久久久网中文字幕| 久久亚洲私人国产精品vA| 香蕉久久影院| 亚洲国产婷婷香蕉久久久久久 | 香蕉久久av一区二区三区| 国内精品久久久久影院老司| 亚洲精品高清一二区久久| 亚洲精品国精品久久99热| 亚洲婷婷国产精品电影人久久| 中文精品99久久国产|