unity学习 |
您所在的位置:网站首页 › 遮挡剔除原理 › unity学习 |
unity学习——遮挡剔除
基本概念:
“遮挡剔除”过程可防止 Unity 为那些被其他游戏对象完全挡住(遮挡)的游戏对象执行渲染计算。 说白了就是如果摄像机看不见的物体,我就不用去管它了(渲染)。 遮挡剔除 我认为其实也是一个空间换时间的方法,做项目的时候可以结合遮挡区域、遮挡入口灵活运用。 遮挡剔除的效果展示:未开启遮挡剔除
遮挡剔除会在 Unity Editor 中生成有关场景的数据,然后在运行时使用该数据来确定摄像机可以看到的内容。这种生成数据的过程称为烘焙。 在对遮挡剔除数据进行烘焙时,Unity 将场景划分为多个单元,并生成描述单元内几何体以及相邻单元之间可见性的数据。然后,Unity 尽可能合并单元,以减小生成的数据的大小。要配置烘焙过程,可以在 Occlusion Culling 窗口中更改参数,并在场景中使用遮挡区域。 在运行时,Unity 会将这些烘焙的数据加载到内存中,并且对于每个启用了 Occlusion Culling 属性的摄像机,将会对数据执行查询以确定该摄像机可以看到的内容。请注意,启用遮挡剔除后,摄像机将执行视锥体剔除和遮挡剔除。 如何使用静态遮挡剔除:使用遮挡剔除一定要在相机的Inspector窗口勾选Occlusion Culling 静态遮挡物的所有游戏对象,设为Occluder Static,被静态遮挡物的所有游戏对象,设为Occludee Static。 在顶部菜单中,选择 Window > Rendering > Occlusion Culling 以打开 Occlusion Culling 窗口。 2.选择 Bake 选项卡。 3.在 Inspector 窗口的右下角,按 Bake 按钮。Unity 会生成遮挡剔除数据,将数据另存为项目中的资源,并将该资源与当前场景关联。 游戏对象可以是静态的,也可以是动态的(非静态)。静态游戏对象和动态游戏对象在 Unity 的遮挡剔除系统中的行为不同: Unity 可以将静态游戏对象作为静态遮挡物和/或静态被遮挡物烘焙到遮挡剔除数据中。Unity 无法将动态游戏对象烘焙到遮挡剔除数据中。动态游戏对象可以在运行时充当被遮挡物,而不能充当遮挡物。 如何启用动态遮挡剔除?在对象的Inspector窗口勾选 Dynamic Occlusion,新建时默认已经勾选。 Tip:如果确定 Unity 绝对不应该将遮挡剔除应用于特定的游戏对象,则可以禁用 Dynamic Occlusion 以减少运行时计算并降低 CPU 使用率。 遮挡区域使用 Occlusion Area 组件可以定义遮挡剔除系统中的视图体积。视图体积是摄像机可能处于运行时的场景区域。在烘焙时,Unity 在视图体积内生成更高精度的数据。在运行时,当摄像机位于视图体积内的时候,Unity 进行更高精度的计算。 如果尚未在场景中定义任何视图体积,Unity 将在烘焙时创建一个视图体积,其中包含标记为 Occluder Static 或 Occludee Static 的所有场景几何体。在大型或复杂场景中,这可能导致不必要的大量数据、漫长的烘焙时间以及资源密集的运行时计算。为了避免发生这种情况,请将遮挡区域 (Occlusion Areas) 放置在场景中,从而定义摄像机可能处于的区域的视图体积。 可以给一个空物体挂载Occlusion Area组件,记得勾选 Is View Volume。 遮挡入口遮挡入口 (Occlusion Portal) 可以是打开或关闭状态。遮挡入口关闭时,它将遮挡其他游戏对象。遮挡入口打开时,它不会遮挡其他游戏对象。列如: 门打开或者关闭 无需将 Occlusion Portal 组件置于其表示的游戏对象上。 在场景中设置遮挡入口: 选择场景中的合适游戏对象来充当遮挡入口。适合作为遮挡入口的游戏对象包括中型到大型的实体游戏对象(例如门)。确保未将此游戏对象标记为 Occluder Static 或 Occludee Static。将 Occlusion Portal 组件添加到游戏对象。烘焙场景的遮挡数据。确保 Occlusion Culling 窗口、Inspector 面板和 Scene 视图均为可见状态。在 Scene 视图中,将摄像机移至遮挡入口正前方的位置。选择具有 Occlusion Portal 组件的游戏对象。在 Inspector 窗口中,开启和关闭 Occlusion Portal 组件的 Open 属性。在 Scene 视图中,观察遮挡剔除的差异。完结! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |