Let’s say I have a standard character and I want the player to be able to choose between X shoes, Y Jackets, and Z Hairstyles - even if all of those are just 5 that’s 125 possible combinations I’d need to place in Maya/Blender/Modo (ect.) and export. Then I’d have to import them, hook them up to the ingame settings… and that’s just a ridiculous amount of work D:
But on the other hand, if I don’t do this it’ll probably cost me at least 3 draw calls per mesh - 9 per character… and that’s really bad because I’m targeting integrated chips and multiplayer is the focus (so 9 * 4 = 36 extra draw calls)
Assuming that “just make a few presets” isn’t a solution, what options do I have to resolve this problem that results in no additional draw calls? D:
I’ve already come up with one… but it’s not great. For some things (like gloves, shirts, shoes) I might be able to get away with just using a texture + displacement to turn the hand into a glove or something. It’s better than nothing, but it’s kind of a situational solution at best. I’m not so much going for character customization as much as I’m going for “what you equip is worn”.
Another possibility is just keeping all of the possible options inside of my character’s fbx file and toggling visibility via a bone… but I don’t know what that would do to performance / memory
36 extra draw calls is quite doable. On ios we can get couple thousands draw calls pretty easily.
On other hand there should be special material in engine that skip drawing process completely. Currently we use transparent material without fog where every vertice is transformed to same position to save all pixel processing. But this still cost vertex shading.
Wait… really? I was under the impression that 700 was the max?
“Draw calls of the entire scene should be <=700 for any single view.” in the performance guidelines at the bottom of the page here: Performance Guidelines for Mobile Devices | Unreal Engine Documentation
I’m not shipping to mobile (as far as I’ve planned) but I imagine a laptop running on Intel 4000 graphics is likely in a similar performance bucket (if not worse - especially given Windows takes up more RAM than Android in my experience) so I’ve been basing my lowest tier on the mobile performance guidelines. Not testing on my laptop yet (nothing really to test, asset wise) but it would be nice to find out the device isn’t quite as limited as anticipated.
But my honest guess is that Metal allows iOS devices (much like consoles) to more or less reduce the cost of draw calls significantly. I know my computer (albeit running the engine in editor) chugged pretty heavily with 5,000 draw calls from an HLOD drawing a bunch of cubes.
I’m not sure if 700 is all that limiting - I mean, in order to even have said 36 draw calls from all 4 characters they’d all have to be onscreen at once… which means either LODs will have taken place or there’s at the very least less room on the screen for other stuff to have been drawn… And I kind of assumed each mesh would be drawn 3 times as an affordance so… honestly this may just be a case where I should ignore costs until / if there are problems. I mean, even if the rest of the scene took up 500 that would leave me with 160 or so for enemies, weapons, ect.
So I guess this is a “Thanks for your response - it turns out I didn’t think this through. My bad.”