您的位置:首页 > 移动开发 > Unity3D

unity3D中阴影渲染的shadow a…

2015-06-22 09:22 260 查看
     
 shadow ance和peter
panning是光线下产生阴影的常见问题,问题的产生可以参考这里,非常详细。因为链接中的例子实在OpenGL上的,这里我记录一下自己在unity3D中两个问题的出现和对应的简单解决办法。
     
 阴影的生成过程包括两个主要过程:
1)从光源方向对场景进行渲染,通过一个深度系统,渲染出一个shadow map,用于记录那些离光源较近的表面。
2)从正常的角度渲染场景,但是采样的时候必须测试每一个点是否处于阴影区中。
当shadow map的分辨率较低,而且与接收光线的平面有夹角时,就会产生shadow
ance,原理可以参考上面的链接,非常详细。






要解决shadow,方法非常简单,就是通过调整Bias属性。Bias属性是一个修正值,确保在第二次渲染的时候,渲染点实际位深度 -
Bias > shadow map中的位深度。这个修正值确保了实际渲染点位深度稍微大于shadow
map中记录的数字,也就是更不容易被判定为阴影点,从而防止平面上出现误判的阴影点。修正后的效果








peter panning意思是物体发生分离现象。可以看到上图左边,平面与地面的连接处,发生了细微的分裂现象。而且为了解决shadow
ance而加入的bias值,会加剧这种现象。








为了解决peter panning,最好的办法就是,避免使用平面,取而代之使用长方体。




使用长方体之后,peter panning问题消失。

总结:
对于shadow ance问题,通过调整Bias修补值来解决,一般肉眼可以测量出合适的Bias值而不需要计算。
对于peter panning问题,避免使用薄平面,取而代之只用厚的方体。

注:peter panning只的是小飞侠,他可以将身体分离。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: