u/mvaligursky

▲ 46 r/PlayCanvas+1 crossposts

Capture a splat once, cycle cinematic looks with animated grade blending

Been playing with color grading on Gaussian splat scenes in PlayCanvas — and it’s one of those small features that changes how you show work to people.

You capture a space once. Then you can try different color grades (the same kind of “film look” you’d use in photo/video tools) and blend between them in real time — warm, cool, moody, punchy, whatever. No new scan, no re-exporting the scene.

There’s also an animate mode that crossfades from one grade to the next on a loop, which is great for demos, social clips, or just finding what you like.

Why it clicked for me with splats: the splat render is basically the final image. Tweaking the grade feels like relighting the whole place, not tweaking materials on a few objects.

Ty it here: https://engine-6aa0sm3gy-playcanvas.vercel.app/#/gaussian-splatting/lut-grading

u/mvaligursky — 3 days ago
▲ 631 r/PlayCanvas+1 crossposts

Linked two Gaussian Splat scenes with a walk-through portal — no teleport, you just walk between worlds

I wanted to see if you could connect two Gaussian Splat scenes through a portal you can physically walk through — no teleport, no cut, just continuous motion between two captured environments. Turns out it works pretty cleanly.

Runs entirely in the browser (WebGL2 / WebGPU), built in PlayCanvas.

Try it live: https://engine-8q342hfzj-playcanvas.vercel.app/#/gaussian-splatting/splat-portal

A few things I liked about how it came together:

  • Two LOD-streamed splat scenes (a Roman parish + a skatepark), seen through a stone archway acting as the portal.
  • Crossing the portal plane swaps which world you're "in" — and the same physics works symmetrically from either side, so you can walk back the way you came.
  • The world you're in stays fully visible around you; the other one only shows inside the portal opening, with a proper "window" feel (no peek-around clipping).
  • Subtle translucent glass inside the opening picks up specular highlights from the environment.
  • The skatepark side has its own weather — procedural snow that's only visible while you're actually there (or peeking through).

Source for the example (PlayCanvas engine repo): https://github.com/playcanvas/engine/pull/8738

u/MayorOfMonkeys — 4 days ago
▲ 300 r/PlayCanvas+1 crossposts

First-person + third-person walking demos inside a Gaussian Splat scene (PlayCanvas, runs in the browser)

I just landed two new examples in the PlayCanvas engine that let you walk around *inside* a real Gaussian Splat scan — both first-person and third-person, with proper collision against the scene.

### Try them yourself

- 🚶 First-person walk: https://engine-cmbu8r47z-playcanvas.vercel.app/#/gaussian-splatting/first-person

- 🕺 Third-person with animated character (press **Q** to dance): https://engine-cmbu8r47z-playcanvas.vercel.app/#/gaussian-splatting/third-person

Controls: **WASD** to move, **Shift** to sprint, **Space** to jump, **Mouse** to look / orbit, **Scroll wheel** to zoom (third-person only).

### What's in it

- A new reusable **third-person camera controller** (`scripts/esm/third-person-controller.mjs`) modelled after the existing FPS controller. Handles:

- Orbit camera with mouse + gamepad + touch

- Wall-collision avoidance via raycast, smoothed so it doesn't pop

- Scroll-wheel zoom (smoothed, clamped)

- Configurable initial pitch, min height above character, look invert, sensitivity, damping for every axis

- Fires `speed` (0/1/2 → idle/walk/jog) and `jump` events that consumers wire into an anim state graph — no coupling to the anim system

- First-person example: capsule character + `FirstPersonController`, jumps, sprints, walks the gsplat

- Third-person example: bitmoji character, full anim state machine (idle / walk / jog / jump / dance) driven by the controller events, env-atlas IBL ambient (skybox layer disabled so the splat is the visible background), shadow catcher that follows the character on the ground via a downward raycast

### How the collision works

The "ground" is the Gaussian Splat (visual only), and physics happens against a hidden mesh GLB loaded alongside it:

- The collision mesh was **generated directly from the splat** using **splat-transform**.

- Then simplified down to **~1 MB** with https://polyforge.xyz/optimize so Ammo's BVH builder can handle it (huge meshes will OOM the WASM heap).

### Credits

Huge thanks to **zeitgeistarchivescans** for the gorgeous *Sunnyvale Heritage Park Museum* scan (CC BY 4.0):

https://superspl.at/scene/d5d397aa

### Source / PR

https://github.com/playcanvas/engine/pull/8736

u/MayorOfMonkeys — 4 days ago