Accessing the Terrain detail material

I need to access the terrain detail material, to send a value to the shader using material.SetTexture(“TestTexture”, texture)

(I replaced the default grass shader with my own which will utilize this, by adding a file with the same name/path, but I cannot find anyway of accessing the instance of the shader at runtime…)

The closest thing I can think of is to access terrain.terrainData.detailPrototypes[0].prototypeTexture, and force additional data into that texture. This would work, assuming that it is a live link, not just set on initialization (which is probably the case), but is super hacky, when all I need is a reference to the material that Unity is using for the details. I’d then have to rewrite how it read from the texture for basic albedo color.

I ended up going with Shader.SetGlobalTexture()

This isn’t the most natural, but it seemed to be the only sane way of doing it.

If you name your shader the same as the one Unity uses, yours will override it.

For example: “Hidden/TerrainEngine/Details/Vertexlit”

Source:
https://forum.unity3d.com/threads/terrain-detail-mesh-normal-map.176806/