@luma.gl/shaders 0.0.0-stage → 10.0.0-alpha.5

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 (692) hide show
  1. package/README.md +25 -2
  2. package/dist/dist.dev.js +19686 -0
  3. package/dist/dist.min.js +12180 -0
  4. package/dist/glsl.cjs +33 -0
  5. package/dist/glsl.cjs.map +6 -0
  6. package/dist/glsl.d.ts +6 -0
  7. package/dist/glsl.d.ts.map +1 -0
  8. package/dist/glsl.js +7 -0
  9. package/dist/glsl.js.map +1 -0
  10. package/dist/index.cjs +243 -0
  11. package/dist/index.cjs.map +6 -0
  12. package/dist/index.d.ts +91 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +65 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/lib/color/normalize-byte-colors.cjs +50 -0
  17. package/dist/lib/color/normalize-byte-colors.d.ts +23 -0
  18. package/dist/lib/color/normalize-byte-colors.d.ts.map +1 -0
  19. package/dist/lib/color/normalize-byte-colors.js +42 -0
  20. package/dist/lib/color/normalize-byte-colors.js.map +1 -0
  21. package/dist/lib/filters/prop-types.cjs +90 -0
  22. package/dist/lib/filters/prop-types.d.ts +44 -0
  23. package/dist/lib/filters/prop-types.d.ts.map +1 -0
  24. package/dist/lib/filters/prop-types.js +96 -0
  25. package/dist/lib/filters/prop-types.js.map +1 -0
  26. package/dist/lib/glsl-shader-assembler.cjs +50 -0
  27. package/dist/lib/glsl-shader-assembler.d.ts +19 -0
  28. package/dist/lib/glsl-shader-assembler.d.ts.map +1 -0
  29. package/dist/lib/glsl-shader-assembler.js +29 -0
  30. package/dist/lib/glsl-shader-assembler.js.map +1 -0
  31. package/dist/lib/glsl-utils/get-shader-info.cjs +52 -0
  32. package/dist/lib/glsl-utils/get-shader-info.d.ts +9 -0
  33. package/dist/lib/glsl-utils/get-shader-info.d.ts.map +1 -0
  34. package/dist/lib/glsl-utils/get-shader-info.js +33 -0
  35. package/dist/lib/glsl-utils/get-shader-info.js.map +1 -0
  36. package/dist/lib/glsl-utils/shader-utils.cjs +126 -0
  37. package/dist/lib/glsl-utils/shader-utils.d.ts +23 -0
  38. package/dist/lib/glsl-utils/shader-utils.d.ts.map +1 -0
  39. package/dist/lib/glsl-utils/shader-utils.js +92 -0
  40. package/dist/lib/glsl-utils/shader-utils.js.map +1 -0
  41. package/dist/lib/preprocessor/preprocessor.cjs +107 -0
  42. package/dist/lib/preprocessor/preprocessor.d.ts +15 -0
  43. package/dist/lib/preprocessor/preprocessor.d.ts.map +1 -0
  44. package/dist/lib/preprocessor/preprocessor.js +99 -0
  45. package/dist/lib/preprocessor/preprocessor.js.map +1 -0
  46. package/dist/lib/shader-assembler-base.cjs +133 -0
  47. package/dist/lib/shader-assembler-base.d.ts +52 -0
  48. package/dist/lib/shader-assembler-base.d.ts.map +1 -0
  49. package/dist/lib/shader-assembler-base.js +128 -0
  50. package/dist/lib/shader-assembler-base.js.map +1 -0
  51. package/dist/lib/shader-assembler.cjs +33 -0
  52. package/dist/lib/shader-assembler.d.ts +4 -0
  53. package/dist/lib/shader-assembler.d.ts.map +1 -0
  54. package/dist/lib/shader-assembler.js +7 -0
  55. package/dist/lib/shader-assembler.js.map +1 -0
  56. package/dist/lib/shader-assembly/assemble-glsl-shaders.cjs +200 -0
  57. package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts +69 -0
  58. package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts.map +1 -0
  59. package/dist/lib/shader-assembly/assemble-glsl-shaders.js +221 -0
  60. package/dist/lib/shader-assembly/assemble-glsl-shaders.js.map +1 -0
  61. package/dist/lib/shader-assembly/assemble-shaders.cjs +42 -0
  62. package/dist/lib/shader-assembly/assemble-shaders.d.ts +10 -0
  63. package/dist/lib/shader-assembly/assemble-shaders.d.ts.map +1 -0
  64. package/dist/lib/shader-assembly/assemble-shaders.js +10 -0
  65. package/dist/lib/shader-assembly/assemble-shaders.js.map +1 -0
  66. package/dist/lib/shader-assembly/assemble-wgsl-shaders.cjs +501 -0
  67. package/dist/lib/shader-assembly/assemble-wgsl-shaders.d.ts +71 -0
  68. package/dist/lib/shader-assembly/assemble-wgsl-shaders.d.ts.map +1 -0
  69. package/dist/lib/shader-assembly/assemble-wgsl-shaders.js +473 -0
  70. package/dist/lib/shader-assembly/assemble-wgsl-shaders.js.map +1 -0
  71. package/dist/lib/shader-assembly/platform-defines.cjs +79 -0
  72. package/dist/lib/shader-assembly/platform-defines.d.ts +4 -0
  73. package/dist/lib/shader-assembly/platform-defines.d.ts.map +1 -0
  74. package/dist/lib/shader-assembly/platform-defines.js +52 -0
  75. package/dist/lib/shader-assembly/platform-defines.js.map +1 -0
  76. package/dist/lib/shader-assembly/platform-info.cjs +15 -0
  77. package/dist/lib/shader-assembly/platform-info.d.ts +20 -0
  78. package/dist/lib/shader-assembly/platform-info.d.ts.map +1 -0
  79. package/dist/lib/shader-assembly/platform-info.js +5 -0
  80. package/dist/lib/shader-assembly/platform-info.js.map +1 -0
  81. package/dist/lib/shader-assembly/shader-assembly-shared.cjs +96 -0
  82. package/dist/lib/shader-assembly/shader-assembly-shared.d.ts +16 -0
  83. package/dist/lib/shader-assembly/shader-assembly-shared.d.ts.map +1 -0
  84. package/dist/lib/shader-assembly/shader-assembly-shared.js +79 -0
  85. package/dist/lib/shader-assembly/shader-assembly-shared.js.map +1 -0
  86. package/dist/lib/shader-assembly/shader-assembly-types.cjs +15 -0
  87. package/dist/lib/shader-assembly/shader-assembly-types.d.ts +128 -0
  88. package/dist/lib/shader-assembly/shader-assembly-types.d.ts.map +1 -0
  89. package/dist/lib/shader-assembly/shader-assembly-types.js +5 -0
  90. package/dist/lib/shader-assembly/shader-assembly-types.js.map +1 -0
  91. package/dist/lib/shader-assembly/shader-hooks.cjs +103 -0
  92. package/dist/lib/shader-assembly/shader-hooks.d.ts +45 -0
  93. package/dist/lib/shader-assembly/shader-hooks.d.ts.map +1 -0
  94. package/dist/lib/shader-assembly/shader-hooks.js +84 -0
  95. package/dist/lib/shader-assembly/shader-hooks.js.map +1 -0
  96. package/dist/lib/shader-assembly/shader-injections.cjs +180 -0
  97. package/dist/lib/shader-assembly/shader-injections.d.ts +34 -0
  98. package/dist/lib/shader-assembly/shader-injections.d.ts.map +1 -0
  99. package/dist/lib/shader-assembly/shader-injections.js +183 -0
  100. package/dist/lib/shader-assembly/shader-injections.js.map +1 -0
  101. package/dist/lib/shader-assembly/shader-plugin-varyings.cjs +417 -0
  102. package/dist/lib/shader-assembly/shader-plugin-varyings.d.ts +15 -0
  103. package/dist/lib/shader-assembly/shader-plugin-varyings.d.ts.map +1 -0
  104. package/dist/lib/shader-assembly/shader-plugin-varyings.js +412 -0
  105. package/dist/lib/shader-assembly/shader-plugin-varyings.js.map +1 -0
  106. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.cjs +254 -0
  107. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.d.ts +12 -0
  108. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.d.ts.map +1 -0
  109. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.js +237 -0
  110. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.js.map +1 -0
  111. package/dist/lib/shader-assembly/wgsl-binding-debug.cjs +166 -0
  112. package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts +37 -0
  113. package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts.map +1 -0
  114. package/dist/lib/shader-assembly/wgsl-binding-debug.js +144 -0
  115. package/dist/lib/shader-assembly/wgsl-binding-debug.js.map +1 -0
  116. package/dist/lib/shader-assembly/wgsl-binding-scan.cjs +184 -0
  117. package/dist/lib/shader-assembly/wgsl-binding-scan.d.ts +19 -0
  118. package/dist/lib/shader-assembly/wgsl-binding-scan.d.ts.map +1 -0
  119. package/dist/lib/shader-assembly/wgsl-binding-scan.js +151 -0
  120. package/dist/lib/shader-assembly/wgsl-binding-scan.js.map +1 -0
  121. package/dist/lib/shader-assembly/wgsl-interface-scan.cjs +502 -0
  122. package/dist/lib/shader-assembly/wgsl-interface-scan.d.ts +14 -0
  123. package/dist/lib/shader-assembly/wgsl-interface-scan.d.ts.map +1 -0
  124. package/dist/lib/shader-assembly/wgsl-interface-scan.js +498 -0
  125. package/dist/lib/shader-assembly/wgsl-interface-scan.js.map +1 -0
  126. package/dist/lib/shader-generator/generate-shader.cjs +36 -0
  127. package/dist/lib/shader-generator/generate-shader.d.ts +8 -0
  128. package/dist/lib/shader-generator/generate-shader.d.ts.map +1 -0
  129. package/dist/lib/shader-generator/generate-shader.js +15 -0
  130. package/dist/lib/shader-generator/generate-shader.js.map +1 -0
  131. package/dist/lib/shader-generator/glsl/generate-glsl.cjs +94 -0
  132. package/dist/lib/shader-generator/glsl/generate-glsl.d.ts +7 -0
  133. package/dist/lib/shader-generator/glsl/generate-glsl.d.ts.map +1 -0
  134. package/dist/lib/shader-generator/glsl/generate-glsl.js +79 -0
  135. package/dist/lib/shader-generator/glsl/generate-glsl.js.map +1 -0
  136. package/dist/lib/shader-generator/utils/capitalize.cjs +29 -0
  137. package/dist/lib/shader-generator/utils/capitalize.d.ts +7 -0
  138. package/dist/lib/shader-generator/utils/capitalize.d.ts.map +1 -0
  139. package/dist/lib/shader-generator/utils/capitalize.js +12 -0
  140. package/dist/lib/shader-generator/utils/capitalize.js.map +1 -0
  141. package/dist/lib/shader-generator/wgsl/generate-wgsl.cjs +46 -0
  142. package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts +7 -0
  143. package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts.map +1 -0
  144. package/dist/lib/shader-generator/wgsl/generate-wgsl.js +23 -0
  145. package/dist/lib/shader-generator/wgsl/generate-wgsl.js.map +1 -0
  146. package/dist/lib/shader-module/composite-shader-pass.cjs +15 -0
  147. package/dist/lib/shader-module/composite-shader-pass.d.ts +41 -0
  148. package/dist/lib/shader-module/composite-shader-pass.d.ts.map +1 -0
  149. package/dist/lib/shader-module/composite-shader-pass.js +5 -0
  150. package/dist/lib/shader-module/composite-shader-pass.js.map +1 -0
  151. package/dist/lib/shader-module/shader-module-dependencies.cjs +83 -0
  152. package/dist/lib/shader-module/shader-module-dependencies.d.ts +39 -0
  153. package/dist/lib/shader-module/shader-module-dependencies.d.ts.map +1 -0
  154. package/dist/lib/shader-module/shader-module-dependencies.js +103 -0
  155. package/dist/lib/shader-module/shader-module-dependencies.js.map +1 -0
  156. package/dist/lib/shader-module/shader-module-uniform-layout.cjs +224 -0
  157. package/dist/lib/shader-module/shader-module-uniform-layout.d.ts +91 -0
  158. package/dist/lib/shader-module/shader-module-uniform-layout.d.ts.map +1 -0
  159. package/dist/lib/shader-module/shader-module-uniform-layout.js +253 -0
  160. package/dist/lib/shader-module/shader-module-uniform-layout.js.map +1 -0
  161. package/dist/lib/shader-module/shader-module.cjs +105 -0
  162. package/dist/lib/shader-module/shader-module.d.ts +98 -0
  163. package/dist/lib/shader-module/shader-module.d.ts.map +1 -0
  164. package/dist/lib/shader-module/shader-module.js +104 -0
  165. package/dist/lib/shader-module/shader-module.js.map +1 -0
  166. package/dist/lib/shader-module/shader-pass.cjs +15 -0
  167. package/dist/lib/shader-module/shader-pass.d.ts +48 -0
  168. package/dist/lib/shader-module/shader-pass.d.ts.map +1 -0
  169. package/dist/lib/shader-module/shader-pass.js +5 -0
  170. package/dist/lib/shader-module/shader-pass.js.map +1 -0
  171. package/dist/lib/shader-plugin.cjs +117 -0
  172. package/dist/lib/shader-plugin.d.ts +68 -0
  173. package/dist/lib/shader-plugin.d.ts.map +1 -0
  174. package/dist/lib/shader-plugin.js +98 -0
  175. package/dist/lib/shader-plugin.js.map +1 -0
  176. package/dist/lib/shader-transpiler/shader-transpiler.cjs +15 -0
  177. package/dist/lib/shader-transpiler/shader-transpiler.d.ts +27 -0
  178. package/dist/lib/shader-transpiler/shader-transpiler.d.ts.map +1 -0
  179. package/dist/lib/shader-transpiler/shader-transpiler.js +5 -0
  180. package/dist/lib/shader-transpiler/shader-transpiler.js.map +1 -0
  181. package/dist/lib/shader-transpiler/transpile-glsl-shader.cjs +71 -0
  182. package/dist/lib/shader-transpiler/transpile-glsl-shader.d.ts +9 -0
  183. package/dist/lib/shader-transpiler/transpile-glsl-shader.d.ts.map +1 -0
  184. package/dist/lib/shader-transpiler/transpile-glsl-shader.js +69 -0
  185. package/dist/lib/shader-transpiler/transpile-glsl-shader.js.map +1 -0
  186. package/dist/lib/utils/assert.cjs +34 -0
  187. package/dist/lib/utils/assert.d.ts +2 -0
  188. package/dist/lib/utils/assert.d.ts.map +1 -0
  189. package/dist/lib/utils/assert.js +13 -0
  190. package/dist/lib/utils/assert.js.map +1 -0
  191. package/dist/lib/utils/uniform-types.cjs +15 -0
  192. package/dist/lib/utils/uniform-types.d.ts +18 -0
  193. package/dist/lib/utils/uniform-types.d.ts.map +1 -0
  194. package/dist/lib/utils/uniform-types.js +5 -0
  195. package/dist/lib/utils/uniform-types.js.map +1 -0
  196. package/dist/lib/wgsl-shader-assembler.cjs +99 -0
  197. package/dist/lib/wgsl-shader-assembler.d.ts +34 -0
  198. package/dist/lib/wgsl-shader-assembler.d.ts.map +1 -0
  199. package/dist/lib/wgsl-shader-assembler.js +84 -0
  200. package/dist/lib/wgsl-shader-assembler.js.map +1 -0
  201. package/dist/module-injectors.cjs +59 -0
  202. package/dist/module-injectors.d.ts +3 -0
  203. package/dist/module-injectors.d.ts.map +1 -0
  204. package/dist/module-injectors.js +31 -0
  205. package/dist/module-injectors.js.map +1 -0
  206. package/dist/modules/color/float-colors.cjs +275 -0
  207. package/dist/modules/color/float-colors.d.ts +132 -0
  208. package/dist/modules/color/float-colors.d.ts.map +1 -0
  209. package/dist/modules/color/float-colors.js +248 -0
  210. package/dist/modules/color/float-colors.js.map +1 -0
  211. package/dist/modules/engine/clip/clip.cjs +152 -0
  212. package/dist/modules/engine/clip/clip.d.ts +12 -0
  213. package/dist/modules/engine/clip/clip.d.ts.map +1 -0
  214. package/dist/modules/engine/clip/clip.js +129 -0
  215. package/dist/modules/engine/clip/clip.js.map +1 -0
  216. package/dist/modules/engine/filter/filter.cjs +111 -0
  217. package/dist/modules/engine/filter/filter.d.ts +12 -0
  218. package/dist/modules/engine/filter/filter.d.ts.map +1 -0
  219. package/dist/modules/engine/filter/filter.js +88 -0
  220. package/dist/modules/engine/filter/filter.js.map +1 -0
  221. package/dist/modules/engine/geometry/geometry.cjs +63 -0
  222. package/dist/modules/engine/geometry/geometry.d.ts +9 -0
  223. package/dist/modules/engine/geometry/geometry.d.ts.map +1 -0
  224. package/dist/modules/engine/geometry/geometry.js +42 -0
  225. package/dist/modules/engine/geometry/geometry.js.map +1 -0
  226. package/dist/modules/engine/gpu-animation/gpu-animation.cjs +255 -0
  227. package/dist/modules/engine/gpu-animation/gpu-animation.d.ts +34 -0
  228. package/dist/modules/engine/gpu-animation/gpu-animation.d.ts.map +1 -0
  229. package/dist/modules/engine/gpu-animation/gpu-animation.js +228 -0
  230. package/dist/modules/engine/gpu-animation/gpu-animation.js.map +1 -0
  231. package/dist/modules/engine/picking/picking.cjs +210 -0
  232. package/dist/modules/engine/picking/picking.d.ts +77 -0
  233. package/dist/modules/engine/picking/picking.d.ts.map +1 -0
  234. package/dist/modules/engine/picking/picking.js +198 -0
  235. package/dist/modules/engine/picking/picking.js.map +1 -0
  236. package/dist/modules/engine/project/project.cjs +138 -0
  237. package/dist/modules/engine/project/project.d.ts +39 -0
  238. package/dist/modules/engine/project/project.d.ts.map +1 -0
  239. package/dist/modules/engine/project/project.js +129 -0
  240. package/dist/modules/engine/project/project.js.map +1 -0
  241. package/dist/modules/engine/skin/skin.cjs +212 -0
  242. package/dist/modules/engine/skin/skin.d.ts +52 -0
  243. package/dist/modules/engine/skin/skin.d.ts.map +1 -0
  244. package/dist/modules/engine/skin/skin.js +179 -0
  245. package/dist/modules/engine/skin/skin.js.map +1 -0
  246. package/dist/modules/engine/transform/transform.cjs +72 -0
  247. package/dist/modules/engine/transform/transform.d.ts +6 -0
  248. package/dist/modules/engine/transform/transform.d.ts.map +1 -0
  249. package/dist/modules/engine/transform/transform.js +49 -0
  250. package/dist/modules/engine/transform/transform.js.map +1 -0
  251. package/dist/modules/geometry/path-dash/path-dash.cjs +93 -0
  252. package/dist/modules/geometry/path-dash/path-dash.d.ts +10 -0
  253. package/dist/modules/geometry/path-dash/path-dash.d.ts.map +1 -0
  254. package/dist/modules/geometry/path-dash/path-dash.js +66 -0
  255. package/dist/modules/geometry/path-dash/path-dash.js.map +1 -0
  256. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.cjs +117 -0
  257. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.d.ts +3 -0
  258. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.d.ts.map +1 -0
  259. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.js +87 -0
  260. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.js.map +1 -0
  261. package/dist/modules/geometry/pattern-fill/pattern-fill.cjs +64 -0
  262. package/dist/modules/geometry/pattern-fill/pattern-fill.d.ts +14 -0
  263. package/dist/modules/geometry/pattern-fill/pattern-fill.d.ts.map +1 -0
  264. package/dist/modules/geometry/pattern-fill/pattern-fill.js +43 -0
  265. package/dist/modules/geometry/pattern-fill/pattern-fill.js.map +1 -0
  266. package/dist/modules/geometry/point-glow/point-glow.cjs +104 -0
  267. package/dist/modules/geometry/point-glow/point-glow.d.ts +11 -0
  268. package/dist/modules/geometry/point-glow/point-glow.d.ts.map +1 -0
  269. package/dist/modules/geometry/point-glow/point-glow.js +77 -0
  270. package/dist/modules/geometry/point-glow/point-glow.js.map +1 -0
  271. package/dist/modules/geometry/precipitation/precipitation.cjs +122 -0
  272. package/dist/modules/geometry/precipitation/precipitation.d.ts +40 -0
  273. package/dist/modules/geometry/precipitation/precipitation.d.ts.map +1 -0
  274. package/dist/modules/geometry/precipitation/precipitation.js +95 -0
  275. package/dist/modules/geometry/precipitation/precipitation.js.map +1 -0
  276. package/dist/modules/geometry/sketch-stroke/sketch-stroke.cjs +158 -0
  277. package/dist/modules/geometry/sketch-stroke/sketch-stroke.d.ts +60 -0
  278. package/dist/modules/geometry/sketch-stroke/sketch-stroke.d.ts.map +1 -0
  279. package/dist/modules/geometry/sketch-stroke/sketch-stroke.js +137 -0
  280. package/dist/modules/geometry/sketch-stroke/sketch-stroke.js.map +1 -0
  281. package/dist/modules/geospatial/dggs/dggs-wgsl.cjs +2304 -0
  282. package/dist/modules/geospatial/dggs/dggs-wgsl.d.ts +3 -0
  283. package/dist/modules/geospatial/dggs/dggs-wgsl.d.ts.map +1 -0
  284. package/dist/modules/geospatial/dggs/dggs-wgsl.js +2283 -0
  285. package/dist/modules/geospatial/dggs/dggs-wgsl.js.map +1 -0
  286. package/dist/modules/geospatial/dggs/dggs.cjs +31 -0
  287. package/dist/modules/geospatial/dggs/dggs.d.ts +6 -0
  288. package/dist/modules/geospatial/dggs/dggs.d.ts.map +1 -0
  289. package/dist/modules/geospatial/dggs/dggs.js +10 -0
  290. package/dist/modules/geospatial/dggs/dggs.js.map +1 -0
  291. package/dist/modules/lighting/area-lighting/area-light-types.cjs +68 -0
  292. package/dist/modules/lighting/area-lighting/area-light-types.d.ts +34 -0
  293. package/dist/modules/lighting/area-lighting/area-light-types.d.ts.map +1 -0
  294. package/dist/modules/lighting/area-lighting/area-light-types.js +40 -0
  295. package/dist/modules/lighting/area-lighting/area-light-types.js.map +1 -0
  296. package/dist/modules/lighting/area-lighting/area-lighting-shaders.cjs +101 -0
  297. package/dist/modules/lighting/area-lighting/area-lighting-shaders.d.ts +3 -0
  298. package/dist/modules/lighting/area-lighting/area-lighting-shaders.d.ts.map +1 -0
  299. package/dist/modules/lighting/area-lighting/area-lighting-shaders.js +71 -0
  300. package/dist/modules/lighting/area-lighting/area-lighting-shaders.js.map +1 -0
  301. package/dist/modules/lighting/area-lighting/area-lighting.cjs +62 -0
  302. package/dist/modules/lighting/area-lighting/area-lighting.d.ts +89 -0
  303. package/dist/modules/lighting/area-lighting/area-lighting.d.ts.map +1 -0
  304. package/dist/modules/lighting/area-lighting/area-lighting.js +41 -0
  305. package/dist/modules/lighting/area-lighting/area-lighting.js.map +1 -0
  306. package/dist/modules/lighting/area-lighting/ltc-shaders.cjs +192 -0
  307. package/dist/modules/lighting/area-lighting/ltc-shaders.d.ts +3 -0
  308. package/dist/modules/lighting/area-lighting/ltc-shaders.d.ts.map +1 -0
  309. package/dist/modules/lighting/area-lighting/ltc-shaders.js +162 -0
  310. package/dist/modules/lighting/area-lighting/ltc-shaders.js.map +1 -0
  311. package/dist/modules/lighting/atmosphere/atmosphere.cjs +253 -0
  312. package/dist/modules/lighting/atmosphere/atmosphere.d.ts +45 -0
  313. package/dist/modules/lighting/atmosphere/atmosphere.d.ts.map +1 -0
  314. package/dist/modules/lighting/atmosphere/atmosphere.js +228 -0
  315. package/dist/modules/lighting/atmosphere/atmosphere.js.map +1 -0
  316. package/dist/modules/lighting/clouds/clouds.cjs +216 -0
  317. package/dist/modules/lighting/clouds/clouds.d.ts +58 -0
  318. package/dist/modules/lighting/clouds/clouds.d.ts.map +1 -0
  319. package/dist/modules/lighting/clouds/clouds.js +192 -0
  320. package/dist/modules/lighting/clouds/clouds.js.map +1 -0
  321. package/dist/modules/lighting/firefly/firefly.cjs +74 -0
  322. package/dist/modules/lighting/firefly/firefly.d.ts +36 -0
  323. package/dist/modules/lighting/firefly/firefly.d.ts.map +1 -0
  324. package/dist/modules/lighting/firefly/firefly.js +53 -0
  325. package/dist/modules/lighting/firefly/firefly.js.map +1 -0
  326. package/dist/modules/lighting/globe-clouds/globe-clouds.cjs +143 -0
  327. package/dist/modules/lighting/globe-clouds/globe-clouds.d.ts +53 -0
  328. package/dist/modules/lighting/globe-clouds/globe-clouds.d.ts.map +1 -0
  329. package/dist/modules/lighting/globe-clouds/globe-clouds.js +119 -0
  330. package/dist/modules/lighting/globe-clouds/globe-clouds.js.map +1 -0
  331. package/dist/modules/lighting/gouraud-material/gouraud-material.cjs +61 -0
  332. package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts +12 -0
  333. package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts.map +1 -0
  334. package/dist/modules/lighting/gouraud-material/gouraud-material.js +40 -0
  335. package/dist/modules/lighting/gouraud-material/gouraud-material.js.map +1 -0
  336. package/dist/modules/lighting/height-fog/height-fog-functions.cjs +139 -0
  337. package/dist/modules/lighting/height-fog/height-fog-functions.d.ts +14 -0
  338. package/dist/modules/lighting/height-fog/height-fog-functions.d.ts.map +1 -0
  339. package/dist/modules/lighting/height-fog/height-fog-functions.js +114 -0
  340. package/dist/modules/lighting/height-fog/height-fog-functions.js.map +1 -0
  341. package/dist/modules/lighting/height-fog/height-fog.cjs +104 -0
  342. package/dist/modules/lighting/height-fog/height-fog.d.ts +60 -0
  343. package/dist/modules/lighting/height-fog/height-fog.d.ts.map +1 -0
  344. package/dist/modules/lighting/height-fog/height-fog.js +77 -0
  345. package/dist/modules/lighting/height-fog/height-fog.js.map +1 -0
  346. package/dist/modules/lighting/ibl/ibl.cjs +63 -0
  347. package/dist/modules/lighting/ibl/ibl.d.ts +25 -0
  348. package/dist/modules/lighting/ibl/ibl.d.ts.map +1 -0
  349. package/dist/modules/lighting/ibl/ibl.js +33 -0
  350. package/dist/modules/lighting/ibl/ibl.js.map +1 -0
  351. package/dist/modules/lighting/lambert-material/lambert-material.cjs +54 -0
  352. package/dist/modules/lighting/lambert-material/lambert-material.d.ts +10 -0
  353. package/dist/modules/lighting/lambert-material/lambert-material.d.ts.map +1 -0
  354. package/dist/modules/lighting/lambert-material/lambert-material.js +33 -0
  355. package/dist/modules/lighting/lambert-material/lambert-material.js.map +1 -0
  356. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.cjs +88 -0
  357. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts +3 -0
  358. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts.map +1 -0
  359. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js +60 -0
  360. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js.map +1 -0
  361. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.cjs +97 -0
  362. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.d.ts +2 -0
  363. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.d.ts.map +1 -0
  364. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.js +73 -0
  365. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.js.map +1 -0
  366. package/dist/modules/lighting/lights/lighting-glsl.cjs +116 -0
  367. package/dist/modules/lighting/lights/lighting-glsl.d.ts +2 -0
  368. package/dist/modules/lighting/lights/lighting-glsl.d.ts.map +1 -0
  369. package/dist/modules/lighting/lights/lighting-glsl.js +92 -0
  370. package/dist/modules/lighting/lights/lighting-glsl.js.map +1 -0
  371. package/dist/modules/lighting/lights/lighting-wgsl.cjs +115 -0
  372. package/dist/modules/lighting/lights/lighting-wgsl.d.ts +2 -0
  373. package/dist/modules/lighting/lights/lighting-wgsl.d.ts.map +1 -0
  374. package/dist/modules/lighting/lights/lighting-wgsl.js +91 -0
  375. package/dist/modules/lighting/lights/lighting-wgsl.js.map +1 -0
  376. package/dist/modules/lighting/lights/lighting.cjs +210 -0
  377. package/dist/modules/lighting/lights/lighting.d.ts +163 -0
  378. package/dist/modules/lighting/lights/lighting.d.ts.map +1 -0
  379. package/dist/modules/lighting/lights/lighting.js +208 -0
  380. package/dist/modules/lighting/lights/lighting.js.map +1 -0
  381. package/dist/modules/lighting/no-material/dirlight.cjs +112 -0
  382. package/dist/modules/lighting/no-material/dirlight.d.ts +33 -0
  383. package/dist/modules/lighting/no-material/dirlight.d.ts.map +1 -0
  384. package/dist/modules/lighting/no-material/dirlight.js +86 -0
  385. package/dist/modules/lighting/no-material/dirlight.js.map +1 -0
  386. package/dist/modules/lighting/pbr-material/pbr-material-glsl.cjs +1767 -0
  387. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts +3 -0
  388. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts.map +1 -0
  389. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js +1745 -0
  390. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js.map +1 -0
  391. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.cjs +2062 -0
  392. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts +3 -0
  393. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts.map +1 -0
  394. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js +2040 -0
  395. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js.map +1 -0
  396. package/dist/modules/lighting/pbr-material/pbr-material.cjs +315 -0
  397. package/dist/modules/lighting/pbr-material/pbr-material.d.ts +516 -0
  398. package/dist/modules/lighting/pbr-material/pbr-material.d.ts.map +1 -0
  399. package/dist/modules/lighting/pbr-material/pbr-material.js +292 -0
  400. package/dist/modules/lighting/pbr-material/pbr-material.js.map +1 -0
  401. package/dist/modules/lighting/pbr-material/pbr-projection.cjs +63 -0
  402. package/dist/modules/lighting/pbr-material/pbr-projection.d.ts +10 -0
  403. package/dist/modules/lighting/pbr-material/pbr-projection.d.ts.map +1 -0
  404. package/dist/modules/lighting/pbr-material/pbr-projection.js +37 -0
  405. package/dist/modules/lighting/pbr-material/pbr-projection.js.map +1 -0
  406. package/dist/modules/lighting/pbr-material/pbr-scene.cjs +109 -0
  407. package/dist/modules/lighting/pbr-material/pbr-scene.d.ts +52 -0
  408. package/dist/modules/lighting/pbr-material/pbr-scene.d.ts.map +1 -0
  409. package/dist/modules/lighting/pbr-material/pbr-scene.js +83 -0
  410. package/dist/modules/lighting/pbr-material/pbr-scene.js.map +1 -0
  411. package/dist/modules/lighting/phong-material/phong-material.cjs +61 -0
  412. package/dist/modules/lighting/phong-material/phong-material.d.ts +13 -0
  413. package/dist/modules/lighting/phong-material/phong-material.d.ts.map +1 -0
  414. package/dist/modules/lighting/phong-material/phong-material.js +40 -0
  415. package/dist/modules/lighting/phong-material/phong-material.js.map +1 -0
  416. package/dist/modules/lighting/phong-material/phong-shaders-glsl.cjs +100 -0
  417. package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts +3 -0
  418. package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts.map +1 -0
  419. package/dist/modules/lighting/phong-material/phong-shaders-glsl.js +72 -0
  420. package/dist/modules/lighting/phong-material/phong-shaders-glsl.js.map +1 -0
  421. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.cjs +153 -0
  422. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.d.ts +2 -0
  423. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.d.ts.map +1 -0
  424. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.js +129 -0
  425. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.js.map +1 -0
  426. package/dist/modules/lighting/surface-weather/surface-weather.cjs +199 -0
  427. package/dist/modules/lighting/surface-weather/surface-weather.d.ts +54 -0
  428. package/dist/modules/lighting/surface-weather/surface-weather.d.ts.map +1 -0
  429. package/dist/modules/lighting/surface-weather/surface-weather.js +175 -0
  430. package/dist/modules/lighting/surface-weather/surface-weather.js.map +1 -0
  431. package/dist/modules/lighting/water-material/river-water-material.cjs +56 -0
  432. package/dist/modules/lighting/water-material/river-water-material.d.ts +21 -0
  433. package/dist/modules/lighting/water-material/river-water-material.d.ts.map +1 -0
  434. package/dist/modules/lighting/water-material/river-water-material.js +36 -0
  435. package/dist/modules/lighting/water-material/river-water-material.js.map +1 -0
  436. package/dist/modules/lighting/water-material/river-water-shaders.cjs +261 -0
  437. package/dist/modules/lighting/water-material/river-water-shaders.d.ts +3 -0
  438. package/dist/modules/lighting/water-material/river-water-shaders.d.ts.map +1 -0
  439. package/dist/modules/lighting/water-material/river-water-shaders.js +233 -0
  440. package/dist/modules/lighting/water-material/river-water-shaders.js.map +1 -0
  441. package/dist/modules/lighting/water-material/water-material.cjs +188 -0
  442. package/dist/modules/lighting/water-material/water-material.d.ts +28 -0
  443. package/dist/modules/lighting/water-material/water-material.d.ts.map +1 -0
  444. package/dist/modules/lighting/water-material/water-material.js +179 -0
  445. package/dist/modules/lighting/water-material/water-material.js.map +1 -0
  446. package/dist/modules/lighting/water-material/water-shaders-glsl.cjs +260 -0
  447. package/dist/modules/lighting/water-material/water-shaders-glsl.d.ts +3 -0
  448. package/dist/modules/lighting/water-material/water-shaders-glsl.d.ts.map +1 -0
  449. package/dist/modules/lighting/water-material/water-shaders-glsl.js +232 -0
  450. package/dist/modules/lighting/water-material/water-shaders-glsl.js.map +1 -0
  451. package/dist/modules/lighting/water-material/water-shaders-wgsl.cjs +254 -0
  452. package/dist/modules/lighting/water-material/water-shaders-wgsl.d.ts +2 -0
  453. package/dist/modules/lighting/water-material/water-shaders-wgsl.d.ts.map +1 -0
  454. package/dist/modules/lighting/water-material/water-shaders-wgsl.js +230 -0
  455. package/dist/modules/lighting/water-material/water-shaders-wgsl.js.map +1 -0
  456. package/dist/modules/math/fp16/fp16-utils.cjs +112 -0
  457. package/dist/modules/math/fp16/fp16-utils.d.ts +13 -0
  458. package/dist/modules/math/fp16/fp16-utils.d.ts.map +1 -0
  459. package/dist/modules/math/fp16/fp16-utils.js +118 -0
  460. package/dist/modules/math/fp16/fp16-utils.js.map +1 -0
  461. package/dist/modules/math/fp32/fp32.cjs +310 -0
  462. package/dist/modules/math/fp32/fp32.d.ts +9 -0
  463. package/dist/modules/math/fp32/fp32.d.ts.map +1 -0
  464. package/dist/modules/math/fp32/fp32.js +288 -0
  465. package/dist/modules/math/fp32/fp32.js.map +1 -0
  466. package/dist/modules/math/fp64/fp64-arithmetic-glsl.cjs +229 -0
  467. package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts +2 -0
  468. package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts.map +1 -0
  469. package/dist/modules/math/fp64/fp64-arithmetic-glsl.js +205 -0
  470. package/dist/modules/math/fp64/fp64-arithmetic-glsl.js.map +1 -0
  471. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.cjs +144 -0
  472. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.d.ts +10 -0
  473. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.d.ts.map +1 -0
  474. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.js +128 -0
  475. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.js.map +1 -0
  476. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.cjs +583 -0
  477. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.d.ts +11 -0
  478. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.d.ts.map +1 -0
  479. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.js +563 -0
  480. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.js.map +1 -0
  481. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.cjs +946 -0
  482. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.d.ts +3 -0
  483. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.d.ts.map +1 -0
  484. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.js +923 -0
  485. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.js.map +1 -0
  486. package/dist/modules/math/fp64/fp64-functions-glsl.cjs +699 -0
  487. package/dist/modules/math/fp64/fp64-functions-glsl.d.ts +2 -0
  488. package/dist/modules/math/fp64/fp64-functions-glsl.d.ts.map +1 -0
  489. package/dist/modules/math/fp64/fp64-functions-glsl.js +675 -0
  490. package/dist/modules/math/fp64/fp64-functions-glsl.js.map +1 -0
  491. package/dist/modules/math/fp64/fp64-functions-wgsl.cjs +180 -0
  492. package/dist/modules/math/fp64/fp64-functions-wgsl.d.ts +3 -0
  493. package/dist/modules/math/fp64/fp64-functions-wgsl.d.ts.map +1 -0
  494. package/dist/modules/math/fp64/fp64-functions-wgsl.js +157 -0
  495. package/dist/modules/math/fp64/fp64-functions-wgsl.js.map +1 -0
  496. package/dist/modules/math/fp64/fp64-utils.cjs +50 -0
  497. package/dist/modules/math/fp64/fp64-utils.d.ts +22 -0
  498. package/dist/modules/math/fp64/fp64-utils.d.ts.map +1 -0
  499. package/dist/modules/math/fp64/fp64-utils.js +42 -0
  500. package/dist/modules/math/fp64/fp64-utils.js.map +1 -0
  501. package/dist/modules/math/fp64/fp64.cjs +68 -0
  502. package/dist/modules/math/fp64/fp64.d.ts +24 -0
  503. package/dist/modules/math/fp64/fp64.d.ts.map +1 -0
  504. package/dist/modules/math/fp64/fp64.js +46 -0
  505. package/dist/modules/math/fp64/fp64.js.map +1 -0
  506. package/dist/modules/math/random/random.cjs +46 -0
  507. package/dist/modules/math/random/random.d.ts +7 -0
  508. package/dist/modules/math/random/random.d.ts.map +1 -0
  509. package/dist/modules/math/random/random.js +21 -0
  510. package/dist/modules/math/random/random.js.map +1 -0
  511. package/dist/modules/math/value-noise/value-noise.cjs +95 -0
  512. package/dist/modules/math/value-noise/value-noise.d.ts +7 -0
  513. package/dist/modules/math/value-noise/value-noise.d.ts.map +1 -0
  514. package/dist/modules/math/value-noise/value-noise.js +68 -0
  515. package/dist/modules/math/value-noise/value-noise.js.map +1 -0
  516. package/dist/modules/volume/volume-raymarch.cjs +107 -0
  517. package/dist/modules/volume/volume-raymarch.d.ts +6 -0
  518. package/dist/modules/volume/volume-raymarch.d.ts.map +1 -0
  519. package/dist/modules/volume/volume-raymarch.js +84 -0
  520. package/dist/modules/volume/volume-raymarch.js.map +1 -0
  521. package/dist/types/align-to.cjs +38 -0
  522. package/dist/types/align-to.d.ts +3 -0
  523. package/dist/types/align-to.d.ts.map +1 -0
  524. package/dist/types/align-to.js +13 -0
  525. package/dist/types/align-to.js.map +1 -0
  526. package/dist/types/primitive-data-types.cjs +15 -0
  527. package/dist/types/primitive-data-types.d.ts +7 -0
  528. package/dist/types/primitive-data-types.d.ts.map +1 -0
  529. package/dist/types/primitive-data-types.js +5 -0
  530. package/dist/types/primitive-data-types.js.map +1 -0
  531. package/dist/types/sampler-props.cjs +15 -0
  532. package/dist/types/sampler-props.d.ts +26 -0
  533. package/dist/types/sampler-props.d.ts.map +1 -0
  534. package/dist/types/sampler-props.js +5 -0
  535. package/dist/types/sampler-props.js.map +1 -0
  536. package/dist/types/shader-block-layout.cjs +184 -0
  537. package/dist/types/shader-block-layout.d.ts +72 -0
  538. package/dist/types/shader-block-layout.d.ts.map +1 -0
  539. package/dist/types/shader-block-layout.js +209 -0
  540. package/dist/types/shader-block-layout.js.map +1 -0
  541. package/dist/types/shader-layout.cjs +15 -0
  542. package/dist/types/shader-layout.d.ts +178 -0
  543. package/dist/types/shader-layout.d.ts.map +1 -0
  544. package/dist/types/shader-layout.js +5 -0
  545. package/dist/types/shader-layout.js.map +1 -0
  546. package/dist/types/shader-type-decoder.cjs +240 -0
  547. package/dist/types/shader-type-decoder.d.ts +41 -0
  548. package/dist/types/shader-type-decoder.d.ts.map +1 -0
  549. package/dist/types/shader-type-decoder.js +210 -0
  550. package/dist/types/shader-type-decoder.js.map +1 -0
  551. package/dist/types/shader-types.cjs +15 -0
  552. package/dist/types/shader-types.d.ts +101 -0
  553. package/dist/types/shader-types.d.ts.map +1 -0
  554. package/dist/types/shader-types.js +30 -0
  555. package/dist/types/shader-types.js.map +1 -0
  556. package/dist/types/texture-formats.cjs +15 -0
  557. package/dist/types/texture-formats.d.ts +24 -0
  558. package/dist/types/texture-formats.d.ts.map +1 -0
  559. package/dist/types/texture-formats.js +5 -0
  560. package/dist/types/texture-formats.js.map +1 -0
  561. package/dist/types.cjs +42 -0
  562. package/dist/types.cjs.map +6 -0
  563. package/dist/types.d.ts +14 -0
  564. package/dist/types.d.ts.map +1 -0
  565. package/dist/types.js +12 -0
  566. package/dist/types.js.map +1 -0
  567. package/dist/wgsl.cjs +39 -0
  568. package/dist/wgsl.cjs.map +6 -0
  569. package/dist/wgsl.d.ts +8 -0
  570. package/dist/wgsl.d.ts.map +1 -0
  571. package/dist/wgsl.js +9 -0
  572. package/dist/wgsl.js.map +1 -0
  573. package/package.json +65 -4
  574. package/src/glsl.ts +13 -0
  575. package/src/index.ts +259 -0
  576. package/src/lib/color/normalize-byte-colors.ts +57 -0
  577. package/src/lib/filters/prop-types.ts +150 -0
  578. package/src/lib/glsl-shader-assembler.ts +39 -0
  579. package/src/lib/glsl-utils/get-shader-info.ts +42 -0
  580. package/src/lib/glsl-utils/shader-utils.ts +110 -0
  581. package/src/lib/preprocessor/preprocessor.ts +132 -0
  582. package/src/lib/shader-assembler-base.ts +170 -0
  583. package/src/lib/shader-assembler.ts +7 -0
  584. package/src/lib/shader-assembly/assemble-glsl-shaders.ts +305 -0
  585. package/src/lib/shader-assembly/assemble-shaders.ts +13 -0
  586. package/src/lib/shader-assembly/assemble-wgsl-shaders.ts +801 -0
  587. package/src/lib/shader-assembly/platform-defines.ts +58 -0
  588. package/src/lib/shader-assembly/platform-info.ts +23 -0
  589. package/src/lib/shader-assembly/shader-assembly-shared.ts +95 -0
  590. package/src/lib/shader-assembly/shader-assembly-types.ts +142 -0
  591. package/src/lib/shader-assembly/shader-hooks.ts +141 -0
  592. package/src/lib/shader-assembly/shader-injections.ts +250 -0
  593. package/src/lib/shader-assembly/shader-plugin-varyings.ts +524 -0
  594. package/src/lib/shader-assembly/shader-plugin-vertex-inputs.ts +279 -0
  595. package/src/lib/shader-assembly/wgsl-binding-debug.ts +227 -0
  596. package/src/lib/shader-assembly/wgsl-binding-scan.ts +228 -0
  597. package/src/lib/shader-assembly/wgsl-interface-scan.ts +676 -0
  598. package/src/lib/shader-generator/generate-shader.ts +27 -0
  599. package/src/lib/shader-generator/glsl/generate-glsl.ts +101 -0
  600. package/src/lib/shader-generator/utils/capitalize.ts +12 -0
  601. package/src/lib/shader-generator/wgsl/generate-wgsl.ts +40 -0
  602. package/src/lib/shader-module/composite-shader-pass.ts +47 -0
  603. package/src/lib/shader-module/shader-module-dependencies.ts +128 -0
  604. package/src/lib/shader-module/shader-module-uniform-layout.ts +420 -0
  605. package/src/lib/shader-module/shader-module.ts +244 -0
  606. package/src/lib/shader-module/shader-pass.ts +69 -0
  607. package/src/lib/shader-plugin.ts +214 -0
  608. package/src/lib/shader-transpiler/shader-transpiler.ts +34 -0
  609. package/src/lib/shader-transpiler/transpile-glsl-shader.ts +78 -0
  610. package/src/lib/utils/assert.ts +13 -0
  611. package/src/lib/utils/uniform-types.ts +89 -0
  612. package/src/lib/wgsl-shader-assembler.ts +122 -0
  613. package/src/module-injectors.ts +32 -0
  614. package/src/modules/color/float-colors.ts +334 -0
  615. package/src/modules/engine/clip/clip.ts +149 -0
  616. package/src/modules/engine/filter/filter.ts +107 -0
  617. package/src/modules/engine/geometry/geometry.ts +45 -0
  618. package/src/modules/engine/gpu-animation/gpu-animation.ts +244 -0
  619. package/src/modules/engine/picking/README.md +88 -0
  620. package/src/modules/engine/picking/picking.ts +252 -0
  621. package/src/modules/engine/project/project.ts +166 -0
  622. package/src/modules/engine/skin/skin.ts +233 -0
  623. package/src/modules/engine/transform/transform.ts +50 -0
  624. package/src/modules/geometry/path-dash/path-dash.ts +68 -0
  625. package/src/modules/geometry/pattern-fill/pattern-fill-shaders.ts +88 -0
  626. package/src/modules/geometry/pattern-fill/pattern-fill.ts +54 -0
  627. package/src/modules/geometry/point-glow/point-glow.ts +87 -0
  628. package/src/modules/geometry/precipitation/README.md +19 -0
  629. package/src/modules/geometry/precipitation/precipitation.ts +108 -0
  630. package/src/modules/geometry/sketch-stroke/sketch-stroke.ts +160 -0
  631. package/src/modules/geospatial/dggs/dggs-wgsl.ts +2284 -0
  632. package/src/modules/geospatial/dggs/dggs.ts +12 -0
  633. package/src/modules/lighting/area-lighting/area-light-types.ts +71 -0
  634. package/src/modules/lighting/area-lighting/area-lighting-shaders.ts +72 -0
  635. package/src/modules/lighting/area-lighting/area-lighting.ts +63 -0
  636. package/src/modules/lighting/area-lighting/ltc-shaders.ts +163 -0
  637. package/src/modules/lighting/atmosphere/README.md +25 -0
  638. package/src/modules/lighting/atmosphere/atmosphere.ts +246 -0
  639. package/src/modules/lighting/clouds/README.md +24 -0
  640. package/src/modules/lighting/clouds/clouds.ts +216 -0
  641. package/src/modules/lighting/firefly/firefly.ts +64 -0
  642. package/src/modules/lighting/globe-clouds/globe-clouds.ts +124 -0
  643. package/src/modules/lighting/gouraud-material/gouraud-material.ts +55 -0
  644. package/src/modules/lighting/height-fog/README.md +36 -0
  645. package/src/modules/lighting/height-fog/height-fog-functions.ts +116 -0
  646. package/src/modules/lighting/height-fog/height-fog.ts +96 -0
  647. package/src/modules/lighting/ibl/ibl.ts +43 -0
  648. package/src/modules/lighting/lambert-material/lambert-material.ts +42 -0
  649. package/src/modules/lighting/lambert-material/lambert-shaders-glsl.ts +61 -0
  650. package/src/modules/lighting/lambert-material/lambert-shaders-wgsl.ts +73 -0
  651. package/src/modules/lighting/lights/lighting-glsl.ts +92 -0
  652. package/src/modules/lighting/lights/lighting-wgsl.ts +91 -0
  653. package/src/modules/lighting/lights/lighting.ts +385 -0
  654. package/src/modules/lighting/no-material/dirlight.ts +101 -0
  655. package/src/modules/lighting/pbr-material/pbr-material-glsl.ts +1748 -0
  656. package/src/modules/lighting/pbr-material/pbr-material-wgsl.ts +2043 -0
  657. package/src/modules/lighting/pbr-material/pbr-material.ts +517 -0
  658. package/src/modules/lighting/pbr-material/pbr-projection.ts +50 -0
  659. package/src/modules/lighting/pbr-material/pbr-scene.ts +112 -0
  660. package/src/modules/lighting/phong-material/phong-material.ts +53 -0
  661. package/src/modules/lighting/phong-material/phong-shaders-glsl.ts +73 -0
  662. package/src/modules/lighting/phong-material/phong-shaders-wgsl.ts +129 -0
  663. package/src/modules/lighting/surface-weather/README.md +28 -0
  664. package/src/modules/lighting/surface-weather/surface-weather.ts +198 -0
  665. package/src/modules/lighting/water-material/river-water-material.ts +58 -0
  666. package/src/modules/lighting/water-material/river-water-shaders.ts +234 -0
  667. package/src/modules/lighting/water-material/water-material.ts +234 -0
  668. package/src/modules/lighting/water-material/water-shaders-glsl.ts +233 -0
  669. package/src/modules/lighting/water-material/water-shaders-wgsl.ts +230 -0
  670. package/src/modules/math/fp16/fp16-utils.ts +156 -0
  671. package/src/modules/math/fp32/fp32.ts +291 -0
  672. package/src/modules/math/fp64/fp64-arithmetic-glsl.ts +205 -0
  673. package/src/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.ts +129 -0
  674. package/src/modules/math/fp64/fp64-arithmetic-wgsl-integer.ts +564 -0
  675. package/src/modules/math/fp64/fp64-arithmetic-wgsl.ts +924 -0
  676. package/src/modules/math/fp64/fp64-functions-glsl.ts +675 -0
  677. package/src/modules/math/fp64/fp64-functions-wgsl.ts +157 -0
  678. package/src/modules/math/fp64/fp64-utils.ts +46 -0
  679. package/src/modules/math/fp64/fp64.ts +64 -0
  680. package/src/modules/math/random/random.ts +25 -0
  681. package/src/modules/math/value-noise/value-noise.ts +70 -0
  682. package/src/modules/volume/volume-raymarch.ts +87 -0
  683. package/src/types/align-to.ts +13 -0
  684. package/src/types/primitive-data-types.ts +10 -0
  685. package/src/types/sampler-props.ts +39 -0
  686. package/src/types/shader-block-layout.ts +340 -0
  687. package/src/types/shader-layout.ts +208 -0
  688. package/src/types/shader-type-decoder.ts +285 -0
  689. package/src/types/shader-types.ts +207 -0
  690. package/src/types/texture-formats.ts +155 -0
  691. package/src/types.ts +48 -0
  692. package/src/wgsl.ts +23 -0
