feat(render3d): the lake answers to a body standing in it
water.frag takes u_wade - a point and a strength - and puts spreading rings and a patch of churn into the surface normals there, so a wader marks the water and a swimmer works the whole of it. It is one uniform in a fragment stage that was already running, applied after the distance flattening so a disturbance close to the camera survives it, and it measures no frame cost at all. Also records the two renderer features that shipped without a changeset. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
5ca14eeaec
commit
4975c60ac1
6 changed files with 62 additions and 7 deletions
9
changes/contact-darkening.md
Normal file
9
changes/contact-darkening.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
bump: patch
|
||||
type: feat
|
||||
Things sit ON the ground rather than hovering over it. The screen-space GI pass takes
|
||||
a second, much tighter set of taps (a 0.40 m radius that grows with distance, with a
|
||||
range check so a far surface behind a near one cannot darken it) and folds the result
|
||||
into the ambient occlusion it already had. The wide radius answers "how enclosed is
|
||||
this", which a trunk meeting grass barely registers; the tight one answers "is
|
||||
something touching here", which is the shadow the eye looks for to place an object.
|
||||
It is eight taps on a buffer the pass had already bound.
|
||||
9
changes/the-world-knows-you-are-there.md
Normal file
9
changes/the-world-knows-you-are-there.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
bump: minor
|
||||
type: feat
|
||||
The world answers to a body standing in it. `grass_push(x, z, r)` bends every blade
|
||||
within a radius away from a point and presses it down, so a walker opens a bow wave
|
||||
through a meadow instead of passing through it; `water_wade(x, z, strength)` puts
|
||||
spreading rings and a patch of churn into the lake's normals at a point, so a wader
|
||||
marks the surface and a swimmer disturbs the whole of it. Both are one uniform each
|
||||
(`u_push`, `u_wade`) read in the vertex and fragment stage that was already running -
|
||||
no extra pass, no extra draw.
|
||||
Loading…
Add table
Add a link
Reference in a new issue