- Home /
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.
Answer by alebasco · Feb 13, 2015 at 03:20 AM
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.
Answer by HowlingMoonSoftware · Apr 01, 2017 at 08:11 AM
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/
In the original post "(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..)"
I already used my own replacement shader, the question from 2 years ago was how to access the material it was actually using, not how to overwrite a shader.
Your answer
Follow this Question
Related Questions
Disable grass fade 1 Answer
Problem shader graph on terrain detail mesh don't show correctly 0 Answers
Alpha channeled grass 0 Answers
Unity Terrain Grass - Make space for player 0 Answers
How do I make the default grass billboard shader opaque? (URP) 0 Answers