@call-me-sensei/toonlab 0.3.1 → 0.4.20

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 (761) hide show
  1. package/NPM-LIBRARY.md +225 -0
  2. package/README.md +588 -184
  3. package/agents/PROMPTS.md +87 -0
  4. package/agents/README.md +54 -0
  5. package/agents/claude/CLAUDE.md +8 -0
  6. package/agents/codex/AGENTS.md +159 -0
  7. package/agents/cursor/toonlab.mdc +37 -0
  8. package/agents/references/anime-art-direction.md +24 -0
  9. package/agents/references/asset-sourcing-policy.md +23 -0
  10. package/agents/references/custom-gap-report.md +16 -0
  11. package/agents/references/mcp-asset-discovery.md +104 -0
  12. package/agents/references/runtime-entry-points.md +175 -0
  13. package/agents/references/style-bundles.md +71 -0
  14. package/agents/skills/claude/asset-sourcing/SKILL.md +275 -0
  15. package/agents/skills/claude/environment/SKILL.md +59 -0
  16. package/agents/skills/claude/game-dev/SKILL.md +100 -0
  17. package/agents/skills/claude/post-processing/SKILL.md +44 -0
  18. package/agents/skills/claude/rock-ground-shaders/SKILL.md +134 -0
  19. package/agents/skills/claude/rockgen/SKILL.md +30 -0
  20. package/agents/skills/claude/scene-style-application/SKILL.md +74 -0
  21. package/agents/skills/claude/style-presets/SKILL.md +101 -0
  22. package/agents/skills/claude/toon-shading/SKILL.md +44 -0
  23. package/agents/skills/claude/vegetation-sky/SKILL.md +167 -0
  24. package/agents/skills/claude/visual-verification/SKILL.md +136 -0
  25. package/agents/skills/claude/water/SKILL.md +105 -0
  26. package/agents/skills/codex/asset-sourcing/SKILL.md +275 -0
  27. package/agents/skills/codex/environment/SKILL.md +59 -0
  28. package/agents/skills/codex/game-dev/SKILL.md +100 -0
  29. package/agents/skills/codex/post-processing/SKILL.md +44 -0
  30. package/agents/skills/codex/rock-ground-shaders/SKILL.md +134 -0
  31. package/agents/skills/codex/rockgen/SKILL.md +30 -0
  32. package/agents/skills/codex/scene-style-application/SKILL.md +74 -0
  33. package/agents/skills/codex/style-presets/SKILL.md +101 -0
  34. package/agents/skills/codex/toon-shading/SKILL.md +44 -0
  35. package/agents/skills/codex/vegetation-sky/SKILL.md +167 -0
  36. package/agents/skills/codex/visual-verification/SKILL.md +136 -0
  37. package/agents/skills/codex/water/SKILL.md +105 -0
  38. package/cli/toonlab.mjs +53 -0
  39. package/compose.yaml +20 -0
  40. package/database/apply-sql.mjs +141 -0
  41. package/database/client.mjs +39 -0
  42. package/database/creation-tags.mjs +23 -0
  43. package/database/env.mjs +16 -0
  44. package/database/fal-patina.mjs +131 -0
  45. package/database/generation-service.mjs +415 -0
  46. package/database/migrations/0001_local_workspace.sql +120 -0
  47. package/database/migrations/0002_file_ownership.sql +11 -0
  48. package/database/migrations/0003_remove_autosaves_from_library.sql +7 -0
  49. package/database/migrations/0004_catalog_asset_packs.sql +39 -0
  50. package/database/migrations/0005_creation_tag_discovery.sql +1 -0
  51. package/database/migrations/0006_normalize_creation_tags.sql +28 -0
  52. package/database/migrations/0007_creation_revisions.sql +80 -0
  53. package/database/migrations/0008_creation_revision_hardening.sql +98 -0
  54. package/database/migrations/0009_creation_revision_delete_integrity.sql +11 -0
  55. package/database/migrations/0010_external_catalog_assets.sql +28 -0
  56. package/database/providers.mjs +644 -0
  57. package/database/repository.mjs +1073 -0
  58. package/database/seeds/catalog/0001_empty_official_catalog.sql +4 -0
  59. package/database/seeds/catalog/0002_2026-08.sql +19454 -0
  60. package/database/seeds/catalog/0003_2026-08-open-assets.sql +159086 -0
  61. package/database/seeds/catalog/0004_2026-08-c7-rocks.sql +39405 -0
  62. package/mcp/lab-management.mjs +629 -0
  63. package/mcp/public-catalog.mjs +168 -0
  64. package/mcp/server.mjs +1044 -63
  65. package/mcp/vite-plugin.mjs +519 -26
  66. package/mcp/workspace.mjs +26 -1
  67. package/package.json +334 -46
  68. package/scripts/generate-catalog-seed.mjs +324 -0
  69. package/scripts/setup-local.mjs +128 -0
  70. package/src/agents/index.js +7 -0
  71. package/src/agents/sceneStyleOperations.js +169 -0
  72. package/src/asset-policy/catalogLicenses.js +102 -0
  73. package/src/asset-policy/index.js +315 -0
  74. package/src/assetlib/assetRef.js +1 -1
  75. package/src/assetlib/galleryMaterialFamily.js +165 -0
  76. package/src/assetlib/index.js +6 -2
  77. package/src/assetlib/loadImported.js +15 -1
  78. package/src/assetlib/plateau.js +188 -0
  79. package/src/assetlib/plateauLandmarks.js +144 -0
  80. package/src/assetlib/plateauViewer.js +348 -0
  81. package/src/assetlib/sources.js +16 -2
  82. package/src/catalog/manifest.js +11 -1
  83. package/src/catalog/officialCatalog.js +4 -0
  84. package/src/catalog/officialCatalogAssetRuntime.js +324 -0
  85. package/src/catalog/officialCatalogLod.js +183 -0
  86. package/src/catalog/officialCatalogPlacement.js +243 -0
  87. package/src/catalog/officialCatalogProvider.js +334 -0
  88. package/src/character/animationRetarget.js +1084 -0
  89. package/src/character/characterRig.js +6 -1
  90. package/src/character/characterRuntime.js +544 -0
  91. package/src/character/groundStabilizer.js +137 -0
  92. package/src/character/index.js +8 -0
  93. package/src/character/locomotionActions.js +74 -0
  94. package/src/character/locomotionStateMachine.js +241 -0
  95. package/src/character/mannequinAsset.js +15 -0
  96. package/src/character/mannequinAssetUrl.browser.js +4 -0
  97. package/src/character/mannequinAssetUrl.node.js +3 -0
  98. package/src/character/modelLoader.js +92 -12
  99. package/src/character/walkableCharacterRuntime.js +284 -0
  100. package/src/character/waterInteractionController.js +217 -0
  101. package/src/cloud/ambientSkyBaker.js +248 -0
  102. package/src/cloud/cloudLighting.js +1114 -0
  103. package/src/cloud/cloudParams.js +819 -0
  104. package/src/cloud/cloudReprojection.js +563 -0
  105. package/src/cloud/cloudStyle.js +780 -0
  106. package/src/cloud/cloudStyleSnapshots.js +387 -0
  107. package/src/cloud/cloudVolume.js +1903 -0
  108. package/src/cloud/heroCloudRecipe.js +404 -0
  109. package/src/cloud/index.js +42 -0
  110. package/src/cloud/noise/baseShapeVolume.js +331 -0
  111. package/src/cloud/noise/cirrusMap.js +131 -0
  112. package/src/cloud/noise/curlNoise.js +289 -0
  113. package/src/cloud/noise/erosionVolume.js +188 -0
  114. package/src/cloud/noise/noiseVolume.js +202 -0
  115. package/src/cloud/noise/periodicNoise3.js +295 -0
  116. package/src/cloud/noise/weatherMap.js +470 -0
  117. package/src/cloud/paramSchema.js +458 -0
  118. package/src/collisionMetadata.js +320 -0
  119. package/src/core/systemStylePolicy.js +32 -0
  120. package/src/environment/dayCurves.js +146 -0
  121. package/src/environment/environmentGroundFieldPass.js +354 -0
  122. package/src/environment/environmentMaterialAdapter.js +144 -6
  123. package/src/environment/environmentPresets.js +486 -90
  124. package/src/environment/environmentRigs.js +17 -2
  125. package/src/environment/environmentSettings.js +37 -1
  126. package/src/environment/environmentShaderMaterials.js +37 -6
  127. package/src/environment/environmentState.js +133 -0
  128. package/src/environment/environmentSunShadowPass.js +399 -6
  129. package/src/environment/environmentTextureResolver.js +7 -0
  130. package/src/environment/index.js +51 -0
  131. package/src/environment/manufacturedMaterialContract.js +837 -0
  132. package/src/environment/manufacturedReflectionProvider.js +114 -0
  133. package/src/environment/scanAssetStylize.js +4 -4
  134. package/src/environment/surfaceMaterialModes.js +71 -0
  135. package/src/environment/toonLabEnvironmentMaterials.js +353 -0
  136. package/src/environment/toonLabMaterialPassCoupling.js +347 -0
  137. package/src/environment/toonLabNormalIntegration.js +171 -0
  138. package/src/environment/toonLabRockMaterialResolver.js +592 -0
  139. package/src/environment/toonLabSourceDefaultLit.js +444 -0
  140. package/src/environment/toonLabSourceLibrary.js +762 -0
  141. package/src/environment/toonLabSourceMaterials.js +3718 -0
  142. package/src/environment/toonLabSourceSubsurfaceLighting.js +415 -0
  143. package/src/environment/toonLabSourceTemporal.js +717 -0
  144. package/src/environment/toonLabSurfaceLighting.js +462 -0
  145. package/src/environment/toonLabTextureReadiness.js +105 -0
  146. package/src/environment/toonLabTreeMaterials.js +450 -0
  147. package/src/environment/transparentMaterialProfile.js +87 -0
  148. package/src/environment/urbanPropMaterial.js +2976 -0
  149. package/src/ground-shader/groundPrintLayer.js +375 -0
  150. package/src/ground-shader/groundShaderMaterial.js +851 -0
  151. package/src/ground-shader/groundShaderSettings.js +468 -0
  152. package/src/ground-shader/index.js +3 -0
  153. package/src/index.js +52 -22
  154. package/src/lighting/callMeSenseiLightingContract.js +163 -0
  155. package/src/lighting/index.js +14 -7
  156. package/src/lighting/lightingCapabilities.js +2 -2
  157. package/src/lighting/lightingPresets.js +6 -3
  158. package/src/lighting/lightingStyle.js +41 -6
  159. package/src/lighting/lightingSystem.js +200 -6
  160. package/src/lighting/{unrealExport.js → toonLabExport.js} +40 -41
  161. package/src/post/postProcessing.js +71 -12
  162. package/src/react/index.js +66 -0
  163. package/src/renderer/index.js +16 -0
  164. package/src/renderer/rendererConfiguration.js +250 -0
  165. package/src/renderer/styleComparison.js +985 -0
  166. package/src/rock-shader/index.js +8 -0
  167. package/src/rock-shader/rockGeometryDetail.js +701 -0
  168. package/src/rock-shader/rockMaterial.js +2586 -0
  169. package/src/rock-shader/rockRegionRuntime.js +185 -0
  170. package/src/rock-shader/rockSemanticMaterialRuntime.js +337 -0
  171. package/src/rock-shader/rockShaderRuntime.js +781 -0
  172. package/src/rock-shader/rockShaderSettings.js +1099 -0
  173. package/src/rock-shader/rockTangentIntegrity.js +136 -0
  174. package/src/rock-shader/rockTextureIntegrity.js +115 -0
  175. package/src/rockgen/export/glbExport.js +104 -14
  176. package/src/rockgen/index.js +5 -3
  177. package/src/rockgen/lod/index.js +6 -0
  178. package/src/rockgen/lod/rockLodMetrics.js +168 -0
  179. package/src/rockgen/lod/rockLodPlanner.js +372 -0
  180. package/src/rockgen/lod/rockLodPolicy.js +235 -0
  181. package/src/rockgen/lod/rockLodRuntime.js +124 -0
  182. package/src/rockgen/lod/rockLodSimplifier.js +173 -0
  183. package/src/rockgen/lod/rockLodValidation.js +113 -0
  184. package/src/rockgen/mesh/meshAttributes.js +17 -0
  185. package/src/rockgen/mesh/meshDocument.js +6 -0
  186. package/src/rockgen/rockDocument.js +376 -9
  187. package/src/rockgen/rockgenPresets.js +114 -13
  188. package/src/rockgen/rockgenSettings.js +62 -11
  189. package/src/rockgen/surface/c7GeologySurface.js +372 -0
  190. package/src/runtime/index.js +14 -0
  191. package/src/runtime/sceneCollisionRuntime.js +317 -0
  192. package/src/runtime/sceneSurfaceRuntime.js +451 -0
  193. package/src/runtime/sceneUpdateScheduler.js +203 -0
  194. package/src/shaders-tsl/anime.js +9 -2
  195. package/src/shaders-tsl/chunks/environment-ground-field.js +174 -0
  196. package/src/shaders-tsl/chunks/environment-state.js +79 -0
  197. package/src/shaders-tsl/chunks/environment-sun-shadow.js +99 -32
  198. package/src/shaders-tsl/chunks/normalized-hue.js +41 -0
  199. package/src/shaders-tsl/chunks/pass-depth-color.js +4 -2
  200. package/src/shaders-tsl/chunks/scene-depth-color-pass.js +273 -0
  201. package/src/shaders-tsl/chunks/vegetation-style.js +116 -8
  202. package/src/shaders-tsl/chunks/water-color.js +19 -5
  203. package/src/shaders-tsl/chunks/water-shore-state.js +8 -1
  204. package/src/shaders-tsl/chunks/world-noise.js +30 -0
  205. package/src/shaders-tsl/environment.js +123 -17
  206. package/src/shaders-tsl/flower.js +51 -8
  207. package/src/shaders-tsl/grass.js +194 -29
  208. package/src/shaders-tsl/post-composite.js +83 -2
  209. package/src/shaders-tsl/tree-leaf.js +107 -16
  210. package/src/shaders-tsl/water-breaker.js +18 -4
  211. package/src/shaders-tsl/water.js +51 -3
  212. package/src/shaders-tsl/woody-surface.js +59 -7
  213. package/src/sky/atmosphereDome.js +193 -0
  214. package/src/sky/atmosphereParams.js +396 -0
  215. package/src/sky/atmosphereScattering.js +593 -0
  216. package/src/sky/atmosphereSky.js +371 -0
  217. package/src/sky/cloudShadow.js +379 -0
  218. package/src/sky/godRays.js +257 -0
  219. package/src/sky/index.js +55 -1
  220. package/src/sky/nightSky.js +1190 -0
  221. package/src/sky/renderLayers.js +120 -0
  222. package/src/sky/skyColor.js +582 -0
  223. package/src/sky/skyDayCycle.js +244 -0
  224. package/src/sky/skyParams.js +661 -0
  225. package/src/sky/skyPresets.js +772 -0
  226. package/src/sky/skyQualityTiers.js +383 -0
  227. package/src/sky/skyShaderSettings.js +699 -0
  228. package/src/sky/skyStyleSnapshots.js +211 -0
  229. package/src/sky/skySystem.js +1447 -0
  230. package/src/sky/skyTimeKeyframes.js +361 -0
  231. package/src/sky/stylizedSky.js +405 -116
  232. package/src/sky/sunDriver.js +499 -0
  233. package/src/sky/timeOfDay.js +335 -0
  234. package/src/styles/animeGameProfile.js +44 -0
  235. package/src/styles/index.js +157 -0
  236. package/src/styles/manufacturedStyleLabeling.js +204 -0
  237. package/src/styles/neutralStylePresets.js +712 -0
  238. package/src/styles/sceneLayerDocuments.js +185 -0
  239. package/src/styles/sceneLookComposition.js +156 -0
  240. package/src/styles/sceneQualityApplication.js +152 -0
  241. package/src/styles/sceneQualityProfiles.js +268 -0
  242. package/src/styles/sceneStyleAudit.js +512 -0
  243. package/src/styles/sceneStyleRuntime.js +923 -0
  244. package/src/styles/styleAdapters.js +177 -0
  245. package/src/styles/styleApplication.js +369 -0
  246. package/src/styles/styleBundle.js +445 -92
  247. package/src/styles/styleBundleProvider.js +83 -0
  248. package/src/styles/styleDomains.js +21 -0
  249. package/src/styles/styleInspector.js +262 -0
  250. package/src/styles/styleMaterialContract.js +375 -0
  251. package/src/styles/styleMetadata.js +73 -0
  252. package/src/styles/styleTargetDiscovery.js +162 -0
  253. package/src/styles/styleTargetLabels.js +206 -0
  254. package/src/styles/styleTargetMaterialCoverage.js +137 -0
  255. package/src/styles/styleTransaction.js +272 -0
  256. package/src/texgen/evaluateTexture.js +30 -3
  257. package/src/texgen/textureGenerators.js +83 -35
  258. package/src/texgen/textureSettings.js +25 -8
  259. package/src/toon/toonSettings.js +100 -2
  260. package/src/vegetation/branchTree.js +587 -0
  261. package/src/vegetation/callMeSenseiGrass.js +183 -0
  262. package/src/vegetation/compiledTree.js +506 -0
  263. package/src/vegetation/contactShadowField.js +107 -0
  264. package/src/vegetation/flowerSpecies.js +10 -2
  265. package/src/vegetation/grass.js +13 -0
  266. package/src/vegetation/grassClump.js +1179 -0
  267. package/src/vegetation/importedVegetationMaterial.js +183 -0
  268. package/src/vegetation/index.js +17 -1
  269. package/src/vegetation/legacyTreePresets.js +120 -0
  270. package/src/vegetation/scatter.js +688 -3
  271. package/src/vegetation/stylizedBush.js +14 -0
  272. package/src/vegetation/stylizedFlower.js +31 -0
  273. package/src/vegetation/stylizedFlowers.js +59 -7
  274. package/src/vegetation/stylizedForest.js +455 -147
  275. package/src/vegetation/stylizedGrass.js +188 -24
  276. package/src/vegetation/stylizedTree.js +676 -54
  277. package/src/vegetation/stylizedTreeFoliage.js +1111 -38
  278. package/src/vegetation/stylizedUnderstory.js +230 -0
  279. package/src/vegetation/treeExport.js +262 -47
  280. package/src/vegetation/treeSurfaceTextures.js +665 -0
  281. package/src/vegetation/vegetationShaders.js +617 -28
  282. package/src/version.js +3 -0
  283. package/src/water/water.js +2 -0
  284. package/src/water/waterBreakerSystem.js +2 -0
  285. package/src/water/waterCurrentField.js +1 -0
  286. package/src/water/waterMaterial.js +3 -0
  287. package/src/water/waterRain.js +2 -0
  288. package/src/water/waterScenePasses.js +170 -7
  289. package/src/water/waterSettings.js +250 -50
  290. package/src/water/waterShoreMaterial.js +16 -2
  291. package/src/water/waterShoreStateField.js +1 -1
  292. package/src/water/waterSplashSystem.js +2 -0
  293. package/src/water/waterStageSettings.js +60 -0
  294. package/src/water/waterSurface.js +144 -4
  295. package/src/water/waterUnderwaterAtmosphere.js +288 -0
  296. package/src/water/waterVegetation.js +20 -4
  297. package/src/worldCollision.js +64 -9
  298. package/types/agents/index.d.ts +1 -0
  299. package/types/agents/sceneStyleOperations.d.ts +484 -0
  300. package/types/asset-policy/catalogLicenses.d.ts +7 -0
  301. package/types/asset-policy/index.d.ts +20 -0
  302. package/types/assetlib/ambientcg.d.ts +81 -0
  303. package/types/assetlib/assetRef.d.ts +26 -0
  304. package/types/assetlib/galleryMaterialFamily.d.ts +13 -0
  305. package/types/assetlib/importedEntry.d.ts +18 -0
  306. package/types/assetlib/index.d.ts +16 -0
  307. package/types/assetlib/kaykit.d.ts +112 -0
  308. package/types/assetlib/kaykitStaticIndex.d.ts +38 -0
  309. package/types/assetlib/loadImported.d.ts +56 -0
  310. package/types/assetlib/opensource3d.d.ts +55 -0
  311. package/types/assetlib/plateau.d.ts +67 -0
  312. package/types/assetlib/plateauLandmarks.d.ts +238 -0
  313. package/types/assetlib/plateauViewer.d.ts +3 -0
  314. package/types/assetlib/polyhaven.d.ts +90 -0
  315. package/types/assetlib/polypizza.d.ts +10 -0
  316. package/types/assetlib/smithsonian.d.ts +9 -0
  317. package/types/assetlib/sources.d.ts +22 -0
  318. package/types/assetlib/zip.d.ts +8 -0
  319. package/types/catalog/manifest.d.ts +26 -0
  320. package/types/catalog/officialCatalog.d.ts +4 -0
  321. package/types/catalog/officialCatalogAssetRuntime.d.ts +2 -0
  322. package/types/catalog/officialCatalogLod.d.ts +63 -0
  323. package/types/catalog/officialCatalogPlacement.d.ts +49 -0
  324. package/types/catalog/officialCatalogProvider.d.ts +7 -0
  325. package/types/character/animationRetarget.d.ts +20 -0
  326. package/types/character/characterRig.d.ts +87 -0
  327. package/types/character/characterRuntime.d.ts +5 -0
  328. package/types/character/freestyleSwimClip.d.ts +5 -0
  329. package/types/character/groundStabilizer.d.ts +55 -0
  330. package/types/character/index.d.ts +10 -0
  331. package/types/character/locomotionActions.d.ts +4 -0
  332. package/types/character/locomotionStateMachine.d.ts +62 -0
  333. package/types/character/mannequinAsset.d.ts +12 -0
  334. package/types/character/mannequinAssetUrl.node.d.ts +1 -0
  335. package/types/character/modelLoader.d.ts +7 -0
  336. package/types/character/walkableCharacterRuntime.d.ts +343 -0
  337. package/types/character/waterInteractionController.d.ts +114 -0
  338. package/types/cloud/ambientSkyBaker.d.ts +18 -0
  339. package/types/cloud/cloudLighting.d.ts +38 -0
  340. package/types/cloud/cloudParams.d.ts +18 -0
  341. package/types/cloud/cloudReprojection.d.ts +15 -0
  342. package/types/cloud/cloudStyle.d.ts +1380 -0
  343. package/types/cloud/cloudStyleSnapshots.d.ts +10 -0
  344. package/types/cloud/cloudVolume.d.ts +43 -0
  345. package/types/cloud/heroCloudRecipe.d.ts +167 -0
  346. package/types/cloud/index.d.ts +12 -0
  347. package/types/cloud/noise/baseShapeVolume.d.ts +86 -0
  348. package/types/cloud/noise/cirrusMap.d.ts +24 -0
  349. package/types/cloud/noise/curlNoise.d.ts +106 -0
  350. package/types/cloud/noise/erosionVolume.d.ts +58 -0
  351. package/types/cloud/noise/noiseVolume.d.ts +63 -0
  352. package/types/cloud/noise/periodicNoise3.d.ts +75 -0
  353. package/types/cloud/noise/weatherMap.d.ts +227 -0
  354. package/types/cloud/paramSchema.d.ts +142 -0
  355. package/types/collisionMetadata.d.ts +11 -0
  356. package/types/core/generation.d.ts +95 -0
  357. package/types/core/materialRoles.d.ts +102 -0
  358. package/types/core/presetDocuments.d.ts +25 -0
  359. package/types/core/systemStylePolicy.d.ts +4 -0
  360. package/types/environment/dayCurves.d.ts +47 -0
  361. package/types/environment/environmentAmbientProbe.d.ts +2 -0
  362. package/types/environment/environmentGroundFieldPass.d.ts +2 -0
  363. package/types/environment/environmentMaterialAdapter.d.ts +44 -0
  364. package/types/environment/environmentMaterialClassifier.d.ts +26 -0
  365. package/types/environment/environmentPlanarReflection.d.ts +3 -0
  366. package/types/environment/environmentPresets.d.ts +171 -0
  367. package/types/environment/environmentRigs.d.ts +13 -0
  368. package/types/environment/environmentSettings.d.ts +161 -0
  369. package/types/environment/environmentShaderMaterials.d.ts +14 -0
  370. package/types/environment/environmentState.d.ts +6 -0
  371. package/types/environment/environmentSunShadowPass.d.ts +2 -0
  372. package/types/environment/environmentTextureResolver.d.ts +30 -0
  373. package/types/environment/environmentTimeOfDay.d.ts +25 -0
  374. package/types/environment/environmentVertexAo.d.ts +18 -0
  375. package/types/environment/index.d.ts +27 -0
  376. package/types/environment/manufacturedMaterialContract.d.ts +129 -0
  377. package/types/environment/manufacturedReflectionProvider.d.ts +3 -0
  378. package/types/environment/scanAssetStylize.d.ts +43 -0
  379. package/types/environment/surfaceMaterialModes.d.ts +14 -0
  380. package/types/environment/toonLabEnvironmentMaterials.d.ts +139 -0
  381. package/types/environment/toonLabMaterialPassCoupling.d.ts +7 -0
  382. package/types/environment/toonLabNormalIntegration.d.ts +29 -0
  383. package/types/environment/toonLabRockMaterialResolver.d.ts +270 -0
  384. package/types/environment/toonLabSourceDefaultLit.d.ts +136 -0
  385. package/types/environment/toonLabSourceLibrary.d.ts +19 -0
  386. package/types/environment/toonLabSourceMaterials.d.ts +14 -0
  387. package/types/environment/toonLabSourceSubsurfaceLighting.d.ts +85 -0
  388. package/types/environment/toonLabSourceTemporal.d.ts +20 -0
  389. package/types/environment/toonLabSurfaceLighting.d.ts +153 -0
  390. package/types/environment/toonLabTextureReadiness.d.ts +8 -0
  391. package/types/environment/toonLabTreeMaterials.d.ts +7 -0
  392. package/types/environment/transparentMaterialProfile.d.ts +76 -0
  393. package/types/environment/urbanPropMaterial.d.ts +25 -0
  394. package/types/ground-shader/groundPrintLayer.d.ts +4 -0
  395. package/types/ground-shader/groundShaderMaterial.d.ts +11 -0
  396. package/types/ground-shader/groundShaderSettings.d.ts +90 -0
  397. package/types/ground-shader/index.d.ts +3 -0
  398. package/types/index.d.ts +1591 -0
  399. package/types/lighting/callMeSenseiLightingContract.d.ts +14 -0
  400. package/types/lighting/colorIntensity.d.ts +44 -0
  401. package/types/lighting/index.d.ts +12 -0
  402. package/types/lighting/lightDescriptors.d.ts +803 -0
  403. package/types/lighting/lightingCapabilities.d.ts +85 -0
  404. package/types/lighting/lightingDocuments.d.ts +140 -0
  405. package/types/lighting/lightingFixtures.d.ts +171 -0
  406. package/types/lighting/lightingGenerator.d.ts +403 -0
  407. package/types/lighting/lightingPresets.d.ts +264 -0
  408. package/types/lighting/lightingRuntime.d.ts +401 -0
  409. package/types/lighting/lightingStyle.d.ts +156 -0
  410. package/types/lighting/lightingSystem.d.ts +440 -0
  411. package/types/lighting/toonLabExport.d.ts +46 -0
  412. package/types/lighting/utils.d.ts +18 -0
  413. package/types/loaders/index.d.ts +1 -0
  414. package/types/post/index.d.ts +2 -0
  415. package/types/post/postGenerator.d.ts +282 -0
  416. package/types/post/postProcessing.d.ts +16 -0
  417. package/types/react/index.d.ts +1785 -0
  418. package/types/renderer/index.d.ts +2 -0
  419. package/types/renderer/rendererConfiguration.d.ts +8 -0
  420. package/types/renderer/styleComparison.d.ts +409 -0
  421. package/types/rock-shader/index.d.ts +8 -0
  422. package/types/rock-shader/rockGeometryDetail.d.ts +300 -0
  423. package/types/rock-shader/rockMaterial.d.ts +21 -0
  424. package/types/rock-shader/rockRegionRuntime.d.ts +86 -0
  425. package/types/rock-shader/rockSemanticMaterialRuntime.d.ts +29 -0
  426. package/types/rock-shader/rockShaderRuntime.d.ts +10 -0
  427. package/types/rock-shader/rockShaderSettings.d.ts +184 -0
  428. package/types/rock-shader/rockTangentIntegrity.d.ts +51 -0
  429. package/types/rock-shader/rockTextureIntegrity.d.ts +61 -0
  430. package/types/rockgen/export/glbExport.d.ts +58 -0
  431. package/types/rockgen/heightfield/heightfieldErosion.d.ts +10 -0
  432. package/types/rockgen/heightfield/heightfieldPatch.d.ts +15 -0
  433. package/types/rockgen/heightfield/stylizedErosionSim.d.ts +41 -0
  434. package/types/rockgen/index.d.ts +12 -0
  435. package/types/rockgen/lod/index.d.ts +6 -0
  436. package/types/rockgen/lod/rockLodMetrics.d.ts +62 -0
  437. package/types/rockgen/lod/rockLodPlanner.d.ts +86 -0
  438. package/types/rockgen/lod/rockLodPolicy.d.ts +76 -0
  439. package/types/rockgen/lod/rockLodRuntime.d.ts +95 -0
  440. package/types/rockgen/lod/rockLodSimplifier.d.ts +15 -0
  441. package/types/rockgen/lod/rockLodValidation.d.ts +16 -0
  442. package/types/rockgen/mesh/meshAttributes.d.ts +32 -0
  443. package/types/rockgen/mesh/meshDocument.d.ts +40 -0
  444. package/types/rockgen/mesh/surfaceNets.d.ts +42 -0
  445. package/types/rockgen/noise/cellularNoise3.d.ts +24 -0
  446. package/types/rockgen/noise/prng.d.ts +16 -0
  447. package/types/rockgen/noise/simplexNoise3.d.ts +2 -0
  448. package/types/rockgen/noise/valueNoise3.d.ts +12 -0
  449. package/types/rockgen/rockDocument.d.ts +243 -0
  450. package/types/rockgen/rockHelpers.d.ts +2 -0
  451. package/types/rockgen/rockgenPresets.d.ts +10 -0
  452. package/types/rockgen/rockgenSettings.d.ts +531 -0
  453. package/types/rockgen/sdf/fieldCompiler.d.ts +20 -0
  454. package/types/rockgen/sdf/sculptEdits.d.ts +30 -0
  455. package/types/rockgen/sdf/sdfModifiers.d.ts +19 -0
  456. package/types/rockgen/sdf/sdfOps.d.ts +8 -0
  457. package/types/rockgen/sdf/sdfPrimitives.d.ts +22 -0
  458. package/types/rockgen/surface/c7GeologySurface.d.ts +8 -0
  459. package/types/runtime/index.d.ts +3 -0
  460. package/types/runtime/sceneCollisionRuntime.d.ts +94 -0
  461. package/types/runtime/sceneSurfaceRuntime.d.ts +90 -0
  462. package/types/runtime/sceneUpdateScheduler.d.ts +28 -0
  463. package/types/shaders-tsl/anime.d.ts +9 -0
  464. package/types/shaders-tsl/chunks/character-color.d.ts +6 -0
  465. package/types/shaders-tsl/chunks/character-highlights.d.ts +12 -0
  466. package/types/shaders-tsl/chunks/character-lighting.d.ts +20 -0
  467. package/types/shaders-tsl/chunks/character-material-maps.d.ts +18 -0
  468. package/types/shaders-tsl/chunks/character-roles.d.ts +21 -0
  469. package/types/shaders-tsl/chunks/character-scene-lights.d.ts +48 -0
  470. package/types/shaders-tsl/chunks/character-shadow-color.d.ts +5 -0
  471. package/types/shaders-tsl/chunks/character-skinning.d.ts +23 -0
  472. package/types/shaders-tsl/chunks/environment-color.d.ts +9 -0
  473. package/types/shaders-tsl/chunks/environment-debug.d.ts +24 -0
  474. package/types/shaders-tsl/chunks/environment-ground-field.d.ts +40 -0
  475. package/types/shaders-tsl/chunks/environment-lighting.d.ts +22 -0
  476. package/types/shaders-tsl/chunks/environment-state.d.ts +42 -0
  477. package/types/shaders-tsl/chunks/environment-sun-shadow.d.ts +19 -0
  478. package/types/shaders-tsl/chunks/foliage-fog.d.ts +21 -0
  479. package/types/shaders-tsl/chunks/normalized-hue.d.ts +1 -0
  480. package/types/shaders-tsl/chunks/pass-depth-color.d.ts +20 -0
  481. package/types/shaders-tsl/chunks/projected-water-caustics.d.ts +24 -0
  482. package/types/shaders-tsl/chunks/scene-depth-color-pass.d.ts +39 -0
  483. package/types/shaders-tsl/chunks/stylized-cloud-shadow.d.ts +9 -0
  484. package/types/shaders-tsl/chunks/vegetation-style.d.ts +60 -0
  485. package/types/shaders-tsl/chunks/water-color.d.ts +15 -0
  486. package/types/shaders-tsl/chunks/water-common.d.ts +9 -0
  487. package/types/shaders-tsl/chunks/water-foam.d.ts +8 -0
  488. package/types/shaders-tsl/chunks/water-lighting.d.ts +9 -0
  489. package/types/shaders-tsl/chunks/water-ripple.d.ts +8 -0
  490. package/types/shaders-tsl/chunks/water-shore-state.d.ts +7 -0
  491. package/types/shaders-tsl/chunks/water-waves.d.ts +18 -0
  492. package/types/shaders-tsl/chunks/world-noise.d.ts +4 -0
  493. package/types/shaders-tsl/environment-ao-overlay.d.ts +5 -0
  494. package/types/shaders-tsl/environment.d.ts +34 -0
  495. package/types/shaders-tsl/flower.d.ts +6 -0
  496. package/types/shaders-tsl/grass.d.ts +4 -0
  497. package/types/shaders-tsl/post-composite.d.ts +25 -0
  498. package/types/shaders-tsl/sky.d.ts +4 -0
  499. package/types/shaders-tsl/tree-leaf.d.ts +2 -0
  500. package/types/shaders-tsl/water-breaker.d.ts +15 -0
  501. package/types/shaders-tsl/water-kelp.d.ts +5 -0
  502. package/types/shaders-tsl/water-rain.d.ts +10 -0
  503. package/types/shaders-tsl/water-shore-state-simulation.d.ts +12 -0
  504. package/types/shaders-tsl/water-simulation.d.ts +5 -0
  505. package/types/shaders-tsl/water-splash.d.ts +12 -0
  506. package/types/shaders-tsl/water.d.ts +22 -0
  507. package/types/shaders-tsl/woody-surface.d.ts +3 -0
  508. package/types/sky/atmosphereDome.d.ts +2 -0
  509. package/types/sky/atmosphereParams.d.ts +185 -0
  510. package/types/sky/atmosphereScattering.d.ts +11 -0
  511. package/types/sky/atmosphereSky.d.ts +2 -0
  512. package/types/sky/cloudShadow.d.ts +69 -0
  513. package/types/sky/godRays.d.ts +5 -0
  514. package/types/sky/index.d.ts +18 -0
  515. package/types/sky/nightSky.d.ts +22 -0
  516. package/types/sky/renderLayers.d.ts +59 -0
  517. package/types/sky/sceneOverrideLayers.d.ts +10 -0
  518. package/types/sky/skyColor.d.ts +704 -0
  519. package/types/sky/skyDayCycle.d.ts +86 -0
  520. package/types/sky/skyParams.d.ts +3407 -0
  521. package/types/sky/skyPresets.d.ts +160 -0
  522. package/types/sky/skyQuality.d.ts +21 -0
  523. package/types/sky/skyQualityTiers.d.ts +223 -0
  524. package/types/sky/skyShaderSettings.d.ts +152 -0
  525. package/types/sky/skyStyleSnapshots.d.ts +11 -0
  526. package/types/sky/skySystem.d.ts +3 -0
  527. package/types/sky/skyTimeKeyframes.d.ts +230 -0
  528. package/types/sky/stylizedSky.d.ts +341 -0
  529. package/types/sky/sunDriver.d.ts +15 -0
  530. package/types/sky/timeOfDay.d.ts +145 -0
  531. package/types/styles/animeGameProfile.d.ts +27 -0
  532. package/types/styles/index.d.ts +18 -0
  533. package/types/styles/manufacturedStyleLabeling.d.ts +119 -0
  534. package/types/styles/neutralStylePresets.d.ts +944 -0
  535. package/types/styles/sceneLayerDocuments.d.ts +145 -0
  536. package/types/styles/sceneLookComposition.d.ts +53 -0
  537. package/types/styles/sceneQualityApplication.d.ts +34 -0
  538. package/types/styles/sceneQualityProfiles.d.ts +13 -0
  539. package/types/styles/sceneStyleAudit.d.ts +80 -0
  540. package/types/styles/sceneStyleRuntime.d.ts +1802 -0
  541. package/types/styles/styleAdapters.d.ts +14 -0
  542. package/types/styles/styleApplication.d.ts +47 -0
  543. package/types/styles/styleBundle.d.ts +19 -0
  544. package/types/styles/styleBundleProvider.d.ts +44 -0
  545. package/types/styles/styleDomains.d.ts +18 -0
  546. package/types/styles/styleInspector.d.ts +59 -0
  547. package/types/styles/styleMaterialContract.d.ts +46 -0
  548. package/types/styles/styleMetadata.d.ts +11 -0
  549. package/types/styles/styleTargetDiscovery.d.ts +48 -0
  550. package/types/styles/styleTargetLabels.d.ts +32 -0
  551. package/types/styles/styleTargetMaterialCoverage.d.ts +20 -0
  552. package/types/styles/styleTransaction.d.ts +10 -0
  553. package/types/styles/styleTypes.d.ts +66 -0
  554. package/types/texgen/evaluateTexture.d.ts +40 -0
  555. package/types/texgen/index.d.ts +7 -0
  556. package/types/texgen/noise2.d.ts +46 -0
  557. package/types/texgen/textureAi.d.ts +6 -0
  558. package/types/texgen/textureGenerators.d.ts +261 -0
  559. package/types/texgen/texturePresets.d.ts +45 -0
  560. package/types/texgen/textureSettings.d.ts +121 -0
  561. package/types/texgen/textureThree.d.ts +13 -0
  562. package/types/toon/characterRenderPasses.d.ts +3 -0
  563. package/types/toon/index.d.ts +3 -0
  564. package/types/toon/settings/alphaSettings.d.ts +125 -0
  565. package/types/toon/settings/averageShadowSettings.d.ts +39 -0
  566. package/types/toon/settings/baseTextureSettings.d.ts +39 -0
  567. package/types/toon/settings/celShadeSettings.d.ts +37 -0
  568. package/types/toon/settings/contactShadowSettings.d.ts +30 -0
  569. package/types/toon/settings/eyeHighlightSettings.d.ts +55 -0
  570. package/types/toon/settings/faceLightingSettings.d.ts +32 -0
  571. package/types/toon/settings/furSettings.d.ts +23 -0
  572. package/types/toon/settings/glitterSettings.d.ts +43 -0
  573. package/types/toon/settings/hairHighlightSettings.d.ts +89 -0
  574. package/types/toon/settings/indirectLightSettings.d.ts +43 -0
  575. package/types/toon/settings/localLightSettings.d.ts +46 -0
  576. package/types/toon/settings/materialMapSettings.d.ts +86 -0
  577. package/types/toon/settings/outlineSettings.d.ts +125 -0
  578. package/types/toon/settings/perspectiveRemovalSettings.d.ts +14 -0
  579. package/types/toon/settings/rimLightSettings.d.ts +79 -0
  580. package/types/toon/settings/sceneShadowSettings.d.ts +32 -0
  581. package/types/toon/settings/selfShadowSettings.d.ts +44 -0
  582. package/types/toon/settings/shadowColorSettings.d.ts +77 -0
  583. package/types/toon/settings/skinToneSettings.d.ts +30 -0
  584. package/types/toon/settings/specularSettings.d.ts +96 -0
  585. package/types/toon/settings/stickerSettings.d.ts +40 -0
  586. package/types/toon/toonMaterialAdapter.d.ts +883 -0
  587. package/types/toon/toonSettings.d.ts +1182 -0
  588. package/types/vegetation/branchTree.d.ts +14 -0
  589. package/types/vegetation/callMeSenseiGrass.d.ts +8 -0
  590. package/types/vegetation/compiledTree.d.ts +75 -0
  591. package/types/vegetation/contactShadowField.d.ts +26 -0
  592. package/types/vegetation/flowerSpecies.d.ts +107 -0
  593. package/types/vegetation/grass.d.ts +4 -0
  594. package/types/vegetation/grassClump.d.ts +7 -0
  595. package/types/vegetation/grassPalettes.d.ts +29 -0
  596. package/types/vegetation/importedVegetationMaterial.d.ts +13 -0
  597. package/types/vegetation/index.d.ts +225 -0
  598. package/types/vegetation/legacyTreePresets.d.ts +22 -0
  599. package/types/vegetation/scatter.d.ts +13 -0
  600. package/types/vegetation/stylizedBush.d.ts +2 -0
  601. package/types/vegetation/stylizedFlower.d.ts +2 -0
  602. package/types/vegetation/stylizedFlowers.d.ts +8 -0
  603. package/types/vegetation/stylizedForest.d.ts +3 -0
  604. package/types/vegetation/stylizedGrass.d.ts +21 -0
  605. package/types/vegetation/stylizedTree.d.ts +20 -0
  606. package/types/vegetation/stylizedTreeFoliage.d.ts +19 -0
  607. package/types/vegetation/stylizedUnderstory.d.ts +50 -0
  608. package/types/vegetation/treeExport.d.ts +6 -0
  609. package/types/vegetation/treeSurfaceTextures.d.ts +72 -0
  610. package/types/vegetation/vegetationShaders.d.ts +74 -0
  611. package/types/version.d.ts +1 -0
  612. package/types/water/index.d.ts +1 -0
  613. package/types/water/sceneOverrideLayers.d.ts +16 -0
  614. package/types/water/water.d.ts +17 -0
  615. package/types/water/waterBreakerSystem.d.ts +46 -0
  616. package/types/water/waterCurrentField.d.ts +115 -0
  617. package/types/water/waterInteraction.d.ts +21 -0
  618. package/types/water/waterMaterial.d.ts +60 -0
  619. package/types/water/waterNearshorePhase.d.ts +5 -0
  620. package/types/water/waterRain.d.ts +17 -0
  621. package/types/water/waterRippleSimulation.d.ts +52 -0
  622. package/types/water/waterScenePasses.d.ts +70 -0
  623. package/types/water/waterSettings.d.ts +648 -0
  624. package/types/water/waterShoreMaterial.d.ts +3 -0
  625. package/types/water/waterShoreStateField.d.ts +2 -0
  626. package/types/water/waterSplashSystem.d.ts +2 -0
  627. package/types/water/waterStageSettings.d.ts +9 -0
  628. package/types/water/waterSurface.d.ts +2 -0
  629. package/types/water/waterUnderwaterAtmosphere.d.ts +103 -0
  630. package/types/water/waterVegetation.d.ts +16 -0
  631. package/types/worldCollision.d.ts +22 -0
  632. package/AGENTS.md +0 -254
  633. package/ATTRIBUTION.md +0 -78
  634. package/docs/characters.md +0 -144
  635. package/docs/debug-panel.md +0 -126
  636. package/docs/docs.css +0 -589
  637. package/docs/environment.md +0 -186
  638. package/docs/getting-started.md +0 -180
  639. package/docs/index.html +0 -14
  640. package/docs/lab-architecture.md +0 -100
  641. package/docs/lighting.md +0 -825
  642. package/docs/main.jsx +0 -752
  643. package/docs/mcp.md +0 -97
  644. package/docs/post-processing.md +0 -98
  645. package/docs/settings-reference.md +0 -1878
  646. package/docs/shader-constants.md +0 -77
  647. package/docs/sky.md +0 -182
  648. package/docs/style-labs.md +0 -309
  649. package/docs/texture-lab.md +0 -135
  650. package/docs/toon-shading.md +0 -183
  651. package/docs/tsl-conventions.md +0 -167
  652. package/docs/vegetation-sky.md +0 -275
  653. package/docs/water.md +0 -430
  654. package/docs/weather.md +0 -200
  655. package/docs/world-scale.md +0 -111
  656. package/mcp/style-lab-tools.mjs +0 -371
  657. package/src/ambientfx/INTEGRATION.md +0 -164
  658. package/src/ambientfx/ambientFxPresets.js +0 -83
  659. package/src/ambientfx/ambientFxSettings.js +0 -368
  660. package/src/ambientfx/emitters.js +0 -169
  661. package/src/ambientfx/index.js +0 -5
  662. package/src/ambientfx/particleBackbone.js +0 -493
  663. package/src/ambientfx/stylizedAmbientFx.js +0 -450
  664. package/src/biome/biomeGenerator.js +0 -385
  665. package/src/biome/biomeRuntime.js +0 -299
  666. package/src/biome/index.js +0 -2
  667. package/src/buildinggen/buildingAsset.js +0 -44
  668. package/src/buildinggen/buildingGrammar.js +0 -311
  669. package/src/buildinggen/buildingMesh.js +0 -451
  670. package/src/buildinggen/buildingPresets.js +0 -46
  671. package/src/buildinggen/buildingRecipe.js +0 -100
  672. package/src/buildinggen/buildingSettings.js +0 -238
  673. package/src/buildinggen/index.js +0 -6
  674. package/src/camera/cameraDirector.js +0 -157
  675. package/src/camera/cameraGenerator.js +0 -367
  676. package/src/camera/cameraRig.js +0 -570
  677. package/src/camera/cameraSettings.js +0 -236
  678. package/src/camera/index.js +0 -7
  679. package/src/catalog/builtinEntries.js +0 -245
  680. package/src/catalog/catalog.js +0 -210
  681. package/src/catalog/index.js +0 -3
  682. package/src/core/shaderBackend.js +0 -24
  683. package/src/debrisgen/debrisFields.js +0 -544
  684. package/src/debrisgen/debrisGenerator.js +0 -1929
  685. package/src/debrisgen/debrisPalettes.js +0 -71
  686. package/src/debrisgen/debrisPhysics.js +0 -198
  687. package/src/debrisgen/debrisPresets.js +0 -162
  688. package/src/debrisgen/debrisSettings.js +0 -333
  689. package/src/debrisgen/debrisTextures.js +0 -380
  690. package/src/debrisgen/index.js +0 -5
  691. package/src/debug/fieldValues.js +0 -95
  692. package/src/debug/index.js +0 -7
  693. package/src/debug/settingsPanel.js +0 -170
  694. package/src/fauna/INTEGRATION.md +0 -174
  695. package/src/fauna/boids.js +0 -861
  696. package/src/fauna/faunaBodies.js +0 -492
  697. package/src/fauna/faunaPresets.js +0 -52
  698. package/src/fauna/faunaSettings.js +0 -525
  699. package/src/fauna/index.js +0 -5
  700. package/src/fauna/stylizedFauna.js +0 -395
  701. package/src/game-feel/gameFeelGenerator.js +0 -402
  702. package/src/game-feel/gameFeelRuntime.js +0 -549
  703. package/src/game-feel/index.js +0 -2
  704. package/src/motion/index.js +0 -5
  705. package/src/motion/motionClip.js +0 -441
  706. package/src/motion/motionController.js +0 -628
  707. package/src/motion/motionDocuments.js +0 -225
  708. package/src/motion/motionGraph.js +0 -307
  709. package/src/motion/motionSettings.js +0 -222
  710. package/src/pathgen/index.js +0 -7
  711. package/src/pathgen/pathBridge.js +0 -232
  712. package/src/pathgen/pathPresets.js +0 -35
  713. package/src/pathgen/pathRibbon.js +0 -410
  714. package/src/pathgen/pathRouter.js +0 -380
  715. package/src/pathgen/pathSettings.js +0 -335
  716. package/src/pathgen/pathTextures.js +0 -123
  717. package/src/pathgen/stylizedPaths.js +0 -453
  718. package/src/propgen/generatorsWave1.js +0 -379
  719. package/src/propgen/generatorsWave2.js +0 -462
  720. package/src/propgen/index.js +0 -5
  721. package/src/propgen/propAsset.js +0 -323
  722. package/src/propgen/propParts.js +0 -170
  723. package/src/propgen/propPlacement.js +0 -459
  724. package/src/propgen/propPresets.js +0 -82
  725. package/src/propgen/propSettings.js +0 -395
  726. package/src/soundscape/index.js +0 -4
  727. package/src/soundscape/soundscapeGenerator.js +0 -179
  728. package/src/soundscape/soundscapeRuntime.js +0 -806
  729. package/src/soundscape/soundscapeSettings.js +0 -292
  730. package/src/stylizedTerrain.js +0 -631
  731. package/src/stylizedWorld.js +0 -903
  732. package/src/vegetation/treeRecipe.js +0 -647
  733. package/src/vfxgen/INTEGRATION.md +0 -145
  734. package/src/vfxgen/core/burstBackbone.js +0 -380
  735. package/src/vfxgen/core/projectileCore.js +0 -92
  736. package/src/vfxgen/core/spriteShapes.js +0 -98
  737. package/src/vfxgen/core/trailRibbon.js +0 -272
  738. package/src/vfxgen/core/vfxRandom.js +0 -29
  739. package/src/vfxgen/effects/emitHelpers.js +0 -37
  740. package/src/vfxgen/effects/magicEffects.js +0 -162
  741. package/src/vfxgen/effects/movementEffects.js +0 -87
  742. package/src/vfxgen/effects/weaponEffects.js +0 -118
  743. package/src/vfxgen/index.js +0 -18
  744. package/src/vfxgen/moves/moveController.js +0 -146
  745. package/src/vfxgen/moves/moveLibrary.js +0 -335
  746. package/src/vfxgen/vfxPresets.js +0 -98
  747. package/src/vfxgen/vfxSettings.js +0 -384
  748. package/src/vfxgen/vfxSystem.js +0 -449
  749. package/src/vfxgen/weapons/stylizedWeapons.js +0 -137
  750. package/src/villagegen/index.js +0 -4
  751. package/src/villagegen/stylizedVillage.js +0 -490
  752. package/src/villagegen/villageArchetypes.js +0 -160
  753. package/src/villagegen/villageNames.js +0 -40
  754. package/src/villagegen/villageSites.js +0 -105
  755. package/src/weather/index.js +0 -6
  756. package/src/weather/weatherPrecipitation.js +0 -221
  757. package/src/weather/weatherPresets.js +0 -258
  758. package/src/weather/weatherSettings.js +0 -269
  759. package/src/weather/weatherSystem.js +0 -871
  760. package/src/worldMinimap.js +0 -214
  761. package/src/worldPresets.js +0 -125
