@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,273 @@
1
+ // Per-material scene depth-as-color pass for post effects.
2
+ //
3
+ // A scene.overrideMaterial depth pass cannot preserve a source NodeMaterial's
4
+ // color-depth output, alpha mask, WPO, and cull state at the same time: Three
5
+ // treats an isShadowPassMaterial override as a native ShadowCaster material,
6
+ // replaces its color node, and flips one-sided culling. Material swaps avoid
7
+ // that renderer ambiguity and let exact sources provide one coupled variant.
8
+
9
+ import * as THREE from 'three';
10
+
11
+ import { createPassDepthColorMaterial } from './pass-depth-color.js';
12
+
13
+ const normalizeMaterials = (material) => (
14
+ Array.isArray(material) ? material : [material]
15
+ );
16
+
17
+ function sourceCutoff(material) {
18
+ const value = material?.uniforms?.aCutoff?.value
19
+ ?? material?.uniforms?.alphaCutoff?.value
20
+ ?? (material?.alphaTest > 0 ? material.alphaTest : -1);
21
+ const result = Number(value);
22
+ return Number.isFinite(result) && result > 0 ? result : 0;
23
+ }
24
+
25
+ function sourceMap(material) {
26
+ return material?.uniforms?.base?.value
27
+ ?? material?.uniforms?.baseMap?.value
28
+ ?? material?.map
29
+ ?? null;
30
+ }
31
+
32
+ /**
33
+ * Create a reusable camera-depth pass. Exact NodeMaterials should expose
34
+ * `userData.createDepthColorVariant`; generic materials retain any directly
35
+ * available position/mask nodes and report that fallback explicitly.
36
+ */
37
+ export function createSceneDepthColorPass({ scene } = {}) {
38
+ if (!scene?.traverse) throw new TypeError('createSceneDepthColorPass requires a Three Scene.');
39
+
40
+ const materialCache = new WeakMap();
41
+ const materialVariants = new Set();
42
+ const meshSwapCache = new WeakMap();
43
+ const materialRestores = [];
44
+ const visibilityRestores = [];
45
+ const clearColor = new THREE.Color();
46
+ const emptyMaterial = createPassDepthColorMaterial();
47
+ emptyMaterial.name = 'SceneDepthColor:Empty';
48
+ emptyMaterial.visible = false;
49
+ materialVariants.add(emptyMaterial);
50
+ let disposed = false;
51
+
52
+ const counters = {
53
+ coupledVariantCreateCount: 0,
54
+ genericMaskNodeCount: 0,
55
+ genericPositionNodeCount: 0,
56
+ genericVariantCreateCount: 0,
57
+ hiddenDerivedMeshCount: 0,
58
+ hiddenNonDepthMeshCount: 0,
59
+ renderCount: 0,
60
+ swappedMeshCount: 0,
61
+ };
62
+
63
+ function createVariant(material) {
64
+ let depthMaterial;
65
+ const coupledFactory = material?.userData?.createDepthColorVariant;
66
+ if (typeof coupledFactory === 'function') {
67
+ depthMaterial = coupledFactory();
68
+ counters.coupledVariantCreateCount += 1;
69
+ } else {
70
+ const alphaTest = sourceCutoff(material);
71
+ depthMaterial = createPassDepthColorMaterial({
72
+ alphaTest,
73
+ map: alphaTest > 0 ? sourceMap(material) : null,
74
+ side: material?.side ?? THREE.FrontSide,
75
+ });
76
+ counters.genericVariantCreateCount += 1;
77
+ // Preserve the subset the renderer can prove from a generic
78
+ // NodeMaterial. A family with custom vertexNode/fragmentNode logic must
79
+ // expose createDepthColorVariant to be classified exact.
80
+ if (material?.positionNode?.isNode) {
81
+ depthMaterial.positionNode = material.positionNode;
82
+ counters.genericPositionNodeCount += 1;
83
+ }
84
+ const maskNode = material?.maskNode?.isNode ? material.maskNode : null;
85
+ if (maskNode) {
86
+ depthMaterial.maskNode = maskNode;
87
+ depthMaterial.maskShadowNode = material.maskShadowNode?.isNode
88
+ ? material.maskShadowNode
89
+ : maskNode;
90
+ counters.genericMaskNodeCount += 1;
91
+ }
92
+ }
93
+ if (!depthMaterial?.isMaterial) {
94
+ throw new TypeError(
95
+ `${material?.name || 'Material'}.createDepthColorVariant() must return a Three Material.`,
96
+ );
97
+ }
98
+ depthMaterial.name ||= `${material?.name || 'Material'}:SceneDepthColor`;
99
+ depthMaterial.fog = false;
100
+ depthMaterial.side = material?.side ?? depthMaterial.side;
101
+ depthMaterial.shadowSide = depthMaterial.side;
102
+ depthMaterial.forceSinglePass = material?.forceSinglePass ?? depthMaterial.forceSinglePass;
103
+ depthMaterial.depthTest = material?.depthTest !== false;
104
+ depthMaterial.depthWrite = true;
105
+ depthMaterial.transparent = false;
106
+ depthMaterial.userData.sceneDepthColorPass = {
107
+ coupled: typeof coupledFactory === 'function',
108
+ exact: Boolean(
109
+ depthMaterial.userData?.toonLabPassCoupling?.exact
110
+ || material?.userData?.toonLabPassCoupling?.exact,
111
+ ),
112
+ maskSource: depthMaterial.maskNode?.isNode ? 'source-node' : 'opaque-or-alpha-test',
113
+ positionSource: depthMaterial.positionNode?.isNode ? 'source-node' : 'authored-position',
114
+ sourceMaterialName: material?.name || null,
115
+ sourceMaterialUuid: material?.uuid ?? null,
116
+ sourceSide: material?.side ?? THREE.FrontSide,
117
+ sourceVersion: material?.version ?? 0,
118
+ };
119
+ materialVariants.add(depthMaterial);
120
+ return depthMaterial;
121
+ }
122
+
123
+ function depthMaterialFor(material) {
124
+ if (!material?.isMaterial) return emptyMaterial;
125
+ let cached = materialCache.get(material);
126
+ if (!cached || cached.version !== material.version) {
127
+ if (cached) {
128
+ cached.material.dispose();
129
+ materialVariants.delete(cached.material);
130
+ }
131
+ cached = {
132
+ material: createVariant(material),
133
+ version: material.version,
134
+ };
135
+ materialCache.set(material, cached);
136
+ }
137
+ cached.material.visible = material.visible !== false && material.depthWrite !== false;
138
+ return cached.material;
139
+ }
140
+
141
+ function swappedMaterials(source) {
142
+ return Array.isArray(source)
143
+ ? source.map((material) => depthMaterialFor(material))
144
+ : depthMaterialFor(source);
145
+ }
146
+
147
+ function refreshSwap(mesh) {
148
+ const source = mesh.material;
149
+ let swap = meshSwapCache.get(mesh);
150
+ if (!swap || swap.source !== source) {
151
+ swap = { source, swapped: swappedMaterials(source) };
152
+ meshSwapCache.set(mesh, swap);
153
+ } else if (Array.isArray(source)) {
154
+ for (let index = 0; index < source.length; index += 1) {
155
+ swap.swapped[index] = depthMaterialFor(source[index]);
156
+ }
157
+ } else {
158
+ swap.swapped = depthMaterialFor(source);
159
+ }
160
+ return swap.swapped;
161
+ }
162
+
163
+ function restoreScene() {
164
+ for (const { material, mesh } of materialRestores) mesh.material = material;
165
+ for (const object of visibilityRestores) object.visible = true;
166
+ materialRestores.length = 0;
167
+ visibilityRestores.length = 0;
168
+ }
169
+
170
+ function render(renderer, camera, target) {
171
+ if (disposed) throw new Error('Scene depth-color pass is disposed.');
172
+ if (!renderer?.render || !renderer?.setRenderTarget) {
173
+ throw new TypeError('A Three renderer is required.');
174
+ }
175
+ if (!camera?.isCamera) throw new TypeError('A Three Camera is required.');
176
+ if (!target?.isRenderTarget) throw new TypeError('A Three RenderTarget is required.');
177
+
178
+ materialRestores.length = 0;
179
+ visibilityRestores.length = 0;
180
+ let hiddenDerivedMeshCount = 0;
181
+ let hiddenNonDepthMeshCount = 0;
182
+ let swappedMeshCount = 0;
183
+
184
+ const previousTarget = renderer.getRenderTarget();
185
+ const previousBackground = scene.background;
186
+ const previousFog = scene.fog;
187
+ const previousOverrideMaterial = scene.overrideMaterial;
188
+ renderer.getClearColor(clearColor);
189
+ const previousClearAlpha = renderer.getClearAlpha();
190
+ const previousShadowEnabled = renderer.shadowMap?.enabled;
191
+ try {
192
+ scene.traverseVisible((object) => {
193
+ const renderable = object.isMesh || object.isPoints || object.isLine || object.isSprite;
194
+ if (!renderable) return;
195
+ if (!object.isMesh || object.userData?.isToonOutline || object.userData?.isToonFurShell) {
196
+ object.visible = false;
197
+ visibilityRestores.push(object);
198
+ hiddenDerivedMeshCount += 1;
199
+ return;
200
+ }
201
+ const sourceMaterials = normalizeMaterials(object.material);
202
+ const participates = sourceMaterials.some((material) => (
203
+ material?.visible !== false && material?.depthWrite !== false
204
+ ));
205
+ if (!participates) {
206
+ object.visible = false;
207
+ visibilityRestores.push(object);
208
+ hiddenNonDepthMeshCount += 1;
209
+ return;
210
+ }
211
+ materialRestores.push({ material: object.material, mesh: object });
212
+ object.material = refreshSwap(object);
213
+ swappedMeshCount += 1;
214
+ });
215
+
216
+ scene.background = null;
217
+ scene.fog = null;
218
+ scene.overrideMaterial = null;
219
+ if (renderer.shadowMap) renderer.shadowMap.enabled = false;
220
+ renderer.setRenderTarget(target);
221
+ renderer.setClearColor(0xffffff, 1);
222
+ renderer.clear();
223
+ renderer.render(scene, camera);
224
+ } finally {
225
+ restoreScene();
226
+ scene.background = previousBackground;
227
+ scene.fog = previousFog;
228
+ scene.overrideMaterial = previousOverrideMaterial;
229
+ renderer.setRenderTarget(previousTarget);
230
+ renderer.setClearColor(clearColor, previousClearAlpha);
231
+ if (renderer.shadowMap) renderer.shadowMap.enabled = previousShadowEnabled;
232
+ }
233
+
234
+ counters.hiddenDerivedMeshCount = hiddenDerivedMeshCount;
235
+ counters.hiddenNonDepthMeshCount = hiddenNonDepthMeshCount;
236
+ counters.renderCount += 1;
237
+ counters.swappedMeshCount = swappedMeshCount;
238
+ return report();
239
+ }
240
+
241
+ function report() {
242
+ const liveVariants = [...materialVariants].filter((material) => material !== emptyMaterial);
243
+ const coupledVariantCount = liveVariants.filter((material) => (
244
+ material.userData?.sceneDepthColorPass?.coupled === true
245
+ )).length;
246
+ const genericVariantCount = liveVariants.length - coupledVariantCount;
247
+ return Object.freeze({
248
+ ...counters,
249
+ coupledVariantCount,
250
+ exactVariantCount: liveVariants.filter((material) => (
251
+ material.userData?.sceneDepthColorPass?.exact === true
252
+ )).length,
253
+ genericVariantCount,
254
+ materialVariantCount: liveVariants.length,
255
+ remainingGenericVariantCount: genericVariantCount,
256
+ });
257
+ }
258
+
259
+ function dispose() {
260
+ if (disposed) return;
261
+ disposed = true;
262
+ restoreScene();
263
+ for (const material of materialVariants) material.dispose();
264
+ materialVariants.clear();
265
+ }
266
+
267
+ return Object.freeze({
268
+ depthMaterialFor,
269
+ dispose,
270
+ render,
271
+ report,
272
+ });
273
+ }
@@ -44,20 +44,28 @@ const FALLBACK = Object.freeze({
44
44
  }),
