Hi. For my project, I'm trying to do a map editor with custom terrain. For that I intend to do a simple hydraulic erosion algorithm in the gpu to displace the water and generate some rivers.
I'm using a blueprint that switches between two render targets and a material that does the calculations. The texture's red channel is terrain height and green channel is water volume.
The problems is, no matter what I do, the water just grows uniformly throughout the terrain.
I'm trying to achieve a simpler version of this: https://www.youtube.com/watch?v=jfcIeog-lQo
Here's the custom node that does the simulation and doesn't work:
float dst = Dist/Res; float4 buf[5]; buf[0] = Texture2DSample(Tex , TexSampler , UV); buf[1] = Texture2DSample(Tex , TexSampler , float2(UV.x+dst,0)); buf[2] = Texture2DSample(Tex , TexSampler , float2(UV.x-dst,0)); buf[3] = Texture2DSample(Tex , TexSampler , float2(0,UV.y+dst)); buf[4] = Texture2DSample(Tex , TexSampler , float2(0,UV.y-dst)); float lhc = buf[0].x; float wvc = buf[0].y; float whc = wvc + lhc; for (int i=1; i<5; i++) { float lhi = buf[i].x; // land height (neighboring cell) float wvi = buf[i].y; // water volume (neighboring cell) float whi = wvi + lhi; // water height (neighboring cell) float wslope = whi - whc; // water slope float lslope = lhi - lhc; // land slope wvc += clamp(wslope/2,-wvc/2,wvi/2); lhc += wslope*0.001; } // Rain buf[0].y += 0.0001; return buf[0];
Any help would be much appreciated.
Replies
You should rather post this one to like a shader group or something.