@@ -0,0 +1,354 @@
1
+ // Ground-field pass for the node backends (WebGPU / forced WebGL2) — the
2
+ // runtime's stand-in for landscape runtime-virtual-texturing.
3
+ //
4
+ // Renders the scene's GROUND WRITERS (meshes tagged
5
+ // `userData.groundFieldWrite = true`: terrain, path ribbons, plazas) from a
6
+ // top-down orthographic camera into three targets — visible ground color, surface
7
+ // properties, and encoded world height — and publishes them through the
8
+ // shared uniforms in
9
+ // src/shaders-tsl/chunks/environment-ground-field.js. Grass, rock bases, and
10
+ // trunk bases sample those to adopt the ground's color and melt into it.
11
+ //
12
+ // Terrain is static, so the pass renders once and re-renders only when its
13
+ // signature changes (writer set / transforms / resolution); callers with
14
+ // mutating ground (path edits) call invalidate(). Classic WebGL path: no-op,
15
+ // `ready` stays false and every consumer blends by zero coverage.
16
+
17
+ import * as THREE from 'three';
18
+ import { positionWorld, uniform, vec3, vec4 } from 'three/tsl';
19
+
20
+ import { applyShadowClipAdjust, PassBasicNodeMaterial } from '../shaders-tsl/chunks/pass-depth-color.js';
21
+ import {
22
+ environmentGroundField,
23
+ groundFieldColorMapNode,
24
+ groundFieldFilteredColorMapNode,
25
+ groundFieldHeightMapNode,
26
+ groundFieldSurfaceMapNode,
27
+ } from '../shaders-tsl/chunks/environment-ground-field.js';
28
+
29
+ const BOUNDS_PAD = 1.02;
30
+
31
+ export function createEnvironmentGroundFieldPass({ renderer, scene, resolution = 2048 } = {}) {
32
+ if (!renderer || !scene) {
33
+ throw new Error('createEnvironmentGroundFieldPass requires { renderer, scene }.');
34
+ }
35
+
36
+ const isNodeBackend = Boolean(renderer.isWebGPURenderer);
37
+ let colorTarget = null;
38
+ let filteredColorTarget = null;
39
+ let surfaceTarget = null;
40
+ let heightTarget = null;
41
+ const camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0.1, 10);
42
+ camera.up.set(0, 0, -1);
43
+ const fieldMatrix = new THREE.Matrix4();
44
+ const bounds = new THREE.Box3();
45
+ const boundsSize = new THREE.Vector3();
46
+ const boundsCenter = new THREE.Vector3();
47
+
48
+ // Height swap material: encodes worldY into [0, 1] against the writer
49
+ // bounds. Local uniforms (not the published chunk values) so the swap
50
+ // render never depends on chunk state.
51
+ const heightMin = uniform(0);
52
+ const heightSpanInv = uniform(1);
53
+ const heightMaterial = new PassBasicNodeMaterial({ side: THREE.DoubleSide });
54
+ heightMaterial.isShadowPassMaterial = true;
55
+ heightMaterial.colorNode = vec4(
56
+ vec3(positionWorld.y.sub(heightMin).mul(heightSpanInv)),
57
+ 1.0,
58
+ );
59
+
60
+ // Color swap materials, keyed by source material. Ground writers provide
61
+ // their visible sun/sky/shared-shadow color through
62
+ // userData.createGroundColorVariant; anything else gets a best-effort
63
+ // approximation from its base map/color.
64
+ const colorMaterialCache = new WeakMap();
65
+ const surfaceMaterialCache = new WeakMap();
66
+
67
+ function colorMaterialFor(material) {
68
+ let swapped = colorMaterialCache.get(material);
69
+ if (!swapped) {
70
+ if (typeof material?.userData?.createGroundColorVariant === 'function') {
71
+ swapped = material.userData.createGroundColorVariant();
72
+ } else {
73
+ swapped = new PassBasicNodeMaterial({ side: THREE.DoubleSide });
74
+ const map = material?.uniforms?.baseMap?.value ?? material?.uniforms?.base?.value ??
75
+ material?.map ?? null;
76
+ if (map) swapped.map = map;
77
+ const color = material?.uniforms?.baseColor?.value ?? material?.color ?? null;
78
+ if (color?.isColor) swapped.color = color.clone();
79
+ swapped.vertexColors = Boolean(material?.vertexColors);
80
+ }
81
+ swapped.isShadowPassMaterial = true;
82
+ colorMaterialCache.set(material, swapped);
83
+ }
84
+ return swapped;
85
+ }
86
+
87
+ function surfaceMaterialFor(material) {
88
+ let swapped = surfaceMaterialCache.get(material);
89
+ if (!swapped) {
90
+ if (typeof material?.userData?.createGroundSurfaceVariant === 'function') {
91
+ swapped = material.userData.createGroundSurfaceVariant();
92
+ } else {
93
+ swapped = new PassBasicNodeMaterial({ side: THREE.DoubleSide });
94
+ swapped.colorNode = vec3(
95
+ material?.roughnessNode ?? material?.roughness ?? 0.5,
96
+ material?.specularIntensityNode ?? 0.5,
97
+ material?.metalnessNode ?? material?.metalness ?? 0,
98
+ );
99
+ }
100
+ swapped.isShadowPassMaterial = true;
101
+ surfaceMaterialCache.set(material, swapped);
102
+ }
103
+ return swapped;
104
+ }
105
+
106
+ const writers = [];
107
+ const materialRestores = [];
108
+ const visibilityRestores = [];
109
+ let lastRenderSignature = '';
110
+ let lastColorSignature = '';
111
+ let invalidateCounter = 0;
112
+ let colorInvalidateCounter = 0;
113
+
114
+ function collectWriters() {
115
+ writers.length = 0;
116
+ scene.traverse((obj) => {
117
+ if (obj.isMesh && obj.visible && obj.userData?.groundFieldWrite) writers.push(obj);
118
+ });
119
+ return writers;
120
+ }
121
+
122
+ function renderSignature() {
123
+ let signature = `${resolution}:${invalidateCounter}`;
124
+ for (const mesh of writers) {
125
+ signature += `|${mesh.uuid}:${mesh.matrixWorld.elements.join(',')}`;
126
+ }
127
+ return signature;
128
+ }
129
+
130
+ function frameCamera() {
131
+ bounds.makeEmpty();
132
+ for (const mesh of writers) bounds.expandByObject(mesh);
133
+ if (bounds.isEmpty()) return false;
134
+ bounds.getSize(boundsSize);
135
+ bounds.getCenter(boundsCenter);
136
+ const halfX = Math.max(boundsSize.x * BOUNDS_PAD, 1) / 2;
137
+ const halfZ = Math.max(boundsSize.z * BOUNDS_PAD, 1) / 2;
138
+ camera.left = -halfX;
139
+ camera.right = halfX;
140
+ camera.top = halfZ;
141
+ camera.bottom = -halfZ;
142
+ camera.near = 0.1;
143
+ camera.far = Math.max(boundsSize.y, 1) + 20;
144
+ camera.position.set(boundsCenter.x, bounds.max.y + 10, boundsCenter.z);
145
+ camera.lookAt(boundsCenter.x, bounds.min.y, boundsCenter.z);
146
+ camera.coordinateSystem = renderer.coordinateSystem;
147
+ camera.updateProjectionMatrix();
148
+ camera.updateMatrixWorld(true);
149
+ fieldMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);
150
+ applyShadowClipAdjust(fieldMatrix, renderer);
151
+ return true;
152
+ }
153
+
154
+ function ensureTargets() {
155
+ if (colorTarget && colorTarget.width === resolution) return;
156
+ colorTarget?.dispose();
157
+ filteredColorTarget?.dispose();
158
+ surfaceTarget?.dispose();
159
+ heightTarget?.dispose();
160
+ colorTarget = new THREE.WebGLRenderTarget(resolution, resolution, {
161
+ depthBuffer: true,
162
+ stencilBuffer: false,
163
+ });
164
+ colorTarget.texture.name = 'EnvironmentGroundField.Color';
165
+ // Keep the exact target single-level. Authored RVT mip requests are
166
+ // fulfilled by filteredColorTarget below because WebGPU render-target
167
+ // mip generation is not reliable across the supported backends.
168
+ colorTarget.texture.generateMipmaps = false;
169
+ colorTarget.texture.minFilter = THREE.LinearFilter;
170
+ colorTarget.texture.magFilter = THREE.LinearFilter;
171
+ const authoredMipLevel = Math.max(
172
+ 0,
173
+ Math.round(Number(environmentGroundField.colorMipLevel.value) || 0),
174
+ );
175
+ const filteredResolution = Math.max(1, Math.round(resolution / (2 ** authoredMipLevel)));
176
+ filteredColorTarget = new THREE.WebGLRenderTarget(
177
+ filteredResolution,
178
+ filteredResolution,
179
+ {
180
+ depthBuffer: true,
181
+ stencilBuffer: false,
182
+ },
183
+ );
184
+ filteredColorTarget.texture.name =
185
+ `EnvironmentGroundField.ColorMip${authoredMipLevel}`;
186
+ filteredColorTarget.texture.generateMipmaps = false;
187
+ filteredColorTarget.texture.minFilter = THREE.LinearFilter;
188
+ filteredColorTarget.texture.magFilter = THREE.LinearFilter;
189
+ surfaceTarget = new THREE.WebGLRenderTarget(resolution, resolution, {
190
+ depthBuffer: true,
191
+ stencilBuffer: false,
192
+ });
193
+ surfaceTarget.texture.name = 'EnvironmentGroundField.Surface';
194
+ surfaceTarget.texture.generateMipmaps = false;
195
+ surfaceTarget.texture.minFilter = THREE.LinearFilter;
196
+ surfaceTarget.texture.magFilter = THREE.LinearFilter;
197
+ heightTarget = new THREE.WebGLRenderTarget(resolution, resolution, {
198
+ depthBuffer: true,
199
+ stencilBuffer: false,
200
+ });
201
+ heightTarget.texture.name = 'EnvironmentGroundField.Height';
202
+ heightTarget.texture.type = THREE.HalfFloatType;
203
+ heightTarget.texture.minFilter = THREE.LinearFilter;
204
+ heightTarget.texture.magFilter = THREE.LinearFilter;
205
+ }
206
+
207
+ function renderInto(target, swapMaterialFor) {
208
+ materialRestores.length = 0;
209
+ visibilityRestores.length = 0;
210
+ scene.traverse((obj) => {
211
+ if (!obj.visible) return;
212
+ const isWriter = obj.isMesh && obj.userData?.groundFieldWrite;
213
+ if (!isWriter) {
214
+ // Hide leaf renderables only — hiding a group would also hide any
215
+ // writer nested beneath it.
216
+ if (obj.isMesh || obj.isPoints || obj.isLine || obj.isSprite) {
217
+ obj.visible = false;
218
+ visibilityRestores.push(obj);
219
+ }
220
+ return;
221
+ }
222
+ materialRestores.push({ material: obj.material, mesh: obj });
223
+ obj.material = Array.isArray(obj.material)
224
+ ? obj.material.map((mat) => swapMaterialFor(mat))
225
+ : swapMaterialFor(obj.material);
226
+ });
227
+
228
+ const previousTarget = renderer.getRenderTarget();
229
+ const previousBackground = scene.background;
230
+ const previousShadowEnabled = renderer.shadowMap.enabled;
231
+ renderer.shadowMap.enabled = false;
232
+ scene.background = null;
233
+ renderer.setRenderTarget(target);
234
+ renderer.setClearColor(0x000000, 0);
235
+ renderer.clear();
236
+ renderer.render(scene, camera);
237
+ renderer.setRenderTarget(previousTarget);
238
+ renderer.shadowMap.enabled = previousShadowEnabled;
239
+ scene.background = previousBackground;
240
+
241
+ for (const { material, mesh } of materialRestores) mesh.material = material;
242
+ for (const obj of visibilityRestores) obj.visible = true;
243
+ materialRestores.length = 0;
244
+ visibilityRestores.length = 0;
245
+ }
246
+
247
+ function update() {
248
+ if (!isNodeBackend) return;
249
+
250
+ scene.updateMatrixWorld(true);
251
+ collectWriters();
252
+ if (writers.length === 0) {
253
+ environmentGroundField.ready.value = false;
254
+ return;
255
+ }
256
+
257
+ const signature = renderSignature();
258
+ const colorSignature = `${signature}:visible-color:${colorInvalidateCounter}`;
259
+ const fullRenderRequired = signature !== lastRenderSignature
260
+ || !environmentGroundField.ready.value;
261
+ const colorRenderRequired = fullRenderRequired || colorSignature !== lastColorSignature;
262
+ if (!fullRenderRequired && !colorRenderRequired) return;
263
+
264
+ if (!frameCamera()) {
265
+ environmentGroundField.ready.value = false;
266
+ return;
267
+ }
268
+ ensureTargets();
269
+
270
+ const minY = bounds.min.y;
271
+ const spanY = Math.max(boundsSize.y, 0.001);
272
+ heightMin.value = minY;
273
+ heightSpanInv.value = 1 / spanY;
274
+
275
+ // The swap render must never observe a "ready" field (a writer material
276
+ // reading its own output would feed back); flip off for the duration.
277
+ environmentGroundField.ready.value = false;
278
+ if (colorRenderRequired) {
279
+ renderInto(colorTarget, colorMaterialFor);
280
+ renderInto(filteredColorTarget, colorMaterialFor);
281
+ }
282
+ if (fullRenderRequired) {
283
+ renderInto(surfaceTarget, surfaceMaterialFor);
284
+ renderInto(heightTarget, () => heightMaterial);
285
+ }
286
+
287
+ environmentGroundField.matrix.value.copy(fieldMatrix);
288
+ environmentGroundField.heightMin.value = minY;
289
+ environmentGroundField.heightSpan.value = spanY;
290
+ groundFieldColorMapNode().value = colorTarget.texture;
291
+ groundFieldFilteredColorMapNode().value = filteredColorTarget.texture;
292
+ groundFieldSurfaceMapNode().value = surfaceTarget.texture;
293
+ groundFieldHeightMapNode().value = heightTarget.texture;
294
+ environmentGroundField.ready.value = true;
295
+ lastRenderSignature = signature;
296
+ lastColorSignature = colorSignature;
297
+ }
298
+
299
+ // The signature tracks writer identity and transforms — repainting a
300
+ // writer's texture or vertex colors changes pixels without changing it.
301
+ function invalidate() {
302
+ invalidateCounter += 1;
303
+ }
304
+
305
+ // Lighting and the shared shadow map can change while ground geometry,
306
+ // height, and surface properties remain static. Refresh only the two color
307
+ // targets in that case instead of paying for all four field passes.
308
+ function invalidateColor() {
309
+ colorInvalidateCounter += 1;
310
+ }
311
+
312
+ function dispose() {
313
+ colorTarget?.dispose();
314
+ filteredColorTarget?.dispose();
315
+ surfaceTarget?.dispose();
316
+ heightTarget?.dispose();
317
+ colorTarget = null;
318
+ filteredColorTarget = null;
319
+ surfaceTarget = null;
320
+ heightTarget = null;
321
+ environmentGroundField.ready.value = false;
322
+ }
323
+
324
+ return {
325
+ get colorSemantics() {
326
+ return 'visible-ground-color';
327
+ },
328
+ get ready() {
329
+ return Boolean(environmentGroundField.ready.value);
330
+ },
331
+ get writerCount() {
332
+ return writers.length;
333
+ },
334
+ get colorTexture() {
335
+ return colorTarget?.texture ?? null;
336
+ },
337
+ get heightTexture() {
338
+ return heightTarget?.texture ?? null;
339
+ },
340
+ get filteredColorTexture() {
341
+ return filteredColorTarget?.texture ?? null;
342
+ },
343
+ get surfaceTexture() {
344
+ return surfaceTarget?.texture ?? null;
345
+ },
346
+ get bounds() {
347
+ return bounds;
348
+ },
349
+ dispose,
350
+ invalidate,
351
+ invalidateColor,
352
+ update,
353
+ };
354
+ }
@@ -3,6 +3,14 @@ import {
3
3
  classifyEnvironmentMaterialRole,
4
4
  toMaterialArray,
5
5
  } from './environmentMaterialClassifier.js';
