Nanite and multiple materials

As far as I understood Nanite, everything that works against a static normal vector is not possible.

Nanite subdivides the meshes into triangle cluster. It tries to combine triangles with normals that are close to another. Nanite then gives the cluster an averaged normal.

When rendering, Nanite goes through all clusters of a mesh and makes a dotprodukt with the camera vector (and probably also bounds of the cluster with the view frustum).
This ensures that you only send geometry to the graphics card that is possible to be seen by the player from the view direction. Not sure what happes to triangles of e.g. a tree trunk that is partially visible behind another object, though.

That cluster culling alone ensures that you can send much more visible geometry to the graphics card and spare geometry that you definitely can’t see. Also you don’t realy need face culling of the graphics card anymore, as you only send relevant geometry anyway. Thus shaders should also be more performant.

That behavior though, requires static face normals. Thus you can’t use vector displacement in the shader.

Same for backfaces. Sure, they cloud add the additial querry, but the code would lose its straight forwardness and with that performance.