阴影和软阴影

1. 公式化描述

渲染方程:说明了某个表面点的所有方向的入射光对于某个方向的出射光产生的贡献,贡献大小与入射光强度,接受角度,平面表面性质有关。

描述阴影的渲染方程:在入射光中加入了可见项(Visibility)(是否被环境物体遮挡,从而形成阴影)。由于需要在积分中计算每束微小入射光的可见性大小,因此计算量很大。

下面的约等式可以将可见项(Visibility)从积分内部提取出来:

当f(x)很平坦,变化很小时(极端情况为常量),式子成立;右半左边部分即为f(x)在区间的均值。

使用约等式,渲染等式近似为:

红框部分可理解为:该点的各个入射方向上的可见性的均值,即总体的可见性或阴影程度。

因此阴影计算和光照计算两部分相互分开,减小了算法实现的复杂度和计算的复杂性。

2 实现

硬阴影

两段式渲染方法

  • pass 1:

从光源的角度渲染场景,即在光源的位置建立一个虚拟摄像机,看向场景,然后使用特殊的shader渲染场景物体,将场景中的深度记录到一个单独的frameBuffer的深度纹理中。

  • pass 2:

从摄像机角度正常的渲染场景,渲染时计算场景中某个点在光源坐标系中的深度,然后与pass1中记录的对应深度对比,深度更大的话说明在在它与光源之间有其他物体,该点处需要显示阴影。

存在问题

Self occulusion

todo

Aliasing

todo

软阴影

软阴影于硬阴影对比:

光源存在体积,有的地方只接受到部分光源,因此形成过渡。

posted @ 2024-01-17 21:31  bluebean  阅读(20)  评论(0编辑  收藏  举报