Today I had a thought about a procedural mud puddle material.
I was thinking how I could lay several instances of a texture on top of each other to make it seem like the water level was rising.
I first got an image I took and put it into substance sampler.
Using the clone stamp and tiling features in sampler I was able to remove the seams and annoying objects like the pebble.
I exported 3 variants of the same texture, 1 texture was just mud, another was partially waterlogged and another was 100% waterlogged.
Using methodology surrounding various nodes in unreal I exposed a single parameter that controlled the water level.
![]() |
Full material |
This parameter was linked to varying funcitons, on the base colour, it was linked to 3 Lerps which was controlled by the exposed parameter, which meant I could fade between the textures as the slider was pulled up from the default to 1.
Secondly, I have a channel packed texture which I used to control the roughness and AO as default, but I inverted the roughness map so I was able to clamp the values in order to control the metallic, as puddles aren't strictly 'metallic' but adding metallic helps the roughness look more reflective in this instance.
I also applied specular which would be clamped from a grey and white value as to affect the whole material, to give puddles specular highlights and to turn it down when no puddles were visible.
Adding a divide between the parameter and a flatten normal, I was able to flatten the normal so the texture would seem flat, but then increased the normal as the puddles rise.
Finally, I used bump offset to add a touch of depth to my material in order to make it look more 3D.
![]() |
Base colour, Specular, Metallic |
![]() |
AO, Roughness, Normal |
![]() |
Bump offset |
I encountered many problems when trying to make this material, the amount of nodes became confusing and knowing what I plugged into where became obnoxious.
Additionally after trying to figure out some node functions, I just swapped out various nodes with one another to get the result I wanted. I.e: divide is the opposite of multiple, add is the opposite of subtract, etc.
![]() |
Final result |
No comments:
Post a Comment