Guide19 min read18 sections

Traveler art

The approved character direction, visual acceptance, and completed polish record.

docs/TRAVELER_ART.mdSource updated 2026-10-28
Markdown
On this page 18 sections

Status: the fixed October 28 polish pass is complete — 5/5 (100%). Feature implementation remains 70/70 (100%). The approved Vita direction is retained. The separate beta Docker check is still awaiting the user's external result.

#P5 delivered — HUD and final shared route (5/5, 100%)

The preview is lantern-house.1.arrival-10. Objective text now has a quiet dark card over bright sky/foliage; location, connection status and traveler labels have steadier contrast. Extra movement hints settle after 1.5 metres of walking. Interaction changes use a short eased reveal, respecting the reduced-motion setting. Narrow layouts omit shortcut badges while keeping every action button. The actual garden HUD, returned shared house and 390-pixel layout were visually reviewed.

The continuous two-traveler house → garden → cart → house journey passes on the physical Intel Xe-3LPG (1.4 min / 1.5 min total). Both travelers use the original house door and garden route, walk around the raised beds, board separate seats, ride together, leave the vehicle fully and return to the house. This exposed a real boarding edge: the first tread to the settled deck exceeded the character's 0.3 m step height. An upper 0.48 m tread now bridges that gap; both travelers walk aboard without jumping. Native arrival admission/identity/collision/story/shared checks and final type/boundary/wire checks pass. The browser runner also builds the production client and packaged engine used for this journey.

The route harness was corrected to follow the beds instead of walking through the parked cart, settle its ordinary camera controls, observe the active driver when stopping, and verify actual grounded disembarkation rather than a fixed world coordinate. A mouse click under pointer lock stalled; the final route uses the normal E key. No broader regression or benchmark campaign was added.

Matching composition review: room before → room after, and garden before → garden after. Actual short motion clips are retained under P2 and P4 below.

To try the completed pass, stop the earlier art-preview terminal, then use Node 22:

Terminal
git fetch origin
git switch codex/engine-foundations
git pull --ff-only
npm ci
npm run dev:art

Open http://localhost:5187/. The v10 preview directory and Compose volume retain previous candidates separately. In the garden, follow the central path past the right planting bed, go around its far end, and return along the outer edge to the boarding steps. E chooses a seat; W/S drives/reverses, A/D steers, E leaves. Walk fully onto the ground before using the ordinary house return door.

Stop here: all five agreed polish milestones are delivered. Further work requires a new scope decision. Recorded follow-ups: finger grip/hand and foot IK; more elaborate furniture/landscape assets; transient arrival-toast overlap in the narrow layout; the third filming client's join timeout; broader device, regression and performance qualification already recorded elsewhere. These do not reopen this fixed five-item pass. The earlier Docker handoff remains pinned at 0546627; no Docker pass has been reported, and no old result should be applied to newer polish code without identifying the exact tested commit.

#P4 delivered — cart presentation (4/5, 80%)

The cart GLB now has four wheel pivots and a separate steering-wheel pivot. Presentation derives rolling distance and steering curvature from admitted shared body transforms. Wheels hold on silence, reverse with reverse travel and skip imaginary distance on a teleport. Imported node names opt into this visual-only binding: engine-wheel:front|rear:radius:wheelbase uses local X for the axle; engine-steering uses local Z. Physics, seat ownership and saved motor state are unchanged. A late arrival starts its own visual wheel phase.

The approved seated clip brings the hands inward toward the raised wheel and places the hips against the upholstery. Boarding/leaving uses a softer 650 ms camera settling window. There is no hand IK or finger grip; these remain future animation work. The outside capture and six-second actual driving excerpt were reviewed.

Focused checks pass: arrival source admission/story/collision, six seating checks, real articulated draw transforms, reproducible character art, and type/boundary/ wire checks. The physical-GPU two-player path boarding, passenger ride, turning, disembarking and outside motion capture pass (32.9 s total). The first outside capture cropped the wheels, so the final capture uses a wider, lowered view. An optional third filming client timed out joining; the required two-client journey passes. Record that third-client case for later capacity/device review; this pass does not expand into a multi-client qualification campaign.

