zoukankan      html  css  js  c++  java
  • (转)unity中基于alpha通道的shadow volume实现

    转自:http://blog.163.com/wmk_2000_ren/blog/static/138846192201019114117466/

    实现呢,Aras大神已经给出了,

    http://forum.unity3d.com/threads/shadow-volumes-in-unity-on-the-wiki.9452/

    http://wiki.unity3d.com/index.php/Shadow_Volumes_in_Alpha

    原理也有现成的论文解释清楚了。不能上谷歌,链接后面补...

    我差不多就是用中文,把整个过程复述一下吧。

    首先,之所以是基于alpha是因为模板缓存不是什么时候都能用,用alpha可以不必担心没有效果。这是用alpha来实现的原因,虽然不一定能在项目中用,因为填充率比较高。

    思路如下:

    第一步是将帧缓冲的alpha值变成四分之一。

    第二步就是绘制阴影面了。正面的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中

  • 相关阅读:
    生于忧患,死于安乐
    【网络流24题】骑士共存问题
    【网络流24题】最长不下降子序列问题
    【网络流24题】太空计划问题
    SG函数
    【网络流24题】餐巾计划问题
    【APIO2019】奇怪装置
    【HEOI2016/TJOI2016】游戏
    【SDOI2015】星际战争
    【CQOI2009】跳舞
  • 原文地址:https://www.cnblogs.com/wonderKK/p/5069879.html
Copyright © 2011-2022 走看看