We have an incredibly GPU-intensive simulator with virtual sensors each using its own camera, being rendered to multiple rgbfloat buffers with a custom shader and then crunched by a ComputeShader, sending the results to another shader rendering the results to a RenderTexture. One sensor at a time is fine, but when we run multiple sensors it kills the framerate. What we would like to do ideally is have a computer with 8 GPUs, each handling one sensor’s camera rendering and compute shader.
Is this possible in Unity at all? I remember there was some old special license for some sort of multi-screen dome rendering that seemed like it would use similar tech to what we need. We can’t just use SLI because that wouldn’t help much in this situation, especially without nVidia optimizing the SLI settings for our app (last time I tried SLI in our Unity app, I think I got a 5% framerate increase).
Did you find any solutions to this?
Unfortunately no, Unity just doesn’t support this. They did have “Cluster Rendering” which let you sync Unity between different computers, each rendering its own data, so that would allow spreading the load that way, but it required a special Unity license and last mention of it in Unity docs was for Unity 5.6 (and of course this is separate computers, so not quite the same). Best we could come up with would be to do something similar, manually - in our case we could run on multiple computers with the same random seed, each computer simulating a different sensor, though setting that up is a pain, and since physics is nondeterministic the results of different computers wouldn’t be guaranteed to sync up. Another similar option is to manually create a simple server/client setup, again syncing with different computers, running only the physics on the server and using RTC calls to have the clients render at the same time, but again, it’s not ideal.
If we had a computer with 4 GPUs, ideally we would like to have one Unity app accessing the 4 GPUs separately, each running its own compute shaders and whatever, but that’s just not possible.