#P3 delivered — interior finish (3/5, 60%)

lantern-house.1.arrival-9 uses less orange wood, quieter metre-scaled grain, smoother cream plaster and warm ivory linen. Reduced lamp fill lets the existing window shadows describe the room. A bounded floor material recipe adds tight, soft contact beneath the fixed desk supports; moving silhouettes still use the ordinary directional shadow map. Original story identities and collider geometry are preserved. Run npm run dev:art at http://localhost:5187/; the v9 preview data and Compose volume retain earlier candidates separately.

The actual interior capture was visually reviewed. The arrival identity/collision/story plus shared-physics/keeper native check, type/boundary/wire checks and physical-GPU furnished/shared/keeper journey pass (29.5 s total). Custom furniture meshes, global illumination and a general ambient occlusion renderer remain later art/renderer work outside this fixed pass.

#P2 delivered — character presence (2/5, 40%)

The approved Vita surfaces are unchanged. Its clips now use quieter head/chest motion, relaxed elbows and smaller arm swings, stable idle soles and a small pelvis dip during the lifted part of a stride. Idle/walk blending uses a smooth curve. The keeper plays the existing idle through the shipped animation tree instead of standing in a frozen rest pose. Existing shared facing interpolation is retained; this does not add foot IK, facial animation or turn-in-place clips.

The first integrated attempt exposed a concrete blocker: an animation commit at the current simulation tick preceded shared rigid interpolation committed at the previous tick. The interpolation now receives the scheduler tick. The arrival native check covers both together. All 12 focused rig/art/arrival checks pass; type/boundary/wire checks pass. The physical-GPU furnished/shared/keeper journey passes (28.1 s total). The shared character capture and eight-second motion excerpt show the actual scene. An initial recording attempt needed the installed system FFmpeg and workspace temporary storage; neither changes shipped runtime dependencies.

#Fixed polish pass — P1 delivered (1/5)

The October 28 pass has five fixed milestones: garden; approved character motion; interior materials/light/contact; cart presentation; HUD/interaction feedback. Finish all five, capture a short motion review and the shared house → garden → cart → house route, then stop. Further ideas stay in follow-up notes. Feature implementation remains 70/70 (100%); at P1 delivery this separate polish pass was 1/5 (20%).

P1 uses clearer garden air, deeper greens, warmer stone, directional sunlight, rounded leaves and varied tree/shrub spacing. The soft foliage profile is opt-in for this arrival scene; existing woodland assets retain their original profile. The candidate is lantern-house.1.arrival-8: npm run dev:art, then http://localhost:5187/. Data and Compose storage use v8; earlier saves are retained.

Focused checks: type/boundary/wire checks pass, the arrival identity/collision/story native check passes, and all five existing woodland checks pass. The physical Intel Xe-3LPG garden journey passes walking off the porch onto supported lawn, two travelers outdoors and returning to the furnished house (33.9 s total). An initial denser leaf profile exceeded the existing 16 MiB source budget; the final profile uses fewer, broader leaves and passes admission. The actual shared garden screenshot was reviewed. Garden composition is accepted for this pass. Larger landscapes and botanical variation remain later art work; no new benchmark matrix was run.

#October 28 daylight and silhouette polish

The new review candidate is lantern-house.1.arrival-7. Run npm run dev:art and open http://localhost:5187/. Its .data/arrival-art.7 directory and the beta Compose volume darkwind-arrival-v7 preserve the previous v6 saves separately. The existing approved Vita character, story identities, collider geometry, boarding route and seat settings are retained.

The house now uses directional shadowing from the window side, with the existing warm point lights providing interior fill. Window arches, leaves and furniture shape the light on the floor and plaster. A bounded, spatial antialiasing pass smooths high-contrast foliage, timber and animated silhouettes before bloom and tone mapping. Low-contrast material grain stays sharp; the filter has no temporal history. The effect applies to the shared renderer, including other worlds.

