@developerz.ai/ts23d 0.0.0-stage → 0.2.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.
Files changed (567) hide show
  1. package/.claude/agents/bug-hunter.md +21 -0
  2. package/.claude/agents/docs-author.md +13 -0
  3. package/.claude/agents/dx-auditor.md +14 -0
  4. package/.claude/agents/primitive-author.md +22 -0
  5. package/.claude/agents/recipe-author.md +36 -0
  6. package/.claude/agents/visual-reviewer.md +23 -0
  7. package/.claude/commands/feature.md +28 -0
  8. package/.claude/commands/new-recipe.md +19 -0
  9. package/.claude/commands/release.md +14 -0
  10. package/.claude/commands/verify.md +9 -0
  11. package/.claude/skills/author-recipe/SKILL.md +93 -0
  12. package/CHANGELOG.md +90 -0
  13. package/CLAUDE.md +85 -0
  14. package/LICENSE +21 -0
  15. package/README.md +385 -2
  16. package/dist/chunk-6b05mnmx.js +19 -0
  17. package/dist/chunk-6b05mnmx.js.map +11 -0
  18. package/dist/chunk-7rtfjh9f.js +45 -0
  19. package/dist/chunk-7rtfjh9f.js.map +10 -0
  20. package/dist/chunk-8j4c28jt.js +4085 -0
  21. package/dist/chunk-8j4c28jt.js.map +46 -0
  22. package/dist/chunk-d1fv6hrm.js +2532 -0
  23. package/dist/chunk-d1fv6hrm.js.map +43 -0
  24. package/dist/chunk-dbq4qf52.js +902 -0
  25. package/dist/chunk-dbq4qf52.js.map +25 -0
  26. package/dist/chunk-drna2rny.js +836 -0
  27. package/dist/chunk-drna2rny.js.map +17 -0
  28. package/dist/chunk-dxvypr7y.js +89 -0
  29. package/dist/chunk-dxvypr7y.js.map +11 -0
  30. package/dist/chunk-f6yme003.js +1589 -0
  31. package/dist/chunk-f6yme003.js.map +30 -0
  32. package/dist/chunk-hg7pf34j.js +465 -0
  33. package/dist/chunk-hg7pf34j.js.map +19 -0
  34. package/dist/chunk-jq4e17tj.js +1031 -0
  35. package/dist/chunk-jq4e17tj.js.map +21 -0
  36. package/dist/chunk-y63c6zcv.js +2668 -0
  37. package/dist/chunk-y63c6zcv.js.map +53 -0
  38. package/dist/cli/args.d.ts +30 -0
  39. package/dist/cli/bin.d.ts +2 -0
  40. package/dist/cli/bin.js +348 -0
  41. package/dist/cli/bin.js.map +15 -0
  42. package/dist/cli/load.d.ts +2 -0
  43. package/dist/cli/manifest.d.ts +53 -0
  44. package/dist/cli/render-cmds.d.ts +12 -0
  45. package/dist/cli/run.d.ts +1 -0
  46. package/dist/cli/texture-cache.d.ts +4 -0
  47. package/dist/core/asset.d.ts +10 -0
  48. package/dist/core/definition.d.ts +155 -0
  49. package/dist/core/errors.d.ts +17 -0
  50. package/dist/core/family.d.ts +23 -0
  51. package/dist/core/index.d.ts +9 -0
  52. package/dist/core/index.js +69 -0
  53. package/dist/core/index.js.map +9 -0
  54. package/dist/core/mesh.d.ts +35 -0
  55. package/dist/core/part.d.ts +114 -0
  56. package/dist/core/png.d.ts +1 -0
  57. package/dist/core/rng.d.ts +12 -0
  58. package/dist/core/transform.d.ts +20 -0
  59. package/dist/core/vec.d.ts +11 -0
  60. package/dist/core/world.d.ts +16 -0
  61. package/dist/export/bin-writer.d.ts +16 -0
  62. package/dist/export/container.d.ts +3 -0
  63. package/dist/export/credits.d.ts +4 -0
  64. package/dist/export/glb-options.d.ts +48 -0
  65. package/dist/export/glb.d.ts +8 -0
  66. package/dist/export/hierarchy.d.ts +23 -0
  67. package/dist/export/index.d.ts +5 -0
  68. package/dist/export/index.js +40 -0
  69. package/dist/export/index.js.map +9 -0
  70. package/dist/export/lights.d.ts +8 -0
  71. package/dist/export/lod-coverage.d.ts +12 -0
  72. package/dist/export/materials.d.ts +23 -0
  73. package/dist/export/merge-pivots.d.ts +6 -0
  74. package/dist/export/metadata.d.ts +21 -0
  75. package/dist/export/motion.d.ts +9 -0
  76. package/dist/export/optimize-parts.d.ts +26 -0
  77. package/dist/export/primitive.d.ts +3 -0
  78. package/dist/export/tangents.d.ts +2 -0
  79. package/dist/export/textures.d.ts +22 -0
  80. package/dist/export/version.d.ts +2 -0
  81. package/dist/grammar/index.d.ts +2 -0
  82. package/dist/grammar/index.js +16 -0
  83. package/dist/grammar/index.js.map +9 -0
  84. package/dist/grammar/split.d.ts +21 -0
  85. package/dist/grammar/whyte.d.ts +5 -0
  86. package/dist/index.d.ts +11 -0
  87. package/dist/index.js +457 -0
  88. package/dist/index.js.map +9 -0
  89. package/dist/kinds/building.d.ts +44 -0
  90. package/dist/kinds/faces.d.ts +27 -0
  91. package/dist/kinds/head-armour.d.ts +5 -0
  92. package/dist/kinds/head-beard.d.ts +6 -0
  93. package/dist/kinds/head-bust.d.ts +5 -0
  94. package/dist/kinds/head-extras.d.ts +15 -0
  95. package/dist/kinds/head-face.d.ts +8 -0
  96. package/dist/kinds/head-garb.d.ts +4 -0
  97. package/dist/kinds/head-geom.d.ts +7 -0
  98. package/dist/kinds/head-hair.d.ts +4 -0
  99. package/dist/kinds/head-layout.d.ts +29 -0
  100. package/dist/kinds/head-mesh.d.ts +31 -0
  101. package/dist/kinds/head-mouth.d.ts +4 -0
  102. package/dist/kinds/head-params.d.ts +116 -0
  103. package/dist/kinds/head-presets.d.ts +19 -0
  104. package/dist/kinds/head-rim.d.ts +10 -0
  105. package/dist/kinds/head-tone.d.ts +10 -0
  106. package/dist/kinds/head-torso.d.ts +35 -0
  107. package/dist/kinds/head.d.ts +39 -0
  108. package/dist/kinds/hull-lines.d.ts +65 -0
  109. package/dist/kinds/hull-skin.d.ts +6 -0
  110. package/dist/kinds/hull.d.ts +14 -0
  111. package/dist/kinds/index.d.ts +16 -0
  112. package/dist/kinds/index.js +78 -0
  113. package/dist/kinds/index.js.map +9 -0
  114. package/dist/kinds/mass.d.ts +15 -0
  115. package/dist/kinds/openings.d.ts +30 -0
  116. package/dist/kinds/planned.d.ts +6 -0
  117. package/dist/kinds/roof-chimney.d.ts +16 -0
  118. package/dist/kinds/roof-shape.d.ts +64 -0
  119. package/dist/kinds/roof.d.ts +31 -0
  120. package/dist/kinds/vegetation-fronds.d.ts +15 -0
  121. package/dist/kinds/vegetation-impostor.d.ts +9 -0
  122. package/dist/kinds/vegetation-leaves.d.ts +15 -0
  123. package/dist/kinds/vegetation-mesh.d.ts +21 -0
  124. package/dist/kinds/vegetation-params.d.ts +90 -0
  125. package/dist/kinds/vegetation-presets.d.ts +20 -0
  126. package/dist/kinds/vegetation-skeleton.d.ts +20 -0
  127. package/dist/kinds/vegetation.d.ts +42 -0
  128. package/dist/kinds/vehicle.d.ts +42 -0
  129. package/dist/material/cc0.d.ts +4 -0
  130. package/dist/material/define.d.ts +34 -0
  131. package/dist/material/generator.d.ts +4 -0
  132. package/dist/material/index.d.ts +9 -0
  133. package/dist/material/index.js +70 -0
  134. package/dist/material/index.js.map +9 -0
  135. package/dist/material/library.d.ts +7 -0
  136. package/dist/material/material-def.d.ts +30 -0
  137. package/dist/material/paint/bond.d.ts +3 -0
  138. package/dist/material/paint/canvas.d.ts +39 -0
  139. package/dist/material/paint/cell.d.ts +4 -0
  140. package/dist/material/paint/cells-round.d.ts +5 -0
  141. package/dist/material/paint/cells.d.ts +7 -0
  142. package/dist/material/paint/compose.d.ts +5 -0
  143. package/dist/material/paint/concrete.d.ts +3 -0
  144. package/dist/material/paint/courses.d.ts +31 -0
  145. package/dist/material/paint/decode-png.d.ts +6 -0
  146. package/dist/material/paint/default-sheet.d.ts +4 -0
  147. package/dist/material/paint/fabric.d.ts +4 -0
  148. package/dist/material/paint/foliage-broad.d.ts +5 -0
  149. package/dist/material/paint/foliage-common.d.ts +35 -0
  150. package/dist/material/paint/foliage-compound.d.ts +4 -0
  151. package/dist/material/paint/foliage-conifer.d.ts +5 -0
  152. package/dist/material/paint/foliage-raster.d.ts +26 -0
  153. package/dist/material/paint/foliage.d.ts +3 -0
  154. package/dist/material/paint/image-strip.d.ts +4 -0
  155. package/dist/material/paint/kit.d.ts +5 -0
  156. package/dist/material/paint/masks.d.ts +3 -0
  157. package/dist/material/paint/metal.d.ts +3 -0
  158. package/dist/material/paint/noise.d.ts +9 -0
  159. package/dist/material/paint/normal.d.ts +8 -0
  160. package/dist/material/paint/orm.d.ts +8 -0
  161. package/dist/material/paint/planks.d.ts +3 -0
  162. package/dist/material/paint/plates.d.ts +3 -0
  163. package/dist/material/paint/shapes.d.ts +8 -0
  164. package/dist/material/paint/slate.d.ts +3 -0
  165. package/dist/material/paint/stamp.d.ts +3 -0
  166. package/dist/material/paint/strip.d.ts +3 -0
  167. package/dist/material/paint/surface.d.ts +5 -0
  168. package/dist/material/paint/types.d.ts +65 -0
  169. package/dist/material/paint/validate.d.ts +3 -0
  170. package/dist/material/palette.d.ts +14 -0
  171. package/dist/material/shader-godot.d.ts +2 -0
  172. package/dist/material/shader-three.d.ts +2 -0
  173. package/dist/material/shader.d.ts +46 -0
  174. package/dist/material/slots.d.ts +5 -0
  175. package/dist/material/texture-source.d.ts +34 -0
  176. package/dist/material/trim-sheet.d.ts +38 -0
  177. package/dist/neural/generator.d.ts +25 -0
  178. package/dist/neural/images.d.ts +17 -0
  179. package/dist/neural/index.d.ts +2 -0
  180. package/dist/neural/index.js +14 -0
  181. package/dist/neural/index.js.map +9 -0
  182. package/dist/passes/bake-ao.d.ts +17 -0
  183. package/dist/passes/grime.d.ts +15 -0
  184. package/dist/passes/index.d.ts +6 -0
  185. package/dist/passes/index.js +22 -0
  186. package/dist/passes/index.js.map +9 -0
  187. package/dist/passes/livery.d.ts +19 -0
  188. package/dist/passes/optimize-cache.d.ts +15 -0
  189. package/dist/passes/optimize-weld.d.ts +15 -0
  190. package/dist/passes/optimize.d.ts +28 -0
  191. package/dist/passes/ray-grid.d.ts +23 -0
  192. package/dist/passes/weighted-normals.d.ts +8 -0
  193. package/dist/primitives/beam.d.ts +17 -0
  194. package/dist/primitives/bevel-box.d.ts +13 -0
  195. package/dist/primitives/box.d.ts +16 -0
  196. package/dist/primitives/cell.d.ts +20 -0
  197. package/dist/primitives/check.d.ts +12 -0
  198. package/dist/primitives/closed.d.ts +11 -0
  199. package/dist/primitives/erosion.d.ts +22 -0
  200. package/dist/primitives/font-5x7.d.ts +3 -0
  201. package/dist/primitives/heightfield.d.ts +16 -0
  202. package/dist/primitives/index.d.ts +23 -0
  203. package/dist/primitives/index.js +81 -0
  204. package/dist/primitives/index.js.map +9 -0
  205. package/dist/primitives/lathe-facets.d.ts +8 -0
  206. package/dist/primitives/lathe.d.ts +26 -0
  207. package/dist/primitives/lattice.d.ts +30 -0
  208. package/dist/primitives/loft.d.ts +15 -0
  209. package/dist/primitives/mc-table.d.ts +2 -0
  210. package/dist/primitives/member.d.ts +19 -0
  211. package/dist/primitives/noise.d.ts +34 -0
  212. package/dist/primitives/planar.d.ts +10 -0
  213. package/dist/primitives/prism.d.ts +13 -0
  214. package/dist/primitives/sculpt-edit.d.ts +56 -0
  215. package/dist/primitives/sculpt-tree.d.ts +23 -0
  216. package/dist/primitives/sculpt.d.ts +27 -0
  217. package/dist/primitives/sdf-grid.d.ts +17 -0
  218. package/dist/primitives/sdf-ops.d.ts +37 -0
  219. package/dist/primitives/sdf.d.ts +21 -0
  220. package/dist/primitives/strip-uv.d.ts +11 -0
  221. package/dist/primitives/surface-nets.d.ts +7 -0
  222. package/dist/primitives/sweep.d.ts +19 -0
  223. package/dist/primitives/terrain-color.d.ts +30 -0
  224. package/dist/primitives/terrain-grid.d.ts +36 -0
  225. package/dist/primitives/text-layout.d.ts +22 -0
  226. package/dist/primitives/text.d.ts +27 -0
  227. package/dist/primitives/tiled.d.ts +22 -0
  228. package/dist/primitives/transport.d.ts +17 -0
  229. package/dist/primitives/triangulate.d.ts +2 -0
  230. package/dist/primitives/value-noise.d.ts +10 -0
  231. package/dist/qa/checks.d.ts +11 -0
  232. package/dist/qa/clash.d.ts +2 -0
  233. package/dist/qa/floating.d.ts +5 -0
  234. package/dist/qa/gates.d.ts +12 -0
  235. package/dist/qa/geometry.d.ts +21 -0
  236. package/dist/qa/index.d.ts +12 -0
  237. package/dist/qa/index.js +78 -0
  238. package/dist/qa/index.js.map +9 -0
  239. package/dist/qa/inside.d.ts +12 -0
  240. package/dist/qa/inspect.d.ts +18 -0
  241. package/dist/qa/lods.d.ts +12 -0
  242. package/dist/qa/measures.d.ts +4 -0
  243. package/dist/qa/occlusion.d.ts +3 -0
  244. package/dist/qa/sanity.d.ts +7 -0
  245. package/dist/qa/types.d.ts +12 -0
  246. package/dist/render/beauty.d.ts +40 -0
  247. package/dist/render/camera.d.ts +33 -0
  248. package/dist/render/depth-map.d.ts +38 -0
  249. package/dist/render/font.d.ts +1 -0
  250. package/dist/render/ground.d.ts +13 -0
  251. package/dist/render/index.d.ts +10 -0
  252. package/dist/render/index.js +47 -0
  253. package/dist/render/index.js.map +9 -0
  254. package/dist/render/lighting.d.ts +27 -0
  255. package/dist/render/lod-strip.d.ts +5 -0
  256. package/dist/render/metrics.d.ts +37 -0
  257. package/dist/render/options.d.ts +28 -0
  258. package/dist/render/photo-match.d.ts +19 -0
  259. package/dist/render/raster.d.ts +25 -0
  260. package/dist/render/resolve.d.ts +11 -0
  261. package/dist/render/review-prompt.d.ts +2 -0
  262. package/dist/render/review-warnings.d.ts +34 -0
  263. package/dist/render/review.d.ts +24 -0
  264. package/dist/render/scene.d.ts +18 -0
  265. package/dist/render/shade.d.ts +22 -0
  266. package/dist/render/sheet.d.ts +15 -0
  267. package/dist/render/texture.d.ts +15 -0
  268. package/dist/render/thumbnail.d.ts +8 -0
  269. package/dist/render/vis-buffer.d.ts +18 -0
  270. package/dist/testing/assert.d.ts +21 -0
  271. package/dist/testing/compiled.d.ts +15 -0
  272. package/dist/testing/hash.d.ts +1 -0
  273. package/dist/testing/index.d.ts +4 -0
  274. package/dist/testing/index.js +134 -0
  275. package/dist/testing/index.js.map +13 -0
  276. package/dist/testing/snapshot.d.ts +13 -0
  277. package/docs/README.md +56 -0
  278. package/docs/architecture/README.md +68 -0
  279. package/docs/architecture/adding-a-kind.md +44 -0
  280. package/docs/architecture/adding-a-primitive.md +49 -0
  281. package/docs/architecture/errors.md +47 -0
  282. package/docs/architecture/glb-production.md +214 -0
  283. package/docs/architecture/gltf-capabilities.md +117 -0
  284. package/docs/architecture/materials.md +151 -0
  285. package/docs/decisions/001-recipe-compiler-over-ai-meshes.md +27 -0
  286. package/docs/decisions/002-typescript-not-json.md +22 -0
  287. package/docs/decisions/003-shared-trim-sheet.md +21 -0
  288. package/docs/decisions/004-z-up-metres.md +21 -0
  289. package/docs/decisions/005-zero-runtime-deps.md +21 -0
  290. package/docs/decisions/006-single-package-subpath-exports.md +20 -0
  291. package/docs/decisions/007-cpu-contact-sheets.md +21 -0
  292. package/docs/decisions/008-surface-materials.md +21 -0
  293. package/docs/decisions/009-gltf-front-axis.md +21 -0
  294. package/docs/decisions/README.md +15 -0
  295. package/docs/idea/01-vision.md +117 -0
  296. package/docs/idea/02-dsl.md +343 -0
  297. package/docs/idea/03-ir.md +97 -0
  298. package/docs/idea/04-materials.md +114 -0
  299. package/docs/idea/05-agent-loop.md +141 -0
  300. package/docs/idea/06-qa.md +101 -0
  301. package/docs/idea/07-what-fits.md +45 -0
  302. package/docs/idea/08-neural-adapters.md +78 -0
  303. package/docs/idea/09-kinds.md +105 -0
  304. package/docs/idea/10-sculpting.md +166 -0
  305. package/docs/idea/11-materials-authoring.md +132 -0
  306. package/docs/idea/12-blender-bridge.md +136 -0
  307. package/docs/idea/13-asset-pipeline-research.md +89 -0
  308. package/docs/landscape.md +49 -0
  309. package/docs/plans/roadmap.md +139 -0
  310. package/examples/build-with-bun.ts +41 -0
  311. package/llms.txt +47 -0
  312. package/package.json +100 -4
  313. package/recipes/README.md +38 -0
  314. package/recipes/asteroid/README.md +46 -0
  315. package/recipes/asteroid/asteroid.ts +336 -0
  316. package/recipes/boulders/README.md +28 -0
  317. package/recipes/boulders/boulders.ts +117 -0
  318. package/recipes/boxcar/README.md +53 -0
  319. package/recipes/boxcar/boxcar.ts +1000 -0
  320. package/recipes/cargo_container_scifi/README.md +52 -0
  321. package/recipes/cargo_container_scifi/cargo_container_scifi.ts +461 -0
  322. package/recipes/dropship/README.md +84 -0
  323. package/recipes/dropship/dropship.ts +1144 -0
  324. package/recipes/eiffel_tower/README.md +110 -0
  325. package/recipes/eiffel_tower/eiffel_tower.ts +781 -0
  326. package/recipes/goblin_head/README.md +75 -0
  327. package/recipes/goblin_head/goblin_head.ts +38 -0
  328. package/recipes/human_head/README.md +68 -0
  329. package/recipes/human_head/human_head.ts +38 -0
  330. package/recipes/loco_440/README.md +32 -0
  331. package/recipes/loco_440/loco_440.ts +1404 -0
  332. package/recipes/material_swatches/README.md +21 -0
  333. package/recipes/material_swatches/material_swatches.ts +189 -0
  334. package/recipes/mountain_range/README.md +45 -0
  335. package/recipes/mountain_range/mountain_range.ts +128 -0
  336. package/recipes/oak/README.md +30 -0
  337. package/recipes/oak/oak.ts +19 -0
  338. package/recipes/orc_head/README.md +78 -0
  339. package/recipes/orc_head/orc_head.ts +41 -0
  340. package/recipes/palm/README.md +30 -0
  341. package/recipes/palm/palm.ts +19 -0
  342. package/recipes/pine/README.md +29 -0
  343. package/recipes/pine/pine.ts +19 -0
  344. package/recipes/signal_gantry/README.md +36 -0
  345. package/recipes/signal_gantry/signal_gantry.ts +522 -0
  346. package/recipes/station_halt/README.md +39 -0
  347. package/recipes/station_halt/station_halt.ts +722 -0
  348. package/recipes/t34/README.md +44 -0
  349. package/recipes/t34/t34.ts +1068 -0
  350. package/recipes/tiger_1/README.md +75 -0
  351. package/recipes/tiger_1/tiger_1.ts +1370 -0
  352. package/recipes/water_tower/README.md +40 -0
  353. package/recipes/water_tower/water_tower.ts +542 -0
  354. package/src/cli/args.ts +125 -0
  355. package/src/cli/bin.ts +7 -0
  356. package/src/cli/load.ts +17 -0
  357. package/src/cli/manifest.ts +95 -0
  358. package/src/cli/render-cmds.ts +66 -0
  359. package/src/cli/run.ts +192 -0
  360. package/src/cli/texture-cache.ts +24 -0
  361. package/src/core/asset.ts +129 -0
  362. package/src/core/definition.ts +156 -0
  363. package/src/core/errors.ts +50 -0
  364. package/src/core/family.ts +50 -0
  365. package/src/core/index.ts +66 -0
  366. package/src/core/mesh.ts +114 -0
  367. package/src/core/part.ts +130 -0
  368. package/src/core/png.ts +49 -0
  369. package/src/core/rng.ts +49 -0
  370. package/src/core/transform.ts +90 -0
  371. package/src/core/vec.ts +26 -0
  372. package/src/core/world.ts +80 -0
  373. package/src/export/bin-writer.ts +79 -0
  374. package/src/export/container.ts +35 -0
  375. package/src/export/credits.ts +25 -0
  376. package/src/export/glb-options.ts +53 -0
  377. package/src/export/glb.ts +187 -0
  378. package/src/export/hierarchy.ts +122 -0
  379. package/src/export/index.ts +34 -0
  380. package/src/export/lights.ts +49 -0
  381. package/src/export/lod-coverage.ts +71 -0
  382. package/src/export/materials.ts +126 -0
  383. package/src/export/merge-pivots.ts +146 -0
  384. package/src/export/metadata.ts +62 -0
  385. package/src/export/motion.ts +70 -0
  386. package/src/export/optimize-parts.ts +80 -0
  387. package/src/export/primitive.ts +35 -0
  388. package/src/export/tangents.ts +75 -0
  389. package/src/export/textures.ts +88 -0
  390. package/src/export/version.ts +6 -0
  391. package/src/grammar/index.ts +4 -0
  392. package/src/grammar/split.ts +87 -0
  393. package/src/grammar/whyte.ts +20 -0
  394. package/src/index.ts +14 -0
  395. package/src/kinds/building.ts +153 -0
  396. package/src/kinds/faces.ts +138 -0
  397. package/src/kinds/head-armour.ts +181 -0
  398. package/src/kinds/head-beard.ts +133 -0
  399. package/src/kinds/head-bust.ts +184 -0
  400. package/src/kinds/head-extras.ts +150 -0
  401. package/src/kinds/head-face.ts +242 -0
  402. package/src/kinds/head-garb.ts +181 -0
  403. package/src/kinds/head-geom.ts +31 -0
  404. package/src/kinds/head-hair.ts +193 -0
  405. package/src/kinds/head-layout.ts +63 -0
  406. package/src/kinds/head-mesh.ts +195 -0
  407. package/src/kinds/head-mouth.ts +111 -0
  408. package/src/kinds/head-params.ts +162 -0
  409. package/src/kinds/head-presets.ts +155 -0
  410. package/src/kinds/head-rim.ts +128 -0
  411. package/src/kinds/head-tone.ts +52 -0
  412. package/src/kinds/head-torso.ts +230 -0
  413. package/src/kinds/head.ts +176 -0
  414. package/src/kinds/hull-lines.ts +160 -0
  415. package/src/kinds/hull-skin.ts +83 -0
  416. package/src/kinds/hull.ts +209 -0
  417. package/src/kinds/index.ts +63 -0
  418. package/src/kinds/mass.ts +110 -0
  419. package/src/kinds/openings.ts +141 -0
  420. package/src/kinds/planned.ts +12 -0
  421. package/src/kinds/roof-chimney.ts +100 -0
  422. package/src/kinds/roof-shape.ts +230 -0
  423. package/src/kinds/roof.ts +250 -0
  424. package/src/kinds/vegetation-fronds.ts +126 -0
  425. package/src/kinds/vegetation-impostor.ts +118 -0
  426. package/src/kinds/vegetation-leaves.ts +168 -0
  427. package/src/kinds/vegetation-mesh.ts +174 -0
  428. package/src/kinds/vegetation-params.ts +147 -0
  429. package/src/kinds/vegetation-presets.ts +184 -0
  430. package/src/kinds/vegetation-skeleton.ts +168 -0
  431. package/src/kinds/vegetation.ts +199 -0
  432. package/src/kinds/vehicle.ts +144 -0
  433. package/src/material/cc0.ts +41 -0
  434. package/src/material/define.ts +130 -0
  435. package/src/material/generator.ts +63 -0
  436. package/src/material/index.ts +60 -0
  437. package/src/material/library.ts +196 -0
  438. package/src/material/material-def.ts +84 -0
  439. package/src/material/paint/bond.ts +60 -0
  440. package/src/material/paint/canvas.ts +101 -0
  441. package/src/material/paint/cell.ts +39 -0
  442. package/src/material/paint/cells-round.ts +119 -0
  443. package/src/material/paint/cells.ts +111 -0
  444. package/src/material/paint/compose.ts +53 -0
  445. package/src/material/paint/concrete.ts +62 -0
  446. package/src/material/paint/courses.ts +85 -0
  447. package/src/material/paint/decode-png.ts +106 -0
  448. package/src/material/paint/default-sheet.ts +73 -0
  449. package/src/material/paint/fabric.ts +63 -0
  450. package/src/material/paint/foliage-broad.ts +126 -0
  451. package/src/material/paint/foliage-common.ts +93 -0
  452. package/src/material/paint/foliage-compound.ts +135 -0
  453. package/src/material/paint/foliage-conifer.ts +143 -0
  454. package/src/material/paint/foliage-raster.ts +196 -0
  455. package/src/material/paint/foliage.ts +23 -0
  456. package/src/material/paint/image-strip.ts +88 -0
  457. package/src/material/paint/kit.ts +37 -0
  458. package/src/material/paint/masks.ts +46 -0
  459. package/src/material/paint/metal.ts +109 -0
  460. package/src/material/paint/noise.ts +52 -0
  461. package/src/material/paint/normal.ts +52 -0
  462. package/src/material/paint/orm.ts +108 -0
  463. package/src/material/paint/planks.ts +101 -0
  464. package/src/material/paint/plates.ts +72 -0
  465. package/src/material/paint/shapes.ts +28 -0
  466. package/src/material/paint/slate.ts +52 -0
  467. package/src/material/paint/stamp.ts +40 -0
  468. package/src/material/paint/strip.ts +48 -0
  469. package/src/material/paint/surface.ts +60 -0
  470. package/src/material/paint/types.ts +94 -0
  471. package/src/material/paint/validate.ts +74 -0
  472. package/src/material/palette.ts +46 -0
  473. package/src/material/shader-godot.ts +77 -0
  474. package/src/material/shader-three.ts +103 -0
  475. package/src/material/shader.ts +100 -0
  476. package/src/material/slots.ts +18 -0
  477. package/src/material/texture-source.ts +86 -0
  478. package/src/material/trim-sheet.ts +166 -0
  479. package/src/neural/generator.ts +37 -0
  480. package/src/neural/images.ts +27 -0
  481. package/src/neural/index.ts +10 -0
  482. package/src/passes/bake-ao.ts +183 -0
  483. package/src/passes/grime.ts +37 -0
  484. package/src/passes/index.ts +8 -0
  485. package/src/passes/livery.ts +66 -0
  486. package/src/passes/optimize-cache.ts +175 -0
  487. package/src/passes/optimize-weld.ts +147 -0
  488. package/src/passes/optimize.ts +85 -0
  489. package/src/passes/ray-grid.ts +237 -0
  490. package/src/passes/weighted-normals.ts +125 -0
  491. package/src/primitives/beam.ts +60 -0
  492. package/src/primitives/bevel-box.ts +140 -0
  493. package/src/primitives/box.ts +90 -0
  494. package/src/primitives/cell.ts +115 -0
  495. package/src/primitives/check.ts +49 -0
  496. package/src/primitives/closed.ts +74 -0
  497. package/src/primitives/erosion.ts +183 -0
  498. package/src/primitives/font-5x7.ts +117 -0
  499. package/src/primitives/heightfield.ts +101 -0
  500. package/src/primitives/index.ts +56 -0
  501. package/src/primitives/lathe-facets.ts +45 -0
  502. package/src/primitives/lathe.ts +174 -0
  503. package/src/primitives/lattice.ts +131 -0
  504. package/src/primitives/loft.ts +174 -0
  505. package/src/primitives/mc-table.ts +41 -0
  506. package/src/primitives/member.ts +130 -0
  507. package/src/primitives/noise.ts +157 -0
  508. package/src/primitives/planar.ts +55 -0
  509. package/src/primitives/prism.ts +85 -0
  510. package/src/primitives/sculpt-edit.ts +212 -0
  511. package/src/primitives/sculpt-tree.ts +226 -0
  512. package/src/primitives/sculpt.ts +80 -0
  513. package/src/primitives/sdf-grid.ts +131 -0
  514. package/src/primitives/sdf-ops.ts +145 -0
  515. package/src/primitives/sdf.ts +83 -0
  516. package/src/primitives/strip-uv.ts +26 -0
  517. package/src/primitives/surface-nets.ts +161 -0
  518. package/src/primitives/sweep.ts +162 -0
  519. package/src/primitives/terrain-color.ts +85 -0
  520. package/src/primitives/terrain-grid.ts +137 -0
  521. package/src/primitives/text-layout.ts +85 -0
  522. package/src/primitives/text.ts +197 -0
  523. package/src/primitives/tiled.ts +93 -0
  524. package/src/primitives/transport.ts +85 -0
  525. package/src/primitives/triangulate.ts +42 -0
  526. package/src/primitives/value-noise.ts +62 -0
  527. package/src/qa/checks.ts +110 -0
  528. package/src/qa/clash.ts +177 -0
  529. package/src/qa/floating.ts +63 -0
  530. package/src/qa/gates.ts +126 -0
  531. package/src/qa/geometry.ts +187 -0
  532. package/src/qa/index.ts +28 -0
  533. package/src/qa/inside.ts +114 -0
  534. package/src/qa/inspect.ts +107 -0
  535. package/src/qa/lods.ts +97 -0
  536. package/src/qa/measures.ts +67 -0
  537. package/src/qa/occlusion.ts +166 -0
  538. package/src/qa/sanity.ts +137 -0
  539. package/src/qa/types.ts +17 -0
  540. package/src/render/beauty.ts +115 -0
  541. package/src/render/camera.ts +142 -0
  542. package/src/render/depth-map.ts +191 -0
  543. package/src/render/font.ts +76 -0
  544. package/src/render/ground.ts +87 -0
  545. package/src/render/index.ts +34 -0
  546. package/src/render/lighting.ts +121 -0
  547. package/src/render/lod-strip.ts +34 -0
  548. package/src/render/metrics.ts +147 -0
  549. package/src/render/options.ts +81 -0
  550. package/src/render/photo-match.ts +28 -0
  551. package/src/render/raster.ts +143 -0
  552. package/src/render/resolve.ts +109 -0
  553. package/src/render/review-prompt.ts +59 -0
  554. package/src/render/review-warnings.ts +92 -0
  555. package/src/render/review.ts +103 -0
  556. package/src/render/scene.ts +119 -0
  557. package/src/render/shade.ts +204 -0
  558. package/src/render/sheet.ts +88 -0
  559. package/src/render/texture.ts +97 -0
  560. package/src/render/thumbnail.ts +75 -0
  561. package/src/render/vis-buffer.ts +119 -0
  562. package/src/testing/assert.ts +115 -0
  563. package/src/testing/compiled.ts +31 -0
  564. package/src/testing/hash.ts +14 -0
  565. package/src/testing/index.ts +14 -0
  566. package/src/testing/snapshot.ts +37 -0
  567. package/src/types/gltf-validator.d.ts +13 -0
