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.