轉自:http://blog.163.com/wmk_2000_ren/blog/static/138846192201019114117466/php
實現呢,Aras大神已經給出了,緩存
http://forum.unity3d.com/threads/shadow-volumes-in-unity-on-the-wiki.9452/3d
http://wiki.unity3d.com/index.php/Shadow_Volumes_in_Alphablog
原理也有現成的論文解釋清楚了。不能上谷歌,連接後面補...開發
我差很少就是用中文,把整個過程複述一下吧。源碼
首先,之因此是基於alpha是由於模板緩存不是何時都能用,用alpha能夠沒必要擔憂沒有效果。這是用alpha來實現的緣由,雖然不必定能在項目中用,由於填充率比較高。it
思路以下:模板
第一步是將幀緩衝的alpha值變成四分之一。thread
第二步就是繪製陰影面了。正面的alpha值變爲兩倍,反面減半。這時候,陰影區域的alpha值變成1/2 和 1,而非陰影區不變。原理
第三步就是進行四次幀緩衝的操做,第一次是將alpha加倍,陰影區域的alpha值變成 1,其餘區域變爲1 / 2。 第二次是將alpha值反轉,blend zero oneminusdstalpha 陰影區域的alpha值變爲 0, 其餘區域仍是1/2,第三次將alpha加倍,陰影區域的值仍是0,而後其餘區域變成1,第四次就是把顏色賦上去了。
具體實現,會涉及一些細節,比較麻煩,慢慢補。
《untiy 3d ShaderLab 開發實戰講解》裏面也有相關內容:源碼在示例工程ShadowVolumes中