@developerz.ai/ts23d 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/bug-hunter.md +21 -0
- package/.claude/agents/docs-author.md +13 -0
- package/.claude/agents/dx-auditor.md +14 -0
- package/.claude/agents/primitive-author.md +22 -0
- package/.claude/agents/recipe-author.md +36 -0
- package/.claude/agents/visual-reviewer.md +23 -0
- package/.claude/commands/feature.md +28 -0
- package/.claude/commands/new-recipe.md +19 -0
- package/.claude/commands/release.md +14 -0
- package/.claude/commands/verify.md +9 -0
- package/.claude/skills/author-recipe/SKILL.md +93 -0
- package/CHANGELOG.md +79 -0
- package/CLAUDE.md +85 -0
- package/LICENSE +21 -0
- package/README.md +380 -2
- package/dist/chunk-11v28977.js +1575 -0
- package/dist/chunk-11v28977.js.map +30 -0
- package/dist/chunk-1ypfs7ga.js +3571 -0
- package/dist/chunk-1ypfs7ga.js.map +42 -0
- package/dist/chunk-4ddzsqtc.js +464 -0
- package/dist/chunk-4ddzsqtc.js.map +19 -0
- package/dist/chunk-a8fxakcj.js +19 -0
- package/dist/chunk-a8fxakcj.js.map +11 -0
- package/dist/chunk-gcyp9b4d.js +755 -0
- package/dist/chunk-gcyp9b4d.js.map +22 -0
- package/dist/chunk-kgvbpqqw.js +44 -0
- package/dist/chunk-kgvbpqqw.js.map +10 -0
- package/dist/chunk-kvcep7ft.js +1919 -0
- package/dist/chunk-kvcep7ft.js.map +43 -0
- package/dist/chunk-ravbb06q.js +89 -0
- package/dist/chunk-ravbb06q.js.map +11 -0
- package/dist/chunk-w1zyhj40.js +1031 -0
- package/dist/chunk-w1zyhj40.js.map +21 -0
- package/dist/chunk-wtqhq529.js +2532 -0
- package/dist/chunk-wtqhq529.js.map +43 -0
- package/dist/chunk-xnt2sdhf.js +836 -0
- package/dist/chunk-xnt2sdhf.js.map +17 -0
- package/dist/cli/args.d.ts +24 -0
- package/dist/cli/bin.d.ts +2 -0
- package/dist/cli/bin.js +307 -0
- package/dist/cli/bin.js.map +14 -0
- package/dist/cli/load.d.ts +2 -0
- package/dist/cli/manifest.d.ts +49 -0
- package/dist/cli/render-cmds.d.ts +12 -0
- package/dist/cli/run.d.ts +1 -0
- package/dist/core/asset.d.ts +10 -0
- package/dist/core/definition.d.ts +148 -0
- package/dist/core/errors.d.ts +17 -0
- package/dist/core/family.d.ts +23 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.js +69 -0
- package/dist/core/index.js.map +9 -0
- package/dist/core/mesh.d.ts +35 -0
- package/dist/core/part.d.ts +114 -0
- package/dist/core/png.d.ts +1 -0
- package/dist/core/rng.d.ts +12 -0
- package/dist/core/transform.d.ts +20 -0
- package/dist/core/vec.d.ts +11 -0
- package/dist/core/world.d.ts +16 -0
- package/dist/export/bin-writer.d.ts +16 -0
- package/dist/export/container.d.ts +3 -0
- package/dist/export/glb.d.ts +38 -0
- package/dist/export/index.d.ts +4 -0
- package/dist/export/index.js +26 -0
- package/dist/export/index.js.map +9 -0
- package/dist/export/lights.d.ts +8 -0
- package/dist/export/materials.d.ts +23 -0
- package/dist/export/merge-pivots.d.ts +6 -0
- package/dist/export/metadata.d.ts +19 -0
- package/dist/export/motion.d.ts +9 -0
- package/dist/export/optimize-parts.d.ts +26 -0
- package/dist/export/primitive.d.ts +3 -0
- package/dist/export/tangents.d.ts +2 -0
- package/dist/export/textures.d.ts +22 -0
- package/dist/export/version.d.ts +2 -0
- package/dist/grammar/index.d.ts +2 -0
- package/dist/grammar/index.js +16 -0
- package/dist/grammar/index.js.map +9 -0
- package/dist/grammar/split.d.ts +21 -0
- package/dist/grammar/whyte.d.ts +5 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +411 -0
- package/dist/index.js.map +9 -0
- package/dist/kinds/building.d.ts +44 -0
- package/dist/kinds/faces.d.ts +27 -0
- package/dist/kinds/head-armour.d.ts +9 -0
- package/dist/kinds/head-beard.d.ts +6 -0
- package/dist/kinds/head-bust.d.ts +4 -0
- package/dist/kinds/head-extras.d.ts +15 -0
- package/dist/kinds/head-face.d.ts +6 -0
- package/dist/kinds/head-geom.d.ts +7 -0
- package/dist/kinds/head-hair.d.ts +4 -0
- package/dist/kinds/head-layout.d.ts +29 -0
- package/dist/kinds/head-mesh.d.ts +27 -0
- package/dist/kinds/head-params.d.ts +108 -0
- package/dist/kinds/head-presets.d.ts +19 -0
- package/dist/kinds/head-rim.d.ts +10 -0
- package/dist/kinds/head.d.ts +39 -0
- package/dist/kinds/hull-lines.d.ts +65 -0
- package/dist/kinds/hull-skin.d.ts +6 -0
- package/dist/kinds/hull.d.ts +14 -0
- package/dist/kinds/index.d.ts +16 -0
- package/dist/kinds/index.js +78 -0
- package/dist/kinds/index.js.map +9 -0
- package/dist/kinds/mass.d.ts +15 -0
- package/dist/kinds/openings.d.ts +30 -0
- package/dist/kinds/planned.d.ts +6 -0
- package/dist/kinds/roof-chimney.d.ts +16 -0
- package/dist/kinds/roof-shape.d.ts +64 -0
- package/dist/kinds/roof.d.ts +31 -0
- package/dist/kinds/vegetation-fronds.d.ts +15 -0
- package/dist/kinds/vegetation-impostor.d.ts +9 -0
- package/dist/kinds/vegetation-leaves.d.ts +15 -0
- package/dist/kinds/vegetation-mesh.d.ts +21 -0
- package/dist/kinds/vegetation-params.d.ts +90 -0
- package/dist/kinds/vegetation-presets.d.ts +20 -0
- package/dist/kinds/vegetation-skeleton.d.ts +20 -0
- package/dist/kinds/vegetation.d.ts +42 -0
- package/dist/kinds/vehicle.d.ts +42 -0
- package/dist/material/generator.d.ts +4 -0
- package/dist/material/index.d.ts +4 -0
- package/dist/material/index.js +38 -0
- package/dist/material/index.js.map +9 -0
- package/dist/material/paint/bond.d.ts +3 -0
- package/dist/material/paint/canvas.d.ts +32 -0
- package/dist/material/paint/cell.d.ts +4 -0
- package/dist/material/paint/cells-round.d.ts +5 -0
- package/dist/material/paint/cells.d.ts +7 -0
- package/dist/material/paint/compose.d.ts +5 -0
- package/dist/material/paint/concrete.d.ts +3 -0
- package/dist/material/paint/courses.d.ts +31 -0
- package/dist/material/paint/decode-png.d.ts +6 -0
- package/dist/material/paint/default-sheet.d.ts +2 -0
- package/dist/material/paint/foliage-broad.d.ts +5 -0
- package/dist/material/paint/foliage-common.d.ts +35 -0
- package/dist/material/paint/foliage-compound.d.ts +4 -0
- package/dist/material/paint/foliage-conifer.d.ts +5 -0
- package/dist/material/paint/foliage-raster.d.ts +26 -0
- package/dist/material/paint/foliage.d.ts +3 -0
- package/dist/material/paint/masks.d.ts +3 -0
- package/dist/material/paint/noise.d.ts +9 -0
- package/dist/material/paint/normal.d.ts +8 -0
- package/dist/material/paint/orm.d.ts +8 -0
- package/dist/material/paint/planks.d.ts +3 -0
- package/dist/material/paint/plates.d.ts +3 -0
- package/dist/material/paint/shapes.d.ts +8 -0
- package/dist/material/paint/slate.d.ts +3 -0
- package/dist/material/paint/stamp.d.ts +3 -0
- package/dist/material/paint/strip.d.ts +3 -0
- package/dist/material/paint/surface.d.ts +5 -0
- package/dist/material/paint/types.d.ts +35 -0
- package/dist/material/paint/validate.d.ts +3 -0
- package/dist/material/palette.d.ts +12 -0
- package/dist/material/shader-godot.d.ts +2 -0
- package/dist/material/shader-three.d.ts +2 -0
- package/dist/material/shader.d.ts +46 -0
- package/dist/material/trim-sheet.d.ts +22 -0
- package/dist/neural/generator.d.ts +25 -0
- package/dist/neural/images.d.ts +17 -0
- package/dist/neural/index.d.ts +2 -0
- package/dist/neural/index.js +14 -0
- package/dist/neural/index.js.map +9 -0
- package/dist/passes/bake-ao.d.ts +17 -0
- package/dist/passes/grime.d.ts +15 -0
- package/dist/passes/index.d.ts +6 -0
- package/dist/passes/index.js +22 -0
- package/dist/passes/index.js.map +9 -0
- package/dist/passes/livery.d.ts +19 -0
- package/dist/passes/optimize-cache.d.ts +15 -0
- package/dist/passes/optimize-weld.d.ts +15 -0
- package/dist/passes/optimize.d.ts +28 -0
- package/dist/passes/ray-grid.d.ts +23 -0
- package/dist/passes/weighted-normals.d.ts +8 -0
- package/dist/primitives/beam.d.ts +17 -0
- package/dist/primitives/bevel-box.d.ts +13 -0
- package/dist/primitives/box.d.ts +16 -0
- package/dist/primitives/cell.d.ts +20 -0
- package/dist/primitives/check.d.ts +12 -0
- package/dist/primitives/closed.d.ts +11 -0
- package/dist/primitives/erosion.d.ts +22 -0
- package/dist/primitives/font-5x7.d.ts +3 -0
- package/dist/primitives/heightfield.d.ts +16 -0
- package/dist/primitives/index.d.ts +23 -0
- package/dist/primitives/index.js +81 -0
- package/dist/primitives/index.js.map +9 -0
- package/dist/primitives/lathe-facets.d.ts +8 -0
- package/dist/primitives/lathe.d.ts +26 -0
- package/dist/primitives/lattice.d.ts +30 -0
- package/dist/primitives/loft.d.ts +15 -0
- package/dist/primitives/mc-table.d.ts +2 -0
- package/dist/primitives/member.d.ts +19 -0
- package/dist/primitives/noise.d.ts +34 -0
- package/dist/primitives/planar.d.ts +10 -0
- package/dist/primitives/prism.d.ts +13 -0
- package/dist/primitives/sculpt-edit.d.ts +56 -0
- package/dist/primitives/sculpt-tree.d.ts +23 -0
- package/dist/primitives/sculpt.d.ts +27 -0
- package/dist/primitives/sdf-grid.d.ts +17 -0
- package/dist/primitives/sdf-ops.d.ts +37 -0
- package/dist/primitives/sdf.d.ts +21 -0
- package/dist/primitives/strip-uv.d.ts +11 -0
- package/dist/primitives/surface-nets.d.ts +7 -0
- package/dist/primitives/sweep.d.ts +19 -0
- package/dist/primitives/terrain-color.d.ts +30 -0
- package/dist/primitives/terrain-grid.d.ts +36 -0
- package/dist/primitives/text-layout.d.ts +22 -0
- package/dist/primitives/text.d.ts +27 -0
- package/dist/primitives/tiled.d.ts +22 -0
- package/dist/primitives/transport.d.ts +17 -0
- package/dist/primitives/triangulate.d.ts +2 -0
- package/dist/primitives/value-noise.d.ts +10 -0
- package/dist/qa/checks.d.ts +11 -0
- package/dist/qa/clash.d.ts +2 -0
- package/dist/qa/floating.d.ts +5 -0
- package/dist/qa/gates.d.ts +12 -0
- package/dist/qa/geometry.d.ts +21 -0
- package/dist/qa/index.d.ts +12 -0
- package/dist/qa/index.js +78 -0
- package/dist/qa/index.js.map +9 -0
- package/dist/qa/inside.d.ts +12 -0
- package/dist/qa/inspect.d.ts +18 -0
- package/dist/qa/lods.d.ts +12 -0
- package/dist/qa/measures.d.ts +4 -0
- package/dist/qa/occlusion.d.ts +3 -0
- package/dist/qa/sanity.d.ts +7 -0
- package/dist/qa/types.d.ts +12 -0
- package/dist/render/beauty.d.ts +40 -0
- package/dist/render/camera.d.ts +33 -0
- package/dist/render/depth-map.d.ts +38 -0
- package/dist/render/font.d.ts +1 -0
- package/dist/render/ground.d.ts +13 -0
- package/dist/render/index.d.ts +10 -0
- package/dist/render/index.js +47 -0
- package/dist/render/index.js.map +9 -0
- package/dist/render/lighting.d.ts +20 -0
- package/dist/render/lod-strip.d.ts +5 -0
- package/dist/render/metrics.d.ts +37 -0
- package/dist/render/options.d.ts +28 -0
- package/dist/render/photo-match.d.ts +19 -0
- package/dist/render/raster.d.ts +25 -0
- package/dist/render/resolve.d.ts +11 -0
- package/dist/render/review-prompt.d.ts +2 -0
- package/dist/render/review-warnings.d.ts +34 -0
- package/dist/render/review.d.ts +24 -0
- package/dist/render/scene.d.ts +18 -0
- package/dist/render/shade.d.ts +22 -0
- package/dist/render/sheet.d.ts +15 -0
- package/dist/render/texture.d.ts +15 -0
- package/dist/render/thumbnail.d.ts +8 -0
- package/dist/render/vis-buffer.d.ts +18 -0
- package/dist/testing/assert.d.ts +21 -0
- package/dist/testing/compiled.d.ts +15 -0
- package/dist/testing/hash.d.ts +1 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.js +134 -0
- package/dist/testing/index.js.map +13 -0
- package/dist/testing/snapshot.d.ts +13 -0
- package/docs/README.md +52 -0
- package/docs/architecture/README.md +68 -0
- package/docs/architecture/adding-a-kind.md +44 -0
- package/docs/architecture/adding-a-primitive.md +49 -0
- package/docs/architecture/errors.md +47 -0
- package/docs/architecture/glb-production.md +214 -0
- package/docs/architecture/gltf-capabilities.md +80 -0
- package/docs/decisions/001-recipe-compiler-over-ai-meshes.md +27 -0
- package/docs/decisions/002-typescript-not-json.md +22 -0
- package/docs/decisions/003-shared-trim-sheet.md +21 -0
- package/docs/decisions/004-z-up-metres.md +21 -0
- package/docs/decisions/005-zero-runtime-deps.md +21 -0
- package/docs/decisions/006-single-package-subpath-exports.md +20 -0
- package/docs/decisions/007-cpu-contact-sheets.md +21 -0
- package/docs/decisions/008-surface-materials.md +21 -0
- package/docs/decisions/009-gltf-front-axis.md +21 -0
- package/docs/decisions/README.md +15 -0
- package/docs/idea/01-vision.md +117 -0
- package/docs/idea/02-dsl.md +343 -0
- package/docs/idea/03-ir.md +97 -0
- package/docs/idea/04-materials.md +114 -0
- package/docs/idea/05-agent-loop.md +141 -0
- package/docs/idea/06-qa.md +101 -0
- package/docs/idea/07-what-fits.md +45 -0
- package/docs/idea/08-neural-adapters.md +78 -0
- package/docs/idea/09-kinds.md +105 -0
- package/docs/landscape.md +49 -0
- package/docs/plans/roadmap.md +127 -0
- package/examples/build-with-bun.ts +41 -0
- package/llms.txt +47 -0
- package/package.json +99 -4
- package/recipes/README.md +38 -0
- package/recipes/asteroid/README.md +46 -0
- package/recipes/asteroid/asteroid.ts +336 -0
- package/recipes/boulders/README.md +28 -0
- package/recipes/boulders/boulders.ts +117 -0
- package/recipes/boxcar/README.md +46 -0
- package/recipes/boxcar/boxcar.ts +916 -0
- package/recipes/cargo_container_scifi/README.md +52 -0
- package/recipes/cargo_container_scifi/cargo_container_scifi.ts +461 -0
- package/recipes/dropship/README.md +84 -0
- package/recipes/dropship/dropship.ts +1144 -0
- package/recipes/eiffel_tower/README.md +110 -0
- package/recipes/eiffel_tower/eiffel_tower.ts +781 -0
- package/recipes/goblin_head/README.md +62 -0
- package/recipes/goblin_head/goblin_head.ts +36 -0
- package/recipes/human_head/README.md +64 -0
- package/recipes/human_head/human_head.ts +37 -0
- package/recipes/loco_440/README.md +32 -0
- package/recipes/loco_440/loco_440.ts +1404 -0
- package/recipes/material_swatches/README.md +21 -0
- package/recipes/material_swatches/material_swatches.ts +183 -0
- package/recipes/mountain_range/README.md +45 -0
- package/recipes/mountain_range/mountain_range.ts +128 -0
- package/recipes/oak/README.md +30 -0
- package/recipes/oak/oak.ts +19 -0
- package/recipes/orc_head/README.md +66 -0
- package/recipes/orc_head/orc_head.ts +39 -0
- package/recipes/palm/README.md +30 -0
- package/recipes/palm/palm.ts +19 -0
- package/recipes/pine/README.md +29 -0
- package/recipes/pine/pine.ts +19 -0
- package/recipes/signal_gantry/README.md +36 -0
- package/recipes/signal_gantry/signal_gantry.ts +522 -0
- package/recipes/station_halt/README.md +39 -0
- package/recipes/station_halt/station_halt.ts +722 -0
- package/recipes/t34/README.md +44 -0
- package/recipes/t34/t34.ts +1068 -0
- package/recipes/tiger_1/README.md +75 -0
- package/recipes/tiger_1/tiger_1.ts +1370 -0
- package/recipes/water_tower/README.md +40 -0
- package/recipes/water_tower/water_tower.ts +542 -0
- package/src/cli/args.ts +112 -0
- package/src/cli/bin.ts +7 -0
- package/src/cli/load.ts +17 -0
- package/src/cli/manifest.ts +89 -0
- package/src/cli/render-cmds.ts +66 -0
- package/src/cli/run.ts +168 -0
- package/src/core/asset.ts +128 -0
- package/src/core/definition.ts +149 -0
- package/src/core/errors.ts +45 -0
- package/src/core/family.ts +50 -0
- package/src/core/index.ts +66 -0
- package/src/core/mesh.ts +114 -0
- package/src/core/part.ts +130 -0
- package/src/core/png.ts +49 -0
- package/src/core/rng.ts +49 -0
- package/src/core/transform.ts +90 -0
- package/src/core/vec.ts +26 -0
- package/src/core/world.ts +80 -0
- package/src/export/bin-writer.ts +79 -0
- package/src/export/container.ts +35 -0
- package/src/export/glb.ts +200 -0
- package/src/export/index.ts +18 -0
- package/src/export/lights.ts +49 -0
- package/src/export/materials.ts +126 -0
- package/src/export/merge-pivots.ts +146 -0
- package/src/export/metadata.ts +59 -0
- package/src/export/motion.ts +70 -0
- package/src/export/optimize-parts.ts +80 -0
- package/src/export/primitive.ts +35 -0
- package/src/export/tangents.ts +75 -0
- package/src/export/textures.ts +88 -0
- package/src/export/version.ts +6 -0
- package/src/grammar/index.ts +4 -0
- package/src/grammar/split.ts +87 -0
- package/src/grammar/whyte.ts +20 -0
- package/src/index.ts +14 -0
- package/src/kinds/building.ts +153 -0
- package/src/kinds/faces.ts +138 -0
- package/src/kinds/head-armour.ts +151 -0
- package/src/kinds/head-beard.ts +133 -0
- package/src/kinds/head-bust.ts +221 -0
- package/src/kinds/head-extras.ts +150 -0
- package/src/kinds/head-face.ts +222 -0
- package/src/kinds/head-geom.ts +31 -0
- package/src/kinds/head-hair.ts +152 -0
- package/src/kinds/head-layout.ts +63 -0
- package/src/kinds/head-mesh.ts +157 -0
- package/src/kinds/head-params.ts +153 -0
- package/src/kinds/head-presets.ts +152 -0
- package/src/kinds/head-rim.ts +128 -0
- package/src/kinds/head.ts +171 -0
- package/src/kinds/hull-lines.ts +160 -0
- package/src/kinds/hull-skin.ts +83 -0
- package/src/kinds/hull.ts +209 -0
- package/src/kinds/index.ts +63 -0
- package/src/kinds/mass.ts +110 -0
- package/src/kinds/openings.ts +141 -0
- package/src/kinds/planned.ts +12 -0
- package/src/kinds/roof-chimney.ts +100 -0
- package/src/kinds/roof-shape.ts +230 -0
- package/src/kinds/roof.ts +250 -0
- package/src/kinds/vegetation-fronds.ts +126 -0
- package/src/kinds/vegetation-impostor.ts +118 -0
- package/src/kinds/vegetation-leaves.ts +168 -0
- package/src/kinds/vegetation-mesh.ts +174 -0
- package/src/kinds/vegetation-params.ts +147 -0
- package/src/kinds/vegetation-presets.ts +184 -0
- package/src/kinds/vegetation-skeleton.ts +168 -0
- package/src/kinds/vegetation.ts +199 -0
- package/src/kinds/vehicle.ts +144 -0
- package/src/material/generator.ts +56 -0
- package/src/material/index.ts +29 -0
- package/src/material/paint/bond.ts +60 -0
- package/src/material/paint/canvas.ts +91 -0
- package/src/material/paint/cell.ts +39 -0
- package/src/material/paint/cells-round.ts +119 -0
- package/src/material/paint/cells.ts +111 -0
- package/src/material/paint/compose.ts +53 -0
- package/src/material/paint/concrete.ts +62 -0
- package/src/material/paint/courses.ts +85 -0
- package/src/material/paint/decode-png.ts +100 -0
- package/src/material/paint/default-sheet.ts +61 -0
- package/src/material/paint/foliage-broad.ts +126 -0
- package/src/material/paint/foliage-common.ts +93 -0
- package/src/material/paint/foliage-compound.ts +135 -0
- package/src/material/paint/foliage-conifer.ts +143 -0
- package/src/material/paint/foliage-raster.ts +196 -0
- package/src/material/paint/foliage.ts +23 -0
- package/src/material/paint/masks.ts +44 -0
- package/src/material/paint/noise.ts +52 -0
- package/src/material/paint/normal.ts +52 -0
- package/src/material/paint/orm.ts +95 -0
- package/src/material/paint/planks.ts +56 -0
- package/src/material/paint/plates.ts +72 -0
- package/src/material/paint/shapes.ts +28 -0
- package/src/material/paint/slate.ts +52 -0
- package/src/material/paint/stamp.ts +40 -0
- package/src/material/paint/strip.ts +42 -0
- package/src/material/paint/surface.ts +60 -0
- package/src/material/paint/types.ts +51 -0
- package/src/material/paint/validate.ts +58 -0
- package/src/material/palette.ts +43 -0
- package/src/material/shader-godot.ts +77 -0
- package/src/material/shader-three.ts +103 -0
- package/src/material/shader.ts +100 -0
- package/src/material/trim-sheet.ts +100 -0
- package/src/neural/generator.ts +37 -0
- package/src/neural/images.ts +27 -0
- package/src/neural/index.ts +10 -0
- package/src/passes/bake-ao.ts +183 -0
- package/src/passes/grime.ts +37 -0
- package/src/passes/index.ts +8 -0
- package/src/passes/livery.ts +66 -0
- package/src/passes/optimize-cache.ts +175 -0
- package/src/passes/optimize-weld.ts +147 -0
- package/src/passes/optimize.ts +85 -0
- package/src/passes/ray-grid.ts +237 -0
- package/src/passes/weighted-normals.ts +125 -0
- package/src/primitives/beam.ts +60 -0
- package/src/primitives/bevel-box.ts +140 -0
- package/src/primitives/box.ts +90 -0
- package/src/primitives/cell.ts +115 -0
- package/src/primitives/check.ts +49 -0
- package/src/primitives/closed.ts +74 -0
- package/src/primitives/erosion.ts +183 -0
- package/src/primitives/font-5x7.ts +117 -0
- package/src/primitives/heightfield.ts +101 -0
- package/src/primitives/index.ts +56 -0
- package/src/primitives/lathe-facets.ts +45 -0
- package/src/primitives/lathe.ts +174 -0
- package/src/primitives/lattice.ts +131 -0
- package/src/primitives/loft.ts +174 -0
- package/src/primitives/mc-table.ts +41 -0
- package/src/primitives/member.ts +130 -0
- package/src/primitives/noise.ts +157 -0
- package/src/primitives/planar.ts +55 -0
- package/src/primitives/prism.ts +85 -0
- package/src/primitives/sculpt-edit.ts +212 -0
- package/src/primitives/sculpt-tree.ts +226 -0
- package/src/primitives/sculpt.ts +80 -0
- package/src/primitives/sdf-grid.ts +131 -0
- package/src/primitives/sdf-ops.ts +145 -0
- package/src/primitives/sdf.ts +83 -0
- package/src/primitives/strip-uv.ts +26 -0
- package/src/primitives/surface-nets.ts +161 -0
- package/src/primitives/sweep.ts +162 -0
- package/src/primitives/terrain-color.ts +85 -0
- package/src/primitives/terrain-grid.ts +137 -0
- package/src/primitives/text-layout.ts +85 -0
- package/src/primitives/text.ts +197 -0
- package/src/primitives/tiled.ts +93 -0
- package/src/primitives/transport.ts +85 -0
- package/src/primitives/triangulate.ts +42 -0
- package/src/primitives/value-noise.ts +62 -0
- package/src/qa/checks.ts +110 -0
- package/src/qa/clash.ts +177 -0
- package/src/qa/floating.ts +63 -0
- package/src/qa/gates.ts +126 -0
- package/src/qa/geometry.ts +187 -0
- package/src/qa/index.ts +28 -0
- package/src/qa/inside.ts +114 -0
- package/src/qa/inspect.ts +107 -0
- package/src/qa/lods.ts +97 -0
- package/src/qa/measures.ts +67 -0
- package/src/qa/occlusion.ts +166 -0
- package/src/qa/sanity.ts +137 -0
- package/src/qa/types.ts +17 -0
- package/src/render/beauty.ts +115 -0
- package/src/render/camera.ts +142 -0
- package/src/render/depth-map.ts +191 -0
- package/src/render/font.ts +76 -0
- package/src/render/ground.ts +87 -0
- package/src/render/index.ts +34 -0
- package/src/render/lighting.ts +95 -0
- package/src/render/lod-strip.ts +34 -0
- package/src/render/metrics.ts +147 -0
- package/src/render/options.ts +81 -0
- package/src/render/photo-match.ts +28 -0
- package/src/render/raster.ts +143 -0
- package/src/render/resolve.ts +109 -0
- package/src/render/review-prompt.ts +59 -0
- package/src/render/review-warnings.ts +92 -0
- package/src/render/review.ts +103 -0
- package/src/render/scene.ts +119 -0
- package/src/render/shade.ts +199 -0
- package/src/render/sheet.ts +88 -0
- package/src/render/texture.ts +97 -0
- package/src/render/thumbnail.ts +75 -0
- package/src/render/vis-buffer.ts +119 -0
- package/src/testing/assert.ts +115 -0
- package/src/testing/compiled.ts +31 -0
- package/src/testing/hash.ts +14 -0
- package/src/testing/index.ts +14 -0
- package/src/testing/snapshot.ts +37 -0
- package/src/types/gltf-validator.d.ts +13 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
**Each milestone ships something an agent can use end to end, gated by `bun run verify`. Scope ends at the GLB, textures and manifest; engines and game code are out of scope.** Ticked = on `main` with a test and, where it makes geometry, a recipe. Order within a milestone is a suggestion; order between milestones is a dependency. No dates promised.
|
|
4
|
+
|
|
5
|
+
Status as of 2026-11-07: **M0 done, M1 done but for recipes, M2 under way.** Every exported entry point that isn't ticked throws `T3D_NOT_IMPLEMENTED` with a pointer here.
|
|
6
|
+
|
|
7
|
+
## M0: Scaffold (0.x)
|
|
8
|
+
|
|
9
|
+
- [x] Mesh IR, `MeshBuilder`, seeded forkable RNG, vector math
|
|
10
|
+
- [x] `defineAsset` / `compile` / `ctx.part` / `ctx.group` / `ctx.use`, LODs by re-run
|
|
11
|
+
- [x] `real` dimensions + `sources` on `defineAsset`
|
|
12
|
+
- [x] Mesh transforms: `place`, `affine`, `frame`, `applyAffine`
|
|
13
|
+
- [x] `Ts23dError` with code + cause + fix
|
|
14
|
+
- [x] Split grammar (`split`, `parseSplit`, `layoutSplit`), Whyte notation
|
|
15
|
+
- [x] Trim-sheet layout, palettes, `hex()`
|
|
16
|
+
- [x] Primitives: `box`, `lathe`, `cylinder`
|
|
17
|
+
- [x] Kinds: `facade`, `setbacks`, `axle`, `trackRun`, `whyteAxles`, `propeller`
|
|
18
|
+
- [x] `grime` pass
|
|
19
|
+
- [x] QA: `triangle-budget`, `floating-parts` (surface contact), `clashes` (swept motion, `clearOf`), `part-names`, `proportions`, `measures` (`real.measures`)
|
|
20
|
+
- [x] GLB writer: one material, baked spin/slide clip, Z-up → Y-up root
|
|
21
|
+
- [x] `defineFamily`: variants and derived families
|
|
22
|
+
- [x] `ctx.emitter`: particle sources as named nodes
|
|
23
|
+
- [x] `sway` motion; `run` clip baked by `t3d build`, opt-in in `toGlb`
|
|
24
|
+
- [x] Recipe `checks` (`clear`, `noOverlap`, `touches`, `symmetric`) and `inspect`
|
|
25
|
+
- [x] `ctx.socket`; surfaces (opaque / cutout / glass / translucent, ≤ 4 materials)
|
|
26
|
+
- [x] CLI output: `out/<asset>/` with GLBs, sheet, manifest; `out/index.json`
|
|
27
|
+
- [x] `heightfield` terrain
|
|
28
|
+
- [x] GLB production pass: front axis +Z, seamless loops, `rest` + `run` clips, u16 indices, u16 colours, shared time accessors, glTF-Validator in tests ([glb-production.md](../architecture/glb-production.md) G1, G2, G4, G5, G10)
|
|
29
|
+
- [x] `mergeToPivots`: static geometry batched into its nearest pivot (default in `toGlb`; `keepParts` opts out)
|
|
30
|
+
- [x] CPU contact sheet: six views, metre grid, header dims
|
|
31
|
+
- [x] CLI: `t3d build | shot | list`, `--out`, `--json`
|
|
32
|
+
- [x] Repo gates: lint, typecheck, boundaries, determinism, filesize, tests, recipes (QA + double-build hash), build
|
|
33
|
+
- [x] Release flow: stamp → PR → tag → OIDC publish
|
|
34
|
+
- [x] Recipes: `tiger_1`, `t34` + `t34_1941` (family), `loco_440` (family; the Jupiter, drivers 1.626 m sourced), `material_swatches`
|
|
35
|
+
- [x] Asset gallery site (every recipe, compiled in the browser)
|
|
36
|
+
- [ ] First npm publish (bootstrap, [PUBLISHING.md](../../PUBLISHING.md))
|
|
37
|
+
|
|
38
|
+
## M1: Architecture primitives
|
|
39
|
+
|
|
40
|
+
- [x] `prism`: extrude a 2D profile in the `xy` / `xz` / `yz` plane
|
|
41
|
+
- [x] `beam`: member between two points, square or round
|
|
42
|
+
- [x] `planar`: flat polygon in 3D
|
|
43
|
+
- [x] `triangulate`: ear clipping
|
|
44
|
+
- [x] `tiled`: quad tiling a strip at true scale
|
|
45
|
+
- [x] `cell`: quad mapped to a decal cell (with `inset` reveals)
|
|
46
|
+
- [x] `roof`: hip, gable, pyramid, mansard, gambrel, shed; `opening` window/door kit, `mass` true-scale masonry
|
|
47
|
+
- [ ] Opt-out for genuinely floating parts (aircraft in flight, hanging signs)
|
|
48
|
+
- [ ] Cross-machine determinism check; a `t3d build` flag for users' recipes
|
|
49
|
+
- [x] Recipe: `eiffel_tower` (188,016 / 21,860 / 1,062 triangles, 1 draw call; profile from Weidman & Pinelis 2004 and Eiffel's 1887 drawing)
|
|
50
|
+
- [x] `lattice` truss primitive (Warren / Pratt / Howe / X)
|
|
51
|
+
- [ ] Recipes: a terrace street, a station, an Art Deco tower, townhouse, gas lamp (landing)
|
|
52
|
+
|
|
53
|
+
## Recipe-agent backlog (unscheduled)
|
|
54
|
+
|
|
55
|
+
- [ ] `orbit` motion + `phase` for side rods and quartering
|
|
56
|
+
- [x] Sector sweep for `sway` clashes; `oneWay` slide / sway
|
|
57
|
+
- [ ] `recipes/_lib/` shared helpers: `trackLoop`, `roadWheel`, decal font with Cyrillic
|
|
58
|
+
- [ ] `subdivide(mesh, maxEdge)` pass for vertex-colour camo
|
|
59
|
+
- [ ] Exact-match option for measure `parts` (today: prefix match)
|
|
60
|
+
- [ ] TriangleGrid filling only the cells a triangle crosses
|
|
61
|
+
|
|
62
|
+
## M2: High definition, cheap to draw
|
|
63
|
+
|
|
64
|
+
Materials:
|
|
65
|
+
- [x] `paintTrimSheet`: procedural albedo / normal / ORM; strips bond, planks, plates, noise, flat, slate, concrete, glass; 6 decal + 11 foliage cells
|
|
66
|
+
- [x] Sheet in the GLB: embedded or shared external PNGs (`--sheet`, `--sheet-size`)
|
|
67
|
+
- [ ] KTX2 profile; fix mip bleed between strips; per-face V mapping on `box`
|
|
68
|
+
- [ ] Image-stamped cells (decals from any `ImageSource`)
|
|
69
|
+
|
|
70
|
+
Optimisation and GLB production (gap ids from [glb-production.md](../architecture/glb-production.md)):
|
|
71
|
+
- [x] `optimize(mesh)`: vertex weld + vertex-cache reorder, reports ACMR (default in export)
|
|
72
|
+
- [ ] Gate: ACMR ceiling
|
|
73
|
+
- [ ] Opt-in `web` profile: `KHR_mesh_quantization` + `EXT_meshopt_compression` (G14). Default stays core glTF: Godot refuses required extensions
|
|
74
|
+
- [ ] `MSFT_lod` single-file LOD set + screen-coverage switch hints (G11)
|
|
75
|
+
- [ ] Placeholder pivots at LOD2 so engine-bound names exist in every LOD (G3)
|
|
76
|
+
- [ ] `engine-names` gate against Godot suffix hints like `_wheel`, `-col` (G6)
|
|
77
|
+
- [ ] Clip naming Godot loops (`*_loop`) (G7)
|
|
78
|
+
- [x] Asset metadata: generator version, copyright, XMP provenance (G8)
|
|
79
|
+
- [ ] Mesh dedupe: identical geometry shares one mesh (G9)
|
|
80
|
+
- [x] Emissive surface (`KHR_materials_emissive_strength`) for lit windows (G13 remainder)
|
|
81
|
+
|
|
82
|
+
Shape:
|
|
83
|
+
- [x] `sweep`: parallel-transport frames, taper, twist
|
|
84
|
+
- [x] `loft` over `rings`, `ringXY` with wobble
|
|
85
|
+
- [x] `hull` (vessel kind) from length / beam / draft / freeboard
|
|
86
|
+
- [ ] Lofted vehicle bodies, fuselages, wings
|
|
87
|
+
|
|
88
|
+
Checking:
|
|
89
|
+
- [ ] `photoMatch(asset, { photo, camera })`: photo · model · overlay in one PNG + silhouette IoU
|
|
90
|
+
- [ ] `silhouetteIoU` gate on top of it
|
|
91
|
+
- [ ] Gates: manifold + outward normals, texel density
|
|
92
|
+
|
|
93
|
+
Exit bar: a 4-4-0 with tender matching [`docs/reference/loco-photo-match.png`](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/reference/loco-photo-match.png) (predecessor output: ~16k triangles, 17 named nodes, one embedded trim-sheet material, baked `run`). Recipes: that loco, a harbour tug, a biplane.
|
|
94
|
+
|
|
95
|
+
## M3: Vegetation and engine import adapters
|
|
96
|
+
|
|
97
|
+
- [x] `tree`: Weber–Penn skeleton, leaf cards; presets oak / pine / palm / birch / willow; `trees` family; `treeReal`
|
|
98
|
+
- [x] Recipes: `oak`, `pine`, `palm`
|
|
99
|
+
- [ ] Per-vertex wind weights (crown `sway` today)
|
|
100
|
+
- [ ] LOD2 impostors as crossed billboards from the foliage cells
|
|
101
|
+
- [ ] Species presets as data
|
|
102
|
+
- [x] `threeMaterialSource` (TSL) and `godotShaderSource`: wind, window glow, wear
|
|
103
|
+
- [ ] Engine import adapters as data, not runtime: import settings for Unity (glTFast), Godot, Unreal; mapping extras + shader hints onto each engine's material
|
|
104
|
+
- [ ] Engine collision naming: `ctx.collider` → Godot `-convcolonly`, Unreal `UCX_`, generic extras (G12)
|
|
105
|
+
- [ ] Motion baked into vertex attributes (pivot + spin axis per vertex): a shader animates every wheel in one draw call
|
|
106
|
+
- [ ] Recipes: a park, an orchard
|
|
107
|
+
|
|
108
|
+
## M4: Creatures
|
|
109
|
+
|
|
110
|
+
- [x] `sdf`: surface nets or marching cubes over a signed-distance field; `sculpt` edit lists (Dreams-style)
|
|
111
|
+
- [ ] `creature`: SDF flesh over biped / quadruped / bird skeletons, bones as named parts
|
|
112
|
+
- [ ] Recipes: stylised critters, rocks
|
|
113
|
+
|
|
114
|
+
## M5: Neural adapters and import
|
|
115
|
+
|
|
116
|
+
- [ ] `localGenerator`: HTTP adapter for a local TRELLIS.2 / Hunyuan3D 2.1 / SF3D server
|
|
117
|
+
- [ ] Content-hash cache under `.ts23d/neural/`; a CI cache miss is an error naming the regenerate command
|
|
118
|
+
- [ ] `importGlb`: any GLB as a part, fitted and recoloured onto the trim sheet
|
|
119
|
+
- [ ] `kubeezImages`: kubeez.com image source for references, decals, texture sources
|
|
120
|
+
- [ ] Recipe: a code-built cart drawn by a generated horse
|
|
121
|
+
|
|
122
|
+
## M6: Reverse direction and reach
|
|
123
|
+
|
|
124
|
+
- [ ] Camera solve for `photoMatch` from ≥ 4 marked correspondences
|
|
125
|
+
- [ ] Reverse direction: a VLM proposes recipe params from photos, scored by silhouette IoU, best kept
|
|
126
|
+
- [ ] MCP server: `build`, `shot`, `list` as tools, PNG inline
|
|
127
|
+
- [ ] Playground: edit a recipe in the browser, see GLB + contact sheet live
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Build assets without the CLI: the library is plain TypeScript, so a script is all you need.
|
|
2
|
+
// Run: bun examples/build-with-bun.ts [out-dir] (Node ≥ 22 works too, against the built dist/)
|
|
3
|
+
// Pick exactly what you want — which LODs, textures or not, QA or not, sheets or not.
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
compile,
|
|
7
|
+
contactSheet,
|
|
8
|
+
DEFAULT_SHEET,
|
|
9
|
+
type Lod,
|
|
10
|
+
paintTrimSheet,
|
|
11
|
+
runQa,
|
|
12
|
+
toGlb,
|
|
13
|
+
} from '@developerz.ai/ts23d';
|
|
14
|
+
import { tiger_1 } from '../recipes/tiger_1/tiger_1.ts';
|
|
15
|
+
|
|
16
|
+
const out = process.argv[2] ?? 'out/example';
|
|
17
|
+
const asset = tiger_1;
|
|
18
|
+
const lods: Lod[] = [0, 2]; // near + far only — your call
|
|
19
|
+
|
|
20
|
+
// Textures are optional: paint once, embed (or pass { external: true } and ship the PNGs).
|
|
21
|
+
const sheet = paintTrimSheet({ ...DEFAULT_SHEET, size: 512 });
|
|
22
|
+
|
|
23
|
+
for (const lod of lods) {
|
|
24
|
+
const compiled = compile(asset, { lod });
|
|
25
|
+
|
|
26
|
+
// QA is a function too: gate however your pipeline wants.
|
|
27
|
+
const findings = runQa(compiled);
|
|
28
|
+
if (findings.length > 0) {
|
|
29
|
+
for (const f of findings) console.error(`LOD${lod} ${f.gate}: ${f.message}\n fix: ${f.fix}`);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
await Bun.write(
|
|
34
|
+
`${out}/${asset.name}.lod${lod}.glb`,
|
|
35
|
+
toGlb(compiled, { sheet, animations: true }),
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// The six-view contact sheet, for you or your agent to look at.
|
|
40
|
+
await Bun.write(`${out}/${asset.name}.png`, contactSheet(compile(asset, { lod: 0 })));
|
|
41
|
+
console.log(`✔ ${asset.name}: LOD ${lods.join(', ')} + contact sheet → ${out}/`);
|
package/llms.txt
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# ts23d
|
|
2
|
+
|
|
3
|
+
> @developerz.ai/ts23d — a free, deterministic 3D asset generator driven by coding agents. Assets are TypeScript modules (never JSON) built with a DSL: `defineAsset({ name, kind, real, sources, budget, build(ctx) })`, where `build` adds named, pivoted, animatable parts from primitives (`box`, `lathe`, `cylinder`, `prism`, `beam`, `planar`), places detail with `place`/`merge`, composes other assets with `ctx.use`, and gates detail on `ctx.lod`. It compiles to glTF/GLB for any engine (Unity, Unreal, Godot, three.js, Babylon) — ts23d generates assets only, the engine is yours — (3 LODs, one shared trim-sheet material, baked motion), fails a QA gate on floating parts, budget overruns and wrong real-world proportions, and renders a zero-GPU six-view contact-sheet PNG so a vision-capable agent can check its own work. Bun only, zero runtime dependencies, MIT. Status 0.x: stubs throw T3D_NOT_IMPLEMENTED with the roadmap slice that builds them.
|
|
4
|
+
|
|
5
|
+
## Offline (inside your project)
|
|
6
|
+
The npm package ships every doc, skill and example, versioned with the code — read them without internet:
|
|
7
|
+
- `node_modules/@developerz.ai/ts23d/AGENTS.md` — rules and the loop
|
|
8
|
+
- `node_modules/@developerz.ai/ts23d/docs/` — DSL, IR, materials, agent loop, QA, kinds, decisions, roadmap
|
|
9
|
+
- `node_modules/@developerz.ai/ts23d/recipes/<name>/` — idiomatic recipes, each with its research dossier (`README.md`) and committed hero + contact sheet (`out/`)
|
|
10
|
+
- `node_modules/@developerz.ai/ts23d/.claude/skills/author-recipe/SKILL.md` — copy into your `.claude/skills/`
|
|
11
|
+
|
|
12
|
+
## The workflow
|
|
13
|
+
The human names a thing ("Tiger I, mid-production 1943"). The agent researches specs and real photos into `recipes/<name>/README.md` (every number sourced), writes `recipes/<name>.ts` with `sources` + `real.measures` from that dossier, compiles until QA PASS (budget, surface contact, clashes, proportions ±5%, measures ±2%), renders the six-view contact sheet, looks at it, adds LOD-gated detail, and iterates.
|
|
14
|
+
|
|
15
|
+
## Programmatic (no CLI)
|
|
16
|
+
`t3d` is optional: `compile` → `runQa` → `toGlb` / `contactSheet` / `paintTrimSheet` are plain functions returning bytes. Runnable script: `examples/build-with-bun.ts` (also in the npm package).
|
|
17
|
+
|
|
18
|
+
## Start
|
|
19
|
+
- [README](https://raw.githubusercontent.com/developerz-ai/ts23d/main/README.md): what it is, quickstart, the agent loop
|
|
20
|
+
- [AGENTS.md](https://raw.githubusercontent.com/developerz-ai/ts23d/main/AGENTS.md): rules for agents using or changing the library
|
|
21
|
+
- [CLAUDE.md](https://raw.githubusercontent.com/developerz-ai/ts23d/main/CLAUDE.md): commands, axioms, module tiers, CI
|
|
22
|
+
- [Author-recipe skill](https://raw.githubusercontent.com/developerz-ai/ts23d/main/.claude/skills/author-recipe/SKILL.md): the closed loop, step by step, with a skeleton
|
|
23
|
+
|
|
24
|
+
## DSL and concepts
|
|
25
|
+
- [The DSL](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/idea/02-dsl.md): defineAsset, ctx API, composition, determinism
|
|
26
|
+
- [IR, units, axes](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/idea/03-ir.md)
|
|
27
|
+
- [Materials](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/idea/04-materials.md): trim sheet, palettes, generator, image sources (kubeez.com)
|
|
28
|
+
- [Agent loop](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/idea/05-agent-loop.md): contact sheet layout, iteration
|
|
29
|
+
- [QA gates](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/idea/06-qa.md)
|
|
30
|
+
- [What fits](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/idea/07-what-fits.md): hard-surface vs organic; sculpted stylised characters and terrain today; realistic creatures via local-GPU adapters
|
|
31
|
+
- [Kinds](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/idea/09-kinds.md): buildings, vehicles, vessels, vegetation, scenes
|
|
32
|
+
|
|
33
|
+
## Reference
|
|
34
|
+
- [Public API barrel](https://raw.githubusercontent.com/developerz-ai/ts23d/main/src/index.ts)
|
|
35
|
+
- [Error codes](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/architecture/errors.md): every T3D_* with cause and fix
|
|
36
|
+
- [Module tiers](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/architecture/README.md)
|
|
37
|
+
- [glTF capabilities](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/architecture/gltf-capabilities.md): every extension, skins, physics drafts; what ts23d writes
|
|
38
|
+
- [Roadmap](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/plans/roadmap.md): shipped vs planned
|
|
39
|
+
- [Decisions](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/decisions/): why TS not JSON, why one material, why CPU renders
|
|
40
|
+
- [Example recipe: Tiger I](https://raw.githubusercontent.com/developerz-ai/ts23d/main/recipes/tiger_1/tiger_1.ts)
|
|
41
|
+
- [Reference dossier template](https://raw.githubusercontent.com/developerz-ai/ts23d/main/recipes/README.md)
|
|
42
|
+
|
|
43
|
+
## Optional
|
|
44
|
+
- [Landscape](https://raw.githubusercontent.com/developerz-ai/ts23d/main/docs/landscape.md): neutral overview of AI 3D generators and where each approach fits
|
|
45
|
+
- [Gallery](https://developerz-ai.github.io/ts23d/): every asset compiled live in the browser — orbit, LODs, textures, download GLB
|
|
46
|
+
- kubeez.com — recommended for reference/concept images and texture sources
|
|
47
|
+
- developerz.ai — 100% AI-managed software engineering; builds and maintains this project
|
package/package.json
CHANGED
|
@@ -1,6 +1,101 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@developerz.ai/ts23d",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Free, deterministic 3D asset generation in TypeScript — a DSL your coding agent writes, compiled to game-ready glTF.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "developerz.ai",
|
|
8
|
+
"homepage": "https://developerz-ai.github.io/ts23d/",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/developerz-ai/ts23d.git"
|
|
12
|
+
},
|
|
13
|
+
"bugs": "https://github.com/developerz-ai/ts23d/issues",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"3d",
|
|
16
|
+
"procedural",
|
|
17
|
+
"gltf",
|
|
18
|
+
"glb",
|
|
19
|
+
"dsl",
|
|
20
|
+
"game-assets",
|
|
21
|
+
"ai-agents",
|
|
22
|
+
"claude-code",
|
|
23
|
+
"codex",
|
|
24
|
+
"three"
|
|
25
|
+
],
|
|
26
|
+
"sideEffects": false,
|
|
27
|
+
"exports": {
|
|
28
|
+
".": {
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"bun": "./src/index.ts",
|
|
31
|
+
"default": "./dist/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./*": {
|
|
34
|
+
"types": "./dist/*/index.d.ts",
|
|
35
|
+
"bun": "./src/*/index.ts",
|
|
36
|
+
"default": "./dist/*/index.js"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"bin": {
|
|
40
|
+
"t3d": "./dist/cli/bin.js"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"src",
|
|
45
|
+
"!src/**/*.test.ts",
|
|
46
|
+
"docs",
|
|
47
|
+
"!docs/reference/*.png",
|
|
48
|
+
"recipes",
|
|
49
|
+
"!recipes/*/out",
|
|
50
|
+
"!docs/media",
|
|
51
|
+
"examples",
|
|
52
|
+
"README.md",
|
|
53
|
+
"CLAUDE.md",
|
|
54
|
+
"llms.txt",
|
|
55
|
+
"CHANGELOG.md",
|
|
56
|
+
"LICENSE",
|
|
57
|
+
".claude/skills",
|
|
58
|
+
".claude/agents",
|
|
59
|
+
".claude/commands",
|
|
60
|
+
"!examples/**/*.test.ts"
|
|
61
|
+
],
|
|
62
|
+
"workspaces": [
|
|
63
|
+
"apps/*"
|
|
64
|
+
],
|
|
65
|
+
"scripts": {
|
|
66
|
+
"setup": "bun run scripts/setup.ts",
|
|
67
|
+
"verify": "bun run scripts/verify.ts",
|
|
68
|
+
"lint": "biome check .",
|
|
69
|
+
"lint:fix": "biome check --write .",
|
|
70
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
71
|
+
"test": "bun test src scripts examples",
|
|
72
|
+
"build": "bun run scripts/build.ts",
|
|
73
|
+
"boundaries": "bun run scripts/boundaries.ts",
|
|
74
|
+
"determinism": "bun run scripts/determinism.ts",
|
|
75
|
+
"filesize": "bun run scripts/filesize.ts",
|
|
76
|
+
"recipes": "bun run scripts/recipes.ts",
|
|
77
|
+
"shots": "bun run scripts/shots.ts",
|
|
78
|
+
"release": "bun run scripts/release.ts",
|
|
79
|
+
"t3d": "bun run src/cli/bin.ts",
|
|
80
|
+
"site:dev": "bun run --filter @ts23d/site dev",
|
|
81
|
+
"site:build": "bun run --filter @ts23d/site build",
|
|
82
|
+
"site:shots": "bun run scripts/site-shots.ts",
|
|
83
|
+
"bench": "bun run scripts/bench.ts"
|
|
84
|
+
},
|
|
85
|
+
"publishConfig": {
|
|
86
|
+
"access": "public",
|
|
87
|
+
"provenance": true
|
|
88
|
+
},
|
|
89
|
+
"devDependencies": {
|
|
90
|
+
"@biomejs/biome": "2.6.3",
|
|
91
|
+
"@types/bun": "1.4.4",
|
|
92
|
+
"gltf-validator": "2.0.0-dev.3.10",
|
|
93
|
+
"lefthook": "2.2.2",
|
|
94
|
+
"typescript": "7.0.2"
|
|
95
|
+
},
|
|
96
|
+
"trustedDependencies": [],
|
|
97
|
+
"engines": {
|
|
98
|
+
"bun": ">=1.4.4",
|
|
99
|
+
"node": ">=22"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# recipes/ — one folder per asset
|
|
2
|
+
|
|
3
|
+
Each asset is a folder: `recipes/<name>/<name>.ts` (the recipe), `recipes/<name>/README.md` (this dossier)
|
|
4
|
+
and `recipes/<name>/out/<asset>/` (hero.png, sheet.png, manifest.json — committed, refreshed by
|
|
5
|
+
`bun run shots`, checked by the recipes gate). The dossier is `recipes/<name>/README.md`. The agent writes it BEFORE the recipe; the recipe's
|
|
6
|
+
`sources` and `real.measures` are copied from it, and the `measures` gate proves the model matches.
|
|
7
|
+
Photos are linked, never committed (licences); downloads go to `tmp/refs/<name>/` (gitignored).
|
|
8
|
+
|
|
9
|
+
## Template
|
|
10
|
+
|
|
11
|
+
```md
|
|
12
|
+
# <Name> — <variant / year>
|
|
13
|
+
|
|
14
|
+
## Identity
|
|
15
|
+
Variant chosen and why (one line). What makes it THIS object: the 3–5 signature features.
|
|
16
|
+
|
|
17
|
+
## Specs
|
|
18
|
+
| Dimension | Value (m) | Source |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| overall length | 6.316 | <url> |
|
|
21
|
+
| width | 3.56 | <url> |
|
|
22
|
+
| height | 3.00 | <url> |
|
|
23
|
+
| road wheel diameter | 0.80 | <url> |
|
|
24
|
+
|
|
25
|
+
## Photos (by view)
|
|
26
|
+
| View | URL | Notes |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| side elevation | <url> | scale reference: wheel diameter |
|
|
29
|
+
| front 3/4 | <url> | |
|
|
30
|
+
| top | <url> | |
|
|
31
|
+
| detail: <thing> | <url> | |
|
|
32
|
+
|
|
33
|
+
## Parts the engine needs
|
|
34
|
+
`turret` (yaw), `gun` (pitch), `road_wheel_*` (spin) …
|
|
35
|
+
|
|
36
|
+
## Open questions
|
|
37
|
+
What the sources disagree on, and which value was chosen.
|
|
38
|
+
```
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Mineable asteroid (`asteroid`, `asteroid_b`, `asteroid_c`)
|
|
2
|
+
|
|
3
|
+
## Identity
|
|
4
|
+
A ~10 m rubble-pile asteroid for a mining game, in three seeded variants: `asteroid` (seed 1,
|
|
5
|
+
5.0 × 3.8 × 3.0 m radii), `asteroid_b` (seed 2, rounder) and `asteroid_c` (seed 3, an elongated
|
|
6
|
+
shard). The rocks are original and procedural.
|
|
7
|
+
|
|
8
|
+
Signature features: a lumpy mass chipped by flat fracture planes; impact craters with raised rims
|
|
9
|
+
and dark floors; very dark carbonaceous rock with lighter dust on up-facing slopes; thin metallic
|
|
10
|
+
ore veins; glowing teal crystal clusters at the mining points.
|
|
11
|
+
|
|
12
|
+
## References
|
|
13
|
+
| Fact | Value | Source |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| C-type (carbonaceous) albedo | 0.03–0.09, ~75 % of asteroids, very dark | https://starlust.org/what-are-the-different-types-of-asteroids |
|
|
16
|
+
| S-type (silicate) albedo | 0.10–0.22 | same |
|
|
17
|
+
| M-type (metallic, nickel-iron) | bright, metallic, the mining target | https://www.esa.int/Science_Exploration/Space_Science/Rosetta/Debris_of_the_Solar_System_Asteroids |
|
|
18
|
+
|
|
19
|
+
The base rock (`#3b3632`/`#4f4841`) is C-type dark. The ore veins (`#b78a45`) stand in for
|
|
20
|
+
M-type metal. The glowing crystals (`#3fe0d0`) are a game convention, not science.
|
|
21
|
+
|
|
22
|
+
## How it is built
|
|
23
|
+
`sdf({ field, resolution: ctx.pick([0.17, 0.38, 0.95]) })` over one field:
|
|
24
|
+
1. An ellipsoid core plus three smooth-unioned ellipsoid lobes.
|
|
25
|
+
2. `valueNoise` displacement: 0.65 m at a 2.8 m feature size, plus 0.12 m pitting at 0.8 m.
|
|
26
|
+
3. Twelve fracture half-spaces, smooth-max'd (k = 0.12 m), which give the angular facets.
|
|
27
|
+
4. Nine craters. Each is a radial rim bump that displaces the surface, then a smooth-subtracted
|
|
28
|
+
bowl sphere. All shape draws come from `ctx.rng.fork('shape')`, so the shape is identical at
|
|
29
|
+
every LOD.
|
|
30
|
+
5. Colour per vertex: blended tone noise, dust where n·z > 0.55, ore veins where |noise| < 0.05
|
|
31
|
+
(teal near crystals), dark crater floors.
|
|
32
|
+
6. `bakeAo` (16 / 8 rays at LOD0 / LOD1) for crevice darkening.
|
|
33
|
+
|
|
34
|
+
The bottom is clipped flat at z = 0 by the SDF bounds, so the rock rests on the ground (or in a
|
|
35
|
+
field). The core sits below every variant's z radius, so the clip always happens.
|
|
36
|
+
|
|
37
|
+
## Parts the engine needs
|
|
38
|
+
`rock` (the mass; also usable as a collider at LOD2), `ore_crystals` (glow), interact sockets
|
|
39
|
+
`mine_point_0…3` (at each cluster, facing into the rock, `data: { resource, yield }`), emitter
|
|
40
|
+
`dust` (`event`, for mining debris).
|
|
41
|
+
|
|
42
|
+
## Open questions
|
|
43
|
+
- `real` is not declared: the size of a procedural rock is a design choice, not a spec, and the
|
|
44
|
+
noise moves its extents by ±10 %. The budget is measured per seed instead.
|
|
45
|
+
- No in-library "surface point along a ray" helper exists, so the recipe bisects its own field to
|
|
46
|
+
seat the crystals. A `sdfSurface(field, from, dir)` helper would make this reusable.
|