Unity3D技术文档翻译征服Unity3d何三思

【Unity3D技术文档翻译】第3.6.7.2篇 使用反射探针

2018-08-26  本文已影响10人  何三思
Unity3D技术文档翻译

上一章:【Unity3D技术文档翻译】第3.6.7.1篇 反射探针类型

本章原文所在章节:【Unity Manual】→【Graphics】→【Graphics Overview】→【Lighting】→【Global Illumination】→【Reflection probes】→【Using Reflection Probes】

使用反射探针

你可以将 Reflection Probe 组件添加到场景中的任何对象上,但是推荐将每个探针添加到一个单独的空对象上。通常工作流如下:

为了看到反射光效果,场景中至少需要一个可反射对象。一个简单的测试对象可以按照下面步骤被创建:

球体现在可以展示从探针获取到的反射光。简单地配置一个探针,就已经足够看到基本的反射效果。

最后,在反射光可见之前,探针必须被烘焙好。如果你开启了 Lighting window 中的 Auto Generate 选项,那么当你放置或者改变场景中的对象时,反射光将自动更新(尽管不是即时的)。如果没有开启 Auto Generate 选项,你就必须点击 Reflection Probe 检查器中的 Bake 按钮来手动更新探针。之所以不开启自动烘焙,是因为在拥有许多探针的复杂场景中,烘焙过程会占用很多时间。

放置探针

探针的位置主要由它所在的游戏对象决定,因此你可以简单地拖拽对象到想要的位置。之后,你应该设置探针的作用区域;它是轴对齐的盒体形状,大小由 Box Size 属性设置。你可以直接设置尺寸值,也可以开启检查器中的编辑模式,在场景中拖拽盒体的边。所有探针的作用区域,应该共同覆盖可反射对象可能穿过的所有区域。

你应该将探针放置在明显被反射的大型对象附近。墙壁的中心和墙角都是很好的候选位置。如果较小的对象具有一个强烈的视觉效果,那么可能需要靠近放置探针。例如,你可能想要篝火的火焰被反射,即使对象本身很小或者不重要。

当你在所有适当的位置放置了探针后,你需要使用上面提到的 Box Size 属性定义每个探针的作用区域。一堵墙可能只需要一个探针区域沿着它的长度(至少如果它有一个相当统一的外观),但是垂直于墙面方向的区域可能相对的狭窄;这意味着,只有当对象十分靠近墙时,墙才能被反射。对于一个外观区别很小的开阔区域,通常只需要被一个探针覆盖。注意,探针的区域与主世界轴(X、Y和Z)对齐,因此不能被旋转。这意味着,有时候,如果一堵墙不是轴对齐的,可能就需要一组探针来沿着墙面放置。

默认情况下,探针的作用区域以它的视图点(view point)为中心,但是这可能不是捕获反射光立方体贴图的理想位置。例如,对于一座很高的墙,探针区域需要从墙面延伸一些距离,但是你可能想要反射只在靠近墙的时候被捕获,而不是在区域中心。你可以使用 Box Offset 属性对视图点随意地添加偏移(偏移是指游戏对象本地空间中的位置,由探针的立方体贴图视图生成)。使用它,你就可以容易地将视图点放置在作用区域的任何位置,或者整个在区域之外。

重叠的探针区域

想要在放置相邻探针的时候,让它们的区域相互不重叠,做到这点非常困难;然而幸运的是,你也没必要这么做。而是把问题转变为在重叠区域,应该选择使用哪个探针。默认情况下,Unity 计算可反射对象的包围盒(边界盒)与每个重叠探针区域之间的交集;与包围盒具有最大交集体积的,就是被选择的那个。

探针A被选择,因为它与对象的交集更大。

你可以使用探针的 Importance(权重) 属性修改计算。具有更高权重的探针,在重叠区域中,要比那些权重低的探针具有优先权。这很有用,比如,如果你有一个小的探针区域,而它被完全包含在另一个更大区域的内部(例如,角色的包围盒与封闭区域之间的交集可能总是很大,于是小的区域会永远不被使用)。

混合(Blending)

为了开启反射探针的混合,导航至 Graphic Settings > Tier settings。如果混合被开启,当可反射对象穿过一个区域到另一个区域,Unity 将逐渐淡出前者探针的立方体贴图,同时淡入后者的立方体贴图。这种逐渐转变的效果,避免了当对象穿过区域的边界时,一个显眼的对象突然弹入反射光中。

混合是通过使用 Mesh Renderer 组件上的 Reflection Probes 属性进行控制的。一共有四个混合选项:

当探针具有相同的权重时,对于每个探针区域,混合权重将通过各自交集体积,与所有探针和对象包围盒之间的交集之和相除得出。例如,如果包围盒与探针 A 的交集体积是1立方体单位,与探针 B 的交集体积是2立方体单位,那么混合值将是:

也就是说,混合将吸收 33% 探针 A 的反射,吸收 67% 探针 B 的反射。

当一个探针被完全包含在另一个探针之中时,计算将有些不同,因为内部区域与外部区域完全重叠了。如果对象的包围盒完全在内部区域中,那么区域的混合权重就是1(外部区域将完全不被使用)。当对象只是部分在内部区域时,包围盒与内部区域的交集体积,将与包围盒的完整体积相除。例如,如果交集体积是1立方体单位,而包围盒的体积是4立方体单位,那么内部探针的混合权重就是 1.0 / 4.0 = 0.25。然后用1减去该数值,就得出了外部探针的混合权重,在这个例子中就是0.75。

当一个探针比其他探针具有更高的 Importance(权重) 值,那么它通常将覆盖其他探针。

如果本文对你有帮助的话,点个赞或者评论一下吧!

上一篇下一篇

猜你喜欢

热点阅读