Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity3D:使用大量球形网格进行多摄影机渲染时的性能_C#_Unity3d_Rendering - Fatal编程技术网

C# Unity3D:使用大量球形网格进行多摄影机渲染时的性能

C# Unity3D:使用大量球形网格进行多摄影机渲染时的性能,c#,unity3d,rendering,C#,Unity3d,Rendering,我有一个Unity 3D场景,有几个摄像头在看同一个物体(一个巨大的大脑网格~100k tri),但不需要使用相同的视角 在同一个3D场景中,有大量的球面图网格(从100到30000) 在所有的相机中,我都要用一部分绘图网格来显示大脑网格 根据摄影机视图的不同,每个绘图可以具有不同的大小(网格过滤器和球体碰撞器)、不同的材质(不透明或透明),并且可以可见或不可见。 球体碰撞器必须具有与网格相同的大小 我为每个球形网格共同设置了一个共享网格。 他们的材质可以是我定义的几个共享材质之一 在渲染

我有一个Unity 3D场景,有几个摄像头在看同一个物体(一个巨大的大脑网格~100k tri),但不需要使用相同的视角

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

在所有的相机中,我都要用一部分绘图网格来显示大脑网格

根据摄影机视图的不同,每个绘图可以具有不同的大小(网格过滤器和球体碰撞器)、不同的材质(不透明或透明),并且可以可见或不可见。 球体碰撞器必须具有与网格相同的大小

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

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

这部分可能非常昂贵,我尝试了几种方法:

  • 将游戏对象设置为非活动:成本太高
  • 将局部比例设置为vector3(0,0,0):更好,但我可以看到渲染仍在探查器中完成
  • 设置总透明材质:结果相同,但在探查器中渲染的材质现在是透明的,而不是不透明的
  • 设置不在摄影机层遮罩中的层:巨大的脚本成本
我不知道我是否能制作一个高效的筛选系统,所有这些摄像头都在同一个点上

我欢迎任何新想法。

第一期:

用四个点来回答你的具体问题

只需设置
renderer.enabled=false
,即可

但是请注意,正如我在评论中提到的,你永远不会试图在统一中“挑选你自己”(除非我误解了你的描述)


第二期:

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


问题2B:

但是请注意,球体碰撞器非常棒,您可以使用任意数量的碰撞器。从基本的数学原因来看,我确信这是显而易见的。小贴士:人们常常试图“写自己的”,认为这样会更快。不可能超过100?在PhysX进行了数人年的空间筛选科学研究,而且他们使用的是金属gpu,所以你无法打败它


问题三:

您是否有可能在项目的某个地方使用网格碰撞器?绝对不要使用网格碰撞器。(在Unity中提到或使用它们是非常令人困惑的;它们只有一个或两个非常特定的有限用途。)


问题四:


我不明白你为什么要打开和关闭东西。我猜

我怀疑你没有使用多个“阶段”! 当你有一个以上的摄像头时,视频游戏有一个惊人的技巧。事实上,你有“屏幕外”的场景!所以你可能有玩家在地牢或类似的地方。关闭“侧边”,你可能会有一个完整的重复或三次设置运行整个事情(你可以看到它,如果相机转错方向)为其他相机。(在本例中,你会在doppleganger、着色、贴图样式或其他任何情况下拥有不同的质量。)有时,你只为了运行物理计算或解决其他问题而制作一整双

简言之,在你的情况下

你可能需要一个完整的“阶段”的相机和大脑的每个相机视图! 同样,这是可能的,但它确实是每天的事情。在你的整个场景中,你会看到八个快乐的大脑排成一行,每个人都有自己的相机。在每一个项目中,您将显示任何相关的项目/角度等。(显然,如果某些项目是“相同的,但视角不同”,你可以使用“同一个大脑有多个摄像头”:但我不会这样做,最好是一个大脑,每个视图一个摄像头。)


我相信这可能是你面临的根本问题

嗨,你能解释一下什么是“球面网格”吗?请附上第二张和/或第三张图片,详细说明这些内容。请在游戏视图中的特写镜头和编辑器视图中的特写镜头中显示一个。我不明白为什么要进行筛选:Unity包含了极好的筛选,并且无论如何都不可能编写更快的筛选。当然,在某些情况下,你必须“打破某些东西”。经典的例子是假设你有一条2公里长的跑道。显然,你必须把它分成100米的20段,否则不管怎样,它都会被画出来!但这是不言而喻的。一旦你打破它,没有什么能做得更好的工作,联合扑杀。剔除引擎太棒了。请注意,你提到了“碰撞器”,我看不出有任何理由你会在这个项目中使用碰撞器,请解释,如果我误解了。它们有什么用途?球形网格只是一个游戏对象,它有一个生成的球体作为网格过滤器,还有一个半径为1的球体碰撞器。我必须能够单击每个球体以显示信息并执行一些ROI操作。我谈到了剔除,因为我发现在场景中没有可见球体的情况下,我可以在探查器中看到大量渲染工作,这令人怀疑。(添加图像)我已经尝试过了,但是为每帧启用和禁用渲染器1到5次(对于每个摄影机)需要花费大量时间。但是谢谢你关于挑选的建议。我不明白你为什么要打开和关闭东西——我有