我有一个 Unity 3D 场景,其中有多个摄像头看着同一个对象(一个巨大的脑网约 100k tri),但没有必要使用相同的视角。
在同一个 3D 场景中有大量的球形图网格(从 100 到 30000)。
在所有的相机中,我必须用部分绘图网格显示大脑网格。
根据相机 View ,每个绘图可以有不同的大小(网格过滤器和球形对撞机)、不同的 Material (不透明或透明)并且可以可见或不可见。 球形碰撞器必须与网格具有相同的尺寸。
我为每个球形网格设置了一个共同的共享网格。 他们的素材可以是我定义的几种共享素材之一。
在渲染场景之前,对于 OnPreCull 函数中的每个相机 View ,我必须定义哪些图是可见的以及它们的外观。
这部分可能非常昂贵,我尝试了几种方法:
- 将游戏对象设置为非事件状态:成本太高
- 将局部比例设置为 vector3(0,0,0) :更好,但我可以看到渲染仍在分析器中完成
- 设置完全透明的 Material :相同的结果,但在分析器中渲染现在是透明的而不是不透明的
- 设置一个不在相机图层蒙版中的图层:巨大的脚本成本
我不知道我是否可以制作一个高效的剔除系统,让所有这些相机都看着同一个点......
我欢迎任何新想法。
最佳答案
第一期:
关于您的带有四个点的具体问题。
只需设置 renderer.enabled = false
,仅此而已。
但是请注意,正如我在评论中提到的,您永远不会尝试在 Unity 中“剔除自己”(除非我误解了您的描述)。
第二期:
关于小球体。我怀疑你在现场有很多。你根本不能那样做。在视频游戏(所有 3D 工程中最困难的)中,您只需使用广告牌 即可。这就是在场景中说“草”的方式。您可以使用 Unity 中的粒子系统或其他技术很好地实现这一点。实现超出了此答案的范围,但您必须全面调查广告牌。简单地说,它是一个小的平面图像,在渲染 channel 中始终面向相机。
问题 2B:
但是请注意,球体碰撞器 非常棒,您可以使用任意多个。我敢肯定,从基本的数学原因来看,这是显而易见的。旁白:人们通常会尝试“自己编写”,认为这样会更快。不可能超过100? PhysX 空间剔除科学研究的人年,而且他们使用金属,gpu,所以你无法击败它。
问题三:
您是否有可能在项目的某处使用网格 碰撞器?永远不要使用网格碰撞器。 (在 Unity 中提及或使用它们非常令人困惑;它们只有一两个非常具体的有限用途。)
问题四:
我对你为什么打开和关闭东西感到困惑。我有一个猜测。
我怀疑您没有使用多个“阶段”!
当您拥有多个摄像头时,视频游戏有一个惊人的技巧。事实上,你有“屏幕外”的场景!所以你可能有玩家在地牢之类的地方。在“侧面”之外,您可能对其他摄像机的整个运行设置完全重复或三次(如果摄像机转向错误,您可以“看到它”)。 (在这个例子中,你会在分身、着色、 map 风格或任何情况下有不同的品质。)有时你做一个完整的替身只是为了运行物理计算或解决其他问题。
Fascinating extreme example of that sort of thing .
简而言之,在你的情况下,
对于每个相机 View ,您可能需要一个完整的相机“舞台”和大脑!
同样这可以是 http://answers.unity3d.com/answers/299823/view.html但这确实是日常用品。在你的整体场景中,你会看到八个快乐的大脑坐在一排,每个都有自己的相机。在每一个中,您都会显示任何相关的项目/角度等。 (显然,如果某些项目“相同,除了视角不同”,你可以使用“同一个大脑和多个摄像头”:但我不会那样做,最好为每个 View 配备一个大脑一个摄像头.)
我相信这可能是您遇到的根本问题!
关于c# - Unity3D : Performance with multi-camera rendering with a lot of spheric meshes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35743360/