【TA-霜狼_may-《百人计划》】图形4.3 实时阴影介绍

4.3.1 基于图片实时阴影技术

其中的图片意为:将阴影渲染成图片

平面投影阴影

  • 根据光的方向,把物体的每个顶点投影到平面地面上。
  • 数学原理:相似三角形
  • 缺点:
    • 只能投影到平面;
    • 投影物体必须在光线和平面之间;
      在这里插入图片描述

投影阴影

  • 为每个阴影投影体设置一个相机
  • 把阴影投影体渲染到阴影纹理中
  • 渲染阴影接收者,并且与阴影纹理进行混合
    在这里插入图片描述

Unity中的实现

  • Projector组件:
    • 可以设置它的参数生成一个视锥体
    • Projector会使用提供给它的材质,绘制所有在视锥体内的物体
  • 使用Render Texture生成阴影映射图,把阴影投影体绘制到阴影纹理中
  • 给Project设置物体和阴影映射图混合的材质

阴影映射

在这里插入图片描述
右侧即深度图,黑色为靠近,白色为原理
在这里插入图片描述

  1. 首先获得光照位置的深度图
  2. 在视角位置对每个像素点进行处理
  3. 将当前位置的坐标转换到由光照位置得到的深度图中并比较大小
  4. 若比之前的深度值更大,说明距离光源越远,说明被遮挡,从而形成阴影在这里插入图片描述
    第三步就是上述说到的对比比较的过程;

4.3.2 实时阴影优化

阴影映射问题 – 自阴影

由于阴影映射的分辨率有限,离散的采样点以及数值上的偏差可能造成不正确的阴影效果。这就是自阴影,也被称为Z-Fighting或者阴影粉刺(Surface Acne)
在这里插入图片描述

解决方法:当比较深度时,为了避免表面自阴影,需要设置容错阈值:
- 深度偏移(Depth Bias)
- 法线偏移(Normal Bias)
但是如果深度便宜设置过大时,会导致漏光现象。即阴影与投影者之间发生脱节,也叫做Peter Panning问题。
在这里插入图片描述

偏移优化

下图左半边解释的很详细,
采样过程中选取的点可能是红色的点,作为阴影映射中的纹素深度,但是在View采样时的深蓝色点明明对应的是同一段线段,但是相较而言深度更深了,所以会被当做阴影。解决办法就是施加一个偏移,尽量正确的反应前后关系。
在这里插入图片描述

Unity中的偏移优化

  • Shadow Caster 阶段基于顶点的Normal Bias;
  • 在Shadow Caster阶段, 让遮蔽物进行反向偏移;
    优点:性能高
    在这里插入图片描述

阴影映射问题 ——走样

从信号重建的过程来审视阴影映射:

  1. 初始采样:渲染阴影映射;
  2. 重采样:从摄像机视角对采样信号(阴影映射)重采样;

两个阶段都会发生走样问题。

  • 阴影映射在世界空间均匀分配;
  • 视锥体内物体经过透视投影后,近大远小,近平面和远平面的像素一样;
  • 靠近观察者的元素所用到的采样点明显变少;
  • 这种误差被称为透视走样;

在这里插入图片描述

级联阴影映射(Cascaded Shadow Map)

透视走样最有效的解决方案;
把视锥体分割为多个子视锥体;
为每个子视锥体计算独立的相等大小的阴影映射;
在这里插入图片描述
其中的shadow distance自定义了产生阴影的范围(原本是从近平面到远平面),减少了部分开销;

重采样误差

  • 映射纹理是一张动态生成的纹理;

  • 滤波 —— 纹理采样误差的解决方案;

  • 滤波

    • 图像处理中,通过滤波强调一些特征或者去除图像中一些不需要的部分;
    • 滤波是一个邻域操作算子,利用给定像素周围的像素的值决定此像素的最后在那个的输出值;
  • 阴影的滤波

    • 使用一部分阴影映射采样点来计算某个指定View采样点的最终阴影结果的方法。

PCF滤波

  1. 从光方向生成阴影映射;
  2. 从摄像机视角进行深度测试;
  3. 当该着色点通过深度测试时,取该像素周围指定大小(滤波核)的范围。计算他们的可见平均值作为输出。在这里插入图片描述
    blocked代表周围像素不可见有42个,visible代表周围像素可见有7个,最终计算得到其阴影值
PCF滤波的不同实现
  • 采样数K
    • 规则滤波,33 或者 55;
    • 采用Poisson Disk的形式来分布一定数量的采样点。
  • 滤波核哈数
    • 高斯函数作为滤波函数等;

作业

实时阴影的优化方案

  1. 针对自阴影问题利用深度偏移或者法线偏移进行调整;
  2. 针对走样问题利用级联映射方法对结果进行优化;
  3. 针对采样问题利用PCF滤波进行优化,达到更好的软阴影效果;
  4. 利用PCSS(Percetage closer soft shadows)进行软阴影实现;
  5. 针对PCSS又有了优化的VSSM(Variance Soft Shadow Mapping)
  6. 由于VSSM假设约束条件太多,出现了MSM(Moment shadow mapping 矩阵阴影映射)

还有好多好多好多好多要学呢!Games101后半部分+202,继续加油吧!

[1] games202:二,实时阴影Real-Time Shadows + 作业1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zczplus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值