@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.
Files changed (524) 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 +79 -0
  13. package/CLAUDE.md +85 -0
  14. package/LICENSE +21 -0
  15. package/README.md +380 -2
  16. package/dist/chunk-11v28977.js +1575 -0
  17. package/dist/chunk-11v28977.js.map +30 -0
  18. package/dist/chunk-1ypfs7ga.js +3571 -0
  19. package/dist/chunk-1ypfs7ga.js.map +42 -0
  20. package/dist/chunk-4ddzsqtc.js +464 -0
  21. package/dist/chunk-4ddzsqtc.js.map +19 -0
  22. package/dist/chunk-a8fxakcj.js +19 -0
  23. package/dist/chunk-a8fxakcj.js.map +11 -0
  24. package/dist/chunk-gcyp9b4d.js +755 -0
  25. package/dist/chunk-gcyp9b4d.js.map +22 -0
  26. package/dist/chunk-kgvbpqqw.js +44 -0
  27. package/dist/chunk-kgvbpqqw.js.map +10 -0
  28. package/dist/chunk-kvcep7ft.js +1919 -0
  29. package/dist/chunk-kvcep7ft.js.map +43 -0
  30. package/dist/chunk-ravbb06q.js +89 -0
  31. package/dist/chunk-ravbb06q.js.map +11 -0
  32. package/dist/chunk-w1zyhj40.js +1031 -0
  33. package/dist/chunk-w1zyhj40.js.map +21 -0
  34. package/dist/chunk-wtqhq529.js +2532 -0
  35. package/dist/chunk-wtqhq529.js.map +43 -0
  36. package/dist/chunk-xnt2sdhf.js +836 -0
  37. package/dist/chunk-xnt2sdhf.js.map +17 -0
  38. package/dist/cli/args.d.ts +24 -0
  39. package/dist/cli/bin.d.ts +2 -0
  40. package/dist/cli/bin.js +307 -0
  41. package/dist/cli/bin.js.map +14 -0
  42. package/dist/cli/load.d.ts +2 -0
  43. package/dist/cli/manifest.d.ts +49 -0
  44. package/dist/cli/render-cmds.d.ts +12 -0
  45. package/dist/cli/run.d.ts +1 -0
  46. package/dist/core/asset.d.ts +10 -0
  47. package/dist/core/definition.d.ts +148 -0
  48. package/dist/core/errors.d.ts +17 -0
  49. package/dist/core/family.d.ts +23 -0
  50. package/dist/core/index.d.ts +9 -0
  51. package/dist/core/index.js +69 -0
  52. package/dist/core/index.js.map +9 -0
  53. package/dist/core/mesh.d.ts +35 -0
  54. package/dist/core/part.d.ts +114 -0
  55. package/dist/core/png.d.ts +1 -0
  56. package/dist/core/rng.d.ts +12 -0
  57. package/dist/core/transform.d.ts +20 -0
  58. package/dist/core/vec.d.ts +11 -0
  59. package/dist/core/world.d.ts +16 -0
  60. package/dist/export/bin-writer.d.ts +16 -0
  61. package/dist/export/container.d.ts +3 -0
  62. package/dist/export/glb.d.ts +38 -0
  63. package/dist/export/index.d.ts +4 -0
  64. package/dist/export/index.js +26 -0
  65. package/dist/export/index.js.map +9 -0
  66. package/dist/export/lights.d.ts +8 -0
  67. package/dist/export/materials.d.ts +23 -0
  68. package/dist/export/merge-pivots.d.ts +6 -0
  69. package/dist/export/metadata.d.ts +19 -0
  70. package/dist/export/motion.d.ts +9 -0
  71. package/dist/export/optimize-parts.d.ts +26 -0
  72. package/dist/export/primitive.d.ts +3 -0
  73. package/dist/export/tangents.d.ts +2 -0
  74. package/dist/export/textures.d.ts +22 -0
  75. package/dist/export/version.d.ts +2 -0
  76. package/dist/grammar/index.d.ts +2 -0
  77. package/dist/grammar/index.js +16 -0
  78. package/dist/grammar/index.js.map +9 -0
  79. package/dist/grammar/split.d.ts +21 -0
  80. package/dist/grammar/whyte.d.ts +5 -0
  81. package/dist/index.d.ts +11 -0
  82. package/dist/index.js +411 -0
  83. package/dist/index.js.map +9 -0
  84. package/dist/kinds/building.d.ts +44 -0
  85. package/dist/kinds/faces.d.ts +27 -0
  86. package/dist/kinds/head-armour.d.ts +9 -0
  87. package/dist/kinds/head-beard.d.ts +6 -0
  88. package/dist/kinds/head-bust.d.ts +4 -0
  89. package/dist/kinds/head-extras.d.ts +15 -0
  90. package/dist/kinds/head-face.d.ts +6 -0
  91. package/dist/kinds/head-geom.d.ts +7 -0
  92. package/dist/kinds/head-hair.d.ts +4 -0
  93. package/dist/kinds/head-layout.d.ts +29 -0
  94. package/dist/kinds/head-mesh.d.ts +27 -0
  95. package/dist/kinds/head-params.d.ts +108 -0
  96. package/dist/kinds/head-presets.d.ts +19 -0
  97. package/dist/kinds/head-rim.d.ts +10 -0
  98. package/dist/kinds/head.d.ts +39 -0
  99. package/dist/kinds/hull-lines.d.ts +65 -0
  100. package/dist/kinds/hull-skin.d.ts +6 -0
  101. package/dist/kinds/hull.d.ts +14 -0
  102. package/dist/kinds/index.d.ts +16 -0
  103. package/dist/kinds/index.js +78 -0
  104. package/dist/kinds/index.js.map +9 -0
  105. package/dist/kinds/mass.d.ts +15 -0
  106. package/dist/kinds/openings.d.ts +30 -0
  107. package/dist/kinds/planned.d.ts +6 -0
  108. package/dist/kinds/roof-chimney.d.ts +16 -0
  109. package/dist/kinds/roof-shape.d.ts +64 -0
  110. package/dist/kinds/roof.d.ts +31 -0
  111. package/dist/kinds/vegetation-fronds.d.ts +15 -0
  112. package/dist/kinds/vegetation-impostor.d.ts +9 -0
  113. package/dist/kinds/vegetation-leaves.d.ts +15 -0
  114. package/dist/kinds/vegetation-mesh.d.ts +21 -0
  115. package/dist/kinds/vegetation-params.d.ts +90 -0
  116. package/dist/kinds/vegetation-presets.d.ts +20 -0
  117. package/dist/kinds/vegetation-skeleton.d.ts +20 -0
  118. package/dist/kinds/vegetation.d.ts +42 -0
  119. package/dist/kinds/vehicle.d.ts +42 -0
  120. package/dist/material/generator.d.ts +4 -0
  121. package/dist/material/index.d.ts +4 -0
  122. package/dist/material/index.js +38 -0
  123. package/dist/material/index.js.map +9 -0
  124. package/dist/material/paint/bond.d.ts +3 -0
  125. package/dist/material/paint/canvas.d.ts +32 -0
  126. package/dist/material/paint/cell.d.ts +4 -0
  127. package/dist/material/paint/cells-round.d.ts +5 -0
  128. package/dist/material/paint/cells.d.ts +7 -0
  129. package/dist/material/paint/compose.d.ts +5 -0
  130. package/dist/material/paint/concrete.d.ts +3 -0
  131. package/dist/material/paint/courses.d.ts +31 -0
  132. package/dist/material/paint/decode-png.d.ts +6 -0
  133. package/dist/material/paint/default-sheet.d.ts +2 -0
  134. package/dist/material/paint/foliage-broad.d.ts +5 -0
  135. package/dist/material/paint/foliage-common.d.ts +35 -0
  136. package/dist/material/paint/foliage-compound.d.ts +4 -0
  137. package/dist/material/paint/foliage-conifer.d.ts +5 -0
  138. package/dist/material/paint/foliage-raster.d.ts +26 -0
  139. package/dist/material/paint/foliage.d.ts +3 -0
  140. package/dist/material/paint/masks.d.ts +3 -0
  141. package/dist/material/paint/noise.d.ts +9 -0
  142. package/dist/material/paint/normal.d.ts +8 -0
  143. package/dist/material/paint/orm.d.ts +8 -0
  144. package/dist/material/paint/planks.d.ts +3 -0
  145. package/dist/material/paint/plates.d.ts +3 -0
  146. package/dist/material/paint/shapes.d.ts +8 -0
  147. package/dist/material/paint/slate.d.ts +3 -0
  148. package/dist/material/paint/stamp.d.ts +3 -0
  149. package/dist/material/paint/strip.d.ts +3 -0
  150. package/dist/material/paint/surface.d.ts +5 -0
  151. package/dist/material/paint/types.d.ts +35 -0
  152. package/dist/material/paint/validate.d.ts +3 -0
  153. package/dist/material/palette.d.ts +12 -0
  154. package/dist/material/shader-godot.d.ts +2 -0
  155. package/dist/material/shader-three.d.ts +2 -0
  156. package/dist/material/shader.d.ts +46 -0
  157. package/dist/material/trim-sheet.d.ts +22 -0
  158. package/dist/neural/generator.d.ts +25 -0
  159. package/dist/neural/images.d.ts +17 -0
  160. package/dist/neural/index.d.ts +2 -0
  161. package/dist/neural/index.js +14 -0
  162. package/dist/neural/index.js.map +9 -0
  163. package/dist/passes/bake-ao.d.ts +17 -0
  164. package/dist/passes/grime.d.ts +15 -0
  165. package/dist/passes/index.d.ts +6 -0
  166. package/dist/passes/index.js +22 -0
  167. package/dist/passes/index.js.map +9 -0
  168. package/dist/passes/livery.d.ts +19 -0
  169. package/dist/passes/optimize-cache.d.ts +15 -0
  170. package/dist/passes/optimize-weld.d.ts +15 -0
  171. package/dist/passes/optimize.d.ts +28 -0
  172. package/dist/passes/ray-grid.d.ts +23 -0
  173. package/dist/passes/weighted-normals.d.ts +8 -0
  174. package/dist/primitives/beam.d.ts +17 -0
  175. package/dist/primitives/bevel-box.d.ts +13 -0
  176. package/dist/primitives/box.d.ts +16 -0
  177. package/dist/primitives/cell.d.ts +20 -0
  178. package/dist/primitives/check.d.ts +12 -0
  179. package/dist/primitives/closed.d.ts +11 -0
  180. package/dist/primitives/erosion.d.ts +22 -0
  181. package/dist/primitives/font-5x7.d.ts +3 -0
  182. package/dist/primitives/heightfield.d.ts +16 -0
  183. package/dist/primitives/index.d.ts +23 -0
  184. package/dist/primitives/index.js +81 -0
  185. package/dist/primitives/index.js.map +9 -0
  186. package/dist/primitives/lathe-facets.d.ts +8 -0
  187. package/dist/primitives/lathe.d.ts +26 -0
  188. package/dist/primitives/lattice.d.ts +30 -0
  189. package/dist/primitives/loft.d.ts +15 -0
  190. package/dist/primitives/mc-table.d.ts +2 -0
  191. package/dist/primitives/member.d.ts +19 -0
  192. package/dist/primitives/noise.d.ts +34 -0
  193. package/dist/primitives/planar.d.ts +10 -0
  194. package/dist/primitives/prism.d.ts +13 -0
  195. package/dist/primitives/sculpt-edit.d.ts +56 -0
  196. package/dist/primitives/sculpt-tree.d.ts +23 -0
  197. package/dist/primitives/sculpt.d.ts +27 -0
  198. package/dist/primitives/sdf-grid.d.ts +17 -0
  199. package/dist/primitives/sdf-ops.d.ts +37 -0
  200. package/dist/primitives/sdf.d.ts +21 -0
  201. package/dist/primitives/strip-uv.d.ts +11 -0
  202. package/dist/primitives/surface-nets.d.ts +7 -0
  203. package/dist/primitives/sweep.d.ts +19 -0
  204. package/dist/primitives/terrain-color.d.ts +30 -0
  205. package/dist/primitives/terrain-grid.d.ts +36 -0
  206. package/dist/primitives/text-layout.d.ts +22 -0
  207. package/dist/primitives/text.d.ts +27 -0
  208. package/dist/primitives/tiled.d.ts +22 -0
  209. package/dist/primitives/transport.d.ts +17 -0
  210. package/dist/primitives/triangulate.d.ts +2 -0
  211. package/dist/primitives/value-noise.d.ts +10 -0
  212. package/dist/qa/checks.d.ts +11 -0
  213. package/dist/qa/clash.d.ts +2 -0
  214. package/dist/qa/floating.d.ts +5 -0
  215. package/dist/qa/gates.d.ts +12 -0
  216. package/dist/qa/geometry.d.ts +21 -0
  217. package/dist/qa/index.d.ts +12 -0
  218. package/dist/qa/index.js +78 -0
  219. package/dist/qa/index.js.map +9 -0
  220. package/dist/qa/inside.d.ts +12 -0
  221. package/dist/qa/inspect.d.ts +18 -0
  222. package/dist/qa/lods.d.ts +12 -0
  223. package/dist/qa/measures.d.ts +4 -0
  224. package/dist/qa/occlusion.d.ts +3 -0
  225. package/dist/qa/sanity.d.ts +7 -0
  226. package/dist/qa/types.d.ts +12 -0
  227. package/dist/render/beauty.d.ts +40 -0
  228. package/dist/render/camera.d.ts +33 -0
  229. package/dist/render/depth-map.d.ts +38 -0
  230. package/dist/render/font.d.ts +1 -0
  231. package/dist/render/ground.d.ts +13 -0
  232. package/dist/render/index.d.ts +10 -0
  233. package/dist/render/index.js +47 -0
  234. package/dist/render/index.js.map +9 -0
  235. package/dist/render/lighting.d.ts +20 -0
  236. package/dist/render/lod-strip.d.ts +5 -0
  237. package/dist/render/metrics.d.ts +37 -0
  238. package/dist/render/options.d.ts +28 -0
  239. package/dist/render/photo-match.d.ts +19 -0
  240. package/dist/render/raster.d.ts +25 -0
  241. package/dist/render/resolve.d.ts +11 -0
  242. package/dist/render/review-prompt.d.ts +2 -0
  243. package/dist/render/review-warnings.d.ts +34 -0
  244. package/dist/render/review.d.ts +24 -0
  245. package/dist/render/scene.d.ts +18 -0
  246. package/dist/render/shade.d.ts +22 -0
  247. package/dist/render/sheet.d.ts +15 -0
  248. package/dist/render/texture.d.ts +15 -0
  249. package/dist/render/thumbnail.d.ts +8 -0
  250. package/dist/render/vis-buffer.d.ts +18 -0
  251. package/dist/testing/assert.d.ts +21 -0
  252. package/dist/testing/compiled.d.ts +15 -0
  253. package/dist/testing/hash.d.ts +1 -0
  254. package/dist/testing/index.d.ts +4 -0
  255. package/dist/testing/index.js +134 -0
  256. package/dist/testing/index.js.map +13 -0
  257. package/dist/testing/snapshot.d.ts +13 -0
  258. package/docs/README.md +52 -0
  259. package/docs/architecture/README.md +68 -0
  260. package/docs/architecture/adding-a-kind.md +44 -0
  261. package/docs/architecture/adding-a-primitive.md +49 -0
  262. package/docs/architecture/errors.md +47 -0
  263. package/docs/architecture/glb-production.md +214 -0
  264. package/docs/architecture/gltf-capabilities.md +80 -0
  265. package/docs/decisions/001-recipe-compiler-over-ai-meshes.md +27 -0
  266. package/docs/decisions/002-typescript-not-json.md +22 -0
  267. package/docs/decisions/003-shared-trim-sheet.md +21 -0
  268. package/docs/decisions/004-z-up-metres.md +21 -0
  269. package/docs/decisions/005-zero-runtime-deps.md +21 -0
  270. package/docs/decisions/006-single-package-subpath-exports.md +20 -0
  271. package/docs/decisions/007-cpu-contact-sheets.md +21 -0
  272. package/docs/decisions/008-surface-materials.md +21 -0
  273. package/docs/decisions/009-gltf-front-axis.md +21 -0
  274. package/docs/decisions/README.md +15 -0
  275. package/docs/idea/01-vision.md +117 -0
  276. package/docs/idea/02-dsl.md +343 -0
  277. package/docs/idea/03-ir.md +97 -0
  278. package/docs/idea/04-materials.md +114 -0
  279. package/docs/idea/05-agent-loop.md +141 -0
  280. package/docs/idea/06-qa.md +101 -0
  281. package/docs/idea/07-what-fits.md +45 -0
  282. package/docs/idea/08-neural-adapters.md +78 -0
  283. package/docs/idea/09-kinds.md +105 -0
  284. package/docs/landscape.md +49 -0
  285. package/docs/plans/roadmap.md +127 -0
  286. package/examples/build-with-bun.ts +41 -0
  287. package/llms.txt +47 -0
  288. package/package.json +99 -4
  289. package/recipes/README.md +38 -0
  290. package/recipes/asteroid/README.md +46 -0
  291. package/recipes/asteroid/asteroid.ts +336 -0
  292. package/recipes/boulders/README.md +28 -0
  293. package/recipes/boulders/boulders.ts +117 -0
  294. package/recipes/boxcar/README.md +46 -0
  295. package/recipes/boxcar/boxcar.ts +916 -0
  296. package/recipes/cargo_container_scifi/README.md +52 -0
  297. package/recipes/cargo_container_scifi/cargo_container_scifi.ts +461 -0
  298. package/recipes/dropship/README.md +84 -0
  299. package/recipes/dropship/dropship.ts +1144 -0
  300. package/recipes/eiffel_tower/README.md +110 -0
  301. package/recipes/eiffel_tower/eiffel_tower.ts +781 -0
  302. package/recipes/goblin_head/README.md +62 -0
  303. package/recipes/goblin_head/goblin_head.ts +36 -0
  304. package/recipes/human_head/README.md +64 -0
  305. package/recipes/human_head/human_head.ts +37 -0
  306. package/recipes/loco_440/README.md +32 -0
  307. package/recipes/loco_440/loco_440.ts +1404 -0
  308. package/recipes/material_swatches/README.md +21 -0
  309. package/recipes/material_swatches/material_swatches.ts +183 -0
  310. package/recipes/mountain_range/README.md +45 -0
  311. package/recipes/mountain_range/mountain_range.ts +128 -0
  312. package/recipes/oak/README.md +30 -0
  313. package/recipes/oak/oak.ts +19 -0
  314. package/recipes/orc_head/README.md +66 -0
  315. package/recipes/orc_head/orc_head.ts +39 -0
  316. package/recipes/palm/README.md +30 -0
  317. package/recipes/palm/palm.ts +19 -0
  318. package/recipes/pine/README.md +29 -0
  319. package/recipes/pine/pine.ts +19 -0
  320. package/recipes/signal_gantry/README.md +36 -0
  321. package/recipes/signal_gantry/signal_gantry.ts +522 -0
  322. package/recipes/station_halt/README.md +39 -0
  323. package/recipes/station_halt/station_halt.ts +722 -0
  324. package/recipes/t34/README.md +44 -0
  325. package/recipes/t34/t34.ts +1068 -0
  326. package/recipes/tiger_1/README.md +75 -0
  327. package/recipes/tiger_1/tiger_1.ts +1370 -0
  328. package/recipes/water_tower/README.md +40 -0
  329. package/recipes/water_tower/water_tower.ts +542 -0
  330. package/src/cli/args.ts +112 -0
  331. package/src/cli/bin.ts +7 -0
  332. package/src/cli/load.ts +17 -0
  333. package/src/cli/manifest.ts +89 -0
  334. package/src/cli/render-cmds.ts +66 -0
  335. package/src/cli/run.ts +168 -0
  336. package/src/core/asset.ts +128 -0
  337. package/src/core/definition.ts +149 -0
  338. package/src/core/errors.ts +45 -0
  339. package/src/core/family.ts +50 -0
  340. package/src/core/index.ts +66 -0
  341. package/src/core/mesh.ts +114 -0
  342. package/src/core/part.ts +130 -0
  343. package/src/core/png.ts +49 -0
  344. package/src/core/rng.ts +49 -0
  345. package/src/core/transform.ts +90 -0
  346. package/src/core/vec.ts +26 -0
  347. package/src/core/world.ts +80 -0
  348. package/src/export/bin-writer.ts +79 -0
  349. package/src/export/container.ts +35 -0
  350. package/src/export/glb.ts +200 -0
  351. package/src/export/index.ts +18 -0
  352. package/src/export/lights.ts +49 -0
  353. package/src/export/materials.ts +126 -0
  354. package/src/export/merge-pivots.ts +146 -0
  355. package/src/export/metadata.ts +59 -0
  356. package/src/export/motion.ts +70 -0
  357. package/src/export/optimize-parts.ts +80 -0
  358. package/src/export/primitive.ts +35 -0
  359. package/src/export/tangents.ts +75 -0
  360. package/src/export/textures.ts +88 -0
  361. package/src/export/version.ts +6 -0
  362. package/src/grammar/index.ts +4 -0
  363. package/src/grammar/split.ts +87 -0
  364. package/src/grammar/whyte.ts +20 -0
  365. package/src/index.ts +14 -0
  366. package/src/kinds/building.ts +153 -0
  367. package/src/kinds/faces.ts +138 -0
  368. package/src/kinds/head-armour.ts +151 -0
  369. package/src/kinds/head-beard.ts +133 -0
  370. package/src/kinds/head-bust.ts +221 -0
  371. package/src/kinds/head-extras.ts +150 -0
  372. package/src/kinds/head-face.ts +222 -0
  373. package/src/kinds/head-geom.ts +31 -0
  374. package/src/kinds/head-hair.ts +152 -0
  375. package/src/kinds/head-layout.ts +63 -0
  376. package/src/kinds/head-mesh.ts +157 -0
  377. package/src/kinds/head-params.ts +153 -0
  378. package/src/kinds/head-presets.ts +152 -0
  379. package/src/kinds/head-rim.ts +128 -0
  380. package/src/kinds/head.ts +171 -0
  381. package/src/kinds/hull-lines.ts +160 -0
  382. package/src/kinds/hull-skin.ts +83 -0
  383. package/src/kinds/hull.ts +209 -0
  384. package/src/kinds/index.ts +63 -0
  385. package/src/kinds/mass.ts +110 -0
  386. package/src/kinds/openings.ts +141 -0
  387. package/src/kinds/planned.ts +12 -0
  388. package/src/kinds/roof-chimney.ts +100 -0
  389. package/src/kinds/roof-shape.ts +230 -0
  390. package/src/kinds/roof.ts +250 -0
  391. package/src/kinds/vegetation-fronds.ts +126 -0
  392. package/src/kinds/vegetation-impostor.ts +118 -0
  393. package/src/kinds/vegetation-leaves.ts +168 -0
  394. package/src/kinds/vegetation-mesh.ts +174 -0
  395. package/src/kinds/vegetation-params.ts +147 -0
  396. package/src/kinds/vegetation-presets.ts +184 -0
  397. package/src/kinds/vegetation-skeleton.ts +168 -0
  398. package/src/kinds/vegetation.ts +199 -0
  399. package/src/kinds/vehicle.ts +144 -0
  400. package/src/material/generator.ts +56 -0
  401. package/src/material/index.ts +29 -0
  402. package/src/material/paint/bond.ts +60 -0
  403. package/src/material/paint/canvas.ts +91 -0
  404. package/src/material/paint/cell.ts +39 -0
  405. package/src/material/paint/cells-round.ts +119 -0
  406. package/src/material/paint/cells.ts +111 -0
  407. package/src/material/paint/compose.ts +53 -0
  408. package/src/material/paint/concrete.ts +62 -0
  409. package/src/material/paint/courses.ts +85 -0
  410. package/src/material/paint/decode-png.ts +100 -0
  411. package/src/material/paint/default-sheet.ts +61 -0
  412. package/src/material/paint/foliage-broad.ts +126 -0
  413. package/src/material/paint/foliage-common.ts +93 -0
  414. package/src/material/paint/foliage-compound.ts +135 -0
  415. package/src/material/paint/foliage-conifer.ts +143 -0
  416. package/src/material/paint/foliage-raster.ts +196 -0
  417. package/src/material/paint/foliage.ts +23 -0
  418. package/src/material/paint/masks.ts +44 -0
  419. package/src/material/paint/noise.ts +52 -0
  420. package/src/material/paint/normal.ts +52 -0
  421. package/src/material/paint/orm.ts +95 -0
  422. package/src/material/paint/planks.ts +56 -0
  423. package/src/material/paint/plates.ts +72 -0
  424. package/src/material/paint/shapes.ts +28 -0
  425. package/src/material/paint/slate.ts +52 -0
  426. package/src/material/paint/stamp.ts +40 -0
  427. package/src/material/paint/strip.ts +42 -0
  428. package/src/material/paint/surface.ts +60 -0
  429. package/src/material/paint/types.ts +51 -0
  430. package/src/material/paint/validate.ts +58 -0
  431. package/src/material/palette.ts +43 -0
  432. package/src/material/shader-godot.ts +77 -0
  433. package/src/material/shader-three.ts +103 -0
  434. package/src/material/shader.ts +100 -0
  435. package/src/material/trim-sheet.ts +100 -0
  436. package/src/neural/generator.ts +37 -0
  437. package/src/neural/images.ts +27 -0
  438. package/src/neural/index.ts +10 -0
  439. package/src/passes/bake-ao.ts +183 -0
  440. package/src/passes/grime.ts +37 -0
  441. package/src/passes/index.ts +8 -0
  442. package/src/passes/livery.ts +66 -0
  443. package/src/passes/optimize-cache.ts +175 -0
  444. package/src/passes/optimize-weld.ts +147 -0
  445. package/src/passes/optimize.ts +85 -0
  446. package/src/passes/ray-grid.ts +237 -0
  447. package/src/passes/weighted-normals.ts +125 -0
  448. package/src/primitives/beam.ts +60 -0
  449. package/src/primitives/bevel-box.ts +140 -0
  450. package/src/primitives/box.ts +90 -0
  451. package/src/primitives/cell.ts +115 -0
  452. package/src/primitives/check.ts +49 -0
  453. package/src/primitives/closed.ts +74 -0
  454. package/src/primitives/erosion.ts +183 -0
  455. package/src/primitives/font-5x7.ts +117 -0
  456. package/src/primitives/heightfield.ts +101 -0
  457. package/src/primitives/index.ts +56 -0
  458. package/src/primitives/lathe-facets.ts +45 -0
  459. package/src/primitives/lathe.ts +174 -0
  460. package/src/primitives/lattice.ts +131 -0
  461. package/src/primitives/loft.ts +174 -0
  462. package/src/primitives/mc-table.ts +41 -0
  463. package/src/primitives/member.ts +130 -0
  464. package/src/primitives/noise.ts +157 -0
  465. package/src/primitives/planar.ts +55 -0
  466. package/src/primitives/prism.ts +85 -0
  467. package/src/primitives/sculpt-edit.ts +212 -0
  468. package/src/primitives/sculpt-tree.ts +226 -0
  469. package/src/primitives/sculpt.ts +80 -0
  470. package/src/primitives/sdf-grid.ts +131 -0
  471. package/src/primitives/sdf-ops.ts +145 -0
  472. package/src/primitives/sdf.ts +83 -0
  473. package/src/primitives/strip-uv.ts +26 -0
  474. package/src/primitives/surface-nets.ts +161 -0
  475. package/src/primitives/sweep.ts +162 -0
  476. package/src/primitives/terrain-color.ts +85 -0
  477. package/src/primitives/terrain-grid.ts +137 -0
  478. package/src/primitives/text-layout.ts +85 -0
  479. package/src/primitives/text.ts +197 -0
  480. package/src/primitives/tiled.ts +93 -0
  481. package/src/primitives/transport.ts +85 -0
  482. package/src/primitives/triangulate.ts +42 -0
  483. package/src/primitives/value-noise.ts +62 -0
  484. package/src/qa/checks.ts +110 -0
  485. package/src/qa/clash.ts +177 -0
  486. package/src/qa/floating.ts +63 -0
  487. package/src/qa/gates.ts +126 -0
  488. package/src/qa/geometry.ts +187 -0
  489. package/src/qa/index.ts +28 -0
  490. package/src/qa/inside.ts +114 -0
  491. package/src/qa/inspect.ts +107 -0
  492. package/src/qa/lods.ts +97 -0
  493. package/src/qa/measures.ts +67 -0
  494. package/src/qa/occlusion.ts +166 -0
  495. package/src/qa/sanity.ts +137 -0
  496. package/src/qa/types.ts +17 -0
  497. package/src/render/beauty.ts +115 -0
  498. package/src/render/camera.ts +142 -0
  499. package/src/render/depth-map.ts +191 -0
  500. package/src/render/font.ts +76 -0
  501. package/src/render/ground.ts +87 -0
  502. package/src/render/index.ts +34 -0
  503. package/src/render/lighting.ts +95 -0
  504. package/src/render/lod-strip.ts +34 -0
  505. package/src/render/metrics.ts +147 -0
  506. package/src/render/options.ts +81 -0
  507. package/src/render/photo-match.ts +28 -0
  508. package/src/render/raster.ts +143 -0
  509. package/src/render/resolve.ts +109 -0
  510. package/src/render/review-prompt.ts +59 -0
  511. package/src/render/review-warnings.ts +92 -0
  512. package/src/render/review.ts +103 -0
  513. package/src/render/scene.ts +119 -0
  514. package/src/render/shade.ts +199 -0
  515. package/src/render/sheet.ts +88 -0
  516. package/src/render/texture.ts +97 -0
  517. package/src/render/thumbnail.ts +75 -0
  518. package/src/render/vis-buffer.ts +119 -0
  519. package/src/testing/assert.ts +115 -0
  520. package/src/testing/compiled.ts +31 -0
  521. package/src/testing/hash.ts +14 -0
  522. package/src/testing/index.ts +14 -0
  523. package/src/testing/snapshot.ts +37 -0
  524. package/src/types/gltf-validator.d.ts +13 -0
