Version: 6000.3
语言: 中文
使用 CullingGroup API 配置剔除
创建剔除组

CullingGroup API 简介

CullingGroup 提供了一种将您自己的系统集成到 Unity 的剔除和LOD细节级别 (LOD) 技术是一种优化,可减少 Unity 在游戏对象与相机的距离增加时必须为游戏对象渲染的三角形数量。更多信息
请参阅术语表
管道。这可以用于多种目的;例如:

  • 模拟人群,同时只有满游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
    请参阅术语表
    对于现在实际可见的角色
  • 构建 GPU粒子系统通过在场景中生成大量小型 2D 图像并为其设置动画来模拟流体实体(如液体、云和火焰)的组件。更多信息
    请参阅术语表
    由 Graphics.DrawProcedureal 驱动,但跳过墙后面的渲染粒子系统
  • 跟踪哪些生成点对相机在场景中创建特定视点图像的组件。输出要么绘制到屏幕上,要么作为纹理捕获。更多信息
    请参阅术语表
    为了在玩家看到敌怪“弹出”到视野中的情况下生成敌怪
  • 将角色从近距离的全质量动画和 AI 计算切换到远距离的低质量廉价行为
  • 在 10,000 个标记点中场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您可以放置环境、障碍物和装饰,实质上是分批设计和构建游戏。更多信息
    请参阅术语表
    并有效地找出玩家何时进入其中任何一个 1m 以内

该 API 的工作原理是让您提供边界球体数组。然后计算这些球体相对于特定摄像机的可见性,以及可以被视为LOD关卡数字的“距离带”值。

CullingGroup API 最佳实践

在考虑如何将剔除组应用于项目时,请考虑剔除组设计的以下方面。

使用可见性

CullingGroup计算可见性的所有体积都由边界球体定义 - 实际上,位置(球体的中心)和半径值。出于性能原因,不支持其他边界形状。在实践中,这意味着你将定义一个球体,该球体完全包围你感兴趣的剔除对象。如果需要更紧密的配合,请考虑使用多个球体来覆盖对象的不同部分,并根据所有球体的可见性状态做出决策。

为了评估可见性,剔面组需要知道应该从哪个摄像机可见性中计算。目前,单个剔除组仅支持单个摄像机。如果需要评估对多个摄像机的可见性,则应为每个摄像机使用一个剔除组并合并结果。

剔杀组将根据视锥体剔除和静态计算可见性遮挡剔除 禁用从摄像机视图中隐藏(遮挡)的游戏对象渲染的过程。更多信息
请参阅术语表
只。它不会将动态对象视为潜在的遮挡物。

使用距离

剔除组能够计算某个参考点(例如,摄像机或玩家的位置)与每个球体上最近的点之间的距离。此距离值不会直接提供给您,而是使用您提供的一组阈值进行量化,以计算离散的“距离带”整数结果。目的是将这些距离带解释为“近距离”、“中距离”、“远距离”等。

当一个对象从一个波段移动到另一个波段时,CullingGroup 将提供回调,让你有机会执行一些作,例如将该对象的行为更改为CPU密集度较低的行为。

任何超出最后一个距离带的球体都将被视为不可见,从而可以轻松构建剔除实现,以完全停用非常远的对象。如果您不希望这种行为,只需将最终阈值设置为无限远。

每个剔除组仅支持一个参考点。

性能和设计

CullingGroup API不允许你对场景进行更改,然后立即请求边界球体的新可见性状态。出于性能原因,剔除组仅在执行整个摄像机的剔除期间计算新的可见性信息;此时,您可以通过回调或 CullingGroup 查询 API 获得信息。在实践中,这意味着你应该以异步方式处理剔杀组。

你提供给 CullingGroup 的边界球体数组由 CullingGroup 引用,而不是复制。这意味着你应该保留对传递给 SetBoundingSpheres 的数组的引用,并且你可以修改此数组的内容,而无需再次调用 SetBoundingSpheres。如果你需要多个剔向组来计算同一组球体的可见性和距离(例如,对于多个摄像机),那么让所有剔除组共享同一个边界球体数组实例会很有效。

使用 CullingGroup API 配置剔除
创建剔除组