Unity3D:具有大量球形网格的多镜头渲染性能

时间:2016-03-02 09:38:31

标签: c# unity3d rendering

我有一个Unity 3D场景,有几个摄像头看着同一个物体(一个巨大的脑网~100k三)但不一定需要相同的观点。

在同一个3D场景中,有大量的球形图网格(从100到30000)。

enter image description here

enter image description here

enter image description here

在所有相机中,我必须使用部分图形网格显示脑网格。

根据摄像机视图,每个绘图可以具有不同的大小(网格滤镜和球形对撞机),不同的材质(不透明或透明)并且可以是可见的或不可见的。 球形对撞机的尺寸必须与网格相同。

我为每个球形网格设置了共同的共享网格。 他们的材料可以是我定义的几种共享材料之一。

在渲染场景之前,对于OnPreCull函数中的每个摄像机视图,我必须定义哪些图是可见的以及它们的外观。

这部分成本非常高,我尝试了几件事:

  • 设置游戏对象无效:太昂贵
  • 将局部比例设置为vector3(0,0,0):更好但我可以看到渲染仍在分析器中完成
  • 设置一个完全透明的材质:结果相同,但在分析器中,渲染现在是透明的而不是不透明的
  • 设置不在相机图层蒙版中的图层:巨大的脚本成本

如果我可以制作一个高效的剔除系统,并且所有相机都在同一个点上,那我就不会知道......

我欢迎任何新想法。

1 个答案:

答案 0 :(得分:2)

第一期:

关于四点的具体问题。

只需设置renderer.enabled = false,就可以了解所有内容。

但请注意,正如我在评论中提到的那样,你永远不会试图嘲笑自己"在Unity中(除非我误解了你的描述)。

第二期:

关于小球体。我怀疑你在场景中有很多。你根本无法做到这一点。在视频游戏(所有3D工程中最困难的)中,您只需使用广告牌即可。它是怎么说" grass"在一个场景中完成。您可以使用Unity中的粒子系统或其他技术很好地实现这一点。实施超出了本答案的范围,但您必须全面调查广告牌。它只是一个小的平面图像,在渲染过程中始终面向相机。

问题2B:

但请注意,球体对撞机非常棒,您可以根据需要使用。从基本数学的原因来看,我确信这是显而易见的。小贴士:经常人们试着写自己的"认为它会更快。 100不可能胜过100?在PhysX中空间剔除科学研究的人年 - 而且他们使用金属,gpu,所以你无法击败它。

问题三:

您是否有可能在项目的某个地方使用 mesh 对撞机?根本不要使用网格对撞机。 (它们在Unity中被提及或使用时非常混乱;它们只有一两个非常具体的限制用途。)

问题四:

我很困惑你为什么开启和关闭。我有一个猜测。

我怀疑你没有使用多个" stage"!

当您拥有多台相机时,有一个关于视频游戏的惊人技巧。事实上,你有" offscreen"场面!所以你可能在地下城里有玩家等。关闭"到旁边"对于其他相机,你可能会对整个运行过程完全重复或重复三次设置(你可以"如果摄像机转向错误,可以看到#34;)。 (在示例中,您将在dopplegangers,着色,地图样式或任何情况下具有不同的品质。)有时,您只需运行物理计算或解决其他问题,就可以制作一个完整的双精度。

Fascinating extreme example of that sort of thing

总之,在你的情况下,

你可能需要一个完整的阶段'每个摄像机视图的摄像头和大脑

这可以是http://answers.unity3d.com/answers/299823/view.html,但它确实是日常生活中的事情。在你的整个场景中,你会看到八个快乐的大脑坐在一排,每个大脑都有自己的相机。在每一个中,您将显示相关的任何项目/角度等。 (显然,如果某些项目是相同的,除了视角和#34;你可以使用"相同的大脑和一个以上的相机":但我不会这样做,最好有每个视图的单脑一体摄像机。)

我相信这可能是你所拥有的根本问题!