[{"data":1,"prerenderedAt":430},["ShallowReactive",2],{"navigation":3,"/experiments/world-walker":154,"authors":296},[4],{"title":5,"path":6,"stem":7,"children":8,"page":153},"Experiments","/experiments","experiments",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149],{"title":10,"path":11,"stem":12},"Array of cameras","/experiments/array-cameras","experiments/array-cameras",{"title":14,"path":15,"stem":16},"Brickelangelo David","/experiments/brickelangelo-david","experiments/brickelangelo-david",{"title":18,"path":19,"stem":20},"Basic Brownian distribution","/experiments/brownian-distribution","experiments/brownian-distribution",{"title":22,"path":23,"stem":24},"Porsche 911 Car Showcase","/experiments/car-showcase","experiments/car-showcase",{"title":26,"path":27,"stem":28},"Coffee Smoke","/experiments/coffee-smoke","experiments/coffee-smoke",{"title":30,"path":31,"stem":32},"Cube Boy Dancefloor","/experiments/cube-boy-dancefloor","experiments/cube-boy-dancefloor",{"title":34,"path":35,"stem":36},"Cult of the lamb 🐑","/experiments/cult-of-the-lamb","experiments/cult-of-the-lamb",{"title":38,"path":39,"stem":40},"Dancing blob","/experiments/dancing-blob","experiments/dancing-blob",{"title":42,"path":43,"stem":44},"Fireworks Shader","/experiments/fireworks-shader","experiments/fireworks-shader",{"title":46,"path":47,"stem":48},"Galaxy Generator 🪐","/experiments/galaxy-generator","experiments/galaxy-generator",{"title":50,"path":51,"stem":52},"Gelatinous Cube","/experiments/gelatinous-cube","experiments/gelatinous-cube",{"title":54,"path":55,"stem":56},"Glass/Plastic Material","/experiments/glass-material","experiments/glass-material",{"title":58,"path":59,"stem":60},"Grainy Liquid Blobs","/experiments/grainy-liquid","experiments/grainy-liquid",{"title":62,"path":63,"stem":64},"Haunted House","/experiments/haunted-house","experiments/haunted-house",{"title":66,"path":67,"stem":68},"Phone with HTML inside","/experiments/html-phone","experiments/html-phone",{"title":70,"path":71,"stem":72},"Low Poly Planet","/experiments/lowpoly-planet","experiments/lowpoly-planet",{"title":74,"path":75,"stem":76},"Magical Marbles","/experiments/magical-marbles","experiments/magical-marbles",{"title":78,"path":79,"stem":80},"Nuxt Stones","/experiments/nuxt-stones","experiments/nuxt-stones",{"title":82,"path":83,"stem":84},"Particle Pumpkin Shader","/experiments/particle-pumpkin","experiments/particle-pumpkin",{"title":86,"path":87,"stem":88},"Particles Morphing","/experiments/particles-morphing","experiments/particles-morphing",{"title":90,"path":91,"stem":92},"Plexus Particles","/experiments/plexus-particles","experiments/plexus-particles",{"title":94,"path":95,"stem":96},"Portal Journey","/experiments/portal-journey","experiments/portal-journey",{"title":98,"path":99,"stem":100},"Wizard's Potion Classroom","/experiments/potions-classroom","experiments/potions-classroom",{"title":102,"path":103,"stem":104},"Rapier Basketball","/experiments/rapier-basketball","experiments/rapier-basketball",{"title":106,"path":107,"stem":108},"Rapier Vehicle","/experiments/rapier-car","experiments/rapier-car",{"title":110,"path":111,"stem":112},"Rapier Object Clump","/experiments/rapier-object-clump","experiments/rapier-object-clump",{"title":114,"path":115,"stem":116},"Rapier Wrecking Ball","/experiments/rapier-wrecking-ball","experiments/rapier-wrecking-ball",{"title":118,"path":119,"stem":120},"Repulsion Effect","/experiments/repulsion-effect","experiments/repulsion-effect",{"title":122,"path":123,"stem":124},"Shadertoy Museum","/experiments/shadertoy-museum","experiments/shadertoy-museum",{"title":126,"path":127,"stem":128},"Space Game","/experiments/space-game","experiments/space-game",{"title":130,"path":131,"stem":132},"Halloween Spooky-saur 🎃","/experiments/spooky-saur","experiments/spooky-saur",{"title":134,"path":135,"stem":136},"Synthwave Landscape","/experiments/synthwave-landscape","experiments/synthwave-landscape",{"title":138,"path":139,"stem":140},"Texture Particle Cursor","/experiments/texture-particle-cursor","experiments/texture-particle-cursor",{"title":142,"path":143,"stem":144},"Vue Fes Japan 2025","/experiments/vuefes-japan-2025","experiments/vuefes-japan-2025",{"title":146,"path":147,"stem":148},"WebGPU","/experiments/webgpu","experiments/webgpu",{"title":150,"path":151,"stem":152},"World Walker","/experiments/world-walker","experiments/world-walker",false,{"id":155,"title":150,"author":156,"body":158,"date":278,"description":279,"extension":280,"featured":153,"lastUpdated":281,"meta":282,"navigation":285,"path":151,"seo":286,"stem":152,"tags":287,"thumbnail":294,"__hash__":295},"experiments/experiments/world-walker.md",[157],"jaime-bboyjt",{"type":159,"value":160,"toc":271},"minimark",[161,174,179,204,208],[162,163,164,165,169,170,173],"p",{},"A third-person character controller demo using ",[166,167,168],"code",{},"@tresjs/rapier",". A rigged footman walks across a terrain generated from a displacement map, with the physics handled by a ",[166,171,172],{},"HeightfieldCollider"," built from the same heightmap.",[175,176,178],"h3",{"id":177},"controls","Controls",[180,181,182,201],"ul",{},[183,184,185,186,190,191,190,194,190,197,200],"li",{},"Use ",[187,188,189],"kbd",{},"W"," ",[187,192,193],{},"A",[187,195,196],{},"S",[187,198,199],{},"D"," to move the character.",[183,202,203],{},"Drag with the mouse to orbit the camera around him.",[175,205,207],{"id":206},"technical-implementation","Technical Implementation",[180,209,210,220,237,247,265],{},[183,211,212,216,217,219],{},[213,214,215],"strong",{},"Heightfield terrain"," — the displacement map is downsampled into a heights matrix that feeds a ",[166,218,172],{},", so the physics ground matches the displaced plane geometry.",[183,221,222,225,226,190,229,232,233,236],{},[213,223,224],{},"Character body"," — a ",[166,227,228],{},"type=\"dynamic\"",[166,230,231],{},"RigidBody"," with locked rotations and a ",[166,234,235],{},"CapsuleCollider","; movement sets linear velocity while gravity keeps the character glued to the slopes.",[183,238,239,242,243,246],{},[213,240,241],{},"Camera-relative movement"," — WASD input (via ",[166,244,245],{},"useMagicKeys",") is converted to a direction offset relative to the camera, and the model rotates smoothly toward the walk direction.",[183,248,249,252,253,256,257,260,261,264],{},[213,250,251],{},"Animations"," — ",[166,254,255],{},"useAnimations"," cross-fades between ",[166,258,259],{},"Idle"," and ",[166,262,263],{},"SwordAndShieldRun"," based on key presses.",[183,266,267,270],{},[213,268,269],{},"Vegetation"," — grass and clutter (bushes) are scattered across the terrain in chunks, sampled from the same heightmap sampler as the terrain so planting stays glued to the slopes and skips ground that's too steep. Each plant gets randomized width, height, stiffness, atlas variant, and a healthy/dry tint from a noise field. The billboards face the camera, sway from a stacked-sine wind in the vertex shader, and dissolve into a noise-gated fade at a distance, with per-chunk culling once past the fade range.",{"title":272,"searchDepth":273,"depth":273,"links":274},"",2,[275,277],{"id":177,"depth":276,"text":178},3,{"id":206,"depth":276,"text":207},"2026-07-09","A third-person character controller walking across a heightfield terrain scattered with wind-blown vegetation, under the rain. Built with @tresjs/rapier physics and cientos' Precipitation and Sky.","md","2026-07-11",{"slug":283,"status":284},"world-walker","draft",true,{"title":150,"description":279},[288,289,177,290,291,292,293],"physics","rapier","heightfield","shaders","glsl","vegetation","/experiments/world-walker.webp","WIpP9fs2gwlkNbfXYa-R6HpjDiRUzlFxGWs-QQv6CRQ",[297,313,328,345,361,378,395,413],{"id":298,"title":299,"avatar":300,"body":301,"description":272,"email":305,"extension":280,"github":306,"meta":307,"name":306,"navigation":285,"path":308,"seo":309,"slug":306,"stem":310,"twitter":306,"website":311,"__hash__":312},"authors/authors/alvarosabu.md","Alvarosabu","/avatars/alvarosabu.jpeg",{"type":159,"value":302,"toc":303},[],{"title":272,"searchDepth":273,"depth":273,"links":304},[],"hola@alvarosaburido.dev","alvarosabu",{},"/authors/alvarosabu",{"description":272},"authors/alvarosabu","https://alvarosabu.dev","kfjqjiPxKR64avAeoJeNF40fMr5laisoEnPnfgFGN_U",{"id":314,"title":315,"avatar":316,"body":317,"description":272,"email":321,"extension":280,"github":322,"meta":323,"name":322,"navigation":285,"path":324,"seo":325,"slug":322,"stem":326,"twitter":321,"website":321,"__hash__":327},"authors/authors/andretchen0.md","Andretchen0","/avatars/andretchen0.jpg",{"type":159,"value":318,"toc":319},[],{"title":272,"searchDepth":273,"depth":273,"links":320},[],null,"andretchen0",{},"/authors/andretchen0",{"description":272},"authors/andretchen0","rztGS5YNlU7jYv1laE9f863gZy-WUFK5r3uuycyiMLY",{"id":329,"title":330,"avatar":331,"body":332,"description":272,"email":336,"extension":280,"github":337,"meta":338,"name":339,"navigation":285,"path":340,"seo":341,"slug":337,"stem":342,"twitter":343,"website":321,"__hash__":344},"authors/authors/damienmontastier.md","Damienmontastier","/avatars/damienmontastier.jpg",{"type":159,"value":333,"toc":334},[],{"title":272,"searchDepth":273,"depth":273,"links":335},[],"montastier.damien@gmail.com","damienmontastier",{},"Damien Montastier","/authors/damienmontastier",{"description":272},"authors/damienmontastier","dammontastier","FqtKh6r8pBEM29DE6GhT098-LIpM3BL7RXSxFjrcwwY",{"id":346,"title":347,"avatar":348,"body":349,"description":272,"email":321,"extension":280,"github":353,"meta":354,"name":355,"navigation":285,"path":356,"seo":357,"slug":353,"stem":358,"twitter":359,"website":321,"__hash__":360},"authors/authors/franciscohermida.md","Franciscohermida","/avatars/franciscohermida.jpg",{"type":159,"value":350,"toc":351},[],{"title":272,"searchDepth":273,"depth":273,"links":352},[],"franciscohermida",{},"Francisco Hermida","/authors/franciscohermida",{"description":272},"authors/franciscohermida","chicohermida","2dGmaA2uS0w2CaErMR8BexRzx0pCgoEowV5tZcITkus",{"id":362,"title":363,"avatar":364,"body":365,"description":272,"email":369,"extension":280,"github":370,"meta":371,"name":363,"navigation":285,"path":372,"seo":373,"slug":157,"stem":374,"twitter":375,"website":376,"__hash__":377},"authors/authors/jaime-torrealba.md","Jaime Torrealba","/avatars/jaime-torrealba.jpg",{"type":159,"value":366,"toc":367},[],{"title":272,"searchDepth":273,"depth":273,"links":368},[],"solucionesinformaticasjtc@gmail.com","JaimeTorrealba",{},"/authors/jaime-torrealba",{"description":272},"authors/jaime-torrealba","jaimebboyjt","https://jaimetorrealba.com/","WhkdXnej1NkT__thyZfYEil3qYn8wi7qVoQSMzyfrs4",{"id":379,"title":380,"avatar":381,"body":382,"description":272,"email":386,"extension":280,"github":387,"meta":388,"name":389,"navigation":285,"path":390,"seo":391,"slug":389,"stem":392,"twitter":386,"website":393,"__hash__":394},"authors/authors/luckystriike.md","Luckystriike","/avatars/luckystriike.jpg",{"type":159,"value":383,"toc":384},[],{"title":272,"searchDepth":273,"depth":273,"links":385},[],"none","luckystriike22",{},"luckystriike","/authors/luckystriike",{"description":272},"authors/luckystriike","https://github.com/luckystriike22","vmVaU8HAY_jbVnlvpUQiwh3uPcKxGGr6B5PF9xo17X8",{"id":396,"title":397,"avatar":398,"body":399,"description":272,"email":403,"extension":280,"github":404,"meta":405,"name":406,"navigation":285,"path":407,"seo":408,"slug":404,"stem":409,"twitter":410,"website":411,"__hash__":412},"authors/authors/neoprint3d.md","Neoprint3d","/avatars/neoprint3d.jpg",{"type":159,"value":400,"toc":401},[],{"title":272,"searchDepth":273,"depth":273,"links":402},[],"drew@neoprint3d.dev","neoprint3d",{},"Drew Ronsman","/authors/neoprint3d",{"description":272},"authors/neoprint3d","drew_ronsman","https://dronsman.com","w-8rauWEJDRmX_QOi4s2PI7n9EABybGURQ-R_ss9tzo",{"id":414,"title":415,"avatar":416,"body":417,"description":272,"email":421,"extension":280,"github":422,"meta":423,"name":415,"navigation":285,"path":424,"seo":425,"slug":422,"stem":426,"twitter":427,"website":428,"__hash__":429},"authors/authors/neosoulink.md","Neosoulink","/avatars/neosoulink.jpg",{"type":159,"value":418,"toc":419},[],{"title":272,"searchDepth":273,"depth":273,"links":420},[],"neodarksoulink@gmail.com","neosoulink",{},"/authors/neosoulink",{"description":272},"authors/neosoulink","nsl_nathan","https://github.com/Neosoulink","69eGfzorl4NNNe56pFRh6qK3AhnfjnKUvCHO-_9Pa1Y",1787004690991]