Readback barrier fix (GL_TEXTURE_UPDATE_BARRIER_BIT before glGetTexImage); check_repeatability.py compares full-field checksums across query/capture settings - Intel GPU PASS (3b9d45905c7aafff), llvmpipe PASS, mismatch control fails. New runtime module VoxelForgeLivingPlane (separate from generation): RDG global shader (Shaders/LivingPlane.usf), ping-pong RGBA32F render targets, actor with WPO plane and object inputs, no CPU readback. Compiles in Linux UE 5.7. Windows build: Source/VoxelForgeLivingPlane/*, Shaders/LivingPlane.usf, VoxelForge.uplugin. Setup: UE-SETUP.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
34 lines
2.0 KiB
Markdown
34 lines
2.0 KiB
Markdown
# Unreal mapping note
|
|
|
|
The prototype stores height, vertical velocity, a recovering imprint, and a spare
|
|
channel in a pair of `RGBA32F` textures. A world-owned Unreal component can 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.
|
|
|
|
## L164 render-only Unreal implementation
|
|
|
|
`Source/VoxelForgeLivingPlane/` now implements this render-only path as a separate
|
|
runtime module. `AVoxelForgeLivingPlaneActor` owns two UAV-capable RGBA32F render
|
|
targets, advances the wave, breathing, and imprint equations with an RDG global shader,
|
|
and binds the current texture to its plane material. Blueprint/C++ supplies object
|
|
position, radius, velocity, push, and active state. The actor does not call the
|
|
generation modules and does not read the field back. Level setup and the material graph
|
|
are in [UE-SETUP.md](UE-SETUP.md).
|