All four arrival-art browser journeys pass on physical Intel Xe-3LPG WebGPU: furnished house/keeper/shared travel, porch/garden return, crowded-arrival camera clearance, and shared driver/passenger travel. Native art identity/collision/story and storage checks pass; type/boundary/wire checks pass. This is visual/regression acceptance, not a frame-budget claim. GPU performance and wider devices remain part of the active qualification pass.

Daylight room · Shared travelers

#October 27 character approval

The user answered “Approve the current character” to the explicit choice between the current white-haired fantasy character and a more casual Spawn-style replacement. This accepts the current licensed Vita adaptation for this build. It supersedes the pending-approval statements in the historical entries below. The furnished-house/keeper/shared-traveler views and garden/vehicle views were already reviewed in the integrated candidate. Preserve this approved direction; minor animation, contact and material refinements remain recorded follow-ups, not a reason to reopen the model choice.

#October 27 integrated vehicle candidate

npm run dev:art now opens lantern-house.1.arrival-6, with its own .data/arrival-art.6 save directory. Stop the older art-preview terminal before restarting under Node 22, then open http://localhost:5187/. Docker/Coolify's beta Compose definition uses darkwind-arrival-v6; prior v5 storage remains intact. This is a fresh review world, not a migration or a production deployment.

The Rain Garden now includes a shared two-seat cart in the open forecourt beside the return door. Walk to the right from the garden arrival, use the rear stone step, and press E for the driver's seat. A second traveler can board and press E for the passenger seat. W/S drives, A/D steers, and E leaves a seat. The same finished model appears in the Alder court authoring template.

The cedar cart now has green upholstery, brass-framed lanterns, a steering wheel, low rails, wheel arches, plank grain and a travelling chest. Indexed smooth tubes and omitted hidden strut caps keep the combined character/garden/vehicle scene within the existing 16 MiB source budget. The wheel and lanterns are decorative; steering uses the existing shared cart motor. Wheel spin, animated steering, hand-to-wheel alignment and closer material/seat contact review remain deferred. The original garden's story interactions and collider identities are preserved; only the new cart and boarding step add collision. The forecourt is a short review route, not a large driving course.

Focused acceptance: scene compilation, original collision/identity/story checks, cart settings, shared driving and restart checks pass (three native tests). Physical-GPU Chromium passed the furnished house/shared-traveler/keeper journey (22.3 s), porch/garden/shared-return journey (28.6 s), and actual path boarding, driver/passenger travel and leaving seats (17.9 s). The boarding view and passenger view were visually reviewed. Code checks and the client/engine/production-server builds pass. The first integrated attempt placed the cart across the garden boundary wall; it was moved into the forecourt. The older garden test also retained a route save over its explicit fixture position; its seed now clears prior test storage before loading the requested position.

Current character art remains the licensed Vita adaptation described below. The user explicitly approved this candidate on October 27, as recorded above. Close-up character/vehicle animation, canopy edges, crowd/device performance, Docker/hosted acceptance and full-plan qualification remain open.

#October 27 garden candidate

The preceding art preview was lantern-house.1.arrival-5, stored separately in .data/arrival-art.5. Restart npm run dev:art under Node 22 and open http://localhost:5187/. The garden now uses the engine's original birch, alder and hazel meshes, bounded grass, ivory/gold flowers, stone bed edges and a soft sky. A stepping-stone trail continues off the house porch into a planted clearing. Both places preserve existing collision, interaction and story identities.

The Docker beta configuration now uses darkwind-arrival-v5 for this changed world. Version 4 volumes and preview directories are retained; this is a fresh art playtest rather than an implicit migration of saved worlds.

The porch clearing and shared garden were visually reviewed. Type/boundary/wire and identity/collision/story checks passed. Physical-GPU Chromium verified walking from porch to lawn without falling/resetting, shared garden visibility and return to the house (29.3 s); the furnished house, shared movement and keeper dialogue also passed (19.3 s). An initial test used the wrong grounded-state field; corrected. A combined run's five-second portal assertion expired just before the house loaded; the focused check passed with a 15-second loading window. Transition latency remains a review item.

