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