@@ -0,0 +1,12 @@
1
+ import type { CompiledAsset } from '../core/index.js';
2
+ export interface Finding {
3
+ readonly gate: string;
4
+ readonly part?: string;
5
+ readonly message: string;
6
+ readonly fix: string;
7
+ }
8
+ export type Gate = (asset: CompiledAsset) => Finding[];
9
+ /** Contact tolerance: surfaces closer than this touch (metres). */
10
+ export declare const CONTACT_EPS = 0.02;
11
+ /** Clash tolerance: penetration deeper than this is a clash (metres). */
12
+ export declare const CLASH_EPS = 0.01;
@@ -0,0 +1,40 @@
1
+ import { type CompiledAsset } from '../core/index.js';
2
+ import type { PaintedSheet } from '../material/index.js';
3
+ import { type PerspectiveCamera } from './camera.js';
4
+ export interface BeautyOptions {
5
+ /** Output size in pixels. Default 1600 × 900. */
6
+ readonly width?: number;
7
+ readonly height?: number;
8
+ /** Camera orbit, degrees: azimuth about Z from the front (+X), −35 = front-left 3/4. */
9
+ readonly azDeg?: number;
10
+ /** Elevation above the horizon, degrees (−10…89). Default 18. */
11
+ readonly elDeg?: number;
12
+ /** Vertical field of view, degrees. Default 30. */
13
+ readonly fovDeg?: number;
14
+ /** Samples per pixel edge (1–4). Default 2 (4 samples per pixel). */
15
+ readonly supersample?: number;
16
+ /** The painted trim sheet; default paints `DEFAULT_SHEET` at 1024² once per process. */
17
+ readonly sheet?: PaintedSheet;
18
+ /** Zoom into the default framing: window centre (0–1, 0–1) of the full shot and a zoom ≥ 1. */
19
+ readonly window?: {
20
+ readonly x: number;
21
+ readonly y: number;
22
+ readonly zoom: number;
23
+ };
24
+ /** Frame with this asset instead (e.g. LOD0's framing for a LOD2 render, so they line up). */
25
+ readonly frameFrom?: CompiledAsset;
26
+ }
27
+ export interface BeautyRender {
28
+ readonly width: number;
29
+ readonly height: number;
30
+ /** RGBA8, sRGB, opaque. */
31
+ readonly rgba: Uint8Array;
32
+ /** Asset coverage per pixel, 0–255 (the silhouette, antialiased). */
33
+ readonly mask: Uint8Array;
34
+ /** Distinct triangles visible per cell of a 16 × 9 grid — where the detail is. */
35
+ readonly detail: Uint32Array;
36
+ }
37
+ export declare function cameraFor(asset: CompiledAsset, o?: BeautyOptions): PerspectiveCamera;
38
+ export declare function renderBeauty(asset: CompiledAsset, o?: BeautyOptions): BeautyRender;
39
+ /** The beauty render as PNG bytes. */
40
+ export declare function beauty(asset: CompiledAsset, o?: BeautyOptions): Uint8Array;
@@ -0,0 +1,33 @@
1
+ export interface PerspectiveCamera {
2
+ readonly eye: readonly [number, number, number];
3
+ /** Unit right, up, forward (view direction). */
4
+ readonly r: readonly [number, number, number];
5
+ readonly u: readonly [number, number, number];
6
+ readonly f: readonly [number, number, number];
7
+ /** Pixels per unit of tan(angle) — the focal length in pixels. */
8
+ readonly focal: number;
9
+ readonly cx: number;
10
+ readonly cy: number;
11
+ readonly width: number;
12
+ readonly height: number;
13
+ }
14
+ export interface Orbit {
15
+ readonly azDeg: number;
16
+ readonly elDeg: number;
17
+ readonly fovDeg: number;
18
+ /** Fraction of the frame the asset may fill (0–1). */
19
+ readonly fill: number;
20
+ }
21
+ type V3 = [number, number, number];
22
+ /** Project world xyz → [screen x, screen y, view depth]. Depth ≤ 0 means behind the eye. */
23
+ export declare function project(c: PerspectiveCamera, x: number, y: number, z: number): V3;
24
+ /**
25
+ * Orbit camera framing `points` (xyz triples, world) in a width × height image. Iterates a few
26
+ * times: re-centre on the projected extent, then dolly so the larger axis fills `fill`.
27
+ */
28
+ export declare function frameOrbit(points: Float32Array, o: Orbit, width: number, height: number): PerspectiveCamera;
29
+ /** The same shot through a zoomed window: (nx, ny) ∈ [0,1]² is the window centre, k the zoom. */
30
+ export declare function zoomWindow(c: PerspectiveCamera, nx: number, ny: number, k: number): PerspectiveCamera;
31
+ /** Same camera at another resolution (supersampling): every pixel quantity scales by s. */
32
+ export declare function scaled(c: PerspectiveCamera, s: number): PerspectiveCamera;
33
+ export {};
@@ -0,0 +1,38 @@
1
+ import type { Scene } from './scene.js';
2
+ export interface DepthMap {
3
+ readonly size: number;
4
+ /** −Infinity where nothing was drawn. */
5
+ readonly data: Float32Array;
6
+ readonly dir: readonly [number, number, number];
7
+ readonly r: readonly [number, number, number];
8
+ readonly u: readonly [number, number, number];
9
+ /** Texel coordinate = (dot(p, r) − r0) · k, (u1 − dot(p, u)) · k. */
10
+ readonly r0: number;
11
+ readonly u1: number;
12
+ readonly k: number;
13
+ }
14
+ /** Map frame in the map's own (r, u) coordinates: centre and half-extent, metres. */
15
+ export interface MapFrame {
16
+ readonly cr: number;
17
+ readonly cu: number;
18
+ readonly half: number;
19
+ }
20
+ export type MapAlpha = (tri: number, b1: number, b2: number) => boolean;
21
+ export declare function mapAxes(dir: readonly [number, number, number]): {
22
+ r: [number, number, number];
23
+ u: [number, number, number];
24
+ };
25
+ /** The frame that just contains the scene seen along `dir`, with a 2% margin. */
26
+ export declare function fitFrame(s: Scene, dir: readonly [number, number, number]): MapFrame;
27
+ export declare function depthMap(s: Scene, dir: readonly [number, number, number], size: number, frame?: MapFrame, alpha?: MapAlpha): DepthMap;
28
+ /**
29
+ * Fraction of `taps` (pairs of texel offsets) at which world point (x,y,z) sees past the map —
30
+ * 1 = fully lit/open, 0 = fully occluded. `bias` in metres along the map direction.
31
+ */
32
+ export declare function visibility(m: DepthMap, x: number, y: number, z: number, bias: number, taps: Float32Array): number;
33
+ /**
34
+ * Ambient openness at (x,y,z) along the map direction, 0…1: an occluder `reach` metres or more
35
+ * away counts for nothing, nearer ones linearly more — AO with a falloff, so a few sky directions
36
+ * give a soft contact shadow instead of long streaks.
37
+ */
38
+ export declare function openness(m: DepthMap, x: number, y: number, z: number, bias: number, reach: number): number;
@@ -0,0 +1 @@
1
+ export declare function drawText(px: Uint8Array, width: number, x: number, y: number, text: string, scale: number, rgb: readonly [number, number, number]): void;
@@ -0,0 +1,13 @@
1
+ import type { PerspectiveCamera } from './camera.js';
2
+ import { type ShadeContext } from './shade.js';
3
+ export interface FloorGrid {
4
+ readonly z: number;
5
+ readonly x0: number;
6
+ readonly y0: number;
7
+ readonly cell: number;
8
+ readonly size: number;
9
+ readonly light: Float32Array;
10
+ }
11
+ export declare function floorGrid(c: ShadeContext, size: number): FloorGrid;
12
+ /** Floor light where the eye ray through pixel (px, py) meets the floor; 1 off the grid/above. */
13
+ export declare function floorLight(g: FloorGrid, cam: PerspectiveCamera, px: number, py: number): number;
@@ -0,0 +1,10 @@
1
+ export { type BeautyOptions, type BeautyRender, beauty, cameraFor, renderBeauty, } from './beauty.js';
2
+ export type { PerspectiveCamera } from './camera.js';
3
+ export { type LodStripOptions, lodStrip } from './lod-strip.js';
4
+ export { type ExposureStats, exposure, type MaskStats, maskIoU, maskStats, poolMask, type Silhouette, silhouette, viewFrame, } from './metrics.js';
5
+ export { checkBeautyOptions, parseSize } from './options.js';
6
+ export { type PhotoCamera, type PhotoMatchOptions, photoMatch } from './photo-match.js';
7
+ export { detailWindows, type ReviewOptions, type ReviewPack, reviewPack } from './review.js';
8
+ export { REVIEW_THRESHOLDS, type ReviewMetrics, type ReviewWarning, type ViewMetrics, } from './review-warnings.js';
9
+ export { contactSheet, type SheetOptions, VIEWS } from './sheet.js';
10
+ export { type ThumbnailOptions, thumbnail } from './thumbnail.js';
@@ -0,0 +1,47 @@
1
+ import {
2
+ checkBeautyOptions2,
3
+ parseSize2,
4
+ cameraFor2,
5
+ renderBeauty2,
6
+ beauty2,
7
+ lodStrip2,
8
+ viewFrame2,
9
+ silhouette2,
10
+ maskIoU2,
11
+ poolMask2,
12
+ maskStats2,
13
+ exposure2,
14
+ photoMatch2,
15
+ REVIEW_THRESHOLDS2,
16
+ VIEWS2,
17
+ contactSheet2,
18
+ detailWindows2,
19
+ reviewPack2,
20
+ thumbnail2
21
+ } from "../chunk-f6yme003.js";
22
+ import"../chunk-y63c6zcv.js";
23
+ import"../chunk-hg7pf34j.js";
24
+ export {
25
+ REVIEW_THRESHOLDS2 as REVIEW_THRESHOLDS,
26
+ VIEWS2 as VIEWS,
27
+ beauty2 as beauty,
28
+ cameraFor2 as cameraFor,
29
+ checkBeautyOptions2 as checkBeautyOptions,
30
+ contactSheet2 as contactSheet,
31
+ detailWindows2 as detailWindows,
32
+ exposure2 as exposure,
33
+ lodStrip2 as lodStrip,
34
+ maskIoU2 as maskIoU,
35
+ maskStats2 as maskStats,
36
+ parseSize2 as parseSize,
37
+ photoMatch2 as photoMatch,
38
+ poolMask2 as poolMask,
39
+ renderBeauty2 as renderBeauty,
40
+ reviewPack2 as reviewPack,
41
+ silhouette2 as silhouette,
42
+ thumbnail2 as thumbnail,
43
+ viewFrame2 as viewFrame
44
+ };
45
+
46
+ //# debugId=ACEDB64D436D758764756E2164756E21
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "ACEDB64D436D758764756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,27 @@
1
+ export type V3 = [number, number, number];
2
+ export interface Rig {
3
+ /** Unit vector toward the sun. */
4
+ readonly sun: V3;
5
+ readonly sunColor: V3;
6
+ readonly sky: V3;
7
+ readonly bounce: V3;
8
+ /** Unit vectors toward the sky, upper hemisphere, for the AO maps. */
9
+ readonly skyDirs: readonly V3[];
10
+ readonly exposure: number;
11
+ }
12
+ export declare function studioRig(cameraAzDeg: number): Rig;
13
+ /**
14
+ * The studio environment a reflection sees, channel `k`, along a reflection vector with up
15
+ * component `rz`: a bright cyclorama horizon fading to a cooler zenith, a dark band where the
16
+ * floor meets the wall, the lit floor below. Roughness pre-blurs it toward its mean, so polished
17
+ * metal shows the horizon line and rough metal a soft gradient — what makes metal read as metal.
18
+ */
19
+ export declare function envRadiance(rz: number, rough: number, k: number): number;
20
+ export declare function pcfTaps(radius: number): Float32Array[];
21
+ /**
22
+ * Tone curve, linear in → linear display out: identity up to 0.6 (mid-tones and the palette stay
23
+ * true), then a smooth exponential shoulder that rolls highlights into 1 without clipping.
24
+ */
25
+ export declare function tone(x: number): number;
26
+ export declare const toSrgb8: (v: number) => number;
27
+ export declare const fromSrgb: (v: number) => number;
@@ -0,0 +1,5 @@
1
+ import { type CompiledAsset } from '../core/index.js';
2
+ import { type BeautyOptions } from './beauty.js';
3
+ export interface LodStripOptions extends Omit<BeautyOptions, 'frameFrom' | 'window'> {
4
+ }
5
+ export declare function lodStrip(lods: readonly CompiledAsset[], o?: LodStripOptions): Uint8Array;
@@ -0,0 +1,37 @@
1
+ import { type CompiledAsset } from '../core/index.js';
2
+ import { type MapFrame } from './depth-map.js';
3
+ import type { View } from './raster.js';
4
+ export interface Silhouette {
5
+ readonly size: number;
6
+ /** 1 = asset, 0 = empty. */
7
+ readonly mask: Uint8Array;
8
+ }
9
+ export interface MaskStats {
10
+ /** Fraction of the image the silhouette covers. */
11
+ readonly coverage: number;
12
+ /** Fraction of the silhouette's own bounding box it fills (low = spindly or scattered). */
13
+ readonly bboxFill: number;
14
+ }
15
+ /** The frame that fits `asset` seen along `view` — pass it to silhouettes of other LODs. */
16
+ export declare function viewFrame(asset: CompiledAsset, view: View): MapFrame;
17
+ export declare function silhouette(asset: CompiledAsset, view: View, size?: number, frame?: MapFrame): Silhouette;
18
+ /** Intersection over union of two same-sized masks (nonzero = inside). Two empty masks → 1. */
19
+ export declare function maskIoU(a: Uint8Array, b: Uint8Array): number;
20
+ /** Max-pool a mask by `f` (any covered texel covers the block): the silhouette as seen from afar,
21
+ * where lattice gaps and leaf holes close up — what LOD2 has to match. */
22
+ export declare function poolMask(s: Silhouette, f: number): Silhouette;
23
+ export declare function maskStats(s: Silhouette): MaskStats;
24
+ export interface ExposureStats {
25
+ /** Fraction of the frame the asset covers. */
26
+ readonly coverage: number;
27
+ /** The asset's screen bounding box as a fraction of the frame, larger axis (≈ 0.8 when framed). */
28
+ readonly span: number;
29
+ /** Mean relative luminance (0–1, sRGB-encoded values) over asset pixels. */
30
+ readonly mean: number;
31
+ /** Standard deviation of that luminance — low = flat, unreadable shading. */
32
+ readonly contrast: number;
33
+ readonly nearBlack: number;
34
+ readonly nearWhite: number;
35
+ }
36
+ /** Exposure of a rendered RGBA image (`width` px wide) over the pixels where `mask` ≥ 128. */
37
+ export declare function exposure(rgba: Uint8Array, mask: Uint8Array, width: number): ExposureStats;
@@ -0,0 +1,28 @@
1
+ export interface CheckedBeauty {
2
+ readonly width: number;
3
+ readonly height: number;
4
+ readonly azDeg: number;
5
+ readonly elDeg: number;
6
+ readonly fovDeg: number;
7
+ readonly supersample: number;
8
+ }
9
+ interface Raw {
10
+ readonly width?: number;
11
+ readonly height?: number;
12
+ readonly azDeg?: number;
13
+ readonly elDeg?: number;
14
+ readonly fovDeg?: number;
15
+ readonly supersample?: number;
16
+ readonly window?: {
17
+ readonly x: number;
18
+ readonly y: number;
19
+ readonly zoom: number;
20
+ };
21
+ }
22
+ export declare function checkBeautyOptions(o: Raw): CheckedBeauty;
23
+ /** Parse a `WxH` size flag ("1600x900"). */
24
+ export declare function parseSize(text: string): {
25
+ width: number;
26
+ height: number;
27
+ };
28
+ export {};
@@ -0,0 +1,19 @@
1
+ import { type CompiledAsset, type Vec3 } from '../core/index.js';
2
+ export interface PhotoCamera {
3
+ /** Camera position and look-at target in asset space (metres, Z up). */
4
+ readonly eye: Vec3;
5
+ readonly target: Vec3;
6
+ /** Vertical field of view, degrees. */
7
+ readonly fovDeg: number;
8
+ }
9
+ export interface PhotoMatchOptions {
10
+ readonly photo: Uint8Array;
11
+ /** Solve the camera from ≥ 4 marked correspondences instead of passing it (planned with it). */
12
+ readonly camera: PhotoCamera;
13
+ readonly width?: number;
14
+ }
15
+ /** Returns a PNG: photo on top, model in the middle, overlay at the bottom; plus silhouette IoU. */
16
+ export declare function photoMatch(_asset: CompiledAsset, _o: PhotoMatchOptions): {
17
+ png: Uint8Array;
18
+ iou: number;
19
+ };
@@ -0,0 +1,25 @@
1
+ import type { CompiledAsset, Vec3 } from '../core/index.js';
2
+ export interface View {
3
+ readonly label: string;
4
+ /** Direction the camera looks along (world, Z up). */
5
+ readonly dir: Vec3;
6
+ readonly up: Vec3;
7
+ }
8
+ export interface Target {
9
+ readonly px: Uint8Array;
10
+ readonly depth: Float32Array;
11
+ readonly width: number;
12
+ readonly height: number;
13
+ }
14
+ export interface Camera {
15
+ project(p: Vec3): Vec3;
16
+ }
17
+ export declare function orthoCamera(view: View, centre: Vec3, extent: number, size: number): Camera;
18
+ export declare function worldParts(asset: CompiledAsset): {
19
+ positions: Float32Array;
20
+ normals: Float32Array;
21
+ colors: Float32Array;
22
+ indices: Uint32Array;
23
+ }[];
24
+ export declare function drawAsset(t: Target, cam: Camera, asset: CompiledAsset): void;
25
+ export declare function line(t: Target, a: Vec3, b: Vec3, rgb: Vec3): void;
@@ -0,0 +1,11 @@
1
+ import type { FloorGrid } from './ground.js';
2
+ import { type ShadeContext } from './shade.js';
3
+ import type { VisBuffer } from './vis-buffer.js';
4
+ export interface Resolved {
5
+ readonly width: number;
6
+ readonly height: number;
7
+ readonly rgba: Uint8Array;
8
+ readonly mask: Uint8Array;
9
+ readonly detail: Uint32Array;
10
+ }
11
+ export declare function resolve(ctx: ShadeContext, vis: VisBuffer, floor: FloorGrid, width: number, height: number, ss: number): Resolved;
@@ -0,0 +1,2 @@
1
+ import type { ReviewMetrics } from './review-warnings.js';
2
+ export declare function reviewPrompt(m: ReviewMetrics, files: readonly string[], refs?: string): string;
@@ -0,0 +1,34 @@
1
+ import type { ExposureStats, MaskStats } from './metrics.js';
2
+ export interface ViewMetrics {
3
+ readonly view: string;
4
+ readonly lod0: MaskStats;
5
+ readonly lod2: MaskStats;
6
+ /** Silhouette IoU LOD0 ↔ LOD2 as seen from afar (64² max-pooled masks, same frame). Low = popping. */
7
+ readonly lodIoU: number;
8
+ /** The same at full mask resolution (256²): lattices and foliage score low here by nature. */
9
+ readonly lodIoUExact: number;
10
+ }
11
+ export interface ReviewWarning {
12
+ readonly code: string;
13
+ readonly message: string;
14
+ readonly fix: string;
15
+ }
16
+ export interface ReviewMetrics {
17
+ readonly asset: string;
18
+ readonly triangles: readonly number[];
19
+ readonly hero: ExposureStats;
20
+ readonly views: readonly ViewMetrics[];
21
+ readonly warnings: readonly ReviewWarning[];
22
+ }
23
+ export declare const REVIEW_THRESHOLDS: {
24
+ /** LOD0 ↔ LOD2 silhouette IoU below this in any view = visible popping. */
25
+ readonly lodIoU: 0.8;
26
+ readonly heroMeanMin: 0.18;
27
+ readonly heroMeanMax: 0.85;
28
+ readonly heroContrastMin: 0.06;
29
+ readonly nearBlackMax: 0.2;
30
+ readonly nearWhiteMax: 0.1;
31
+ /** Asset spanning less of the hero frame than this: something stretches the bounds. */
32
+ readonly heroSpanMin: 0.5;
33
+ };
34
+ export declare function warningsOf(m: Omit<ReviewMetrics, 'warnings'>): ReviewWarning[];
@@ -0,0 +1,24 @@
1
+ import { type Asset } from '../core/index.js';
2
+ import type { PaintedSheet } from '../material/index.js';
3
+ import { type ReviewMetrics } from './review-warnings.js';
4
+ export interface ReviewOptions {
5
+ readonly sheet?: PaintedSheet;
6
+ readonly width?: number;
7
+ readonly height?: number;
8
+ readonly azDeg?: number;
9
+ readonly elDeg?: number;
10
+ readonly fovDeg?: number;
11
+ /** Path of the reference dossier (recipes/<name>/README.md) the prompt points the reviewer at. */
12
+ readonly refs?: string;
13
+ }
14
+ export interface ReviewPack {
15
+ /** File name (inside the review folder) → contents. */
16
+ readonly files: ReadonlyMap<string, Uint8Array | string>;
17
+ readonly metrics: ReviewMetrics;
18
+ }
19
+ /** Two zoom windows centred on the densest cells of the hero's 16 × 9 detail grid, ≥ 4 cells apart. */
20
+ export declare function detailWindows(detail: Uint32Array): {
21
+ x: number;
22
+ y: number;
23
+ }[];
24
+ export declare function reviewPack(asset: Asset, o?: ReviewOptions): ReviewPack;
@@ -0,0 +1,18 @@
1
+ import { type CompiledAsset, type Surface } from '../core/index.js';
2
+ export declare const SURFACE_CODE: Readonly<Record<Surface, number>>;
3
+ export interface Scene {
4
+ readonly positions: Float32Array;
5
+ readonly normals: Float32Array;
6
+ readonly uvs: Float32Array;
7
+ readonly colors: Float32Array;
8
+ /** Three global vertex indices per triangle. */
9
+ readonly indices: Uint32Array;
10
+ /** SURFACE_CODE per triangle. */
11
+ readonly surface: Uint8Array;
12
+ /** Per-triangle tangent frame for the normal map, 6 floats: T = dP/dU, B = −dP/dV (glTF +Y). */
13
+ readonly tangents: Float32Array;
14
+ readonly min: readonly [number, number, number];
15
+ readonly max: readonly [number, number, number];
16
+ readonly triangles: number;
17
+ }
18
+ export declare function sceneOf(asset: CompiledAsset): Scene;
@@ -0,0 +1,22 @@
1
+ import type { PerspectiveCamera } from './camera.js';
2
+ import { type DepthMap } from './depth-map.js';
3
+ import { type Rig } from './lighting.js';
4
+ import type { Scene } from './scene.js';
5
+ import { type SheetTextures } from './texture.js';
6
+ export interface ShadeContext {
7
+ readonly scene: Scene;
8
+ readonly cam: PerspectiveCamera;
9
+ readonly tex: SheetTextures;
10
+ readonly rig: Rig;
11
+ readonly sunMap: DepthMap;
12
+ readonly aoMaps: readonly DepthMap[];
13
+ readonly pcf: readonly Float32Array[];
14
+ /** AO falloff distance, metres: occluders farther than this along a sky direction don't count. */
15
+ readonly reach: number;
16
+ }
17
+ /** Sky openness at p for a surface facing n: cosine-weighted share of unoccluded sky directions. */
18
+ export declare function skyOpen(c: ShadeContext, p: readonly number[], n: readonly number[]): number;
19
+ /** Sun visibility at p (geometric normal n), PCF with one of four rotated tap sets. */
20
+ export declare function sunVisible(c: ShadeContext, p: readonly number[], n: readonly number[], set: number): number;
21
+ /** Linear radiance of triangle `t` at barycentrics (b1, b2) into out[0..2]. */
22
+ export declare function shadeSample(c: ShadeContext, t: number, b1: number, b2: number, mip: number, set: number, out: Float32Array): void;
@@ -0,0 +1,15 @@
1
+ import { type CompiledAsset, type Vec3 } from '../core/index.js';
2
+ import { type View } from './raster.js';
3
+ export declare const VIEWS: readonly View[];
4
+ export declare function bounds(asset: CompiledAsset): {
5
+ centre: Vec3;
6
+ extent: number;
7
+ min: Vec3;
8
+ max: Vec3;
9
+ };
10
+ export interface SheetOptions {
11
+ readonly cell?: number;
12
+ /** The far view's asset — compile the same recipe at LOD 2 and pass it here. */
13
+ readonly far?: CompiledAsset;
14
+ }
15
+ export declare function contactSheet(asset: CompiledAsset, o?: SheetOptions): Uint8Array;
@@ -0,0 +1,15 @@
1
+ import type { PaintedSheet } from '../material/index.js';
2
+ export interface Mip {
3
+ readonly size: number;
4
+ /** 4 floats per texel. */
5
+ readonly data: Float32Array;
6
+ }
7
+ export interface SheetTextures {
8
+ readonly size: number;
9
+ readonly albedo: readonly Mip[];
10
+ readonly normal: readonly Mip[];
11
+ readonly orm: readonly Mip[];
12
+ }
13
+ export declare function sheetTextures(sheet: PaintedSheet): SheetTextures;
14
+ /** Bilinear sample of mip `level` at (u, v) into out[0..3]. */
15
+ export declare function sample(mips: readonly Mip[], level: number, u: number, v: number, out: Float32Array): void;
@@ -0,0 +1,8 @@
1
+ import { type CompiledAsset } from '../core/index.js';
2
+ import { type View } from './raster.js';
3
+ export interface ThumbnailOptions {
4
+ /** Output edge in pixels (square). Default 512. */
5
+ readonly size?: number;
6
+ readonly view?: View;
7
+ }
8
+ export declare function thumbnail(asset: CompiledAsset, o?: ThumbnailOptions): Uint8Array;
@@ -0,0 +1,18 @@
1
+ import type { PerspectiveCamera } from './camera.js';
2
+ import type { Scene } from './scene.js';
3
+ export interface VisBuffer {
4
+ readonly width: number;
5
+ readonly height: number;
6
+ /** Triangle id per pixel, −1 = background. */
7
+ readonly tri: Int32Array;
8
+ /** Perspective-correct barycentrics of vertices 1 and 2 (vertex 0 = 1 − b1 − b2). */
9
+ readonly b1: Float32Array;
10
+ readonly b2: Float32Array;
11
+ /** 1 / view depth (larger = nearer). */
12
+ readonly invw: Float32Array;
13
+ /** Per-triangle texture mip level from its texel : pixel footprint. */
14
+ readonly mip: Uint8Array;
15
+ }
16
+ /** Return false to discard a fragment (alpha-tested cutouts). */
17
+ export type AlphaTest = (tri: number, b1: number, b2: number, mip: number) => boolean;
18
+ export declare function rasteriseVis(s: Scene, cam: PerspectiveCamera, texSize: number, alpha?: AlphaTest): VisBuffer;
@@ -0,0 +1,21 @@
1
+ import type { Asset, Lod, Measure } from '../core/index.js';
2
+ import { type Gate, type LodGate } from '../qa/index.js';
3
+ import { type LodOptions } from './compiled.js';
4
+ export interface QaOptions extends LodOptions {
5
+ /** Per-LOD gates. Default the build's DEFAULT_GATES. */
6
+ readonly gates?: readonly Gate[];
7
+ /** Chain gates over all compiled LODs. Default DEFAULT_LOD_GATES. */
8
+ readonly lodGates?: readonly LodGate[];
9
+ }
10
+ /** The same gate `t3d build` runs: every LOD passes QA, plus the LOD-chain gates. */
11
+ export declare function assertQaPass(asset: Asset, o?: QaOptions): void;
12
+ /** Triangles per LOD at or under `caps` (default: the asset's own budget). */
13
+ export declare function assertBudget(asset: Asset, caps?: readonly [number, number, number], o?: LodOptions): void;
14
+ /** Each selector (name or glob) matches at least one part at every LOD checked. */
15
+ export declare function assertParts(asset: Asset, selectors: readonly string[], o?: LodOptions): void;
16
+ /** One spec dimension at LOD0, the way the `measures` gate checks `real.measures`. */
17
+ export declare function assertMeasure(asset: Asset, m: Measure, o?: {
18
+ lod?: Lod;
19
+ }): number;
20
+ /** Every moving part sweeps clear of everything else (the `clashes` gate), at every LOD. */
21
+ export declare function assertMotionClear(asset: Asset, o?: LodOptions): void;
@@ -0,0 +1,15 @@
1
+ import { type Asset, type CompiledAsset, type Lod } from '../core/index.js';
2
+ import type { Finding } from '../qa/index.js';
3
+ export interface LodOptions {
4
+ /** LODs to check. Default all three. */
5
+ readonly lods?: readonly Lod[];
6
+ readonly seed?: number;
7
+ }
8
+ export declare const ALL_LODS: readonly Lod[];
9
+ export declare const compileLods: (asset: Asset, o?: LodOptions) => CompiledAsset[];
10
+ export declare const describeFinding: (f: Finding, lod?: Lod) => string;
11
+ /** Throw T3D_QA_FAILED listing every finding; no-op when there are none. */
12
+ export declare function failOn(what: string, found: ReadonlyArray<{
13
+ finding: Finding;
14
+ lod?: Lod;
15
+ }>): void;
@@ -0,0 +1 @@
1
+ export declare function hashBytes(bytes: Uint8Array): string;
@@ -0,0 +1,4 @@
1
+ export { assertBudget, assertMeasure, assertMotionClear, assertParts, assertQaPass, type QaOptions, } from './assert.js';
2
+ export { ALL_LODS, compileLods, describeFinding, type LodOptions } from './compiled.js';
3
+ export { hashBytes } from './hash.js';
4
+ export { assertDeterministic, type SnapshotOptions, snapshotHash } from './snapshot.js';