Review still needed: user approval, wider GPU/frame-time qualification, leaf-edge antialiasing and botanical refinement. Trees and planting remain cosmetic, as the original tree silhouettes were. The route and existing walls/planters retain their collision. Do not treat this visual pass as full engine acceptance.

#October 27 arrival finish

The previous npm run dev:art seed was lantern-house.1.arrival-4, stored in .data/arrival-art.4. Earlier preview directories remain intact. Stop an older art-preview terminal before restarting, then open http://localhost:5187/.

The house now uses four authored surface recipes: directional wood grain along each timber's main axis and subtle lime-plaster variation. A deeper oak palette, cooler ambient fill and a warm shadow-casting key give the character a clearer place in the room. A brass-rimmed clock, book-spine bands and hanging ivy finish the keeper's wall and reading area. The first-time spawn moves forward to the open carpet at [0, .85, 2.2], bringing the keeper into the initial view. Existing collider shapes, identities, interactions and story logic remain unchanged.

The arrival view, keeper and shared room were visually reviewed. Type/boundary/wire checks and arrival collision/dialogue checks passed. The physical-GPU browser journey passed first-time spawn, two-traveler entry, shared movement and keeper dialogue in 16.3 seconds on Intel xe-3lpg / Chromium 155. It uses the real first-time spawn instead of injecting a saved player pose.

Remaining review: user art approval; outdoor/garden atmosphere; close-up material edges; crowd/device performance; hair/cloth/facial animation and foot IK; deployment and retained-world qualification. The clock is decorative. Four surface recipes are within the existing bounded catalog; their wider GPU cost is not yet measured. This is an art candidate, not a declaration that every full-plan gate has passed.

#October 27 textured replacement

The playable traveler and Elowen in the new arrival release now use a textured adaptation of pixiv's CC0 Vita / beta AvatarSample_3. Painted facial features, layered white hair and detailed clothing replace the rejected procedural face. This is licensed source art, not a new original character design. The preserved source, exact digest and terms are in source attribution.

The adaptation retains the fourteen-joint gameplay contract and all five existing clips: idle, walking, airborne, swimming and seated. Equipment still attaches at the hand; ragdoll binding remains supported. The new model uses 25,378 triangles, 13 material draws and 182 palette matrices per actor. Texture data stays within the existing model budget. Cloth tint is applied to the clothing material, not the face or eyes. Legacy procedural study assets remain as fixtures.

Run npm run dev:art under Node 22 and open http://localhost:5187/. Open the same address in another browser profile/private window to see the shared traveler. If the previous art preview is running, stop its terminal before restarting. The new release is lantern-house.1.arrival-3, with editor data in .data/arrival-art.3; older saved authoring worlds are retained. Player appearance also changes in worlds run by this new engine build; pinned old engine releases keep their previous player art.

The keeper close view, two-traveler room and movement journey were rendered and visually reviewed. The physical-GPU browser check passed entry, shared visibility, movement and keeper dialogue in 19.9 seconds on Intel xe-3lpg / Chromium 155. Source rebuild, GLB admission, five-clip bounds, equipment, arrival identities/collision/dialogue, physical skins, movement blending, swimming and vehicle-seat checks pass, as do TypeScript, package boundaries and generated-wire checks. A legacy test's material count was updated from 11/154 to 13/182, and its tint assertion now selects the clothing primitive explicitly. Room-dependent checks require local socket access.

Remaining review: user approval of the new direction; environment/arrival refinement; Elowen facial/idle animation; hair and cloth motion; finger animation and foot IK; additional identities; seams and masked edges at extreme close-up; physical-device crowd performance and retained/Coolify deployment qualification. The new source has a science-fantasy costume; the style choice remains reviewable. This delivery does not close the full art gate or claim parity with Spawn.

#October 26 arrival candidate

The traveler now has a shorter fitted jacket, tapered hands with separate fingers, a softer face with curved eyes and lids, and an auburn bob. The same model replaces Elowen's primitive figure in the new arrival release. Warmer room lighting, linen curtains, a darker embroidered rug and a small desk arrangement carry the palette into the house. Existing collision and keeper dialogue remain intact. Shared actors reuse an identical authored model artifact instead of exhausting the catalog budget with a duplicate.

