@call-me-sensei/toonlab 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/AGENTS.md +127 -4
  2. package/ATTRIBUTION.md +41 -3
  3. package/README.md +234 -34
  4. package/docs/characters.md +144 -0
  5. package/docs/debug-panel.md +126 -0
  6. package/docs/docs.css +589 -0
  7. package/docs/environment.md +186 -0
  8. package/docs/getting-started.md +180 -0
  9. package/docs/index.html +14 -0
  10. package/docs/lab-architecture.md +100 -0
  11. package/docs/lighting.md +825 -0
  12. package/docs/main.jsx +739 -0
  13. package/docs/mcp.md +97 -0
  14. package/docs/post-processing.md +98 -0
  15. package/docs/settings-reference.md +1878 -0
  16. package/docs/shader-constants.md +77 -0
  17. package/docs/sky.md +182 -0
  18. package/docs/style-labs.md +309 -0
  19. package/docs/texture-lab.md +135 -0
  20. package/docs/toon-shading.md +183 -0
  21. package/docs/tsl-conventions.md +167 -0
  22. package/docs/vegetation-sky.md +275 -0
  23. package/docs/water.md +430 -0
  24. package/docs/weather.md +200 -0
  25. package/docs/world-scale.md +111 -0
  26. package/mcp/server.mjs +610 -0
  27. package/mcp/style-lab-tools.mjs +371 -0
  28. package/mcp/vite-plugin.mjs +174 -0
  29. package/mcp/workspace.mjs +397 -0
  30. package/package.json +64 -5
  31. package/src/ambientfx/INTEGRATION.md +164 -0
  32. package/src/ambientfx/ambientFxPresets.js +83 -0
  33. package/src/ambientfx/ambientFxSettings.js +368 -0
  34. package/src/ambientfx/emitters.js +169 -0
  35. package/src/ambientfx/index.js +5 -0
  36. package/src/ambientfx/particleBackbone.js +493 -0
  37. package/src/ambientfx/stylizedAmbientFx.js +450 -0
  38. package/src/assetlib/ambientcg.js +117 -0
  39. package/src/assetlib/assetRef.js +91 -0
  40. package/src/assetlib/importedEntry.js +40 -0
  41. package/src/assetlib/index.js +23 -0
  42. package/src/assetlib/kaykit.js +192 -0
  43. package/src/assetlib/kaykitStaticIndex.js +700 -0
  44. package/src/assetlib/loadImported.js +143 -0
  45. package/src/assetlib/opensource3d.js +113 -0
  46. package/src/assetlib/polyhaven.js +182 -0
  47. package/src/assetlib/polypizza.js +115 -0
  48. package/src/assetlib/smithsonian.js +214 -0
  49. package/src/assetlib/sources.js +279 -0
  50. package/src/assetlib/zip.js +58 -0
  51. package/src/biome/biomeGenerator.js +385 -0
  52. package/src/biome/biomeRuntime.js +299 -0
  53. package/src/biome/index.js +2 -0
  54. package/src/buildinggen/buildingAsset.js +44 -0
  55. package/src/buildinggen/buildingGrammar.js +311 -0
  56. package/src/buildinggen/buildingMesh.js +451 -0
  57. package/src/buildinggen/buildingPresets.js +46 -0
  58. package/src/buildinggen/buildingRecipe.js +100 -0
  59. package/src/buildinggen/buildingSettings.js +238 -0
  60. package/src/buildinggen/index.js +6 -0
  61. package/src/camera/cameraDirector.js +157 -0
  62. package/src/camera/cameraGenerator.js +367 -0
  63. package/src/camera/cameraRig.js +570 -0
  64. package/src/camera/cameraSettings.js +236 -0
  65. package/src/camera/index.js +7 -0
  66. package/src/catalog/builtinEntries.js +245 -0
  67. package/src/catalog/catalog.js +210 -0
  68. package/src/catalog/index.js +3 -0
  69. package/src/catalog/manifest.js +84 -0
  70. package/src/core/generation.js +529 -0
  71. package/src/environment/environmentRigs.js +21 -1
  72. package/src/environment/environmentSettings.js +4 -0
  73. package/src/environment/environmentSunShadowPass.js +8 -0
  74. package/src/fauna/INTEGRATION.md +174 -0
  75. package/src/fauna/boids.js +861 -0
  76. package/src/fauna/faunaBodies.js +492 -0
  77. package/src/fauna/faunaPresets.js +52 -0
  78. package/src/fauna/faunaSettings.js +525 -0
  79. package/src/fauna/index.js +5 -0
  80. package/src/fauna/stylizedFauna.js +395 -0
  81. package/src/game-feel/gameFeelGenerator.js +402 -0
  82. package/src/game-feel/gameFeelRuntime.js +549 -0
  83. package/src/game-feel/index.js +2 -0
  84. package/src/index.js +17 -6
  85. package/src/lighting/colorIntensity.js +177 -0
  86. package/src/lighting/index.js +161 -0
  87. package/src/lighting/lightDescriptors.js +249 -0
  88. package/src/lighting/lightingCapabilities.js +79 -0
  89. package/src/lighting/lightingDocuments.js +247 -0
  90. package/src/lighting/lightingFixtures.js +446 -0
  91. package/src/lighting/lightingGenerator.js +449 -0
  92. package/src/lighting/lightingPresets.js +319 -0
  93. package/src/lighting/lightingRuntime.js +723 -0
  94. package/src/lighting/lightingStyle.js +386 -0
  95. package/src/lighting/lightingSystem.js +774 -0
  96. package/src/lighting/unrealExport.js +186 -0
  97. package/src/lighting/utils.js +87 -0
  98. package/src/motion/index.js +5 -0
  99. package/src/motion/motionClip.js +441 -0
  100. package/src/motion/motionController.js +628 -0
  101. package/src/motion/motionDocuments.js +225 -0
  102. package/src/motion/motionGraph.js +307 -0
  103. package/src/motion/motionSettings.js +222 -0
  104. package/src/pathgen/index.js +7 -0
  105. package/src/pathgen/pathBridge.js +232 -0
  106. package/src/pathgen/pathPresets.js +35 -0
  107. package/src/pathgen/pathRibbon.js +410 -0
  108. package/src/pathgen/pathRouter.js +380 -0
  109. package/src/pathgen/pathSettings.js +335 -0
  110. package/src/pathgen/pathTextures.js +123 -0
  111. package/src/pathgen/stylizedPaths.js +453 -0
  112. package/src/post/index.js +1 -0
  113. package/src/post/postGenerator.js +177 -0
  114. package/src/post/postProcessing.js +41 -0
  115. package/src/propgen/generatorsWave1.js +379 -0
  116. package/src/propgen/generatorsWave2.js +462 -0
  117. package/src/propgen/index.js +5 -0
  118. package/src/propgen/propAsset.js +323 -0
  119. package/src/propgen/propParts.js +170 -0
  120. package/src/propgen/propPlacement.js +459 -0
  121. package/src/propgen/propPresets.js +82 -0
  122. package/src/propgen/propSettings.js +395 -0
  123. package/src/shaders-tsl/chunks/projected-water-caustics.js +242 -0
  124. package/src/shaders-tsl/chunks/vegetation-style.js +360 -0
  125. package/src/shaders-tsl/chunks/water-shore-state.js +31 -0
  126. package/src/shaders-tsl/chunks/water-waves.js +90 -11
  127. package/src/shaders-tsl/environment.js +15 -1
  128. package/src/shaders-tsl/flower.js +279 -30
  129. package/src/shaders-tsl/grass.js +60 -33
  130. package/src/shaders-tsl/sky.js +125 -31
  131. package/src/shaders-tsl/tree-leaf.js +61 -25
  132. package/src/shaders-tsl/water-breaker.js +7 -4
  133. package/src/shaders-tsl/water-shore-state-simulation.js +523 -0
  134. package/src/shaders-tsl/water.js +439 -49
  135. package/src/shaders-tsl/woody-surface.js +154 -0
  136. package/src/sky/sceneOverrideLayers.js +10 -0
  137. package/src/sky/skyQuality.js +26 -0
  138. package/src/sky/stylizedSky.js +753 -45
  139. package/src/soundscape/index.js +4 -0
  140. package/src/soundscape/soundscapeGenerator.js +179 -0
  141. package/src/soundscape/soundscapeRuntime.js +806 -0
  142. package/src/soundscape/soundscapeSettings.js +292 -0
  143. package/src/styles/index.js +13 -0
  144. package/src/styles/styleBundle.js +325 -0
  145. package/src/stylizedTerrain.js +32 -2
  146. package/src/stylizedWorld.js +423 -20
  147. package/src/texgen/evaluateTexture.js +675 -0
  148. package/src/texgen/index.js +60 -0
  149. package/src/texgen/noise2.js +210 -0
  150. package/src/texgen/textureAi.js +436 -0
  151. package/src/texgen/textureGenerators.js +516 -0
  152. package/src/texgen/texturePresets.js +490 -0
  153. package/src/texgen/textureSettings.js +342 -0
  154. package/src/texgen/textureThree.js +59 -0
  155. package/src/vegetation/flowerSpecies.js +15 -3
  156. package/src/vegetation/grassPalettes.js +153 -0
  157. package/src/vegetation/index.js +6 -0
  158. package/src/vegetation/stylizedBush.js +2 -0
  159. package/src/vegetation/stylizedFlower.js +82 -0
  160. package/src/vegetation/stylizedFlowers.js +48 -7
  161. package/src/vegetation/stylizedForest.js +29 -1
  162. package/src/vegetation/stylizedGrass.js +291 -56
  163. package/src/vegetation/stylizedTree.js +38 -2
  164. package/src/vegetation/stylizedTreeFoliage.js +2 -1
  165. package/src/vegetation/vegetationShaders.js +1110 -0
  166. package/src/vfxgen/INTEGRATION.md +145 -0
  167. package/src/vfxgen/core/burstBackbone.js +380 -0
  168. package/src/vfxgen/core/projectileCore.js +92 -0
  169. package/src/vfxgen/core/spriteShapes.js +98 -0
  170. package/src/vfxgen/core/trailRibbon.js +272 -0
  171. package/src/vfxgen/core/vfxRandom.js +29 -0
  172. package/src/vfxgen/effects/emitHelpers.js +37 -0
  173. package/src/vfxgen/effects/magicEffects.js +162 -0
  174. package/src/vfxgen/effects/movementEffects.js +87 -0
  175. package/src/vfxgen/effects/weaponEffects.js +118 -0
  176. package/src/vfxgen/index.js +18 -0
  177. package/src/vfxgen/moves/moveController.js +146 -0
  178. package/src/vfxgen/moves/moveLibrary.js +335 -0
  179. package/src/vfxgen/vfxPresets.js +98 -0
  180. package/src/vfxgen/vfxSettings.js +384 -0
  181. package/src/vfxgen/vfxSystem.js +449 -0
  182. package/src/vfxgen/weapons/stylizedWeapons.js +137 -0
  183. package/src/villagegen/index.js +4 -0
  184. package/src/villagegen/stylizedVillage.js +490 -0
  185. package/src/villagegen/villageArchetypes.js +160 -0
  186. package/src/villagegen/villageNames.js +40 -0
  187. package/src/villagegen/villageSites.js +105 -0
  188. package/src/water/sceneOverrideLayers.js +23 -0
  189. package/src/water/water.js +5 -0
  190. package/src/water/waterBreakerSystem.js +15 -1
  191. package/src/water/waterCurrentField.js +447 -0
  192. package/src/water/waterMaterial.js +12 -0
  193. package/src/water/waterNearshorePhase.js +320 -0
  194. package/src/water/waterScenePasses.js +83 -30
  195. package/src/water/waterSettings.js +325 -13
  196. package/src/water/waterShoreMaterial.js +322 -0
  197. package/src/water/waterShoreStateField.js +605 -0
  198. package/src/water/waterSurface.js +797 -28
  199. package/src/weather/index.js +6 -0
  200. package/src/weather/weatherPrecipitation.js +221 -0
  201. package/src/weather/weatherPresets.js +258 -0
  202. package/src/weather/weatherSettings.js +269 -0
  203. package/src/weather/weatherSystem.js +871 -0
  204. package/src/worldMinimap.js +62 -0
  205. package/src/worldPresets.js +4 -1