@@ -0,0 +1,24 @@
1
+ # clouds
2
+
3
+ Procedural, wind-driven sky clouds for GLSL and WGSL. The module uses shared `valueNoise` and
4
+ returns premultiplied RGBA from `clouds_getColor(camera, normalizedRayDirection)`.
5
+ Camera positions, slab dimensions, and velocity use a local east/north/up metre frame.
6
+
7
+ The cloud slab starts at `altitude`, extends through `thickness`, and uses `scale` for the
8
+ horizontal size of formations. `cover` ranges from clear (0) to overcast (1); `density`
9
+ controls extinction per metre. Set `time` in seconds and `velocity` in east/north metres per
10
+ second. The shader adds gradual shape evolution independently of advection. `sunDirection`
11
+ points toward the sun; `sunColor` is linear RGB. The direction must be nonzero.
12
+
13
+ A fixed 64-sample march integrates density through the slab, with approximate local sunlight
14
+ attenuation and a forward-scattering highlight. The horizon fades at long distances. There
15
+ are no cloud shadow maps, temporal accumulation, or atmospheric multiple scattering.
16
+ `clouds_getTransmittance(position)` integrates sunlight extinction through that same density
17
+ field with sixteen midpoint samples. Multiply direct sunlight by this factor, preserving
18
+ ambient illumination. It returns one for clear/zero-density clouds and sun elevation at or
19
+ below approximately 1.1 degrees. Sky and receivers must share the origin, dimensions, time and wind.
20
+ The light march caps at 40 km, limiting cost and low-sun precision. It does not create
21
+ shadow-map resources or implement terrain/volume shadowing. The
22
+ caller supplies world-space camera rays, composites over the sky, and arranges foreground
23
+ occlusion. `CloudLayer` in the deck.gl adapter provides this integration for perspective
24
+ flat-map views. Cloud render cost scales with visible sky area.
@@ -0,0 +1,216 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ import type {ShaderModule} from '../../../lib/shader-module/shader-module';
6
+ import {valueNoise} from '../../math/value-noise/value-noise';
7
+
8
+ export type CloudUniforms = {
9
+ /** Fractional cloud cover, from clear (0) to overcast (1). */
10
+ cover: number;
11
+ /** Bottom and thickness of the cloud slab, in metres above the coordinate origin. */
12
+ altitude: number;
13
+ thickness: number;
14
+ /** Horizontal size of cloud formations, in metres. */
15
+ scale: number;
16
+ /** Extinction coefficient, in inverse metres. */
17
+ density: number;
18
+ /** Elapsed seconds; callers own animation. */
19
+ time: number;
20
+ /** East/north drift velocity in metres per second. */
21
+ velocity: [number, number];
22
+ /** Direction toward the sun in east/north/up coordinates; nonzero. */
23
+ sunDirection: [number, number, number];
24
+ /** Linear sunlight tint. */
25
+ sunColor: [number, number, number];
26
+ };
27
+ export type CloudProps = Partial<CloudUniforms>;
28
+
29
+ const DEFAULT_UNIFORMS: CloudUniforms = {
30
+ cover: 0.45,
31
+ altitude: 1000,
32
+ thickness: 1200,
33
+ scale: 1400,
34
+ density: 0.005,
35
+ time: 0,
36
+ velocity: [14, 4],
37
+ sunDirection: [0, 0.8, 0.6],
38
+ sunColor: [1, 0.95, 0.85]
39
+ };
40
+
41
+ /** Sixty-four-sample cloud slab with approximate sunlight scattering. Returns premultiplied RGBA.
42
+ * Positions/directions use a local east/north/up frame, with lengths in metres.
43
+ * Receivers can sample clouds_getTransmittance to attenuate direct sunlight.
44
+ */
45
+ export const clouds = {
46
+ name: 'clouds',
47
+ dependencies: [valueNoise],
48
+ uniformTypes: {
49
+ cover: 'f32',
50
+ altitude: 'f32',
51
+ thickness: 'f32',
52
+ scale: 'f32',
53
+ density: 'f32',
54
+ time: 'f32',
55
+ velocity: 'vec2<f32>',
56
+ sunDirection: 'vec3<f32>',
57
+ sunColor: 'vec3<f32>'
58
+ },
59
+ defaultUniforms: DEFAULT_UNIFORMS,
60
+ getUniforms(props = {}, previousUniforms = DEFAULT_UNIFORMS) {
61
+ return {...DEFAULT_UNIFORMS, ...previousUniforms, ...props};
62
+ },
63
+ fs: /* glsl */ `
64
+ layout(std140) uniform cloudsUniforms {
65
+ float cover;
66
+ float altitude;
67
+ float thickness;
68
+ float scale;
69
+ float density;
70
+ float time;
71
+ vec2 velocity;
72
+ vec3 sunDirection;
73
+ vec3 sunColor;
74
+ } clouds;
75
+ // Shared normalized density field for planar slabs and spherical shells.
76
+ float clouds_getDensityAt(vec3 coordinate, float height) {
77
+ float envelope = smoothstep(0.0, 0.2, height) * (1.0 - smoothstep(0.65, 1.0, height));
78
+ coordinate += vec3(8.7, 3.2, clouds.time * 0.003);
79
+ float broad = valueNoise_noise3(coordinate);
80
+ float detail = valueNoise_noise3(coordinate * 2.07 + vec3(13.1, 7.3, 2.8));
81
+ float fine = valueNoise_noise3(coordinate * 4.23 + vec3(5.4, 11.7, 8.1));
82
+ float threshold = mix(0.78, 0.18, clamp(clouds.cover, 0.0, 1.0));
83
+ return envelope * smoothstep(threshold, threshold + 0.16, broad * 0.72 + detail * 0.2 + fine * 0.08);
84
+ }
85
+
86
+ float clouds_getDensity(vec3 position) {
87
+ float height = (position.z - clouds.altitude) / max(clouds.thickness, 1.0);
88
+ return clouds_getDensityAt(vec3((position.xy - clouds.velocity * clouds.time) / max(clouds.scale, 1.0), height * 0.8), height);
89
+ }
90
+ vec3 clouds_getLighting(float density, float sunDensity, float daylight, float silver) {
91
+ vec3 ambient = mix(vec3(0.035, 0.05, 0.085), vec3(0.28, 0.34, 0.42), daylight);
92
+ float sunlight = exp(-(density + sunDensity) * 2.0);
93
+ return ambient + clouds.sunColor * daylight * sunlight * (0.5 + silver * 0.3);
94
+ }
95
+
96
+ // Beer-Lambert extinction toward the sun through the same density used for sky rendering.
97
+ float clouds_getTransmittance(vec3 position) {
98
+ if (clouds.cover <= 0.0 || clouds.density <= 0.0) return 1.0;
99
+ vec3 direction = normalize(clouds.sunDirection);
100
+ if (direction.z <= 0.02) return 1.0;
101
+ float start = max((clouds.altitude - position.z) / direction.z, 0.0);
102
+ float end = min((clouds.altitude + clouds.thickness - position.z) / direction.z, 40000.0);
103
+ if (end <= start) return 1.0;
104
+ float stepLength = (end - start) / 16.0;
105
+ float opticalDepth = 0.0;
106
+ for (int sampleIndex = 0; sampleIndex < 16; sampleIndex++) {
107
+ opticalDepth += clouds_getDensity(position + direction * (start + (float(sampleIndex) + 0.5) * stepLength)) * stepLength;
108
+ }
109
+ return exp(-opticalDepth * max(clouds.density, 0.0));
110
+ }
111
+
112
+ vec4 clouds_getColor(vec3 camera, vec3 rayDirection) {
113
+ if (clouds.cover <= 0.0 || clouds.density <= 0.0 || abs(rayDirection.z) < 0.0001) return vec4(0.0);
114
+ float bottom = (clouds.altitude - camera.z) / rayDirection.z;
115
+ float top = (clouds.altitude + max(clouds.thickness, 1.0) - camera.z) / rayDirection.z;
116
+ float start = max(min(bottom, top), 0.0);
117
+ float end = min(max(bottom, top), 20000.0);
118
+ if (end <= start) return vec4(0.0);
119
+ float jitter = valueNoise_hash(rayDirection.xy * 4096.0);
120
+ float stepLength = (end - start) / 64.0;
121
+ vec3 sunDirection = normalize(clouds.sunDirection);
122
+ float daylight = smoothstep(-0.08, 0.18, sunDirection.z);
123
+ float silver = pow(max(dot(rayDirection, sunDirection), 0.0), 12.0);
124
+ vec3 radiance = vec3(0.0);
125
+ float transmittance = 1.0;
126
+ for (int sampleIndex = 0; sampleIndex < 64; sampleIndex++) {
127
+ vec3 position = camera + rayDirection * (start + (float(sampleIndex) + jitter) * stepLength);
128
+ float density = clouds_getDensity(position);
129
+ float sunDensity = clouds_getDensity(position + sunDirection * clouds.thickness * 0.28);
130
+ float alpha = 1.0 - exp(-density * max(clouds.density, 0.0) * stepLength);
131
+ vec3 color = clouds_getLighting(density, sunDensity, daylight, silver);
132
+ radiance += transmittance * alpha * color;
133
+ transmittance *= 1.0 - alpha;
134
+ }
135
+ float distanceFade = 1.0 - smoothstep(10000.0, 20000.0, start);
136
+ return vec4(radiance, 1.0 - transmittance) * distanceFade;
137
+ }
138
+ `,
139
+ source: /* wgsl */ `
140
+ struct cloudsUniforms {
141
+ cover: f32,
142
+ altitude: f32,
143
+ thickness: f32,
144
+ scale: f32,
145
+ density: f32,
146
+ time: f32,
147
+ velocity: vec2f,
148
+ sunDirection: vec3f,
149
+ sunColor: vec3f,
150
+ };
151
+ @group(3) @binding(auto) var<uniform> clouds: cloudsUniforms;
152
+ fn clouds_getDensityAt(inputCoordinate: vec3f, height: f32) -> f32 {
153
+ let envelope = smoothstep(0.0, 0.2, height) * (1.0 - smoothstep(0.65, 1.0, height));
154
+ var coordinate = inputCoordinate;
155
+ coordinate += vec3f(8.7, 3.2, clouds.time * 0.003);
156
+ let broad = valueNoise_noise3(coordinate);
157
+ let detail = valueNoise_noise3(coordinate * 2.07 + vec3f(13.1, 7.3, 2.8));
158
+ let fine = valueNoise_noise3(coordinate * 4.23 + vec3f(5.4, 11.7, 8.1));
159
+ let threshold = mix(0.78, 0.18, clamp(clouds.cover, 0.0, 1.0));
160
+ return envelope * smoothstep(threshold, threshold + 0.16, broad * 0.72 + detail * 0.2 + fine * 0.08);
161
+ }
162
+
163
+ fn clouds_getDensity(position: vec3f) -> f32 {
164
+ let height = (position.z - clouds.altitude) / max(clouds.thickness, 1.0);
165
+ return clouds_getDensityAt(vec3f((position.xy - clouds.velocity * clouds.time) / max(clouds.scale, 1.0), height * 0.8), height);
166
+ }
167
+ fn clouds_getLighting(density: f32, sunDensity: f32, daylight: f32, silver: f32) -> vec3f {
168
+ let ambient = mix(vec3f(0.035, 0.05, 0.085), vec3f(0.28, 0.34, 0.42), daylight);
169
+ let sunlight = exp(-(density + sunDensity) * 2.0);
170
+ return ambient + clouds.sunColor * daylight * sunlight * (0.5 + silver * 0.3);
171
+ }
172
+
173
+ // Beer-Lambert extinction toward the sun through the same density used for sky rendering.
174
+ fn clouds_getTransmittance(position: vec3f) -> f32 {
175
+ if (clouds.cover <= 0.0 || clouds.density <= 0.0) { return 1.0; }
176
+ var direction: vec3f = normalize(clouds.sunDirection);
177
+ if (direction.z <= 0.02) { return 1.0; }
178
+ var start: f32 = max((clouds.altitude - position.z) / direction.z, 0.0);
179
+ var end: f32 = min((clouds.altitude + clouds.thickness - position.z) / direction.z, 40000.0);
180
+ if (end <= start) { return 1.0; }
181
+ var stepLength: f32 = (end - start) / 16.0;
182
+ var opticalDepth: f32 = 0.0;
183
+ for (var sampleIndex: i32 = 0; sampleIndex < 16; sampleIndex++) {
184
+ opticalDepth += clouds_getDensity(position + direction * (start + (f32(sampleIndex) + 0.5) * stepLength)) * stepLength;
185
+ }
186
+ return exp(-opticalDepth * max(clouds.density, 0.0));
187
+ }
188
+
189
+ fn clouds_getColor(camera: vec3f, rayDirection: vec3f) -> vec4f {
190
+ if (clouds.cover <= 0.0 || clouds.density <= 0.0 || abs(rayDirection.z) < 0.0001) { return vec4f(0.0); }
191
+ let bottom = (clouds.altitude - camera.z) / rayDirection.z;
192
+ let top = (clouds.altitude + max(clouds.thickness, 1.0) - camera.z) / rayDirection.z;
193
+ let start = max(min(bottom, top), 0.0);
194
+ let end = min(max(bottom, top), 20000.0);
195
+ if (end <= start) { return vec4f(0.0); }
196
+ let jitter = valueNoise_hash(rayDirection.xy * 4096.0);
197
+ let stepLength = (end - start) / 64.0;
198
+ let sunDirection = normalize(clouds.sunDirection);
199
+ let daylight = smoothstep(-0.08, 0.18, sunDirection.z);
200
+ let silver = pow(max(dot(rayDirection, sunDirection), 0.0), 12.0);
201
+ var radiance = vec3f(0.0);
202
+ var transmittance = 1.0;
203
+ for (var sampleIndex = 0; sampleIndex < 64; sampleIndex++) {
204
+ let position = camera + rayDirection * (start + (f32(sampleIndex) + jitter) * stepLength);
205
+ let density = clouds_getDensity(position);
206
+ let sunDensity = clouds_getDensity(position + sunDirection * clouds.thickness * 0.28);
207
+ let alpha = 1.0 - exp(-density * max(clouds.density, 0.0) * stepLength);
208
+ let color = clouds_getLighting(density, sunDensity, daylight, silver);
209
+ radiance += transmittance * alpha * color;
210
+ transmittance *= 1.0 - alpha;
211
+ }
212
+ let distanceFade = 1.0 - smoothstep(10000.0, 20000.0, start);
213
+ return vec4f(radiance, 1.0 - transmittance) * distanceFade;
214
+ }
215
+ `
216
+ } as const satisfies ShaderModule<CloudProps, CloudUniforms>;
@@ -0,0 +1,64 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ import type {ShaderModule} from '../../../lib/shader-module/shader-module';
6
+
7
+ export type FireflyProps = {
8
+ enabled?: number;
9
+ time?: number;
10
+ radius?: number;
11
+ speed?: number;
12
+ pulse?: number;
13
+ };
14
+ export type FireflyUniforms = Required<FireflyProps>;
15
+ const uniforms = {enabled: 0, time: 0, radius: 8, speed: 0.6, pulse: 0.85};
16
+
17
+ /** Seeded smooth wandering and independently phased bioluminescence. Positions are in metres. */
18
+ export const firefly = {
19
+ name: 'firefly',
20
+ uniformTypes: {enabled: 'f32', time: 'f32', radius: 'f32', speed: 'f32', pulse: 'f32'},
21
+ defaultUniforms: uniforms,
22
+ getUniforms(props = {}, previous = uniforms) {
23
+ return {...uniforms, ...previous, ...props};
24
+ },
25
+ source: `struct FireflyUniforms {enabled: f32, time: f32, radius: f32, speed: f32, pulse: f32};
26
+ @group(3) @binding(auto) var<uniform> firefly: FireflyUniforms;
27
+ fn firefly_getPosition(position: vec3f, seed: f32, time: f32) -> vec3f {
28
+ if (firefly.enabled <= 0.0) { return position; }
29
+ let phase = seed * 2.399963;
30
+ let travel = time * firefly.speed;
31
+ let offset = vec3f(sin(travel * 0.71 + phase) + sin(travel * 1.31 + phase * 1.7) * 0.35,
32
+ cos(travel * 0.83 + phase * 1.2) + sin(travel * 0.47 + phase * 2.3) * 0.4,
33
+ sin(travel * 0.59 + phase * 1.9) * 0.3);
34
+ return position + offset * firefly.radius * firefly.enabled;
35
+ }
36
+ fn firefly_getBrightness(seed: f32, time: f32) -> f32 {
37
+ if (firefly.enabled <= 0.0) { return 1.0; }
38
+ let phase = seed * 2.399963;
39
+ let pulse = pow(0.5 + 0.5 * sin(time * firefly.speed * (1.6 + fract(seed * 0.37)) + phase), 3.0);
40
+ return mix(1.0, mix(0.08, 1.0, pulse), firefly.pulse * firefly.enabled);
41
+ }`,
42
+ vs: `layout(std140) uniform fireflyUniforms {
43
+ float enabled;
44
+ float time;
45
+ float radius;
46
+ float speed;
47
+ float pulse;
48
+ } firefly;
49
+ vec3 firefly_getPosition(vec3 position, float seed, float time) {
50
+ if (firefly.enabled <= 0.0) { return position; }
51
+ float phase = seed * 2.399963;
52
+ float travel = time * firefly.speed;
53
+ vec3 offset = vec3(sin(travel * 0.71 + phase) + sin(travel * 1.31 + phase * 1.7) * 0.35,
54
+ cos(travel * 0.83 + phase * 1.2) + sin(travel * 0.47 + phase * 2.3) * 0.4,
55
+ sin(travel * 0.59 + phase * 1.9) * 0.3);
56
+ return position + offset * firefly.radius * firefly.enabled;
57
+ }
58
+ float firefly_getBrightness(float seed, float time) {
59
+ if (firefly.enabled <= 0.0) { return 1.0; }
60
+ float phase = seed * 2.399963;
61
+ float pulse = pow(0.5 + 0.5 * sin(time * firefly.speed * (1.6 + fract(seed * 0.37)) + phase), 3.0);
62
+ return mix(1.0, mix(0.08, 1.0, pulse), firefly.pulse * firefly.enabled);
63
+ }`
64
+ } as const satisfies ShaderModule<FireflyProps, FireflyUniforms>;
@@ -0,0 +1,124 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ import type {ShaderModule} from '../../../lib/shader-module/shader-module';
6
+ import {clouds} from '../clouds/clouds';
7
+
8
+ export type GlobeCloudUniforms = {planetRadius: number};
9
+ export type GlobeCloudProps = Partial<GlobeCloudUniforms>;
10
+
11
+ /** Spherical cloud shell using the existing cloud density, noise and sunlight model.
12
+ * Camera and rays are globe-centered, with the planet's surface at unit radius.
13
+ * The shared clouds uniforms retain metre/second units; sunDirection is globe-centered XYZ.
14
+ */
15
+ export const globeClouds = {
16
+ name: 'globeClouds',
17
+ dependencies: [clouds],
18
+ uniformTypes: {planetRadius: 'f32'},
19
+ defaultUniforms: {planetRadius: 6370972},
20
+ fs: /* glsl */ `
21
+ layout(std140) uniform globeCloudsUniforms { float planetRadius; } globeClouds;
22
+ vec2 globeClouds_intersectSphere(vec3 camera, vec3 direction, float radius) {
23
+ float projected = dot(camera, direction);
24
+ float discriminant = projected * projected - dot(camera, camera) + radius * radius;
25
+ if (discriminant < 0.0) return vec2(-1.0);
26
+ float root = sqrt(discriminant);
27
+ return vec2(-projected - root, -projected + root);
28
+ }
29
+ float globeClouds_getDensity(vec3 position) {
30
+ float height = ((length(position) - 1.0) * globeClouds.planetRadius - clouds.altitude) / max(clouds.thickness, 1.0);
31
+ // Rotate a 3D field rather than wrapping longitude UVs: no seams or pinched poles.
32
+ vec2 angle = clouds.velocity * clouds.time / globeClouds.planetRadius;
33
+ vec3 rotated = vec3(cos(angle.x) * position.x + sin(angle.x) * position.y,
34
+ -sin(angle.x) * position.x + cos(angle.x) * position.y, position.z);
35
+ rotated = vec3(rotated.x, cos(angle.y) * rotated.y + sin(angle.y) * rotated.z,
36
+ -sin(angle.y) * rotated.y + cos(angle.y) * rotated.z);
37
+ return clouds_getDensityAt(rotated * globeClouds.planetRadius / max(clouds.scale, 1.0), height);
38
+ }
39
+ vec4 globeClouds_getColor(vec3 camera, vec3 direction) {
40
+ if (clouds.cover <= 0.0 || clouds.density <= 0.0) return vec4(0.0);
41
+ float bottom = 1.0 + clouds.altitude / globeClouds.planetRadius;
42
+ float top = bottom + max(clouds.thickness, 1.0) / globeClouds.planetRadius;
43
+ vec2 outer = globeClouds_intersectSphere(camera, direction, top);
44
+ if (outer.y <= 0.0) return vec4(0.0);
45
+ float start = max(outer.x, 0.0);
46
+ float end = outer.y;
47
+ vec2 inner = globeClouds_intersectSphere(camera, direction, bottom);
48
+ if (length(camera) < bottom) start = max(start, inner.y);
49
+ else if (inner.x >= start) end = min(end, inner.x);
50
+ vec2 ground = globeClouds_intersectSphere(camera, direction, 1.0);
51
+ if (ground.x >= 0.0) end = min(end, ground.x);
52
+ if (end <= start) return vec4(0.0);
53
+ float stepLength = (end - start) / 32.0;
54
+ float jitter = valueNoise_hash(direction.xy * 4096.0);
55
+ vec3 sunlightDirection = normalize(clouds.sunDirection);
56
+ float silver = pow(max(dot(direction, sunlightDirection), 0.0), 12.0);
57
+ vec3 radiance = vec3(0.0);
58
+ float transmittance = 1.0;
59
+ for (int sampleIndex = 0; sampleIndex < 32; sampleIndex++) {
60
+ vec3 position = camera + direction * (start + (float(sampleIndex) + jitter) * stepLength);
61
+ float density = globeClouds_getDensity(position);
62
+ float sunDensity = globeClouds_getDensity(position + sunlightDirection * clouds.thickness * 0.28 / globeClouds.planetRadius);
63
+ float daylight = smoothstep(-0.08, 0.18, dot(normalize(position), sunlightDirection));
64
+ float alpha = 1.0 - exp(-density * clouds.density * stepLength * globeClouds.planetRadius);
65
+ radiance += transmittance * alpha * clouds_getLighting(density * 0.25, sunDensity * 0.25, daylight, silver);
66
+ transmittance *= 1.0 - alpha;
67
+ if (transmittance < 0.01) break;
68
+ }
69
+ return vec4(radiance, 1.0 - transmittance);
70
+ }
71
+ `,
72
+ source: /* wgsl */ `
73
+ struct globeCloudsUniforms { planetRadius: f32 };
74
+ @group(3) @binding(auto) var<uniform> globeClouds: globeCloudsUniforms;
75
+ fn globeClouds_intersectSphere(camera: vec3f, direction: vec3f, radius: f32) -> vec2f {
76
+ let projected = dot(camera, direction);
77
+ let discriminant = projected * projected - dot(camera, camera) + radius * radius;
78
+ if (discriminant < 0.0) { return vec2f(-1.0); }
79
+ let root = sqrt(discriminant);
80
+ return vec2f(-projected - root, -projected + root);
81
+ }
82
+ fn globeClouds_getDensity(position: vec3f) -> f32 {
83
+ let height = ((length(position) - 1.0) * globeClouds.planetRadius - clouds.altitude) / max(clouds.thickness, 1.0);
84
+ let angle = clouds.velocity * clouds.time / globeClouds.planetRadius;
85
+ var rotated = vec3f(cos(angle.x) * position.x + sin(angle.x) * position.y,
86
+ -sin(angle.x) * position.x + cos(angle.x) * position.y, position.z);
87
+ rotated = vec3f(rotated.x, cos(angle.y) * rotated.y + sin(angle.y) * rotated.z,
88
+ -sin(angle.y) * rotated.y + cos(angle.y) * rotated.z);
89
+ return clouds_getDensityAt(rotated * globeClouds.planetRadius / max(clouds.scale, 1.0), height);
90
+ }
91
+ fn globeClouds_getColor(camera: vec3f, direction: vec3f) -> vec4f {
92
+ if (clouds.cover <= 0.0 || clouds.density <= 0.0) { return vec4f(0.0); }
93
+ let bottom = 1.0 + clouds.altitude / globeClouds.planetRadius;
94
+ let top = bottom + max(clouds.thickness, 1.0) / globeClouds.planetRadius;
95
+ let outer = globeClouds_intersectSphere(camera, direction, top);
96
+ if (outer.y <= 0.0) { return vec4f(0.0); }
97
+ var start = max(outer.x, 0.0);
98
+ var end = outer.y;
99
+ let inner = globeClouds_intersectSphere(camera, direction, bottom);
100
+ if (length(camera) < bottom) { start = max(start, inner.y); }
101
+ else if (inner.x >= start) { end = min(end, inner.x); }
102
+ let ground = globeClouds_intersectSphere(camera, direction, 1.0);
103
+ if (ground.x >= 0.0) { end = min(end, ground.x); }
104
+ if (end <= start) { return vec4f(0.0); }
105
+ let stepLength = (end - start) / 32.0;
106
+ let jitter = valueNoise_hash(direction.xy * 4096.0);
107
+ let sunlightDirection = normalize(clouds.sunDirection);
108
+ let silver = pow(max(dot(direction, sunlightDirection), 0.0), 12.0);
109
+ var radiance = vec3f(0.0);
110
+ var transmittance = 1.0;
111
+ for (var sampleIndex = 0; sampleIndex < 32; sampleIndex++) {
112
+ let position = camera + direction * (start + (f32(sampleIndex) + jitter) * stepLength);
113
+ let density = globeClouds_getDensity(position);
114
+ let sunDensity = globeClouds_getDensity(position + sunlightDirection * clouds.thickness * 0.28 / globeClouds.planetRadius);
115
+ let daylight = smoothstep(-0.08, 0.18, dot(normalize(position), sunlightDirection));
116
+ let alpha = 1.0 - exp(-density * clouds.density * stepLength * globeClouds.planetRadius);
117
+ radiance += transmittance * alpha * clouds_getLighting(density * 0.25, sunDensity * 0.25, daylight, silver);
118
+ transmittance *= 1.0 - alpha;
119
+ if (transmittance < 0.01) { break; }
120
+ }
121
+ return vec4f(radiance, 1.0 - transmittance);
122
+ }
123
+ `
124
+ } as const satisfies ShaderModule<GlobeCloudProps, GlobeCloudUniforms>;
@@ -0,0 +1,55 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ import {NumberArray3} from '@math.gl/core';
6
+ import {ShaderModule} from '../../../lib/shader-module/shader-module';
7
+ import {floatColors} from '../../color/float-colors';
8
+ import {lighting} from '../lights/lighting';
9
+ import {PHONG_VS, PHONG_FS} from '../phong-material/phong-shaders-glsl';
10
+ import {PHONG_WGSL} from '../phong-material/phong-shaders-wgsl';
11
+
12
+ export type GouraudMaterialProps = {
13
+ unlit?: boolean;
14
+ ambient?: number;
15
+ diffuse?: number;
16
+ /** Specularity exponent */
17
+ shininess?: number;
18
+ specularColor?: [number, number, number];
19
+ };
20
+
21
+ const DEFAULT_SPECULAR_COLOR: NumberArray3 = [38.25, 38.25, 38.25];
22
+
23
+ /** In Gouraud shading, color is calculated for each triangle vertex normal, and then color is interpolated colors across the triangle */
24
+ export const gouraudMaterial: ShaderModule<GouraudMaterialProps> = {
25
+ props: {} as GouraudMaterialProps,
26
+
27
+ name: 'gouraudMaterial',
28
+ bindingLayout: [{name: 'gouraudMaterial', group: 3}],
29
+ // Note these are switched between phong and gouraud
30
+ vs: PHONG_FS.replace('phongMaterial', 'gouraudMaterial'),
31
+ fs: PHONG_VS.replace('phongMaterial', 'gouraudMaterial'),
32
+ source: PHONG_WGSL.replaceAll('phongMaterial', 'gouraudMaterial'),
33
+ defines: {
34
+ LIGHTING_VERTEX: true
35
+ },
36
+ dependencies: [lighting, floatColors],
37
+ uniformTypes: {
38
+ unlit: 'i32',
39
+ ambient: 'f32',
40
+ diffuse: 'f32',
41
+ shininess: 'f32',
42
+ specularColor: 'vec3<f32>'
43
+ },
44
+ defaultUniforms: {
45
+ unlit: false,
46
+ ambient: 0.35,
47
+ diffuse: 0.6,
48
+ shininess: 32,
49
+ specularColor: DEFAULT_SPECULAR_COLOR
50
+ },
51
+
52
+ getUniforms(props: GouraudMaterialProps) {
53
+ return {...gouraudMaterial.defaultUniforms, ...props};
54
+ }
55
+ };
@@ -0,0 +1,36 @@
1
+ # heightFog
2
+
3
+ Analytic fog extinction for fragment shaders in GLSL and WGSL. Call
4
+ `heightFog_getColor(color, position, cameraPosition)` with both positions in the same
5
+ local east/north/up metre coordinates. It preserves alpha and mixes linear RGB with
6
+ `heightFog.color`. `heightFog_getTransmittance(position, cameraPosition)` returns the
7
+ unscattered fraction for custom compositing.
8
+
9
+ `density` is base extinction per metre, `baseHeight` is in metres, and `heightFalloff`
10
+ is inverse metres. Density stays constant below the base and decays exponentially above
11
+ it. Zero density disables fog; zero falloff gives uniform distance fog. The ray integral
12
+ handles horizontal rays and rays crossing the base without a marching loop or history.
13
+ This is a constant-color atmosphere approximation, without shadowing or directional scattering.
14
+
15
+
16
+ `heightFogFunctions` exposes the same calculation without a uniform block. Its
17
+ `heightFog_getRayTransmittance(rayLength, cameraHeight, fragmentHeight, density, baseHeight, heightFalloff)`
18
+ function accepts scalar metre-space ray length and heights, allowing callers to choose an up
19
+ axis and supply their own uniform layout. The `heightFog` material module depends on it, as does
20
+ `@luma.gl/engine/effects`' analytic height-fog pass. The two paths therefore share the density integral.
21
+
22
+
23
+ For drifting wisps, set `variation` from 0 to 1, `wispScale` in metres, `velocity`
24
+ in metres per second, and `time` in seconds. Defaults keep the uniform analytic path.
25
+ With variation enabled, twelve ray segments sample warped, multiscale world-space
26
+ noise; each segment retains the analytic height integral. This is a bounded-cost density
27
+ approximation, not a volumetric fluid simulation. Pausing time freezes it; zero velocity
28
+ keeps a static, nonuniform field. Both material and depth-pass fog call the same
29
+ `heightFog_getSpatialTransmittance` helper. It needs no noise textures or temporal history.
30
+ The tint remains constant; density varies. Very long rays through small wisps can undersample
31
+ this fixed twelve-segment approximation, so choose bank sizes appropriate to the scene.
32
+
33
+ Set `evolutionSpeed` above zero for gentle internal deformation in addition to advection.
34
+ Zero retains the rigid density field. Applications control time; freeze it to pause both
35
+ forms of motion. When changing drift speed interactively, integrate distance over time
36
+ instead of multiplying the new speed by the entire elapsed clock.
@@ -0,0 +1,116 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ import type {ShaderModule} from '../../../lib/shader-module/shader-module';
6
+ import {valueNoise} from '../../math/value-noise/value-noise';
7
+
8
+ /** Uniform-free analytic extinction shared by materials and screen-space effects.
9
+ * Lengths and heights are metres; density and falloff are inverse metres.
10
+ */
11
+ export const heightFogFunctions = {
12
+ name: 'heightFogFunctions',
13
+ dependencies: [valueNoise],
14
+ fs: /* glsl */ `
15
+ float heightFog_getRayTransmittance(float rayLength, float cameraHeight, float fragmentHeight, float density, float baseHeight, float heightFalloff) {
16
+ float startHeight = (cameraHeight - baseHeight) * max(heightFalloff, 0.0);
17
+ float endHeight = (fragmentHeight - baseHeight) * max(heightFalloff, 0.0);
18
+ float lowerHeight = min(startHeight, endHeight);
19
+ float upperHeight = max(startHeight, endHeight);
20
+ float averageDensity = 1.0;
21
+ if (upperHeight > 0.0) {
22
+ float heightSpan = upperHeight - lowerHeight;
23
+ if (heightSpan < 0.001) {
24
+ averageDensity = exp(-max((startHeight + endHeight) * 0.5, 0.0));
25
+ } else if (lowerHeight >= 0.0) {
26
+ averageDensity = (exp(-lowerHeight) - exp(-upperHeight)) / heightSpan;
27
+ } else {
28
+ averageDensity = (-lowerHeight + 1.0 - exp(-upperHeight)) / heightSpan;
29
+ }
30
+ }
31
+ return exp(-max(density, 0.0) * rayLength * averageDensity);
32
+ }
33
+ float heightFog_hash(vec2 cell) { return valueNoise_hash(cell); }
34
+ float heightFog_noise(vec2 position) { return valueNoise_noise(position); }
35
+ // Integrate drifting density along the ray so wisps occupy space rather than coat surfaces.
36
+ float heightFog_getSpatialTransmittance(vec3 camera, vec3 position, vec3 upDirection,
37
+ float density, float baseHeight, float heightFalloff, float variation, float wispScale,
38
+ float time, vec3 velocity, float evolutionSpeed) {
39
+ if (density <= 0.0) return 1.0;
40
+ float rayLength = distance(camera, position);
41
+ if (variation <= 0.0) return heightFog_getRayTransmittance(rayLength, dot(camera, upDirection),
42
+ dot(position, upDirection), density, baseHeight, heightFalloff);
43
+ vec3 reference = abs(upDirection.z) < 0.9 ? vec3(0.0, 0.0, 1.0) : vec3(0.0, 1.0, 0.0);
44
+ vec3 horizontal = normalize(cross(reference, upDirection));
45
+ vec3 forward = cross(upDirection, horizontal);
46
+ float transmittance = 1.0;
47
+ for (int sampleIndex = 0; sampleIndex < 12; sampleIndex++) {
48
+ float fraction = float(sampleIndex) / 12.0;
49
+ vec3 start = mix(camera, position, fraction);
50
+ vec3 end = mix(camera, position, fraction + 1.0 / 12.0);
51
+ vec3 samplePosition = (start + end) * 0.5 - velocity * time;
52
+ vec2 coordinate = vec2(dot(samplePosition, horizontal), dot(samplePosition, forward)) / max(wispScale, 1.0);
53
+ coordinate.y = coordinate.y * 1.8 + dot(samplePosition, upDirection) / max(wispScale, 1.0);
54
+ float warp = heightFog_noise(coordinate * 0.45 + vec2(8.3, 2.7) + time * evolutionSpeed * vec2(1.0, 0.37));
55
+ float broad = heightFog_noise(coordinate + vec2(warp * 2.0, warp * 0.8));
56
+ float detail = heightFog_noise(mat2(0.8, 0.6, -0.6, 0.8) * coordinate * 2.17 + vec2(17.1, 9.2) + broad * 0.7);
57
+ float modulation = mix(1.0, 1.8 * smoothstep(0.15, 0.85, broad * 0.7 + detail * 0.3), clamp(variation, 0.0, 1.0));
58
+ transmittance *= heightFog_getRayTransmittance(rayLength / 12.0, dot(start, upDirection),
59
+ dot(end, upDirection), density * modulation, baseHeight, heightFalloff);
60
+ }
61
+ return transmittance;
62
+ }
63
+
64
+ `,
65
+ source: /* wgsl */ `
66
+ fn heightFog_getRayTransmittance(rayLength: f32, cameraHeight: f32, fragmentHeight: f32, density: f32, baseHeight: f32, heightFalloff: f32) -> f32 {
67
+ let startHeight = (cameraHeight - baseHeight) * max(heightFalloff, 0.0);
68
+ let endHeight = (fragmentHeight - baseHeight) * max(heightFalloff, 0.0);
69
+ let lowerHeight = min(startHeight, endHeight);
70
+ let upperHeight = max(startHeight, endHeight);
71
+ var averageDensity = 1.0;
72
+ if (upperHeight > 0.0) {
73
+ let heightSpan = upperHeight - lowerHeight;
74
+ if (heightSpan < 0.001) {
75
+ averageDensity = exp(-max((startHeight + endHeight) * 0.5, 0.0));
76
+ } else if (lowerHeight >= 0.0) {
77
+ averageDensity = (exp(-lowerHeight) - exp(-upperHeight)) / heightSpan;
78
+ } else {
79
+ averageDensity = (-lowerHeight + 1.0 - exp(-upperHeight)) / heightSpan;
80
+ }
81
+ }
82
+ return exp(-max(density, 0.0) * rayLength * averageDensity);
83
+ }
84
+ fn heightFog_hash(cell: vec2f) -> f32 { return valueNoise_hash(cell); }
85
+ fn heightFog_noise(position: vec2f) -> f32 { return valueNoise_noise(position); }
86
+ // Integrate drifting density along the ray so wisps occupy space rather than coat surfaces.
87
+ fn heightFog_getSpatialTransmittance(camera: vec3f, position: vec3f, upDirection: vec3f,
88
+ density: f32, baseHeight: f32, heightFalloff: f32, variation: f32, wispScale: f32,
89
+ time: f32, velocity: vec3f, evolutionSpeed: f32) -> f32 {
90
+ if (density <= 0.0) { return 1.0; }
91
+ let rayLength = distance(camera, position);
92
+ if (variation <= 0.0) { return heightFog_getRayTransmittance(rayLength, dot(camera, upDirection),
93
+ dot(position, upDirection), density, baseHeight, heightFalloff); }
94
+ let reference = select(vec3f(0.0, 1.0, 0.0), vec3f(0.0, 0.0, 1.0), abs(upDirection.z) < 0.9);
95
+ let horizontal = normalize(cross(reference, upDirection));
96
+ let forward = cross(upDirection, horizontal);
97
+ var transmittance = 1.0;
98
+ for (var sampleIndex = 0; sampleIndex < 12; sampleIndex++) {
99
+ let fraction = f32(sampleIndex) / 12.0;
100
+ let start = mix(camera, position, fraction);
101
+ let end = mix(camera, position, fraction + 1.0 / 12.0);
102
+ let samplePosition = (start + end) * 0.5 - velocity * time;
103
+ var coordinate = vec2f(dot(samplePosition, horizontal), dot(samplePosition, forward)) / max(wispScale, 1.0);
104
+ coordinate.y = coordinate.y * 1.8 + dot(samplePosition, upDirection) / max(wispScale, 1.0);
105
+ let warp = heightFog_noise(coordinate * 0.45 + vec2f(8.3, 2.7) + time * evolutionSpeed * vec2f(1.0, 0.37));
106
+ let broad = heightFog_noise(coordinate + vec2f(warp * 2.0, warp * 0.8));
107
+ let detail = heightFog_noise(mat2x2f(vec2f(0.8, 0.6), vec2f(-0.6, 0.8)) * coordinate * 2.17 + vec2f(17.1, 9.2) + vec2f(broad * 0.7));
108
+ let modulation = mix(1.0, 1.8 * smoothstep(0.15, 0.85, broad * 0.7 + detail * 0.3), clamp(variation, 0.0, 1.0));
109
+ transmittance *= heightFog_getRayTransmittance(rayLength / 12.0, dot(start, upDirection),
110
+ dot(end, upDirection), density * modulation, baseHeight, heightFalloff);
111
+ }
112
+ return transmittance;
113
+ }
114
+
115
+ `
116
+ } as const satisfies ShaderModule;