Run npm run dev:art, then open http://localhost:5187/ for play or the private editor link printed by the command. A second browser/profile can join the same local room. This uses ports 5187/8797 and .data/arrival-art.2, separately from the usual editor. The new persistent-world seed also includes the dressed house; retained releases keep their existing environment. Do not delete saved worlds to obtain the new art.

Compare the previous character and previous face with the new quarter view, face, walking pose, room and shared view.

Focused checks pass: regenerated traveler assets and animation contracts, physical-skin checks, arrival collision/identity/dialogue preservation and persistent seed compilation, catalog reuse, and TypeScript/package boundaries. The packaged two-player browser journey passes entry, shared visibility, movement and keeper dialogue (29.6 seconds). Studio idle/walk/restored-idle rendering and disposal pass; the room, keeper, shared idle and studio views were visually reviewed. The shared movement screenshot is taken after key release and is not proof of a specific walk-animation frame.

Return for review: user art approval; face/hair/fabric refinement and additional character identities; Elowen idle/facial animation (currently a rest pose); cloth, finger animation and foot IK; additional arrival/camera cases listed below; maximum-player hardware/mobile performance; Coolify and retained-release/save qualification. These are unfinished review items. Current models remain procedural and this pass does not claim parity with the reference's art quality.

#Shared arrival and close camera

Joining a cooperative room checks the arriving traveler once per connection. Trusted rooms perform the same check on the server before publishing the initial motor. If another traveler occupies the same spot, the engine searches nearby positions within 2.4 metres, retaining at least 1.1 metres of horizontal spacing. Disposable physics scenes probe the path and its supporting floor. Walls, gaps, missing streamed terrain and unavailable space keep the original pose. Existing travelers are not pushed. Moving, swimming, fallen and supported-rider poses are preserved. This is admission spacing, not continuous player collision or gateway crowd management.

In first-person views, an avatar intersecting the camera is omitted from the color pass and its nameplate is hidden. It returns once clear, with a small hysteresis margin to avoid boundary flicker. Its shadow, simulation, peer identity and animation timeline remain present. Overhead views retain their actors.

Focused acceptance (October 26): six native checks pass across Rapier and owned physics for eight arrivals, supported clear paths, walls/ledges, unchanged failed probes, portable/checkpoint saves, trusted prediction/return and camera thresholds. Type/import checks pass. The packaged two-player software-WebGPU journey passes same-position entry, movement into the camera, hiding/reappearance and preserving the first traveler's position (24.4 s / 29.1 s total). The separated arrival and clear camera were visually reviewed.

Remaining qualification: simultaneous joins across many clients, actual hosted restart/checkpoint timing, gateways/return-to-entry crowding, complex moving collision and terrain edges, nonstandard or fallen avatar camera bounds, and whether a dithered transition looks better than the current immediate hide. No safe available position intentionally falls back to the original arrival; the camera guard still makes that overlap usable. The native trusted check does not replace a PostgreSQL/server restart journey. These checks remain in the final qualification pass.

#Earlier refinement history

The October 25 regional-room recovery fixture also places two travelers at the same arrival pose, producing camera/avatar overlap and an obstructed face close-up. Include shared arrival spacing and close-camera presentation in that polish review; the recovery capture is diagnostic evidence, not accepted character composition.

The development player and Observatory use original GLB travelers authored in TypeScript. The second art pass changed the shared character: shaped cheek/jaw contours, almond eyes with separate lids and brows, a visible smile, swept hair, fitted sleeves, folded collar/scarf, boot laces and a shaped satchel with front and back straps. The teal wool, saffron cloth, chestnut leather and brass palette remains the design direction. These are implementation details of a temporary model, not accepted final character art or a completed graphics milestone.

The coat hem now blends toward the corresponding hip, with influence fading toward the center seam and waist. This reduces thigh intersections in the reviewed walking pose. The scarf remains chest-bound and the satchel pelvis-bound; there is no cloth solver, finger animation, facial animation or foot IK. These remain further work, along with more character identities and materials.

