步履蹒跚

知其然,知其所以然 - real-time rendering.
posts - 85, comments - 172, trackbacks - 0, articles - 0

depth peeling

Posted on 2005-02-23 21:20 Pointer 阅读(4803) 评论(4)  编辑 收藏 所属分类: 开发随笔

depth peeling是一种利用shadow mapping来模拟depth test的技术,利用它,可以实现order-independent transparency和woo shadow mapping等需要逐层剥离深度的特效。

下面是一个depth peeling demo,用4pass剥离了4层,效果不错,效率也很“惊人”。:D
 
 

需要硬件支持如下扩展:
GL_ARB_multitexture
GL_ARB_texture_env_combine
GL_ARB_vertex_program
GL_ARB_fragment_program
GL_ARB_fragment_program_shadow
GL_ARB_texture_rectangle
GL_ARB_depth_texture
GL_ARB_shadow
GL_EXT_shadow_funcs

控制方式:
wasdzxqe 控制视角
+-       切换 混合 layer0~3 状态
esc      退出

demo:
http://downloads.cnblogs.com/CGTeam/Member/Pointer/dlls.rar
http://files.cnblogs.com/Pointer/depth_peeling.rar

相关资料:
http://developer.nvidia.com/object/Interactive_Order_Transparency.html
http://developer.nvidia.com/object/order_independent_transparency.html
http://download.developer.nvidia.com/developer/SDK/Individual_Samples/DEMOS/OpenGL/layerz_3x.zip


Feedback

#1楼    回复  引用    

2005-02-24 21:11 by chaz [未注册用户]
支持~
woo shadow mapping耳闻过,介绍一下吧:)

#2楼 [楼主]   回复  引用  查看    

2005-02-24 22:59 by Pointer      
woo shadow mapping是一种采用双层depth map来消除self-shadowing artifacts现象的shadow mapping。

由于pass1中获取depth map是基于light's point of view进行光栅采样的,而pass2中则是基于eye's point of view进行光栅采样的,所以实际在执行shadow mapping的过程中会产生一些错误的self-shadowing现象(特别是在倾斜的表面上)。

一种方法是通过polygon offset来消除这种self-shadowing artifacts现象。
btw:我在shadow_mapping_with_glsl中没有使用polygon offset而是进行了一个恒定的z偏移,实际上这么做并不合适。(这个demo里的问题太多了。:D) simple_shadow_mapping倒是用了polygon offset。

可是偏移多少合适呢?通常这是一个经验值,显得不那么优雅,而且如果两个表面过于接近,偏移过多的话会使得本来处于阴影中的表面能够错误的接受光照。

另一种方法是获得第一个深度表面和第二个深度表面,取中间值作为depth map,这样就不会担心第二个表面错误的接受光照了,这就是woo shadow mapping。

不过woo shadow mapping也存在一些问题,在depth layer有“断层”的地方也很可能错误的接受光照。而且现阶段还没有支持多次depth test的硬件,用shadow mapping模拟需要3pass,效率太低,所以还是polygon offset来的实惠啊。:)

#3楼 [楼主]   回复  引用  查看    

2005-03-04 19:40 by Pointer      
原来nVIDIA有一个相关的Demo。
效率也不是很高。

#4楼    回复  引用  查看    

2007-05-16 19:38 by 周波      
@Pointer
NVIDIA GEMS1上有篇文章说明过如何较为准确的计算offset

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-02-26 15:12 编辑过
成果网帮您增加网站收入


相关链接: