【Unity3D技术文档翻译】第3.6.7.1篇 反射探针类型
上一章:【Unity3D技术文档翻译】第3.6.7篇 反射探针概述(Reflection probes)
本章原文所在章节:【Unity Manual】→【Graphics】→【Graphics Overview】→【Lighting】→【Global Illumination】→【Reflection probes】→【Types of Reflection Probe】
反射探针类型
正如检查器中可被选择的选项所示,反射探针有三种基本类型(更多细节请看 component reference 一节)。
- Baked(烘焙) 探针存储了在编辑器中烘焙生成的立方体贴图(cubemap)。你可以通过点击在反射探针检查器底部的 Bake 按钮,或者点击 Lighting window 中的 Build 按钮,来触发烘焙。如果你开启了 Lighting window 中的 Auto 选项,那么当你在场景视图中放置对象时,烘焙探针将自动更新。一个烘焙探针的反射,只能展示在检查器中被标记为 Reflection Probe Static 的对象。这将对 Unity 表明,这些对象在运行时将不会移动。
- Realtime(实时) 探针将在运行时的游戏中创建立方体贴图,而不是在编辑器中。这意味着反射效果不再局限于静态对象,而是能够实时更新以展现场景中的变化。然而,刷新探针的视图会占用相当大的处理时间,因此小心的管理更新是明智的。Unity 允许你通过脚本来触发更新,因此你可以准确控制它们什么时候刷新。同样的,你还可以对探针运用 timeslicing 选项,这样它们将在几帧中渐渐刷新。
- Custom(自定义) 探针也可以被使用。这些探针让你和烘焙探针一样,在编辑器中烘焙视图。当然,你还可以提供一个自定义光照贴图用于反射。自定义探针不能在运行时刷新。
以上三个类型将在下面做详细说明。
烘焙和自定义反射探针(Baked and Custom Reflection Probes)
一个烘焙(Baked)反射探针是指在 Unity 编辑器中被捕获并存储的反射光立方体贴图,用于接下来的游戏中。一旦捕获过程结束,反射光就会被“冻结”,因此烘焙探针不能实时响应场景中运动物体造成的变化。这么做将比实时探针(能够响应变化)具有更低的处理负荷,在大多数情况下都可以接受。例如,如果只有一个正在运动的可反射对象,那么它只需要反射周围静态环境。
使用烘焙探针
为了让探针表现为烘焙探针,你应该将探针的 Type 属性设置为 Baked 和 Custom(下面会介绍自定义探针的额外特性)。
被烘焙探针捕获到的反射光,只能包含被标记为 Reflection Probe Static 的对象(在对象的检查器的左上角使用 Static 菜单设置)。你还可以在反射光立方体贴图中使用 Culling Mask 和 Clipping Planes 属性,来更进一步筛选被包含在内的对象,它的工作方式和摄像机一样(探针本质上就像一个旋转到立方体贴图的六个面,分别进行查看的摄像机)。
当 Lighting window 中的 Auto 选项被开启,烘焙反射光将随着场景中对象位置的改变自动更新。否则,你需要手动点击反射光探针检查器中的 Bake 按钮,来更新探针。(Lighting window 中的 Build 也能触发探针更新。)
无论你使用自动烘焙还是手动烘焙,烘焙过程都将异步进行,而你将继续在编辑器中工作。然而,如果你移动了任何静态对象,改变它们的材质或者外观,烘焙过程将重新开始。
自定义探针(Custom Probes)
默认情况下,自定义探针工作方式和烘焙探针一样,只是他们还有一些额外的选项用于改变某些行为。
自定义探针中的 Dynamic Objects 属性,允许没有被标记为 Reflection Probe Static 的对象被包含进反射光立方体贴图。注意,在烘焙时,这些对象在反射光中的位置仍然是被“冻结”的。
Cubemap 属性允许你分配你自己的立方体贴图,因此可以完全独立于该视点看到的环境。你可以从3D软件中生成一个天空盒或者一个立方体贴图,作为反射源。
实时探针(Realtime Probes)
在许多情况下,烘焙探针很有用,并且具有很好的运行时性能。但是他们有一个缺点,就是不能在游戏中实时更新。这意味着,对象在场景中运动,但是反射光没有跟随它们一起运动。如果觉得这是很大的限制,那么你可以使用 Realtime 探针,它可以在运行时更新反射光立方体贴图。该效果伴随着更高的处理负荷,但是提供了更好的真实性。
使用实时探针
为了在运行时开启探针更新,你应该在 Reflection Probe 检查器中将它的 Type 属性设置为 Realtime。你不需要将对象标记为 Reflection Probe Static,就能够捕获它们的反射光(而在烘焙探针中你需要这么做)。而且,你还可以使用 Culling Mask 和 Clipping Planes 属性,来有选择地将一些对象从反射光立方体贴图中排除,它的工作方式和摄像机一样。
在编辑器中,实时探针的工作流和烘焙探针很像,只是它们倾向于更快的渲染。当 Lighting window 中的 Auto 选项被开启,烘焙反射光将随着场景中对象位置的改变自动更新。否则,你需要手动点击反射光探针检查器中的 Bake 按钮,来更新探针。(Lighting window 中的 Build 也能触发探针更新。)
无论你使用自动烘焙还是手动烘焙,烘焙过程都将异步进行,而你将继续在编辑器中工作。然而,如果你移动了任何静态对象,改变它们的材质或者外观,烘焙过程将重新开始(以上两段半和上面“使用烘焙探针”中的表述一模一样)。
注意:目前,只有当被标记为 Reflection Probe Static objects 的对象被移动或者改变外观时,实时探针才能在场景视图(Scene view)中更新。这意味着动态对象不会触发更新,即便这些对象出现在了反射中。当动态对象被改变时,你可以通过选择 Lighting window 中 Build 按钮中的 Bake Reflection Probes 选项来更新反射光。
如果本文对你有帮助的话,点个赞或者评论一下吧!