@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,9 @@
|
|
|
1
|
+
import { type Mesh, type Rng } from '../core/index.js';
|
|
2
|
+
import type { TreeParams } from './vegetation-params.js';
|
|
3
|
+
import type { Stem } from './vegetation-skeleton.js';
|
|
4
|
+
export interface Impostor {
|
|
5
|
+
readonly trunk: Mesh;
|
|
6
|
+
readonly leaves: Mesh;
|
|
7
|
+
}
|
|
8
|
+
export declare function blob(stems: readonly Stem[], p: TreeParams, rng: Rng): Impostor;
|
|
9
|
+
export declare function frondCards(stems: readonly Stem[], p: TreeParams, level: number): Impostor;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Mesh, type Rng, type Vec3 } from '../core/index.js';
|
|
2
|
+
import { type LeafParams } from './vegetation-params.js';
|
|
3
|
+
import type { Stem } from './vegetation-skeleton.js';
|
|
4
|
+
/** Crown occlusion: cards deep inside / low in the crown are darker. */
|
|
5
|
+
export interface CrownShade {
|
|
6
|
+
readonly centre: Vec3;
|
|
7
|
+
readonly radius: number;
|
|
8
|
+
readonly zMin: number;
|
|
9
|
+
readonly zMax: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function crownShade(stems: readonly Stem[], level: number): CrownShade;
|
|
12
|
+
/** LOD0: `perStem` cards along the outer 70% of every terminal stem, rooted on a ring vertex. */
|
|
13
|
+
export declare function leafCards(stems: readonly Stem[], level: number, ringSegments: number, leaf: LeafParams, shade: CrownShade, rng: Rng): Mesh;
|
|
14
|
+
/** LOD1: one cluster card per (unemitted) twig, rooted where the twig would leave its parent. */
|
|
15
|
+
export declare function clusterCards(stems: readonly Stem[], level: number, leaf: LeafParams, shade: CrownShade, rng: Rng): Mesh;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Mesh, type Rng, type Vec3 } from '../core/index.js';
|
|
2
|
+
import type { TreeParams } from './vegetation-params.js';
|
|
3
|
+
import type { Stem } from './vegetation-skeleton.js';
|
|
4
|
+
export declare const radialSegments: (level: number, lod: number) => number;
|
|
5
|
+
/** Every `step`-th path point (always keeping both ends): LOD1 halves path resolution. */
|
|
6
|
+
export declare function coarsen(st: Stem, step: number): {
|
|
7
|
+
pts: Vec3[];
|
|
8
|
+
radii: number[];
|
|
9
|
+
};
|
|
10
|
+
/** All stems with level in [lo, hi], merged. */
|
|
11
|
+
export declare function stemsMesh(stems: readonly Stem[], lo: number, hi: number, lod: number, color: Vec3): Mesh;
|
|
12
|
+
/** Bark colour by height (bark → barkTop) with seeded marks; rewrites the mesh's colours. */
|
|
13
|
+
export declare function barkTint(m: Mesh, p: TreeParams, top: number, rng: Rng): Mesh;
|
|
14
|
+
/** The trunk, radius scaled by `radiusScale` (the fit's 1/sy keeps DBH exact after scaling). */
|
|
15
|
+
export declare function trunkMesh(trunk: Stem, p: TreeParams, lod: number, radiusScale: number, rng: Rng): Mesh;
|
|
16
|
+
/** Buttressed flare: `p.roots` lobes, wide at the ground, melting into the trunk by ~2·DBH. */
|
|
17
|
+
export declare function rootsMesh(trunk: Stem, p: TreeParams, lod: number, radiusScale: number, rng: Rng): Mesh;
|
|
18
|
+
/** Per-axis factors that bring the union of `meshes` to `target` = [X, Y, Z] spans. */
|
|
19
|
+
export declare function fitFactors(meshes: readonly Mesh[], target: Vec3): Vec3;
|
|
20
|
+
/** Non-uniform scale about the origin; normals by the inverse transpose, renormalised. */
|
|
21
|
+
export declare function scaleMesh(m: Mesh, s: Vec3): Mesh;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { Vec2, Vec3 } from '../core/index.js';
|
|
2
|
+
/** Crown envelope: how level-1 branch length varies up the trunk (Weber–Penn `Shape`). */
|
|
3
|
+
export type CrownShape = 'conical' | 'spherical' | 'hemispherical' | 'cylindrical' | 'tapered' | 'flame';
|
|
4
|
+
/** One recursion level. Level 0 is the trunk; levels 1–3 are branches, sub-branches, twigs. */
|
|
5
|
+
export interface BranchLevel {
|
|
6
|
+
/** Children per parent (level 1: along the trunk). Ignored for level 0. */
|
|
7
|
+
readonly branches: number;
|
|
8
|
+
/** Level 0: fraction of tree height. Level ≥ 1: fraction of the parent's length. */
|
|
9
|
+
readonly length: number;
|
|
10
|
+
/** ± relative random length variation. */
|
|
11
|
+
readonly lengthVar?: number;
|
|
12
|
+
/** Degrees between child and parent axis at the attachment. */
|
|
13
|
+
readonly downAngle: number;
|
|
14
|
+
/** Added to downAngle from the first child (bottom) to the last (top) of the parent's zone. */
|
|
15
|
+
readonly downAngleV?: number;
|
|
16
|
+
/** Phyllotaxis step about the parent, degrees (golden angle 137.5° by default). */
|
|
17
|
+
readonly rotate?: number;
|
|
18
|
+
/** Total bend over the stem, degrees: + towards the sky, − towards the ground. Trunk: + bends
|
|
19
|
+
* back against `lean` (towards −X). */
|
|
20
|
+
readonly curve?: number;
|
|
21
|
+
/** If set, the second half bends by this instead (S-curves, weeping tips). */
|
|
22
|
+
readonly curveBack?: number;
|
|
23
|
+
/** Seeded wobble per path segment, ± degrees. */
|
|
24
|
+
readonly curveVar?: number;
|
|
25
|
+
/** Where children start along this stem's parent, as a fraction (level 1 uses `baseSize`). */
|
|
26
|
+
readonly start?: number;
|
|
27
|
+
/** Path segments at LOD0 (LOD1 halves them). */
|
|
28
|
+
readonly segments: number;
|
|
29
|
+
}
|
|
30
|
+
export type LeafShape = 'oval' | 'lobed' | 'tuft' | 'strand' | 'frond';
|
|
31
|
+
/** Card outlines: u along the card (0 = stem end), v across (±0.5). */
|
|
32
|
+
export declare const OUTLINES: Record<Exclude<LeafShape, 'frond'>, readonly Vec2[]>;
|
|
33
|
+
export interface LeafParams {
|
|
34
|
+
readonly shape: LeafShape;
|
|
35
|
+
/** Card length at LOD0, metres. Cards stand for a cluster of leaves, not one leaf. */
|
|
36
|
+
readonly size: number;
|
|
37
|
+
/** Card width as a fraction of its length (fronds: leaflet length as a fraction of frond). */
|
|
38
|
+
readonly width: number;
|
|
39
|
+
/** Cards per terminal stem (fronds: leaflets per side). */
|
|
40
|
+
readonly perStem: number;
|
|
41
|
+
/** Where cards start along a terminal stem, 0–1 (default 0.3; tufts sit near the tip). */
|
|
42
|
+
readonly from?: number;
|
|
43
|
+
readonly color: Vec3;
|
|
44
|
+
/** ± relative colour variation per card. */
|
|
45
|
+
readonly colorVar: number;
|
|
46
|
+
/** 0–1: lay cards level, like the horizontal needle pads of a pine. */
|
|
47
|
+
readonly flat?: number;
|
|
48
|
+
/** 0 = cards splay outward, 1 = they hang straight down (willow strands). */
|
|
49
|
+
readonly hang?: number;
|
|
50
|
+
}
|
|
51
|
+
export interface TreeParams {
|
|
52
|
+
readonly shape: CrownShape;
|
|
53
|
+
/** Fraction of the trunk free of branches (clear bole). */
|
|
54
|
+
readonly baseSize: number;
|
|
55
|
+
/** [trunk, level 1, level 2?, level 3?]. */
|
|
56
|
+
readonly levels: readonly BranchLevel[];
|
|
57
|
+
/** Child radius = parent radius · (child length / parent length)^ratioPower. */
|
|
58
|
+
readonly ratioPower: number;
|
|
59
|
+
/** Trunk radius at the top as a fraction of its radius at breast height. */
|
|
60
|
+
readonly taper: number;
|
|
61
|
+
/** Trunk lean from vertical towards +X, degrees. The trunk stays in the XZ plane. */
|
|
62
|
+
readonly lean?: number;
|
|
63
|
+
readonly bark: Vec3;
|
|
64
|
+
/** Bark colour at the top of the trunk (Scots pine's orange upper bark); default `bark`. */
|
|
65
|
+
readonly barkTop?: Vec3;
|
|
66
|
+
/** Dark bark marks scattered per vertex (birch lenticels): colour + fraction of vertices. */
|
|
67
|
+
readonly barkMarks?: {
|
|
68
|
+
readonly color: Vec3;
|
|
69
|
+
readonly amount: number;
|
|
70
|
+
};
|
|
71
|
+
readonly leaves: LeafParams;
|
|
72
|
+
/** Buttress lobes in the root flare at the base (LOD0/1); 0 or absent = no `roots` part. */
|
|
73
|
+
readonly roots?: number;
|
|
74
|
+
/** Fruit hung under the crown (coconuts), merged into `branches`. LOD0 only. */
|
|
75
|
+
readonly fruit?: {
|
|
76
|
+
readonly count: number;
|
|
77
|
+
readonly radius: number;
|
|
78
|
+
readonly color: Vec3;
|
|
79
|
+
};
|
|
80
|
+
/** LOD2 stand-in: a lathe of the crown envelope, or a few coarse frond cards. */
|
|
81
|
+
readonly impostor: 'blob' | 'cards';
|
|
82
|
+
/** Typical mature size this preset was tuned on (used when the caller omits spread/dbh). */
|
|
83
|
+
readonly typical: {
|
|
84
|
+
readonly height: number;
|
|
85
|
+
readonly spread: number;
|
|
86
|
+
readonly dbh: number;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/** Weber–Penn ShapeRatio; `r` is 1 at the crown base and 0 at the trunk tip. */
|
|
90
|
+
export declare function shapeRatio(shape: CrownShape, r: number): number;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { TreeParams } from './vegetation-params.js';
|
|
2
|
+
/** Quercus robur (English oak): 20–25 m, crown about as wide; girth 4–12 m. Spreading, crooked limbs. */
|
|
3
|
+
export declare const oak: TreeParams;
|
|
4
|
+
/** Pinus sylvestris (Scots pine): 25–35 m, DBH up to 1 m; long clean bole, orange upper bark,
|
|
5
|
+
* flat-topped crown in the top third, dark blue-green needle tufts on upturned tips. */
|
|
6
|
+
export declare const pine: TreeParams;
|
|
7
|
+
/** Cocos nucifera (coconut palm): up to 30 m; single ringed stem 30–40 cm; 4–6 m pinnate fronds. */
|
|
8
|
+
export declare const palm: TreeParams;
|
|
9
|
+
/** Betula pendula (silver birch): 15–25 m, narrow crown, white bark with black marks, weeping twigs. */
|
|
10
|
+
export declare const birch: TreeParams;
|
|
11
|
+
/** Salix babylonica (weeping willow): 10–15 m, wider than tall; long hanging leafy strands. */
|
|
12
|
+
export declare const willow: TreeParams;
|
|
13
|
+
export declare const SPECIES: {
|
|
14
|
+
readonly oak: TreeParams;
|
|
15
|
+
readonly pine: TreeParams;
|
|
16
|
+
readonly palm: TreeParams;
|
|
17
|
+
readonly birch: TreeParams;
|
|
18
|
+
readonly willow: TreeParams;
|
|
19
|
+
};
|
|
20
|
+
export type SpeciesName = keyof typeof SPECIES;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Rng, Vec3 } from '../core/index.js';
|
|
2
|
+
import { type TreeParams } from './vegetation-params.js';
|
|
3
|
+
export interface Stem {
|
|
4
|
+
readonly level: number;
|
|
5
|
+
readonly pts: readonly Vec3[];
|
|
6
|
+
readonly radii: readonly number[];
|
|
7
|
+
readonly length: number;
|
|
8
|
+
/** Index of the parent stem, −1 for the trunk. */
|
|
9
|
+
readonly parent: number;
|
|
10
|
+
/** Attachment point on the parent's bark (cluster cards root here at LOD1). */
|
|
11
|
+
readonly surface: Vec3;
|
|
12
|
+
/** Nominal length before shape/variation: drives the child count. */
|
|
13
|
+
readonly maxLength: number;
|
|
14
|
+
}
|
|
15
|
+
/** Rodrigues rotation of v about unit axis k by angle a (radians). */
|
|
16
|
+
export declare function rotate(v: Vec3, k: Vec3, a: number): Vec3;
|
|
17
|
+
export declare function grow(p: TreeParams, size: {
|
|
18
|
+
height: number;
|
|
19
|
+
dbh: number;
|
|
20
|
+
}, rng: Rng): Stem[];
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type BuildContext, type RealDimensions } from '../core/index.js';
|
|
2
|
+
import type { TreeParams } from './vegetation-params.js';
|
|
3
|
+
export interface TreeOptions {
|
|
4
|
+
/** A preset name (`oak`, `pine`, `palm`, `birch`, `willow`) or a full parameter set. */
|
|
5
|
+
readonly species?: string | TreeParams;
|
|
6
|
+
/** Overrides on top of the species. */
|
|
7
|
+
readonly params?: Partial<TreeParams>;
|
|
8
|
+
/** Total height, metres (ground to crown top). */
|
|
9
|
+
readonly height: number;
|
|
10
|
+
/** Crown spread (X and Y), metres. Default: the species' typical ratio to height. */
|
|
11
|
+
readonly spread?: number;
|
|
12
|
+
/** Trunk diameter at breast height (1.3 m), metres. Default: the species' typical ratio. */
|
|
13
|
+
readonly dbh?: number;
|
|
14
|
+
readonly seed?: number;
|
|
15
|
+
/** Part-name prefix: `oak_3` → `oak_3_trunk`, `oak_3_crown`, … */
|
|
16
|
+
readonly prefix?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface TreeInfo {
|
|
19
|
+
readonly parts: {
|
|
20
|
+
trunk: string;
|
|
21
|
+
crown: string;
|
|
22
|
+
branches: string;
|
|
23
|
+
leaves: string;
|
|
24
|
+
roots: string;
|
|
25
|
+
};
|
|
26
|
+
readonly height: number;
|
|
27
|
+
readonly spread: number;
|
|
28
|
+
readonly dbh: number;
|
|
29
|
+
}
|
|
30
|
+
export declare function treeParams(o: Pick<TreeOptions, 'species' | 'params'>): TreeParams;
|
|
31
|
+
export declare function tree(ctx: BuildContext, o: TreeOptions): TreeInfo;
|
|
32
|
+
/** `real` for a tree recipe: overall envelope plus DBH (trunk across Y) and total height. */
|
|
33
|
+
export declare function treeReal(o: {
|
|
34
|
+
height: number;
|
|
35
|
+
spread: number;
|
|
36
|
+
dbh: number;
|
|
37
|
+
prefix?: string;
|
|
38
|
+
source?: string;
|
|
39
|
+
}): RealDimensions;
|
|
40
|
+
export type TreeFamilyParams = Omit<TreeOptions, 'prefix'>;
|
|
41
|
+
/** One family, many species: `trees.variant({ name: 'oak', params: { species: 'oak', height: 22 } })`. */
|
|
42
|
+
export declare const trees: import("../index.ts").Family<TreeFamilyParams>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type BuildContext, type Vec3 } from '../core/index.js';
|
|
2
|
+
/** A pair of wheels on one spinning axle. */
|
|
3
|
+
export declare function axle(ctx: BuildContext, o: {
|
|
4
|
+
name: string;
|
|
5
|
+
at: Vec3;
|
|
6
|
+
radius: number;
|
|
7
|
+
gauge: number;
|
|
8
|
+
width: number;
|
|
9
|
+
color: Vec3;
|
|
10
|
+
rps: number;
|
|
11
|
+
}): void;
|
|
12
|
+
/** Lays out wheel groups from a Whyte arrangement along X; returns axle x-positions per role. */
|
|
13
|
+
export declare function whyteAxles(arrangement: string, o: {
|
|
14
|
+
leading: number;
|
|
15
|
+
driving: number;
|
|
16
|
+
trailing: number;
|
|
17
|
+
spacing: number;
|
|
18
|
+
}): {
|
|
19
|
+
role: string;
|
|
20
|
+
x: number;
|
|
21
|
+
radius: number;
|
|
22
|
+
}[];
|
|
23
|
+
/** One side of a tracked running gear: road wheels (spinning) + a flat track loop. */
|
|
24
|
+
export declare function trackRun(ctx: BuildContext, o: {
|
|
25
|
+
side: 'l' | 'r';
|
|
26
|
+
y: number;
|
|
27
|
+
length: number;
|
|
28
|
+
wheels: number;
|
|
29
|
+
radius: number;
|
|
30
|
+
width: number;
|
|
31
|
+
color: Vec3;
|
|
32
|
+
track: Vec3;
|
|
33
|
+
}): void;
|
|
34
|
+
/** A propeller hub + blades that spin about X (nose direction). */
|
|
35
|
+
export declare function propeller(ctx: BuildContext, o: {
|
|
36
|
+
name: string;
|
|
37
|
+
at: Vec3;
|
|
38
|
+
radius: number;
|
|
39
|
+
blades: number;
|
|
40
|
+
color: Vec3;
|
|
41
|
+
parent?: string;
|
|
42
|
+
}): void;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PaintedSheet, SheetRecipe } from './paint/types.js';
|
|
2
|
+
export { DEFAULT_SHEET } from './paint/default-sheet.js';
|
|
3
|
+
export type { CellImage, PaintedSheet, SheetRecipe, StripKind, StripRecipe, } from './paint/types.js';
|
|
4
|
+
export declare function paintTrimSheet(recipe?: SheetRecipe): PaintedSheet;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { type CellImage, DEFAULT_SHEET, type PaintedSheet, paintTrimSheet, type SheetRecipe, type StripKind, type StripRecipe, } from './generator.js';
|
|
2
|
+
export { definePalette, hex, type Palette, palettes } from './palette.js';
|
|
3
|
+
export { godotShaderSource, type ShaderHints, threeMaterialSource } from './shader.js';
|
|
4
|
+
export { CELLS, type CellId, cellRect, DECAL_CELLS, type DecalCellId, FOLIAGE_CELLS, type FoliageCellId, isFoliage, STRIPS, type StripId, stripRect, TRIM_SHEET_SIZE, type UvRect, } from './trim-sheet.js';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TRIM_SHEET_SIZE2,
|
|
3
|
+
stripRect2,
|
|
4
|
+
cellRect2,
|
|
5
|
+
STRIPS2,
|
|
6
|
+
CELLS2,
|
|
7
|
+
DECAL_CELLS2,
|
|
8
|
+
FOLIAGE_CELLS2,
|
|
9
|
+
isFoliage2,
|
|
10
|
+
DEFAULT_SHEET2,
|
|
11
|
+
paintTrimSheet2,
|
|
12
|
+
hex2,
|
|
13
|
+
definePalette2,
|
|
14
|
+
palettes2,
|
|
15
|
+
threeMaterialSource2,
|
|
16
|
+
godotShaderSource2
|
|
17
|
+
} from "../chunk-kvcep7ft.js";
|
|
18
|
+
import"../chunk-4ddzsqtc.js";
|
|
19
|
+
export {
|
|
20
|
+
CELLS2 as CELLS,
|
|
21
|
+
DECAL_CELLS2 as DECAL_CELLS,
|
|
22
|
+
DEFAULT_SHEET2 as DEFAULT_SHEET,
|
|
23
|
+
FOLIAGE_CELLS2 as FOLIAGE_CELLS,
|
|
24
|
+
STRIPS2 as STRIPS,
|
|
25
|
+
TRIM_SHEET_SIZE2 as TRIM_SHEET_SIZE,
|
|
26
|
+
cellRect2 as cellRect,
|
|
27
|
+
definePalette2 as definePalette,
|
|
28
|
+
godotShaderSource2 as godotShaderSource,
|
|
29
|
+
hex2 as hex,
|
|
30
|
+
isFoliage2 as isFoliage,
|
|
31
|
+
paintTrimSheet2 as paintTrimSheet,
|
|
32
|
+
palettes2 as palettes,
|
|
33
|
+
stripRect2 as stripRect,
|
|
34
|
+
threeMaterialSource2 as threeMaterialSource
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
//# debugId=00CB682D745D7A0764756E2164756E21
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface Canvas {
|
|
2
|
+
readonly w: number;
|
|
3
|
+
readonly h: number;
|
|
4
|
+
/** World metres the canvas spans along U (x) and V (y). Row y grows with world up (+V). */
|
|
5
|
+
readonly metresU: number;
|
|
6
|
+
readonly metresV: number;
|
|
7
|
+
/** Strips wrap along U (tile seamlessly); cells clamp. */
|
|
8
|
+
readonly wrapU: boolean;
|
|
9
|
+
readonly height: Float32Array;
|
|
10
|
+
readonly tone: Float32Array;
|
|
11
|
+
readonly rough: Float32Array;
|
|
12
|
+
readonly metal: Float32Array;
|
|
13
|
+
/** Extra occlusion multiplied into the cavity AO (foliage darkens toward the twig). */
|
|
14
|
+
readonly occl: Float32Array;
|
|
15
|
+
/** sRGB RGBA override (stamped images, coloured foliage); null when painted greyscale. */
|
|
16
|
+
rgba: Uint8Array | null;
|
|
17
|
+
}
|
|
18
|
+
export declare function createCanvas(w: number, h: number, metresU: number, metresV: number, wrapU: boolean): Canvas;
|
|
19
|
+
/** Metres per pixel along x and y. */
|
|
20
|
+
export declare const pxU: (c: Canvas) => number;
|
|
21
|
+
export declare const pxV: (c: Canvas) => number;
|
|
22
|
+
/** Noise period (lattice cells across the canvas width) for a feature size in metres. */
|
|
23
|
+
export declare function periodFor(c: Canvas, featureMetres: number): number;
|
|
24
|
+
/**
|
|
25
|
+
* fBm sampled at metres (xm, ym) with feature size `sizeU` along U and `sizeV` along V,
|
|
26
|
+
* snapped so it tiles along U. Returns [-1, 1].
|
|
27
|
+
*/
|
|
28
|
+
export declare function noiseAt(c: Canvas, xm: number, ym: number, sizeU: number, sizeV: number, seed: number, octaves?: number): number;
|
|
29
|
+
/** Read a parameter with a default, rejecting nothing (validation happens in the generator). */
|
|
30
|
+
export declare const param: (params: Readonly<Record<string, number>> | undefined, key: string, fallback: number) => number;
|
|
31
|
+
export declare const clamp01: (v: number) => number;
|
|
32
|
+
export declare const smooth: (e0: number, e1: number, v: number) => number;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Canvas } from './canvas.js';
|
|
2
|
+
import type { StripRecipe } from './types.js';
|
|
3
|
+
export declare function paintClock(c: Canvas, r: StripRecipe, _seed: number): void;
|
|
4
|
+
export declare function paintSmokebox(c: Canvas, r: StripRecipe, seed: number): void;
|
|
5
|
+
export declare function paintPorthole(c: Canvas, r: StripRecipe, seed: number): void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Canvas } from './canvas.js';
|
|
2
|
+
import type { StripRecipe } from './types.js';
|
|
3
|
+
/** Pane tone: dark enough that `luma < 0.3` marks glass for window glow. */
|
|
4
|
+
export declare const PANE_TONE = 0.12;
|
|
5
|
+
export declare function paintWindowSash(c: Canvas, r: StripRecipe, seed: number): void;
|
|
6
|
+
export declare function paintDoorPanel(c: Canvas, r: StripRecipe, seed: number): void;
|
|
7
|
+
export declare function paintSign(c: Canvas, r: StripRecipe, _seed: number): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Canvas } from './canvas.js';
|
|
2
|
+
import type { PaintedSheet } from './types.js';
|
|
3
|
+
/** An empty sheet: white albedo (vertex colour reads true), flat normal, AO 1, rough 0.8. */
|
|
4
|
+
export declare function blankSheet(size: number): PaintedSheet;
|
|
5
|
+
export declare function composeRegion(sheet: PaintedSheet, c: Canvas, x0: number, y0: number, pad: number): void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Canvas } from './canvas.js';
|
|
2
|
+
export interface CourseSpec {
|
|
3
|
+
/** Course height, metres (along V). */
|
|
4
|
+
readonly course: number;
|
|
5
|
+
/** Mean tile length, metres (along U). */
|
|
6
|
+
readonly length: number;
|
|
7
|
+
/** 0 = regular; 0.5 = sizes vary ±25 %. */
|
|
8
|
+
readonly irregular: number;
|
|
9
|
+
/** Fraction of a tile each odd course shifts; random offsets when irregular. */
|
|
10
|
+
readonly stagger: number;
|
|
11
|
+
readonly seed: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class Courses {
|
|
14
|
+
/** Tile index within the current course, per column. */
|
|
15
|
+
readonly id: Int32Array;
|
|
16
|
+
/** Distance to the nearest vertical joint, metres, per column. */
|
|
17
|
+
readonly dx: Float32Array;
|
|
18
|
+
/** Distance from the tile's left joint, metres, per column. */
|
|
19
|
+
readonly ux: Float32Array;
|
|
20
|
+
/** The current course: index and its bottom / top in metres. */
|
|
21
|
+
index: number;
|
|
22
|
+
y0: number;
|
|
23
|
+
y1: number;
|
|
24
|
+
private readonly bounds;
|
|
25
|
+
private readonly c;
|
|
26
|
+
private readonly spec;
|
|
27
|
+
constructor(c: Canvas, spec: CourseSpec);
|
|
28
|
+
/** Point the tables at the course containing metres `ym`; returns the course index. */
|
|
29
|
+
at(ym: number): number;
|
|
30
|
+
private fill;
|
|
31
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Canvas } from './canvas.js';
|
|
2
|
+
export declare function paintBroadleaf(c: Canvas, seed: number): void;
|
|
3
|
+
export declare function paintMaple(c: Canvas, seed: number): void;
|
|
4
|
+
export declare function paintMapleAutumn(c: Canvas, seed: number): void;
|
|
5
|
+
export declare function paintBirch(c: Canvas, seed: number): void;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Rng } from '../../core/index.js';
|
|
2
|
+
import type { Foliage, Rgb } from './foliage-raster.js';
|
|
3
|
+
/** A quadratic Bézier from p0 via p1 to p2, metres in the cell (anchor usually 0.5, 0.02). */
|
|
4
|
+
export interface Curve {
|
|
5
|
+
readonly x: readonly number[];
|
|
6
|
+
readonly y: readonly number[];
|
|
7
|
+
/** Tangent angle per sample (0 = +V, + toward +U), the convention `Foliage.leaf` takes. */
|
|
8
|
+
readonly a: readonly number[];
|
|
9
|
+
}
|
|
10
|
+
export declare function curve(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, n?: number): Curve;
|
|
11
|
+
/** Sample index nearest parameter t ∈ [0, 1]. */
|
|
12
|
+
export declare const at: (c: Curve, t: number) => number;
|
|
13
|
+
/** Draw a curve as a tapered stem. */
|
|
14
|
+
export declare function drawStem(f: Foliage, c: Curve, w0: number, w1: number, col: Rgb): void;
|
|
15
|
+
/** Jitter a colour per leaf: brightness ±amt and a small hue drift between R and G. */
|
|
16
|
+
export declare function vary(rng: Rng, col: Rgb, amt: number): Rgb;
|
|
17
|
+
export declare const dim: (col: Rgb, k: number) => Rgb;
|
|
18
|
+
/** Leaf palettes, linear RGB (multiply by a near-white vertex colour on the card). */
|
|
19
|
+
export declare const LEAF: {
|
|
20
|
+
readonly beech: Rgb;
|
|
21
|
+
readonly maple: Rgb;
|
|
22
|
+
readonly birch: Rgb;
|
|
23
|
+
readonly acacia: Rgb;
|
|
24
|
+
readonly palm: Rgb;
|
|
25
|
+
readonly dry: Rgb;
|
|
26
|
+
readonly spruce: Rgb;
|
|
27
|
+
readonly pine: Rgb;
|
|
28
|
+
readonly willow: Rgb;
|
|
29
|
+
readonly reed: Rgb;
|
|
30
|
+
readonly snow: Rgb;
|
|
31
|
+
readonly bark: Rgb;
|
|
32
|
+
readonly twig: Rgb;
|
|
33
|
+
};
|
|
34
|
+
/** Autumn maple: each leaf picks one of these, then gets jittered. */
|
|
35
|
+
export declare const AUTUMN: readonly Rgb[];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Canvas } from './canvas.js';
|
|
2
|
+
export declare const paintSpruce: (c: Canvas, seed: number) => void;
|
|
3
|
+
export declare const paintSpruceSnow: (c: Canvas, seed: number) => void;
|
|
4
|
+
export declare function paintNeedles(c: Canvas, seed: number): void;
|
|
5
|
+
export declare function paintReeds(c: Canvas, seed: number): void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Canvas } from './canvas.js';
|
|
2
|
+
export type Rgb = readonly [number, number, number];
|
|
3
|
+
/** Width profile of a leaf along its length t ∈ [0, 1]; 1 = full half-width. */
|
|
4
|
+
export type LeafShape = 'ovate' | 'lance' | 'needle' | 'blade' | 'palmate';
|
|
5
|
+
export declare class Foliage {
|
|
6
|
+
private readonly r;
|
|
7
|
+
private readonly g;
|
|
8
|
+
private readonly b;
|
|
9
|
+
private readonly a;
|
|
10
|
+
private readonly c;
|
|
11
|
+
private readonly px;
|
|
12
|
+
constructor(c: Canvas);
|
|
13
|
+
/** Composite `cov` of colour (cr, cg, cb) × shade over texel i. */
|
|
14
|
+
private put;
|
|
15
|
+
/** Pixel bounds of a metre-space box, clipped to the canvas. */
|
|
16
|
+
private span;
|
|
17
|
+
/** A tapered stem / twig / rachis from (ax, ay) width w0 to (bx, by) width w1, metres. */
|
|
18
|
+
stem(ax: number, ay: number, bx: number, by: number, w0: number, w1: number, col: Rgb): void;
|
|
19
|
+
/**
|
|
20
|
+
* A leaf from its base (bx, by) along `angle` (radians, 0 = +V, positive = toward +U), `len`
|
|
21
|
+
* long and `wid` wide at its widest. `serrate` adds teeth; `lift` raises it over earlier layers.
|
|
22
|
+
*/
|
|
23
|
+
leaf(shape: LeafShape, bx: number, by: number, angle: number, len: number, wid: number, col: Rgb, serrate?: number, lift?: number): void;
|
|
24
|
+
/** Write the layers to the canvas: sRGB RGBA with bled colour, occlusion toward the twig. */
|
|
25
|
+
finish(axisX?: number, reach?: number): void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Integer hash of a lattice point to [0, 1). */
|
|
2
|
+
export declare function hash2(ix: number, iy: number, seed: number): number;
|
|
3
|
+
/** Value noise in [0, 1] on a unit lattice, periodic in x with an integer `period` (cells). */
|
|
4
|
+
export declare function valueNoise(x: number, y: number, period: number, seed: number): number;
|
|
5
|
+
/**
|
|
6
|
+
* Fractal Brownian motion in [-1, 1]: `octaves` layers of value noise, each at double frequency
|
|
7
|
+
* and `gain` amplitude. Doubling keeps the period an integer, so the sum stays tileable.
|
|
8
|
+
*/
|
|
9
|
+
export declare function fbm(x: number, y: number, period: number, seed: number, octaves?: number, gain?: number): number;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Canvas } from './canvas.js';
|
|
2
|
+
/** Neighbour column indices, precomputed so the hot loop does no modulo. */
|
|
3
|
+
export declare function neighbours(n: number, wrap: boolean): {
|
|
4
|
+
lo: Int32Array;
|
|
5
|
+
hi: Int32Array;
|
|
6
|
+
};
|
|
7
|
+
/** RGBA8 tangent-space normals for the canvas; `strength` scales the slope. */
|
|
8
|
+
export declare function sobelNormals(c: Canvas, strength?: number): Uint8Array;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Canvas } from './canvas.js';
|
|
2
|
+
/** Per-texel ambient occlusion in [1 - AO_STRENGTH, 1]. */
|
|
3
|
+
export declare function cavityOcclusion(c: Canvas): Float32Array;
|
|
4
|
+
export declare const SRGB: Uint8Array<ArrayBuffer>;
|
|
5
|
+
/** RGBA8 ORM: R = occlusion, G = roughness, B = metalness, A = 255. */
|
|
6
|
+
export declare function packOrm(c: Canvas, ao: Float32Array): Uint8Array;
|
|
7
|
+
/** RGBA8 sRGB albedo: the stamped image if any, else grey tone × mild cavity. */
|
|
8
|
+
export declare function packAlbedo(c: Canvas, ao: Float32Array): Uint8Array;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Distance from (px, py) to the segment (ax, ay)–(bx, by). */
|
|
2
|
+
export declare function segment(px: number, py: number, ax: number, ay: number, bx: number, by: number): number;
|
|
3
|
+
/** Signed distance to an axis-aligned rectangle (negative inside). */
|
|
4
|
+
export declare function rect(px: number, py: number, x0: number, y0: number, x1: number, y1: number): number;
|
|
5
|
+
/** Dome profile in [0, 1] for a round boss of radius `r` at distance `d`. */
|
|
6
|
+
export declare const dome: (d: number, r: number) => number;
|
|
7
|
+
/** Distance to the nearest of `n` points evenly spaced on a circle of radius `ring`. */
|
|
8
|
+
export declare function boltRing(px: number, py: number, ring: number, n: number, phase?: number): number;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Canvas } from './canvas.js';
|
|
2
|
+
import type { StripRecipe } from './types.js';
|
|
3
|
+
export declare function paintFlat(c: Canvas, r: StripRecipe): void;
|
|
4
|
+
export declare function paintNoise(c: Canvas, r: StripRecipe, seed: number): void;
|
|
5
|
+
export declare function paintGlass(c: Canvas, r: StripRecipe, seed: number): void;
|