@@ -0,0 +1,2 @@
1
+ import type { Vec2 } from '../core/index.js';
2
+ export declare function triangulate(poly: readonly Vec2[]): [number, number, number][];
@@ -0,0 +1,10 @@
1
+ import type { Rng } from '../core/index.js';
2
+ import type { Field } from './sdf-ops.js';
3
+ /**
4
+ * Seeded fractal value noise in [−1, 1]: `scale` = metres per feature, `octaves` halve the scale
5
+ * and amplitude each time. Same Rng state → same field, bit for bit.
6
+ */
7
+ export declare function valueNoise(rng: Rng, o?: {
8
+ readonly scale?: number;
9
+ readonly octaves?: number;
10
+ }): Field;
@@ -0,0 +1,11 @@
1
+ import type { Check, CheckFinding } from '../core/index.js';
2
+ /** Nothing matching `a` sinks into anything matching `b` (closed solids), with optional min gap. */
3
+ export declare const clear: (a: string, b: string, minGap?: number) => Check;
4
+ /** No two parts matching the selector interpenetrate (interleaved wheels, stacked crates). */
5
+ export declare const noOverlap: (selector: string) => Check;
6
+ /** `a` must touch `b` (surface within 2 cm): a turret sits on its ring, a lamp on its post. */
7
+ export declare const touches: (a: string, b: string, eps?: number) => Check;
8
+ /** Every part containing `left` has a mirror part (with `right`) reflected across the axis plane. */
9
+ export declare const symmetric: (left: string, right: string, axis?: 'x' | 'y' | 'z', tol?: number) => Check;
10
+ /** Run a recipe's checks; the QA gate calls this. */
11
+ export declare const runChecks: (asset: Parameters<Check>[0]) => CheckFinding[];
@@ -0,0 +1,2 @@
1
+ import { type Gate } from './types.js';
2
+ export declare const clashes: Gate;
@@ -0,0 +1,5 @@
1
+ import { type Mesh } from '../core/index.js';
2
+ import { TriangleGrid } from './geometry.js';
3
+ import { type Gate } from './types.js';
4
+ export declare function touching(a: Mesh, b: Mesh, grid: TriangleGrid, eps?: number): boolean;
5
+ export declare const floatingParts: Gate;
@@ -0,0 +1,12 @@
1
+ import { type CompiledAsset } from '../core/index.js';
2
+ import type { Finding, Gate } from './types.js';
3
+ export declare const triangleBudget: Gate;
4
+ export declare const partNames: Gate;
5
+ /** Overall bounding box vs the recipe's `real` dimensions: catches a 6 m tank modelled at 7.4 m. */
6
+ export declare const proportions: Gate;
7
+ /** Planned gates, signatures fixed: docs/idea/06-qa.md. */
8
+ export declare const silhouetteIoU: (_asset: CompiledAsset, _referencePng: Uint8Array) => number;
9
+ /** The recipe's own `checks`, each finding reported under the gate name `check`. */
10
+ export declare const recipeChecks: Gate;
11
+ export declare const DEFAULT_GATES: readonly Gate[];
12
+ export declare function runQa(asset: CompiledAsset, gates?: readonly Gate[]): Finding[];
@@ -0,0 +1,21 @@
1
+ import { type Mesh, type Vec3 } from '../core/index.js';
2
+ export declare function triangle(m: Mesh, t: number): [Vec3, Vec3, Vec3];
3
+ /** Distance from p to triangle abc (Ericson, Real-Time Collision Detection §5.1.5). */
4
+ export declare function pointTriangleDistance(p: Vec3, a: Vec3, b: Vec3, c: Vec3): number;
5
+ /** Triangles bucketed by a uniform grid, so a point only tests its neighbourhood. */
6
+ export declare class TriangleGrid {
7
+ private readonly cells;
8
+ /** Cell edge: 25 cm for props and vehicles, growing with big meshes (a 330 m tower) so one
9
+ * long triangle never lands in 10⁵ cells. */
10
+ private readonly cell;
11
+ private readonly tris;
12
+ /** Per-triangle AABB (min xyz, max xyz) for a cheap reject before the exact distance. */
13
+ private readonly boxes;
14
+ private readonly stamp;
15
+ private query;
16
+ constructor(mesh: Mesh);
17
+ /** Distance from p to the nearest triangle, if one is within `radius`; else Infinity. */
18
+ nearest(p: Vec3, radius: number): number;
19
+ }
20
+ /** Vertices plus points along every edge every `step` metres (catches crossing members). */
21
+ export declare function surfaceSamples(m: Mesh, step?: number, maxPerEdge?: number): Vec3[];
@@ -0,0 +1,12 @@
1
+ export { clear, noOverlap, runChecks, symmetric, touches } from './checks.js';
2
+ export { clashes } from './clash.js';
3
+ export { floatingParts, touching } from './floating.js';
4
+ export { DEFAULT_GATES, partNames, proportions, runQa, silhouetteIoU, triangleBudget, } from './gates.js';
5
+ export { pointTriangleDistance, surfaceSamples, TriangleGrid } from './geometry.js';
6
+ export { insideSolid } from './inside.js';
7
+ export { glob, type Inspector, inspect, type Penetration } from './inspect.js';
8
+ export { DEFAULT_LOD_GATES, type LodGate, lodPivots, lodSilhouette, lodTriangles, runLodQa, } from './lods.js';
9
+ export { measure, measures } from './measures.js';
10
+ export { hiddenParts, zFighting } from './occlusion.js';
11
+ export { degenerateTriangles, nonFinite, normalsMatchWinding, vertexColors } from './sanity.js';
12
+ export { CLASH_EPS, CONTACT_EPS, type Finding, type Gate } from './types.js';
@@ -0,0 +1,78 @@
1
+ import {
2
+ pointTriangleDistance2,
3
+ TriangleGrid2,
4
+ surfaceSamples2,
5
+ insideSolid2,
6
+ glob2,
7
+ inspect2,
8
+ clear2,
9
+ noOverlap2,
10
+ touches2,
11
+ symmetric2,
12
+ runChecks2,
13
+ CONTACT_EPS2,
14
+ CLASH_EPS2,
15
+ clashes2,
16
+ touching2,
17
+ floatingParts2,
18
+ measure2,
19
+ measures2,
20
+ zFighting2,
21
+ hiddenParts2,
22
+ nonFinite2,
23
+ vertexColors2,
24
+ normalsMatchWinding2,
25
+ degenerateTriangles2,
26
+ triangleBudget2,
27
+ partNames2,
28
+ proportions2,
29
+ silhouetteIoU2,
30
+ DEFAULT_GATES2,
31
+ runQa2,
32
+ lodTriangles2,
33
+ lodSilhouette2,
34
+ lodPivots2,
35
+ DEFAULT_LOD_GATES2,
36
+ runLodQa2
37
+ } from "../chunk-w1zyhj40.js";
38
+ import"../chunk-4ddzsqtc.js";
39
+ export {
40
+ CLASH_EPS2 as CLASH_EPS,
41
+ CONTACT_EPS2 as CONTACT_EPS,
42
+ DEFAULT_GATES2 as DEFAULT_GATES,
43
+ DEFAULT_LOD_GATES2 as DEFAULT_LOD_GATES,
44
+ TriangleGrid2 as TriangleGrid,
45
+ clashes2 as clashes,
46
+ clear2 as clear,
47
+ degenerateTriangles2 as degenerateTriangles,
48
+ floatingParts2 as floatingParts,
49
+ glob2 as glob,
50
+ hiddenParts2 as hiddenParts,
51
+ insideSolid2 as insideSolid,
52
+ inspect2 as inspect,
53
+ lodPivots2 as lodPivots,
54
+ lodSilhouette2 as lodSilhouette,
55
+ lodTriangles2 as lodTriangles,
56
+ measure2 as measure,
57
+ measures2 as measures,
58
+ noOverlap2 as noOverlap,
59
+ nonFinite2 as nonFinite,
60
+ normalsMatchWinding2 as normalsMatchWinding,
61
+ partNames2 as partNames,
62
+ pointTriangleDistance2 as pointTriangleDistance,
63
+ proportions2 as proportions,
64
+ runChecks2 as runChecks,
65
+ runLodQa2 as runLodQa,
66
+ runQa2 as runQa,
67
+ silhouetteIoU2 as silhouetteIoU,
68
+ surfaceSamples2 as surfaceSamples,
69
+ symmetric2 as symmetric,
70
+ touches2 as touches,
71
+ touching2 as touching,
72
+ triangleBudget2 as triangleBudget,
73
+ vertexColors2 as vertexColors,
74
+ zFighting2 as zFighting
75
+ };
76
+
77
+ //# debugId=D85390BDB209BC4364756E2164756E21
78
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "D85390BDB209BC4364756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,12 @@
1
+ import { type Mesh, type Vec3 } from '../core/index.js';
2
+ export declare class SolidIndex {
3
+ private readonly tri;
4
+ private readonly columns;
5
+ private readonly cell;
6
+ constructor(mesh: Mesh);
7
+ /** Odd number of crossings of the ray from p along +axis ⇒ inside (for that ray). */
8
+ private parity;
9
+ inside(point: Vec3): boolean;
10
+ }
11
+ /** One-off query; build a SolidIndex yourself when testing many points against one mesh. */
12
+ export declare const insideSolid: (p: Vec3, m: Mesh) => boolean;
@@ -0,0 +1,18 @@
1
+ import { type Bounds, type CompiledAsset, type Mesh } from '../core/index.js';
2
+ export declare const glob: (pattern: string) => RegExp;
3
+ export interface Penetration {
4
+ /** Deepest sampled point of A inside B's solid, metres (0 = none). */
5
+ readonly depth: number;
6
+ readonly samples: number;
7
+ }
8
+ export interface Inspector {
9
+ readonly asset: CompiledAsset;
10
+ parts(selector: string): string[];
11
+ mesh(selector: string): Mesh | null;
12
+ bounds(selector: string): Bounds | null;
13
+ /** Smallest surface-to-surface distance (0 when touching or intersecting), capped at `max`. */
14
+ distance(a: string, b: string, max?: number): number;
15
+ /** How deep A's surface goes inside B's closed solid. */
16
+ penetration(a: string, b: string): Penetration;
17
+ }
18
+ export declare function inspect(asset: CompiledAsset): Inspector;
@@ -0,0 +1,12 @@
1
+ import { type CompiledAsset } from '../core/index.js';
2
+ import type { Finding } from './types.js';
3
+ /** A gate over the whole LOD chain, index = LOD. */
4
+ export type LodGate = (lods: readonly CompiledAsset[]) => Finding[];
5
+ export declare const lodTriangles: LodGate;
6
+ /** LOD1/LOD2 overall box within `tol` of LOD0's span per side (min 5 cm). */
7
+ export declare const lodSilhouette: (tol?: number) => LodGate;
8
+ export declare const lodPivots: LodGate;
9
+ /** Default chain gates: only what every gallery recipe passes today. `lodSilhouette` and
10
+ * `lodPivots` are opt-in until the recipes they flag are fixed (see their findings). */
11
+ export declare const DEFAULT_LOD_GATES: readonly LodGate[];
12
+ export declare function runLodQa(lods: readonly CompiledAsset[], gates?: readonly LodGate[]): Finding[];
@@ -0,0 +1,4 @@
1
+ import { type CompiledAsset, type Measure } from '../core/index.js';
2
+ import type { Gate } from './types.js';
3
+ export declare function measure(asset: CompiledAsset, m: Measure): number | null;
4
+ export declare const measures: Gate;
@@ -0,0 +1,3 @@
1
+ import type { Gate } from './types.js';
2
+ export declare const zFighting: Gate;
3
+ export declare const hiddenParts: Gate;
@@ -0,0 +1,7 @@
1
+ import type { Gate } from './types.js';
2
+ export declare const nonFinite: Gate;
3
+ export declare const vertexColors: Gate;
4
+ /** Shading normals must agree with the winding (the side a renderer culls/lights). */
5
+ export declare const normalsMatchWinding: Gate;
6
+ /** Zero-area triangles: invisible, but they cost index bandwidth and skew QA sampling. */
7
+ export declare const degenerateTriangles: Gate;
@@ -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 512² 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-11v28977.js";
22
+ import"../chunk-kvcep7ft.js";
23
+ import"../chunk-4ddzsqtc.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,20 @@
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
+ export declare function pcfTaps(radius: number): Float32Array[];
14
+ /**
15
+ * Tone curve, linear in → linear display out: identity up to 0.6 (mid-tones and the palette stay
16
+ * true), then a smooth exponential shoulder that rolls highlights into 1 without clipping.
17
+ */
18
+ export declare function tone(x: number): number;
19
+ export declare const toSrgb8: (v: number) => number;
20
+ 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;