@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
@@ -15,12 +15,14 @@ import {
15
15
  cameraViewMatrix,
16
16
  clamp,
17
17
  cos,
18
+ cross,
18
19
  Discard,
19
20
  distance,
20
21
  dot,
21
22
  float,
22
23
  Fn,
23
24
  fract,
25
+ If,
24
26
  length,
25
27
  mix,
26
28
  modelWorldMatrix,
@@ -40,14 +42,22 @@ import {
40
42
  import { NodeMaterial } from 'three/webgpu';
41
43
 
42
44
  import { sampleEnvironmentSunShadow } from './chunks/environment-sun-shadow.js';
45
+ import { sampleEnvironmentCloudShadow } from '../sky/cloudShadow.js';
46
+ import { sampleGroundColor } from './chunks/environment-ground-field.js';
43
47
  import { stylizedCloudShadow } from './chunks/stylized-cloud-shadow.js';
48
+ import { shiftNormalizedHue } from './chunks/normalized-hue.js';
44
49
  import {
45
50
  createVegetationStyleUniforms,
46
51
  shadeVegetationSurface,
47
52
  tagVegetationRole,
48
53
  } from './chunks/vegetation-style.js';
49
54
 
50
- export function createGrassNodeMaterial(settings, vegetationShader = null) {
55
+ export function createGrassNodeMaterial(
56
+ settings,
57
+ vegetationShader = null,
58
+ { geometryMode = 'blade', groundField = true } = {},
59
+ ) {
60
+ const clumpGeometry = geometryMode === 'clump';
51
61
  const styleUniforms = createVegetationStyleUniforms(vegetationShader, 'grassBlade');
52
62
  const u = {
53
63
  uBaseColor: uniform(new THREE.Color()),
@@ -57,6 +67,9 @@ export function createGrassNodeMaterial(settings, vegetationShader = null) {
57
67
  uCloudShadowVelocity: uniform(new THREE.Vector2(settings.cloudShadowVelocity[0], settings.cloudShadowVelocity[1])),
58
68
  uFadeEnd: uniform(1e6 + 1),
59
69
  uFadeStart: uniform(1e6),
70
+ uGroundAdoptHeight: uniform(settings.groundAdoptHeight),
71
+ uGroundAdoptStrength: uniform(settings.groundAdoptStrength),
72
+ uGroundAdoptTint: uniform(new THREE.Color(...settings.groundAdoptTint)),
60
73
  uGustFrequency: uniform(settings.gustFrequency),
61
74
  uGustResponse: uniform(settings.gustResponse),
62
75
  uGustSpeed: uniform(settings.gustSpeed),
@@ -69,10 +82,13 @@ export function createGrassNodeMaterial(settings, vegetationShader = null) {
69
82
  uSunDirection: uniform(new THREE.Vector3(...settings.sunDirection).normalize()),
70
83
  uTime: uniform(0),
71
84
  uTipColor: uniform(new THREE.Color()),
85
+ uStaticLean: uniform(settings.leanStrength),
72
86
  uWindDirection: uniform(new THREE.Vector2(settings.windDirection[0], settings.windDirection[1])),
73
87
  uWindResponse: uniform(settings.windResponse),
74
88
  uWindSpeed: uniform(settings.windSpeed),
75
89
  uWindStrength: uniform(settings.windStrength),
90
+ uWashLift: uniform(settings.washLift),
91
+ uWashOpacity: uniform(settings.washOpacity),
76
92
  ...styleUniforms,
77
93
  };
78
94
  if (!vegetationShader) u.uStyleGrassBacklitStrength.value = settings.backlitStrength;
@@ -83,25 +99,68 @@ export function createGrassNodeMaterial(settings, vegetationShader = null) {
83
99
  material.name = 'StylizedGrass';
84
100
  material.side = THREE.DoubleSide;
85
101
  material.fog = true;
102
+ material.transparent = settings.washOpacity < 0.999;
103
+ material.depthWrite = true;
86
104
 
87
105
  const vUv = uv();
88
106
  const vJitter = varying(float(), 'vGrassJitter');
89
107
  const vGust = varying(float(), 'vGrassGust');
90
108
  const vNormal = varying(vec3(), 'vGrassNormal');
91
109
  const vWorldPosition = varying(vec3(), 'vGrassWorldPosition');
110
+ const vGroundColor = varying(vec4(), 'vGrassGroundColor');
92
111
 
93
112
  material.vertexNode = Fn(() => {
94
113
  const iOrigin = attribute('iOrigin', 'vec3');
95
- const iInfo = attribute('iInfo', 'vec4');
114
+ const iInfo = clumpGeometry
115
+ ? attribute('iClump', 'vec4')
116
+ : attribute('iInfo', 'vec4');
117
+ const bladeOrigin = clumpGeometry
118
+ ? attribute('aBladeOrigin', 'vec3')
119
+ : vec3(0.0);
120
+ const bladeInfo = clumpGeometry
121
+ ? attribute('aBladeInfo', 'vec4')
122
+ : iInfo;
123
+ const surfaceUp = clumpGeometry
124
+ ? normalize(attribute('iSurfaceNormal', 'vec3'))
125
+ : vec3(0.0, 1.0, 0.0);
126
+ const surfaceForward = clumpGeometry
127
+ ? normalize(attribute('iSurfaceForward', 'vec3'))
128
+ : vec3(1.0, 0.0, 0.0);
129
+ const clumpScale = clumpGeometry ? iInfo.x : float(1.0);
130
+ const bladeHeight = clumpGeometry ? bladeInfo.x.mul(clumpScale) : iInfo.x;
131
+ const bladeWidth = clumpGeometry ? bladeInfo.y.mul(clumpScale) : iInfo.z;
132
+ const bladePhase = clumpGeometry
133
+ ? fract(iInfo.y.add(bladeInfo.z))
134
+ : iInfo.y;
135
+ const facingAngle = clumpGeometry
136
+ ? iInfo.z.add(bladeInfo.w)
137
+ : iInfo.w;
96
138
 
97
- vJitter.assign(fract(iInfo.y.mul(13.73)));
139
+ vJitter.assign(fract(bladePhase.mul(13.73)));
98
140
  const heightFraction = vUv.y;
99
- const facing = vec2(cos(iInfo.w), sin(iInfo.w)).toVar();
141
+ const facing = vec2(cos(facingAngle), sin(facingAngle)).toVar();
100
142
  const windDirection = normalize(u.uWindDirection.add(vec2(1e-4, 0.0))).toVar();
101
143
 
102
- const bladePosition = vec3(iOrigin).toVar();
103
- bladePosition.xz.addAssign(facing.mul(positionLocal.x.mul(iInfo.z)));
104
- bladePosition.y.addAssign(heightFraction.mul(iInfo.x));
144
+ const rootPosition = vec3(iOrigin).toVar();
145
+ const bladePosition = vec3(rootPosition).toVar();
146
+ if (clumpGeometry) {
147
+ const clumpForward = vec3(surfaceForward).toVar();
148
+ const clumpRight = normalize(cross(clumpForward, surfaceUp)).toVar();
149
+ rootPosition.addAssign(
150
+ clumpForward.mul(bladeOrigin.x)
151
+ .add(clumpRight.mul(bladeOrigin.z))
152
+ .mul(clumpScale),
153
+ );
154
+ bladePosition.assign(rootPosition);
155
+ const bladeFacing = clumpForward.mul(cos(bladeInfo.w))
156
+ .add(clumpRight.mul(sin(bladeInfo.w)));
157
+ bladePosition.addAssign(bladeFacing.mul(positionLocal.x.mul(bladeWidth)));
158
+ bladePosition.addAssign(surfaceUp.mul(heightFraction.mul(bladeHeight)));
159
+ facing.assign(normalize(bladeFacing.xz.add(vec2(1e-4, 0.0))));
160
+ } else {
161
+ bladePosition.xz.addAssign(facing.mul(positionLocal.x.mul(bladeWidth)));
162
+ bladePosition.y.addAssign(heightFraction.mul(bladeHeight));
163
+ }
105
164
 
106
165
  const bendCurve = pow(heightFraction, u.uStyleGrassBendExponent).toVar();
107
166
 
@@ -109,51 +168,66 @@ export function createGrassNodeMaterial(settings, vegetationShader = null) {
109
168
  const bowDirection = vec2(facing.y.negate(), facing.x);
110
169
  const leanDirection = normalize(
111
170
  bowDirection.mul(vJitter.sub(0.5))
112
- .add(facing.mul(fract(iInfo.y.mul(7.31)).sub(0.5)))
171
+ .add(facing.mul(fract(bladePhase.mul(7.31)).sub(0.5)))
113
172
  .add(vec2(1e-4, 0.0)),
114
173
  ).toVar();
115
- const leanAmount = fract(iInfo.y.mul(3.17)).mul(0.5).add(0.18).toVar();
116
- bladePosition.xz.addAssign(leanDirection.mul(leanAmount).mul(bendCurve).mul(iInfo.x));
117
- bladePosition.y.subAssign(leanAmount.mul(leanAmount).mul(0.4).mul(bendCurve).mul(iInfo.x));
174
+ const leanAmount = fract(bladePhase.mul(3.17)).mul(0.5).add(0.18)
175
+ .mul(u.uStaticLean).toVar();
176
+ bladePosition.xz.addAssign(leanDirection.mul(leanAmount).mul(bendCurve).mul(bladeHeight));
177
+ bladePosition.y.subAssign(leanAmount.mul(leanAmount).mul(0.4).mul(bendCurve).mul(bladeHeight));
118
178
 
119
179
  // Traveling gust wave.
120
- const gustPhase = dot(iOrigin.xz, windDirection).mul(u.uGustFrequency)
180
+ const gustPhase = dot(rootPosition.xz, windDirection).mul(u.uGustFrequency)
121
181
  .sub(u.uTime.mul(u.uGustSpeed));
122
182
  const gust = sin(gustPhase).mul(0.5)
123
183
  .add(sin(gustPhase.mul(0.43).add(1.7)).mul(0.3))
124
- .add(sin(gustPhase.mul(2.3).add(iInfo.y.mul(4.0))).mul(0.2));
184
+ .add(sin(gustPhase.mul(2.3).add(bladePhase.mul(4.0))).mul(0.2));
125
185
  vGust.assign(clamp(gust.mul(0.5).add(0.5), 0.0, 1.0));
126
186
 
127
- const phase = u.uTime.mul(u.uWindSpeed).add(iInfo.y.mul(6.2831))
128
- .add(dot(iOrigin.xz, vec2(0.35, 0.28)));
187
+ const phase = u.uTime.mul(u.uWindSpeed).add(bladePhase.mul(6.2831))
188
+ .add(dot(rootPosition.xz, vec2(0.35, 0.28)));
129
189
  const flutter = sin(phase).mul(0.5).add(0.5).add(sin(phase.mul(2.33).add(1.7)).mul(0.3));
130
190
  const wind = windDirection.mul(
131
191
  flutter.mul(0.6).add(vGust.mul(1.1).mul(u.uGustResponse)),
132
192
  ).toVar();
133
193
  const windAmplitude = u.uWindStrength.mul(u.uWindResponse).toVar();
134
- bladePosition.xz.addAssign(wind.mul(windAmplitude).mul(bendCurve).mul(iInfo.x));
194
+ bladePosition.xz.addAssign(wind.mul(windAmplitude).mul(bendCurve).mul(bladeHeight));
135
195
 
136
196
  // Character push.
137
197
  const fromPush = bladePosition.xz.sub(u.uPushPosition.xz).toVar();
138
198
  const pushDistance = length(fromPush);
139
199
  const push = smoothstep(0.0, u.uPushRadius, pushDistance).oneMinus()
140
- .mul(step(abs(iOrigin.y.sub(u.uPushPosition.y)), 1.8));
200
+ .mul(step(abs(rootPosition.y.sub(u.uPushPosition.y)), 1.8));
141
201
  bladePosition.xz.addAssign(
142
202
  normalize(fromPush.add(vec2(1e-4, 0.0))).mul(push).mul(0.42)
143
- .mul(bendCurve).mul(iInfo.x).mul(u.uStyleGrassInteractionResponse),
203
+ .mul(bendCurve).mul(bladeHeight).mul(u.uStyleGrassInteractionResponse),
144
204
  );
145
205
  bladePosition.y.subAssign(
146
- push.mul(0.14).mul(bendCurve).mul(iInfo.x).mul(u.uStyleGrassInteractionResponse),
206
+ push.mul(0.14).mul(bendCurve).mul(bladeHeight).mul(u.uStyleGrassInteractionResponse),
147
207
  );
148
208
 
149
209
  // Shared field normal, tilted by the current bend.
150
210
  const tilt = wind.mul(windAmplitude).add(leanDirection.mul(leanAmount).mul(0.35)).mul(heightFraction);
151
- vNormal.assign(normalize(vec3(tilt.x.mul(1.4), 1.0, tilt.y.mul(1.4))));
211
+ vNormal.assign(normalize(
212
+ surfaceUp.add(vec3(tilt.x.mul(1.4), 0.0, tilt.y.mul(1.4))),
213
+ ));
152
214
 
153
215
  // Distance fade to a degenerate point.
154
- const fadeDistance = distance(modelWorldMatrix.mul(vec4(iOrigin, 1.0)).xz, cameraPosition.xz);
216
+ const originWorld = modelWorldMatrix.mul(vec4(rootPosition, 1.0)).toVar();
217
+ const fadeDistance = distance(originWorld.xz, cameraPosition.xz);
155
218
  const fade = smoothstep(u.uFadeStart, u.uFadeEnd, fadeDistance).oneMinus();
156
- bladePosition.assign(mix(iOrigin, bladePosition, fade));
219
+ bladePosition.assign(mix(rootPosition, bladePosition, fade));
220
+
221
+ // Ground-field adoption: one sample per vertex at the blade ROOT, so the
222
+ // whole blade carries the color of the terrain it grows from (the
223
+ // reference pack's RVT-colored grass). Alpha is field coverage — 0 off
224
+ // the terrain or before the pass runs, leaving the palette untouched.
225
+ // Small isolated lab previews do not run the landscape ground-field pass.
226
+ // Omitting the texture nodes entirely in that case avoids compiling an
227
+ // unused textureDimensions binding on WebGPU.
228
+ vGroundColor.assign(
229
+ groundField ? sampleGroundColor(originWorld.xyz) : vec4(0.0),
230
+ );
157
231
 
158
232
  const worldPosition = modelWorldMatrix.mul(vec4(bladePosition, 1.0));
159
233
  vWorldPosition.assign(worldPosition.xyz);
@@ -161,17 +235,59 @@ export function createGrassNodeMaterial(settings, vegetationShader = null) {
161
235
  })();
162
236
 
163
237
  material.fragmentNode = Fn(() => {
164
- // Rounded taper silhouette.
165
- const taper = pow(vUv.y, 1.6).mul(0.96).oneMinus();
166
- const halfWidth = taper.mul(0.5);
167
- Discard(abs(vUv.x.sub(0.5)).greaterThan(halfWidth));
238
+ if (!clumpGeometry) {
239
+ // The legacy single-blade geometry is a rectangle, so trim it into a
240
+ // rounded taper. Clump geometry carries a real five-triangle tapered
241
+ // silhouette and does not pay this discarded-fragment cost.
242
+ const taper = pow(vUv.y, 1.6).mul(0.96).oneMinus();
243
+ const halfWidth = taper.mul(0.5);
244
+ Discard(abs(vUv.x.sub(0.5)).greaterThan(halfWidth));
245
+ }
168
246
 
169
247
  const tipMix = smoothstep(
170
248
  u.uStyleGrassTipGradientStart,
171
249
  u.uStyleGrassTipGradientEnd,
172
250
  vUv.y.mul(vJitter.mul(0.3).add(0.85)),
173
251
  ).toVar();
174
- const color = mix(u.uBaseColor, u.uTipColor, tipMix).toVar();
252
+ const sourceColor = mix(u.uBaseColor, u.uTipColor, tipMix).toVar();
253
+ const styleTipRaw = u.uStyleGrassBaseColor.add(u.uStyleGrassTipBrightness);
254
+ const styleTipLuminance = dot(styleTipRaw, vec3(0.3, 0.59, 0.11));
255
+ const styleTip = shiftNormalizedHue(
256
+ mix(styleTipRaw, vec3(styleTipLuminance), u.uStyleGrassTipDesaturation),
257
+ u.uStyleGrassTipHueShift,
258
+ );
259
+ const styleColor = mix(u.uStyleGrassBaseColor, styleTip, tipMix);
260
+ const color = mix(
261
+ sourceColor,
262
+ styleColor,
263
+ u.uStyleGrassStyleColorStrength,
264
+ ).toVar();
265
+ // Ground adoption follows MI_Grass rather than simply tinting the roots:
266
+ // the sampled landscape albedo becomes the blade's root palette and the
267
+ // lighter/saturated tip is derived from that same albedo. This keeps the
268
+ // entire silhouette coherent with grass, dirt, and path colors beneath
269
+ // it instead of revealing a bright authored tip over a terrain-colored
270
+ // root. uGroundAdoptHeight controls how long the exact ground color is
271
+ // retained before the ground-derived tip treatment takes over.
272
+ If(u.uGroundAdoptStrength.greaterThan(0.0), () => {
273
+ const groundRoot = vGroundColor.rgb.mul(u.uGroundAdoptTint).toVar();
274
+ // Brighten multiplicatively so a green ground remains green. Additive
275
+ // RGB lift desaturates and can rotate green toward yellow at the tips.
276
+ const groundTipScale = clamp(
277
+ u.uStyleGrassTipBrightness.mul(0.9).add(1.0), 0.1, 2.0,
278
+ );
279
+ const groundTipRaw = groundRoot.mul(groundTipScale);
280
+ const groundTipLuminance = dot(groundTipRaw, vec3(0.3, 0.59, 0.11));
281
+ const groundTip = shiftNormalizedHue(
282
+ mix(groundTipRaw, vec3(groundTipLuminance), u.uStyleGrassTipDesaturation),
283
+ u.uStyleGrassTipHueShift,
284
+ );
285
+ const groundDriven = mix(groundRoot, groundTip, tipMix).toVar();
286
+ const exactGround = smoothstep(u.uGroundAdoptHeight, 0.0, vUv.y);
287
+ groundDriven.assign(mix(groundDriven, groundRoot, exactGround));
288
+ const adopt = clamp(u.uGroundAdoptStrength.mul(vGroundColor.a), 0.0, 1.0);
289
+ color.assign(mix(color, groundDriven, adopt));
290
+ });
175
291
  color.mulAssign(vJitter.sub(0.5).mul(u.uStyleGrassColorVariationStrength).add(1.0));
176
292
 
177
293
  // Dense-field AO toward the roots.
@@ -183,10 +299,14 @@ export function createGrassNodeMaterial(settings, vegetationShader = null) {
183
299
 
184
300
  const normal = normalize(vNormal);
185
301
  const sunDirection = normalize(u.uSunDirection);
186
- const cloudShadow = stylizedCloudShadow(
302
+ const proceduralCloudShadow = stylizedCloudShadow(
187
303
  vWorldPosition.xz, u.uTime,
188
304
  u.uCloudShadowStrength, u.uCloudShadowCoverage, u.uCloudShadowScale, u.uCloudShadowVelocity,
189
305
  );
306
+ const cloudShadow = sampleEnvironmentCloudShadow(
307
+ vWorldPosition,
308
+ proceduralCloudShadow,
309
+ ).toVar();
190
310
  const sceneShadow = mix(1.0, sampleEnvironmentSunShadow(vWorldPosition), u.uShadowStrength);
191
311
  const shaded = shadeVegetationSurface({
192
312
  baseColor: color,
@@ -207,12 +327,57 @@ export function createGrassNodeMaterial(settings, vegetationShader = null) {
207
327
  worldPosition: vWorldPosition,
208
328
  });
209
329
 
330
+ const groundCoverage = clamp(
331
+ u.uGroundAdoptStrength.mul(vGroundColor.a), 0.0, 1.0,
332
+ );
333
+ // The field now contains the ground's visible sun/sky/shared-shadow
334
+ // result. Do not light the adopted part a second time: that would make
335
+ // grass ignore or exaggerate the cast-shadow color beneath it.
336
+ shaded.color.assign(mix(shaded.color, color, groundCoverage));
337
+
210
338
  const sheen = smoothstep(u.uStyleGrassGustSheenThreshold, 1.0, vGust).mul(tipMix);
211
339
  shaded.color.addAssign(
212
340
  u.uSunColor.mul(sheen).mul(u.uStyleGrassGustSheenStrength).mul(shaded.band),
213
341
  );
342
+ const viewDirection = normalize(cameraPosition.sub(vWorldPosition));
343
+ const halfVector = normalize(sunDirection.add(viewDirection));
344
+ const highlightPower = mix(96.0, 8.0, u.uStyleGrassRoughness);
345
+ const highlight = pow(
346
+ clamp(dot(normal, halfVector), 0, 1),
347
+ highlightPower,
348
+ ).mul(sceneShadow).mul(u.uStyleGrassSpecularStrength);
349
+ shaded.color.addAssign(u.uSunColor.mul(highlight));
350
+ shaded.color.addAssign(color.mul(u.uStyleGrassEmissiveStrength));
351
+
352
+ // Texture-free watercolor layering. Two low-frequency bands create
353
+ // irregular pigment lift along each stroke; seeded opacity lets dense
354
+ // clumps read as overlapping painted blades instead of one opaque cutout.
355
+ // Neutral defaults leave other grass presets unchanged.
356
+ const washBand = sin(
357
+ vUv.y.mul(10.7)
358
+ .add(vJitter.mul(6.2831))
359
+ .add(dot(vWorldPosition.xz, vec2(0.73, 0.41))),
360
+ ).mul(0.5).add(0.5);
361
+ const washGrain = sin(
362
+ vUv.y.mul(23.1)
363
+ .sub(vJitter.mul(4.7))
364
+ .add(dot(vWorldPosition.xz, vec2(-0.29, 0.83))),
365
+ ).mul(0.5).add(0.5);
366
+ const wash = washBand.mul(0.65).add(washGrain.mul(0.35));
367
+ // Watercolor lift layers over the lit, ground-adopted blade. Returning to
368
+ // flat ground albedo here would undo the shared scene-light response a
369
+ // second time.
370
+ const washTarget = shaded.color.mul(1.18).add(
371
+ u.uSunColor.mul(0.035).mul(groundCoverage.oneMinus()),
372
+ );
373
+ shaded.color.assign(mix(shaded.color, washTarget, u.uWashLift));
374
+ const strokeAlpha = mix(
375
+ u.uWashOpacity.mul(0.86),
376
+ u.uWashOpacity,
377
+ wash.mul(0.65).add(vJitter.mul(0.35)),
378
+ );
214
379
 
215
- return vec4(shaded.color, 1.0);
380
+ return vec4(shaded.color, strokeAlpha);
216
381
  })();
217
382
 
218
383
  material.uniforms = u;
@@ -56,6 +56,7 @@ import {
56
56
  distance,
57
57
  dot,
58
58
  float,
59
+ exp,
59
60
  floor,
60
61
  fract,
61
62
  Fn,
@@ -64,6 +65,7 @@ import {
64
65
  max,
65
66
  min,
66
67
  mix,
68
+ pow,
67
69
  positionLocal,
68
70
  screenCoordinate,
69
71
  sign,
@@ -79,6 +81,8 @@ import {
79
81
  } from 'three/tsl';
80
82
  import { NodeMaterial } from 'three/webgpu';
81
83
 
84
+ import { environmentStateUniformNodes } from './chunks/environment-state.js';
85
+
82
86
  // Shared 1x1 placeholder so every optional texture uniform (tLut,
83
87
  // tCharacterMask, tBloom, and the not-yet-wired tDepth/tDiffuse at
84
88
  // construction time) always has a real bound texture. Classic tolerates a
@@ -245,6 +249,21 @@ export function createPostCompositeNodeMaterial() {
245
249
  depthCueFar: uniform(24.0),
246
250
  depthCueNear: uniform(1.0),
247
251
  depthCueStrength: uniform(0.0),
252
+ // Two-layer stylized atmosphere (the reference sky system's signature
253
+ // fog): a scene-color mix fog with height falloff + an additive glow fog
254
+ // centered on the sun/moon. Colors and glow parameters come from the
255
+ // shared environment state so the day cycle drives them scene-wide.
256
+ useAtmosphere: uniform(0.0),
257
+ atmosphereStrength: uniform(0.55),
258
+ atmosphereNear: uniform(60.0),
259
+ atmosphereFar: uniform(900.0),
260
+ atmosphereHeightFalloff: uniform(0.012),
261
+ atmosphereBaseHeight: uniform(0.0),
262
+ atmosphereGlowStrength: uniform(1.0),
263
+ atmosphereInverseViewProjection: uniform(new THREE.Matrix4()),
264
+ atmosphereViewProjection: uniform(new THREE.Matrix4()),
265
+ atmosphereCameraPosition: uniform(new THREE.Vector3()),
266
+ atmosphereAspect: uniform(16 / 9),
248
267
  exposure: uniform(1.0),
249
268
  tLut: texture(fallbackPostTexture()),
250
269
  lutSize: uniform(0.0),
@@ -298,6 +317,23 @@ export function createPostCompositeNodeMaterial() {
298
317
  return viewZToOrthographicDepth(viewZ, u.cameraNear, u.cameraFar);
299
318
  });
300
319
 
320
+ // View distance in METERS — depthCue/atmosphere parameters are authored in
321
+ // world units (depthCueFar: 1250 means 1250 m), so comparing them against
322
+ // the [0,1] normalized depth above silently disabled the whole stage.
323
+ const readViewDistance = Fn(([sampleUv]) => {
324
+ const fragCoordZ = u.tDepth.sample(rtUv(sampleUv)).level(0).x;
325
+ return perspectiveDepthToViewZ(fragCoordZ, u.cameraNear, u.cameraFar).negate();
326
+ });
327
+
328
+ // World-position reconstruction from the depth prepass (same NDC math the
329
+ // motion-blur stage uses).
330
+ const reconstructWorldPosition = Fn(([sampleUv]) => {
331
+ const fragDepth = u.tDepth.sample(rtUv(sampleUv)).level(0).x;
332
+ const ndc = vec4(sampleUv.mul(2.0).sub(1.0), fragDepth.mul(2.0).sub(1.0), 1.0);
333
+ const world = u.atmosphereInverseViewProjection.mul(ndc).toVar();
334
+ return world.xyz.div(world.w);
335
+ });
336
+
301
337
  const sampleLutSlice = Fn(([color, slice]) => {
302
338
  const uCoord = slice.mul(u.lutSize).add(0.5).add(color.r.mul(u.lutSize.sub(1.0))).div(u.lutSize.mul(u.lutSize));
303
339
  const vCoord = float(0.5).add(color.g.mul(u.lutSize.sub(1.0))).div(u.lutSize);
@@ -401,11 +437,56 @@ export function createPostCompositeNodeMaterial() {
401
437
  });
402
438
 
403
439
  If(u.useDepthCue.greaterThan(0.5), () => {
404
- const depth = readLinearDepth(vUv);
405
- const cue = smoothstep(u.depthCueNear, u.depthCueFar, depth).mul(u.depthCueStrength);
440
+ const viewDistance = readViewDistance(vUv);
441
+ const cue = smoothstep(u.depthCueNear, u.depthCueFar, viewDistance).mul(u.depthCueStrength);
406
442
  color.assign(mix(color, u.depthCueColor, cue));
407
443
  });
408
444
 
445
+ If(u.useAtmosphere.greaterThan(0.5), () => {
446
+ const env = environmentStateUniformNodes;
447
+ const viewDistance = readViewDistance(vUv).toVar();
448
+ const worldPosition = reconstructWorldPosition(vUv).toVar();
449
+
450
+ // Layer 1 — atmospheric mix fog: fades the world toward the state fog
451
+ // color with distance, thinning with altitude so peaks stay clear.
452
+ const heightAbove = max(worldPosition.y.sub(u.atmosphereBaseHeight), 0.0);
453
+ const heightWeight = exp(heightAbove.mul(u.atmosphereHeightFalloff).negate());
454
+ const fogAmount = smoothstep(u.atmosphereNear, max(u.atmosphereFar, u.atmosphereNear.add(1.0)), viewDistance)
455
+ .mul(clamp(u.atmosphereStrength, 0.0, 1.0))
456
+ .mul(heightWeight)
457
+ .toVar();
458
+ color.assign(mix(color, env.atmosphereFogColor, clamp(fogAmount, 0.0, 0.97)));
459
+
460
+ // Layer 2 — additive celestial glow fog: a depth-aware halo around the
461
+ // screen-projected sun/moon. This is what builds the multi-colored
462
+ // sunrise/sunset gradients over the far landscape.
463
+ const glowTotal = env.atmosphereGlowIntensity.mul(u.atmosphereGlowStrength);
464
+ If(glowTotal.greaterThan(0.001), () => {
465
+ const addGlow = (direction, bodyColor, visibility) => {
466
+ const clip = u.atmosphereViewProjection.mul(
467
+ vec4(u.atmosphereCameraPosition.add(direction.mul(1000.0)), 1.0),
468
+ ).toVar();
469
+ If(clip.w.greaterThan(0.0), () => {
470
+ const bodyUv = clip.xy.div(clip.w).mul(0.5).add(0.5);
471
+ const offset = vUv.sub(bodyUv).mul(vec2(u.atmosphereAspect, 1.0));
472
+ const halo = pow(
473
+ clamp(length(offset).div(max(env.atmosphereGlowSpread, 0.01)).oneMinus(), 0.0, 1.0),
474
+ 2.2,
475
+ );
476
+ // Far pixels only: the glow is fog lit by the body, not a lens
477
+ // flare — nearby geometry keeps its own color.
478
+ const depthWeight = smoothstep(u.atmosphereNear.mul(0.4), u.atmosphereFar.mul(0.8), viewDistance);
479
+ color.addAssign(
480
+ env.atmosphereGlowColor.mul(bodyColor)
481
+ .mul(halo).mul(depthWeight).mul(glowTotal).mul(visibility),
482
+ );
483
+ });
484
+ };
485
+ addGlow(env.sunDirection, vec3(1.0), env.sunVisibility);
486
+ addGlow(env.moonDirection, env.moonColor, env.moonVisibility.mul(env.moonIntensity));
487
+ });
488
+ });
489
+
409
490
  If(u.useColorGrade.greaterThan(0.5), () => {
410
491
  color.mulAssign(u.exposure);
411
492
  color.assign(color.sub(0.5).mul(u.contrast).add(0.5));