B) VRayHDRI and Tiled Textures:
The proxy loading mechanism would be quite limited in scope if it weren’t paired with a way to load and unload the textures associated with the proxies (and not only those, ofc.) in a similar piecewise manner.
Besides the other benefits of using a VRayHDRI loader with standard bitmaps (enhanced filtering options and filtering memory consumption, enhanced color mapping capabilities, enhanced mapping options, and so on), there are great RAM savings to be had when the VRayHDRI loader is coupled with tiled textures.
These can be either .TX, or .EXR, but either format shares two key characteristics: the image contains atlases of the texture, or reduced, high quality versions of the main size, and it’s also written, and read, in buckets of NNxNN pixels (64 is often used as default).
At rendertime, the VRayHDRI loader figures out which two sizes of the texture it needs, and which tiles of those, based on visibility (under the same set of constraints which apply to proxies), and performs a high quality interpolation of those.
Textures have their own memory budget, separated from that of proxies (and dynamic geometry in general), and undergo the same unloading process as that which happens for proxies, as the RAM budget fills up.
The default of 4000MB may seem small, but as at each resolution halving the memory occupation becomes a quarter, when coupled with tiled textures is often aplenty.
Here too, a value of 0 will allow V-Ray to use all the available RAM, including that freed up by the proxies, in case.
The choice of mip-map resolutions can be biased -in 3ds Max- using the Blur parameter in the coordinates section of the map: values lower than 1 will force higher resolutions to be loaded.
Lowering the parameter to 0.01 will to all intent and purposes load the highest resolution map, and not perform any filtering, which would be incredibly bad.
If deciding to change Blur value, be considerate, and test: different map resolutions, viewing conditions and most importantly perception will make the sweet spot vary from case to case, so don’t be afraid of trying solo renders of the interested geometry to find it.
In the example of the tree above, if i were to make it very tiny on screen, V-Ray would load the lowest resolutions (1x1, 2x2, 4x4 pixels) and forget entirely about the full-size texture, performing interpolation only between the sizes it chose to load.
Instead, if i were to cover the tree with the box, but see it up close, it would perhaps load the original sized texture, and yet only those 64x64 pixel tiles of it which in some way contribute to what is being rendered.
In the example of a terrain, no matter the original texture size, V-Ray will only load the resolution(s) which makes sense at the distance it sees it at, and only the tiles its direct and indirect rays see.
One could comfortably create a 64k square texture, convert it to tiled EXR (with one of the utilities we provide, for example), and then happily render away at 4k resolution, safe in the knowledge that the full sized texture will never be loaded in its entirety, albeit parts of it will be loaded at the original resolution where needed.