6
+ import {
7
+ MANUFACTURED_OBJECT_CLASSES,
8
+ applyManufacturedMaterialManifest,
9
+ classifyManufacturedMaterial,
10
+ createManufacturedMaterialLook,
11
+ inferManufacturedObjectClass,
12
+ resolveManufacturedMaterialLook,
13
+ } from './manufacturedMaterialContract.js';
6
14
 
7
15
  // Environment node materials read scene lights from the shared toon light
8
16
  // uniforms (shaders-tsl/chunks/character-scene-lights.js) instead of three's
@@ -24,6 +32,8 @@ import {
24
32
  createEnvironmentShadowMaterial,
25
33
  setEnvironmentDebugOutput,
26
34
  } from './environmentShaderMaterials.js';
35
+ import { resolveEnvironmentPreset } from './environmentPresets.js';
36
+ import { installToonLabSurfaceLighting } from './toonLabSurfaceLighting.js';
27
37
  import {
28
38
  resolveEnvironmentTextureSet,
29
39
  } from './environmentTextureResolver.js';
@@ -65,6 +75,27 @@ export {
65
75
  usesAlphaCutout,
66
76
  } from './environmentMaterialClassifier.js';
67
77
 
78
+ export {
79
+ MANUFACTURED_CONTENT_FLAGS,
80
+ MANUFACTURED_MATERIAL_BASES,
81
+ MANUFACTURED_MATERIAL_FINISHES,
82
+ MANUFACTURED_MATERIAL_LOOK_VERSION,
83
+ MANUFACTURED_MATERIAL_MANIFEST_TYPE,
84
+ MANUFACTURED_MATERIAL_MANIFEST_VERSION,
85
+ MANUFACTURED_OBJECT_CLASSES,
86
+ MANUFACTURED_RENDER_MODES,
87
+ MANUFACTURED_STRUCTURAL_ROLES,
88
+ analyzeManufacturedAsset,
89
+ applyManufacturedMaterialManifest,
90
+ classifyManufacturedMaterial,
91
+ createManufacturedMaterialClassification,
92
+ createManufacturedMaterialLook,
93
+ inferManufacturedObjectClass,
94
+ resolveManufacturedMaterialLook,
95
+ validateManufacturedMaterialLook,
96
+ validateManufacturedMaterialManifest,
97
+ } from './manufacturedMaterialContract.js';
98
+
68
99
  export {
69
100
  DEFAULT_ENVIRONMENT_FEATURES,
70
101
  DEFAULT_ENVIRONMENT_PARAMETERS,
@@ -151,33 +182,102 @@ function createConvertedEnvironmentMaterial(mat, options) {
151
182
  // normal rendering; setEnvironmentDebugOutput can enable them later).
152
183
  // - scanStylize: 'auto' | true | false — photoscan stylization pass
153
184
  // (albedo simplify + detail-map compression, see scanAssetStylize.js).
154
- // 'auto' applies it only to materials that detect as Megascans/Fab scans;
185
+ // 'auto' applies it only to materials that detect as photoscan/Fab scans;
155
186
  // material.userData.envScanStylize overrides detection per material.
156
187
  // - scanStylizeParams: overrides merged over DEFAULT_SCAN_STYLIZE_PARAMS.
188
+ // - materialLook: sparse IP-owned profiles resolved over the global catch-all
189
+ // by base material, finish, render mode, structural role, content flags,
190
+ // object class, then stable asset id.
191
+ // - materialManifest: optional sidecar manifest for formats that cannot
192
+ // reliably preserve glTF extras (also useful for third-party GLBs).
193
+ // - assetId/objectClass: stable profile selectors; explicit values override
194
+ // root metadata and manifest values.
157
195
  //
158
196
  // Returns conversion counts plus a classification report:
159
- // [{ object, material, role, source }] for every converted material.
197
+ // [{ object, material, role, source, manufactured, appliedProfiles }] for
198
+ // every converted material.
160
199
  export async function applyEnvironmentShader(root, {
200
+ assetId = '',
161
201
  bakeVertexAo = 'auto',
162
202
  debugOutputMode = 'off',
163
203
  environmentBox = null,
164
204
  features = {},
165
205
  hasSun = false,
206
+ materialLook = undefined,
207
+ materialManifest = null,
208
+ objectClass = '',
166
209
  parameters = {},
210
+ preset = undefined,
167
211
  roleOverrides = null,
168
212
  scanStylize = 'auto',
169
213
  scanStylizeParams = {},
214
+ scenario = undefined,
170
215
  settings = {},
171
216
  shaderMode = 'anime',
217
+ // Surface-lighting model options (D19-150). A material this adapter converts
218
+ // now JOINS the ToonLab surface-lighting model instead of being left outside
219
+ // it. Before this, `applyEnvironmentShader` reported a material as converted
220
+ // while never setting `userData.toonLabSurfaceLighting` — the exact flag every
221
+ // scene guards on when adopting its own shadow fill:
222
+ //
223
+ // if (!material?.userData?.toonLabSurfaceLighting) continue; // missed it
224
+ //
225
+ // so a scene's shadow fill silently reached every first-party surface and
226
+ // skipped every dropped-in asset. Nothing warned; the adoption loop simply
227
+ // reported a lower count. The divergence grows with how much fill the scene
228
+ // adopts, which is what made it severe rather than cosmetic.
229
+ //
230
+ // Defaults are the installer's own defaults (shadowFill 0), so installing
231
+ // here changes no existing capture — it only makes the material present in
232
+ // the model, which is what lets a scene's adoption loop find it afterwards.
233
+ surfaceLighting = {},
172
234
  openWindows = false,
173
235
  vertexAoOptions = {},
174
236
  } = {}) {
175
- const environmentSettings = resolveEnvironmentSettings({ features, parameters, settings });
237
+ const presetSettings = preset !== undefined || scenario !== undefined
238
+ ? resolveEnvironmentPreset(preset ?? 'default', scenario)
239
+ : null;
240
+ const sourceSettings = settings && typeof settings === 'object' ? settings : {};
241
+ const composedSettings = presetSettings ? {
242
+ ...sourceSettings,
243
+ features: {
244
+ ...presetSettings.features,
245
+ ...(sourceSettings.features ?? {}),
246
+ },
247
+ materialLook: sourceSettings.materialLook ?? presetSettings.materialLook,
248
+ parameters: {
249
+ ...presetSettings.parameters,
250
+ ...(sourceSettings.parameters ?? {}),
251
+ },
252
+ } : sourceSettings;
253
+ const manifestResult = materialManifest
254
+ ? applyManufacturedMaterialManifest(root, materialManifest)
255
+ : null;
256
+ const environmentSettings = resolveEnvironmentSettings({
257
+ features,
258
+ parameters,
259
+ settings: composedSettings,
260
+ });
261
+ const resolvedMaterialLook = createManufacturedMaterialLook(
262
+ materialLook ?? composedSettings.materialLook ?? {},
263
+ );
264
+ const resolvedAssetId = String(
265
+ assetId
266
+ || manifestResult?.assetId
267
+ || root?.userData?.toonlabAssetId
268
+ || '',
269
+ );
270
+ const requestedObjectClass = objectClass || manifestResult?.objectClass;
271
+ const resolvedObjectClass = MANUFACTURED_OBJECT_CLASSES.includes(requestedObjectClass)
272
+ ? requestedObjectClass
273
+ : inferManufacturedObjectClass(root);
176
274
  const normalizedShaderMode = ['anime', 'basic', 'standard'].includes(shaderMode)
177
275
  ? shaderMode
178
276
  : 'anime';
179
277
  const resolvedDebugMode = normalizeEnvironmentDebugMode(debugOutputMode);
180
278
  let convertedMeshCount = 0;
279
+ // D19-150: how many converted materials actually joined the lighting model.
280
+ let surfaceLightingMaterialCount = 0;
181
281
  let aoOverlayMeshCount = 0;
182
282
  let windowCutoutMaterialCount = 0;
183
283
  let shadowMeshCount = 0;
@@ -255,13 +355,21 @@ export async function applyEnvironmentShader(root, {
255
355
  const originalMaterials = toMaterialArray(obj.material);
256
356
  const roleInfos = originalMaterials.map((mat) => {
257
357
  const info = classifyEnvironmentMaterialRole(obj, mat, { roleOverrides });
358
+ const manufactured = classifyManufacturedMaterial(obj, mat);
359
+ const materialProfile = resolveManufacturedMaterialLook(resolvedMaterialLook, {
360
+ assetId: resolvedAssetId,
361
+ classification: manufactured,
362
+ objectClass: resolvedObjectClass,
363
+ });
258
364
  classification.push({
365
+ appliedProfiles: materialProfile.appliedProfiles,
259
366
  material: mat?.name ?? '',
367
+ manufactured,
260
368
  object: obj.name ?? '',
261
369
  role: info.role,
262
370
  source: info.source,
263
371
  });
264
- return info;
372
+ return { ...info, manufactured, materialProfile };
265
373
  });
266
374
  const shadowMesh = environmentSettings.features.shadowMesh
267
375
  && roleInfos.some((info) => info.role === 'shadowMesh');
@@ -272,17 +380,32 @@ export async function applyEnvironmentShader(root, {
272
380
  const hasUv2 = ensureUv2Attribute(obj.geometry);
273
381
 
274
382
  const convertMaterial = (mat, index) => {
383
+ const roleInfo = roleInfos[index];
384
+ const perMaterialSettings = createEnvironmentSettings({
385
+ features: {
386
+ ...environmentSettings.features,
387
+ ...roleInfo?.materialProfile?.features,
388
+ },
389
+ parameters: {
390
+ ...environmentSettings.parameters,
391
+ ...roleInfo?.materialProfile?.parameters,
392
+ },
393
+ });
275
394
  const converted = createConvertedEnvironmentMaterial(mat, {
395
+ assetId: resolvedAssetId,
276
396
  debugOutputMode: resolvedDebugMode,
277
397
  environmentBox,
278
- environmentSettings,
398
+ environmentSettings: perMaterialSettings,
279
399
  hasSun,
280
400
  hasUv2,
281
401
  hasVertexAo,
282
402
  hasVertexColors,
403
+ manufacturedClassification: roleInfo?.manufactured,
404
+ manufacturedObjectClass: resolvedObjectClass,
405
+ materialProfile: roleInfo?.materialProfile,
283
406
  normalizedShaderMode,
284
407
  openWindows,
285
- role: roleInfos[index]?.role ?? null,
408
+ role: roleInfo?.role ?? null,
286
409
  textureSet: materialTextureSets.get(mat),
287
410
  });
288
411
  if (scanMaterials.has(mat)) {
@@ -306,6 +429,15 @@ export async function applyEnvironmentShader(root, {
306
429
 
307
430
  for (const mat of toMaterialArray(obj.material)) {
308
431
  if (mat?.userData?.windowCutout) windowCutoutMaterialCount += 1;
432
+ // D19-150: enrol every converted environment material in the surface
433
+ // lighting model. `installToonLabSurfaceLighting` is a no-op on anything
434
+ // that is not a NodeMaterial and preserves prior options when re-run, so
435
+ // this is safe both for materials that already carry it and for the
436
+ // scene-side adoption pass that re-installs with an authored shadowFill.
437
+ if (mat?.isNodeMaterial && mat.userData?.environmentMaterial) {
438
+ installToonLabSurfaceLighting(mat, surfaceLighting);
439
+ if (mat.userData?.toonLabSurfaceLighting) surfaceLightingMaterialCount += 1;
440
+ }
309
441
  }
310
442
  if (toMaterialArray(obj.material).some((mat) => mat?.userData?.environmentMaterial)) {
311
443
  obj.onBeforeRender = environmentNodeLightSync;
@@ -327,7 +459,13 @@ export async function applyEnvironmentShader(root, {
327
459
  aoOverlayMeshCount,
328
460
  classification,
329
461
  convertedMeshCount,
462
+ surfaceLightingMaterialCount,
463
+ manifestWarnings: manifestResult?.warnings ?? [],
464
+ manufacturedAssetId: resolvedAssetId,
465
+ manufacturedObjectClass: resolvedObjectClass,
466
+ preset: presetSettings ? String(preset ?? 'default') : null,
330
467
  scanStylizedMaterialCount,
468
+ scenario: presetSettings && scenario !== undefined ? String(scenario) : null,
331
469
  shaderMode: normalizedShaderMode,
332
470
  shadowMeshCount,
333
471
  vertexAoMeshCount,