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只的是小飞侠,他可以将身体分离。
相关文章推荐
- LZMA C# SDK 子线程压缩与解压缩 Unity3d实例
- 【Unity3d】在Unity中播放视频
- 【Unity3d】注意C#的字符串拼接效率问题
- 【Unity3d】自动版本构建: 如何在Windows平台下自动打开资源管理器并且选中指定文件
- Unity该插件NGUI学习(1)—— 环境结构
- Unity教程之再谈Unity中的优化技术
- 开始Unity3D参观考察
- Mono2.0 对C#闭包 与 donet 不同的实现导致Unity的Bug 及解决方案
- unity平台的预处理
- 以游戏实例介绍Unity3d
- [Unity3D]如何渲染一个在camera frustum外面的物体
- 【Unity3d】如何解决Unity3d在引用外部插件时报DLLNotFoundException的问题
- Unity3d 反编译破解游戏 简单示例 (使用ildasm反编译DLL修改然后重新编译DLL)
- unity, switch platform
- Unity链表的应用之蛇形动画
- VS community 2013 安装配置Xamarin
- 【Unity3d】疑难杂症解决之系统报错:Supplied NxActorDesc is not valid. createActor returns NULL
- Unity着色器入门之一步一步来看坐标系变换
- Unity下的StreamingAssets路径不同平台的读取
- Unity3D实践系列05,为GameObject添加额外属性