BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
Ride, care for and breed horses across an open 3D ranch world. Runs in your browser — and in VR.
GamesJavaScript · HTMLGitHub @mmoritz2OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A cozy open-world horse game that runs in a browser tab — 1000x1000 procedural world, breeding, show jumping, and full WebXR VR riding. One HTML file, no build step.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A cozy open-world horse game that runs in a browser tab. Ride across a 1000×1000
open world, care for and breed your horses, jump courses, and — on a headset —
ride the same world in VR.
Built from scratch with no build step and no CDN: clone it, serve the
folder, and it runs.
Then open. Your ranch auto-saves to localStorage.Read the full README ↗A cozy open-world horse game that runs in a browser tab. Ride across a 1000×1000 open world, care for and breed your horses, jump courses, and — on a headset — ride the same world in VR.
Built from scratch with no build step and no CDN: clone it, serve the folder, and it runs.
Visit the ranch store. Browse all 127 tack pieces with illustrated previews and links to the 3D fitting room. The GitHub Pages store also shows sample gem prices and VIP pass benefits. Purchases, accounts, and cloud backups are not available on GitHub Pages; they need the separate account server. No real-money payments are enabled.
For local accounts and Stripe sandbox testing, use Node.js 22.13+ and run
node server/commerce.mjs, then open http://127.0.0.1:8432/store.html.
See commerce setup and launch requirements.
python -m http.server 8431
Then open http://127.0.0.1:8431/. Your ranch auto-saves to localStorage.
The local Breed Studio is at http://127.0.0.1:8431/breeds.html. The current realistic roster uses the approved WildMesh horse's native skeleton, with breed shape, coat and grooming variants and authored walk, trot, canter, gallop and jump motion. The older 40-joint assets are retained in the repository; they are not the current realistic roster's foundation. See the runtime roster record, motion profiles, and source credits and restrictions. The collection also includes the original Black Dragon and European Dragon.
The current WildMesh horse and Black Dragon have noncommercial license restrictions. Do not treat this repository as cleared for commercial release. The iOS development project packages the existing game for native testing; asset rights, device testing, signing and release gates remain open. It is not an App Store release.
The October playability study records the reference research, tested improvements and remaining quality/release gaps.
For VR, serve over HTTPS (WebXR requires a secure origin) and press Ride in VR:
python serve-vr.py
Open Menu → Tack boutique or Shop → Tack → Tack boutique to choose a saved adult horse, buy
pieces with earned coins, and equip or move owned pieces between horses. The
boutique's Try on in 3D link keeps the selected horse. The standalone fitting
room is tack-studio.html?horse=white-western&collection=rainbow and includes all
79 equine roster identities; dragons keep their existing equipment path.
The collection renderer fits the detailed Bay Sporthorse, White Western, Bay Western and their native breed variants from the actual body and skeleton. Horses with no equipped tack have no visible saddle, pad or bridle. The original equipment is available as the free, three-piece Classic Western set in the boutique. Equip its saddle, pad and bridle together or individually; removing the last piece leaves the horse clear. New collections replace the original look while preserving the hidden rig contacts used for rider movement. Bridles include matching resting reins in the fitting room and on parked horses; mounting hands the reins to the rider without drawing a second pair.
The catalog contains 100 earned-coin pieces, 24 account-owned pieces and the three free Classic Western pieces. Paid ownership still requires the account service; GitHub Pages provides previews and does not enable checkout.
Focused checks:
node tools/qa-tack-native.mjs --optional
node tools/qa-tack-reins.mjs
node tools/qa-tack-native.mjs --catalog
node tools/qa-native-tack-integration.cjs
node tools/qa-tack-studio-roster.cjs
node tools/qa-tack-collection.cjs
node tools/qa-paid-tack.cjs
Open Rider → Outfit for 48 free looks across Riding, Ranch, Everyday and Adventure. Flannel, denim, overalls, knits, show jackets and trail layers have rendered previews, alongside gingham, argyle, herringbone, Fair Isle, botanical prints and colour-blocked tops. Top, trouser and boot colours change separately. Changes stay in the preview until Save. Undo restores your saved look.
Clothing has fabric relief, softer folds, sewn collars and pockets, and raised buttons. The female rider has three fitted hairstyles: a sculpted ponytail, bun and swept crop, with a helmet fitted to the new head. The existing male hairstyles remain available. The editor also offers 20 hair colours, 10 skin tones and 10 eye colours.
Mix in 18 free accessories across Glasses, Earrings, and Necklaces & scarves. Each category has real close-up previews and a remove option. These choices are independent of clothing and hair, are included in Save and Undo, and appear on other riders in multiplayer.
On a screen
W / ↑ | ride |
A / D | steer |
Shift | gallop |
Ctrl / Alt | temporary walk / trot |
[ / ] | choose a slower / faster gait |
S / ↓ | brake, then walk backward |
Space | jump |
E | mount a horse you are standing next to |
| drag / scroll | orbit and zoom |
On a phone, steer with the thumbstick and choose a gait with the pace control. Hold STOP to brake, or pull the stick back to stop and then walk backward. Drag the open world view to look around while riding.
In VR you hold the reins
This is the part worth trying, and the reason the VR mode exists. Rather than steering with a thumbstick, both controllers are read as a pair of reins. Their positions are measured against your head, so it works at any height and in any chair with no calibration step — wherever your hands are resting when you arrive becomes neutral.
| push both hands forward | move off, and further forward asks for more |
| draw both hands back | slow down; into your chest is a halt |
| draw one rein back | turn that way |
| carry both hands to one side | neck-rein that way |
| trigger | gallop |
A | jump |
B / Y | open the world-space menu |
The reins are drawn from the controllers themselves, so you watch them move as you ride. Throttle reads the leading hand rather than the average, so drawing one rein back to steer does not also pull the horse up.
The thumbstick works too. Status → the last button on the bottom row cycles which input the horse listens to, and remembers it:
| 🎮 Either | reins or stick, whichever you are actually using wins (default) |
| 🪢 Reins | stick ignored — nothing but your hands moves the horse |
| 🕹️ Stick | reins are along for the ride but do not steer |
"Either" is the nicest way to play, but it does mean a resting hand can nudge the horse when you meant to ride on the stick alone, so each can be picked outright.
| World | ~1000×1000 units of ridged hills, cliffs, a carved river with a bridge, a stream, wheat fields, desert canyon, and a snowline — one continuous mesh, coloured by slope and altitude |
| Money | Livery stalls that earn while you are away (how many depends on what you have built), an earnings record day by day, 49 leaderboards ranked against the ranches in the valley whether or not you are online, four rotating 28-day seasons with a 30-tier pass on a free and a gold track, and VIP bought with gems you earn by playing — there is no real money anywhere in this game |
| Horses | 45 horse identities: 24 real breeds, a Bay sporthorse and 20 fantasy variants. Distinct breed proportions, textured coats, individual-strand manes and tails, and draft feathering; walk, trot, canter, gallop and jump; five stats trained by forage; six temperaments; breed mastery; care, bonding, XP and levels; breeding and foals that grow over real time. The older halt tricks are not yet adapted to the new anatomical rig. |
| Tack | Saddle, pad, bridle and horseshoes as gear with rarity, bonuses, upgrades and merges; Silver Keys open tack chests and Grandma's locked tack room; nothing costs money |
| Story | Two books: Grandpa Wren's ranch, then the Silver Kestrel, a grey horse followed region by region through people to talk to, clue puzzles, and a tameable reward |
| Ranch | Build it: fourteen pieces placed on the ground, builder points, six ranch levels with real perks |
| Riding | Speed-dependent gaits, stamina, jumping judged for inspiring jumps and line riding, show-jumping courses and cross-country races with pickups, ribbons, a featured week with prize tiers, and trophies |
| Treasure | A treasure map: twelve chests, four collectible sets, fishing at Loon Lake, and a free camera for the photograph |
| Living world | Day/night with dusk window lights and fireflies, weather with rain and rainbows, wild horses to tame, NPC riders, and procedural wildlife |
| VR | Full WebXR mode — ride from the saddle holding the reins in your hands, with a world-space UI you operate with the controllers |
| Multiplayer | Ride the same world as your friends: club codes over MQTT, live remote riders on the same rigged horse you ride, chat with emotes and speech bubbles, trail rides you build and announce, ranch parties with confetti and a gift, shared races, Star Points and club leaderboards. Every player gets a private code — you meet the people you send your invite link to, not strangers |
Everything renders with Three.js (vendored, no network calls at startup). The interesting parts are the systems written on top of it:
The original horses, rider, foliage and props under assets/models/ were generated locally:
a reference image per asset, then image-to-3D, texture baking and rigging.
tools/asset-gen/ holds the scripts that drive it. The replacement horse studies in
assets/models/horse-candidates/ use licensed artist-authored meshes; their original
files, license records and adaptation notes are retained beside each candidate.
The playable game now uses a refined Blender horse with a natural, unlit coat texture, corrected hair texture direction, and a preserved 33-bone rig. Original ComfyUI meadow, trail, and arena materials replace the older ground textures. The scene also has a blue sky with soft clouds, layered mountain ridges, fuller tree canopies, tapered grass, balanced daylight, and antialiasing through the postprocessing pipeline.
The editable source is assets/models/horse_showcase.blend. Rebuild commands and
rig compatibility measurements are in tools/asset-gen/HORSE_REFINEMENT.md;
terrain prompts, workflows, and reproduction instructions are in
assets/textures/pastoral/README.md. The horse retains its existing anatomy and
procedural gait system. Reaching the reference game's full character quality
still requires an authored sculpt, rider rig, and animation library.
The ranch builder uses detailed replacements for all 55 decor pieces. Individual
boards, shaped furniture, iron fittings, stone courses, water basins, and fabric
surfaces share photographed PBR maps. Seven original CC0 Poly Haven models add
barrels, picnic tables, planters, lanterns, stumps, flowers, and hedges. Previews
use the same geometry as placed pieces; loaded scans upgrade both in place.
Saved items receive the new artwork without changing prices, positions, rotation,
or IDs. Paddocks, training rings, and wells also use the new builder models.
See assets/models/world/builder/README.md and assets/textures/builder/README.md
for sources and reproduction. tools/qa-builder-art.cjs renders the catalogue,
checks preview/placed parity, and verifies real placement and saved reloads;
tools/qa-ranch.cjs covers the existing building controls and economy.
The September 30 environment pass replaces the saturated cartoon grade with a restrained photographic finish and adds contact shading from the scene's depth buffer, nearby planar water reflections on High, and PBR water with moving ripples and translucent shallows. Reflections refresh at most 15 times per second; Medium uses fewer contact-shading samples, and Low and VR retain the lighter direct rendering path.
Terrain now uses meadow, forest-litter and rock normal maps, with wet surface
response during rain. The ranch has matching timber battens, textured stone
foundations and weathered bridge timber. Finer grass, light transmission through
leaves, layered clouds, and broader textured mountain silhouettes complete the
lighting and materials pass. Local CC0 Poly Haven shrubs, ferns, stumps, barrels
and selected yard props are integrated from assets/models/world/; provenance
is retained in that directory's SOURCE.md. The understory is instanced in
spatial patches and culled by distance.
The downloadable-asset pass adds six verified CC0 Poly Haven model assets:
a detailed broadleaf tree, three pine saplings, six mossy rock variants, two rock
faces/cliffs and fallen timber. Scans replace the 74 scattered boulders and 30
meadow outcrops. Detailed trees replace nearby oak/birch placements and biome copses, capped at
12 on High and 6 on Medium; spatial batches cull off-screen crowns and shadows.
Distant trees and Low/VR use lightweight, live-lit views baked from the same tree
model to retain its silhouette. New saplings and logs stay clear of routes,
water, interactables and colliders. Original PBR maps and leaf transparency are
preserved. See assets/models/world/realism/README.md and its source/hash manifest.
Three photographed ground materials replace the generated pasture, forest-soil
and exposed-rock surfaces, with matched color/normal maps, roughness, and ambient
occlusion. Their sources, licenses and compressed output hashes are recorded in
assets/textures/scanned/. Models and ground textures add about 24 MiB; all
assets are served locally, with no third-party model requests during play.
Run node tools/qa-world-finish.cjs with the preview server running for actual
WebGL shader, contact-shading, reflection, asset-loading, resize and quality-tier
checks, imported-model checks and a frame-time sample. It saves ranch, stable,
meadow, river, scanned woodland/outcrop, golden-hour, night and rain captures
in output/world-finish/. These improvements do not establish AAA or commercial
reference parity: several characters, landmarks and props still use stylized
geometry, and reflections approximate one nearby horizontal water surface.
The October 6 reference-matching pasture pass uses broader curved grass leaves,
a shared green palette for near and distant grass, larger lupin flowers in denser
banks, and warmer earth tracks. Near tufts use twelve blades rather than sixteen.
Only planted flower instances are submitted to the GPU; revisiting a cell restores
the same stems and colours. qa-country-world.cjs checks that compaction, path
clearance, grounded placement and repeatable layouts. This is an incremental
visual pass toward the official Star Equestrian countryside reference; matching
the entire reference world remains ongoing work.
The pasture relief now has wider rotated footprints and three lower connecting
shoulders. Five irregular meadow openings separate tree groups and reveal the
village from Clover Hill. Tree removal updates original trunks, blossom canopies,
scanned replacements, collision and camera obstacles, and the terrain leaf-litter
mask together. Regional woods remain outside these authored clearings. The hills
still share the rendered terrain sampler; the protected yard/arena footprints
and river/creek grading remain in place. qa-meadow-ridges.cjs checks terrain
contact across the basin, cleared-tree collisions, water depth, and actual mounted
travel up and down the hill trail and across the bridge.
The remaining blossom-tree placements now also use the scanned broadleaf tree
pipeline, retiring the old forked trunks and detached leaf cards. This preserves
their positions and trunk collisions, with the same detailed-tree triangle cap
and shadow-casting distant views. Meadow blades taper more finely and bend more,
with a smooth world-space field controlling short and tall stands across all
three grass layers. A separate green-to-gold field varies their colour. Grass
geometry and instance budgets are unchanged; cell revisits reproduce the visible
plants and their colours. Moderate slopes keep their turf, with gravel and bare
rock beginning on steeper grades. qa-country-world.cjs includes the former
forked-tree close-up, grass-height distribution and stable near-cover checks.
The clear-weather sky uses two world-anchored cloud layers with filtered noise:
smaller low cloud banks and broken high wisps over a cyan daytime gradient. This
replaces randomly jittered ray steps that produced visible speckles on low
settings. Higher settings add fine detail to the same broad cloud field. Water
reflections sample the same layers; rain increases cover, and dawn/dusk/night
retain their own palettes. Exact midnight is accepted as time zero rather than
falling back to daytime. qa-sky-world.cjs measures isolated cloud-pixel outliers,
checks the midnight boundary and captures settled day, dawn, sunset, night and
rain views. Its raw edge-variation metric is diagnostic: real cloud edges also
contribute to it, so the outlier count is the grain acceptance check.
Scanned tree edges preserve the world's opaque alpha while retaining MSAA
coverage. This removes the bright white fringe that appeared on distant crowns
in fog and rain; detailed leaves use the same treatment. Fog, colour, shadow
casting and leaf silhouettes remain part of the normal lighting pipeline.
node tools/qa-foliage-opacity.cjs checks scene opacity across weather/quality
settings and reproduces the previous fault with a controlled cutout fixture.
The next regional pass gives Amberwood gold, coral and burgundy scanned foliage
with matching close-up and distant materials. It replaces the remaining ball
crowns there and the large leaf cards at Willowmere, uses slimmer roadside trees,
and clears tree trunks from the finished bridleways. Distant crowns still cast
shadows but no longer receive the false triangular self-shadows of their cards.
The canyon has broader tableland tops, detailed palm models, trunk collisions
and a terrain-following shoreline. qa-seasonal-world.cjs, qa-canyon-world.cjs, test-oasis-art.mjs
and asset-gen/check-geology.mjs cover those changes. These passes do not reproduce
the reference game's proprietary world or establish visual parity.
Dry Gulch Oasis uses Realistic Palm Tree Free
by Next Spring, licensed under
CC BY 4.0. The original 1k GLB is
included unchanged (5,097,836 bytes). Runtime normalization, placement, tint and
roughness adapt it to the world; seven palms share three instanced mesh parts
(190,064 triangles total). Existing collision sites stay grounded, with radii
sized to the new trunks. The original procedural palms remain a load-failure
fallback. In-game Settings links to Art credits; provenance and
the source checksum are in assets/models/oasis/manifest.json.
The oasis now has a shallow, irregular basin shared by visible terrain and riding
collision. Its wet shoreline uses the terrain's grid and triangle diagonals to
avoid crossing seams. Rippled water fades at the shore and reflects nearby scenery
on High using the existing shared reflection target, refreshed at most 10 times
a second at the oasis. Tiny grass and flower meshes are omitted from the
reflection pass; floating name labels are also excluded. Dry ground cover and
scattered props respect the pond outline, and Sol walks along its outer bank.
Palms, buildings, terrain and riders remain. Medium and Low retain sky
lighting and animated ripples. node --test tools/test-oasis-art.mjs checks geometry
and the basin boundary; qa-oasis-world.cjs covers rendering, shadows, grounding,
collision and the arch ride. qa-oasis-riding.cjs checks the basin crossing,
shoreline contact, opaque foliage edges and accessible attribution, and records
per-tier desktop render timings as diagnostics rather than a mobile benchmark.
Coyote Canyon and Ochre Reach now share jointed sandstone faces with angular
outlines, uneven setbacks and sloping broken crowns. Their bases still conform
to the riding terrain. Poly Haven's CC0 Cliff Side
was photographed by Dario Barresi and James Ray Cock and processed by Jenelle
van Heerden. Three locally served WebP maps add 753,520 bytes; source and output
checksums are in assets/textures/canyon/manifest.json. The photographed 1.83 m
patch is presented at two larger, warped scales to avoid obvious repeated rings
on the tall cliffs. All three PBR maps use the same coordinates. Reproduce with
python3 tools/asset-gen/fetch-village-materials.py --assets cliff_side --output assets/textures/canyon.
qa-canyon-landforms.cjs covers the 20 retained isolated formations, their collision footprints,
terrain contact, mounted passage and nine weather/quality views, including
finite HDR pixels before and after post-processing. asset-gen/check-geology.mjs
also ray-tests the arch exterior from both sides and checks its open passage.
The canyon also has four original, connected escarpments: a northern rim, paired walls along Ochre Trail, and the butte beside the oasis. Their height field is sampled into the main terrain grid, so the sandstone skin and riding ground use identical triangles. Clefts, broken crowns and tapered talus give the banks shape beyond the texture. The surfaces share the existing photographed sandstone maps with world-space triplanar projection. Twenty-four former towers are retired where they conflict with the connected banks or the valley route.
Cliff-foot collision contours stop grounded riders; their absolute top heights
allow flight above the banks. Protected zones preserve the settlement, oasis,
arena, river margins and Derby line. Steep faces reject dry planting. Broad
additive heat-haze cards have been replaced by a subtle warm distance-fog grade,
removing the bright ribbons they drew across cliffs from aerial views.
node --test tools/test-canyon-landscape.mjs checks geometry, terrain contact and
protected areas; qa-carved-canyon.cjs rides Ochre Trail, presses into a cliff,
compares saved protected-ground samples and checks rendering across graphics tiers.
Hollowpeak Falls now descends through a connected mountain watercourse: an upper tarn feeds a recessed stream, then the cascade falls into a carved plunge basin. The original height field is shared by terrain, rock coverage, planting and hoof contact. The mountain casts a complete terrain silhouette; steep slopes reveal world-space rock maps while the gentler crowns retain snow. Cliff-foot collision contours preserve the Frostpine trail, town approaches and Snow Trail race.
The photographed rock is Marble Cliff 02
by Amal Kumar / Poly Haven, CC0. Local diffuse, normal and roughness maps use
6.8-metre world-space projection; provenance, checksums and reproduction instructions
are in assets/textures/falls/. Both pools share the existing High reflection
pass at a maximum 10 Hz; Medium and Low retain ripples and sky lighting. Dry
planting respects the watercourse. node --test tools/test-falls-landscape.mjs
checks the terrain triangles and water clearance; qa-mountain-falls.cjs checks
protected ground, mounted travel, cliff collision and weather/quality rendering.
Floating names and speech bubbles also use the current camera transform to clip
inside camera clearance; a lagging CPU fade cannot leave a giant label across
the riding view. The GPU check verifies three near distances and a readable far label.
Desert planting uses original ribbed saguaro and barrel cactus models with
rounded, closed crowns, areoles and fine spines. Both the old textured cactus
scatter and the plain tube cacti use these shared templates. Coyote's town centre
and main riding approaches stay clear, and removing a plant also removes its
collision footprint. Small barrel cacti now sit at ground-cover scale.
Agave rosettes use folded, curved leaves; ocotillo has its own woody canes and
leaf clusters instead of a stretched agave card. These plants cast and receive
shadows. Curved rush clumps replace the bright, bare poles around the oasis.
Medium/Low use simpler agave and ocotillo geometry; cactus instances
retain spatial culling. test-desert-art.mjs checks closed surfaces, normals,
determinism and model budgets. qa-desert-plants.cjs checks placement, collision
coverage, route clearance, model replacement, quality/weather rendering and the
mounted passage through Ochre's stone arch.
Village cottages and shopfronts now use Poly Haven's CC0 Painted Plaster Wall
by Amal Kumar and Roof Slates 03 by Rob Tuytel.
Colour, OpenGL normal and roughness maps use the photographed 2 m plaster / 3 m slate
scale, including gables and perpendicular dormer roofs. The six locally served WebP
maps total about 1.25 MiB; checksums and credits are in assets/textures/village/manifest.json.
Reproduce them with python tools/asset-gen/fetch-village-materials.py (Pillow required).
The tallest distant peaks have broader, broken shoulders, with a lower outer horizon
and 96,384 triangles across six static named massifs instead of 230,400. Compass
bearings and riding terrain remain fixed. qa-country-world.cjs
checks loaded maps, static relief outside the riding basin and mesh budgets;
qa-render-artifacts.cjs includes the village in daylight, rain and night.
Cottonwood's general store, inn and clubhouse have two full floors, recessed casements, iron balconies and shallow hipped roofs. The fixed 7–9 m façades face a connected village square; cottages sit on quieter side plots. Roofs use Amal Kumar's CC0 Clay Roof Tiles at its photographed 4 m scale. The larger houses stay below 12,000 triangles and 16 material draws each. Shop interactions and the fast-travel/quest positions are retained; Pim and Ned walk their corresponding entrance courts.
The square and its approaches share one terrain-draped paving mesh (10,459
triangles). Rob Tuytel's CC0 Patterned Cobblestone
is applied at its photographed 2.5 m scale; local diffuse, OpenGL normal and
packed maps add 903,618 bytes. Source checksums, conversion details and authors
are recorded in assets/textures/village-paving/manifest.json. Dirt ribbons
clip out under the pavement. Building plots, roads and planting use the same
layout reservations, and hedges/collision lines stop at the town edges.
The seven country trails use bounded road strokes and terrain-cell subdivision,
so their paint follows the same triangles as hoof contact instead of cutting
through hills. Final vertices resample route coverage to keep compacted centres
solid and verges feathered through bends. Route coordinates and collision data
are retained. tools/test-road-terrain-drape.mjs checks terrain clearance,
footprint, attributes and thin-triangle stability; tools/qa-riverwest.cjs checks
coverage and mounted travel. The combined road mesh contains 75,904 triangles
and about 2.94 MiB of geometry, with one material and no new texture downloads.
Eight authored flower beds in the Clover, eastern, northern and riverside
pastures recover taller grass and dense modelled lupins from the grazing mask.
Near, middle-distance, seeded and static grass share the same compact recovery
field. Open field centres stay short, and existing road, yard, water and course
planting exclusions still apply. Terrain, tree layout and collision data are
unchanged. This uses the existing flower geometry and instance capacity; only
live flower counts increase. test-pastoral-fields, test-meadow-tufts and
test-west-meadow cover the shared growth response and preserved field centres.
Close pasture grass uses three original modeled forms: arched fescue, low bowed
leaves and taller seed-bearing tufts. Stable patches mix them at existing grass
roots while retaining wind, shadows, path clearance and the current triangle
budget. High and Medium use two extra instance draws; Low and VR draw the
original cover. The three forms reserve roughly 6.8 MiB more instance buffers
than the previous single form at every graphics tier. Only active family rows upload during repacking. No textures or
materials are added. tools/test-grass-families.mjs and
tools/test-mixed-sward-production.mjs cover geometry, source preservation,
quality changes, upload ownership and disposal. Mobile frame rate is unverified.
An original open-basin stone fountain, four beds with 117 periwinkle plants,
three benches, five lanterns and three budgeted CC0 scan trees furnish the
square. One orchard tree moves off the existing through-road; its harvesting
source follows the tree. qa-village-square.cjs checks the complete mounted
routes, all townsfolk walks, shop approaches, garden/fountain collisions,
loaded shade trees, terrain contact, opaque/finite pixels and daylight, rain,
night and all graphics tiers. qa-village-townhouses.cjs remains a compatible
entry point for the same checks. QA_SEED plus --layout-only permits another
seeded layout/physics check. This is an original settlement inspired by the
reference's scale, paving and planted approaches; the broader world still
has visible differences and the overall art goal remains in progress.
Harvest plants now have original folded leaves, stems, flowers and shaped fruit
instead of stacked spheres. All 20 foods keep their placement, inventory rewards
and respawn logic; carrots are rooted and no longer spin. Cached geometry is
shared between pickups, with at most three meshes per plant and 53,084 triangles
across all unique templates. tools/test-forage-art.mjs checks geometry validity
and sharing; tools/qa-botanical-harvest.cjs exercises every food's collection and
regrowth, checks contact against the rendered terrain, and captures native-GPU views.
Cottage window boxes and entry planters use four CC0
Periwinkle Plant specimens by Amal Kumar,
with the author's cutout opacity, diffuse, normal and roughness textures. There
are 264 plants across eight cottages and three village townhouses, batched into four meshes per building, with
leaf shadows and sizes fitted to the boxes. The 758,220-byte local GLB contains
7,524 triangles across its four source specimens; provenance and SHA-256 hashes
are in assets/models/world/gardens/manifest.json. Reproduce it with
python3 tools/asset-gen/fetch-world-realism.py periwinkle_plant followed by
node tools/asset-gen/build-garden-flowers.mjs (dependencies in
tools/asset-gen/package.json). Trail gardens keep their existing gazania scans.
The world uses a denser terrain mesh with matching riding collision, continuous downhill river and creek channels, an arched bridge at the actual crossing, and surface materials that blend with slope, tree cover, riverbanks and climate. Botanical trees and shrubs, curved grass blades, photographed-style generated leaf and needle textures, and distant forest textures baked from the actual tree meshes replace the earlier sphere/cone scenery.
Original ComfyUI materials still supply weathered timber and cedar shingles;
the main ground now uses photographed scans. Detailed barns and cottages have recessed windows,
door joinery, foundations and gutters. Canyon formations have eroded silhouettes
and rubble at their bases; the falls are carved into continuous terrain. Riverbanks
have clustered sedges, reeds, gravel and driftwood. The sources and reproduction
records are in assets/textures/realism/README.md.
Run node tools/qa-world.cjs with the local server on port 8431, or pass its URL
as the first argument. This Playwright check verifies rendered terrain against
collision, downhill water, channel depth, a complete bridge crossing, and the
day/night and graphics settings. Results and screenshots go in
output/world-validation/. This remains an evolving game world; its characters,
some props, and procedural water still have a stylized appearance.
Retina and large windows use a scene pixel budget (1.65 million on High, 1.1 million on Medium, 850,000 on Low), reapplied on resize and VR exit. High retains its detailed models, clouds, contact shading and reflections, with 2× postprocess MSAA and a 4096px shadow map (capped by the device limit). Replaced tree batches are hidden completely, and tree detail selection uses hysteresis; unchanged instance buffers are no longer uploaded every scenery tick.
Sun shadows remain enabled on High, Medium and Low, including the scanned woodland and the middle-distance grass that previously hid ground shadows. High covers 200 metres with a 4096px map; Medium uses 152 metres / 2048px and Low 104 metres / 1024px. Coverage widens near sunset. The light follows terrain height and snaps to its texel grid to keep shade stable while riding over hills. VR retains its existing shadow-free performance mode.
Run node tools/test-world-shadows.mjs for moving terrain, texel stability and
GPU limits, and node tools/qa-visible-shadows.cjs against the local server for
rendered shadow comparisons at all three quality levels. QA_PORT and
PLAYWRIGHT_PATH select the preview and installed browser runner.
The follow camera keeps a consistent avoidance side and anticipates travel around corners. Rider pose blends remain bounded during slow frames, and jumping rise is limited by actual leg reach so boots stay in the stirrups. CPU contact sampling reads current bone transforms without repeatedly rebuilding the horse's GPU skeleton matrices.
Run node tools/test-follow-camera.mjs and node tools/test-render-budget.mjs
for moving-wall/corner sightlines and viewport budgets. With the local server
running, node tools/qa-riding-stability.cjs checks actual skinned boot and rein
contacts on Bay and White Western horses, slow-frame jumps and landing,
paused poses, retired tree batches, stationary buffers and Retina resizing.
It uses a disposable save and writes its report and captures to
output/riding-stability/. Set QA_PORT for a different preview port.
ranch3d.html; sky and environment art live in small local modules. It is organised in sections, but it
is a single-author codebase, not a module structure a team would share.Original code, generated art and the attributed horse studies below. Three.js and MQTT.js are vendored under their own
licenses in assets/vendor/. Built as a personal project by
@mmoritz2.
Inspired by Star Equestrian and Horse Riding Tales (Foxie Ventures) — the games that got me interested in how a cozy horse world holds a player's attention. This is an independent from-scratch project, not affiliated with or derived from them; any resemblance is genre admiration. No models or textures were extracted from either game.
assets/models/horse-candidates/b2przemo/SOURCE.md.assets/models/horse-candidates/lyndon-daniels/SOURCE.md.DEVELOPMENT.md is the full build log, including what didn't work the first time.
Open breeds.html to see the new Bay horse study by default (?horse=artist-study). The existing game Bay sporthorse remains available at ?horse=hero, with its revised rig, eight animation clips, gait/lead selection, pause and slow playback. The 24 earlier breed models are listed separately and retain their own names and shapes. Orbit, side/head views, clay, wireframe and hair controls work across the catalog.
The user rejected the horse artwork again on 9 September 2026. horse-art-review.html compares the actual artist-authored replacement studies and existing horse at the same scale and lighting. These are development studies; an anatomy comparison does not certify finished animation or commercial-reference parity.
For local preview, run python tools/serve-preview.py from this project and open http://127.0.0.1:8431/breeds.html. This serves fresh project files on localhost. The server must be running for the studio and uncached game assets to load.
The existing sporthorse's GLB, editable Blender rig/actions, source hashes and animation notes are in assets/models/hero-horse/. It is distinct from the earlier breed library; the same model is not relabeled as every breed.
Choose Bay sporthorse → Ride this horse in the studio, or Stable → Adopt & ride · Free in the ranch. Adoption reuses an existing sporthorse and preserves earlier horses; the selected horse persists across reloads. Breed Studio is also available directly in the ranch toolbar. New saves begin with a Bay sporthorse. Its runtime adapter is assets/game-hero-horse.js; other breeds and dragons retain their own model paths.
Editable Blender source, GLBs, shared textures, breed measurements, and reproduction instructions are in assets/models/breeds/. Model checks run with python tools/validate-breed-assets.py; gameplay checks use node tools/qa-breeds.cjs. These models improve breed recognition, proportions, and hair; close-up facial anatomy and motion still need further art refinement before claiming commercial reference parity.
The arrival area now uses matching timber architecture for the barn, summoning
stall, tack room and open stable row. Original batched practice fences, botanical
planters, bound hay stacks and physical signs are in assets/ranch-arrival-art.js.
Arena footing gains irregular wear; foliage texture contrast is reduced before
lighting, preserving silhouettes and shadow coverage.
The follow camera sweeps against registered architecture, moves around obstructing walls, and checks its interpolated path. VR, free camera and summoning cinematics retain their separate controls. HUD layouts fit narrow screens; Summoning Stall has a sticky Close button and Escape dismissal. Reward notices queue one at a time while rewards are credited immediately.
Validation: node tools/test-follow-camera.mjs,
node tools/qa-visual-quality.cjs output/visual-quality-review --camera-checks,
and node tools/run-web-game-skill.cjs. The last command runs the installed game
skill client with native Windows D3D rendering. This is an art and integration
pass, not a claim of parity with the reference game's authored characters/world.
The female rider uses Rain Rig by Blender Foundation / Blender Studio, under CC BY 4.0. Adaptations include younger facial proportions and smaller eyes, native rig evaluation, game animation skinning, fitted wardrobe and source hairstyles, geometry optimization and texture compression. The approved face remains intact through the animation conversion. See full character credits and asset provenance. Her standing pose has a six-second breathing and weight-shift loop with planted feet. Clothes retain their authored leg separation and sleeve edges follow the moving arms. Run node tools/test-rain-rider109.mjs, node tools/test-rain-posture111.mjs, and node tools/test-rain-wardrobe111.mjs for the character, posture, wardrobe, attachment and cleanup checks.
| Seasons | On weekends the Runaway Roundup: three loose horses to calm and lead home |