Mari seems extremely slow when Bump Maps are enabled in the shaders |
This is due to Mari having to convert a bump map to screen normals to display them in the viewport.
Inside the shading network you'll find a HeightToNormal node performing the conversion.
This shader runs a heavy operation that for each texel, reads the values of its neighbouring height texels to define the correct
normal value of the texel being evaluated.
This is pretty quick if you Bump channel is simply a paint node or a Bake Point node as both are a simple texture lookup and really fast.
The performance hit comes when your Bump channel is a large live shading tree with 10s of shading nodes upstream, all adding their own functions to the list of shading operations that needs to be computed by the GPU to define the final Bump channel texel values.
This means that if you have a Bump channel network that takes OpenGL 40ms to render (25 FPS); to then convert that into screen normals to view it as full lighting surface detail, the HeightToNormal shader needs to evaluate at least 4 neighboring texels to render itself in screen, adding 4 additional evaluations of the Bump channel shader. So roughly adding 4 times the OpenGL render time (40ms + 4x 40ms = 200ms), which would drop the viewport FPS from 25fps to 5fps.
As Substance Painter only has cached texture maps for every channel in the shader, it only needs to perform super fast texture lookups to display bump in full lighting, therefore providing a much higher FPS experience.
I hope that adds context to why Mari's bump is slow and why there is no trivial way to solve it.
It's the cost of having almost unlimited UDIM count and texture resolution
What can you do to improve this ? |
- Instead of Bump Maps, use Normal Maps. This saves Mari the step of converting from Bump to Normals internally.
Please note that if you do this via a live "height to normal" conversion the benefits disappear again. - Hide Bump Map chains behind a baked bake point
- Play around with the different bump modes in the shaders and height to normal node
Tthere are 3 modes to Height as Normal - the fastest one doesn't re-evaluate the entire nodegraph at all so it's very fast but gives some
ugly results on image sets or other pixelated input, the Fast mode does 2 re-evaluations and gives decent results and the Accurate mode does
4 re-evaluations but gives the best results
If you are using a Bump map, adjust those settings in the Shader via the Mari Surface Tab.
If you are using a Normal Map generated from a Bump Map via the Height as Normal Node Properties.