As DOTS is so powerful at using bandwidth could or has it been applied to Rendering?
I’m interested to know if a fully DOTS game engine on CPU and GPU could do more on both…
As DOTS is so powerful at using bandwidth could or has it been applied to Rendering?
I’m interested to know if a fully DOTS game engine on CPU and GPU could do more on both…
Also, can DOTS be used for particle systems ?
The paradigms of DOTS are how GPUs already work, it’s part of why they’re so fast to begin with. The new VFX Graph is a GPU compute based particle system, which means it’s already kind of a “DOTS based particle system”. But certainly you could write a CPU based particle system using DOTS structured similarly, but a lot slower than the GPU one.
GPUs are already super fast at rendering, way faster than any CPU, and the big bottleneck between the CPU and the GPU is sending commands from the CPU to the GPU. Multithreaded rendering is likely already applying a lot of DOTS like principles, as are the rendering systems behind the SRPs.
So are there any GPU rendering tricks and techniques that can be applied to DOTS programming?
For instance Instancing where a shaders/materials and models or data is repeated within a scene it is only stored once, could there be a DOTS equivalent that would benefit games programming?
Or Imposters where 2D representations of complex objects are used to reduce rendering times, could a lower resolution/dimensional/precision version of data be used with DOTS for higher throughput (where precision allows)?
Or what about LODding where levels of details vary could this be applied to DOTS where the amount of data or precision varies due to proximity to player?
Instancing exists to reduce the bottleneck between the CPU and GPU, it’s slower on the GPU to render. And the data reuse is already a thing for rendering stuff regardless of using instancing or not.
Imposters are a form of LOD, and aren’t really a GPU or DOTS specific thing. Do less work more is not needed is fairly universal. If something isn’t on screen, or close to stuff that cares about it, don’t update things that don’t matter. Games often employ the trick of updating movement or AI at a lower update rate, or not at all, when the player isn’t near by. You can do that with DOTS just as readily.
HDRP is trying to let you script how things are rendered, aka a DOTS approach to rendering, try to render as little as possible, only where possible.
DOTS for compute/render/network is all up to the developer. DOTS allows for you to construct code that can run the least amount possible. That code could affect rendering, or be behind the scenes such as netcode, sound, AI, ect.
So DOTS can help every aspect of programing, if understood correctly. Its really a great excise in optimization, a bit from the Optimization Perspective First (which, leads well into ‘performance by default’ tag line.)
Micah
While HDRP is applying DOTS principles to rendering, DOTS is more about data structures and processing being made memory cache and multi-thread friendly. Rendering as little as possible is what any decent rendering system attempts to do and has nothing to do with DOTS specifically. The built in rendering paths already do the exact same kinds of culling the SRPs do to try to reduce rendering on the CPU side. The multi-threaded rendering option for the built in rendering paths is also DOTS-like, but the SRPs were written from the beginning to make this work better by having more data laid out in a way that’s friendly to this use case.