游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2817|回复: 1

贯穿于vsm以及esm的那条曲线

[复制链接]

7

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2009-4-23 19:53:00 | 显示全部楼层 |阅读模式
引子:
前段时间作demo,感叹于一个月的demo时间远强于6个月的读书时间。。。。
废话少说,切入正题
为什么会选择vsm/esm
demo中需要用到阴影,于是开始从dxsdk的那两个最基本的阴影例子入手,顺藤摸瓜般,最终被vsm以及esm白皮书以及demo(esm还没找到demo)里展示的那华丽的效果

所吸引。。。。。。
是的,作者提供的图片里,阴影效果是非常华丽的----平滑、轮廓清晰,而且效率也很高,再加上算法也不算复杂,但是我在实践的过程中,终于还是发现了那个无法

完美逾越的沟(至少是现在,我自己没办法跨过去)

先对这条“沟”来几个感性的认识
我的机器:
athlon3600+ x2m2
DDRII 800 512MB*2
gf7600gt

下面的demo主要为了体现阴影效果,因此并没有计算漫反射
vsm,sm深度范围0.0f~1000.0f,没有模糊处理,sm尺寸:1024*1024


vsm,sm深度范围190.0f~240.0f,没有模糊处理,sm尺寸:1024*1024


esm的效果也大致如此,除了深度对比的公式不同外,esm对光源的远近相对不敏感(也就是说,在vsm中,光源越是远离产生阴影的物体,误差就会越大),而且相对

于vsm需要至少两个16位浮点作为sm格式,esm仅需要1个16位(使用32位会提高取样效果,但并不能排除我说的阴影的非纯色问题)。

你可以很清楚的看见,当sm的深度范围很大时,阴影呈现由明到暗的过渡色,而深度范围限定在某个区域时(这个区域是应该是阴影出现的区域),阴影的效果就趋向

于“正常”。

(你也可以看一下,完美状态下的效果
vsm,sm深度范围190.0f~240.0f,5x5高斯模糊,sm尺寸:1024*1024


问题的来源就是此类算法的核心,看图:
vsm的深度测试对比图


上图中红色曲线就是最原始的ShadowMap的深度对比,深度小于0.5的像素处于光照范围,否则就处于阴影范围。这样的方法无法结合TextureFilter,同时非白即黑使

得阴影的边缘锯齿尤为突出。
vsm使用了某些数学方法(具体算法,可以去google搜对应的官方教材),于是出现了图中蓝色、绿色、黑色的平滑曲线。由于摆脱了非白即黑的梦魇,于是

TextureFilter就可以加入,从而产生上面的那种“完美”的阴影效果。

esm也是类似




但是!也许你也注意到了,那条曲线也暗指了:
“像素深度与sm中的深度差别越小,该像素就越明亮”,更通俗一些,如下图:

图中的斜面occluder将在平面light receiver上产生阴影。再回到深度测试对比图中,对应那些“平滑的曲线”,就可以发现,如果a、b、c的深度对比结果刚好处于曲线中“前不着

村后不着店”的弯曲部位,那么必然是在黑与白之间,从而导致了阴影靠近a端颜色较深,而靠近c端的颜色较浅。这就使那条沟。

我提出了问题,但我无法解决问题,找遍了google,我得到的唯一建议,是来自于vsm的作者的“constrain the depth range as much as possible to cover just

the area in which you'll be doing shadow queries (i.e. the intersection of the light and camera frustae).”

两个相关的帖子
http://www.gamedev.net/community/forums/topic.asp?topic_id=519529
http://www.gamedev.net/community/forums/topic.asp?topic_id=491724

最后,因为我是个菜鸟,无论是dx,还是数学,还是英语,于是我更愿意认为是因为我的菜而没能领悟正确的vsm/esm使用方法,或者是没能“找到”完美解决这个问

题的方法。如果你知道,还请不要吝啬,一定告诉我应该如何跨过这条“沟”。
我的email:biggerwoo@163.com

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2009-4-23 21:16:00 | 显示全部楼层

Re:贯穿于vsm以及esm的那条曲线

不懂图形学,看不懂
不过还是要支持一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 12:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表