• <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ù)研究

            C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
              48 Posts :: 20 Stories :: 57 Comments :: 0 Trackbacks
            《Approximate Soft Shadows on Arbitrary Surfaces using Penumbra Wedges》
            Tomas Akenine-Moller and Ulf Assarsson
            Eurographics Workshop on Rendering(2002)
             
            這是一個基于標(biāo)準(zhǔn)shadow volume和Haines的《Soft Planar Shadows using Plateaus》改進(jìn)的算法。算法核心在于在多邊形silhouette邊的基礎(chǔ)上建立一種新的圖元-penumbra wedge,根據(jù)陰影接受表面上的點(diǎn)在在penumbra wedges中的位置進(jìn)行插值,得到改點(diǎn)的陰影級別。
            下面對該算法進(jìn)行更詳細(xì)的介紹。假設(shè):光源為球形光源,LI=light intensity光照強(qiáng)度在公式中用s表示。
            • 算法總體思想

            penumbra wedges如下圖所示。

            從圖中可以看出來,PW方法并不是在本影外邊模擬出柔和的過渡,因此相對于Haines的方法在物理上更加真實(shí)。

            在PW中的LI-s在[0,1]之間計(jì)算,表示陰影級別,s=0表示不在陰影范圍內(nèi),s=1表示位于本影內(nèi)。

            算法使用一個16bits的buffer作為LI-buffer,就如同是一個更高精度的stencil buffer,可以通過繪制一個HILO的紋理來實(shí)現(xiàn)。

            一般硬件都具有8-bit的顏色緩存,因此我們使用一個k=255來乘以LI值,然后用color buffer中的值減去255s就得到了改點(diǎn)的顏色值。算法的步驟如下:

            1,LI-buffer預(yù)置255

            2,用spacular+diffuse繪制場景,得到color buffer值

            3,繪制所有PW,將PW繪制到LI-buffer中

            4,將LI-buffer中的值調(diào)制到[0,255]之間并合并到color buffer(我理解是cb-lb)

            5,繪制ambient光

            其中第3步的偽代碼和對應(yīng)的圖如下:

            1 : rasterizeWedge(){
            2 : for each visible fragment(x,y) on front facing triangles of wedge
            3 :   pf = computeEntryPointOnWedge(x; y);
            4 :   pb = computeExitPointOnWedge(x; y);
            5 :   p = point(x; y; z); //z is the Z-buffer value at (x; y)
            6 :   pi = choosePointClosestToEye(p;pb);
            7 :   sf = computeLightIntensity(pf );
            8 :   si = computeLightIntensity(pi);
            9 :  addToLIBuffer(round(255(si-sf)));
            10 : end;}

            其中第4步調(diào)制的目的是為了把因?yàn)槲挥诓煌琍W中而值大于255的值歸整到0到255之間,以便能夠正確的體現(xiàn)陰影柔和程度。

            • penumbra wedge的構(gòu)造

            構(gòu)造原理如下圖所示:

            每個PW分成前后左右四個面,其中前后面的構(gòu)造分別是:b=c+rn f=c-rn ,r是光源球半徑,n是shadow volume的法線。左右面的構(gòu)造如下圖所示,是由相鄰PW的兩個前面交點(diǎn)和兩個后面交點(diǎn)以及sil的交點(diǎn)構(gòu)成。

            文章中對于r=0可以直接繪制硬陰影以及鄰sil邊是銳角的情況也給以討論。

            • 光照強(qiáng)度插值(Light Intensity Interpolation)

            插值的關(guān)鍵是在相鄰的PW之間插值要連續(xù),這樣在穿過兩個不同的PW的時候才會保持陰影的光滑。其計(jì)算如下圖所示:

            文章后邊詳細(xì)介紹了優(yōu)化算法和實(shí)現(xiàn)結(jié)果,以及與其他算法的比較,這里就不說了。

            我對此算法的認(rèn)識是:

            1. 相對于以前的算法可以較好的生成軟陰影,同時基于shadow volume,可以有效的避免前邊算法出現(xiàn)的問題。
            2. 存在著較多的局限性。比如球面光源,比如SV能夠處理的非多邊形體和半透明物體的陰影,比如頂點(diǎn)具有兩個以上sil邊的情況,等等。
            3. 雖然作者宣稱可以在明年的顯卡上獲得實(shí)時的性能,但是沒有硬件的加速完全無法達(dá)到很好的性能,這可能就是其沒有上siggraph的原因吧。
            4. 很多的問題對于我來說,既是機(jī)遇也是挑戰(zhàn)。
            5. 具體怎么實(shí)現(xiàn),還得跟WJ大牛學(xué)習(xí)學(xué)習(xí)。
            說明:
            原載于http://blog.sina.com.cn/u/40d00f170100011h
            posted on 2005-12-23 00:11 苦行僧 閱讀(526) 評論(0)  編輯 收藏 引用 所屬分類: shadow
            精品无码久久久久久尤物| 久久高清一级毛片| 亚洲中文字幕无码久久2020| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 99久久国产主播综合精品| 国产精品女同一区二区久久| 伊人色综合九久久天天蜜桃| 亚洲精品乱码久久久久久| 欧美综合天天夜夜久久| 狠狠色丁香婷婷久久综合| 久久福利青草精品资源站免费| 无夜精品久久久久久| 久久精品国产清高在天天线| 欧美成a人片免费看久久| 久久精品国产秦先生| 99久久精品国产一区二区| 国产巨作麻豆欧美亚洲综合久久| 国产成人精品综合久久久久| 久久久久99精品成人片| 日韩一区二区久久久久久| 奇米综合四色77777久久| 精品久久久久久久久免费影院| 人人狠狠综合久久亚洲婷婷| 久久66热人妻偷产精品9| 一本色道久久HEZYO无码| 久久久久久亚洲精品无码| 国产91久久精品一区二区| 精品国产乱码久久久久软件| 少妇久久久久久被弄到高潮| 久久久久久噜噜精品免费直播| 91精品国产高清91久久久久久| 久久成人国产精品免费软件| 精品久久久久久无码中文野结衣| 久久精品成人免费看| 国产午夜福利精品久久2021| 久久久婷婷五月亚洲97号色| 亚洲欧美伊人久久综合一区二区| 中文字幕人妻色偷偷久久 | 久久亚洲AV成人无码| 婷婷久久综合九色综合九七| 久久高潮一级毛片免费|