backup: 2026-06-17 07:36
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
:PROPERTIES:
|
||||
:ID: 4d5e6bc8-32eb-469f-a69f-84b14458c55b
|
||||
:END:
|
||||
|
||||
#+title: trmn/assets
|
||||
#+filetags: :project: :knowledge: :assets:
|
||||
|
||||
:PROPERTIES:
|
||||
:ID: trmn-assets
|
||||
:END:
|
||||
|
||||
#+title: trmn/assets
|
||||
#+filetags: :project: :knowledge: :assets:
|
||||
|
||||
[[id:6293baa2-c8a8-4c49-9284-1fa2eed75032][trmn]] — asset pipeline: SVG sprites + GLB objects
|
||||
|
||||
** Architecture
|
||||
Two asset types, both served from ~$out/assets/~ by Caddy:
|
||||
- *Sprites*: SVG files in ~assets/sprites/{eyes,nose,mouth}/~, static/committed, no build step
|
||||
- *3D objects*: GLB files in ~assets/objects/~, generated during ~nix build~ by Node.js scripts in ~scripts/~
|
||||
|
||||
Face compositing at runtime: load SVG parts → draw onto ~OffscreenCanvas(128,128)~ → ~THREE.CanvasTexture~.
|
||||
Applied to the +z front face (index 4) of the head ~BoxGeometry~ via a material array.
|
||||
|
||||
** Conventions
|
||||
- All sprite SVGs are 128×128; each draws its feature in the region it occupies on the face canvas
|
||||
(eyes ~y≈35–55~, nose ~y≈65–85~, mouth ~y≈90–110~) so all layers composite with ~drawImage(img, 0, 0, 128, 128)~
|
||||
- Face part selection seeded from ~window.__life.masterSeed~ via inline ~mulberry32~ in the Three.js script block
|
||||
- ~window.__life~ exports ~masterSeed~ (added alongside traits/buf/eventLog/today/currentDay)
|
||||
- GLB generators: pure Node.js stdlib only (no npm), accept output path as ~process.argv[2]~
|
||||
- Three.js importmap includes ~"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/"~ for GLTFLoader
|
||||
|
||||
** Gotchas
|
||||
- *Critical*: Nix flake ~src = ./.~ only includes git-tracked files (~git ls-files~).
|
||||
New ~assets/~ and ~scripts/~ dirs must be ~git add~-ed before ~nix build~ or they are silently excluded.
|
||||
- ~BoxGeometry~ material array face order: ~[+x, -x, +y, -y, +z, -z]~ → index 4 is the front face (camera-facing)
|
||||
- GLB generator runs in Nix buildPhase and writes to the build dir; installPhase ~cp -r assets $out/assets~ picks up both committed sprites and the generated ~book.glb~
|
||||
|
||||
** Key Files
|
||||
- ~assets/sprites/eyes/eyes_{1,2}.svg~ — wide-open vs narrow/tired eyes
|
||||
- ~assets/sprites/nose/nose_{1,2}.svg~ — dot vs nostrils nose
|
||||
- ~assets/sprites/mouth/mouth_{1,2}.svg~ — smile vs neutral mouth
|
||||
- ~assets/objects/book.glb~ — generated at build time (not committed); dark-red flat box 0.14×0.18×0.03
|
||||
- ~scripts/gen-book.mjs~ — pure Node.js GLB writer, no npm deps; ~node scripts/gen-book.mjs <outpath>~
|
||||
Reference in New Issue
Block a user