45
45
  grass: Object.freeze({
46
46
  backlitStrength: 0.4,
47
+ baseColor: Object.freeze([0.172518, 0.317708, 0.052621]),
47
48
  bandSoftness: 0.1,
48
49
  bandThreshold: 0.49,
49
50
  bendExponent: 2,
50
51
  cloudShadowResponse: 0.35,
51
52
  colorVariationStrength: 0.2,
53
+ emissiveStrength: 0,
52
54
  gustSheenStrength: 0.22,
53
55
  gustSheenThreshold: 0.78,
54
56
  interactionResponse: 1,
57
+ roughness: 0.5,
55
58
  rootOcclusionHeight: 0.62,
56
59
  rootOcclusionStrength: 0.36,
57
60
  sceneShadowResponse: 0.7,
58
61
  shadowFloor: 0.35,
62
+ specularStrength: 0.04,
63
+ styleColorStrength: 0,
64
+ tipBrightness: 0.1,
65
+ tipDesaturation: -0.5,
59
66
  tipGradientEnd: 0.95,
60
67
  tipGradientStart: 0.1,
68
+ tipHueShift: -0.06,
61
69
  }),
62
70
  foliage: Object.freeze({
63
71
  backlitStrength: 0.35,
@@ -68,8 +76,20 @@ const FALLBACK = Object.freeze({
68
76
  crestSoftness: 0.12,
69
77
  crestThreshold: 0.72,
70
78
  crownOcclusionStrength: 0.2,
79
+ emissiveStrength: 0.25,
80
+ gradientColor: Object.freeze([0.076185, 0.198069, 0.016807]),
81
+ gradientContrast: 0.821665,
82
+ gradientOffset: 0.088,
83
+ hueShift: 0,
84
+ hueVariation: 0.1,
85
+ mainColor: Object.freeze([0.040915, 0.135633, 0.015209]),
86
+ roughness: 0.75,
71
87
  sceneShadowResponse: 0.55,
88
+ specularStrength: 0.1,
72
89
  spriteLuminanceStrength: 0.36,
90
+ styleColorStrength: 0,
91
+ subsurfaceOpacity: 0.3,
92
+ subsurfaceStrength: 0.8,
73
93
  transmissionPowerMultiplier: 1,
74
94
  }),
75
95
  flower: Object.freeze({
@@ -79,25 +99,42 @@ const FALLBACK = Object.freeze({
79
99
  centerLightResponse: 0.8,
80
100
  centerShadowResponse: 1,
81
101
  cupDarkeningStrength: 0.1,
102
+ emissiveStrength: 0,
82
103
  petalTransmissionMultiplier: 1,
104
+ roughness: 0.5,
83
105
  sceneShadowResponse: 0.85,
106
+ specularStrength: 0.05,
107
+ subsurfaceOpacity: 0.08,
108
+ subsurfaceStrength: 0.3,
109
+ textureTint: Object.freeze([1, 1, 1]),
110
+ tintStrength: 1,
84
111
  unlitPetalLift: 0.35,
85
112
  }),
86
113
  bark: Object.freeze({
87
114
  bandCount: 3,
88
115
  bandSoftness: 0,
116
+ emissiveStrength: 0,
117
+ normalFlatness: 0,
89
118
  rimStrength: 0,
119
+ roughness: 1,
90
120
  shadowFloor: 0.35,
91
121
  skyFillStrength: 0.04,
92
122
  specularStrength: 0,
93
123
  sunTintStrength: 0.15,
124
+ tint: Object.freeze([0.938, 0.3752, 0]),
125
+ tintStrength: 0,
94
126
  verticalShadeStrength: 0,
95
127
  }),
96
128
  stem: Object.freeze({
97
129
  bandCount: 3,
98
130
  bandSoftness: 0.08,
131
+ color: Object.freeze([0.155926, 0.332452, 0.066626]),
132
+ colorStrength: 0,
133
+ emissiveStrength: 0,
134
+ roughness: 0.5,
99
135
  shadowFloor: 0.42,
100
136
  skyFillStrength: 0.06,
137
+ specularStrength: 0.05,
101
138
  transmissionStrength: 0.08,
102
139
  rimStrength: 0.02,
103
140
  }),
@@ -124,6 +161,11 @@ export function createVegetationStyleUniforms(profile = {}, role = null) {
124
161
  const u = {
125
162
  uSnowCover: uniform(0),
126
163
  uSnowRetention: uniform(1),
164
+ // Transient world illumination. These are deliberately outside the
165
+ // portable style schema: time of day changes them without modifying a
166
+ // Tree, Grass, or Flower profile.
167
+ uSkyIntensity: uniform(1),
168
+ uSunIntensity: uniform(1),
127
169
  uStyleLightingRimPower: uniform(value(settings, 'lighting', 'rimPower')),
128
170
  uStyleLightingRimStrength: uniform(value(settings, 'lighting', 'rimStrength')),
129
171
  uStyleLightingShadowTint: uniform(color(settings, 'lighting', 'shadowTint')),
@@ -150,20 +192,28 @@ export function createVegetationStyleUniforms(profile = {}, role = null) {
150
192
  });
151
193
  if (hasRole('grassBlade')) Object.assign(u, {
152
194
  uStyleGrassBacklitStrength: uniform(value(settings, 'grass', 'backlitStrength')),
195
+ uStyleGrassBaseColor: uniform(color(settings, 'grass', 'baseColor')),
153
196
  uStyleGrassBandSoftness: uniform(value(settings, 'grass', 'bandSoftness')),
154
197
  uStyleGrassBandThreshold: uniform(value(settings, 'grass', 'bandThreshold')),
155
198
  uStyleGrassBendExponent: uniform(value(settings, 'grass', 'bendExponent')),
156
199
  uStyleGrassCloudShadowResponse: uniform(value(settings, 'grass', 'cloudShadowResponse')),
157
200
  uStyleGrassColorVariationStrength: uniform(value(settings, 'grass', 'colorVariationStrength')),
201
+ uStyleGrassEmissiveStrength: uniform(value(settings, 'grass', 'emissiveStrength')),
158
202
  uStyleGrassGustSheenStrength: uniform(value(settings, 'grass', 'gustSheenStrength')),
159
203
  uStyleGrassGustSheenThreshold: uniform(value(settings, 'grass', 'gustSheenThreshold')),
160
204
  uStyleGrassInteractionResponse: uniform(value(settings, 'grass', 'interactionResponse')),
205
+ uStyleGrassRoughness: uniform(value(settings, 'grass', 'roughness')),
161
206
  uStyleGrassRootOcclusionHeight: uniform(value(settings, 'grass', 'rootOcclusionHeight')),
162
207
  uStyleGrassRootOcclusionStrength: uniform(value(settings, 'grass', 'rootOcclusionStrength')),
163
208
  uStyleGrassSceneShadowResponse: uniform(value(settings, 'grass', 'sceneShadowResponse')),
164
209
  uStyleGrassShadowFloor: uniform(value(settings, 'grass', 'shadowFloor')),
210
+ uStyleGrassSpecularStrength: uniform(value(settings, 'grass', 'specularStrength')),
211
+ uStyleGrassStyleColorStrength: uniform(value(settings, 'grass', 'styleColorStrength')),
212
+ uStyleGrassTipBrightness: uniform(value(settings, 'grass', 'tipBrightness')),
213
+ uStyleGrassTipDesaturation: uniform(value(settings, 'grass', 'tipDesaturation')),
165
214
  uStyleGrassTipGradientEnd: uniform(value(settings, 'grass', 'tipGradientEnd')),
166
215
  uStyleGrassTipGradientStart: uniform(value(settings, 'grass', 'tipGradientStart')),
216
+ uStyleGrassTipHueShift: uniform(value(settings, 'grass', 'tipHueShift')),
167
217
  });
168
218
  if (hasRole('foliageCard')) Object.assign(u, {
169
219
  uStyleFoliageBacklitStrength: uniform(value(settings, 'foliage', 'backlitStrength')),
@@ -174,19 +224,38 @@ export function createVegetationStyleUniforms(profile = {}, role = null) {
174
224
  uStyleFoliageCrestSoftness: uniform(value(settings, 'foliage', 'crestSoftness')),
175
225
  uStyleFoliageCrestThreshold: uniform(value(settings, 'foliage', 'crestThreshold')),
176
226
  uStyleFoliageCrownOcclusionStrength: uniform(value(settings, 'foliage', 'crownOcclusionStrength')),
227
+ uStyleFoliageEmissiveStrength: uniform(value(settings, 'foliage', 'emissiveStrength')),
228
+ uStyleFoliageGradientColor: uniform(color(settings, 'foliage', 'gradientColor')),
229
+ uStyleFoliageGradientContrast: uniform(value(settings, 'foliage', 'gradientContrast')),
230
+ uStyleFoliageGradientOffset: uniform(value(settings, 'foliage', 'gradientOffset')),
231
+ uStyleFoliageHueShift: uniform(value(settings, 'foliage', 'hueShift')),
232
+ uStyleFoliageHueVariation: uniform(value(settings, 'foliage', 'hueVariation')),
233
+ uStyleFoliageMainColor: uniform(color(settings, 'foliage', 'mainColor')),
234
+ uStyleFoliageRoughness: uniform(value(settings, 'foliage', 'roughness')),
177
235
  uStyleFoliageSceneShadowResponse: uniform(value(settings, 'foliage', 'sceneShadowResponse')),
236
+ uStyleFoliageSpecularStrength: uniform(value(settings, 'foliage', 'specularStrength')),
178
237
  uStyleFoliageSpriteLuminanceStrength: uniform(value(settings, 'foliage', 'spriteLuminanceStrength')),
238
+ uStyleFoliageStyleColorStrength: uniform(value(settings, 'foliage', 'styleColorStrength')),
239
+ uStyleFoliageSubsurfaceOpacity: uniform(value(settings, 'foliage', 'subsurfaceOpacity')),
240
+ uStyleFoliageSubsurfaceStrength: uniform(value(settings, 'foliage', 'subsurfaceStrength')),
179
241
  uStyleFoliageTransmissionPowerMultiplier: uniform(value(settings, 'foliage', 'transmissionPowerMultiplier')),
180
242
  });
181
243
  if (hasRole('flowerPetal', 'flowerCenter')) Object.assign(u, {
182
244
  uStyleFlowerBandSoftness: uniform(value(settings, 'flower', 'bandSoftness')),
183
245
  uStyleFlowerBandThreshold: uniform(value(settings, 'flower', 'bandThreshold')),
246
+ uStyleFlowerEmissiveStrength: uniform(value(settings, 'flower', 'emissiveStrength')),
247
+ uStyleFlowerRoughness: uniform(value(settings, 'flower', 'roughness')),
184
248
  uStyleFlowerSceneShadowResponse: uniform(value(settings, 'flower', 'sceneShadowResponse')),
249
+ uStyleFlowerSpecularStrength: uniform(value(settings, 'flower', 'specularStrength')),
250
+ uStyleFlowerTextureTint: uniform(color(settings, 'flower', 'textureTint')),
251
+ uStyleFlowerTintStrength: uniform(value(settings, 'flower', 'tintStrength')),
185
252
  });
186
253
  if (hasRole('flowerPetal')) Object.assign(u, {
187
254
  uStyleFlowerBacklitStrength: uniform(value(settings, 'flower', 'backlitStrength')),
188
255
  uStyleFlowerCupDarkeningStrength: uniform(value(settings, 'flower', 'cupDarkeningStrength')),
189
256
  uStyleFlowerPetalTransmissionMultiplier: uniform(value(settings, 'flower', 'petalTransmissionMultiplier')),
257
+ uStyleFlowerSubsurfaceOpacity: uniform(value(settings, 'flower', 'subsurfaceOpacity')),
258
+ uStyleFlowerSubsurfaceStrength: uniform(value(settings, 'flower', 'subsurfaceStrength')),
190
259
  uStyleFlowerUnlitPetalLift: uniform(value(settings, 'flower', 'unlitPetalLift')),
191
260
  });
192
261
  if (hasRole('flowerCenter')) Object.assign(u, {
@@ -196,19 +265,29 @@ export function createVegetationStyleUniforms(profile = {}, role = null) {
196
265
  if (hasRole('herbaceousStem')) Object.assign(u, {
197
266
  uStyleStemBandCount: uniform(value(settings, 'stem', 'bandCount')),
198
267
  uStyleStemBandSoftness: uniform(value(settings, 'stem', 'bandSoftness')),
268
+ uStyleStemColor: uniform(color(settings, 'stem', 'color')),
269
+ uStyleStemColorStrength: uniform(value(settings, 'stem', 'colorStrength')),
270
+ uStyleStemEmissiveStrength: uniform(value(settings, 'stem', 'emissiveStrength')),
271
+ uStyleStemRoughness: uniform(value(settings, 'stem', 'roughness')),
199
272
  uStyleStemShadowFloor: uniform(value(settings, 'stem', 'shadowFloor')),
200
273
  uStyleStemRimStrength: uniform(value(settings, 'stem', 'rimStrength')),
201
274
  uStyleStemSkyFillStrength: uniform(value(settings, 'stem', 'skyFillStrength')),
275
+ uStyleStemSpecularStrength: uniform(value(settings, 'stem', 'specularStrength')),
202
276
  uStyleStemTransmissionStrength: uniform(value(settings, 'stem', 'transmissionStrength')),
203
277
  });
204
278
  if (hasRole('woodySurface')) Object.assign(u, {
205
279
  uStyleBarkBandCount: uniform(value(settings, 'bark', 'bandCount')),
206
280
  uStyleBarkBandSoftness: uniform(value(settings, 'bark', 'bandSoftness')),
281
+ uStyleBarkEmissiveStrength: uniform(value(settings, 'bark', 'emissiveStrength')),
282
+ uStyleBarkNormalFlatness: uniform(value(settings, 'bark', 'normalFlatness')),
207
283
  uStyleBarkRimStrength: uniform(value(settings, 'bark', 'rimStrength')),
284
+ uStyleBarkRoughness: uniform(value(settings, 'bark', 'roughness')),
208
285
  uStyleBarkShadowFloor: uniform(value(settings, 'bark', 'shadowFloor')),
209
286
  uStyleBarkSkyFillStrength: uniform(value(settings, 'bark', 'skyFillStrength')),
210
287
  uStyleBarkSpecularStrength: uniform(value(settings, 'bark', 'specularStrength')),
211
288
  uStyleBarkSunTintStrength: uniform(value(settings, 'bark', 'sunTintStrength')),
289
+ uStyleBarkTint: uniform(color(settings, 'bark', 'tint')),
290
+ uStyleBarkTintStrength: uniform(value(settings, 'bark', 'tintStrength')),
212
291
  uStyleBarkVerticalShadeStrength: uniform(value(settings, 'bark', 'verticalShadeStrength')),
213
292
  });
214
293
  return u;
@@ -233,6 +312,7 @@ export function vegetationVisibility(
233
312
  /** Common thin-surface lighting. Family shaders can layer role bands on top. */
234
313
  export function shadeVegetationSurface({
235
314
  baseColor,
315
+ bandShadowColor = null,
236
316
  bandOverride = null,
237
317
  bandSoftness,
238
318
  bandThreshold,
@@ -277,7 +357,14 @@ export function shadeVegetationSurface({
277
357
  ).toVar();
278
358
  const band = (bandOverride ?? vegetationBand(wrap, bandThreshold, bandSoftness))
279
359
  .mul(visibility).toVar();
280
- const colorNode = baseColor.mul(mix(shadowFloor, 1.0, band)).toVar();
360
+ // Most materials use a scalar floor. Foliage assets already author a
361
+ // semantic shadow palette, so they can supply it directly and let this one
362
+ // canonical band—not a second private band—control their full value range.
363
+ const colorNode = (
364
+ bandShadowColor
365
+ ? mix(bandShadowColor, baseColor, band)
366
+ : baseColor.mul(mix(shadowFloor, 1.0, band))
367
+ ).toVar();
281
368
 
282
369
  // An asset palette may carry its own shadow tone (grass and tree foliage
283
370
  // are the common cases). It establishes the material identity in shadow;
@@ -297,24 +384,34 @@ export function shadeVegetationSurface({
297
384
  clamp(shadowAmount, 0, 1),
298
385
  ));
299
386
  colorNode.mulAssign(mix(vec3(1), sunColor, band.mul(u.uStyleLightingSunTintStrength)));
300
- colorNode.addAssign(skyColor.mul(band.oneMinus()).mul(skyFillStrength));
387
+ // Vegetation fill is reflected light from the authored surface, not a
388
+ // screen-space blue/white veil. Adding the sky color directly can exceed
389
+ // the albedo several times over once rim and transmission are also active,
390
+ // clipping saturated procedural palettes to pastel white.
391
+ colorNode.addAssign(
392
+ baseColor.mul(skyColor).mul(band.oneMinus()).mul(skyFillStrength),
393
+ );
301
394
 
302
395
  const viewDirection = normalize(cameraPosition.sub(worldPosition));
303
396
  const rim = pow(
304
397
  clamp(abs(dot(styledNormal, viewDirection)).oneMinus(), 0, 1),
305
398
  u.uStyleLightingRimPower,
306
399
  );
307
- colorNode.addAssign(skyColor.mul(rim).mul(rimStrength));
400
+ colorNode.addAssign(
401
+ baseColor.mul(skyColor).mul(rim).mul(rimStrength),
402
+ );
308
403
  const transmission = pow(
309
404
  clamp(dot(viewDirection, sun.negate()), 0, 1),
310
405
  transmissionPower,
311
406
  ).mul(transmissionStrength).mul(transmissionMultiplier);
312
407
  colorNode.addAssign(
313
- sunColor.mul(transmission).mul(mix(
314
- transmissionShadowFloor,
315
- 1,
316
- visibility,
317
- )),
408
+ baseColor.mul(sunColor).mul(transmission).mul(
409
+ mix(
410
+ transmissionShadowFloor,
411
+ 1,
412
+ visibility,
413
+ ),
414
+ ),
318
415
  );
319
416
 
320
417
  const wet = clamp(u.uWetness.mul(u.uWetnessResponse), 0, 1).toVar();
@@ -344,6 +441,17 @@ export function shadeVegetationSurface({
344
441
  visibility,
345
442
  ));
346
443
  colorNode.assign(mix(colorNode, snowTint, snow));
444
+ // The custom vegetation graph is intentionally self-shaded, so it does not
445
+ // receive renderer light intensity automatically. Combine the transient
446
+ // ambient and direct energies here; day remains the calibrated 1.0
447
+ // baseline, while night can actually fall into silhouette.
448
+ const sceneLight = clamp(
449
+ u.uSkyIntensity.mul(0.5)
450
+ .add(u.uSunIntensity.mul(0.5).mul(band)),
451
+ 0,
452
+ 1.5,
453
+ );
454
+ colorNode.mulAssign(sceneLight);
347
455
 
348
456
  return { band, color: colorNode, normal: styledNormal, visibility, viewDirection };
349
457
  }
@@ -34,18 +34,32 @@ import { waterRotate2d, waterVoronoi2 } from './water-common.js';
34
34
 
35
35
  export function createWaterColorChunk({ u, flags }) {
36
36
  const sceneRawDepth = (screenUv) => {
37
- const raw = float(1.0).toVar();
37
+ // The pass texture is deliberately stored as canonical forward depth.
38
+ // Three's perspectiveDepthToViewZ and the camera inverse projection both
39
+ // follow the active renderer convention, so reverse the sampled value
40
+ // for reversed-depth hosts before either consumer sees it.
41
+ const stored = float(1.0).toVar();
38
42
  If(u.uUseSceneDepth.greaterThanEqual(0.5), () => {
39
- raw.assign(u.uSceneDepth.sample(screenUv).level(0).r);
43
+ stored.assign(u.uSceneDepth.sample(screenUv).level(0).r);
40
44
  });
41
- return raw;
45
+ return mix(
46
+ stored,
47
+ stored.oneMinus(),
48
+ clamp(u.uDepthTargetNeedsReverse, 0.0, 1.0),
49
+ ).toVar();
42
50
  };
43
51
 
52
+ const storedDepthHasGeometry = (projectedDepth) => mix(
53
+ projectedDepth,
54
+ projectedDepth.oneMinus(),
55
+ clamp(u.uDepthTargetNeedsReverse, 0.0, 1.0),
56
+ ).lessThan(0.99999);
57
+
44
58
  const viewDistanceFromDepth = (rawDepth) => {
45
59
  // perspectiveDepthToViewZ is an Fn() in r185 — keep it out of select()
46
60
  // operands (docs/tsl-conventions.md #2), hence the If shape.
47
61
  const distance = float(u.uCameraFar).toVar();
48
- If(rawDepth.lessThan(0.99999), () => {
62
+ If(storedDepthHasGeometry(rawDepth), () => {
49
63
  distance.assign(perspectiveDepthToViewZ(rawDepth, u.uCameraNear, u.uCameraFar).negate());
50
64
  });
51
65
  return distance;
@@ -84,7 +98,7 @@ export function createWaterColorChunk({ u, flags }) {
84
98
  const pierceSample = (sampleUv, surfaceHeight) => {
85
99
  const pierce = float(0.0).toVar();
86
100
  const rawDepth = sceneRawDepth(sampleUv).toVar();
87
- If(rawDepth.lessThan(0.99999), () => { // sky — nothing pierces here
101
+ If(storedDepthHasGeometry(rawDepth), () => { // sky — nothing pierces here
88
102
  const neighborWorld = worldFromDepth(sampleUv, rawDepth);
89
103
  pierce.assign(smoothstep(0.01, 0.05, neighborWorld.y.sub(surfaceHeight)));
90
104
  });
@@ -27,5 +27,12 @@ export function createWaterShoreStateChunk({ u }) {
27
27
  .toVar();
28
28
  };
29
29
 
30
- return { shoreStateSample, shoreStateUv };
30
+ const shoreStateCoverage = (worldXZ) => {
31
+ const fieldUv = shoreStateUv(worldXZ).toVar();
32
+ const border = smoothstep(vec2(0.0), vec2(0.02), fieldUv)
33
+ .mul(smoothstep(vec2(0.98), vec2(1.0), fieldUv).oneMinus());
34
+ return border.x.mul(border.y).mul(u.uUseShoreState).toVar();
35
+ };
36
+
37
+ return { shoreStateCoverage, shoreStateSample, shoreStateUv };
31
38
  }
@@ -0,0 +1,30 @@
1
+ // Cheap world-space 2D value noise for TSL materials — shared by the
2
+ // terrain's noise-broken cliff transitions and the grass wind-color sheen.
3
+ // Hash-based (no texture fetch), stable across backends, tileless.
4
+
5
+ import { abs, add, dot, floor, fract, Fn, mix, sin, vec2 } from 'three/tsl';
6
+
7
+ const hash2 = /*@__PURE__*/ Fn(([cell]) => {
8
+ return fract(sin(dot(cell, vec2(127.1, 311.7))).mul(43758.5453123));
9
+ });
10
+
11
+ /** Single-octave 2D value noise in [0, 1]; p is a world-XZ coordinate. */
12
+ export const worldValueNoise2 = /*@__PURE__*/ Fn(([p]) => {
13
+ const cell = floor(p).toVar();
14
+ const f = fract(p).toVar();
15
+ // smoothstep fade per axis
16
+ const t = f.mul(f).mul(f.mul(-2.0).add(3.0)).toVar();
17
+ const a = hash2(cell);
18
+ const b = hash2(cell.add(vec2(1.0, 0.0)));
19
+ const c = hash2(cell.add(vec2(0.0, 1.0)));
20
+ const d = hash2(cell.add(vec2(1.0, 1.0)));
21
+ return mix(mix(a, b, t.x), mix(c, d, t.x), t.y);
22
+ });
23
+
24
+ /** Three-octave fbm in [0, 1]; p is a world-XZ coordinate (pre-scaled). */
25
+ export const worldFbm2 = /*@__PURE__*/ Fn(([p]) => {
26
+ const n0 = worldValueNoise2(p);
27
+ const n1 = worldValueNoise2(p.mul(2.13).add(vec2(19.7, 41.3)));
28
+ const n2 = worldValueNoise2(p.mul(4.37).add(vec2(73.1, 7.9)));
29
+ return add(n0.mul(0.5714), add(n1.mul(0.2857), n2.mul(0.1429)));
30
+ });