I’m optimizing my content pipeline and wanted to know of any way I can reduce loading times even further.
My current solution loads the following in 10 milliseconds(100th of a second) :
- mesh (100KB)
- collision mask (200KB) (pre-cooked physx collision objects)
- diffuse/colour map (683KB) (pre-compressed DXT1) (pre-generated mip maps) (1024x1024)
- combined normal & specular map (683KB) (pre-compressed DXT1) (pre-generated mip maps) (1024x1024)
NB: all resources are packed as one file to reduce seek times
What had the hugest impact on loading data :
- transfer speed of data from ram to graphics memory (2.5ms per 1024x1024 texture, texture size has a huge impact here)
- transfer speed of data from hard-drive to ram (2ms)
My texture class has a LOD setting which will reduce loading times by passing less data to the graphics card :
LOD (0) - 10ms (4mb usage) (1024x1024)
LOD (1) - 8ms (1mb usage) (512x512)
LOD (2) - 5ms (0.25mb usage) (256x256)
NB: usage(video memory) includes a mesh and 2 DXT1 compressed textures. PhysX3.0 collision mask stored in ram so excluded from usage
Compression considerations :
- viable if multi-threading (and/or) commercial decompression library is used, otherwise can double loading times of hard drive to ram transfer on free fast decompression libraries and even slower on slower decompression libraries.
New Research :
New technique to increase precision of normal maps allowing me to store them in DXT1 with a reduction in artifacts.
Left : Uncompressed
Middle : DXT1 Compressed, notice artifacts caused by compression
Right : DXT1 Compression Using New Technique, notice the reduction in artifacts
If anyone has any additional ways I can improve the loader, please give me any advice.