High Quality with High Performance UE4 Mobile Game

1. Target Configuration & Target Quality

Hardware will limit maximum possible. Low end hardware can't afford high quality. To balance quality and performance, every game should define its recommended configuration and minimum configuration. Normally, we can estimate the final publish date, the main stream configuration is the recommended configuration. According to performance and API restriction to determine minimum configuration. A target configuration should include CPU, GPU, memory size, hard disk size etc. For VR game, target hardware platform is also an issue to think about.

Riot Games: Minimum and recommended system requirements

Target quality is also need to be determined at startup time such as final graphic resolution, run-time FPS(minimum and average), image quality(old gen/next gen). Normally, FPS is determined by game type, all slow motion game like RPG can define to 30fps, all action game should be 60fps or pain for obviously latency, all VR game should have more high fps to avoid VR specified bad feeling. Then final resolution can vary according hardware performance and target fps. Normally, 1080p, 900p and 720p are some good options. Currently, most of target should afford next gen graphic quality.

PS4 vs. Xbox One Native Resolutions and Framerates

 

2. Technique Standard

1) Graphic API

D3D12/Vulkan/Metal

Most of hardware has more than one graphic API as option, such as OpenGL/OpenGL ES, Vulkan, D3D11, D3D12 and Metal. Basically, new API has better CPU and GPU performance. For PC perfer to use D3D12 or D3D11, for mobile use Vulkan when possible, it will reduce about 30% CPU time over OpenGL/OpenGL ES. For VR, some GPU has hardware features to support it but need new API or API extension. Try to use them when possible.

Doom benchmarks return: Vulkan vs. OpenGL

 

2) Global Graphic Statistics

Drawcall

All API drawcall will cost  a lot of CPU time to validate state and fill GPU command buffer for OpenGL/OpenGL ES/D3D11. For Vulkan and D3D12, the overhead is reduced a lot. But keep batch drawcall is a good solution to optimize peformance. Every drawcall cost varies a lot. Normally keep drawcall count below 100(VR:50/eye) for mobile and 1000 for destop or high end console.

 

Fillrate

In theory, every GPU has its maximum vertex and primitive process limitation such as Triangles/s, Pixel/s, Texture/s. They will get global art budget. For example Adreno 420 fillrate is 337.5MTriangles/s, 4.8GP/s, 600MHz. That means 0.56Triangle/clock,  8.19Pixel/clock. NVIDIA GeForce GTX970 fillrate is 63.1GP/s, 117.2GTexel/s. That means desktop GPU is about 10x powerful than mobile GPU. Normally, keep global triangle count below 100K for mobile(50K~60K) and 500K for desktop/console.

 

3) Texture

After texture created in DCC tools(PS), the texture file should use raw data format when import into UE4 to keep image quality. When used for runtime game(package game), textures should be compressed by hardware supported compress method such as ASTC.

    ASTC/PVRTC2

    Comparing to DXTn, ETCn texture format, ASTC and PVRTC2 has better quality. NVIDIA has a very detail document about it (ASTC Texture Compression For Game Assets). The good news is all mobile GPU support ASTC in 2017. More detail in ARM website(https://developer.arm.com/products/software-development-tools/graphics-development-tools/astc-evaluation-codec).

Do generate mipmap for textures. It will have better performance and quality. But for UI or HUD, artist need to determine texture and don't generate mipmap(No usage). More small size texture has better run-time performance, Do restrict mipmap 0 texture size when graphic quality is fine. Be careful about texture size, some platform, power 2 texture size will has better performance.

 

In VR mode, normal mapping is not good as in normal mode. Artist ensure to check final quality in VR mode. Or parallax mapping or tessellation or more detail model.

In UE4 Editor, 'Project Settings' → 'Cooker' → 'Textures', Config PVRTC and ASTC compression quality for final project.

4) Static Mesh

After mesh created in DCC tools(3D Max, MAYA), the mesh topology may not be the best for modern GPU(Geometry Cache). Final 3D mesh must be optimized by some tools, such as Polygon CruncherThis document has some discuss about mesh optimization. At same time, generate LOD according to graphic quality. For all view locked element(UI, HUD, eye-attached mesh), don't use any LOD(similar no mipmap for texture), artist need to estimate according to final render resolution. UE4 support Hyper LOD system.

Static mesh should restrict vertex, primitive count as well. Remove unused vertex properties such as second UV, vertex color. Keep in mind texture account affect runtime performance a lot, restrict number below 3 textures per mesh for most of meshes.

UE4 External Content Development Standards

    The number of polygons you should use depends on the quality you require and the platform you are targeting. For mobile devices, somewhere between 300 and 1500 polygons per mesh will give good results, whereas for desktop platforms the ideal range is about 1500 to 4000. You may need to reduce the polygon count per mesh if the game has lots of characters on screen at any given time.

 

5) Skeletal Mesh

Basically, skeletal mesh has similar restriction with static mesh except skeletal bone, it will cost a lot of GPU constant buffer to store them when using GPU skinning or a lot of SIMD instructions when using CPU skinning. Bone weights must keep below 4 or reducing performance. 

    Use as Few Bones as Possible

    A bone hierarchy in a typical desktop game uses somewhere between fifteen and sixty bones. The fewer bones you use, the better the performance will be. You can achieve very good quality on desktop platforms and fairly good quality on mobile platforms with about thirty bones. Ideally, keep the number below thirty for

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值