在计算机图形领域,正确平衡直接和间接照明有助于提升场景的逼真度。
想象一下:在炎炎夏日中,您徒步到湖畔并坐在树荫下,凝视着因阳光照耀而闪闪发光的湖面。
在这个场景中,光和影两个不同效果分别对应直接照明和间接照明。
阳光洒在湖面和树上,水面呈现波光粼粼的效果,树叶则显得更加翠绿,这就是直接照明产生的效果;虽然树木投下了阴影,但阳光仍能从地面和其他树木处反射回来,将光线投射到周围的阴影区域,这就是间接照明的过程。
为使观众能够沉浸式体验逼真的环境,需在计算机图形处理过程中准确模拟光线传播行为,以达到直接照明和间接照明的正确平衡。
什么是直接照明和间接照明?灯光直接照射物体被称为直接照明。
直接照明能够确定从光源到达物体表面的光线颜色和数量,但忽略了能通过其他方式到达物体表面的光线,比如经过反射或折射的光线等。
直接照明还能决定被物体表面吸收和反射的光量。
来自太阳和天空的直接照明。
光线经物体表面反射,而后照亮其他物体的过程被称为间接照明。
间接照明是指从除光源以外的其他地方到达物体表面的光线。
换言之,间接照明决定了到达物体表面的所有其他光线的颜色和数量。
间接光常常从一个表面反射到其他表面。
由于发光体和观察者之间存在大量路径,因此间接照明通常比直接照明更难计算且成本更高。
同一环境中的直接和间接照明。
什么是全局照明?全局照明是计算场景中可见表面上所有光线(包括直接和间接)的颜色和数量的过程。
实现所有类型间接光的精确模拟非常困难,尤其是当场景中包含复杂的材质,如玻璃、水、有光泽的金属等,或者在场景中存在云、烟、雾或其他被称为体积介质的散射。
因此,一般而言,用于全局照明的实时图形解决方案只限于计算间接光的一个子集,通常用于漫反射(又称哑光)材质的表面。
如何计算直接照明和间接照明?当前有许多可用于计算直接照明的算法,这些算法各有优劣。
例如,如果场景中只有一盏灯且没有阴影,那么计算直接照明就会很简单,但这类场景的逼真程度不太高。
但当一个场景有多个光源时,若要处理位于各个表面的所有光线,会产生十分高昂的成本。
为解决这些问题,技术提供商开发了经过优化的算法以及着色技术,如延迟着色或集群着色等。
这些算法有助于减少需要计算的表面和灯光相互作用的数量。
阴影则可以通过阴影贴图、模板阴影体和光线追踪等技术进行添加。
阴影贴图分为两个步骤。
首先,从灯光的角度而言,场景将被渲染成一个称作“阴影贴图”的特殊纹理。
而后,该阴影贴图会被用于测试屏幕上的可见表面从光源角度是否是可见的。
阴影贴图存在许多限制和伪影,而且随着场景中光线数量的增加,其成本会迅速增高。
“毁灭战士 3(2004)(Doom 3)”中的模版阴影,图片