社区
游戏开发
帖子详情
关于SHADOWMAP 的 SHADOW_EPSILON
gz_wuling
2009-08-18 09:28:19
在Directx SDK 中 有一个例子SHADOWMAP。在这个例子的HLSL(ShadowMap.fx)中有一个参数 SHADOW_EPSILON。关于这个参数的作用有多种说法:有说是为了调整误差,有说是为了把阴影放得更后一点。本人偿试过调整这个参数来观察,却很不得要领,它似乎和物体到光源的距离有关系。不知有哪位高人能指点一下。
...全文
302
6
打赏
收藏
关于SHADOWMAP 的 SHADOW_EPSILON
在Directx SDK 中 有一个例子SHADOWMAP。在这个例子的HLSL(ShadowMap.fx)中有一个参数 SHADOW_EPSILON。关于这个参数的作用有多种说法:有说是为了调整误差,有说是为了把阴影放得更后一点。本人偿试过调整这个参数来观察,却很不得要领,它似乎和物体到光源的距离有关系。不知有哪位高人能指点一下。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
张赐
2009-08-18
打赏
举报
回复
这里有个典型的数学概念
ZShadow + shadow_epsilon < Zcur
可以写成
ZShadow - Zcur < shadow_epsilon
当然这里忽略了绝对值 | ZShadow - Zcur | < shadow_epsilon
这是个极限的概念, Zcur就是它的极限。在数学中shadow_epsilon是表示任意小,但是在这里实际应用中,它就用来控制精度,就是我们认为的“任意小”
xingzhe2001
2009-08-18
打赏
举报
回复
离光源。
你要多个shadow_epsilon 应该也可以。
gz_wuling
2009-08-18
打赏
举报
回复
[Quote=引用 1 楼 xingzhe2001 的回复:]
因为判断像素是否在阴影中你需要与ShadowMap中保存的深度信息作比较。
如果小于就在阴影中。
但是比较的时候是两个浮点数比较,而且随着深度信息增大,深度的精度迅速减少。(你可以想象1/z这个曲线)。所以就不能直接用 ZShadow < Zcur 这样,所以引入了Shadow_epsilon来控制精度,
需要。
ZShadow + shadow_epsilon < Zcur
所以你需要阴影产生的越远,shadow_epsilon 就要越大。
[/Quote]
"所以你需要阴影产生的越远,shadow_epsilon 就要越大"请问这里的“越远”是指什么?是物体离镜头的距离还是物体离光源的距离?还是其他什么?如果有多组不同位置的物体,是否需要设多个shadow_epsilon ?
xingzhe2001
2009-08-18
打赏
举报
回复
这么说吧,我们判断 ZShadow < Zcur 实际上是判断 Zcur - zShadow > 0。在浮点运算里是不能这么做的,因为浮点的精度问题,当Zcur - zShadow 足够小的时候就认为等于0了,由于离摄像机较远的地方Zcur 和 zShadow的值很接近1,Zcur - zShadow的值很小,可能很像素的这个值都在0.0000000002直接,你把Shadow_epsilon设为0可以看到很多像素都被误认为是在阴影中,失真很厉害。如果我们采用
Zcur - zShadow > Shadow_epsilon,那么就设了一个门槛,只有两个z值足够远的时候才产生阴影,效果就好多了。
张赐
2009-08-18
打赏
举报
回复
shadow_epsilon 就是用来控制精度的变量
浮点数常常这样来控制它的精度
xingzhe2001
2009-08-18
打赏
举报
回复
因为判断像素是否在阴影中你需要与ShadowMap中保存的深度信息作比较。
如果小于就在阴影中。
但是比较的时候是两个浮点数比较,而且随着深度信息增大,深度的精度迅速减少。(你可以想象1/z这个曲线)。所以就不能直接用 ZShadow < Zcur 这样,所以引入了Shadow_epsilon来控制精度,
需要。
ZShadow + shadow_epsilon < Zcur
所以你需要阴影产生的越远,shadow_epsilon 就要越大。
ShadowMap
ShadowMap
1、原理
阴影实时渲染是计算机图形学的高级技术。它能提高场景的真实感。两种通用的阴影渲染技术分别是地图阴影(shadow map)和体积阴影(shadow volumes)。地图阴影的优势在于效率很高,因为地图阴影只需要渲染场景两次(一般来说)。并且不需要进行几何处理和产生额外的mesh。无论多复杂的场景,使用地图阴影总能保持很好的性能。
地图阴影的概念很直观。首先,从光线的方向把整个场景渲染到一张纹理上。通过特定的顶点和像素渲染器渲染得到的这张纹理就被叫做地图阴影(s
Shadow Map阴影贴图技术之探
这两天勉勉强强把一个
shadowmap
的demo做出来了。参考资料多,苦头可不少。Shadow Map技术是目前与Shadow Volume技术并行的传统阴影渲染技术,而且在游戏领域可谓占很大优势。本篇是第一辑。——ZwqXin.com Shadow Map的原理很简单,但是实现起来到处是雷。当然这只是我的体会。恩,不过就是“从光源处看场景,那些看不见的区域全部都该是阴影”。很容易看出,与针对特
shadowMap
的思想和核心代码
ps:介绍一篇图文并茂的关于
shadowMap
的文章。这几天随着Ogre1.7 terrain例子的深入,阴影调试出现了很多不理想的问题,例子本身也有不完善之处(比如一些莫名其妙的阴影),想自己动手修改完善,消化掉一些精髓,为自己游戏所用。 原文网址:http://school.ogdev.net/ArticleShow.asp?id=5724&categoryid=9 Shadow Map在
SHADOWMAP
ShadowMap
1、原理 阴影实时渲染是计算机图形学的高级技术。它能提高场景的真实感。两种通用的阴影渲染技术分别是地图阴影(shadow map)和体积阴影(shadow volumes)。地图阴影的优势在于效率很高,因为地图阴影只需要渲染场景两次(一般来说)。并且不需要进行几何处理和产生额外的mesh。无论多复杂的场景,使用地图阴影总能保持很好的性能。 地图阴影的概念很直观。首先,
Shadowmap
核心思想
一.前言 这个教程主要面对DirectX9.0的初学者,文中代码说明部分以DirectX9.0c SDK(August2006)中的
ShadowMap
Sample 为例进行讲解。如果没有D3D矢量运算基础,HLSL,或是对D3D流程不熟悉的朋友推荐《3D游戏程序设计入门》(翁云兵翻译)这本电子文档,图书推荐《Visual C++/DirectX9 3D游戏开发导引》(叶至军)作为入门读物,另外
游戏开发
8,306
社区成员
23,682
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章