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