平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

Shadow Volume Demo

阴影体实现测试,RenderCraft图形底层, 兼容OpenGL和DirectX两种实现.

1.算法的本质是如何判断一个像素点代表的3D空间点是否在一个多面体内,用的是经典的直线穿越次数判断算法,即判断一个像素3D空间点是否在阴影体内,在于判断从视点到该点的连线穿越阴影体面的次数,算法映射到硬件模拟上,利用Stencil Buffer作计数器.
2.要保证算法的Robust,肯定要用ZFail算法,ZPass是靠不住的.使用shader实现后zpass优化也是没有必要的.
3.兼容支持Two side stencil的显卡,Nvidia是GL_EXT_stencil_two_side扩展, ATI是GL_ATI_separate_stencil扩展.
4.调试中最容易出现的问题是,出现半个阴影区,或阴影交叠处没有阴影,这是由于Shadow Volume没有封住Cap导致.
5.封Cap的问题: zfail只需要封住远平面.

对于shadow volume的frontface(既面对视点的这一面),如果depth test 的结果是pass,说明shadow volume的该front face是在场景物体之前,视线要到达场景物体必然需要穿过该face.
反之如果depth test 的结果是fail,说明shadow volume的该front face是在场景物体之后.

而对于shadow volume的back face(远离视点的一侧),如果depth test的结果是pass,说明shadow volume的该back face是在场景物体之前,视线要到达场景物体必然需要穿过该face.
反之如果depth test 的结果是fail,说明shadow volume的该back face是在场景物体之后.

The rendering of a vector (w = 0.0) in clip space would be semi-infinite.

http://www.cnitblog.com/Files/linghuye/ShadowVolumeDemo.rar

Reference:
ShaderX2

posted on 2008-01-16 21:13 linghuye 阅读(2678) 评论(0)  编辑 收藏 引用 所属分类: 3D图形学研究

只有注册用户登录后才能发表评论。