← All ideas
  • Published 29 Oct 2017

Cycles texture mipmapping/tilecache

Currently, Cycles (in SVM mode) uses a very simple texture loader where all maps are loaded from disk at render startup, or shared from Blender. This is very memory-inefficient and can significantly impact render startup times in scenes with many high-resolution textures. In addition, due to a lack of mipmapping, textures that are much higher-resolution than needed can cause aliasing problems. Optimizing texture sizes manually is not always viable as the full resolution map may be needed for a later frame or another camera angle.In OSL mode, Cycles makes some use out of OpenImageIO's texture caching functionality for tiled EXRs or the OIIO .tx format. This allows textures to be streamed on-demand in individual chunks. This automatically optimizes textures that are excessively large, unnecessary, or contain unused texture space, and VASTLY improves startup time for preview renders. However, OSL is very slow compared to SVM, even on CPU. Additionally, even in OSL mode there is no control over the behavior of the cache, such as limiting size or forcing a flush or reload. Finally, Blender has no functionality to easily mipmap and tile textures that were not saved this way which can make conversion a hassle.See this documentation for Arnold renderer's texture cache (which is also based on OpenImageIO) for behaviors/benefits: support.solidangle.com/display/AFMUG/Textures

100%

Development Status: Open

Upvote 19 Downvote 0
jason.clarke0
29 Oct 2017

3 Comments

fabian12

This is still a big problem when dealing with files from the likes of Quixel and requires tons of manual work. Especially with big camera movements. Redshift for example handles this entirely transparently using oiio and I've never had an issue with texture memory running out on GPU, even on heavy scene with 100's of GB of exr files. The heavy lifting for this is handled by oiio already to the best of my knowledge.

fabian12

Is this still not done? Easily a huge speed-up to first pixel if all textures can just be streamed as needed like in redshift, vray and arnold when rendering proper scenes and not chrome balls.

tstanimation13

hey does anybody now if the topic is still under development? I would be interested in that ...I mean the rendering would be fasater of large environments right? github.com/OpenImageIO/oiio