#1 楼
我知道“光探测器”有两种不同的常见含义。它们两个都代表场景中单个点周围的光,即,如果您缩小到很小的尺寸并站在该点上,您将在各个方向上看到的一切。一个含义是点周围光的球形谐波表示。球谐函数是在球形域上定义的函数的集合,类似于正弦波,它们在赤道周围并在球体上从一个极点到另一个极点振动一定的次数。
球谐函数可以是通过缩放并添加一定数量的球谐函数,通常用于创建任意球函数的平滑,低分辨率近似值,通常为4(称为线性,一阶或单频带SH)或9(称为二次,二次)度或两波段SH)。这非常紧凑,因为您只需要存储比例因子。例如,对于具有RGB数据的二次SH,每个探头仅需要9 * 3 = 27个值。因此,SH可以使一个点周围的光非常紧凑,但也必须非常柔和和模糊。
Simon的技术博客中的此屏幕截图显示了在整个场景中排列的一系列SH光探测器,每个探测器都显示了在该场景中接收到的间接照明点:
“光探测器”的另一个当前常见含义是环境立方体贴图,其mip级别已预先模糊化为不同的扩展,以便用于粗糙度不同的镜面照明。 Seb Lagarde博客的这张图片显示了基本思想:
较高分辨率的尖头(向左)用于需要详细反射图像的高度抛光的表面。向右,较低分辨率的Mip级别逐渐变得模糊,并用于来自较粗糙表面的反射。在着色器中,在采样此立方贴图时,您可以根据材质粗糙度计算所需的mip级别,并利用三线性滤波硬件。实时图形以近似间接照明。尽管可以实时计算直接照明(或至少对于区域照明近似),但由于其复杂性和计算开销,间接照明通常仍在离线预处理中进行烘焙。烘焙过程的结果将是光照贴图,但是光照贴图仅适用于静态几何体上的漫反射光照,此外还占用大量内存。烘焙一堆SH光源探测器(由于它们非常紧凑,因此您可以买得起很多),再加上少量散布的立方贴图光源探测器,可让您在静态和动态对象上获得体面的漫反射和镜面间接照明。它们是当今游戏中的热门选择。
评论
$ \ begingroup $
很好的解释!只是要确认关于在mips上使用三线性过滤的部分... mips比体积纹理更可取,因为它们使用的分辨率较低,而较高的Blur级别需要的分辨率较低?
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
15年8月14日在5:37
$ \ begingroup $
我会说这两种“光探针”都是相同的。光探针是对场景中某个点接收到的辐射(通常以某种方式进行预卷积)的度量。立方体贴图和SH是存储/计算光探测器的不同方法,因此需要进行不同的存储/性能/质量折衷。 (编辑:为了明确起见,我同意答案,我只是认为将它们视为独立的东西会适得其反。)
$ \ endgroup $
– yuriks
2015年8月14日在5:39
$ \ begingroup $
@AlanWolfe有一个用途,那就是从真实环境(称为灰球/白球)中获取漫射光照的贴图,而不仅仅是镜面反射。这是对两种镜面/灰色球着色器的讨论
$ \ endgroup $
– joojaa
15年8月14日在11:04
$\begingroup$
@AlanWolfe Correct—you need less resolution on the more blurred levels. Also, cubemap volume textures aren't a thing that exists in hardware. :)
$\endgroup$
– Nathan Reed
Aug 14 '15 at 18:12
评论
简短的答案:“光探头”通常表示环境的紧凑球形谐波表示。它们之所以模糊,不仅是因为它们非常紧凑(仅存储几十个字节),还因为它们已经过预先过滤以用作漫射照明。如果有机会,我将扩展为更长的答案。 :)您的问题有什么背景吗? “光探测器”一词含义不清,在不同的场景,算法和引擎中使用不同。
具体来说,如果您去过shadertoy.com,将会看到两组可用的多维数据集映射。一组是环境贴图,另一组是看起来相同但模糊的,被标记为光探针。只是好奇而已,一般来说都是光探头。