Unity:如何使用具有多线程图形作业的Camera.Render的所有CPU内核?优化 - 不工作?

Ben*_*ard 5 cpu performance multithreading rendering unity-game-engine

如何使用多线程图形作业优化?

我有一个项目(较少的游戏,更多的是一个应用程序),它在一个场景中使用了数十个摄像机,所有这些都是一次渲染.(不要问为什么,必须这样!)

毋庸置疑,在运行应用程序时,由于渲染管道是单线程的,因此几乎可以实现一个CPU内核.结果,它降低了帧速率.(GPU,内存等远低于100%负载 - CPU是这里的瓶颈)

看到Unity有一个名为"图形作业(实验)"的选项让我感到非常欣慰,该选项专门用于在多个线程之间拆分渲染,因此,多个核心.

但是,启用此选项并将DirectX12设置在图形API列表的顶部,我希望现在可以充分利用CPU,即所有CPU内核都可以进行主动渲染.然而,似乎仍然是应用程序仍然只利用我的CPU潜力的40%,同时提供低帧速率.当然,它应该只有在最大化CPU时才会降低帧速率?似乎并没有以不同的方式使用各个核心.为什么我不能通过利用接近100%的CPU上的所有内核(总共包括正在运行的任何其他程序)来最大化输出帧速率?

基本上我想知道如何让Unity充分利用我所有的CPU核心,以便尽可能高的帧速率,同时在我的场景中同时拥有尽可能多的摄像头...... ...我想想图形工作会解决这个问题?...除非我错误地使用它们或没有使用正确的设置组合?

顺便说一句,我的CPU是i7-4790 @ 3.6ghz,我的GPU是使用DX12的980Ti.32GB的RAM.

Mic*_*iss 1

在相机渲染期间,CPU 必须与 GPU 进行通信,即所谓的绘制调用。在幕后,Unity 已经使用多线程方法(ctrl+f “线程”)来让 CPU 与 GPU 对话,并且将任务分配给工作线程的过程发生在黑匣子中。请注意,“并非所有平台都支持多线程渲染;在撰写本文时,WebGL 不支持此功能。在不支持多线程渲染的平台上,所有 CPU 任务都在同一线程上执行。”

因此,如果您的应用程序受 CPU 限制,那么您的平台可能不受支持,或者任务根本无法分解为足够小的块来填充所有核心,或者其他一些“黑匣子”原因,例如也许CPU会按顺序迭代每个相机,而不是批量处理(这对我来说很有意义,因为主线程必须以线程安全的方式与Unity API交互以确定必须绘制什么)。

看来您唯一的选择是阅读此处提供的链接并尝试优化您的场景以最大程度地减少绘制调用,但话虽如此,我认为尝试渲染“数十个摄像机”是一个非常糟糕的主意,尤其是如果它们都通过后期处理等以高分辨率渲染复杂的场景 - 尽管我从未尝试过类似的事情。