I’m having a horrible time grasping how draw calls work in Unreal Engine. It’s all so different from Unity! Something that I could do in 10 draw calls in Unity would take over a thousand in Unreal. There you can batch different meshes with different vertex colors into the same draw call. But that’s far from true in Unreal, and I just can’t understand how it’s possible to end up with an optimized game if my draw calls are going increase a hundred fold. Are draw calls just not that much of an issue nowadays, are Unreal games so GPU bound that it never really matters? I’m just so confused.
So let’s say I wanna use Lumen, so I’ll have to avoid combining meshes together. But I’m not going to use Nanite, as it’s around 3ms slower in my use case. Which is really weird to me as a lot of people seem to imply any game should you use it regardless of target poly count. In my tests the performance is really bad, but maybe that’s a topic for another day.
If every instance of a mesh in my scene adds an additional draw call… which when multiplied by cascading shadows, additional lights or whatever else, will easily go to the thousands of draw calls. How are mobile games even viable in this case?
There are the changes that came with 4.22, but I can’t find any information on how they actually work other than the highly technical 40 minute video. What’s combined and what isn’t? What breaks this batching and what doesn’t?
My biggest issue is that I would like to rely on vertex painting, but given these draw call limitations, I’m guessing it’s completely unviable? I had the impression the average AAA game in UE was definitely using vertex painting everywhere. Am I wrong, is it more like tessellation where no one sane would ever touch it?
But even if I completely forego the idea of vertex painting, I’m still very concerned about my draw call count. Should I not? I know this sounds like worthless early optimization, but this actually impacts heavily how my asset creation workflow will be handled, as well as how I’ll atlas/pack my textures. I wish I could just turn on Nanite and not care haha.
There’s also the concept of Instanced Static Meshes (hierarchical…?), and I don’t really understand how they’re different from the automatic merging 4.22 brings.
I’d highly appreciate some insight on the matter. Unreal is mindblowingly amazing so far, but oh boy is it difficult to learn. Thanks!