I'm using an edited version of standard terrain shader, which combines layers using a splatmap. Specifically, i changed the blending step to perform heightmapping and made some other modifications, mostly to the water layer. Each layer uses two textures, albedo+heightmap (on alpha channel) and normal map, for a total of 6 layers per terrain.
Due to performance concerns i haven't used additional metallicgloss maps. As an alternative, i re-use the heightmap as a sort of roughnessmap to simulate wet terrain. However, the easiest way to retrieve water position is to use the channel reserved to water in the splatmap. It's how smoothness and metallic parameters are assigned in shader (water is red channel here, mixedDiffuse.a is inverse heightmaps combined and scaled for current weather):
Code: Select all
o.Smoothness = max(splat_control.r, mixedDiffuse.a);
o.Metallic = dot(splat_control, half4(_Metallic0, _Metallic1, _Metallic2, _Metallic3));
If it's not too complex to make it work with your approach, it would be the the best option for quality. I'll send you the source code and a test build within the next few days.