#Source and reproducible review

The authoring source uses cubic cross-sections for fitted surfaces and swept paths for locks, seams and folded cloth. It exports both the lantern-bearing study and the empty-handed playable variant, then sends them through the normal production GLB importer. There are no external textures, proprietary source assets or remote dependencies.

With Node 22 and dependencies installed:

Terminal
node --import tsx tools/cli/traveler-model.ts

For a repeatable visual review, start the Vite development server and run:

Terminal
node tools/cli/review-traveler.mjs http://localhost:5173 test-results/traveler-review

The review tool uses Playwright's Chromium (or PLAYWRIGHT_EXECUTABLE_PATH), software WebGPU, the actual renderer and imported game asset. It saves front, three-quarter, back, face and walking PNGs under consistent studio lighting, plus the furnished Hearth study and its resource/animation report. It loads the diagnostics page and does not enter a multiplayer room. This is an art review tool, not a physical GPU benchmark.

#Rig and rendering budget

Both variants face +Z, use metres with +Y up and rest with their soles at ground zero within float32 precision. Their shared 14-joint hierarchy has a root, pelvis, chest, head, three joints per arm and two per leg. The baked Hearth idle and Traveler walk clips retain their 3.2- and 0.9-second loops and the same in-place motion.

Variant Material draws Triangles Emitted vertices Palette matrices per actor
Playable, empty-handed 11 38,664 23,256 154
Study with lantern 12 40,424 24,443 168

The arrival candidate increases the previous playable model from 28,216 to 38,664 triangles without adding material draws. The original playable art used 10 draws and 13,320 triangles. The added rosewood lip/ear material costs one draw; the fitted surfaces and swept details increase geometry. The existing scene-wide palette and asset byte admission budgets still apply. Capacity and frame time on physical devices have not been established by the software-rendered checks.

The hearth-material-study.4 worker diagnostic renders idle, quarter-stride walk and restored idle through the owned renderer. It verifies changed pixels, exact restored pixels and complete resource disposal. The headless cases regenerate both GLBs byte for byte, reimport them, check inverse binds, loop endpoints and bounds, independently check opposing hip swing, and exercise the shared rig's blend/palette behavior.

Earlier refinement images and validation are recorded in refinement acceptance. All 307 headless checks, type/import checks and seven targeted browser scenarios pass. The review retains before, after, close-up, Hearth and shared-room captures. Shared motion, actor ownership and isolated playtest instructions remain in Shared travelers. The original beta deployment is separate from these development assets.

#Shared pose admission prerequisite

The existing protocol-1 pose accepted extra fields and the relay spread them over authenticated peer metadata. A malicious pose could override id, name, color or connected, including during initial admission. It could also strand the connection outside the normal active-identity checks.

Pose admission now accepts only owned place, position and yaw fields on a plain record, preserving existing value bounds. The relay independently copies only those motion fields; pending interaction poses use the same shape. Malformed hellos close with code 1008 before admission. Malformed movement is ignored without changing the peer, and subsequent legitimate movement and heartbeat remain usable. Honest protocol-1 clients need no wire-version change.

The regression failed against the old relay and passes after the fix. It covers forged initial admission, all four metadata fields on established sessions, admitted-name ownership, normal movement, heartbeat and clean departure. The broader network suite continues to cover restart recovery, exclusive pickup and ownership fencing. This is a bounded fix to the current relay, not the full trusted-host or hostile-protocol acceptance gate.

#Recorded acceptance

Source 7c95a47 passes 284 headless tests, four multiplayer browser scenarios and the two-run renderer scenario. The full 26-case browser suite was not rerun for this increment. Walking changes 29,310 pixels in the 960 × 600 Hearth view and restored idle matches exactly. The complete study catalog contains 23 meshes, 2,516,880 owned model bytes, 85 model buffers and 17 model textures; all owned resources are disposed. These are resource counts, not performance measurements. Native scene, desktop Observatory, and narrow Observatory preserve the reviewed appearance.

End of Traveler artwork