how to make a standard for artists before dev a multi-platform game including PC, Mobile, VR?
eg. what format , what size of the textures should be used for each platform?
vetex cound limit of the skeleton/static mesh for each platform?
material limit for each platform?
etc…
Thanks!
Texture size: Mesh dependant. Keep it under 2048 for mobile though, but you can scale in packaging, which you probably will do to keep mobile texture size down.
Vertex count: Doesnt matter mostly, drawcalls are the concern, But try to keep it below 500,000 rendered polys for pc, and 50,000 for mobile.
Drawcalls: Keep drawcalls under 300 for mobile and 2,000 for pc and pc VR. Keep it to pc virtual reality though, you seem to be completely new, and robo recall for the quest was a near impossible uphill battle for a professional studio.
Material limit: Each material is a draw call. Each time said material is rendered is another drawcall. That is why you dont see dynamic shadows on mobile. stat scenerendering to view drawcalls (view Mesh draw calls)
thanks so much. this mean the vertex counts per frame, right? i know it’s hard to limit the count for staticObject as their various sizes.
for SkinnedModel or SkeletonMesh in UE, is there a vertex and material limit on it ? for PC and Mobile and VR.
what’s the normal standard for the Player’s Character and the NPC, vertex count and material count for this? i mean in the normal opaque mode. Transluscent cost too much.
should be each materail each batch is a drawcall? how about ue4 on batching? including statci and dynamic batch? by default ue4 will batch all the primitive using the same material into one batch?
UE4 is able to scale down the texture resolution while packaging? so does it mean i can make texture by the highest resolution(eg. 4096 for the high-end PC) and then all the rest things need to do is just set in the packging to scale down the resolution? how about the precision of the scaled down texture?
this stat in UE4 shows the drawcall count, what does one drawll count precisely mean, like normal way? call DrawPrim/IndexPrim one time? eg. in deferred shading, as it’s multi-pass, it will be at least one drawcall per pass. eg. draw to g-buffer is also one drawcall?
The only time actors are batched together is if its an identical static mesh in the level.
There are realtime shadows for all light sources since ue4 existed, and in ue5 dynamic global illumination on said lights exist too. However mobile only supports dynamic directionallight shadows, and up to 4 unshadowed dynamic pointlights.
Yes, also the scaled down texture is identical to a lower mipmap value of each texture, viewable via mip level in texture view.
“A draw call is a call to the graphics API to draw objects (e.g draw a triangle)” Quoting the unity documentation here but same rhi so doesnt matter. Also, again, each time a material is rendered, that is a draw call. Dynamic shadows re-render the scene, which causes extra draw calls. One thing to note, DX12 (PC) and Vulkan (High/Mid end mobile, and PC) handle drawcalls much better.
PNG makes a smaller project file, however textures are recompressed to a completely different format that is easy for gpus to read, so they end up being the same size anyways. There is no option to package directly as .png instead of gpu formats, as the runtime cost to decode would be several hundred/thousand times slower.
Just some general material stuff based on experience.
Unreal 4/5 being a next gen engine things like FPS is of little value as to performance as they no longer use the same rending techniques as older engines (scan line) so performance hits has little to do with vertex counts as compared to what is attached and is inherent as a support asset.
As a “standard” managing textures and materials should top the list as to what is needed by the project as sharder complexity and management could become the bottle neck as to performance requirements of a given platform.
The good news in 4.26 > there are tools to correct for project requirements with out decay to the source material and/or asset so you can cover everything with a simple logic.
“It’s much easier to make too much less than it is to force not enough to do more”
So a “logical” limit as to polycount/vertex count is enough to support the detail requirements with out having to resort to texture trickery. An oil drum should look like an oil drum as fixing the detail in materials can become more excessive as compared to the non-existing poly hit.
In general 2048 is a good all round resolution keeping in mind the to much rule but there are other material types that can be used, such as Substance and material layering, wich would be equal in quality compared to hi-res textures but at smaller package sizes.
Material “type” is a wrapper that contains the instructions of how the textures needs to be rendered so how many textures is the limit is determined on the vram storage of your video card. By default the limit notification is set to 1 gig so if you exceed that limit you will get a warning that you have exceeded your streaming texture limit.
This brings us back to materials in general as a material can be made an instanced material which requires less draw calls as to textures already in use as well decrease compile times
Lots more to be said but of all the things that need or should have a standard material management tops the list
eg. one character with helmet, normally there should be 1 material for the helmet, 1 material for the skin, may 1 material for the eyes, 1 material for the hair.
In UE4, how to deal with this kind of situation, still 4 meshes with 4 matarial so 4 shaders inside the engine?
eg. 2048 is the original resolution and it has 3 mipmap: 2048, 1024, 512; then only can scale down 2048 right? does it still have 3 mipmap after scaled down. eg. to 1024, 512, 256.
is there tutorial for this? and how about the users’ platform, is it able to use UE4.26 with DX12 and Vulcan for a multi-platform game include VR(eg. Oculus Quest 2), MobilePhone(Android and IOS), PC(Oculus Rift, etc).
Thanks so so much !!
yep, i know. i mean .png and .tga which one is better to be dev with. as after packaging, all become dds, etc, etc…so there is no differernce to use either .png or .tag? including at the aspect of the whole process of team dev and maintain?
If you want to use all the highest quality shaders, you got it right.
Dont even attempt. You are still asking about the basics, you either need to be trying to make something extremely barebones, like static lighting with fully rough materials and fake reflections, every mesh is 1 simple material, etc. Or be so good at ue5/ue4 you could easily get a job at epic if things go south.
No a 2048 texture does not have 3 mipmaps. It has 12. Decreasing by 1 mip will get rid of the highest level one, 2 will get rid of 1 and 2, etc.
For PC and PC VR: Set default RHI to DX12, done! EZPZ.
For mobile: Look up Vulkan in project settings, Set Support vulkan to on. (This will increase project size)
For quest: Vulkan is what is on by default. But again, its not worth the effort to put a ton of effort, and possibly wreck the graphics of your game so a small subset of a small subset of users can play.
UE4 treats them identically. .EXR is sometimes used for HDR i think, though. Whatever fits your art workflow the best.