阴影Shadows(笔记)


前言

讲一下之前没讲的阴影(Shadows)


∞、阴影(Shadows)

在进入到光线追踪的话题之前,我们先将关于光线的重要话题,阴影讲一下。
之前我们讲过,着色是局部的事情,我们只考虑着色点的性质,光源和摄像机。不考虑其他物体对该着色点的影响。所以说在着色时无法解决阴影问题。
如何在光栅化阶段解决阴影问题,我们将要学习阴影映射(Shadows Mapping)。

阴影映射(Shadows Mapping)

在这里插入图片描述
阴影映射是一种图片空间的算法,运用阴影映射是不需要知道场景中的几何信息的。阴影映射会产生走样,需要进行反走样。
阴影映射的思想是,如果一个点不在阴影里,那么他应该在摄像机和光源处都能被看到。由此可见,阴影映射只能处理点光源带来的阴影,并且要么能看到要么完全看不懂,并且边界明显,这种阴影叫做硬阴影。

阴影映射的实现步骤

在这里插入图片描述
第一步,得到从光源看向场景中的任何点的深度。得到深度图(深度图的精度是一个产生走样的原因)。
第二步,得到从摄像机看向场景中任意点的深度。得到另一个深度图。
如果某个点在两个深度图中的值是一致的,说明这个点能被相机看到的同时也能被光源(假设光源也有一架摄像机)看到,当然也有可能是都不能被看到,不过既然不会被摄像机看到,那这个点压根就不会渲染出来。
反之如果深度不一致,说明可能是能被摄像机看到而不能被光源看到,既然光源看不到,那就说明这个点在阴影中。
在这里插入图片描述
在这里插入图片描述
时至今日,阴影映射也是所有3D游戏都在使用的基本技术,以及早期动画电影使用的技术。

阴影映射的问题

在这里插入图片描述

  • 硬阴影,当然现在有一些手段来生成软阴影了。
  • 阴影的质量是由阴影图(Shadow Map)的分辨率决定的。这是图片相关技术的普遍问题。
  • 浮点的深度值比较意味着会出现诸如浮点数精度,偏差,容忍量相关的问题。
    在这里插入图片描述
    硬阴影和软阴影的区别如上图。硬阴影的边缘非常锐利。而软阴影的效果就更贴近现实。
    现实中软阴影的形成是一种物理现象,现实中有的阴影是因为完全看不到光源(本影 Umbra),而有的阴影能部分看到光源(半影 Penumbra),软阴影就是本影和半影中间的过渡。可以观察上图中表述的日蚀现象。软阴影的程度取决于光源的数量和大小,没错,如果真的是“点”光源的话,是不会出现软阴影的。

课程的最后

如何绘制“真正的”阴影,这就是下节的内容了。

猜你喜欢

转载自blog.csdn.net/qq_37856544/article/details/113739054