Summit Rush — endless downhill skiing in vanilla Three.js (procedural biomes, weather, GTAO on phones)

Hey everyone! I built an endless downhill skiing game in vanilla Three.js (no framework — just three 0.171 + TypeScript + Vite) and I’d love your eyes on it.

Play it here: https://skiing.net — desktop or mobile, ~30 seconds to your first Yeti encounter.

You carve down a procedurally generated mountain through five biomes (alpine → pine forest → glacier → moonlit ridge → ice caverns), chain aerial tricks, thread slalom gates, and outrun the Yeti. Day/night cycle, dynamic weather, and a golden-hour dusk with a warm rim light on the skier and powder rooster tails off hard carves.

Some things under the hood that might interest this crowd:

  • Post pipeline: EffectComposer with UnrealBloom + GTAO. I subclassed GTAOPass to hide transparent/particle/sprite/line objects during its depth+normal pre-pass — otherwise the sky dome, glowing cavern ice, and trail particles stamp AO halos onto the scene.
  • Seamless endless terrain: chunks share UV 0..1 along their length with integer texture repeats, so snow albedo/normal/roughness wrap exactly at chunk seams. Biomes crossfade with a smoothstep band, so grading, fog, and props blend rather than pop.
  • Phones get the real pipeline: quality is picked by device capability, not form factor — recent iPhones/flagship GPUs get shadows, bloom, GTAO, and 2× pixel ratio. A runtime FPS guard watches the first ~10 s and sheds pixel ratio + heavy passes if the device can’t hold frame rate (verdict remembered in localStorage).
  • Verified leaderboard: every submission carries a run log (event timeline + physics samples) and the server rejects physically impossible runs.

Two things I’d genuinely love feedback on:

  1. Mobile quality selection — is a capability probe + 10 s FPS guard a reasonable approach, or do you use something better than shedding post passes at runtime?
  2. Frame pacing on your hardware — if you hit stutters (especially mid-range Android), I’d love to know the device.

Any and all criticism welcome. Thanks for playing!

4 Likes

FUN!! looked smooth on both my desktop machines.. one older and one newer… one at 144hz and one at 60hz.

1 Like

needs a brake

1 Like

Thank you for checking it out and the feedback. Glad you had fun!

hehe, no brake adds to the challenge. It gets faster and tougher as you last longer. Just point them down the hill and lets go!

Fun game.

If you want it to be a bit more realistic (and there’s no reason that it should be), you could reduce the sensitivity a bit and have the player lean more a bit more. That is how you turn in skiing, by leaning - like banking an airplane. Your turn rate varies with speed and the type of snow - hard snow, soft powder (the best) and icy snow.

If you need to stop “quickly”, you lean and quickly turn the skis 90 degrees from the direction you are headed and slide sideways - just like with hockey skates. That ability saved me a few times when I started going too fast.

Another way to slow down is to use the “snowplow”, where your toes are pointed in and the skis are angled in, just like a snowplow. This is only mildly effective and, when the skis get crossed can lead to some amazing wipe-outs.

2 Likes

phil_crowther, Appreciate the recommendations. I will play around with some of those ideas this weekend. Thank you very much.

1 Like

Please don’t consider my comments as recommendations for change.
You have a very nice game which is fun and challenging.
They are just observations, based on real life, which might (or might not) be useful in developing future variations.