Skip to content

Photoreal Three.js camping world — first-person, self-play iterated to cap (20 iterations)#14

Draft
ilikevibecoding wants to merge 29 commits into
mainfrom
cursor/bc-5fd2158d-847b-44d3-b77f-90ba063719c5-2695
Draft

Photoreal Three.js camping world — first-person, self-play iterated to cap (20 iterations)#14
ilikevibecoding wants to merge 29 commits into
mainfrom
cursor/bc-5fd2158d-847b-44d3-b77f-90ba063719c5-2695

Conversation

@ilikevibecoding

@ilikevibecoding ilikevibecoding commented Jun 12, 2026

Copy link
Copy Markdown
Owner

🎮 Play it now — no merge, no install

Click to play (CDN, pinned build):
https://rawcdn.githack.com/ilikevibecoding/My-projects/dd19ef3f8d535839b9ad1ed1f9b64f840d6da209/camping-world/play/index.html

Always-latest variant (tracks this branch): https://raw.githack.com/ilikevibecoding/My-projects/cursor/bc-5fd2158d-847b-44d3-b77f-90ba063719c5-2695/camping-world/play/index.html

githack shows a one-time "External Content Notice" interstitial — click Open the page. First visit streams ~160 MB of photoscanned assets, so the loading screen takes a moment. The production Vite build is committed at camping-world/play/ so the whole game runs straight off the CDN with zero deployment.

Verified end-to-end from the CDN URL in headless Chrome — game boots, __READY fires, campsite renders:

Game running live from the CDN — campsite viewpoint


Photoreal Three.js camping world

A first-person camping clearing aiming for an RDR2-style golden-hour mood: rolling dry meadow cupped by a treeline, photoscanned trees and deadwood, a stone fire pit with lumpy ash + charcoal, and ~130k instanced grass cards in the wind. Built in camping-world/ with Vite + Three.js, iterated via an automated self-play screenshot loop to the 20-iteration cap.

Controls

WASD walk (2.2 m/s) · Shift sprint (4.8 m/s) · mouse look (pointer lock) · Esc release. 1.7 m eye height, terrain following, head bob, collision vs trunks/boulders/props.

Self-play loop (iter 0 → 20)

Deterministic 6-viewpoint screenshot harness (?shot=1, Playwright + SwiftShader), scored each iteration against a 10-item realism rubric, then targeted fixes.

Iteration 0 (gray-box) Iteration 20 (final)

Final viewpoints: campsite · wide vista · backlit camp · hero tree · grass eye-level

Highlights of the iteration log

  • Iters 1–7: real terrain splat shader (3 photoscanned ground sets, two-scale de-tiling), HDRI sky + measured-azimuth sun, 3-LOD photoscan trees, instanced grass with baked card atlas + wind, campsite layout, post stack (SMAA → N8AO → bloom → grade/vignette/grain).
  • Iters 8–15: chased the single worst defect — a pale cream band across the mid-distance that read "video-game desert." Darkening albedo/fog barely moved it.
  • Root cause (iter 16): stripped the grass layer and sampled actual rendered pixels — terrain with albedo 0.185 was rendering (243, 228, 197). The band was grazing-angle Fresnel specular mirroring the bright sky, not diffuse color. Fixed in the terrain + grass shaders (roughness floor 0.96, indirect/direct specular knocked to ~0.1).
  • Iters 17–20: rebalanced exposure after the specular kill, dome-shaped lumpy ash bed with charcoal chunks, warmed blue-green foliage tints, stone fire pit env response.

Functional verification

Deterministic fixed-step movement tests (scripts/test-movement.mjs): walk 2.20 m/s ✓, sprint 4.79 m/s ✓, eye height 1.70 m ±bob ✓, tree collision stops the player ✓, pointer-lock look ✓.

Assets

All CC0 from Poly Haven (photoscanned models, ground textures, HDRI), fetched by scripts/fetch-assets.mjs and crunched by a gltf-transform pipeline (weld/simplify/WebP/meshopt) in scripts/optimize-assets.mjs. Credits in the README.

Notes

  • camping-world/play/ is the committed production build that powers the CDN link above. Rebuild with npm run build and re-copy if the source changes.
  • A GitHub Pages deploy from this branch was attempted but the github-pages environment's branch protection only allows main + one legacy branch; the workflow change was reverted to keep CI green. If you ever want it on ehpurple.com/play/, allow this branch in the environment settings or merge.

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

cursoragent and others added 25 commits June 11, 2026 19:47
…ot harness, movement tests

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…ion (29 models, 60MB)

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…tree LODs, life-size grass cards, sun corridor

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…, alpha-to-coverage grass, brighter sun

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…n:env contrast, greener palette, SW camera poses

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…igger fire ring, post stack (N8AO+grade+vignette+grain+SMAA)

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…(was double sRGB encode)

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…od heap, hero tree LODs, far-field ground tint, trim unused HDRIs

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
… (env 0.72, AO 1.4), reframe backlit view, denser far treeline, island_tree_02 foliage bump

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…tree_trunk_02, charred logs, bark scraps; bounds debug script

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
… woodpile east of pit, lantern centered on crate

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…hter char tint, AO debug params

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…e (no glaucous sheen), placeOn fixes lantern/hatchet, pit bedding + ash tweaks, darker far rim

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…r, warm shadow split-tone, matte pale ash, tinted bark scraps, real renderer stats (autoReset off)

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
… (was reading as pale dunes), dustier fog, dimmer far grass cards, ash bed above scan floor, matte warm pit stones, layer-isolation debug params

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…sh grey, far grass dim from 32m

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
… pale band), lumpy ash mound, softer pit tint, warm-bias searsia/nettle

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…orward-scatter was the surviving band), mottled lumpy ash + charcoal chunks

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
… dim, brighter far-terrain albedo, exposure 0.70

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…far-terrain albedo 0.34

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…-olive fog

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…ot rubber

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…oke wall-clock waits) — all 5 pass

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…ro shot

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
@vercel

vercel Bot commented Jun 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
my-projects Ready Ready Preview, Comment Jun 12, 2026 5:10am
my-projects-kf1f Ready Ready Preview, Comment Jun 12, 2026 5:10am

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…N link, no merge/deploy needed

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…world at /play/

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
…vert Pages workflow probe

Co-authored-by: ilikevibecoding <ilikevibecoding@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants