【发布时间】:2016-06-15 01:52:24
【问题描述】:
我有一个 Unity 3D 场景,其中有多个摄像机看着同一个对象(一个巨大的大脑网格 ~ 100k tri),但没有必要以相同的视角。
在同一个 3D 场景中,有大量的球形图网格(从 100 到 30000)。
在所有相机中,我必须显示大脑网格和部分绘图网格。
根据相机视图,每个绘图可以有不同的大小(网格过滤器和球形对撞机)、不同的材料(不透明或透明),并且可以可见或不可见。 球形对撞机的大小必须与网格相同。
我为每个球形网格设置了一个共享网格。 它们的材质可以是我定义的几种共享材质之一。
在渲染场景之前,对于 OnPreCull 函数中的每个摄像机视图,我必须定义哪些图是可见的以及它们的外观。
这部分可能非常昂贵,我尝试了几件事:
- 将游戏对象设置为非活动状态:成本太高
- 将局部比例设置为 vector3(0,0,0):更好,但我可以看到渲染仍在分析器中完成
- 设置完全透明的材质:结果相同,但在分析器中,渲染现在是透明的而不是不透明的
- 在相机图层蒙版中设置图层:巨大的脚本成本
我不知道我是否可以制作一个高效的剔除系统,让所有这些相机都指向同一点...
我欢迎任何新想法。
【问题讨论】:
-
嗨,你能解释一下什么是“球形网格”吗?请附上第二张和/或第三张图片,详细说明这些内容。请在游戏视图中显示一个特写,并在编辑器视图中显示一个。
-
我对你为什么要进行剔除感到困惑:Unity 包含出色的剔除,无论如何都不可能编写更快的剔除。当然,在某些情况下,您必须“分解某些东西”。经典的例子是说你有一条 2 公里长的赛道。显然,您必须将其分解为 20 段 100m - 否则无论如何都会被绘制出来!但这不言而喻。一旦你将其分解,没有什么比 Unity 的剔除工作做得更好了。剔除引擎很棒。
-
请注意,你提到了“碰撞器”,我看不出有任何理由在这个项目中使用碰撞器,如果我误解了,请解释一下。他们有什么目的?
-
球体网格只是一个游戏对象,其生成的球体为 meshFilter,球体碰撞器的半径为 1。我必须能够单击每个球体以显示信息并执行一些操作投资回报率操作。
-
我谈到了剔除,因为我怀疑我可以在分析器中看到很多渲染工作,而场景中没有可见的球体。 (添加图片)