@@ -0,0 +1,1878 @@
1
+ # Settings reference
2
+
3
+ <!-- GENERATED FILE — do not edit by hand. -->
4
+ <!-- Regenerate with: node scripts/generate-settings-reference.mjs -->
5
+
6
+ Every tunable field in the settings schemas, generated from the
7
+ `*_SETTING_GROUPS` / `*_SETTING_FIELD_SCHEMA` exports. The same schemas
8
+ drive the [debug panel](debug-panel.md) and lab inspectors. A lab may place
9
+ scene/runtime inputs in its Preview controls instead of the saved editor;
10
+ the **Portable** column makes that ownership explicit.
11
+
12
+ - [Character toon shading](#character-toon-shading)
13
+ - [Environment shading](#environment-shading)
14
+ - [Water](#water)
15
+ - [Post-processing](#post-processing)
16
+ - [Vegetation shader profile](#vegetation-shader-profile)
17
+ - [Grass](#grass)
18
+ - [Flowers](#flowers)
19
+ - [Trees](#trees)
20
+ - [Sky](#sky)
21
+ - [Paths, roads & bridges](#paths-roads-bridges)
22
+ - [Ambient VFX](#ambient-vfx)
23
+ - [Gameplay VFX](#gameplay-vfx)
24
+ - [Fauna](#fauna)
25
+ - [Buildings](#buildings)
26
+ - [Procedural textures](#procedural-textures)
27
+
28
+ ## Character toon shading
29
+
30
+ Module: `toonlab/toon` — 23 groups, 298 fields.
31
+
32
+ Settings are nested per group: `createToonSettings({ rimLight: { intensity: 0.2 } })`.
33
+
34
+ ### Character toon shading: Base Texture
35
+
36
+ Preserves source texture, source material color, and saturation policy before toon lighting.
37
+
38
+ | Field | Type | Default | Range / options | Portable | Description |
39
+ |---|---|---|---|---|---|
40
+ | `customSaturation` | number | `1` | 0 – 2 | Yes | Configures custom saturation for base texture. |
41
+ | `materialColorMode` | select | `'legacy'` | `legacy` \| `source` \| `texture` \| `white` | Yes | Sets the color used by material color mode. |
42
+ | `saturationMode` | select | `'legacy'` | `legacy` \| `source` \| `custom` | Yes | Selects the policy used by saturation mode. |
43
+
44
+ ### Character toon shading: Alpha
45
+
46
+ Controls cutout, blend, opacity, eye overlay sorting, and transparent decoration behavior.
47
+
48
+ | Field | Type | Default | Range / options | Portable | Description |
49
+ |---|---|---|---|---|---|
50
+ | `blendCutoff` | number | `0.02` | 0 – 1 | Yes | Configures blend cutoff for alpha. |
51
+ | `costumeCutout` | boolean | `true` | — | Yes | Configures costume cutout for alpha. |
52
+ | `cutoutCutoff` | number | `0.35` | 0 – 1 | Yes | Configures cutout cutoff for alpha. |
53
+ | `ditherOpacity` | number | `1` | 0 – 1 | Yes | Configures dither opacity for alpha. |
54
+ | `enabled` | boolean | `true` | — | Yes | Turns alpha on or off. |
55
+ | `expressionTokenCutout` | boolean | `true` | — | Yes | Configures expression token cutout for alpha. |
56
+ | `eyeHighlightOrder` | number | `12` | -30 – 30 | Yes | Controls transparent draw order for eye highlight order. |
57
+ | `eyeOrder` | number | `11` | -30 – 30 | Yes | Controls transparent draw order for eye order. |
58
+ | `faceCutout` | boolean | `true` | — | Yes | Configures face cutout for alpha. |
59
+ | `hairCutout` | boolean | `true` | — | Yes | Configures hair cutout for alpha. |
60
+ | `mapTransparentCutout` | boolean | `true` | — | Yes | Configures map transparent cutout for alpha. |
61
+ | `overlayDepthWrite` | boolean | `false` | — | Yes | Configures overlay depth write for alpha. |
62
+ | `overlayOrder` | number | `20` | -30 – 30 | Yes | Controls transparent draw order for overlay order. |
63
+ | `preserveSourceAlphaTest` | boolean | `true` | — | Yes | Configures preserve source alpha test for alpha. |
64
+ | `scleraOrder` | number | `10` | -30 – 30 | Yes | Controls transparent draw order for sclera order. |
65
+ | `skinCutout` | boolean | `true` | — | Yes | Configures skin cutout for alpha. |
66
+ | `sortOverlays` | boolean | `true` | — | Yes | Configures sort overlays for alpha. |
67
+ | `sourceAlphaMapCutout` | boolean | `true` | — | Yes | Configures source alpha map cutout for alpha. |
68
+ | `sourceTransparentCutout` | boolean | `true` | — | Yes | Configures source transparent cutout for alpha. |
69
+ | `transparentOverlayBlend` | boolean | `true` | — | Yes | Configures transparent overlay blend for alpha. |
70
+ | `transparentOpacityThreshold` | number | `0.999` | 0 – 1 | Yes | Configures transparent opacity threshold for alpha. |
71
+
72
+ ### Character toon shading: Skin Tone
73
+
74
+ Keeps skin and face shadows warm, readable, and separate from costume/hair shadows.
75
+
76
+ | Field | Type | Default | Range / options | Portable | Description |
77
+ |---|---|---|---|---|---|
78
+ | `enabled` | boolean | `true` | — | Yes | Turns skin tone on or off. |
79
+ | `faceMaxDirectLight` | number | `100` | 0 – 8 | Yes | Configures face max direct light for skin tone. |
80
+ | `faceMinimumIndirectLight` | number | `0.35` | 0 – 1 | Yes | Sets the minimum light floor for face minimum indirect light. |
81
+ | `faceShadowBrightness` | number | `1` | 0 – 2 | Yes | Configures face shadow brightness for skin tone. |
82
+ | `faceShadowSaturation` | number | `1` | 0 – 2 | Yes | Configures face shadow saturation for skin tone. |
83
+ | `faceShadowTint` | color | `[1, 0.92, 0.9]` (#ffebe6) | — | Yes | Sets the color used by face shadow tint. |
84
+ | `faceShadowTintStrength` | number | `1` | 0 – 8 | Yes | Controls the blend strength for face shadow tint strength. |
85
+ | `skinMaxDirectLight` | number | `100` | 0 – 8 | Yes | Configures skin max direct light for skin tone. |
86
+ | `skinMinimumIndirectLight` | number | `0.35` | 0 – 1 | Yes | Sets the minimum light floor for skin minimum indirect light. |
87
+ | `skinShadowBrightness` | number | `0.92` | 0 – 2 | Yes | Configures skin shadow brightness for skin tone. |
88
+ | `skinShadowSaturation` | number | `1` | 0 – 2 | Yes | Configures skin shadow saturation for skin tone. |
89
+ | `skinShadowTint` | color | `[1, 0.76, 0.74]` (#ffc2bd) | — | Yes | Sets the color used by skin shadow tint. |
90
+ | `skinShadowTintStrength` | number | `1` | 0 – 8 | Yes | Controls the blend strength for skin shadow tint strength. |
91
+
92
+ ### Character toon shading: Face Lighting
93
+
94
+ Overrides face-area cel response so noses, cheeks, and eyes do not receive harsh body shadows.
95
+
96
+ | Field | Type | Default | Range / options | Portable | Description |
97
+ |---|---|---|---|---|---|
98
+ | `enabled` | boolean | `true` | — | Yes | Turns face lighting on or off. |
99
+ | `faceCelMidPoint` | number | `-0.48` | -1 – 1 | Yes | Moves the center point for face cel mid point. |
100
+ | `faceCelSoftness` | number | `0.22` | 0 – 1 | Yes | Controls transition softness for face cel softness. |
101
+ | `faceLocalLightLift` | number | `0.22` | 0 – 1 | Yes | Configures face local light lift for face lighting. |
102
+ | `faceMainLightIgnoreCelShade` | number | `0.45` | 0 – 1 | Yes | Configures face main light ignore cel shade for face lighting. |
103
+ | `faceNormalProxyBlend` | number | `0.75` | 0 – 1 | Yes | Configures face normal proxy blend for face lighting. |
104
+ | `faceProxyNormal` | vector3 | `[0, 0, 1]` | — | Yes | Configures face proxy normal for face lighting. |
105
+ | `faceSceneShadowStrength` | number | `0.5` | 0 – 8 | Yes | Controls the blend strength for face scene shadow strength. |
106
+ | `faceSphereBlend` | number | `0.75` | 0 – 1 | Yes | Configures face sphere blend for face lighting. |
107
+ | `headSpaceMode` | select | `'headBone'` | `static` \| `headBone` | Yes | Selects the policy used by head space mode. |
108
+
109
+ ### Character toon shading: Cel Shade
110
+
111
+ Sets the primary directional cel band threshold, softness, and light-ignore amount.
112
+
113
+ | Field | Type | Default | Range / options | Portable | Description |
114
+ |---|---|---|---|---|---|
115
+ | `bodyCelMidPoint` | number | `0.06` | -1 – 1 | Yes | Moves the center point for body cel mid point. |
116
+ | `bodyCelSoftness` | number | `0.045` | 0 – 1 | Yes | Controls transition softness for body cel softness. |
117
+ | `bodyMainLightIgnoreCelShade` | number | `0.02` | 0 – 1 | Yes | Configures body main light ignore cel shade for cel shade. |
118
+ | `edgeAntiAliasStrength` | number | `1` | 0 – 8 | Yes | Controls the blend strength for edge anti alias strength. |
119
+ | `enabled` | boolean | `true` | — | Yes | Turns cel shade on or off. |
120
+
121
+ ### Character toon shading: Shadow Color
122
+
123
+ Tints and reshapes lit-to-shadow transitions and fully shadowed regions.
124
+
125
+ | Field | Type | Default | Range / options | Portable | Description |
126
+ |---|---|---|---|---|---|
127
+ | `enabled` | boolean | `true` | — | Yes | Turns shadow color on or off. |
128
+ | `lowSaturationFallbackColor` | vector4 | `[0.3764706, 0.4141177, 0.5019608, 0]` | — | Yes | Sets the color used by low saturation fallback color. |
129
+ | `selfShadowAlbedoMulStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for self shadow albedo mul strength. |
130
+ | `selfShadowAreaHSVStrength` | number | `1` | 0 – 8 | Yes | Controls the blend strength for self shadow area h s v strength. |
131
+ | `selfShadowAreaHueOffset` | number | `0` | -1 – 1 | Yes | Configures self shadow area hue offset for shadow color. |
132
+ | `selfShadowAreaSaturationBoost` | number | `0.2` | 0 – 2 | Yes | Configures self shadow area saturation boost for shadow color. |
133
+ | `selfShadowAreaValueMul` | number | `0.68` | 0 – 2 | Yes | Configures self shadow area value mul for shadow color. |
134
+ | `selfShadowTintColor` | color | `[1, 1, 1]` (#ffffff) | — | Yes | Sets the color used by self shadow tint color. |
135
+ | `transitionAreaHueOffset` | number | `0.01` | -1 – 1 | Yes | Configures transition area hue offset for shadow color. |
136
+ | `transitionAreaIntensity` | number | `1` | 0 – 8 | Yes | Controls how strongly transition area intensity contributes. |
137
+ | `transitionAreaSaturationBoost` | number | `0.36` | 0 – 2 | Yes | Configures transition area saturation boost for shadow color. |
138
+ | `transitionAreaTintColor` | color | `[1, 1, 1]` (#ffffff) | — | Yes | Sets the color used by transition area tint color. |
139
+ | `transitionAreaValueMul` | number | `1` | 0 – 2 | Yes | Configures transition area value mul for shadow color. |
140
+
141
+ ### Character toon shading: Scene Shadows
142
+
143
+ Controls how renderer shadow maps darken character materials.
144
+
145
+ | Field | Type | Default | Range / options | Portable | Description |
146
+ |---|---|---|---|---|---|
147
+ | `defaultMinLight` | number | `0.24` | 0 – 1 | Yes | Sets the minimum light floor for default min light. |
148
+ | `defaultStrength` | number | `0.76` | 0 – 8 | Yes | Controls the blend strength for default strength. |
149
+ | `enabled` | boolean | `true` | — | Yes | Turns scene shadows on or off. |
150
+ | `eyeMinLight` | number | `0.42` | 0 – 1 | Yes | Sets the minimum light floor for eye min light. |
151
+ | `eyeStrength` | number | `0.05` | 0 – 8 | Yes | Controls the blend strength for eye strength. |
152
+ | `faceMinLight` | number | `0.42` | 0 – 1 | Yes | Sets the minimum light floor for face min light. |
153
+ | `faceStrength` | number | `0.46` | 0 – 8 | Yes | Controls the blend strength for face strength. |
154
+ | `shadowAreaStrength` | number | `0.65` | 0 – 8 | Yes | Controls the blend strength for shadow area strength. |
155
+ | `skinMinLight` | number | `0.34` | 0 – 1 | Yes | Sets the minimum light floor for skin min light. |
156
+ | `skinStrength` | number | `0.62` | 0 – 8 | Yes | Controls the blend strength for skin strength. |
157
+
158
+ ### Character toon shading: Self Shadow
159
+
160
+ Controls character-local self-shadow proxy contribution until a dedicated self-shadow pass exists.
161
+
162
+ | Field | Type | Default | Range / options | Portable | Description |
163
+ |---|---|---|---|---|---|
164
+ | `defaultMinLight` | number | `0.62` | 0 – 1 | Yes | Sets the minimum light floor for default min light. |
165
+ | `defaultStrength` | number | `0.22` | 0 – 8 | Yes | Controls the blend strength for default strength. |
166
+ | `enabled` | boolean | `true` | — | Yes | Turns self shadow on or off. |
167
+ | `eyeMinLight` | number | `1` | 0 – 1 | Yes | Sets the minimum light floor for eye min light. |
168
+ | `eyeStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for eye strength. |
169
+ | `faceMinLight` | number | `1` | 0 – 1 | Yes | Sets the minimum light floor for face min light. |
170
+ | `faceStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for face strength. |
171
+ | `hairMinLight` | number | `0.58` | 0 – 1 | Yes | Sets the minimum light floor for hair min light. |
172
+ | `hairStrength` | number | `0.26` | 0 – 8 | Yes | Controls the blend strength for hair strength. |
173
+ | `shadowAreaStrength` | number | `0.5` | 0 – 8 | Yes | Controls the blend strength for shadow area strength. |
174
+ | `skinMinLight` | number | `0.72` | 0 – 1 | Yes | Sets the minimum light floor for skin min light. |
175
+ | `skinStrength` | number | `0.16` | 0 – 8 | Yes | Controls the blend strength for skin strength. |
176
+ | `sourceMode` | select | `2` | `0` \| `1` \| `2` | Yes | Selects the policy used by source mode. |
177
+
178
+ ### Character toon shading: Average Shadow
179
+
180
+ Adds averaged shadow visibility used for softer role-specific shadow damping.
181
+
182
+ | Field | Type | Default | Range / options | Portable | Description |
183
+ |---|---|---|---|---|---|
184
+ | `defaultMinLight` | number | `0.28` | 0 – 1 | Yes | Sets the minimum light floor for default min light. |
185
+ | `defaultStrength` | number | `0.28` | 0 – 8 | Yes | Controls the blend strength for default strength. |
186
+ | `enabled` | boolean | `false` | — | Yes | Turns average shadow on or off. |
187
+ | `measuredBlend` | number | `0.65` | 0 – 1 | Yes | Configures measured blend for average shadow. |
188
+ | `eyeMinLight` | number | `1` | 0 – 1 | Yes | Sets the minimum light floor for eye min light. |
189
+ | `eyeStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for eye strength. |
190
+ | `faceMinLight` | number | `1` | 0 – 1 | Yes | Sets the minimum light floor for face min light. |
191
+ | `faceStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for face strength. |
192
+ | `hairMinLight` | number | `0.3` | 0 – 1 | Yes | Sets the minimum light floor for hair min light. |
193
+ | `hairStrength` | number | `0.22` | 0 – 8 | Yes | Controls the blend strength for hair strength. |
194
+ | `skinMinLight` | number | `0.4` | 0 – 1 | Yes | Sets the minimum light floor for skin min light. |
195
+ | `skinStrength` | number | `0.18` | 0 – 8 | Yes | Controls the blend strength for skin strength. |
196
+ | `softness` | number | `0.35` | 0 – 1 | Yes | Configures softness for average shadow. |
197
+
198
+ ### Character toon shading: Indirect Light
199
+
200
+ Mixes ambient, hemisphere, and environment light into toon shading.
201
+
202
+ | Field | Type | Default | Range / options | Portable | Description |
203
+ |---|---|---|---|---|---|
204
+ | `ambientTint` | color | `[0.86, 0.91, 1]` (#dbe8ff) | — | Yes | Sets the color used by ambient tint. |
205
+ | `defaultIntensity` | number | `0.35` | 0 – 8 | Yes | Controls how strongly default intensity contributes. |
206
+ | `defaultMinimumIndirectLight` | number | `0.35` | 0 – 1 | Yes | Sets the minimum light floor for default minimum indirect light. |
207
+ | `enabled` | boolean | `true` | — | Yes | Turns indirect light on or off. |
208
+ | `environmentIndirectLight` | number | `0.56` | 0 – 1 | Yes | Configures environment indirect light for indirect light. |
209
+ | `eyeIntensity` | number | `0.35` | 0 – 8 | Yes | Controls how strongly eye intensity contributes. |
210
+ | `eyeMinimumIndirectLight` | number | `0.35` | 0 – 1 | Yes | Sets the minimum light floor for eye minimum indirect light. |
211
+ | `faceIntensity` | number | `0.35` | 0 – 8 | Yes | Controls how strongly face intensity contributes. |
212
+ | `faceMinimumIndirectLight` | object | — | — | No — local/runtime | Sets the minimum light floor for face minimum indirect light. |
213
+ | `hairIntensity` | number | `0.35` | 0 – 8 | Yes | Controls how strongly hair intensity contributes. |
214
+ | `hairMinimumIndirectLight` | number | `0.35` | 0 – 1 | Yes | Sets the minimum light floor for hair minimum indirect light. |
215
+ | `hemisphereLightIntensity` | number | `0.42` | 0 – 8 | Yes | Controls how strongly hemisphere light intensity contributes. |
216
+ | `skinIntensity` | number | `0.35` | 0 – 8 | Yes | Controls how strongly skin intensity contributes. |
217
+ | `skinMinimumIndirectLight` | object | — | — | No — local/runtime | Sets the minimum light floor for skin minimum indirect light. |
218
+
219
+ ### Character toon shading: Local Lights
220
+
221
+ Controls point and spot light response for characters without overpowering cel bands.
222
+
223
+ | Field | Type | Default | Range / options | Portable | Description |
224
+ |---|---|---|---|---|---|
225
+ | `defaultIntensity` | number | `0.72` | 0 – 8 | Yes | Controls how strongly default intensity contributes. |
226
+ | `defaultMaxContribution` | number | `0.34` | 0 – 1 | Yes | Configures default max contribution for local lights. |
227
+ | `defaultShadowLift` | number | `0.58` | 0 – 1 | Yes | Configures default shadow lift for local lights. |
228
+ | `enabled` | boolean | `true` | — | Yes | Turns local lights on or off. |
229
+ | `eyeIntensity` | number | `0.42` | 0 – 8 | Yes | Controls how strongly eye intensity contributes. |
230
+ | `eyeMaxContribution` | number | `0.18` | 0 – 1 | Yes | Configures eye max contribution for local lights. |
231
+ | `eyeShadowLift` | number | `0.9` | 0 – 1 | Yes | Configures eye shadow lift for local lights. |
232
+ | `faceIntensity` | number | `0.56` | 0 – 8 | Yes | Controls how strongly face intensity contributes. |
233
+ | `faceMaxContribution` | number | `0.24` | 0 – 1 | Yes | Configures face max contribution for local lights. |
234
+ | `faceShadowLift` | number | `0.84` | 0 – 1 | Yes | Configures face shadow lift for local lights. |
235
+ | `hairIntensity` | number | `0.72` | 0 – 8 | Yes | Controls how strongly hair intensity contributes. |
236
+ | `hairMaxContribution` | number | `0.34` | 0 – 1 | Yes | Configures hair max contribution for local lights. |
237
+ | `hairShadowLift` | number | `0.58` | 0 – 1 | Yes | Configures hair shadow lift for local lights. |
238
+ | `skinIntensity` | number | `0.64` | 0 – 8 | Yes | Controls how strongly skin intensity contributes. |
239
+ | `skinMaxContribution` | number | `0.3` | 0 – 1 | Yes | Configures skin max contribution for local lights. |
240
+ | `skinShadowLift` | number | `0.72` | 0 – 1 | Yes | Configures skin shadow lift for local lights. |
241
+
242
+ ### Character toon shading: Rim Light
243
+
244
+ Adds view-dependent edge light that can be blocked or softened by shadow.
245
+
246
+ | Field | Type | Default | Range / options | Portable | Description |
247
+ |---|---|---|---|---|---|
248
+ | `blockByShadow` | number | `0.65` | 0 – 1 | Yes | Configures block by shadow for rim light. |
249
+ | `defaultIntensity` | number | `0.13` | 0 – 8 | Yes | Controls how strongly default intensity contributes. |
250
+ | `defaultTintColor` | color | `[0.82, 0.9, 1]` (#d1e6ff) | — | Yes | Sets the color used by default tint color. |
251
+ | `depthCloseWidthReduce` | number | `1` | 0 – 0.08 | Yes | Controls the width used by depth close width reduce. |
252
+ | `depthDottedLineFix` | boolean | `true` | — | Yes | Configures depth dotted line fix for rim light. |
253
+ | `depthFadeEndDistance` | number | `30` | 0 – 60 | Yes | Configures depth fade end distance for rim light. |
254
+ | `depthFadeRange` | number | `1` | 0 – 1 | Yes | Controls transition softness for depth fade range. |
255
+ | `depthFadeStartDistance` | number | `20` | 1 – 100 | Yes | Configures depth fade start distance for rim light. |
256
+ | `depthMask3D` | boolean | `false` | — | Yes | Configures depth mask3 d for rim light. |
257
+ | `depthSafeDistance` | number | `1` | 0 – 1 | Yes | Configures depth safe distance for rim light. |
258
+ | `depthThresholdOffset` | number | `0` | -1 – 1 | Yes | Configures depth threshold offset for rim light. |
259
+ | `depthWidth` | number | `1` | 0 – 0.08 | Yes | Controls the width used by depth width. |
260
+ | `enabled` | boolean | `true` | — | Yes | Turns rim light on or off. |
261
+ | `eyeIntensity` | number | `0.04` | 0 – 8 | Yes | Controls how strongly eye intensity contributes. |
262
+ | `faceIntensity` | number | `0.13` | 0 – 8 | Yes | Controls how strongly face intensity contributes. |
263
+ | `hairIntensity` | number | `0.23` | 0 – 8 | Yes | Controls how strongly hair intensity contributes. |
264
+ | `midPoint` | number | `0.48` | 0 – 1 | Yes | Configures mid point for rim light. |
265
+ | `mixWithBaseMapColor` | number | `0.35` | 0 – 1 | Yes | Sets the color used by mix with base map color. |
266
+ | `mode` | select | `'depthTexture'` | `fresnel` \| `depthTexture` | Yes | Configures mode for rim light. |
267
+ | `skinIntensity` | number | `0.13` | 0 – 8 | Yes | Controls how strongly skin intensity contributes. |
268
+ | `softness` | number | `0.1` | 0 – 1 | Yes | Configures softness for rim light. |
269
+
270
+ ### Character toon shading: Contact Shadow
271
+
272
+ Adds thin screen-space contact shadows (hair-on-face, arm-on-torso) from the depth prepass.
273
+
274
+ | Field | Type | Default | Range / options | Portable | Description |
275
+ |---|---|---|---|---|---|
276
+ | `enabled` | boolean | `true` | — | Yes | Turns contact shadow on or off. |
277
+ | `strength` | number | `0.5` | 0 – 1 | Yes | Configures strength for contact shadow. |
278
+ | `faceHeadUpBlend` | number | `0` | 0 – 1 | Yes | Configures face head up blend for contact shadow. |
279
+ | `faceStrength` | number | `0.4` | 0 – 8 | Yes | Controls the blend strength for face strength. |
280
+ | `fadeRange` | number | `1` | 0 – 1 | Yes | Controls transition softness for fade range. |
281
+ | `thresholdOffset` | number | `0` | -1 – 1 | Yes | Configures threshold offset for contact shadow. |
282
+ | `width` | number | `1` | 0 – 1 | Yes | Configures width for contact shadow. |
283
+
284
+ ### Character toon shading: Specular
285
+
286
+ Adds role-aware stylized highlights and optional source specular masks.
287
+
288
+ | Field | Type | Default | Range / options | Portable | Description |
289
+ |---|---|---|---|---|---|
290
+ | `defaultColor` | color | `[1, 0.96, 0.9]` (#fff5e6) | — | Yes | Sets the color used by default color. |
291
+ | `defaultIntensity` | number | `0.075` | 0 – 8 | Yes | Controls how strongly default intensity contributes. |
292
+ | `defaultMidPoint` | number | `0.72` | -1 – 1 | Yes | Moves the center point for default mid point. |
293
+ | `defaultPower` | number | `56` | 1 – 128 | Yes | Controls the sharpness of default power. |
294
+ | `defaultRange` | number | `0.12` | 0 – 1 | Yes | Controls transition softness for default range. |
295
+ | `defaultShowInShadowArea` | number | `0.25` | 0 – 1 | Yes | Configures default show in shadow area for specular. |
296
+ | `directionMode` | select | `'light'` | `light` \| `view` | Yes | Selects the policy used by direction mode. |
297
+ | `enabled` | boolean | `true` | — | Yes | Turns specular on or off. |
298
+ | `eyeIntensity` | number | `0.62` | 0 – 8 | Yes | Controls how strongly eye intensity contributes. |
299
+ | `eyeMidPoint` | number | `0.35` | -1 – 1 | Yes | Moves the center point for eye mid point. |
300
+ | `eyePower` | number | `18` | 1 – 128 | Yes | Controls the sharpness of eye power. |
301
+ | `eyeRange` | number | `0.18` | 0 – 1 | Yes | Controls transition softness for eye range. |
302
+ | `eyeShowInShadowArea` | number | `1` | 0 – 1 | Yes | Configures eye show in shadow area for specular. |
303
+ | `faceIntensity` | number | `0.025` | 0 – 8 | Yes | Controls how strongly face intensity contributes. |
304
+ | `hairIntensity` | number | `0.18` | 0 – 8 | Yes | Controls how strongly hair intensity contributes. |
305
+ | `hairPower` | number | `40` | 1 – 128 | Yes | Controls the sharpness of hair power. |
306
+ | `maskChannel` | select | `0` | `0` \| `1` \| `2` \| `3` | Yes | Configures mask channel for specular. |
307
+ | `maskMap` | texture | — | — | No — local/runtime | Configures mask map for specular. |
308
+ | `maskStrength` | number | `1` | 0 – 8 | Yes | Controls the blend strength for mask strength. |
309
+ | `metalIntensity` | number | `0.075` | 0 – 8 | Yes | Controls how strongly metal intensity contributes. |
310
+ | `skinIntensity` | number | `0.025` | 0 – 8 | Yes | Controls how strongly skin intensity contributes. |
311
+ | `sourceMaskMode` | select | `'off'` | `off` \| `source` | Yes | Selects the policy used by source mask mode. |
312
+
313
+ ### Character toon shading: Hair Highlight
314
+
315
+ Adds hair-specific highlight bands, optional anisotropic strand response, and source masks.
316
+
317
+ | Field | Type | Default | Range / options | Portable | Description |
318
+ |---|---|---|---|---|---|
319
+ | `direction` | vector3 | `[0, 1, 0.15]` | — | Yes | Configures direction for hair highlight. |
320
+ | `enabled` | boolean | `true` | — | Yes | Turns hair highlight on or off. |
321
+ | `intensity` | number | `0.14` | 0 – 1 | Yes | Configures intensity for hair highlight. |
322
+ | `maskChannel` | select | `0` | `0` \| `1` \| `2` \| `3` | Yes | Configures mask channel for hair highlight. |
323
+ | `maskMap` | texture | — | — | No — local/runtime | Configures mask map for hair highlight. |
324
+ | `maskStrength` | number | `1` | 0 – 8 | Yes | Controls the blend strength for mask strength. |
325
+ | `mode` | select | `'legacy'` | `legacy` \| `anisotropic` | Yes | Configures mode for hair highlight. |
326
+ | `shadowFloor` | number | `0.35` | 0 – 1 | Yes | Configures shadow floor for hair highlight. |
327
+ | `sideBandPower` | number | `2` | 1 – 128 | Yes | Controls the sharpness of side band power. |
328
+ | `sourceMaskMode` | select | `'off'` | `off` \| `source` | Yes | Selects the policy used by source mask mode. |
329
+ | `strandPower` | number | `7` | 1 – 128 | Yes | Controls the sharpness of strand power. |
330
+ | `uvBandAxis` | select | `0` | `0` \| `1` | Yes | Configures uv band axis for hair highlight. |
331
+ | `uvBandCenter` | number | `0.5` | 0 – 1 | Yes | Configures uv band center for hair highlight. |
332
+ | `uvBandHalfWidth` | number | `0.5` | 0 – 0.08 | Yes | Controls the width used by uv band width. |
333
+ | `uvPreset` | select | `'center'` | `center` \| `full` \| `left` \| `right` \| `vertical` \| `wide` | Yes | Selects the policy used by uv preset. |
334
+
335
+ ### Character toon shading: Eye Highlight
336
+
337
+ Adds role-aware eye/catchlight boosts and optional source masks.
338
+
339
+ | Field | Type | Default | Range / options | Portable | Description |
340
+ |---|---|---|---|---|---|
341
+ | `color` | color | `[1, 1, 1]` (#ffffff) | — | Yes | Configures color for eye highlight. |
342
+ | `enabled` | boolean | `true` | — | Yes | Turns eye highlight on or off. |
343
+ | `intensity` | number | `0.58` | 0 – 1 | Yes | Configures intensity for eye highlight. |
344
+ | `maskChannel` | select | `0` | `0` \| `1` \| `2` \| `3` | Yes | Configures mask channel for eye highlight. |
345
+ | `maskMap` | texture | — | — | No — local/runtime | Configures mask map for eye highlight. |
346
+ | `maskStrength` | number | `1` | 0 – 8 | Yes | Controls the blend strength for mask strength. |
347
+ | `power` | number | `22` | 0 – 44 | Yes | Configures power for eye highlight. |
348
+ | `showInShadowArea` | number | `0.4` | 0 – 1 | Yes | Configures show in shadow area for eye highlight. |
349
+ | `sourceMaskMode` | select | `'off'` | `off` \| `source` | Yes | Selects the policy used by source mask mode. |
350
+
351
+ ### Character toon shading: Material Maps
352
+
353
+ Routes source normal, AO, emissive, MatCap, ramp, detail, roughness, metalness, and specular maps.
354
+
355
+ | Field | Type | Default | Range / options | Portable | Description |
356
+ |---|---|---|---|---|---|
357
+ | `aoStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for ao strength. |
358
+ | `detailRepeat` | vector2 | `[1, 1]` | — | Yes | Configures detail repeat for material maps. |
359
+ | `detailStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for detail strength. |
360
+ | `emissiveColor` | color | `[1, 1, 1]` (#ffffff) | — | Yes | Sets the color used by emissive color. |
361
+ | `emissiveStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for emissive strength. |
362
+ | `enabled` | boolean | `true` | — | Yes | Turns material maps on or off. |
363
+ | `matcapStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for matcap strength. |
364
+ | `metalnessStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for metalness strength. |
365
+ | `normalScale` | vector2 | `[1, 1]` | — | Yes | Configures normal scale for material maps. |
366
+ | `normalStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for normal strength. |
367
+ | `rampStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for ramp strength. |
368
+ | `roughnessStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for roughness strength. |
369
+ | `sourceMode` | select | `'source'` | `off` \| `source` | Yes | Selects the policy used by source mode. |
370
+ | `specularColorStrength` | number | `0` | 0 – 8 | Yes | Controls the blend strength for specular color strength. |
371
+
372
+ ### Character toon shading: Outlines
373
+
374
+ Controls the inverted-hull outline pass, including role-specific widths and colors.
375
+
376
+ | Field | Type | Default | Range / options | Portable | Description |
377
+ |---|---|---|---|---|---|
378
+ | `defaultLightingMix` | number | `0.28` | 0 – 1 | Yes | Configures default lighting mix for outlines. |
379
+ | `defaultMaxBrightness` | number | `0.38` | 0 – 2 | Yes | Configures default max brightness for outlines. |
380
+ | `defaultMinBrightness` | number | `0.04` | 0 – 2 | Yes | Configures default min brightness for outlines. |
381
+ | `defaultTintColor` | color | `[0.34, 0.33, 0.4]` (#575466) | — | Yes | Sets the color used by default tint color. |
382
+ | `defaultWidth` | number | `0.002` | 0 – 0.08 | Yes | Controls the width used by default width. |
383
+ | `depthOffset` | number | `0` | -1 – 1 | Yes | Configures depth offset for outlines. |
384
+ | `depthTest` | boolean | `true` | — | Yes | Configures depth test for outlines. |
385
+ | `depthWrite` | boolean | `false` | — | Yes | Configures depth write for outlines. |
386
+ | `enabled` | boolean | `true` | — | Yes | Turns outlines on or off. |
387
+ | `eyeLightingMix` | number | `0.28` | 0 – 1 | Yes | Configures eye lighting mix for outlines. |
388
+ | `eyeMaxBrightness` | number | `0.38` | 0 – 2 | Yes | Configures eye max brightness for outlines. |
389
+ | `eyeMinBrightness` | number | `0.04` | 0 – 2 | Yes | Configures eye min brightness for outlines. |
390
+ | `eyeTintColor` | color | `[0.34, 0.33, 0.4]` (#575466) | — | Yes | Sets the color used by eye tint color. |
391
+ | `eyeWidth` | number | `0` | 0 – 0.08 | Yes | Controls the width used by eye width. |
392
+ | `faceLightingMix` | number | `0.28` | 0 – 1 | Yes | Configures face lighting mix for outlines. |
393
+ | `faceMaxBrightness` | number | `0.48` | 0 – 2 | Yes | Configures face max brightness for outlines. |
394
+ | `faceMinBrightness` | number | `0.04` | 0 – 2 | Yes | Configures face min brightness for outlines. |
395
+ | `faceTintColor` | color | `[0.62, 0.36, 0.34]` (#9e5c57) | — | Yes | Sets the color used by face tint color. |
396
+ | `faceWidth` | number | `0` | 0 – 0.08 | Yes | Controls the width used by face width. |
397
+ | `hairCutoutWidth` | number | `0` | 0 – 0.08 | Yes | Controls the width used by hair cutout width. |
398
+ | `hairLightingMix` | number | `0.08` | 0 – 1 | Yes | Configures hair lighting mix for outlines. |
399
+ | `hairMaxBrightness` | number | `0.68` | 0 – 2 | Yes | Configures hair max brightness for outlines. |
400
+ | `hairMinBrightness` | number | `0.085` | 0 – 2 | Yes | Configures hair min brightness for outlines. |
401
+ | `hairTintColor` | color | `[0.72, 0.78, 0.9]` (#b8c7e6) | — | Yes | Sets the color used by hair tint color. |
402
+ | `hairWidth` | number | `0.00055` | 0 – 0.08 | Yes | Controls the width used by hair width. |
403
+ | `maxWidth` | number | `0.006` | 0 – 0.08 | Yes | Controls the width used by max width. |
404
+ | `metalLightingMix` | number | `0.28` | 0 – 1 | Yes | Configures metal lighting mix for outlines. |
405
+ | `metalMaxBrightness` | number | `0.38` | 0 – 2 | Yes | Configures metal max brightness for outlines. |
406
+ | `metalMinBrightness` | number | `0.04` | 0 – 2 | Yes | Configures metal min brightness for outlines. |
407
+ | `metalTintColor` | color | `[0.34, 0.33, 0.4]` (#575466) | — | Yes | Sets the color used by metal tint color. |
408
+ | `metalWidth` | number | `0.002` | 0 – 0.08 | Yes | Controls the width used by metal width. |
409
+ | `polygonOffset` | boolean | `false` | — | Yes | Configures polygon offset for outlines. |
410
+ | `polygonOffsetFactor` | number | `1` | -1 – 1 | Yes | Configures polygon offset factor for outlines. |
411
+ | `polygonOffsetUnits` | number | `1` | -1 – 1 | Yes | Configures polygon offset units for outlines. |
412
+ | `referenceDistance` | number | `4` | 0.5 – 20 | Yes | Configures reference distance for outlines. |
413
+ | `referenceFov` | number | `40` | 10 – 120 | Yes | Configures reference fov for outlines. |
414
+ | `screenSpaceWidth` | number | `1` | 0 – 0.08 | Yes | Controls the width used by screen space width. |
415
+ | `smoothNormals` | boolean | `true` | — | Yes | Configures smooth normals for outlines. |
416
+ | `widthFadeDistance` | number | `12` | 1 – 100 | Yes | Configures width fade distance for outlines. |
417
+ | `skinLightingMix` | number | `0.28` | 0 – 1 | Yes | Configures skin lighting mix for outlines. |
418
+ | `skinMaxBrightness` | number | `0.48` | 0 – 2 | Yes | Configures skin max brightness for outlines. |
419
+ | `skinMinBrightness` | number | `0.04` | 0 – 2 | Yes | Configures skin min brightness for outlines. |
420
+ | `skinTintColor` | color | `[0.62, 0.36, 0.34]` (#9e5c57) | — | Yes | Sets the color used by skin tint color. |
421
+ | `skinWidth` | number | `0.001` | 0 – 0.08 | Yes | Controls the width used by skin width. |
422
+ | `transparentOverlayWidth` | number | `0` | 0 – 0.08 | Yes | Controls the width used by transparent overlay width. |
423
+ | `widthScale` | number | `1` | 0 – 4 | Yes | Configures width scale for outlines. |
424
+
425
+ ### Character toon shading: Glitter
426
+
427
+ Adds procedural view-dependent sparkles for sparkly costumes and accessories. Off by default.
428
+
429
+ | Field | Type | Default | Range / options | Portable | Description |
430
+ |---|---|---|---|---|---|
431
+ | `enabled` | boolean | `false` | — | Yes | Turns glitter on or off. |
432
+ | `intensity` | number | `1` | 0 – 1 | Yes | Configures intensity for glitter. |
433
+ | `density` | number | `1` | 0 – 1 | Yes | Configures density for glitter. |
434
+ | `size` | number | `1` | 0 – 1 | Yes | Configures size for glitter. |
435
+ | `randomNormalStrength` | number | `0.5` | 0 – 8 | Yes | Controls the blend strength for random normal strength. |
436
+ | `showInShadowArea` | number | `0.15` | 0 – 1 | Yes | Configures show in shadow area for glitter. |
437
+ | `uvChannel` | select | `1` | `0` \| `1` | Yes | Configures uv channel for glitter. |
438
+ | `defaultIntensity` | number | `1` | 0 – 8 | Yes | Controls how strongly default intensity contributes. |
439
+ | `eyeIntensity` | number | `0` | 0 – 8 | Yes | Controls how strongly eye intensity contributes. |
440
+ | `faceIntensity` | number | `0` | 0 – 8 | Yes | Controls how strongly face intensity contributes. |
441
+ | `hairIntensity` | number | `0` | 0 – 8 | Yes | Controls how strongly hair intensity contributes. |
442
+ | `skinIntensity` | number | `0` | 0 – 8 | Yes | Controls how strongly skin intensity contributes. |
443
+
444
+ ### Character toon shading: Sticker
445
+
446
+ Blends a decal/overlay texture into the albedo before lighting (ice, tattoos, damage). Off by default.
447
+
448
+ | Field | Type | Default | Range / options | Portable | Description |
449
+ |---|---|---|---|---|---|
450
+ | `blendMode` | select | `'normal'` | `normal` \| `add` \| `multiply` | Yes | Selects the policy used by blend mode. |
451
+ | `enabled` | boolean | `false` | — | Yes | Turns sticker on or off. |
452
+ | `map` | texture | — | — | No — local/runtime | Configures map for sticker. |
453
+ | `offset` | vector2 | `[0, 0]` | — | Yes | Configures offset for sticker. |
454
+ | `repeat` | vector2 | `[1, 1]` | — | Yes | Configures repeat for sticker. |
455
+ | `strength` | number | `1` | 0 – 1 | Yes | Configures strength for sticker. |
456
+ | `uvChannel` | select | `0` | `0` \| `1` | Yes | Configures uv channel for sticker. |
457
+
458
+ ### Character toon shading: Perspective Removal
459
+
460
+ Flattens perspective around the tracked head for anime-portrait closeups. Off by default.
461
+
462
+ | Field | Type | Default | Range / options | Portable | Description |
463
+ |---|---|---|---|---|---|
464
+ | `amount` | number | `0` | 0 – 1 | Yes | Configures amount for perspective removal. |
465
+ | `enabled` | boolean | `false` | — | Yes | Turns perspective removal on or off. |
466
+ | `radius` | number | `1.4` | 0 – 2.8 | Yes | Configures radius for perspective removal. |
467
+ | `startHeight` | number | `0` | 0 – 1 | Yes | Configures start height for perspective removal. |
468
+ | `endHeight` | number | `1` | 0 – 1 | Yes | Configures end height for perspective removal. |
469
+
470
+ ### Character toon shading: Fur
471
+
472
+ Opt-in shell fur for matched materials (collars, trims, animal parts). Off by default.
473
+
474
+ | Field | Type | Default | Range / options | Portable | Description |
475
+ |---|---|---|---|---|---|
476
+ | `enabled` | boolean | `false` | — | Yes | Turns fur on or off. |
477
+ | `shellCount` | number | `8` | 0 – 16 | Yes | Configures shell count for fur. |
478
+ | `length` | number | `0.02` | 0 – 1 | Yes | Configures length for fur. |
479
+ | `gravity` | number | `0.35` | 0 – 1 | Yes | Configures gravity for fur. |
480
+ | `density` | number | `3` | 0 – 6 | Yes | Configures density for fur. |
481
+ | `rootOffset` | number | `-0.2` | -1 – 1 | Yes | Configures root offset for fur. |
482
+ | `rootShade` | number | `0.55` | 0 – 1 | Yes | Configures root shade for fur. |
483
+ | `materials` | object | — | — | No — local/runtime | Configures materials for fur. |
484
+ | `roles` | object | — | — | No — local/runtime | Configures roles for fur. |
485
+
486
+ ## Environment shading
487
+
488
+ Module: `toonlab/environment` — 2 groups, 76 fields.
489
+
490
+ Settings are `{ features, parameters }`: `createEnvironmentSettings({ parameters: { exposure: 0.95 } })`.
491
+
492
+ ### Environment shading: Features
493
+
494
+ Enables or disables individual environment shader feature paths.
495
+
496
+ | Field | Type | Default | Range / options | Portable | Description |
497
+ |---|---|---|---|---|---|
498
+ | `alphaCutout` | boolean | `true` | — | Yes | Turns alpha cutout processing on or off for environment materials. |
499
+ | `alphaMap` | boolean | `true` | — | Yes | Turns alpha map processing on or off for environment materials. |
500
+ | `ambientLight` | boolean | `true` | — | Yes | Turns ambient light processing on or off for environment materials. |
501
+ | `ambientProbe` | boolean | `true` | — | Yes | Turns ambient probe processing on or off for environment materials. |
502
+ | `aoMap` | boolean | `true` | — | Yes | Turns ao map processing on or off for environment materials. |
503
+ | `aoOverlay` | boolean | `true` | — | Yes | Turns ao overlay processing on or off for environment materials. |
504
+ | `directionalLights` | boolean | `true` | — | Yes | Turns directional lights processing on or off for environment materials. |
505
+ | `emissive` | boolean | `true` | — | Yes | Turns emissive processing on or off for environment materials. |
506
+ | `emissiveMap` | boolean | `true` | — | Yes | Turns emissive map processing on or off for environment materials. |
507
+ | `foliageCutout` | boolean | `true` | — | Yes | Turns foliage cutout processing on or off for environment materials. |
508
+ | `heightFog` | boolean | `true` | — | Yes | Turns height fog processing on or off for environment materials. |
509
+ | `interiorOcclusion` | boolean | `true` | — | Yes | Turns interior occlusion processing on or off for environment materials. |
510
+ | `leftSideShadow` | boolean | `true` | — | Yes | Turns side shadow processing on or off for environment materials. |
511
+ | `lightMap` | boolean | `true` | — | Yes | Turns lightmap processing on or off for environment materials. |
512
+ | `normalMap` | boolean | `true` | — | Yes | Turns normal map processing on or off for environment materials. |
513
+ | `packedMap` | boolean | `true` | — | Yes | Turns packed map processing on or off for environment materials. |
514
+ | `planarReflection` | boolean | `true` | — | Yes | Turns floor reflection processing on or off for environment materials. |
515
+ | `pointLights` | boolean | `true` | — | Yes | Turns point lights processing on or off for environment materials. |
516
+ | `shadowMask` | boolean | `true` | — | Yes | Turns shadow mask processing on or off for environment materials. |
517
+ | `shadowMesh` | boolean | `true` | — | Yes | Turns shadow mesh processing on or off for environment materials. |
518
+ | `skyTint` | boolean | `true` | — | Yes | Turns sky tint processing on or off for environment materials. |
519
+ | `specular` | boolean | `true` | — | Yes | Turns specular processing on or off for environment materials. |
520
+ | `spotLights` | boolean | `true` | — | Yes | Turns spot lights processing on or off for environment materials. |
521
+ | `sunBoost` | boolean | `true` | — | Yes | Turns sun boost processing on or off for environment materials. |
522
+ | `untexturedGradient` | boolean | `true` | — | Yes | Turns untextured gradient processing on or off for environment materials. |
523
+ | `vertexAo` | boolean | `true` | — | Yes | Turns vertex ao processing on or off for environment materials. |
524
+ | `windowCutout` | boolean | `true` | — | Yes | Turns window cutout processing on or off for environment materials. |
525
+
526
+ ### Environment shading: Shader Parameters
527
+
528
+ Overrides numeric environment shader uniforms. Auto values preserve material defaults.
529
+
530
+ | Field | Type | Default | Range / options | Portable | Description |
531
+ |---|---|---|---|---|---|
532
+ | `ambientProbeBlend` | number | — | 0 – 1 | Yes | Overrides ambient probe blend; leave unset in code to use the material default. |
533
+ | `ambientStrength` | number | — | 0 – 2 | Yes | Overrides ambient strength; leave unset in code to use the material default. |
534
+ | `ambientLightInfluence` | number | — | 0 – 2 | Yes | Overrides ambient influence; leave unset in code to use the material default. |
535
+ | `aoMapStrength` | number | — | 0 – 2 | Yes | Overrides ao map strength; leave unset in code to use the material default. |
536
+ | `aoWarmth` | number | — | 0 – 1 | Yes | Overrides ao warmth; leave unset in code to use the material default. |
537
+ | `bakedGlowStrength` | number | — | 0 – 2 | Yes | Overrides baked glow; leave unset in code to use the material default. |
538
+ | `cloudShadowCoverage` | number | — | 0 – 1 | Yes | Overrides cloud shadow coverage; leave unset in code to use the material default. |
539
+ | `cloudShadowScale` | number | — | 0 – 0.1 | Yes | Overrides cloud shadow scale; leave unset in code to use the material default. |
540
+ | `cloudShadowStrength` | number | — | 0 – 2 | Yes | Overrides cloud shadow; leave unset in code to use the material default. |
541
+ | `directLightStrength` | number | — | 0 – 2 | Yes | Overrides direct light; leave unset in code to use the material default. |
542
+ | `emissiveMapStrength` | number | — | 0 – 2 | Yes | Overrides emissive map strength; leave unset in code to use the material default. |
543
+ | `emissiveStrength` | number | — | 0 – 2 | Yes | Overrides emissive strength; leave unset in code to use the material default. |
544
+ | `exposure` | number | — | 0 – 2 | Yes | Overrides exposure; leave unset in code to use the material default. |
545
+ | `heightFogColor` | color | — | — | Yes | Overrides height fog color; leave unset in code to use the material default. |
546
+ | `heightFogDensity` | number | — | 0 – 0.5 | Yes | Overrides height fog density; leave unset in code to use the material default. |
547
+ | `heightFogFalloff` | number | — | 0.05 – 30 | Yes | Overrides height fog falloff; leave unset in code to use the material default. |
548
+ | `interiorOcclusionColor` | color | — | — | Yes | Overrides interior occlusion color; leave unset in code to use the material default. |
549
+ | `interiorOcclusionStrength` | number | — | 0 – 2 | Yes | Overrides interior occlusion strength; leave unset in code to use the material default. |
550
+ | `leftSideShadow` | number | — | 0 – 1 | Yes | Overrides side shadow; leave unset in code to use the material default. |
551
+ | `leftSideShadowColor` | color | — | — | Yes | Overrides side shadow color; leave unset in code to use the material default. |
552
+ | `lightMapLift` | number | — | 0 – 1 | Yes | Overrides lightmap lift; leave unset in code to use the material default. |
553
+ | `lightMapStrength` | number | — | 0 – 2 | Yes | Overrides lightmap strength; leave unset in code to use the material default. |
554
+ | `lightingInfluence` | number | — | 0 – 2 | Yes | Overrides lighting influence; leave unset in code to use the material default. |
555
+ | `normalMapStrength` | number | — | 0 – 2 | Yes | Overrides normal map strength; leave unset in code to use the material default. |
556
+ | `packedOcclusionStrength` | number | — | 0 – 2 | Yes | Overrides packed occlusion; leave unset in code to use the material default. |
557
+ | `planarReflectionFresnel` | number | — | 0.1 – 8 | Yes | Overrides floor reflection fresnel; leave unset in code to use the material default. |
558
+ | `planarReflectionStrength` | number | — | 0 – 2 | Yes | Overrides floor reflection strength; leave unset in code to use the material default. |
559
+ | `pointLightStrength` | number | — | 0 – 2 | Yes | Overrides point light; leave unset in code to use the material default. |
560
+ | `saturation` | number | — | 0 – 2 | Yes | Overrides saturation; leave unset in code to use the material default. |
561
+ | `shadeSoftness` | number | — | 0 – 1 | Yes | Overrides shade softness; leave unset in code to use the material default. |
562
+ | `shadeStrength` | number | — | 0 – 2 | Yes | Overrides shade strength; leave unset in code to use the material default. |
563
+ | `shadowLift` | number | — | 0 – 1 | Yes | Overrides shadow lift; leave unset in code to use the material default. |
564
+ | `sunShadowStrength` | number | — | 0 – 2 | Yes | Overrides sun shadow strength; leave unset in code to use the material default. |
565
+ | `shadowTintColor` | color | — | — | Yes | Overrides shadow tint; leave unset in code to use the material default. |
566
+ | `skyGroundTint` | color | — | — | Yes | Overrides sky ground tint; leave unset in code to use the material default. |
567
+ | `skyTintStrength` | number | — | 0 – 2 | Yes | Overrides sky tint strength; leave unset in code to use the material default. |
568
+ | `skyTopTint` | color | — | — | Yes | Overrides sky top tint; leave unset in code to use the material default. |
569
+ | `specularColor` | color | — | — | Yes | Overrides specular color; leave unset in code to use the material default. |
570
+ | `specularShininess` | number | — | 1 – 256 | Yes | Overrides specular shininess; leave unset in code to use the material default. |
571
+ | `specularSoftness` | number | — | 0 – 1 | Yes | Overrides specular softness; leave unset in code to use the material default. |
572
+ | `specularStrength` | number | — | 0 – 2 | Yes | Overrides specular strength; leave unset in code to use the material default. |
573
+ | `spotLightStrength` | number | — | 0 – 2 | Yes | Overrides spot light; leave unset in code to use the material default. |
574
+ | `sunBoost` | number | — | 0 – 1 | Yes | Overrides sun boost; leave unset in code to use the material default. |
575
+ | `sunBoostColor` | color | — | — | Yes | Overrides sun boost color; leave unset in code to use the material default. |
576
+ | `triplanarDetail` | number | — | 0 – 1 | Yes | Overrides triplanar detail; leave unset in code to use the material default. |
577
+ | `triplanarDetailScale` | number | — | 0.25 – 64 | Yes | Overrides triplanar detail scale; leave unset in code to use the material default. |
578
+ | `triplanarEdgeHighlight` | number | — | 0 – 1 | Yes | Overrides rock edge highlight; leave unset in code to use the material default. |
579
+ | `untexturedGradientStrength` | number | — | 0 – 2 | Yes | Overrides untextured gradient strength; leave unset in code to use the material default. |
580
+ | `vertexAoStrength` | number | — | 0 – 2 | Yes | Overrides vertex ao strength; leave unset in code to use the material default. |
581
+
582
+ ## Water
583
+
584
+ Module: `toonlab/water` — 7 groups, 82 fields.
585
+
586
+ Flat authored settings for `WaterSurface`; live sun/sky and Weather wave energy compose through transient scene layers without changing portable `water.settings`. Quality is a construction-time graph policy.
587
+
588
+ ### Water: Waves
589
+
590
+ Gerstner swell and detail ripple shaping.
591
+
592
+ | Field | Type | Default | Range / options | Portable | Description |
593
+ |---|---|---|---|---|---|
594
+ | `waveIntensity` | number | `0.25` | 0 – 1 | Yes | Authored baseline from glassy mirror (0) to storm swell (1); scene weather can transiently modulate it without changing the preset. |
595
+ | `waterLevel` | number | `0.36` | 0 – 4 | Yes | World-space rest height of the surface; waves and run-up displace around it. |
596
+ | `waveAmplitude` | number | `0.3` | 0 – 5 | Yes | Largest wave amplitude in meters at full intensity; 5 gives a 10 m crest-to-trough swell. |
597
+ | `shoalingDepth` | number | `1.4` | 0.05 – 12 | Yes | Column depth in meters at which waves reach full height; shallower water shrinks them (needs a bed height sampler). |
598
+ | `shorelineWaves` | number | `0.35` | 0 – 1 | Yes | Fraction of wave height that keeps rolling through the shallows as surf before dying at the waterline. |
599
+ | `shorelineRunup` | number | `0.6` | 0 – 3 | Yes | How far incoming waves wash a thin foam film up the beach; reach scales with wave energy. |
600
+ | `runupDistance` | number | `0` | 0 – 15 | Yes | Maximum horizontal reach in meters. Wave groups vary each event from 80–100%, and each backwash hands its endpoint into the next uprush. 0 lets wave energy decide. |
601
+ | `breakerEnabled` | boolean | `true` | — | Yes | Master switch for the breaker system; off removes the mesh and skips all breaker work (for perf A/B). |
602
+ | `breakerAmount` | number | `0` | 0 – 1 | Yes | Dedicated curling breaker shells along the break line; 0 disables the system (needs a bed height sampler). |
603
+ | `breakerCurl` | number | `0.8` | 0 – 1 | Yes | Lip pitch: 0 spills down the face, 1 curls a full surfable tunnel. |
604
+ | `breakerScale` | number | `1` | 0.25 – 3 | Yes | Shell height multiplier over the physical breaking height (0.72x column depth). |
605
+ | `breakerPeel` | number | `1` | 0 – 4 | Yes | How fast the barrel section travels sideways along the crest line. |
606
+ | `waveLength` | number | `7.5` | 1 – 120 | Yes | Longest wavelength in meters; smaller waves are derived from it. Big swells need long wavelengths to stay stable. |
607
+ | `waveSteepness` | number | `0.75` | 0 – 1.4 | Yes | Gerstner chop; higher values pinch crests sharper. |
608
+ | `waveSpeed` | number | `1` | 0 – 4 | Yes | Phase speed multiplier over the deep-water dispersion. |
609
+ | `waveDirection` | vector2 | `[1, 0.35]` | — | Yes | Main travel direction of the swell in the XZ plane. |
610
+ | `waveDirectionSpread` | number | `0.65` | 0 – 1 | Yes | 0 keeps all waves aligned (river); 1 spreads them omnidirectionally (open sea). The primary swell always follows Wave Direction exactly. |
611
+ | `waveSetPeriod` | number | `60` | 8 – 600 | Yes | Seconds between wave-set peaks at a fixed point; big waves arrive in groups, not every period. |
612
+ | `waveSetStrength` | number | `0.5` | 0 – 1 | Yes | Depth of the set/lull cycle: 0 = constant swell, 1 = the swell dies completely between sets. |
613
+ | `detailNormalStrength` | number | `0.32` | 0 – 2 | Yes | Strength of the procedural micro-ripple normal detail. |
614
+ | `detailScale` | number | `1.15` | 0.05 – 8 | Yes | Spatial frequency of the micro-ripple detail. |
615
+ | `flowDirection` | vector2 | `[0.72, -0.18]` | — | Yes | Scroll direction for detail ripples, foam noise, and sparkles. |
616
+ | `flowSpeed` | number | `0.3` | 0 – 4 | Yes | Scroll speed for surface detail; high values read as a river current. |
617
+
618
+ ### Water: Surface
619
+
620
+ Water body color, refraction, and caustics.
621
+
622
+ | Field | Type | Default | Range / options | Portable | Description |
623
+ |---|---|---|---|---|---|
624
+ | `colorTone` | select | `'classic'` | `classic` \| `anime` \| `teal` \| `caribbean` \| `lagoon` \| `deepOcean` | Yes | Named body-color palette forced over the preset colors; classic returns control to the preset. |
625
+ | `shallowColor` | color | `[0.42, 0.85, 0.88]` (#6bd9e0) | — | Yes | Water tint right at the shoreline. |
626
+ | `midColor` | color | `[0.2, 0.62, 0.8]` (#339ecc) | — | Yes | Water tint at moderate depth. |
627
+ | `deepColor` | color | `[0.1, 0.38, 0.6]` (#1a6199) | — | Yes | Water tint where the bottom is no longer visible. |
628
+ | `depthFadeDistance` | number | `1` | 0.05 – 12 | Yes | Water column depth where the shallow tint gives way to mid. |
629
+ | `deepFadeDistance` | number | `2.2` | 0.05 – 24 | Yes | Additional depth where mid fades to the deep tint. |
630
+ | `opacity` | number | `0.8` | 0 – 1 | Yes | Base transparency when no scene color grab pass is bound. |
631
+ | `refractionStrength` | number | `0.35` | 0 – 2 | Yes | Screen-space distortion of the underwater scene. |
632
+ | `indexOfRefraction` | number | `1.333` | 1.0001 – 1.8 | Yes | Index of refraction used by the underwater Snell window and total internal reflection. |
633
+ | `underwaterTransmission` | number | `1` | 0 – 1 | Yes | Visibility of the real above-water scene through the surface from below. |
634
+ | `underwaterTintStrength` | number | `0.35` | 0 – 1 | Yes | Stylized water-color tint applied to the view through the surface. |
635
+ | `causticsStrength` | number | `0.55` | 0 – 3 | Yes | Brightness of the procedural voronoi caustics on the bottom. |
636
+ | `causticsScale` | number | `0.8` | 0.05 – 8 | Yes | Spatial frequency of the caustic web. |
637
+ | `causticsSpeed` | number | `0.6` | 0 – 4 | Yes | Animation speed of the caustic web. |
638
+
639
+ ### Water: Foam
640
+
641
+ Shoreline foam, whitecaps, and wake foam.
642
+
643
+ | Field | Type | Default | Range / options | Portable | Description |
644
+ |---|---|---|---|---|---|
645
+ | `foamColor` | color | `[0.94, 1, 0.99]` (#f0fffc) | — | Yes | Color of all foam: shoreline, whitecaps, wakes, and splashes. |
646
+ | `foamAmount` | number | `1` | 0 – 2 | Yes | Offshore contact foam, whitecap, and wake gain. |
647
+ | `swashFoamAmount` | number | `1.15` | 0 – 2 | Yes | Independent gain for torn foam carried up and back down the beach. |
648
+ | `swashFoamLifetime` | number | `4` | 0.25 – 30 | Yes | Seconds fresh aerated swash foam remains before thinning into residue. |
649
+ | `swashFoamResidueLifetime` | number | `10` | 0.5 – 60 | Yes | Seconds fragmented beach foam persists and drifts after the active front passes. |
650
+ | `wetSandDryTime` | number | `120` | 2 – 600 | Yes | Seconds saturated sand takes to return to its dry color after the water retreats. |
651
+ | `wetSandDarkening` | number | `0.58` | 0 – 1 | Yes | How strongly remembered moisture darkens exposed sand. |
652
+ | `wetSandSheen` | number | `0.78` | 0 – 1 | Yes | Strength of the short-lived glossy water film left on freshly exposed sand. |
653
+ | `foamContactDistance` | number | `0.4` | 0.02 – 4 | Yes | Depth difference covered by the solid contact foam band. |
654
+ | `foamLineSpacing` | number | `0.55` | 0.05 – 4 | Yes | Spacing of the animated lapping foam lines off the shore. |
655
+ | `foamNoiseScale` | number | `0.6` | 0.05 – 8 | Yes | Breakup noise frequency for foam edges. |
656
+ | `whitecapAmount` | number | `0.05` | 0 – 1 | Yes | Coverage of breaking crests on open water. |
657
+ | `rippleFoamStrength` | number | `0.8` | 0 – 3 | Yes | Foam intensity left behind by interactive ripples and wakes. |
658
+
659
+ ### Water: Lighting
660
+
661
+ Authored fallback sun/sky plus water-specific glint, fresnel, and reflection response.
662
+
663
+ | Field | Type | Default | Range / options | Portable | Description |
664
+ |---|---|---|---|---|---|
665
+ | `sunDirection` | vector3 | `[0.35, 0.8, 0.45]` | — | Yes | Authored fallback direction toward the sun when no live scene-light override is connected. |
666
+ | `sunColor` | color | `[1, 0.96, 0.86]` (#fff5db) | — | Yes | Authored fallback sun tint for glints, sparkles, and caustics; a live scene rig may replace it transiently. |
667
+ | `specularStrength` | number | `0.8` | 0 – 3 | Yes | Toon sun-glint intensity. |
668
+ | `specularShininess` | number | `150` | 4 – 2000 | Yes | Glint tightness; higher is smaller and sharper. |
669
+ | `specularStretch` | number | `0.35` | 0 – 0.95 | Yes | Elongates glints along the sun azimuth into a sparkling sun path. |
670
+ | `sparkleStrength` | number | `0.5` | 0 – 3 | Yes | Twinkling star-glint intensity. |
671
+ | `sparkleScale` | number | `1.5` | 0.1 – 16 | Yes | Density of the sparkle field. |
672
+ | `sparkleSpeed` | number | `1` | 0 – 6 | Yes | How quickly sparkles twinkle in and out. |
673
+ | `sunGlowStrength` | number | `0.85` | 0 – 3 | Yes | Sun disk glow in the procedural sky reflection. |
674
+ | `sceneShadowStrength` | number | `0.6` | 0 – 1 | Yes | How strongly cast shadows from rocks, trees, and the character darken the surface. |
675
+ | `fresnelStrength` | number | `0.9` | 0 – 2 | Yes | Grazing-angle reflectivity boost. |
676
+ | `fresnelPower` | number | `4.5` | 0.5 – 12 | Yes | Falloff of the fresnel band toward the horizon. |
677
+ | `fresnelBias` | number | `0.16` | 0 – 0.6 | Yes | Sky-tint floor at steep angles; higher reads more anime-blue. |
678
+ | `fresnelColor` | color | `[0.68, 0.9, 1]` (#ade6ff) | — | Yes | Additive rim tint at grazing angles. |
679
+ | `skyZenithColor` | color | `[0.5, 0.74, 0.98]` (#80bdfa) | — | Yes | Authored fallback procedural sky-reflection color overhead when no live scene sky is connected. |
680
+ | `skyHorizonColor` | color | `[0.86, 0.95, 1]` (#dbf2ff) | — | Yes | Authored fallback procedural sky-reflection color at the horizon when no live scene sky is connected. |
681
+ | `reflectionStrength` | number | `0.62` | 0 – 1.5 | Yes | Planar/sky reflection mix, weighted by fresnel. |
682
+ | `reflectionDistortion` | number | `0.04` | 0 – 0.3 | Yes | How much waves shatter the reflection. |
683
+ | `reflectionSoftness` | number | `0.55` | 0 – 1 | Yes | Blends sharp planar reflections toward the soft procedural sky (milky anime look). |
684
+
685
+ ### Water: Ripples
686
+
687
+ Interactive ripple simulation response.
688
+
689
+ | Field | Type | Default | Range / options | Portable | Description |
690
+ |---|---|---|---|---|---|
691
+ | `rippleStrength` | number | `1` | 0 – 6 | Yes | Global multiplier for splash and wake impulses. |
692
+ | `rippleDamping` | number | `0.985` | 0.9 – 0.999 | Yes | Energy retained per frame; higher rings travel farther. |
693
+ | `ripplePropagation` | number | `11` | 1 – 40 | Yes | Travel speed of interactive rings across the surface. |
694
+ | `rippleHeightScale` | number | `1` | 0 – 4 | Yes | Vertical displacement of the interactive ripples. |
695
+ | `rippleFoamDecay` | number | `0.94` | 0.5 – 0.999 | Yes | How long wake foam lingers. |
696
+ | `rippleFoamGain` | number | `2.4` | 0 – 12 | Yes | How quickly motion generates wake foam. |
697
+
698
+ ### Water: Splashes
699
+
700
+ Procedural splash droplets, spray, and rings.
701
+
702
+ | Field | Type | Default | Range / options | Portable | Description |
703
+ |---|---|---|---|---|---|
704
+ | `splashStrength` | number | `1` | 0 – 3 | Yes | Global multiplier for splash particle counts and energy. |
705
+ | `splashScale` | number | `1` | 0.1 – 4 | Yes | Physical size multiplier for droplets, spray, and rings. |
706
+ | `splashDropletCount` | number | `26` | 0 – 120 | Yes | Droplets emitted by a strength-1 splash. |
707
+ | `splashRingCount` | number | `2` | 0 – 4 | Yes | Expanding foam rings emitted per splash. |
708
+ | `splashColor` | color | `[0.97, 1, 1]` (#f7ffff) | — | Yes | Bright tone of droplets and spray. |
709
+ | `splashShadeColor` | color | `[0.62, 0.86, 0.95]` (#9edbf2) | — | Yes | Shadow tone of the two-tone splash shading. |
710
+
711
+ ### Water: Quality
712
+
713
+ Shader quality tier gating caustics, sparkles, and noise octaves.
714
+
715
+ | Field | Type | Default | Range / options | Portable | Description |
716
+ |---|---|---|---|---|---|
717
+ | `quality` | select | `'high'` | `low` \| `medium` \| `high` | Yes | Named quality tier: low drops caustics and sparkles, high adds chromatic caustics and extra detail octaves. |
718
+
719
+ ## Post-processing
720
+
721
+ Module: `toonlab/post` — 2 groups, 37 fields.
722
+
723
+ Settings are `{ features, parameters }`: `createPostProcessingSettings({ preset: "softAnime" })`.
724
+
725
+ ### Post-processing: Features
726
+
727
+ Toggles for each optional screen-space effect in the final composite pass.
728
+
729
+ | Field | Type | Default | Range / options | Portable | Description |
730
+ |---|---|---|---|---|---|
731
+ | `bloom` | boolean | `false` | — | Yes | Adds glow around pixels brighter than the bloom threshold. |
732
+ | `colorGrade` | boolean | `false` | — | Yes | Applies exposure, contrast, saturation, and warmth grading. |
733
+ | `depthCue` | boolean | `false` | — | Yes | Fades distant pixels toward the depth cue color for atmospheric depth. |
734
+ | `enabled` | boolean | `false` | — | Yes | Forces the post-processing composite pass on, even with no individual effect active. |
735
+ | `motionBlur` | boolean | `false` | — | Yes | Blurs camera movement by reprojecting the previous frame (camera motion only). |
736
+ | `screenOutline` | boolean | `false` | — | Yes | Draws screen-space outlines from depth and luminance edges. |
737
+ | `vignette` | boolean | `false` | — | Yes | Darkens the frame toward the corners. |
738
+ | `verticalGrade` | boolean | `false` | — | Yes | Adds warm light at the top of the frame and darkening at the bottom. |
739
+
740
+ ### Post-processing: Parameters
741
+
742
+ Tuning values used by the post-processing effects when their feature toggles are on.
743
+
744
+ | Field | Type | Default | Range / options | Portable | Description |
745
+ |---|---|---|---|---|---|
746
+ | `bloomBackgroundSuppress` | number | `1` | 0 – 2 | Yes | Scales bloom gathered from non-character pixels when a character mask is connected. |
747
+ | `bloomCharacterBoost` | number | `1` | 0 – 4 | Yes | Scales bloom gathered from character pixels when a character mask is connected. |
748
+ | `bloomLevels` | number | `5` | 2 – 8 | Yes | Number of mip levels in the pyramid bloom chain (pyramid mode only). |
749
+ | `bloomMode` | select | `'single'` | `single` \| `pyramid` | Yes | Selects the one-pass 9-tap bloom or the wider multi-pass pyramid bloom. |
750
+ | `bloomRadius` | number | `0.16` | 0 – 1 | Yes | Controls how far the bloom glow spreads from bright pixels. |
751
+ | `bloomStrength` | number | `0` | 0 – 2 | Yes | Controls how strongly bloom is added to the image. |
752
+ | `bloomThreshold` | number | `0.995` | 0 – 1 | Yes | Sets the luminance above which pixels start to bloom. |
753
+ | `bottomDark` | number | `0` | 0 – 1 | Yes | Darkens the lower part of the frame in the vertical grade. |
754
+ | `contrast` | number | `1` | 0 – 2 | Yes | Scales contrast around mid gray in the color grade. |
755
+ | `depthCueColor` | color | `[0.3371636150376657, 0.4735314961384573, 0.6866853124288864]` (#5679af) | — | Yes | Sets the color distant pixels fade toward. |
756
+ | `depthCueFar` | number | `24` | 0 – 200 | Yes | Sets the depth at which the depth cue reaches full strength. |
757
+ | `depthCueNear` | number | `1` | 0 – 50 | Yes | Sets the depth at which the depth cue starts to appear. |
758
+ | `depthCueStrength` | number | `0` | 0 – 1 | Yes | Controls how strongly distant pixels blend toward the depth cue color. |
759
+ | `exposure` | number | `1` | 0 – 4 | Yes | Multiplies overall image brightness in the color grade. |
760
+ | `lutMap` | texture | — | — | No — local/runtime | Optional 2D-strip color LUT texture (runtime only, not serialized). |
761
+ | `lutSize` | number | `0` | 0 – 64 | Yes | Slice size of the LUT strip; 0 derives it from the texture height. |
762
+ | `lutStrength` | number | `0` | 0 – 1 | Yes | Controls how strongly the LUT recolors the graded image. |
763
+ | `motionBlurStrength` | number | `0.55` | 0 – 2 | Yes | Scales the camera-reprojection blur distance along the motion vector. |
764
+ | `outlineColor` | color | `[0.005181516700061659, 0.006512090790025684, 0.010329823026364548]` (#010203) | — | Yes | Sets the color drawn on detected screen-space edges. |
765
+ | `outlineDepthStrength` | number | `0.16` | 0 – 2 | Yes | Controls how strongly depth discontinuities contribute to outlines. |
766
+ | `outlineLumaStrength` | number | `0.04` | 0 – 2 | Yes | Controls how strongly luminance edges contribute to outlines. |
767
+ | `outlineStrength` | number | `0` | 0 – 2 | Yes | Controls the overall opacity of screen-space outlines. |
768
+ | `saturation` | number | `1` | 0 – 2 | Yes | Scales color saturation in the color grade. |
769
+ | `strength` | number | `1` | 0 – 1 | Yes | Blends between the raw render and the full post-processing result. |
770
+ | `topLight` | number | `0` | 0 – 1 | Yes | Adds warm light to the upper part of the frame in the vertical grade. |
771
+ | `vignetteRadius` | number | `0.72` | 0 – 1 | Yes | Sets the distance from the frame center where the vignette starts. |
772
+ | `vignetteSoftness` | number | `0.34` | 0 – 1 | Yes | Controls the falloff width of the vignette edge. |
773
+ | `vignetteStrength` | number | `0` | 0 – 1 | Yes | Controls how strongly the vignette darkens the frame edges. |
774
+ | `warmth` | number | `0` | -1 – 1 | Yes | Shifts the color grade warmer (positive) or cooler (negative). |
775
+
776
+ ## Vegetation shader profile
777
+
778
+ Module: `toonlab/vegetation` — 8 groups, 67 fields.
779
+
780
+ IP-wide grouped settings shared by semantic grass, foliage, flower, bark, and stem material roles. Asset albedo and current scene weather are separate inputs.
781
+
782
+ ### Vegetation shader profile: Shared Lighting
783
+
784
+ IP-wide light and shadow treatment shared by every vegetation surface.
785
+
786
+ | Field | Type | Default | Range / options | Portable | Description |
787
+ |---|---|---|---|---|---|
788
+ | `shadowTint` | color | `[0.36, 0.4, 0.58]` (#5c6694) | — | Yes | Cool treatment tint mixed into shadowed vegetation without replacing its albedo. |
789
+ | `shadowTintStrength` | number | `1` | 0 – 1 | Yes | Strength of the shared shadow tint treatment. |
790
+ | `sunTintStrength` | number | `0.25` | 0 – 1 | Yes | How strongly the active sun color tints lit vegetation. |
791
+ | `skyFillStrength` | number | `0.08` | 0 – 0.5 | Yes | Shared sky-color fill in unlit vegetation regions. |
792
+ | `rimStrength` | number | `0.12` | 0 – 1 | Yes | View-dependent silhouette fill shared by vegetation surfaces. |
793
+ | `rimPower` | number | `3` | 0.5 – 12 | Yes | Falloff exponent of the shared vegetation rim. |
794
+
795
+ ### Vegetation shader profile: Thin Surfaces
796
+
797
+ Lighting shared by thin blades, leaf cards, and petals.
798
+
799
+ | Field | Type | Default | Range / options | Portable | Description |
800
+ |---|---|---|---|---|---|
801
+ | `diffuseWrap` | number | `0.5` | 0 – 1 | Yes | Wraps direct light around thin surfaces so back faces remain readable. |
802
+ | `transmissionStrength` | number | `0.35` | 0 – 2 | Yes | Shared sunlight transmission through blades, leaves, and petals. |
803
+ | `transmissionPower` | number | `3.5` | 0.5 – 12 | Yes | Angular concentration of thin-surface transmission. |
804
+ | `transmissionShadowFloor` | number | `0.35` | 0 – 1 | Yes | Minimum transmission that remains inside cast or cloud shadow. |
805
+ | `normalUpBias` | number | `0` | 0 – 1 | Yes | Biases thin-surface shading normals toward world up. |
806
+ | `twoSidedLighting` | number | `1` | 0 – 1 | Yes | Blends back-face normals into the shared thin-surface lighting model. |
807
+
808
+ ### Vegetation shader profile: Weather Response
809
+
810
+ How the IP shades wetness and snow; current weather amounts remain scene-owned.
811
+
812
+ | Field | Type | Default | Range / options | Portable | Description |
813
+ |---|---|---|---|---|---|
814
+ | `wetDarkening` | number | `0.15` | 0 – 1 | Yes | Maximum albedo darkening applied by wetness. |
815
+ | `wetDesaturation` | number | `0.05` | 0 – 1 | Yes | Maximum desaturation applied by wetness. |
816
+ | `wetHighlightStrength` | number | `0.2` | 0 – 1 | Yes | Stylized highlight added to wet vegetation. |
817
+ | `snowTint` | color | `[0.92, 0.96, 1]` (#ebf5ff) | — | Yes | IP snow tint blended over retained snow coverage. |
818
+ | `snowShadowStrength` | number | `0.65` | 0 – 1 | Yes | Shadow response retained by snow-covered vegetation. |
819
+ | `snowEdgeSoftness` | number | `0.2` | 0 – 1 | Yes | Softness of snow coverage transitions. |
820
+
821
+ ### Vegetation shader profile: Grass
822
+
823
+ Grass-only lighting, gradient, dense-field, gust, and bend treatment.
824
+
825
+ | Field | Type | Default | Range / options | Portable | Description |
826
+ |---|---|---|---|---|---|
827
+ | `backlitStrength` | number | `0.4` | 0 – 1.5 | Yes | Grass transmission multiplier. |
828
+ | `sceneShadowResponse` | number | `0.7` | 0 – 1 | Yes | Grass response to renderer shadow visibility. |
829
+ | `cloudShadowResponse` | number | `0.35` | 0 – 1 | Yes | Grass response to the scene cloud-shadow field. |
830
+ | `bandThreshold` | number | `0.49` | 0 – 1 | Yes | Center of the grass direct-light toon transition. |
831
+ | `bandSoftness` | number | `0.1` | 0 – 0.5 | Yes | Width of the grass direct-light toon transition. |
832
+ | `shadowFloor` | number | `0.35` | 0 – 1 | Yes | Minimum grass brightness in full shadow. |
833
+ | `rootOcclusionStrength` | number | `0.36` | 0 – 1 | Yes | Dense-field darkening at blade roots. |
834
+ | `rootOcclusionHeight` | number | `0.62` | 0.01 – 1 | Yes | Blade height over which root occlusion fades. |
835
+ | `tipGradientStart` | number | `0.1` | 0 – 1 | Yes | Blade fraction where the root-to-tip material gradient begins. |
836
+ | `tipGradientEnd` | number | `0.95` | 0 – 1 | Yes | Blade fraction where the root-to-tip material gradient completes. |
837
+ | `colorVariationStrength` | number | `0.2` | 0 – 1 | Yes | Seeded blade luminance variation. |
838
+ | `gustSheenThreshold` | number | `0.78` | 0 – 1 | Yes | Gust value where the blade-tip sheen begins. |
839
+ | `gustSheenStrength` | number | `0.22` | 0 – 1 | Yes | Strength of the moving gust sheen. |
840
+ | `bendExponent` | number | `2` | 0.5 – 6 | Yes | Root-to-tip curve used by wind and interaction deformation. |
841
+ | `interactionResponse` | number | `1` | 0 – 2 | Yes | Grass deformation response to a scene-owned interaction field. |
842
+
843
+ ### Vegetation shader profile: Foliage
844
+
845
+ Leaf-card and canopy-volume treatment.
846
+
847
+ | Field | Type | Default | Range / options | Portable | Description |
848
+ |---|---|---|---|---|---|
849
+ | `backlitStrength` | number | `0.35` | 0 – 1.5 | Yes | Foliage transmission multiplier. |
850
+ | `sceneShadowResponse` | number | `0.55` | 0 – 1 | Yes | Foliage response to renderer shadow visibility. |
851
+ | `cloudShadowResponse` | number | `0` | 0 – 1 | Yes | Foliage response to the scene cloud-shadow field. |
852
+ | `bandThreshold` | number | `0.47` | 0 – 1 | Yes | Center of the foliage direct-light toon transition. |
853
+ | `bandSoftness` | number | `0.18` | 0 – 0.5 | Yes | Width of the foliage direct-light toon transition. |
854
+ | `crestThreshold` | number | `0.72` | 0 – 1 | Yes | Center of the high crown-color crest band. |
855
+ | `crestSoftness` | number | `0.12` | 0 – 0.5 | Yes | Width of the high crown-color crest band. |
856
+ | `crownOcclusionStrength` | number | `0.2` | 0 – 1 | Yes | Additional darkening inside renderer-shadowed crowns. |
857
+ | `spriteLuminanceStrength` | number | `0.36` | 0 – 1 | Yes | Influence of painted leaf-sprite luminance. |
858
+ | `cardVariationStrength` | number | `0.16` | 0 – 1 | Yes | Seeded per-card luminance variation. |
859
+ | `transmissionPowerMultiplier` | number | `1` | 0.25 – 3 | Yes | Foliage multiplier over the shared thin-surface transmission concentration. |
860
+
861
+ ### Vegetation shader profile: Flower
862
+
863
+ Shared petal/center treatment across mesh, cutout, procedural, and billboard flowers.
864
+
865
+ | Field | Type | Default | Range / options | Portable | Description |
866
+ |---|---|---|---|---|---|
867
+ | `backlitStrength` | number | `0.35` | 0 – 1.5 | Yes | Petal transmission multiplier. |
868
+ | `sceneShadowResponse` | number | `0.85` | 0 – 1 | Yes | Flower response to renderer shadow visibility. |
869
+ | `bandThreshold` | number | `0.5` | 0 – 1 | Yes | Center of the flower direct-light toon transition. |
870
+ | `bandSoftness` | number | `0.1` | 0 – 0.5 | Yes | Width of the flower direct-light toon transition. |
871
+ | `unlitPetalLift` | number | `0.35` | 0 – 1 | Yes | Petal-tinted floor for unlit petal faces. |
872
+ | `cupDarkeningStrength` | number | `0.1` | 0 – 1 | Yes | Stylized darkening toward curved petal edges. |
873
+ | `petalTransmissionMultiplier` | number | `1` | 0 – 2 | Yes | Flower-family multiplier over shared thin-surface transmission. |
874
+ | `centerLightResponse` | number | `0.8` | 0 – 2 | Yes | Direct-light response of flower centers relative to petals. |
875
+ | `centerShadowResponse` | number | `1` | 0 – 2 | Yes | Shadow response of flower centers relative to petals. |
876
+
877
+ ### Vegetation shader profile: Bark / Woody Surface
878
+
879
+ Opaque woody treatment for trunks, branches, and roots.
880
+
881
+ | Field | Type | Default | Range / options | Portable | Description |
882
+ |---|---|---|---|---|---|
883
+ | `bandCount` | number | `3` | 2 – 6 | Yes | Cel bands across the woody light-to-shadow ramp. |
884
+ | `bandSoftness` | number | `0` | 0 – 1 | Yes | Continuous softness of woody toon-band transitions. |
885
+ | `shadowFloor` | number | `0.35` | 0 – 0.9 | Yes | Minimum brightness of a fully shadowed woody surface. |
886
+ | `sunTintStrength` | number | `0.15` | 0 – 1 | Yes | Sun-color tint applied to lit bark. |
887
+ | `skyFillStrength` | number | `0.04` | 0 – 0.5 | Yes | Sky-color fill applied to shaded bark. |
888
+ | `rimStrength` | number | `0` | 0 – 1 | Yes | View-dependent woody silhouette fill. |
889
+ | `specularStrength` | number | `0` | 0 – 1 | Yes | Stylized bark highlight strength. |
890
+ | `verticalShadeStrength` | number | `0` | 0 – 1 | Yes | World-up gradient used to ground trunks without changing their albedo. |
891
+
892
+ ### Vegetation shader profile: Herbaceous Stem
893
+
894
+ Smooth herbaceous stem treatment, intentionally separate from woody bark.
895
+
896
+ | Field | Type | Default | Range / options | Portable | Description |
897
+ |---|---|---|---|---|---|
898
+ | `bandCount` | number | `3` | 2 – 6 | Yes | Cel bands across herbaceous stems. |
899
+ | `bandSoftness` | number | `0.08` | 0 – 1 | Yes | Softness of herbaceous stem toon bands. |
900
+ | `shadowFloor` | number | `0.42` | 0 – 0.9 | Yes | Minimum brightness of a fully shadowed stem. |
901
+ | `transmissionStrength` | number | `0.08` | 0 – 1 | Yes | Subtle light transmission through green stems. |
902
+ | `skyFillStrength` | number | `0.06` | 0 – 0.5 | Yes | Additional stem sky-color fill over the shared vegetation fill. |
903
+ | `rimStrength` | number | `0.02` | 0 – 1 | Yes | View-dependent stem silhouette fill. |
904
+
905
+ ## Grass
906
+
907
+ Module: `toonlab/vegetation` — 9 groups, 22 fields.
908
+
909
+ Flat settings consumed by `new StylizedGrassField(options)` and `grass.applySettings(options)`. Portable grass preset v2 stores asset geometry, palette/material, and `windResponse` / `gustResponse`; current light, wind/gust field, cloud field, and push radius are scene/runtime inputs.
910
+
911
+ ### Grass: Blades
912
+
913
+ Random blade dimensions baked into the instance attributes when the field is built. Construction-only.
914
+
915
+ | Field | Type | Default | Range / options | Portable | Description |
916
+ |---|---|---|---|---|---|
917
+ | `bladeHeightRange` | vector2 | `[0.16, 0.42]` | — | Yes | Min/max blade height in meters for placements without an explicit height. Construction-only: baked into instance attributes. |
918
+ | `bladeWidthRange` | vector2 | `[0.05, 0.085]` | — | Yes | Min/max blade width in meters for placements without an explicit width. Construction-only: baked into instance attributes. |
919
+
920
+ ### Grass: Motion
921
+
922
+ Asset-level flexibility: how this grass responds when a scene supplies wind and gusts.
923
+
924
+ | Field | Type | Default | Range / options | Portable | Description |
925
+ |---|---|---|---|---|---|
926
+ | `windResponse` | number | `1` | 0 – 8 | Yes | Asset flexibility multiplier applied to the current scene wind strength. 1 preserves the authored baseline; 0 keeps blades still. |
927
+ | `gustResponse` | number | `1` | 0 – 4 | Yes | How strongly this grass follows gust bands relative to its regular wind sway. |
928
+
929
+ ### Grass: Palette
930
+
931
+ The blades' coordinated base, tip, and material shadow colors — the grass's identity, whatever the scene lighting does. Magical blue grass welcome.
932
+
933
+ | Field | Type | Default | Range / options | Portable | Description |
934
+ |---|---|---|---|---|---|
935
+ | `baseColor` | color | `[0.42, 0.68, 0.24]` (#6bad3d) | — | Yes | Blade color at the root. |
936
+ | `tipColor` | color | `[0.74, 0.9, 0.42]` (#bde66b) | — | Yes | Blade color at the tip; blades gradient from base to tip. |
937
+
938
+ ### Grass: Lighting
939
+
940
+ How the blades RESPOND to scene light — e.g. the backlit glow on blades between the camera and the sun.
941
+
942
+ | Field | Type | Default | Range / options | Portable | Description |
943
+ |---|---|---|---|---|---|
944
+ | `backlitStrength` | number | `0.3` | 0 – 2 | Yes | Translucent backlight boost when the camera looks toward the sun through the blades. |
945
+
946
+ ### Grass: Shadows
947
+
948
+ Grass-material shadow strength and palette tint. The renderer and cloud-shadow fields themselves come from the scene.
949
+
950
+ | Field | Type | Default | Range / options | Portable | Description |
951
+ |---|---|---|---|---|---|
952
+ | `shadowStrength` | number | `0.9` | 0 – 1 | Yes | How strongly renderer shadow maps (trees, rocks, the character) darken blades. |
953
+ | `shadowTint` | color | `[0.42, 0.47, 0.62]` (#6b789e) | — | Yes | Grass material color approached in full scene or cloud shadow. Palette presets set it with base/tip colors; the IP-wide vegetation shadow treatment still layers over it. |
954
+
955
+ ### Grass: Scene Light
956
+
957
+ Current sun direction/color and sky color supplied by the scene at runtime.
958
+
959
+ | Field | Type | Default | Range / options | Portable | Description |
960
+ |---|---|---|---|---|---|
961
+ | `sunDirection` | vector3 | `[0.35, 0.72, 0.42]` | — | No — scene/runtime | World-space direction toward the sun (normalized on apply). Match your main directional light. |
962
+ | `sunColor` | color | `[1, 0.96, 0.84]` (#fff5d6) | — | No — scene/runtime | Sunlight tint applied to lit blades. |
963
+ | `skyColor` | color | `[0.62, 0.78, 0.95]` (#9ec7f2) | — | No — scene/runtime | Ambient sky tint mixed into shaded blades. |
964
+
965
+ ### Grass: Scene Wind
966
+
967
+ Current world wind and gust field supplied by weather or another scene system.
968
+
969
+ | Field | Type | Default | Range / options | Portable | Description |
970
+ |---|---|---|---|---|---|
971
+ | `windDirection` | vector2 | `[1, 0.3]` | — | No — scene/runtime | Current horizontal (XZ) heading the world wind blows toward. |
972
+ | `windSpeed` | number | `1` | 0 – 4 | No — scene/runtime | Current temporal speed of the world wind. |
973
+ | `windStrength` | number | `0.16` | 0 – 1 | No — scene/runtime | Current world wind amplitude before the asset response multiplier. |
974
+ | `gustFrequency` | number | `0.35` | 0 – 2 | No — scene/runtime | Current spatial frequency of the world gust bands. |
975
+ | `gustSpeed` | number | `1.6` | 0 – 6 | No — scene/runtime | Current travel speed of the world gust bands. |
976
+
977
+ ### Grass: Cloud Field
978
+
979
+ Current drifting cloud-shadow field shared across terrain, water, and vegetation.
980
+
981
+ | Field | Type | Default | Range / options | Portable | Description |
982
+ |---|---|---|---|---|---|
983
+ | `cloudShadowStrength` | number | `0` | 0 – 1 | No — scene/runtime | Current strength of the shared procedural cloud-shadow field. 0 disables it. |
984
+ | `cloudShadowCoverage` | number | `0.45` | 0 – 1 | No — scene/runtime | Current fraction of the world covered by cloud shadow. |
985
+ | `cloudShadowScale` | number | `0.012` | 0.001 – 0.1 | No — scene/runtime | Current world-to-noise scale of the shared cloud pattern. |
986
+ | `cloudShadowVelocity` | vector2 | `[0.02, 0.006]` | — | No — scene/runtime | Current cloud-shadow drift in noise-space units per second. |
987
+
988
+ ### Grass: Interaction
989
+
990
+ Current push target and influence radius supplied per scene or grass instance.
991
+
992
+ | Field | Type | Default | Range / options | Portable | Description |
993
+ |---|---|---|---|---|---|
994
+ | `pushRadius` | number | `0.9` | 0 – 3 | No — scene/runtime | Current radius in meters around the scene push target. |
995
+
996
+ ## Flowers
997
+
998
+ Module: `toonlab/vegetation` — 3 groups, 7 fields.
999
+
1000
+ Flat settings consumed by `new StylizedFlowerField(options)` and `flowers.applySettings(options)`.
1001
+
1002
+ ### Flowers: Heads
1003
+
1004
+ Random head sizes baked into the instance attributes when the field is built. Construction-only.
1005
+
1006
+ | Field | Type | Default | Range / options | Portable | Description |
1007
+ |---|---|---|---|---|---|
1008
+ | `sizeRange` | vector2 | `[0.045, 0.08]` | — | Yes | Min/max head size in meters for placements without an explicit size. Construction-only: baked into instance attributes. |
1009
+
1010
+ ### Flowers: Wind
1011
+
1012
+ Wind sway shared with the surrounding grass so heads and blades move together.
1013
+
1014
+ | Field | Type | Default | Range / options | Portable | Description |
1015
+ |---|---|---|---|---|---|
1016
+ | `windDirection` | vector2 | `[1, 0.3]` | — | Yes | Horizontal (XZ) heading the wind blows toward. Magnitude does not matter; use wind strength for amplitude. |
1017
+ | `windSpeed` | number | `1` | 0 – 4 | Yes | How fast the head sway oscillates. |
1018
+ | `windStrength` | number | `0.16` | 0 – 1 | Yes | How far flower heads bob with the wind. |
1019
+
1020
+ ### Flowers: Appearance
1021
+
1022
+ Petal/center palette and scene-shadow darkening.
1023
+
1024
+ | Field | Type | Default | Range / options | Portable | Description |
1025
+ |---|---|---|---|---|---|
1026
+ | `petalColor` | color | `[1, 0.98, 0.92]` (#fffaeb) | — | Yes | Petal color of the procedural daisies. |
1027
+ | `centerColor` | color | `[0.98, 0.8, 0.34]` (#facc57) | — | Yes | Center-disc color of the procedural daisies. |
1028
+ | `shadowStrength` | number | `0.85` | 0 – 1 | Yes | How strongly renderer shadow maps darken flower heads. |
1029
+
1030
+ ## Trees
1031
+
1032
+ Module: `toonlab/vegetation` — 5 groups, 68 fields.
1033
+
1034
+ Grouped settings consumed by `new StylizedTree(options)` and `tree.applySettings(options)`.
1035
+
1036
+ ### Trees: Tree
1037
+
1038
+ Overall scale, seed, crown reach, leaf coverage, and canopy palette. Everything except the palette and trunk shadow flag bakes geometry at construction.
1039
+
1040
+ | Field | Type | Default | Range / options | Portable | Description |
1041
+ |---|---|---|---|---|---|
1042
+ | `size` | number | `1` | 0.2 – 6 | Yes | Overall tree multiplier (1 ≈ 3 m tree, 2 ≈ 6 m, 3+ large). Construction-only: also densifies canopy cards so leaves stay leaf-sized. |
1043
+ | `seed` | number | `1` | 1 – 999 | Yes | Deterministic generation seed; the same options and seed always grow the same tree. Construction-only. |
1044
+ | `canopyColor` | color | `[0.30196078431372547, 0.6352941176470588, 0.34509803921568627]` (#4da258) | — | Yes | Canopy base color; the lit/shadow/crown palette derives from it. Also accepts richer resolveCanopyColor specs (color lists, {from,to} blends, HSL ranges) resolved per seed. |
1045
+ | `canopyPalette` | object | `'[object Object]'` | — | No — local/runtime | Optional explicit { lit, shadow, crown } tone overrides; unset tones derive from the canopy color. |
1046
+ | `canopyWidth` | number | `1` | 0.3 – 2.5 | Yes | X-axis crown reach multiplier. Construction-only: shapes the blob layout. |
1047
+ | `canopyDepth` | number | `1` | 0.3 – 2.5 | Yes | Z-axis crown reach multiplier. Construction-only: shapes the blob layout. |
1048
+ | `canopyLayout` | object | `'[object Object]'` | — | No — local/construction | Optional createCanopyBlobs overrides (lobeCount, spread, flatten, coreRadius, ...). Construction-only. |
1049
+ | `leafDensity` | number | `1` | 0.05 – 2 | Yes | Crown leaf coverage. Below ~0.9 see-through gap pockets open and branches read through; above 1 packs extra cards (and fatter tufts) for lush crowns. Construction-only. |
1050
+ | `canopyScale` | number | `1` | 0.2 – 3 | Yes | Canopy-only scale relative to the trunk. Construction-only. |
1051
+ | `leafPlacement` | select | `'canopy'` | `canopy` \| `tips` | Yes | canopy: solid leaf mass hiding interior wood. tips: bushes only at branch ends with bare limbs between them (Sumeru silhouette). Construction-only. |
1052
+ | `trunkReceiveShadow` | boolean | `true` | — | Yes | Whether the bark receives shadow maps. Massive pale-limbed trees read better with this off. |
1053
+
1054
+ ### Trees: Trunk
1055
+
1056
+ Trunk silhouette (bend, lean, twist, gnarl) shared by the skeleton grower and the classic curved-trunk generator. Construction-only.
1057
+
1058
+ | Field | Type | Default | Range / options | Portable | Description |
1059
+ |---|---|---|---|---|---|
1060
+ | `height` | number | `1.55` | 0.4 – 3 | Yes | Trunk height in meters (before the overall size multiplier). Construction-only. |
1061
+ | `radiusBottom` | number | `0.19` | 0.05 – 0.6 | Yes | Trunk radius at the root flare in meters. Construction-only. |
1062
+ | `radiusTop` | number | `0.085` | 0.02 – 0.3 | Yes | Trunk radius at the top in meters. Classic trunk generator (createTreeTrunkGeometry) only. Construction-only. |
1063
+ | `bend` | number | `0.12` | 0 – 0.8 | Yes | Mid-trunk bow amplitude that returns toward center (S-curve) in meters. Construction-only. |
1064
+ | `lean` | number | `0.16` | 0 – 1.2 | Yes | Off-vertical drift that accumulates toward the top, in meters. Construction-only. |
1065
+ | `twist` | number | `0` | -4 – 4 | Yes | Y-rotation of the cross-section over the full height in radians; spirals the bark like wrung wood. Construction-only. |
1066
+ | `gnarl` | number | `0` | 0 – 2 | Yes | High-frequency wiggle and radius bulges: 0 is a clean park tree, 1+ reads like an old bonsai. Construction-only. |
1067
+ | `gnarlFrequencyXRange` | vector2 | `[4.2, 7.6]` | — | Yes | Seeded min/max wave count of the gnarl wiggle over the trunk height on the X axis. Classic trunk generator only. Construction-only. |
1068
+ | `gnarlFrequencyZRange` | vector2 | `[3.1, 6.7]` | — | Yes | Seeded min/max wave count of the gnarl wiggle over the trunk height on the Z axis. Classic trunk generator only. Construction-only. |
1069
+ | `gnarlAmplitude` | number | `0.16` | 0 – 0.5 | Yes | Meters of gnarl wiggle (and radius bulge fraction) per unit of gnarl. Classic trunk generator only. Construction-only. |
1070
+ | `radialGnarlFrequency` | number | `9.3` | 0 – 20 | Yes | Wave count of the gnarl radius bulges (old-wood knuckles) over the trunk height. Classic trunk generator only. Construction-only. |
1071
+ | `bendDirection` | number | — | -6.283 – 6.283 | Yes | World heading of the bow in radians; null/unset picks a seeded heading. Construction-only. |
1072
+ | `leanOffset` | number | — | -6.283 – 6.283 | Yes | Lean heading relative to the bow in radians (PI pins a serpentine S-trunk); null/unset picks a seeded offset. Construction-only. |
1073
+ | `radialSegments` | number | `10` | 3 – 16 | Yes | Cross-section segment count of the trunk tube. Classic trunk generator only. Construction-only. |
1074
+ | `heightSegments` | number | `14` | 2 – 24 | Yes | Vertical segment count of the trunk tube. Classic trunk generator only. Construction-only. |
1075
+ | `branchCount` | number | `2` | 0 – 6 | Yes | Number of stub branches near the top. Classic trunk generator only. Construction-only. |
1076
+ | `branchLength` | number | `0.55` | 0 – 1.5 | Yes | Base branch length in meters. Classic trunk generator only. Construction-only. |
1077
+ | `branchRadius` | number | `0.055` | 0 – 0.2 | Yes | Base branch radius in meters. Classic trunk generator only. Construction-only. |
1078
+
1079
+ ### Trees: Skeleton
1080
+
1081
+ Space-colonization limb growth and bark mesh controls. Construction-only.
1082
+
1083
+ | Field | Type | Default | Range / options | Portable | Description |
1084
+ |---|---|---|---|---|---|
1085
+ | `generator` | select | `'limbs'` | `limbs` \| `branching` \| `drawn` | Yes | limbs: space-colonization growth toward the crown blobs (solid anime-style crowns). branching: recursive central-leader branching (open, realistic broadleaf/conifer silhouettes). drawn: no procedural wood at all — the tree is exactly the hand-drawn branchSpines (Tree Lab sketch mode). Construction-only. |
1086
+ | `levels` | number | `3` | 1 – 4 | Yes | Recursion depth of the branching generator; each level subdivides into thinner children. Branching generator only. Construction-only. |
1087
+ | `childrenCount` | number | `6` | 1 – 90 | Yes | Child branches sprouting along the trunk (deeper levels derive from it). Conifers use high counts (60-90) for dense whorled fronds. Branching generator only. Construction-only. |
1088
+ | `branchAngle` | number | `55` | 10 – 130 | Yes | Child pitch away from the parent axis, in degrees. Past 90 points branches below horizontal (conifer fronds ~110). Branching generator only. Construction-only. |
1089
+ | `branchStart` | number | `0.4` | 0 – 0.9 | Yes | Fraction of the trunk kept bare before children begin — real trees hold their crown off the ground. Branching generator only. Construction-only. |
1090
+ | `lengthRatio` | number | `0.45` | 0.15 – 0.95 | Yes | Child branch length as a fraction of the trunk (deeper levels shorten from it). Branching generator only. Construction-only. |
1091
+ | `radiusRatio` | number | `0.7` | 0.3 – 0.9 | Yes | Child radius as a fraction of the parent\u2019s radius at the attach point — radius continuity is what makes forks read as one tree. Branching generator only. Construction-only. |
1092
+ | `gnarliness` | number | `0.15` | 0 – 0.6 | Yes | Random-walk curvature per growth section, amplified as branches thin: trunks stay stately, twigs wander. Branching generator only. Construction-only. |
1093
+ | `forceStrength` | number | `0.02` | -0.08 – 0.15 | Yes | Growth force: every section steers toward vertical with 1/radius compliance. Positive sweeps tips skyward (broadleaf crowns); negative droops them (pines, willows). Branching generator only. Construction-only. |
1094
+ | `conifer` | boolean | `false` | — | Yes | Evergreen behavior: branches taper fully and children shorten toward the top \u2014 the layered cone silhouette. Pair with high Children, Branch Angle ~110, negative Growth Force. Branching generator only. Construction-only. |
1095
+ | `attractionCount` | number | `90` | 10 – 200 | Yes | Number of crown attraction points the limbs grow toward; more points grow more, finer limbs. Construction-only. |
1096
+ | `segmentLength` | number | `0.3` | 0.1 – 0.8 | Yes | Growth step length in meters; shorter steps grow smoother, curvier limbs. Construction-only. |
1097
+ | `influenceRadius` | number | `1.2` | 0.3 – 2.5 | Yes | How far an attraction point can pull on a growing limb, in meters. Construction-only. |
1098
+ | `killRadius` | number | `0.42` | 0.1 – 1 | Yes | Distance at which a limb consumes an attraction point and stops growing toward it. Construction-only. |
1099
+ | `maxSteps` | number | `48` | 4 – 96 | Yes | Growth iteration cap. Construction-only. |
1100
+ | `maxNodes` | number | `140` | 20 – 400 | Yes | Skeleton node cap; lower keeps trees to a few clean limbs. Construction-only. |
1101
+ | `radialSegments` | number | `8` | 3 – 16 | Yes | Cross-section segment count of each bark tube. Construction-only. |
1102
+ | `tipRadius` | number | `0.03` | 0.005 – 0.15 | Yes | Radius of the thinnest twigs in meters; pipe-model radii grow from here toward the root. Construction-only. |
1103
+ | `minLimbRadius` | number | `0.028` | 0 – 0.15 | Yes | Limbs thinner than this get no bark tube and are left to the leaves. Construction-only. |
1104
+ | `attachmentTwigRadius` | number | `0.09` | 0 – 0.3 | Yes | Wood thinner than this sprouts leaf tufts in canopy mode. Construction-only. |
1105
+ | `attractionReach` | number | — | 0 – 1 | Yes | How deep into each crown blob attraction points sample (fraction of blob radius); null/unset is automatic (0.65 canopy mode, 0.92 tips mode). Construction-only. |
1106
+
1107
+ ### Trees: Canopy Cards
1108
+
1109
+ Leaf-card canopy geometry: card counts, tuft clusters, and shell fill. Construction-only.
1110
+
1111
+ | Field | Type | Default | Range / options | Portable | Description |
1112
+ |---|---|---|---|---|---|
1113
+ | `cardCount` | number | `170` | 20 – 600 | Yes | Base leaf-card count before density and coverage scaling; few LARGE overlapping cards keep the crown one fluffy mass. Construction-only. |
1114
+ | `cardSizeRange` | vector2 | `[1, 1.6]` | — | Yes | Min/max leaf-cluster card size in meters. Construction-only. |
1115
+ | `cardsPerCluster` | number | `5` | 1 – 20 | Yes | Cards per leaf tuft around each branch attachment. Construction-only. (In tips placement the built-in default becomes 9.) |
1116
+ | `clusterRadius` | number | `0.48` | 0.1 – 1.5 | Yes | Radius in meters of each leaf tuft around its branch end. Construction-only. (In tips placement the built-in default becomes 0.62.) |
1117
+ | `shellFill` | boolean | `true` | — | Yes | Fill the blob shells between tufts so the crown reads as one solid mass; off leaves bare wood between end bushes. Construction-only. (Tips placement turns this off by default.) |
1118
+
1119
+ ### Trees: Foliage Material
1120
+
1121
+ Leaf material response: wind, sun, alpha cutout, scene and cloud shadows. Applies at runtime via applySettings.
1122
+
1123
+ | Field | Type | Default | Range / options | Portable | Description |
1124
+ |---|---|---|---|---|---|
1125
+ | `alphaCutoff` | number | `0.3` | 0 – 1 | Yes | Alpha-cutout threshold for the leaf sprite; low enough that mipmap-averaged alpha does not erode distant crowns. |
1126
+ | `windDirection` | vector2 | `[1, 0.3]` | — | Yes | Horizontal (XZ) heading the canopy flutter drifts toward. |
1127
+ | `windSpeed` | number | `1` | 0 – 4 | Yes | How fast the leaf-card flutter oscillates. |
1128
+ | `windStrength` | number | `0.05` | 0 – 0.5 | Yes | How far leaf cards sway with the wind. |
1129
+ | `sunDirection` | vector3 | `[0.35, 0.72, 0.42]` | — | Yes | World-space direction toward the sun. Match your main directional light. |
1130
+ | `sunColor` | color | `[1, 0.96, 0.84]` (#fff5d6) | — | Yes | Sunlight tint applied to lit leaf cards. |
1131
+ | `skyColor` | color | `[0.62, 0.78, 0.95]` (#9ec7f2) | — | Yes | Ambient sky tint mixed into shaded leaf cards. |
1132
+ | `sceneShadowStrength` | number | `0.55` | 0 – 1 | Yes | How strongly renderer shadow maps shift the crown toward its shadow palette. 0 disables. |
1133
+ | `backlitStrength` | number | `0.35` | 0 – 2 | Yes | Translucent glow on leaves between the camera and the sun. |
1134
+ | `cloudShadowStrength` | number | `0` | 0 – 1 | Yes | How strongly drifting procedural cloud shadows darken the crown. 0 disables the effect. |
1135
+ | `cloudShadowCoverage` | number | `0.45` | 0 – 1 | Yes | Fraction of the world covered by cloud shadow at any moment. |
1136
+ | `cloudShadowScale` | number | `0.012` | 0.001 – 0.1 | Yes | World-to-noise scale of the cloud shadow pattern; smaller values give larger cloud shapes. |
1137
+ | `cloudShadowVelocity` | vector2 | `[0.02, 0.006]` | — | Yes | Cloud shadow drift in noise-space units per second (world drift = velocity / scale). |
1138
+
1139
+ ## Sky
1140
+
1141
+ Module: `toonlab/sky` — 5 groups, 47 fields.
1142
+
1143
+ 47 schema fields: 46 portable Sky art settings plus non-portable compatibility `radius`. Lighting, Weather, and manual state compose through ordered runtime layers; deployment quality is a separate compile-time tier.
1144
+
1145
+ ### Sky: Dome
1146
+
1147
+ Sky dome geometry. Construction-only.
1148
+
1149
+ | Field | Type | Default | Range / options | Portable | Description |
1150
+ |---|---|---|---|---|---|
1151
+ | `radius` | number | `100` | 10 – 1000 | No — local/construction | Sphere radius of the sky dome in meters. Construction-only: baked into the dome geometry; applySettings stores but does not rebuild it. |
1152
+
1153
+ ### Sky: Gradient
1154
+
1155
+ Vertical zenith-to-horizon-to-ground gradient and horizon scattering.
1156
+
1157
+ | Field | Type | Default | Range / options | Portable | Description |
1158
+ |---|---|---|---|---|---|
1159
+ | `zenithColor` | color | `[0.28, 0.56, 0.92]` (#478feb) | — | Yes | Sky color straight up at the top of the dome. |
1160
+ | `horizonColor` | color | `[0.78, 0.92, 1]` (#c7ebff) | — | Yes | Sky color at the horizon band. |
1161
+ | `groundColor` | color | `[0.42, 0.48, 0.55]` (#6b7a8c) | — | Yes | Dome color below the horizon. |
1162
+ | `zenithExponent` | number | `0.48` | 0.1 – 4 | Yes | Shape of the horizon-to-zenith gradient. Lower values bring the zenith color farther toward the horizon. |
1163
+ | `groundExponent` | number | `0.55` | 0.1 – 4 | Yes | Shape of the mirrored below-horizon fade into the ground color. |
1164
+ | `horizonBandSize` | number | `0.42` | 0.02 – 1 | Yes | Vertical size of the sun-side atmospheric scattering band around the horizon. |
1165
+ | `horizonSunPower` | number | `5` | 0.5 – 20 | Yes | How tightly horizon scattering concentrates toward the sun direction. |
1166
+ | `horizonScattering` | number | `0.5` | 0 – 1 | Yes | Strength of the bright sun-side atmospheric wedge at the horizon. |
1167
+
1168
+ ### Sky: Sun
1169
+
1170
+ Sun disc position, size, tint, and glow halo.
1171
+
1172
+ | Field | Type | Default | Range / options | Portable | Description |
1173
+ |---|---|---|---|---|---|
1174
+ | `sunDirection` | vector3 | `[0.35, 0.8, 0.45]` | — | Yes | World-space direction toward the sun (normalized on apply). Match your main directional light. |
1175
+ | `sunColor` | color | `[1, 0.95, 0.82]` (#fff2d1) | — | Yes | Tint of the sun disc and its glow. |
1176
+ | `sunSize` | number | `0.026` | 0 – 0.2 | Yes | Angular size of the sun disc. |
1177
+ | `sunDiscSoftness` | number | `0.5` | 0.01 – 1 | Yes | Fraction of the disc radius used for its anti-aliased painterly edge. |
1178
+ | `sunDiscIntensity` | number | `2.4` | 0 – 8 | Yes | Brightness multiplier of the solid sun disc before the renderer tone map. |
1179
+ | `sunGlowStrength` | number | `1` | 0 – 4 | Yes | Master intensity of the broad and core sun glow terms. |
1180
+ | `sunGlowSpread` | number | `5` | 1 – 20 | Yes | Falloff power of the broad halo. Lower values spread the glow across more sky. |
1181
+ | `sunGlowCoreSharpness` | number | `60` | 5 – 200 | Yes | Falloff power of the tight inner halo. Higher values make a smaller, sharper core. |
1182
+ | `sunGlowBroadStrength` | number | `0.16` | 0 – 2 | Yes | Contribution of the broad halo inside the master glow strength. |
1183
+ | `sunGlowCoreStrength` | number | `0.5` | 0 – 2 | Yes | Contribution of the tight inner halo inside the master glow strength. |
1184
+ | `sunCloudOcclusionStrength` | number | `1` | 0 – 1 | Yes | How strongly dense cloud coverage hides the sun disc. 0 keeps the disc visible through cloud. |
1185
+
1186
+ ### Sky: Clouds
1187
+
1188
+ Painterly two-tone procedural clouds.
1189
+
1190
+ | Field | Type | Default | Range / options | Portable | Description |
1191
+ |---|---|---|---|---|---|
1192
+ | `cloudCoverage` | number | `0.42` | 0 – 1 | Yes | Fraction of the sky filled by clouds. 0 clears the sky. |
1193
+ | `cloudScale` | number | `1.6` | 0.1 – 6 | Yes | Noise scale of the cloud shapes; higher gives smaller, busier clouds. |
1194
+ | `cloudSoftness` | number | `0.1` | 0.01 – 0.3 | Yes | Width of the painterly cloud silhouette transition. |
1195
+ | `cloudProjection` | number | `0.22` | 0.05 – 0.8 | Yes | Perspective offset of the virtual cloud plane; higher values flatten clouds toward the horizon. |
1196
+ | `cloudOpacity` | number | `1` | 0 – 1 | Yes | Overall blend opacity of the procedural cloud layer. |
1197
+ | `cloudEdgeOpacity` | number | `0.65` | 0 – 1 | Yes | Opacity of the soft outer silhouette relative to the solid cloud core. |
1198
+ | `cloudSpeed` | number | `1` | 0 – 4 | Yes | How fast the authored cloud layer drifts across the dome. |
1199
+ | `cloudDirection` | vector2 | `[0.9615239476, 0.2747211279]` | — | Yes | Normalized horizontal drift direction of the authored cloud layer; speed is controlled separately. |
1200
+ | `cloudSeed` | number | `0` | 0 – 1000 | Yes | Offsets the procedural cloud field to produce a different deterministic composition. |
1201
+ | `cloudColor` | color | `[1, 1, 1]` (#ffffff) | — | Yes | Lit tone of the two-tone painterly clouds. |
1202
+ | `cloudShadeColor` | color | `[0.68, 0.78, 0.92]` (#adc7eb) | — | Yes | Shaded underside tone of the two-tone painterly clouds. |
1203
+ | `cloudShadeStrength` | number | `0.85` | 0 – 1 | Yes | Strength of the two-tone shaded underside. |
1204
+ | `cloudShadeThreshold` | number | `0.02` | -0.3 – 0.3 | Yes | Noise-difference threshold that separates the lit and shaded cloud tones. |
1205
+ | `cloudShadeSoftness` | number | `0.06` | 0.001 – 0.3 | Yes | Softness of the transition between the two cloud tones. |
1206
+ | `cloudLightOffset` | number | `0.4` | 0 – 2 | Yes | Distance of the secondary noise sample toward the sun; controls the depth and directionality of cloud shading. |
1207
+ | `cloudSilverLiningStrength` | number | `0.3` | 0 – 2 | Yes | Warm sun-colored lining added to cloud edges facing the sun. |
1208
+ | `cloudSunPower` | number | `10` | 1 – 40 | Yes | Angular focus of the sun-colored cloud lining. |
1209
+ | `cloudHorizonFade` | number | `0.16` | 0.02 – 0.8 | Yes | Altitude at which the cloud layer reaches full opacity above the horizon. |
1210
+
1211
+ ### Sky: Stars
1212
+
1213
+ Procedural star field for night skies.
1214
+
1215
+ | Field | Type | Default | Range / options | Portable | Description |
1216
+ |---|---|---|---|---|---|
1217
+ | `starsStrength` | number | `0` | 0 – 2 | Yes | Brightness of the procedural star field. 0 (default) hides stars for daytime skies. |
1218
+ | `starsColor` | color | `[1, 0.98, 0.92]` (#fffaeb) | — | Yes | Tint of the procedural star glints. |
1219
+ | `starsSeed` | number | `0` | 0 – 1000 | Yes | Offsets the deterministic star pattern without changing density or size. |
1220
+ | `starsDensity` | number | `0.28` | 0 – 1 | Yes | Fraction of candidate cells allowed to contain a visible star. |
1221
+ | `starsScale` | number | `14` | 2 – 64 | Yes | Density scale of the projected star grid; higher values produce more, smaller cells. |
1222
+ | `starsSize` | number | `0.06` | 0.005 – 0.2 | Yes | Size of each procedural star glint inside its cell. |
1223
+ | `starsTwinkleStrength` | number | `0.8` | 0 – 1 | Yes | Depth of per-star brightness animation. 0 disables twinkle without hiding stars. |
1224
+ | `starsTwinkleSpeed` | number | `1` | 0 – 4 | Yes | Speed multiplier of the seeded per-star twinkle animation. |
1225
+ | `starsHorizonFade` | number | `0.24` | 0.04 – 1 | Yes | Altitude at which the star field reaches full brightness above the horizon. |
1226
+
1227
+ ## Paths, roads & bridges
1228
+
1229
+ Module: `toonlab/pathgen` — 4 groups, 22 fields.
1230
+
1231
+ Grouped settings consumed by `createStylizedPaths({ settings })` and serialized in path recipes.
1232
+
1233
+ ### Paths, roads & bridges: Routing
1234
+
1235
+ Cost-field router: how strongly slope and water repel routes, and how much existing paths attract reuse (forks and junctions).
1236
+
1237
+ | Field | Type | Default | Range / options | Portable | Description |
1238
+ |---|---|---|---|---|---|
1239
+ | `pointCount` | number | `4` | 2 – 8 | Yes | Auto mode: number of destinations probed from the terrain and connected into a network. |
1240
+ | `slopeCost` | number | `26` | 0 – 80 | Yes | How expensive climbing is for the router. Higher values hug contours and produce switchbacks instead of straight climbs. |
1241
+ | `waterCost` | number | `14` | 2 – 60 | Yes | Cost multiplier for crossing water. High enough that routes only cross where a bridge is worth it, low enough that crossings still happen. |
1242
+ | `reuseBonus` | number | `0.45` | 0 – 0.9 | Yes | Cost discount (0..1) on cells an earlier route already walks — the source of natural forks and shared trunk roads. |
1243
+ | `gridStep` | number | `8` | 3 – 24 | Yes | Router grid resolution in meters. Smaller steps find finer detours and cost more to solve. |
1244
+ | `shoreMargin` | number | `0.6` | 0 – 2 | Yes | Meters above the waterline a cell must be to count as dry land. |
1245
+ | `loopChance` | number | `0.35` | 0 – 1 | Yes | Auto mode: chance to add one extra ring road beyond the spanning network. |
1246
+
1247
+ ### Paths, roads & bridges: Ribbon
1248
+
1249
+ The walkable strip: width, hand-drawn wobble, edge skirts that tuck into the terrain, and the height-profile smoothing that flattens the walk.
1250
+
1251
+ | Field | Type | Default | Range / options | Portable | Description |
1252
+ |---|---|---|---|---|---|
1253
+ | `width` | number | `2.6` | 1 – 6 | Yes | Walkable ribbon width in meters (dirt trail 2–3, stone road 3–4). |
1254
+ | `widthWobble` | number | `0.22` | 0 – 0.6 | Yes | Low-frequency width variation (0..1) for the hand-drawn look. 0 is a survey-straight road. |
1255
+ | `edgeSkirt` | number | `1.1` | 0.2 – 2.5 | Yes | Extra meters each side that slope down and tuck under the terrain so the ribbon never floats on side slopes. |
1256
+ | `lift` | number | `0.07` | 0.02 – 0.25 | Yes | Meters the ribbon rides above the height profile — the true-overlay offset that prevents z-fighting. |
1257
+ | `smoothing` | number | `16` | 0 – 40 | Yes | Moving-average window in meters applied to the terrain height along the route; the flattened profile is what paths.heightAt reports. |
1258
+ | `stepLength` | number | `2` | 1 – 5 | Yes | Meters between ribbon cross-sections. Smaller steps follow curves tighter and spend more triangles. |
1259
+ | `edgeFade` | number | `1.4` | 0.2 – 4 | Yes | Meters past the ribbon edge over which maskAt falls from 1 to 0 — the band where grass and flowers thin out. |
1260
+
1261
+ ### Paths, roads & bridges: Bridges
1262
+
1263
+ Arched plank bridges generated where a route crosses open water.
1264
+
1265
+ | Field | Type | Default | Range / options | Portable | Description |
1266
+ |---|---|---|---|---|---|
1267
+ | `arc` | number | `0.1` | 0 – 0.18 | Yes | Deck rise as a fraction of span length. 0 is a flat causeway, 0.14 a strong arched footbridge. |
1268
+ | `railStyle` | select | `'posts'` | `posts` \| `beams` \| `none` | Yes | Bridge railing construction. |
1269
+ | `postSpacing` | number | `2.2` | 1.2 – 4 | Yes | Meters between railing posts. |
1270
+ | `minSpan` | number | `4` | 2 – 12 | Yes | Meters of open water a route must cross before a bridge is generated (shorter crossings ford instead). |
1271
+ | `pierSpacing` | number | `7` | 4 – 16 | Yes | Long crossings get support piers to the bed every this many meters. |
1272
+ | `deckClearance` | number | `1.1` | 0.3 – 3 | Yes | Minimum meters between the water level and the deck at mid-span. |
1273
+
1274
+ ### Paths, roads & bridges: Stairs
1275
+
1276
+ Stepped stone segments swapped in where the route climbs steeply. Visual only — paths.heightAt stays a smooth ramp.
1277
+
1278
+ | Field | Type | Default | Range / options | Portable | Description |
1279
+ |---|---|---|---|---|---|
1280
+ | `slopeThreshold` | number | `0.45` | 0.2 – 0.9 | Yes | Rise-over-run along the route beyond which the ribbon switches to stepped stone segments. |
1281
+ | `stepHeight` | number | `0.19` | 0.12 – 0.3 | Yes | Riser height of generated steps in meters. |
1282
+
1283
+ ## Ambient VFX
1284
+
1285
+ Module: `toonlab/ambientfx` — 6 groups, 54 fields.
1286
+
1287
+ Settings are nested per group: `createAmbientFx({ settings: { fireflies: { blinkSpeed: 0.8 } } })`. Effect entries in `effects` override their group; `density` there is a multiplier.
1288
+
1289
+ ### Ambient VFX: Shared
1290
+
1291
+ Wind, sun, and the follow-window every effect emits into. Match windDirection/windSpeed/windStrength with the grass and tree wind so the whole world blows the same way.
1292
+
1293
+ | Field | Type | Default | Range / options | Portable | Description |
1294
+ |---|---|---|---|---|---|
1295
+ | `windDirection` | vector2 | `[1, 0.3]` | — | Yes | Horizontal (XZ) heading the wind blows toward — share with grass/trees. Magnitude is ignored. |
1296
+ | `windSpeed` | number | `1` | 0 – 4 | Yes | How fast wind-driven motion oscillates and mist scrolls. |
1297
+ | `windStrength` | number | `0.16` | 0 – 1 | Yes | How far particles drift downwind. |
1298
+ | `sunDirection` | vector3 | `[0.35, 0.72, 0.42]` | — | Yes | World-space direction toward the sun (normalized on apply); drives the pollen backlight and petal sheen. |
1299
+ | `windowRadius` | number | `45` | 15 – 120 | Yes | Meters of the follow window particles exist in around the follow target. Construction-only. |
1300
+ | `maxParticles` | number | `20000` | 1000 – 40000 | Yes | Hard budget; effect densities are scaled down proportionally when their sum would exceed it. Construction-only. |
1301
+
1302
+ ### Ambient VFX: Petals
1303
+
1304
+ Flutter-falling blossom petals. Emit from registered bloom volumes (flowering canopies) when any exist, otherwise from the open air above the ground.
1305
+
1306
+ | Field | Type | Default | Range / options | Portable | Description |
1307
+ |---|---|---|---|---|---|
1308
+ | `enabled` | boolean | `true` | — | Yes | Master toggle for the effect. |
1309
+ | `density` | number | `0.03` | 0 – 0.15 | Yes | Petals per m³ of the emission volume. |
1310
+ | `canopyDensity` | number | `4.5` | 0 – 20 | Yes | Petals per m³ inside registered bloom volumes (crowns shed far more than open air). |
1311
+ | `sizeRange` | vector2 | `[0.06, 0.11]` | — | Yes | Min/max petal size in meters. |
1312
+ | `colorA` | color | `[1, 0.52, 0.68]` (#ff85ad) | — | Yes | Primary petal color. |
1313
+ | `colorB` | color | `[1, 0.75, 0.84]` (#ffbfd6) | — | Yes | Secondary petal color; each petal picks between the two. |
1314
+ | `emitHeight` | vector2 | `[2, 9]` | — | Yes | Min/max meters above ground petals spawn at when not bound to canopies. Construction-only. |
1315
+ | `flutter` | number | `1` | 0 – 3 | Yes | Side-to-side rocking amplitude while falling. |
1316
+ | `windResponse` | number | `1` | 0 – 3 | Yes | Multiplier on the shared wind drift for this effect. |
1317
+ | `gate` | select | `'day'` | `day` \| `night` \| `duskNight` \| `dawnDusk` \| `any` | Yes | When the effect is visible; weights follow the environmentTimeOfDay hour. |
1318
+
1319
+ ### Ambient VFX: Falling Leaves
1320
+
1321
+ Tumble-falling leaves with strong gust response. Emit from bloom volumes tagged effect:"leaves", otherwise globally.
1322
+
1323
+ | Field | Type | Default | Range / options | Portable | Description |
1324
+ |---|---|---|---|---|---|
1325
+ | `enabled` | boolean | `true` | — | Yes | Master toggle for the effect. |
1326
+ | `density` | number | `0.022` | 0 – 0.15 | Yes | Leaves per m³ of the emission volume. |
1327
+ | `canopyDensity` | number | `3.2` | 0 – 20 | Yes | Leaves per m³ inside bloom volumes tagged effect:"leaves". |
1328
+ | `sizeRange` | vector2 | `[0.09, 0.16]` | — | Yes | Min/max leaf size in meters. |
1329
+ | `colorA` | color | `[0.93, 0.64, 0.2]` (#eda333) | — | Yes | Primary leaf color. |
1330
+ | `colorB` | color | `[0.78, 0.4, 0.13]` (#c76621) | — | Yes | Secondary leaf color; each leaf picks between the two. |
1331
+ | `emitHeight` | vector2 | `[2, 10]` | — | Yes | Min/max meters above ground leaves spawn at when not bound to canopies. Construction-only. |
1332
+ | `tumble` | number | `1` | 0 – 3 | Yes | Rotational tumbling speed while falling. |
1333
+ | `windResponse` | number | `1.35` | 0 – 3 | Yes | Multiplier on the shared wind drift for this effect. |
1334
+ | `gate` | select | `'any'` | `day` \| `night` \| `duskNight` \| `dawnDusk` \| `any` | Yes | When the effect is visible; weights follow the environmentTimeOfDay hour. |
1335
+
1336
+ ### Ambient VFX: Fireflies
1337
+
1338
+ Hovering, blinking emissive motes over grass and shore margins. Unlit by design; they ramp with the time-of-day dusk.
1339
+
1340
+ | Field | Type | Default | Range / options | Portable | Description |
1341
+ |---|---|---|---|---|---|
1342
+ | `enabled` | boolean | `true` | — | Yes | Master toggle for the effect. |
1343
+ | `density` | number | `0.045` | 0 – 0.2 | Yes | Fireflies per m³ of the near-ground hover band. |
1344
+ | `sizeRange` | vector2 | `[0.13, 0.2]` | — | Yes | Min/max glow-sprite size in meters. |
1345
+ | `color` | color | `[1, 0.87, 0.42]` (#ffde6b) | — | Yes | Emissive glow color (unlit; never touched by scene lights). |
1346
+ | `hoverHeight` | vector2 | `[0.25, 2.2]` | — | Yes | Min/max meters above ground fireflies hover at. Construction-only. |
1347
+ | `hoverRadius` | number | `0.9` | 0 – 4 | Yes | Meters of wander around each spawn point. |
1348
+ | `blinkSpeed` | number | `1` | 0 – 4 | Yes | How fast the blink program pulses. |
1349
+ | `intensity` | number | `1` | 0 – 4 | Yes | Emissive brightness multiplier. |
1350
+ | `windResponse` | number | `0.1` | 0 – 3 | Yes | Multiplier on the shared wind drift for this effect. |
1351
+ | `gate` | select | `'duskNight'` | `day` \| `night` \| `duskNight` \| `dawnDusk` \| `any` | Yes | When the effect is visible; weights follow the environmentTimeOfDay hour. |
1352
+
1353
+ ### Ambient VFX: Pollen Motes
1354
+
1355
+ Slow curl-drifting dust motes, brightest looking toward the sun (backlit). Bind to flower masks via the effects config.
1356
+
1357
+ | Field | Type | Default | Range / options | Portable | Description |
1358
+ |---|---|---|---|---|---|
1359
+ | `enabled` | boolean | `true` | — | Yes | Master toggle for the effect. |
1360
+ | `density` | number | `0.06` | 0 – 0.3 | Yes | Motes per m³ of the near-ground drift band. |
1361
+ | `sizeRange` | vector2 | `[0.045, 0.085]` | — | Yes | Min/max mote size in meters. |
1362
+ | `color` | color | `[1, 0.93, 0.72]` (#ffedb8) | — | Yes | Mote color (additive, so it reads as light). |
1363
+ | `hoverHeight` | vector2 | `[0.3, 2.6]` | — | Yes | Min/max meters above ground motes drift at. Construction-only. |
1364
+ | `driftRadius` | number | `1.3` | 0 – 5 | Yes | Meters of curl-drift wander around each spawn point. |
1365
+ | `backlitStrength` | number | `1` | 0 – 3 | Yes | Brightness boost when the camera looks toward the sun through the motes. |
1366
+ | `windResponse` | number | `0.5` | 0 – 3 | Yes | Multiplier on the shared wind drift for this effect. |
1367
+ | `gate` | select | `'day'` | `day` \| `night` \| `duskNight` \| `dawnDusk` \| `any` | Yes | When the effect is visible; weights follow the environmentTimeOfDay hour. |
1368
+
1369
+ ### Ambient VFX: Ground Mist
1370
+
1371
+ Soft horizontal wisps scrolling with the wind, hugging water margins and low ground at dawn/dusk.
1372
+
1373
+ | Field | Type | Default | Range / options | Portable | Description |
1374
+ |---|---|---|---|---|---|
1375
+ | `enabled` | boolean | `true` | — | Yes | Master toggle for the effect. |
1376
+ | `density` | number | `0.0045` | 0 – 0.02 | Yes | Wisps per m³ of the ground-hugging band — a few dozen quads, not thousands. |
1377
+ | `sizeRange` | vector2 | `[1.6, 3]` | — | Yes | Min/max wisp height in meters (width is ~3–5× the height). |
1378
+ | `color` | color | `[0.84, 0.9, 0.97]` (#d6e6f7) | — | Yes | Wisp color. |
1379
+ | `opacity` | number | `0.34` | 0 – 0.6 | Yes | Peak alpha at a wisp center; the sprite falls off softly from there. |
1380
+ | `scrollSpan` | number | `26` | 5 – 60 | Yes | Meters a wisp travels downwind before wrapping (fades at both ends). |
1381
+ | `marginWidth` | number | `7` | 1 – 20 | Yes | Meters of \|ground − waterLevel\| that count as the water-margin emission band. Construction-only. |
1382
+ | `windResponse` | number | `1` | 0 – 3 | Yes | Multiplier on the shared wind drift for this effect. |
1383
+ | `gate` | select | `'dawnDusk'` | `day` \| `night` \| `duskNight` \| `dawnDusk` \| `any` | Yes | When the effect is visible; weights follow the environmentTimeOfDay hour. |
1384
+
1385
+ ## Gameplay VFX
1386
+
1387
+ Module: `toonlab/vfxgen` — 6 groups, 47 fields.
1388
+
1389
+ Settings are nested per group: `createVfxSystem({ settings: { impact: { sparkCount: 40 } } })`. Per-spawn `look` overrides re-tint one spawn without touching settings.
1390
+
1391
+ ### Gameplay VFX: Shared
1392
+
1393
+ Budgets and global pacing for every effect. The one-shot backbone renders all bursts in two draw calls; these bound its ring buffers and the pooled trail/projectile meshes.
1394
+
1395
+ | Field | Type | Default | Range / options | Portable | Description |
1396
+ |---|---|---|---|---|---|
1397
+ | `maxParticles` | number | `4096` | 256 – 32768 | Yes | Ring-buffer capacity of the one-shot backbone (sparks, embers, puffs, rings, flashes). Oldest instances are overwritten first. Construction-only. |
1398
+ | `maxProjectiles` | number | `8` | 1 – 32 | Yes | Pooled projectile core meshes (fireballs in flight). Spawns beyond this reuse the oldest. Construction-only. |
1399
+ | `maxTrails` | number | `8` | 1 – 32 | Yes | Pooled slash-trail ribbons live at once. Spawns beyond this reuse the oldest. Construction-only. |
1400
+ | `timeScale` | number | `1` | 0 – 2 | Yes | Global VFX clock multiplier — hit-stop and slow-motion hooks feed this. |
1401
+
1402
+ ### Gameplay VFX: Slash Trail
1403
+
1404
+ Weapon-swing ribbon sampled from a followed blade (base + tip anchors), with a stepped toon fade and edge sparkle. The anime arc smear.
1405
+
1406
+ | Field | Type | Default | Range / options | Portable | Description |
1407
+ |---|---|---|---|---|---|
1408
+ | `enabled` | boolean | `true` | — | Yes | Master toggle for the effect. |
1409
+ | `color` | color | `[0.55, 0.8, 1]` (#8cccff) | — | Yes | The solid body of the arc — the flat saturated fill. |
1410
+ | `coreColor` | color | `[1, 1, 1]` (#ffffff) | — | Yes | Leading-edge band color along the blade-tip side; white body+edge banding is the reference action-RPG read. |
1411
+ | `lifetime` | number | `0.28` | 0.05 – 1.5 | Yes | Seconds a ribbon segment persists before the tail erodes over it. |
1412
+ | `bands` | number | `3` | 1 – 8 | Yes | Cel quantization of the tail erosion sweep — fewer bands, chunkier stepped tail. |
1413
+ | `intensity` | number | `1` | 0 – 4 | Yes | Emissive brightness multiplier on the glow parts. |
1414
+ | `sparkle` | number | `60` | 0 – 300 | Yes | Sparks per second shed from the blade tip while the trail is active. |
1415
+ | `segments` | number | `96` | 8 – 256 | Yes | Ribbon history capacity in spline points — longer fast swings need more. Construction-only. |
1416
+
1417
+ ### Gameplay VFX: Impact Burst
1418
+
1419
+ Hit feedback: a radial star flash plus ballistic sparks with gravity. `power` at spawn scales count, speed, and flash size.
1420
+
1421
+ | Field | Type | Default | Range / options | Portable | Description |
1422
+ |---|---|---|---|---|---|
1423
+ | `enabled` | boolean | `true` | — | Yes | Master toggle for the effect. |
1424
+ | `sparkColor` | color | `[1, 0.85, 0.45]` (#ffd973) | — | Yes | Ballistic spark color (additive). |
1425
+ | `flashColor` | color | `[1, 0.97, 0.88]` (#fff7e0) | — | Yes | Radial star-flash color at the hit point. |
1426
+ | `sparkCount` | number | `26` | 0 – 120 | Yes | Sparks per burst at power 1; spawn `power` scales this. |
1427
+ | `sparkSpeed` | number | `7` | 0 – 30 | Yes | Initial spark speed in m/s, biased along the hit normal. |
1428
+ | `gravity` | number | `18` | 0 – 60 | Yes | Downward pull on sparks in m/s² — high values read as metal chips. |
1429
+ | `flashSize` | number | `0.9` | 0 – 4 | Yes | Star-flash quad size in meters at power 1. |
1430
+ | `spikes` | number | `6` | 3 – 12 | Yes | Point count of the star flash — 4 reads as an action-RPG glint, 6–8 as an anime hit star. |
1431
+ | `shockwave` | boolean | `true` | — | Yes | Camera-facing expanding ring at the hit point — the action-RPG hit circle. Tinted by Flash Color. |
1432
+ | `lifetime` | number | `0.5` | 0.05 – 2 | Yes | Seconds sparks live (the flash pops in about a quarter of this). |
1433
+ | `intensity` | number | `1` | 0 – 4 | Yes | Emissive brightness multiplier on the glow parts. |
1434
+
1435
+ ### Gameplay VFX: Fireball
1436
+
1437
+ Projectile: a flame-shaded core billboard shedding embers in flight; explodes into an impact burst, smoke puffs, and an expanding scorch ring.
1438
+
1439
+ | Field | Type | Default | Range / options | Portable | Description |
1440
+ |---|---|---|---|---|---|
1441
+ | `enabled` | boolean | `true` | — | Yes | Master toggle for the effect. |
1442
+ | `coreSize` | number | `0.42` | 0.05 – 2 | Yes | Flame-core billboard radius in meters. |
1443
+ | `coreColor` | color | `[1, 0.95, 0.6]` (#fff299) | — | Yes | Hot center of the flame shader. |
1444
+ | `flameColor` | color | `[1, 0.45, 0.12]` (#ff731f) | — | Yes | Outer flame licks and ember tint. |
1445
+ | `emberRate` | number | `90` | 0 – 400 | Yes | Embers shed per second while the projectile flies. |
1446
+ | `emberSize` | vector2 | `[0.05, 0.12]` | — | Yes | Min/max ember size in meters. |
1447
+ | `emberLifetime` | number | `0.55` | 0.05 – 2 | Yes | Seconds each shed ember lives. |
1448
+ | `intensity` | number | `1.2` | 0 – 4 | Yes | Emissive brightness multiplier on the glow parts. |
1449
+ | `explosionPower` | number | `1.6` | 0 – 5 | Yes | `power` handed to the impact burst + smoke on detonation. |
1450
+ | `scorchRing` | boolean | `true` | — | Yes | Expanding ground ring on detonation. |
1451
+ | `ringColor` | color | `[1, 0.55, 0.2]` (#ff8c33) | — | Yes | Scorch-ring glow color. |
1452
+
1453
+ ### Gameplay VFX: Footstep Dust
1454
+
1455
+ Small chunky dust puffs kicked up at a footfall. Cheap enough to fire every step.
1456
+
1457
+ | Field | Type | Default | Range / options | Portable | Description |
1458
+ |---|---|---|---|---|---|
1459
+ | `enabled` | boolean | `true` | — | Yes | Master toggle for the effect. |
1460
+ | `puffCount` | number | `5` | 0 – 20 | Yes | Dust puffs per footfall. |
1461
+ | `sizeRange` | vector2 | `[0.1, 0.22]` | — | Yes | Min/max puff size in meters (puffs grow ~2× over life). |
1462
+ | `color` | color | `[0.78, 0.72, 0.62]` (#c7b89e) | — | Yes | Dust color — sample the ground palette. |
1463
+ | `lifetime` | number | `0.55` | 0.05 – 2 | Yes | Seconds a puff lives. |
1464
+ | `rise` | number | `0.5` | 0 – 2 | Yes | Upward drift in m/s — heavier dust settles faster. |
1465
+ | `spread` | number | `0.22` | 0 – 1 | Yes | Horizontal scatter radius in meters around the footfall. |
1466
+
1467
+ ### Gameplay VFX: Landing Ring
1468
+
1469
+ The classic landing hit: a radial ring of dust puffs expanding outward from the touch-down point. `power` at spawn scales radius and count.
1470
+
1471
+ | Field | Type | Default | Range / options | Portable | Description |
1472
+ |---|---|---|---|---|---|
1473
+ | `enabled` | boolean | `true` | — | Yes | Master toggle for the effect. |
1474
+ | `puffCount` | number | `14` | 0 – 40 | Yes | Puffs around the ring at power 1; spawn `power` scales this. |
1475
+ | `ringRadius` | number | `1.1` | 0.2 – 5 | Yes | Meters the dust ring expands to at power 1. |
1476
+ | `sizeRange` | vector2 | `[0.18, 0.38]` | — | Yes | Min/max puff size in meters. |
1477
+ | `color` | color | `[0.78, 0.72, 0.62]` (#c7b89e) | — | Yes | Dust color — sample the ground palette. |
1478
+ | `lifetime` | number | `0.7` | 0.05 – 2 | Yes | Seconds the ring takes to expand and fade. |
1479
+
1480
+ ## Fauna
1481
+
1482
+ Module: `toonlab/fauna` — 5 groups, 48 fields.
1483
+
1484
+ Settings are nested per species group: `createFauna({ settings: { birds: { fleeRadius: 15 } } })`. Populations are passed separately: `createFauna({ species: { birds: 40, fish: 80 } })`.
1485
+
1486
+ ### Fauna: Shared
1487
+
1488
+ Cross-species simulation budgets: the staggered steering-tick share and the distance beyond which agents degrade to scripted loops.
1489
+
1490
+ | Field | Type | Default | Range / options | Portable | Description |
1491
+ |---|---|---|---|---|---|
1492
+ | `tickShare` | number | `0.25` | 0.05 – 0.5 | Yes | Fraction of all agents that receive a full steering tick per update; the rest integrate their last velocity. 0.25 = every agent steers at ~15 Hz on a 60 Hz host. |
1493
+ | `farDistance` | number | `150` | 40 – 400 | Yes | Meters from the follow target beyond which agents stop steering entirely and fly scripted circles (fish keep their depth clamps). |
1494
+
1495
+ ### Fauna: Birds
1496
+
1497
+ Flocking boids in a roaming altitude band; perch on registered points (or terrain) and flush when the follow target approaches.
1498
+
1499
+ | Field | Type | Default | Range / options | Portable | Description |
1500
+ |---|---|---|---|---|---|
1501
+ | `altitudeMin` | number | `7` | 1 – 40 | Yes | Bottom of the preferred flight band, meters above the local terrain. |
1502
+ | `altitudeMax` | number | `26` | 2 – 80 | Yes | Top of the preferred flight band, meters above the local terrain. |
1503
+ | `cruiseSpeed` | number | `7` | 1 – 20 | Yes | Relaxed flight speed in m/s; flocks settle around it. |
1504
+ | `maxSpeed` | number | `12` | 2 – 30 | Yes | Hard speed cap in m/s, reached when fleeing. |
1505
+ | `neighborRadius` | number | `14` | 2 – 30 | Yes | Meters within which flockmates influence cohesion and alignment. |
1506
+ | `separationRadius` | number | `2.6` | 0.5 – 8 | Yes | Personal-space radius in meters; closer neighbors are pushed away. |
1507
+ | `cohesion` | number | `0.9` | 0 – 2 | Yes | Pull toward the local flock center — the flock-tightness knob. |
1508
+ | `alignment` | number | `0.8` | 0 – 2 | Yes | Pull toward the local average heading. |
1509
+ | `separation` | number | `1.3` | 0 – 3 | Yes | Push away from neighbors inside the separation radius. |
1510
+ | `wander` | number | `0.45` | 0 – 2 | Yes | Per-bird sinusoidal drift so flocks meander instead of orbiting. |
1511
+ | `fleeRadius` | number | `12` | 0 – 40 | Yes | Meters from the follow target at which flying birds scatter and perched birds flush. |
1512
+ | `perchChance` | number | `0.5` | 0 – 1 | Yes | Appetite for landing: expected perch attempts scale with this per ~10 s of flight. |
1513
+ | `perchDuration` | number | `11` | 2 – 40 | Yes | Mean seconds a bird stays perched (each stay jitters ±40%). |
1514
+ | `flapHz` | number | `3.4` | 0.5 – 8 | Yes | Wingbeats per second; the GPU flap phase/speed attributes derive from it. Birds glide (near-zero amplitude) when descending. |
1515
+ | `scale` | number | `1` | 0.4 – 2.5 | Yes | Uniform body scale multiplier (±12% per-bird jitter on top). |
1516
+ | `palette` | select | `'swallow'` | `swallow` \| `egret` \| `finch` | Yes | Named body palette; each palette carries 2–4 vertex-colored variants. |
1517
+
1518
+ ### Fauna: Butterflies
1519
+
1520
+ Individual noise-wanderers anchored to flower-mask points, hovering just above the terrain.
1521
+
1522
+ | Field | Type | Default | Range / options | Portable | Description |
1523
+ |---|---|---|---|---|---|
1524
+ | `hoverMin` | number | `0.5` | 0.1 – 3 | Yes | Bottom of the flutter band, meters above the local terrain. |
1525
+ | `hoverMax` | number | `1.7` | 0.2 – 5 | Yes | Top of the flutter band, meters above the local terrain. |
1526
+ | `speed` | number | `1.3` | 0.2 – 4 | Yes | Typical flutter speed in m/s. |
1527
+ | `wanderRadius` | number | `6` | 2 – 30 | Yes | Meters a butterfly may drift from its flower-mask anchor before being pulled back. |
1528
+ | `fleeRadius` | number | `3.5` | 0 – 15 | Yes | Meters from the follow target at which butterflies scatter upward. |
1529
+ | `flapHz` | number | `8.5` | 2 – 16 | Yes | Wingbeats per second for the GPU wing fold. |
1530
+ | `scale` | number | `1` | 0.4 – 2.5 | Yes | Uniform body scale multiplier (±20% per-agent jitter on top). |
1531
+ | `palette` | select | `'meadow'` | `meadow` \| `twilight` | Yes | Named wing palette; each palette carries up to 4 vertex-colored variants. |
1532
+
1533
+ ### Fauna: Dragonflies
1534
+
1535
+ Hover-and-dart flyers anchored to the water margin, holding a fixed height above the water surface.
1536
+
1537
+ | Field | Type | Default | Range / options | Portable | Description |
1538
+ |---|---|---|---|---|---|
1539
+ | `hoverHeight` | number | `0.6` | 0.2 – 3 | Yes | Meters above the water surface dragonflies hold. |
1540
+ | `hoverRadius` | number | `5` | 1 – 20 | Yes | Meters of drift allowed around the current hover anchor. |
1541
+ | `dartSpeed` | number | `7` | 1 – 16 | Yes | Straight-line speed in m/s when relocating to a new anchor. |
1542
+ | `dartChance` | number | `0.5` | 0 – 1 | Yes | Appetite for relocating: expected darts scale with this per ~8 s of hovering. |
1543
+ | `flapHz` | number | `36` | 10 – 60 | Yes | Wing oscillations per second; high rates read as the classic wing shimmer. |
1544
+ | `scale` | number | `1` | 0.4 – 2.5 | Yes | Uniform body scale multiplier. |
1545
+ | `palette` | select | `'pond'` | `pond` \| `ember` | Yes | Named body palette; each palette carries 2–3 vertex-colored variants. |
1546
+
1547
+ ### Fauna: Fish
1548
+
1549
+ Schooling boids clamped between the water surface and the bed; visible from above through the water refraction pass.
1550
+
1551
+ | Field | Type | Default | Range / options | Portable | Description |
1552
+ |---|---|---|---|---|---|
1553
+ | `surfaceMargin` | number | `0.3` | 0.1 – 2 | Yes | Minimum meters a fish stays below the water surface (never breaches). |
1554
+ | `bedMargin` | number | `0.35` | 0.1 – 2 | Yes | Minimum meters a fish stays above the terrain bed. |
1555
+ | `minSpawnDepth` | number | `1.1` | 0.3 – 5 | Yes | Meters of water column required for a fish spawn point; shallower bounds simply hold fewer fish. |
1556
+ | `cruiseSpeed` | number | `1.5` | 0.2 – 5 | Yes | Relaxed swim speed in m/s. |
1557
+ | `maxSpeed` | number | `3.2` | 0.5 – 8 | Yes | Hard speed cap in m/s, reached when fleeing. |
1558
+ | `neighborRadius` | number | `4` | 1 – 12 | Yes | Meters within which schoolmates influence cohesion and alignment. |
1559
+ | `separationRadius` | number | `0.8` | 0.2 – 4 | Yes | Personal-space radius in meters. |
1560
+ | `cohesion` | number | `0.9` | 0 – 2 | Yes | Pull toward the local school center — schooling tightness. |
1561
+ | `alignment` | number | `0.85` | 0 – 2 | Yes | Pull toward the local average heading. |
1562
+ | `separation` | number | `1.1` | 0 – 3 | Yes | Push away from neighbors inside the separation radius. |
1563
+ | `wander` | number | `0.5` | 0 – 2 | Yes | Per-fish sinusoidal drift so schools roam the basin. |
1564
+ | `fleeRadius` | number | `7` | 0 – 25 | Yes | Meters from the follow target (a swimmer, a bridge walker) at which fish scatter. |
1565
+ | `swayHz` | number | `2.8` | 0.5 – 8 | Yes | Tail-sway cycles per second for the GPU body flex. |
1566
+ | `scale` | number | `1` | 0.3 – 3 | Yes | Uniform body scale multiplier (±25% per-fish jitter on top). |
1567
+ | `palette` | select | `'koi'` | `koi` \| `silver` | Yes | Named body palette: koi for ponds and lakes, silver for open water. |
1568
+
1569
+ ## Buildings
1570
+
1571
+ Module: `toonlab/buildinggen` — 5 groups, 28 fields.
1572
+
1573
+ Grouped settings consumed by `createBuildingFromRecipe(...)` / `buildingAsset(...)`; `{ type, seed }` ride alongside the groups.
1574
+
1575
+ ### Buildings: Footprint
1576
+
1577
+ Ground plan: rect, L, or T, in meters.
1578
+
1579
+ | Field | Type | Default | Range / options | Portable | Description |
1580
+ |---|---|---|---|---|---|
1581
+ | `kind` | select | `'rect'` | `rect` \| `L` \| `T` | Yes | Ground-plan shape. |
1582
+ | `width` | number | `6.5` | 2.5 – 14 | Yes | Main rect width in meters. |
1583
+ | `depth` | number | `5` | 2.5 – 12 | Yes | Main rect depth in meters. |
1584
+ | `wingRatio` | number | `0.55` | 0.3 – 0.85 | Yes | L/T wing size relative to the main rect. |
1585
+
1586
+ ### Buildings: Massing
1587
+
1588
+ Floors, per-floor inset, and the slight outward wall lean that keeps facades hand-drawn.
1589
+
1590
+ | Field | Type | Default | Range / options | Portable | Description |
1591
+ |---|---|---|---|---|---|
1592
+ | `floors` | number | `1` | 1 – 5 | Yes | Full floors (towers go tall). |
1593
+ | `floorHeight` | number | `2.5` | 2.1 – 3.4 | Yes | Meters per floor. |
1594
+ | `atticRatio` | number | `0.55` | 0 – 0.8 | Yes | Half-floor under a gable roof (0 = none). |
1595
+ | `inset` | number | `0` | 0 – 0.3 | Yes | Meters each floor steps inward — watchtower massing. |
1596
+ | `wallLean` | number | `0.012` | 0 – 0.05 | Yes | Outward lean per meter of height. Exaggerated proportions are settings, not bugs. |
1597
+
1598
+ ### Buildings: Roof
1599
+
1600
+ Roof form: gable, hip, shed, or the curved pagoda-ish shrine roof. Roofs always overhang walls.
1601
+
1602
+ | Field | Type | Default | Range / options | Portable | Description |
1603
+ |---|---|---|---|---|---|
1604
+ | `kind` | select | `'gable'` | `gable` \| `hip` \| `shed` \| `pagoda` | Yes | Roof construction. |
1605
+ | `pitch` | number | `0.85` | 0.25 – 1.4 | Yes | Rise over half-span. |
1606
+ | `overhang` | number | `0.55` | 0.25 – 1.6 | Yes | Meters the roof reaches past the walls (invariant: > 0). |
1607
+ | `curvature` | number | `0` | 0 – 1 | Yes | Upturned eave sweep — the shrine-roof signature. |
1608
+ | `ridgeDecor` | number | `0` | 0 – 1 | Yes | Ridge cap beam and end finials. |
1609
+
1610
+ ### Buildings: Facade
1611
+
1612
+ Timber framing, window rhythm (windows never intersect beams), and the door (always on an exterior wall).
1613
+
1614
+ | Field | Type | Default | Range / options | Portable | Description |
1615
+ |---|---|---|---|---|---|
1616
+ | `beams` | number | `1` | 0 – 1 | Yes | Visible beam grid strength (0 hides framing). |
1617
+ | `bayWidth` | number | `1.6` | 1 – 2.6 | Yes | Meters between beam columns; windows land mid-bay. |
1618
+ | `windowChance` | number | `0.75` | 0 – 1 | Yes | Chance an eligible bay gets a window. |
1619
+ | `windowWidth` | number | `0.75` | 0.4 – 1.4 | Yes | Window width in meters (clamped inside its bay). |
1620
+ | `windowHeight` | number | `0.95` | 0.4 – 1.6 | Yes | Window height in meters. |
1621
+ | `doorWidth` | number | `1` | 0.7 – 2.2 | Yes | Door width in meters. |
1622
+ | `doorHeight` | number | `2` | 1.7 – 2.4 | Yes | Door height in meters. |
1623
+ | `baseHeight` | number | `0.35` | 0 – 1.2 | Yes | Stone base band height (shrines ride a full veranda plinth). |
1624
+
1625
+ ### Buildings: Palette
1626
+
1627
+ Material role colors: wall, beam, roof, trim, door.
1628
+
1629
+ | Field | Type | Default | Range / options | Portable | Description |
1630
+ |---|---|---|---|---|---|
1631
+ | `wall` | color | `[0.82, 0.74, 0.6]` (#d1bd99) | — | Yes | Plaster / plank wall color. |
1632
+ | `beam` | color | `[0.32, 0.22, 0.14]` (#523824) | — | Yes | Timber framing color. |
1633
+ | `roof` | color | `[0.42, 0.3, 0.24]` (#6b4d3d) | — | Yes | Roof surface color. |
1634
+ | `trim` | color | `[0.45, 0.46, 0.44]` (#737570) | — | Yes | Stone base, chimney, and sills. |
1635
+ | `door` | color | `[0.5, 0.3, 0.16]` (#804d29) | — | Yes | Door color. |
1636
+ | `variation` | number | `0.12` | 0 – 0.4 | Yes | Per-vertex color drift. |
1637
+
1638
+ ## Procedural textures
1639
+
1640
+ Module: `toonlab/texgen` — 10 groups, 166 fields.
1641
+
1642
+ Grouped settings consumed by `evaluateTextureMaps(settings)` and serialized in texture recipes (`createTextureSettings`).
1643
+
1644
+ ### Procedural textures: Seed
1645
+
1646
+ Deterministic seed shared by every layer.
1647
+
1648
+ | Field | Type | Default | Range / options | Portable | Description |
1649
+ |---|---|---|---|---|---|
1650
+ | `seed` | number | `1337` | 0 – 99999 | Yes | Deterministic seed — every value is a different texture with the same recipe. |
1651
+
1652
+ ### Procedural textures: Base pattern
1653
+
1654
+ The primary structure: pattern, frequency, warp.
1655
+
1656
+ | Field | Type | Default | Range / options | Portable | Description |
1657
+ |---|---|---|---|---|---|
1658
+ | `generator` | select | `'fbm'` | `fbm` \| `billow` \| `ridged` \| `turbulence` \| `value` \| `perlin` \| `worley` \| `worleyF2` \| `cells` \| `cracks` \| `caustics` \| `speckle` \| `bricks` \| `tiles` \| `hex` \| `checker` \| `grid` \| `stripes` \| `chevron` \| `weave` \| `basketWeave` \| `scales` \| `dots` \| `marble` \| `woodGrain` \| `flat` | Yes | Primary structure of the material: this drives height, color banding, and pattern cells. |
1659
+ | `contrast` | number | `0` | -1 – 1 | Yes | Sharpens (+) or flattens (-) the base pattern. |
1660
+ | `bias` | number | `0` | -0.5 – 0.5 | Yes | Shifts the whole pattern up or down the ramp. |
1661
+ | `invert` | boolean | `false` | — | Yes | Flips the base pattern (crevices become ridges). |
1662
+ | `scale` | number | `6` | 1 – 64 | Yes | Feature cells across the tile. Higher = finer features. |
1663
+ | `rotate90` | boolean | `false` | — | Yes | Turns the pattern a quarter turn (planks run vertical, strata run horizontal). Tiling stays exact. |
1664
+ | `detail` | number | `4` | 1 – 8 | Yes | Fractal octaves layered into the noise. |
1665
+ | `detailGain` | number | `0.5` | 0.15 – 0.85 | Yes | How much each finer octave contributes. |
1666
+ | `stretchX` | number | `1` | 0.25 – 8 | Yes | Horizontal anisotropy (brushed metal, wood planks). |
1667
+ | `stretchY` | number | `1` | 0.25 – 8 | Yes | Vertical anisotropy (drips, strata, fibers). |
1668
+ | `warp` | number | `0` | 0 – 1 | Yes | Domain warp: melts straight features into organic meanders. |
1669
+ | `warpScale` | number | `3` | 1 – 32 | Yes | Frequency of the warp field. |
1670
+ | `columns` | number | `4` | 1 – 64 | Yes | Pattern cells across the tile. |
1671
+ | `rows` | number | `8` | 1 – 64 | Yes | Pattern cells down the tile. |
1672
+ | `gap` | number | `0.06` | 0 – 0.4 | Yes | Mortar/groove width between pattern cells. |
1673
+ | `bevel` | number | `0.12` | 0 – 0.5 | Yes | Edge ramp from groove up to the cell face. |
1674
+ | `cellJitter` | number | `1` | 0 – 1 | Yes | Randomizes cell centers: 0 = perfect grid, 1 = organic. |
1675
+ | `cellVariation` | number | `0.35` | 0 – 1 | Yes | Per-cell brightness variance (brick tint shifts). |
1676
+ | `edgeWidth` | number | `0.12` | 0.01 – 0.6 | Yes | Width of cracks / caustic filaments / speckle chips. |
1677
+ | `rings` | number | `6` | 1 – 32 | Yes | Ring or vein count across the tile (wood, marble). |
1678
+ | `grain` | number | `0.5` | 0 – 1 | Yes | Streak amount (wood) or vein sharpness (marble). |
1679
+
1680
+ ### Procedural textures: Detail layer A
1681
+
1682
+ Mid-frequency relief blended over the base.
1683
+
1684
+ | Field | Type | Default | Range / options | Portable | Description |
1685
+ |---|---|---|---|---|---|
1686
+ | `enabled` | boolean | `true` | — | Yes | Toggles this detail layer. |
1687
+ | `generator` | select | `'fbm'` | `fbm` \| `billow` \| `ridged` \| `turbulence` \| `value` \| `perlin` \| `worley` \| `worleyF2` \| `cells` \| `cracks` \| `caustics` \| `speckle` \| `bricks` \| `tiles` \| `hex` \| `checker` \| `grid` \| `stripes` \| `chevron` \| `weave` \| `basketWeave` \| `scales` \| `dots` \| `marble` \| `woodGrain` \| `flat` | Yes | Pattern blended over the base height. |
1688
+ | `blend` | select | `'overlay'` | `overlay` \| `add` \| `multiply` \| `screen` \| `min` \| `max` \| `mix` | Yes | How this layer combines with the height underneath. |
1689
+ | `amount` | number | `0.35` | 0 – 1 | Yes | Blend strength of this layer. |
1690
+ | `invert` | boolean | `false` | — | Yes | Flips the layer before blending. |
1691
+ | `contrast` | number | `0` | -1 – 1 | Yes | Sharpens (+) or flattens (-) the layer. |
1692
+ | `scale` | number | `18` | 1 – 64 | Yes | Feature cells across the tile. Higher = finer features. |
1693
+ | `rotate90` | boolean | `false` | — | Yes | Turns the pattern a quarter turn (planks run vertical, strata run horizontal). Tiling stays exact. |
1694
+ | `detail` | number | `4` | 1 – 8 | Yes | Fractal octaves layered into the noise. |
1695
+ | `detailGain` | number | `0.5` | 0.15 – 0.85 | Yes | How much each finer octave contributes. |
1696
+ | `stretchX` | number | `1` | 0.25 – 8 | Yes | Horizontal anisotropy (brushed metal, wood planks). |
1697
+ | `stretchY` | number | `1` | 0.25 – 8 | Yes | Vertical anisotropy (drips, strata, fibers). |
1698
+ | `warp` | number | `0` | 0 – 1 | Yes | Domain warp: melts straight features into organic meanders. |
1699
+ | `warpScale` | number | `3` | 1 – 32 | Yes | Frequency of the warp field. |
1700
+ | `columns` | number | `4` | 1 – 64 | Yes | Pattern cells across the tile. |
1701
+ | `rows` | number | `8` | 1 – 64 | Yes | Pattern cells down the tile. |
1702
+ | `gap` | number | `0.06` | 0 – 0.4 | Yes | Mortar/groove width between pattern cells. |
1703
+ | `bevel` | number | `0.12` | 0 – 0.5 | Yes | Edge ramp from groove up to the cell face. |
1704
+ | `cellJitter` | number | `1` | 0 – 1 | Yes | Randomizes cell centers: 0 = perfect grid, 1 = organic. |
1705
+ | `cellVariation` | number | `0.35` | 0 – 1 | Yes | Per-cell brightness variance (brick tint shifts). |
1706
+ | `edgeWidth` | number | `0.12` | 0.01 – 0.6 | Yes | Width of cracks / caustic filaments / speckle chips. |
1707
+ | `rings` | number | `6` | 1 – 32 | Yes | Ring or vein count across the tile (wood, marble). |
1708
+ | `grain` | number | `0.5` | 0 – 1 | Yes | Streak amount (wood) or vein sharpness (marble). |
1709
+
1710
+ ### Procedural textures: Detail layer B
1711
+
1712
+ Fine grain, pores, chips.
1713
+
1714
+ | Field | Type | Default | Range / options | Portable | Description |
1715
+ |---|---|---|---|---|---|
1716
+ | `enabled` | boolean | `false` | — | Yes | Toggles this detail layer. |
1717
+ | `generator` | select | `'speckle'` | `fbm` \| `billow` \| `ridged` \| `turbulence` \| `value` \| `perlin` \| `worley` \| `worleyF2` \| `cells` \| `cracks` \| `caustics` \| `speckle` \| `bricks` \| `tiles` \| `hex` \| `checker` \| `grid` \| `stripes` \| `chevron` \| `weave` \| `basketWeave` \| `scales` \| `dots` \| `marble` \| `woodGrain` \| `flat` | Yes | Pattern blended over the base height. |
1718
+ | `blend` | select | `'add'` | `overlay` \| `add` \| `multiply` \| `screen` \| `min` \| `max` \| `mix` | Yes | How this layer combines with the height underneath. |
1719
+ | `amount` | number | `0.2` | 0 – 1 | Yes | Blend strength of this layer. |
1720
+ | `invert` | boolean | `false` | — | Yes | Flips the layer before blending. |
1721
+ | `contrast` | number | `0` | -1 – 1 | Yes | Sharpens (+) or flattens (-) the layer. |
1722
+ | `scale` | number | `24` | 1 – 64 | Yes | Feature cells across the tile. Higher = finer features. |
1723
+ | `rotate90` | boolean | `false` | — | Yes | Turns the pattern a quarter turn (planks run vertical, strata run horizontal). Tiling stays exact. |
1724
+ | `detail` | number | `4` | 1 – 8 | Yes | Fractal octaves layered into the noise. |
1725
+ | `detailGain` | number | `0.5` | 0.15 – 0.85 | Yes | How much each finer octave contributes. |
1726
+ | `stretchX` | number | `1` | 0.25 – 8 | Yes | Horizontal anisotropy (brushed metal, wood planks). |
1727
+ | `stretchY` | number | `1` | 0.25 – 8 | Yes | Vertical anisotropy (drips, strata, fibers). |
1728
+ | `warp` | number | `0` | 0 – 1 | Yes | Domain warp: melts straight features into organic meanders. |
1729
+ | `warpScale` | number | `3` | 1 – 32 | Yes | Frequency of the warp field. |
1730
+ | `columns` | number | `4` | 1 – 64 | Yes | Pattern cells across the tile. |
1731
+ | `rows` | number | `8` | 1 – 64 | Yes | Pattern cells down the tile. |
1732
+ | `gap` | number | `0.06` | 0 – 0.4 | Yes | Mortar/groove width between pattern cells. |
1733
+ | `bevel` | number | `0.12` | 0 – 0.5 | Yes | Edge ramp from groove up to the cell face. |
1734
+ | `cellJitter` | number | `1` | 0 – 1 | Yes | Randomizes cell centers: 0 = perfect grid, 1 = organic. |
1735
+ | `cellVariation` | number | `0.35` | 0 – 1 | Yes | Per-cell brightness variance (brick tint shifts). |
1736
+ | `edgeWidth` | number | `0.12` | 0.01 – 0.6 | Yes | Width of cracks / caustic filaments / speckle chips. |
1737
+ | `rings` | number | `6` | 1 – 32 | Yes | Ring or vein count across the tile (wood, marble). |
1738
+ | `grain` | number | `0.5` | 0 – 1 | Yes | Streak amount (wood) or vein sharpness (marble). |
1739
+
1740
+ ### Procedural textures: Color
1741
+
1742
+ Five-stop height ramp, painterly jitter, cavity & sheen, final grade.
1743
+
1744
+ | Field | Type | Default | Range / options | Portable | Description |
1745
+ |---|---|---|---|---|---|
1746
+ | `color0` | color | `[0.16, 0.14, 0.13]` (#292421) | — | Yes | Ramp stop at the darkest crevices. |
1747
+ | `color1` | color | `[0.35, 0.31, 0.28]` (#594f47) | — | Yes | Ramp stop between crevices and the mid tone. |
1748
+ | `color2` | color | `[0.55, 0.5, 0.45]` (#8c8073) | — | Yes | Ramp stop for the average surface. |
1749
+ | `color3` | color | `[0.72, 0.68, 0.62]` (#b8ad9e) | — | Yes | Ramp stop approaching the ridges. |
1750
+ | `color4` | color | `[0.88, 0.85, 0.79]` (#e0d9c9) | — | Yes | Ramp stop at the highest ridges. |
1751
+ | `pos1` | number | `0.25` | 0.02 – 0.98 | Yes | Where the Low stop sits on the height ramp. |
1752
+ | `pos2` | number | `0.5` | 0.02 – 0.98 | Yes | Where the Mid stop sits on the height ramp. |
1753
+ | `pos3` | number | `0.75` | 0.02 – 0.98 | Yes | Where the High stop sits on the height ramp. |
1754
+ | `rampSmooth` | number | `1` | 0 – 1 | Yes | 1 = smooth gradient, 0 = hard cel bands between the five stops. |
1755
+ | `jitterHue` | number | `0.04` | 0 – 0.5 | Yes | Painterly hue drift across the surface. |
1756
+ | `jitterValue` | number | `0.08` | 0 – 0.5 | Yes | Painterly brightness drift across the surface. |
1757
+ | `jitterScale` | number | `24` | 2 – 64 | Yes | Frequency of the painterly drift. |
1758
+ | `jitterCells` | boolean | `false` | — | Yes | Applies drift per pattern cell (per brick / plank / scale) instead of smoothly. |
1759
+ | `cavity` | number | `0.35` | 0 – 1 | Yes | Darkens crevices toward the cavity tint — the hand-painted occlusion read. |
1760
+ | `cavityTint` | color | `[0.13, 0.09, 0.08]` (#211714) | — | Yes | Color the crevices sink toward. |
1761
+ | `sheen` | number | `0.18` | 0 – 1 | Yes | Screens the sheen tint over ridges and edges — worn highlight. |
1762
+ | `sheenTint` | color | `[1, 0.97, 0.88]` (#fff7e0) | — | Yes | Color of the ridge highlight. |
1763
+ | `hueShift` | number | `0` | -0.5 – 0.5 | Yes | Rotates the final palette hue. |
1764
+ | `saturation` | number | `1` | 0 – 2 | Yes | Final color saturation. |
1765
+ | `brightness` | number | `1` | 0.25 – 1.75 | Yes | Final brightness multiplier. |
1766
+ | `contrast` | number | `0` | -1 – 1 | Yes | Final color contrast. |
1767
+ | `gamma` | number | `1` | 0.4 – 2.5 | Yes | Final gamma on the albedo. |
1768
+
1769
+ ### Procedural textures: Wear & tear
1770
+
1771
+ One-knob damage and dirt macros layered over everything.
1772
+
1773
+ | Field | Type | Default | Range / options | Portable | Description |
1774
+ |---|---|---|---|---|---|
1775
+ | `damage` | number | `0` | 0 – 1 | Yes | Universal wear macro: carves seeded scratches and chips into the surface and roughens them. One knob, many parameters. |
1776
+ | `dirt` | number | `0` | 0 – 1 | Yes | Grime macro: darkens crevices with pooled dirt and raises their roughness, independent of the overlay slots. |
1777
+
1778
+ ### Procedural textures: Overlay A
1779
+
1780
+ Masked colored overlay: moss, rust, dirt, snow, lichen…
1781
+
1782
+ | Field | Type | Default | Range / options | Portable | Description |
1783
+ |---|---|---|---|---|---|
1784
+ | `enabled` | boolean | `false` | — | Yes | Toggles this overlay. |
1785
+ | `generator` | select | `'fbm'` | `fbm` \| `billow` \| `ridged` \| `turbulence` \| `value` \| `perlin` \| `worley` \| `worleyF2` \| `cells` \| `cracks` \| `caustics` \| `speckle` \| `bricks` \| `tiles` \| `hex` \| `checker` \| `grid` \| `stripes` \| `chevron` \| `weave` \| `basketWeave` \| `scales` \| `dots` \| `marble` \| `woodGrain` \| `flat` | Yes | Mask pattern deciding where the overlay lands. |
1786
+ | `color` | color | `[0.35, 0.48, 0.22]` (#597a38) | — | Yes | Overlay color where the mask is strongest. |
1787
+ | `colorB` | color | `[0.52, 0.62, 0.28]` (#859e47) | — | Yes | Secondary overlay color for variation within the mask. |
1788
+ | `coverage` | number | `0.35` | 0 – 1 | Yes | How much of the surface the overlay claims. |
1789
+ | `softness` | number | `0.18` | 0.01 – 0.6 | Yes | Feather width of the overlay border. |
1790
+ | `creviceBias` | number | `0.5` | -1 – 1 | Yes | +1 pools into crevices (moss, grime); -1 caps ridges and peaks (snow, wear). |
1791
+ | `blend` | select | `'normal'` | `normal` \| `multiply` \| `overlay` \| `screen` | Yes | How the overlay color mixes into the albedo. |
1792
+ | `roughnessShift` | number | `0.25` | -1 – 1 | Yes | Overlay area gets rougher (+) or glossier (-). |
1793
+ | `heightShift` | number | `0.05` | -0.5 – 0.5 | Yes | Overlay area rises (+) or sinks (-) in the height map. |
1794
+ | `metalShift` | number | `0` | -1 – 1 | Yes | Overlay area gains (+) or loses (-) metalness — rust strips metal. |
1795
+ | `contrast` | number | `0` | -1 – 1 | Yes | Sharpens (+) or flattens (-) the mask pattern. |
1796
+ | `invert` | boolean | `false` | — | Yes | Flips the mask before thresholding. |
1797
+ | `scale` | number | `5` | 1 – 64 | Yes | Feature cells across the tile. Higher = finer features. |
1798
+ | `rotate90` | boolean | `false` | — | Yes | Turns the pattern a quarter turn (planks run vertical, strata run horizontal). Tiling stays exact. |
1799
+ | `detail` | number | `4` | 1 – 8 | Yes | Fractal octaves layered into the noise. |
1800
+ | `detailGain` | number | `0.5` | 0.15 – 0.85 | Yes | How much each finer octave contributes. |
1801
+ | `stretchX` | number | `1` | 0.25 – 8 | Yes | Horizontal anisotropy (brushed metal, wood planks). |
1802
+ | `stretchY` | number | `1` | 0.25 – 8 | Yes | Vertical anisotropy (drips, strata, fibers). |
1803
+ | `warp` | number | `0.3` | 0 – 1 | Yes | Domain warp: melts straight features into organic meanders. |
1804
+ | `warpScale` | number | `3` | 1 – 32 | Yes | Frequency of the warp field. |
1805
+ | `columns` | number | `4` | 1 – 64 | Yes | Pattern cells across the tile. |
1806
+ | `rows` | number | `8` | 1 – 64 | Yes | Pattern cells down the tile. |
1807
+ | `gap` | number | `0.06` | 0 – 0.4 | Yes | Mortar/groove width between pattern cells. |
1808
+ | `bevel` | number | `0.12` | 0 – 0.5 | Yes | Edge ramp from groove up to the cell face. |
1809
+ | `cellJitter` | number | `1` | 0 – 1 | Yes | Randomizes cell centers: 0 = perfect grid, 1 = organic. |
1810
+ | `cellVariation` | number | `0.35` | 0 – 1 | Yes | Per-cell brightness variance (brick tint shifts). |
1811
+ | `edgeWidth` | number | `0.12` | 0.01 – 0.6 | Yes | Width of cracks / caustic filaments / speckle chips. |
1812
+ | `rings` | number | `6` | 1 – 32 | Yes | Ring or vein count across the tile (wood, marble). |
1813
+ | `grain` | number | `0.5` | 0 – 1 | Yes | Streak amount (wood) or vein sharpness (marble). |
1814
+
1815
+ ### Procedural textures: Overlay B
1816
+
1817
+ Second masked overlay: grime, stains, scorch, drips…
1818
+
1819
+ | Field | Type | Default | Range / options | Portable | Description |
1820
+ |---|---|---|---|---|---|
1821
+ | `enabled` | boolean | `false` | — | Yes | Toggles this overlay. |
1822
+ | `generator` | select | `'turbulence'` | `fbm` \| `billow` \| `ridged` \| `turbulence` \| `value` \| `perlin` \| `worley` \| `worleyF2` \| `cells` \| `cracks` \| `caustics` \| `speckle` \| `bricks` \| `tiles` \| `hex` \| `checker` \| `grid` \| `stripes` \| `chevron` \| `weave` \| `basketWeave` \| `scales` \| `dots` \| `marble` \| `woodGrain` \| `flat` | Yes | Mask pattern deciding where the overlay lands. |
1823
+ | `color` | color | `[0.16, 0.12, 0.09]` (#291f17) | — | Yes | Overlay color where the mask is strongest. |
1824
+ | `colorB` | color | `[0.3, 0.24, 0.18]` (#4d3d2e) | — | Yes | Secondary overlay color for variation within the mask. |
1825
+ | `coverage` | number | `0.3` | 0 – 1 | Yes | How much of the surface the overlay claims. |
1826
+ | `softness` | number | `0.22` | 0.01 – 0.6 | Yes | Feather width of the overlay border. |
1827
+ | `creviceBias` | number | `0.6` | -1 – 1 | Yes | +1 pools into crevices (moss, grime); -1 caps ridges and peaks (snow, wear). |
1828
+ | `blend` | select | `'multiply'` | `normal` \| `multiply` \| `overlay` \| `screen` | Yes | How the overlay color mixes into the albedo. |
1829
+ | `roughnessShift` | number | `0.2` | -1 – 1 | Yes | Overlay area gets rougher (+) or glossier (-). |
1830
+ | `heightShift` | number | `-0.03` | -0.5 – 0.5 | Yes | Overlay area rises (+) or sinks (-) in the height map. |
1831
+ | `metalShift` | number | `0` | -1 – 1 | Yes | Overlay area gains (+) or loses (-) metalness — rust strips metal. |
1832
+ | `contrast` | number | `0` | -1 – 1 | Yes | Sharpens (+) or flattens (-) the mask pattern. |
1833
+ | `invert` | boolean | `false` | — | Yes | Flips the mask before thresholding. |
1834
+ | `scale` | number | `4` | 1 – 64 | Yes | Feature cells across the tile. Higher = finer features. |
1835
+ | `rotate90` | boolean | `false` | — | Yes | Turns the pattern a quarter turn (planks run vertical, strata run horizontal). Tiling stays exact. |
1836
+ | `detail` | number | `4` | 1 – 8 | Yes | Fractal octaves layered into the noise. |
1837
+ | `detailGain` | number | `0.5` | 0.15 – 0.85 | Yes | How much each finer octave contributes. |
1838
+ | `stretchX` | number | `1` | 0.25 – 8 | Yes | Horizontal anisotropy (brushed metal, wood planks). |
1839
+ | `stretchY` | number | `1` | 0.25 – 8 | Yes | Vertical anisotropy (drips, strata, fibers). |
1840
+ | `warp` | number | `0.25` | 0 – 1 | Yes | Domain warp: melts straight features into organic meanders. |
1841
+ | `warpScale` | number | `3` | 1 – 32 | Yes | Frequency of the warp field. |
1842
+ | `columns` | number | `4` | 1 – 64 | Yes | Pattern cells across the tile. |
1843
+ | `rows` | number | `8` | 1 – 64 | Yes | Pattern cells down the tile. |
1844
+ | `gap` | number | `0.06` | 0 – 0.4 | Yes | Mortar/groove width between pattern cells. |
1845
+ | `bevel` | number | `0.12` | 0 – 0.5 | Yes | Edge ramp from groove up to the cell face. |
1846
+ | `cellJitter` | number | `1` | 0 – 1 | Yes | Randomizes cell centers: 0 = perfect grid, 1 = organic. |
1847
+ | `cellVariation` | number | `0.35` | 0 – 1 | Yes | Per-cell brightness variance (brick tint shifts). |
1848
+ | `edgeWidth` | number | `0.12` | 0.01 – 0.6 | Yes | Width of cracks / caustic filaments / speckle chips. |
1849
+ | `rings` | number | `6` | 1 – 32 | Yes | Ring or vein count across the tile (wood, marble). |
1850
+ | `grain` | number | `0.5` | 0 – 1 | Yes | Streak amount (wood) or vein sharpness (marble). |
1851
+
1852
+ ### Procedural textures: Surface
1853
+
1854
+ PBR response: relief, occlusion, roughness, metalness.
1855
+
1856
+ | Field | Type | Default | Range / options | Portable | Description |
1857
+ |---|---|---|---|---|---|
1858
+ | `heightScale` | number | `0.5` | 0 – 1 | Yes | Overall relief strength — feeds the normal map, AO, and displacement. |
1859
+ | `normalStrength` | number | `1` | 0 – 3 | Yes | Extra multiplier on the derived normal map. |
1860
+ | `invertHeight` | boolean | `false` | — | Yes | Flips the height map (grooves become ridges). |
1861
+ | `aoStrength` | number | `0.55` | 0 – 1 | Yes | Baked ambient occlusion depth in the crevices. |
1862
+ | `roughness` | number | `0.75` | 0 – 1 | Yes | Base roughness: 0 = mirror gloss, 1 = fully matte. |
1863
+ | `roughnessContrast` | number | `0.35` | -1 – 1 | Yes | +1 = crevices rough & ridges polished; -1 = the reverse. |
1864
+ | `metalness` | number | `0` | 0 – 1 | Yes | Base metalness of the material. |
1865
+
1866
+ ### Procedural textures: Glow
1867
+
1868
+ Optional emissive map.
1869
+
1870
+ | Field | Type | Default | Range / options | Portable | Description |
1871
+ |---|---|---|---|---|---|
1872
+ | `enabled` | boolean | `false` | — | Yes | Adds a glow map (lava cracks, sci-fi circuits, embers). |
1873
+ | `color` | color | `[1, 0.45, 0.12]` (#ff731f) | — | Yes | Emissive color. |
1874
+ | `intensity` | number | `2` | 0 – 8 | Yes | Emissive brightness (preview material intensity). |
1875
+ | `source` | select | `'crevices'` | `crevices` \| `peaks` \| `band` \| `accentA` \| `accentB` \| `everywhere` | Yes | Which part of the surface glows. |
1876
+ | `threshold` | number | `0.5` | 0 – 1 | Yes | Height level the glow hugs (band / crevices / peaks). |
1877
+ | `width` | number | `0.25` | 0.02 – 0.8 | Yes | Thickness of the glowing region. |
1878
+ | `softness` | number | `0.2` | 0.01 – 0.6 | Yes | Feather on the glow border. |