首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聚束阴影图的计算偏差

聚束阴影图的计算偏差
EN

Stack Overflow用户
提问于 2016-06-17 09:09:19
回答 1查看 584关注 0票数 3

在实现了聚光灯阴影后,当我的聚光灯离物体太远时,计算偏差会使阴影消失。

我已经尝试解决这个问题两天了,我使用Renderdoc来调试我的渲染器,所以所有的数据都是正确的。

我的案子:

我使用32位深度缓冲区,我有两个立方体,一个在另一个后面(更大,以看到它的近邻的影子),一个光看着立方体,它们沿着z轴对齐。

我使用了在教程中找到的下列公式来计算偏差:

代码语言:javascript
复制
float bias = max(max_bias * (1.0 - dot(normal, lightDir)), min_bias);

我执行以下比较:

代码语言:javascript
复制
return (fragment_depth - shadow_texture_depth - bias > 0.0) ? 0.0 : 1.0;

然而,我的聚光灯离物体越远,距离最近的立方体的深度值就越接近最远立方体的深度(差10-3,并且随着离光的距离而减小)。一切都在起作用,透视就成了它的工作。但是偏置计算并没有考虑到从碎片到光的距离,如果我的物体和我的光是对齐的,那么normallightDir不会改变,因此的偏倚也不会改变,因此也不会改变:因为的偏置不再适合,所以在最普通的立方体上不再有阴影。

我已经搜索了很多网站和书籍(都是游戏编程宝石),但我没有找到有用的公式。

这里我给你看两个案例:

这里有两个屏幕截图,颜色结果从相机的角度和阴影地图从光的角度。

轻位置(0,0,0),一切正常

光的位置(0,0,1.5),不工作

有谁有公式或想法来帮助我吗?我有误解什么吗?

感谢您的阅读。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-16 16:31:52

偏置后投影空间中的差异。后投影空间是非线性的,因为深度缓冲器是对数。所以,你不能仅仅用“世界单位”中的偏见来抵消这种差异。如果你想让它工作,你必须用这个正常的偏移量重建你的取样位置。或者用倒置投影来改变你在世界空间中的深度。

希望它能帮到你!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37877510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档