CullingGroup 提供了一种方法,可以将您自己的系统集成到 Unity 的剔除和LOD细节层次 (LOD) 技术是一种优化方法,当游戏对象与摄像机的距离增加时,它会减少 Unity 需要渲染的游戏对象三角形数量。 更多信息
参见 术语表 管道中。这可以用于多种目的;例如
该 API 的工作原理是让您提供一个包围球数组。然后计算这些球体相对于特定摄像机的可见性,以及可以像 LOD 层级编号一样处理的“距离段”值。
在考虑如何将 CullingGroup 应用于您的项目时,请考虑 CullingGroup 设计的以下方面。
CullingGroup 计算可见性的所有体积都由包围球定义 - 在实践中,一个位置(球体的中心)和一个半径值。出于性能原因,不支持其他边界形状。在实践中,这意味着您将定义一个完全包含您感兴趣的剔除对象的球体。如果需要更紧密的拟合,请考虑使用多个球体覆盖对象的不同部分,并根据所有球体的可见性状态做出决策。
为了评估可见性,CullingGroup 需要知道应从哪个摄像机可见性计算。目前,单个 CullingGroup 仅支持单个摄像机。如果您需要评估对多个摄像机的可见性,则应为每个摄像机使用一个 CullingGroup 并组合结果。
CullingGroup 将根据视锥剔除和静态遮挡剔除一个禁用渲染隐藏(遮挡)在摄像机视野之外的游戏对象的进程。 更多信息
参见 术语表进行可见性计算。它不会将动态对象视为潜在的遮挡物。
CullingGroup 能够计算某个参考点(例如,摄像机或玩家的位置)与每个球体上最近点之间的距离。此距离值不会直接提供给您,而是使用您提供的阈值集进行量化,以便计算离散的“距离段”整数结果。目的是将这些距离段解释为“近距离”、“中距离”、“远距离”等。
当对象从属于一个段移动到属于另一个段时,CullingGroup 将提供回调,让您有机会执行诸如将该对象的行为更改为不太占用 CPU 的行为等操作。
任何超出最后一个距离段的球体都将被视为不可见,使您可以轻松构建一个完全停用非常远处的对象的剔除实现。如果您不希望此行为,只需将您的最终阈值设置为无限远的距离。
每个 CullingGroup 仅支持一个参考点。
CullingGroup API 不会让您能够更改场景,然后立即请求包围球的新可见性状态。出于性能原因,CullingGroup 仅在对整个摄像机执行剔除期间计算新的可见性信息;此时,您可以通过回调或通过 CullingGroup 查询 API 获取信息。在实践中,这意味着您应该以异步方式处理 CullingGroup。
您提供给 CullingGroup 的包围球数组会被 CullingGroup 引用,而不是复制。这意味着您应该保留对传递给 SetBoundingSpheres 的数组的引用,并且您可以修改此数组的内容,而无需再次调用 SetBoundingSpheres。如果您需要多个 CullingGroup 来计算同一组球体的可见性和距离 - 例如,对于多个摄像机 - 那么让所有 CullingGroup 共享相同的包围球数组实例是有效的。