Standalone EGL/OpenGL 4.3 compute runner (runtime GLSL, no shader compiler needed), ping-pong height/velocity field, damped wave + foundation spring + Gaussian sphere push + optional breathing, vertex-displaced render to PNG. Independent of generation. Intel ADL GT2: ~0.08 ms/step at 512^2, ~0.29 ms/step at 1024^2 (wall-time difference). .gitignore now allows Experiments/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
1.4 KiB
Unreal mapping note
The prototype stores a two-channel height and vertical-velocity field in a pair of
RG32F textures. A world-owned Unreal component could keep equivalent transient
render graph textures and advance them with a compute pass. It should own simulation
time and clear or restore its buffers when the world is recreated.
The sphere path becomes a world-space interaction event: position, contact radius, and impulse strength are supplied to the compute pass. For multiplayer or deterministic replay, replicate the compact events and simulation tick, or record the resulting field; do not assume that independent GPU floating-point runs will produce byte-identical textures.
The rendered top surface can remain a render-only displaced mesh. If it must participate
in voxel collision or queries, its height must also reach the density evaluator. For a
height h(x,y), the plugin's density convention is negative inside solid and positive
in air, so the plane's signed density is z - h(x,y). Keep this calculation in metres
until the existing voxel/Core boundary converts with the active voxel size (25 cm by
default); do not mix metre distances and voxel counts in the wave solver.
The current sample is an isolated visual field. Wiring this into AVoxelWorld would
need an explicit owner for simulation lifetime, collision/update cadence, save/load,
and the replication policy before it could affect shipped terrain.