-
Notifications
You must be signed in to change notification settings - Fork 90
Open
Description
Leaving this script here to help anyone who may be trying to make their rivers automatically dig a riverbed in Terrain3D. This approach probably over-samples a bit, but should be enough to get someone started. Feel free to close the issue!
const ROCK_TEXTURE_ID = 0
var river_width = 6.0
var river_depth = 2.0
var river_curve = river_manager.curve
var river_points = river_curve.get_baked_points()
var prev_pos = river_points[0]
for pidx in range(1, river_points.size()):
var point = river_points[pidx]
var pos:Vector3 = Vector3(point)
var forward_vec = pos - prev_pos
var side_vec = forward_vec.cross(Vector3.UP).normalized()
var step_divs = 2
for _offset in range(0, river_width * step_divs, 1):
var offset = _offset / (step_divs as float)
var pos1 = pos + (side_vec * offset)
pos1.x = clamp(pos1.x, 0, world_size.x)
pos1.z = clamp(pos1.z, 0, world_size.y)
var pos2 = pos + (side_vec * -offset)
pos2.x = clamp(pos2.x, 0, world_size.x)
pos2.z = clamp(pos2.z, 0, world_size.y)
# tweak the interpolation to change the shape of the riverbed
var height = cubic_interpolate(-river_depth, 0.5, 0.25, 0.75, offset/river_width)
terrain.data.set_height(pos1, height)
terrain.data.set_height(pos2, height)
terrain.data.set_control_base_id(pos1, ROCK_TEXTURE_ID)
terrain.data.set_control_base_id(pos2, ROCK_TEXTURE_ID)
terrain.data.force_update_maps(Terrain3DRegion.TYPE_HEIGHT)
terrain.data.force_update_maps(Terrain3DRegion.TYPE_CONTROL)
TokisanGames, Arnklit, TheDuckCow, LazyWizard, brohd11 and 2 more
Metadata
Metadata
Assignees
Labels
No labels
