BELLWOOD CROSSING

Second study · after Gabriel Nagypal

waking the forest…

BELLWOOD CROSSING

Second study · painted bellwood assets · Three.js

drag look  ·  wheel dolly  ·  W send them on  ·  hold R raw  ·  B breakdown  ·  I how it works  ·  H hide ui

How the look is built

The reference is a matte painting: painterly strokes, one warm key light from behind, cool violet shadows, aerial haze that glows toward the sun, prismatic rays and huge scale. This page rebuilds those decisions as a real-time pipeline in Three.js. Every layer can be switched off in the breakdown panel to see what it contributes.

  1. One lighting model for everything. Props, bark, ground, grass, leaves and water all go through paintLight(): a wrapped, three-tone ramp instead of Lambert, a hue shift between warm light and violet shadow, a hot backlit rim, translucency for thin things, and a noise-perturbed "brush normal" so shading blocks in like paint instead of a smooth gradient.
  2. Aerial perspective. applyHaze() is height-dependent distance fog whose colour is mixed from lavender to cream by the angle to the sun, so the far trunks dissolve into light on one side and into violet on the other.
  3. The great root. A Catmull-Rom spline swept into a tube with cosine ridges, braided secondary roots, and root legs into the ground. The bark shader draws flowing stripes in uv space (warped with fbm), moss on upward faces, and emissive teal veins in the crevices for the bloom to catch.
  4. Painted pieces where the eye lands. The arch is five scaled copies of a root-arch tile painted for this shot (strata ribbons, moss, fibres baked in the texture), the giant is a rigged mesh playing its idle and walk clips, the rider sits on the white stag, and bells hang from the underside on swinging strings. Crystal clusters are tinted to the painting's slate teal and tucked into the lower ribbons.
  5. Mass through instancing. 95k grass blades with wind and root-to-tip gradient, 16k flower dots thickest around the travellers, ~600 camera-facing leaf cards painted on a canvas at startup, 260 tumbling leaves and 900 pollen motes drifting in the shafts.
  6. Soft shadows + contact blobs. Variance shadow maps from the backlight (blurred, painterly), plus a dark radial decal under each prop to glue it to the ground.
  7. Reflection. The pool is a planar reflector with noise ripples, a four-tap blur so the mirror image is soft, fresnel against a teal body colour and a sun glint.
  8. The brush: anisotropic Kuwahara. A structure tensor (Sobel) is blurred and eigen-decomposed per pixel to get the local stroke direction and anisotropy. An ellipse aligned with it is split into 8 overlapping sectors (polynomial weights); the pixel takes the mean of the least-varying sectors. Flat areas become flat paint, edges stay crisp, strokes follow the forms.
  9. Prismatic god rays. Sky pixels (depth at the far plane) near the sun are the light source; two radial-blur passes march toward the sun with per-channel step lengths (dispersion) and a hue ramp across the beam, so the shafts split into a rainbow like the painting.
  10. Grade. Exposure → ACES → shadows lifted violet, highlights warmed, a little contrast and saturation, paper tooth and animated grain, ink edges from a luminance Sobel, chromatic edges and a warm vignette.

Assets: the bellwood-crossing batch (giant walker, white stag, seated rider, root-arch tile) generated with the bellwood-painterly style pack from the asset study, plus Tenth Crown props. All simplified to ~22% and quantized with gltf-transform; their PBR is discarded and only the painted base colour survives, relit by the pipeline above. Press W to send the travellers into the light.