什么是”Cubemap“?
简单来说,Cubemap是六个方形纹理面的集合,代表了对环境的反射。每个面都是代表沿着轴线(上,下,左,右,前,后)方向的视图。
反射源(Reflection Source)
默认情况下,使用Unity的“标准着色器(Standard Shader)”渲染场景中的对象。标准着色器(Standard Shader)是“基于物理的着色器(physically base shader)”(PBS)。通过模仿现实世界中的反射性和“节能”原理的属性来准确地表示材料(materials)上光的行为。
当使用标准着色器(Standard Shader)时,每种材料(materials)都具有基于其“镜面”或“金属”的反射效果。因为没有足够强大的硬件做到实时的射线追踪反射,我所以们不得不依靠预渲染反射。我们可以使用”Cubemap”,它的6个面来自于Skybox,或者使用“Reflection Probe”渲染某个点的环境,并将其写入到纹理(Texture)中。然后通过“material shader”将照明和表面数据混合,以便得到类似反射率的效果。
默认情况下,场景中镜面/金属材质将反映出Skybox,由环境照明(Environment Lighting Panel)面板的反射源(Reflection Source)属性定义。可以通过选择不同的反射源或通过在场景中添加Reflection Probe来改变这种默认效果。
反射探针(Reflection Probes)
通常,一个对象在Unity场景中简单地反射出Skybox是不好的。在许多情况下,物体可能会被遮挡或者被遮住。他们可能在室内或是在桥梁和隧道之下。
为了创建更准确的反射效果,我们需要使用“Reflection Probe”来对某个“看到”的对象进行采样。这些探针渲染所在位置的场景,并将其写入“cubemap”。
可以通过(GameObject> Light> Reflection Probe)添加反射探针。这了是2篇介绍的视频:
https://www.youtube.com/watch?v=ximKTroBqeA
https://www.youtube.com/watch?v=t7jiayVKYfU
一个反射探针(Reflection Probe)会决定生成的“cubemap”是什么样子,也就是通过反射可以看到什么。一般来说,出于性能考虑,最好尽可能少的使用反射探针。反射探针不会带来物理上的改变,仅仅是对于场景的反射。
左:默认反射。右:反射探针。
在反射探针(Reflection Probe)的“Inspector”面板中,我们可以设置探针的“Type”属性,以在“烘焙(Bake)”,“自定义(Custom)”或“实时(Realtime)”之间进行选择。
需要注意的是,实时反射探针(Realtime Reflection Probe)对性能非常有害,这是因为每个探针(Probe)都渲染场景6次。在某些情况可能需要使用实时反射探针(Relatime Reflection Probe),但是作为一般规则,烘焙反射探针(Baked Reflection Probe)是比较不错的,因为它的性能要好得多。
请注意,只有当GameObject的“Inspector”面板顶部的“static”下拉菜单中标记为“Reflection Probe Static”时,才能显示烘焙反射探针(Baked Reflection Probes)的效果。相反,实时(Realtime)探针会渲染所有可见的GameObjects,除非使用剔除掩码(culling mask)。