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

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 (693) hide show
  1. package/LICENSE +38 -0
  2. package/README.md +25 -2
  3. package/dist/dist.dev.js +19686 -0
  4. package/dist/dist.min.js +12180 -0
  5. package/dist/glsl.cjs +33 -0
  6. package/dist/glsl.cjs.map +6 -0
  7. package/dist/glsl.d.ts +6 -0
  8. package/dist/glsl.d.ts.map +1 -0
  9. package/dist/glsl.js +7 -0
  10. package/dist/glsl.js.map +1 -0
  11. package/dist/index.cjs +243 -0
  12. package/dist/index.cjs.map +6 -0
  13. package/dist/index.d.ts +91 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +65 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/lib/color/normalize-byte-colors.cjs +50 -0
  18. package/dist/lib/color/normalize-byte-colors.d.ts +23 -0
  19. package/dist/lib/color/normalize-byte-colors.d.ts.map +1 -0
  20. package/dist/lib/color/normalize-byte-colors.js +42 -0
  21. package/dist/lib/color/normalize-byte-colors.js.map +1 -0
  22. package/dist/lib/filters/prop-types.cjs +90 -0
  23. package/dist/lib/filters/prop-types.d.ts +44 -0
  24. package/dist/lib/filters/prop-types.d.ts.map +1 -0
  25. package/dist/lib/filters/prop-types.js +96 -0
  26. package/dist/lib/filters/prop-types.js.map +1 -0
  27. package/dist/lib/glsl-shader-assembler.cjs +50 -0
  28. package/dist/lib/glsl-shader-assembler.d.ts +19 -0
  29. package/dist/lib/glsl-shader-assembler.d.ts.map +1 -0
  30. package/dist/lib/glsl-shader-assembler.js +29 -0
  31. package/dist/lib/glsl-shader-assembler.js.map +1 -0
  32. package/dist/lib/glsl-utils/get-shader-info.cjs +52 -0
  33. package/dist/lib/glsl-utils/get-shader-info.d.ts +9 -0
  34. package/dist/lib/glsl-utils/get-shader-info.d.ts.map +1 -0
  35. package/dist/lib/glsl-utils/get-shader-info.js +33 -0
  36. package/dist/lib/glsl-utils/get-shader-info.js.map +1 -0
  37. package/dist/lib/glsl-utils/shader-utils.cjs +126 -0
  38. package/dist/lib/glsl-utils/shader-utils.d.ts +23 -0
  39. package/dist/lib/glsl-utils/shader-utils.d.ts.map +1 -0
  40. package/dist/lib/glsl-utils/shader-utils.js +92 -0
  41. package/dist/lib/glsl-utils/shader-utils.js.map +1 -0
  42. package/dist/lib/preprocessor/preprocessor.cjs +107 -0
  43. package/dist/lib/preprocessor/preprocessor.d.ts +15 -0
  44. package/dist/lib/preprocessor/preprocessor.d.ts.map +1 -0
  45. package/dist/lib/preprocessor/preprocessor.js +99 -0
  46. package/dist/lib/preprocessor/preprocessor.js.map +1 -0
  47. package/dist/lib/shader-assembler-base.cjs +133 -0
  48. package/dist/lib/shader-assembler-base.d.ts +52 -0
  49. package/dist/lib/shader-assembler-base.d.ts.map +1 -0
  50. package/dist/lib/shader-assembler-base.js +128 -0
  51. package/dist/lib/shader-assembler-base.js.map +1 -0
  52. package/dist/lib/shader-assembler.cjs +33 -0
  53. package/dist/lib/shader-assembler.d.ts +4 -0
  54. package/dist/lib/shader-assembler.d.ts.map +1 -0
  55. package/dist/lib/shader-assembler.js +7 -0
  56. package/dist/lib/shader-assembler.js.map +1 -0
  57. package/dist/lib/shader-assembly/assemble-glsl-shaders.cjs +200 -0
  58. package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts +69 -0
  59. package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts.map +1 -0
  60. package/dist/lib/shader-assembly/assemble-glsl-shaders.js +221 -0
  61. package/dist/lib/shader-assembly/assemble-glsl-shaders.js.map +1 -0
  62. package/dist/lib/shader-assembly/assemble-shaders.cjs +42 -0
  63. package/dist/lib/shader-assembly/assemble-shaders.d.ts +10 -0
  64. package/dist/lib/shader-assembly/assemble-shaders.d.ts.map +1 -0
  65. package/dist/lib/shader-assembly/assemble-shaders.js +10 -0
  66. package/dist/lib/shader-assembly/assemble-shaders.js.map +1 -0
  67. package/dist/lib/shader-assembly/assemble-wgsl-shaders.cjs +501 -0
  68. package/dist/lib/shader-assembly/assemble-wgsl-shaders.d.ts +71 -0
  69. package/dist/lib/shader-assembly/assemble-wgsl-shaders.d.ts.map +1 -0
  70. package/dist/lib/shader-assembly/assemble-wgsl-shaders.js +473 -0
  71. package/dist/lib/shader-assembly/assemble-wgsl-shaders.js.map +1 -0
  72. package/dist/lib/shader-assembly/platform-defines.cjs +79 -0
  73. package/dist/lib/shader-assembly/platform-defines.d.ts +4 -0
  74. package/dist/lib/shader-assembly/platform-defines.d.ts.map +1 -0
  75. package/dist/lib/shader-assembly/platform-defines.js +52 -0
  76. package/dist/lib/shader-assembly/platform-defines.js.map +1 -0
  77. package/dist/lib/shader-assembly/platform-info.cjs +15 -0
  78. package/dist/lib/shader-assembly/platform-info.d.ts +20 -0
  79. package/dist/lib/shader-assembly/platform-info.d.ts.map +1 -0
  80. package/dist/lib/shader-assembly/platform-info.js +5 -0
  81. package/dist/lib/shader-assembly/platform-info.js.map +1 -0
  82. package/dist/lib/shader-assembly/shader-assembly-shared.cjs +96 -0
  83. package/dist/lib/shader-assembly/shader-assembly-shared.d.ts +16 -0
  84. package/dist/lib/shader-assembly/shader-assembly-shared.d.ts.map +1 -0
  85. package/dist/lib/shader-assembly/shader-assembly-shared.js +79 -0
  86. package/dist/lib/shader-assembly/shader-assembly-shared.js.map +1 -0
  87. package/dist/lib/shader-assembly/shader-assembly-types.cjs +15 -0
  88. package/dist/lib/shader-assembly/shader-assembly-types.d.ts +128 -0
  89. package/dist/lib/shader-assembly/shader-assembly-types.d.ts.map +1 -0
  90. package/dist/lib/shader-assembly/shader-assembly-types.js +5 -0
  91. package/dist/lib/shader-assembly/shader-assembly-types.js.map +1 -0
  92. package/dist/lib/shader-assembly/shader-hooks.cjs +103 -0
  93. package/dist/lib/shader-assembly/shader-hooks.d.ts +45 -0
  94. package/dist/lib/shader-assembly/shader-hooks.d.ts.map +1 -0
  95. package/dist/lib/shader-assembly/shader-hooks.js +84 -0
  96. package/dist/lib/shader-assembly/shader-hooks.js.map +1 -0
  97. package/dist/lib/shader-assembly/shader-injections.cjs +180 -0
  98. package/dist/lib/shader-assembly/shader-injections.d.ts +34 -0
  99. package/dist/lib/shader-assembly/shader-injections.d.ts.map +1 -0
  100. package/dist/lib/shader-assembly/shader-injections.js +183 -0
  101. package/dist/lib/shader-assembly/shader-injections.js.map +1 -0
  102. package/dist/lib/shader-assembly/shader-plugin-varyings.cjs +417 -0
  103. package/dist/lib/shader-assembly/shader-plugin-varyings.d.ts +15 -0
  104. package/dist/lib/shader-assembly/shader-plugin-varyings.d.ts.map +1 -0
  105. package/dist/lib/shader-assembly/shader-plugin-varyings.js +412 -0
  106. package/dist/lib/shader-assembly/shader-plugin-varyings.js.map +1 -0
  107. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.cjs +254 -0
  108. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.d.ts +12 -0
  109. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.d.ts.map +1 -0
  110. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.js +237 -0
  111. package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.js.map +1 -0
  112. package/dist/lib/shader-assembly/wgsl-binding-debug.cjs +166 -0
  113. package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts +37 -0
  114. package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts.map +1 -0
  115. package/dist/lib/shader-assembly/wgsl-binding-debug.js +144 -0
  116. package/dist/lib/shader-assembly/wgsl-binding-debug.js.map +1 -0
  117. package/dist/lib/shader-assembly/wgsl-binding-scan.cjs +184 -0
  118. package/dist/lib/shader-assembly/wgsl-binding-scan.d.ts +19 -0
  119. package/dist/lib/shader-assembly/wgsl-binding-scan.d.ts.map +1 -0
  120. package/dist/lib/shader-assembly/wgsl-binding-scan.js +151 -0
  121. package/dist/lib/shader-assembly/wgsl-binding-scan.js.map +1 -0
  122. package/dist/lib/shader-assembly/wgsl-interface-scan.cjs +502 -0
  123. package/dist/lib/shader-assembly/wgsl-interface-scan.d.ts +14 -0
  124. package/dist/lib/shader-assembly/wgsl-interface-scan.d.ts.map +1 -0
  125. package/dist/lib/shader-assembly/wgsl-interface-scan.js +498 -0
  126. package/dist/lib/shader-assembly/wgsl-interface-scan.js.map +1 -0
  127. package/dist/lib/shader-generator/generate-shader.cjs +36 -0
  128. package/dist/lib/shader-generator/generate-shader.d.ts +8 -0
  129. package/dist/lib/shader-generator/generate-shader.d.ts.map +1 -0
  130. package/dist/lib/shader-generator/generate-shader.js +15 -0
  131. package/dist/lib/shader-generator/generate-shader.js.map +1 -0
  132. package/dist/lib/shader-generator/glsl/generate-glsl.cjs +94 -0
  133. package/dist/lib/shader-generator/glsl/generate-glsl.d.ts +7 -0
  134. package/dist/lib/shader-generator/glsl/generate-glsl.d.ts.map +1 -0
  135. package/dist/lib/shader-generator/glsl/generate-glsl.js +79 -0
  136. package/dist/lib/shader-generator/glsl/generate-glsl.js.map +1 -0
  137. package/dist/lib/shader-generator/utils/capitalize.cjs +29 -0
  138. package/dist/lib/shader-generator/utils/capitalize.d.ts +7 -0
  139. package/dist/lib/shader-generator/utils/capitalize.d.ts.map +1 -0
  140. package/dist/lib/shader-generator/utils/capitalize.js +12 -0
  141. package/dist/lib/shader-generator/utils/capitalize.js.map +1 -0
  142. package/dist/lib/shader-generator/wgsl/generate-wgsl.cjs +46 -0
  143. package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts +7 -0
  144. package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts.map +1 -0
  145. package/dist/lib/shader-generator/wgsl/generate-wgsl.js +23 -0
  146. package/dist/lib/shader-generator/wgsl/generate-wgsl.js.map +1 -0
  147. package/dist/lib/shader-module/composite-shader-pass.cjs +15 -0
  148. package/dist/lib/shader-module/composite-shader-pass.d.ts +41 -0
  149. package/dist/lib/shader-module/composite-shader-pass.d.ts.map +1 -0
  150. package/dist/lib/shader-module/composite-shader-pass.js +5 -0
  151. package/dist/lib/shader-module/composite-shader-pass.js.map +1 -0
  152. package/dist/lib/shader-module/shader-module-dependencies.cjs +83 -0
  153. package/dist/lib/shader-module/shader-module-dependencies.d.ts +39 -0
  154. package/dist/lib/shader-module/shader-module-dependencies.d.ts.map +1 -0
  155. package/dist/lib/shader-module/shader-module-dependencies.js +103 -0
  156. package/dist/lib/shader-module/shader-module-dependencies.js.map +1 -0
  157. package/dist/lib/shader-module/shader-module-uniform-layout.cjs +224 -0
  158. package/dist/lib/shader-module/shader-module-uniform-layout.d.ts +91 -0
  159. package/dist/lib/shader-module/shader-module-uniform-layout.d.ts.map +1 -0
  160. package/dist/lib/shader-module/shader-module-uniform-layout.js +253 -0
  161. package/dist/lib/shader-module/shader-module-uniform-layout.js.map +1 -0
  162. package/dist/lib/shader-module/shader-module.cjs +105 -0
  163. package/dist/lib/shader-module/shader-module.d.ts +98 -0
  164. package/dist/lib/shader-module/shader-module.d.ts.map +1 -0
  165. package/dist/lib/shader-module/shader-module.js +104 -0
  166. package/dist/lib/shader-module/shader-module.js.map +1 -0
  167. package/dist/lib/shader-module/shader-pass.cjs +15 -0
  168. package/dist/lib/shader-module/shader-pass.d.ts +48 -0
  169. package/dist/lib/shader-module/shader-pass.d.ts.map +1 -0
  170. package/dist/lib/shader-module/shader-pass.js +5 -0
  171. package/dist/lib/shader-module/shader-pass.js.map +1 -0
  172. package/dist/lib/shader-plugin.cjs +117 -0
  173. package/dist/lib/shader-plugin.d.ts +68 -0
  174. package/dist/lib/shader-plugin.d.ts.map +1 -0
  175. package/dist/lib/shader-plugin.js +98 -0
  176. package/dist/lib/shader-plugin.js.map +1 -0
  177. package/dist/lib/shader-transpiler/shader-transpiler.cjs +15 -0
  178. package/dist/lib/shader-transpiler/shader-transpiler.d.ts +27 -0
  179. package/dist/lib/shader-transpiler/shader-transpiler.d.ts.map +1 -0
  180. package/dist/lib/shader-transpiler/shader-transpiler.js +5 -0
  181. package/dist/lib/shader-transpiler/shader-transpiler.js.map +1 -0
  182. package/dist/lib/shader-transpiler/transpile-glsl-shader.cjs +71 -0
  183. package/dist/lib/shader-transpiler/transpile-glsl-shader.d.ts +9 -0
  184. package/dist/lib/shader-transpiler/transpile-glsl-shader.d.ts.map +1 -0
  185. package/dist/lib/shader-transpiler/transpile-glsl-shader.js +69 -0
  186. package/dist/lib/shader-transpiler/transpile-glsl-shader.js.map +1 -0
  187. package/dist/lib/utils/assert.cjs +34 -0
  188. package/dist/lib/utils/assert.d.ts +2 -0
  189. package/dist/lib/utils/assert.d.ts.map +1 -0
  190. package/dist/lib/utils/assert.js +13 -0
  191. package/dist/lib/utils/assert.js.map +1 -0
  192. package/dist/lib/utils/uniform-types.cjs +15 -0
  193. package/dist/lib/utils/uniform-types.d.ts +18 -0
  194. package/dist/lib/utils/uniform-types.d.ts.map +1 -0
  195. package/dist/lib/utils/uniform-types.js +5 -0
  196. package/dist/lib/utils/uniform-types.js.map +1 -0
  197. package/dist/lib/wgsl-shader-assembler.cjs +99 -0
  198. package/dist/lib/wgsl-shader-assembler.d.ts +34 -0
  199. package/dist/lib/wgsl-shader-assembler.d.ts.map +1 -0
  200. package/dist/lib/wgsl-shader-assembler.js +84 -0
  201. package/dist/lib/wgsl-shader-assembler.js.map +1 -0
  202. package/dist/module-injectors.cjs +59 -0
  203. package/dist/module-injectors.d.ts +3 -0
  204. package/dist/module-injectors.d.ts.map +1 -0
  205. package/dist/module-injectors.js +31 -0
  206. package/dist/module-injectors.js.map +1 -0
  207. package/dist/modules/color/float-colors.cjs +275 -0
  208. package/dist/modules/color/float-colors.d.ts +132 -0
  209. package/dist/modules/color/float-colors.d.ts.map +1 -0
  210. package/dist/modules/color/float-colors.js +248 -0
  211. package/dist/modules/color/float-colors.js.map +1 -0
  212. package/dist/modules/engine/clip/clip.cjs +152 -0
  213. package/dist/modules/engine/clip/clip.d.ts +12 -0
  214. package/dist/modules/engine/clip/clip.d.ts.map +1 -0
  215. package/dist/modules/engine/clip/clip.js +129 -0
  216. package/dist/modules/engine/clip/clip.js.map +1 -0
  217. package/dist/modules/engine/filter/filter.cjs +111 -0
  218. package/dist/modules/engine/filter/filter.d.ts +12 -0
  219. package/dist/modules/engine/filter/filter.d.ts.map +1 -0
  220. package/dist/modules/engine/filter/filter.js +88 -0
  221. package/dist/modules/engine/filter/filter.js.map +1 -0
  222. package/dist/modules/engine/geometry/geometry.cjs +63 -0
  223. package/dist/modules/engine/geometry/geometry.d.ts +9 -0
  224. package/dist/modules/engine/geometry/geometry.d.ts.map +1 -0
  225. package/dist/modules/engine/geometry/geometry.js +42 -0
  226. package/dist/modules/engine/geometry/geometry.js.map +1 -0
  227. package/dist/modules/engine/gpu-animation/gpu-animation.cjs +255 -0
  228. package/dist/modules/engine/gpu-animation/gpu-animation.d.ts +34 -0
  229. package/dist/modules/engine/gpu-animation/gpu-animation.d.ts.map +1 -0
  230. package/dist/modules/engine/gpu-animation/gpu-animation.js +228 -0
  231. package/dist/modules/engine/gpu-animation/gpu-animation.js.map +1 -0
  232. package/dist/modules/engine/picking/picking.cjs +210 -0
  233. package/dist/modules/engine/picking/picking.d.ts +77 -0
  234. package/dist/modules/engine/picking/picking.d.ts.map +1 -0
  235. package/dist/modules/engine/picking/picking.js +198 -0
  236. package/dist/modules/engine/picking/picking.js.map +1 -0
  237. package/dist/modules/engine/project/project.cjs +138 -0
  238. package/dist/modules/engine/project/project.d.ts +39 -0
  239. package/dist/modules/engine/project/project.d.ts.map +1 -0
  240. package/dist/modules/engine/project/project.js +129 -0
  241. package/dist/modules/engine/project/project.js.map +1 -0
  242. package/dist/modules/engine/skin/skin.cjs +212 -0
  243. package/dist/modules/engine/skin/skin.d.ts +52 -0
  244. package/dist/modules/engine/skin/skin.d.ts.map +1 -0
  245. package/dist/modules/engine/skin/skin.js +179 -0
  246. package/dist/modules/engine/skin/skin.js.map +1 -0
  247. package/dist/modules/engine/transform/transform.cjs +72 -0
  248. package/dist/modules/engine/transform/transform.d.ts +6 -0
  249. package/dist/modules/engine/transform/transform.d.ts.map +1 -0
  250. package/dist/modules/engine/transform/transform.js +49 -0
  251. package/dist/modules/engine/transform/transform.js.map +1 -0
  252. package/dist/modules/geometry/path-dash/path-dash.cjs +93 -0
  253. package/dist/modules/geometry/path-dash/path-dash.d.ts +10 -0
  254. package/dist/modules/geometry/path-dash/path-dash.d.ts.map +1 -0
  255. package/dist/modules/geometry/path-dash/path-dash.js +66 -0
  256. package/dist/modules/geometry/path-dash/path-dash.js.map +1 -0
  257. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.cjs +117 -0
  258. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.d.ts +3 -0
  259. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.d.ts.map +1 -0
  260. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.js +87 -0
  261. package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.js.map +1 -0
  262. package/dist/modules/geometry/pattern-fill/pattern-fill.cjs +64 -0
  263. package/dist/modules/geometry/pattern-fill/pattern-fill.d.ts +14 -0
  264. package/dist/modules/geometry/pattern-fill/pattern-fill.d.ts.map +1 -0
  265. package/dist/modules/geometry/pattern-fill/pattern-fill.js +43 -0
  266. package/dist/modules/geometry/pattern-fill/pattern-fill.js.map +1 -0
  267. package/dist/modules/geometry/point-glow/point-glow.cjs +104 -0
  268. package/dist/modules/geometry/point-glow/point-glow.d.ts +11 -0
  269. package/dist/modules/geometry/point-glow/point-glow.d.ts.map +1 -0
  270. package/dist/modules/geometry/point-glow/point-glow.js +77 -0
  271. package/dist/modules/geometry/point-glow/point-glow.js.map +1 -0
  272. package/dist/modules/geometry/precipitation/precipitation.cjs +122 -0
  273. package/dist/modules/geometry/precipitation/precipitation.d.ts +40 -0
  274. package/dist/modules/geometry/precipitation/precipitation.d.ts.map +1 -0
  275. package/dist/modules/geometry/precipitation/precipitation.js +95 -0
  276. package/dist/modules/geometry/precipitation/precipitation.js.map +1 -0
  277. package/dist/modules/geometry/sketch-stroke/sketch-stroke.cjs +158 -0
  278. package/dist/modules/geometry/sketch-stroke/sketch-stroke.d.ts +60 -0
  279. package/dist/modules/geometry/sketch-stroke/sketch-stroke.d.ts.map +1 -0
  280. package/dist/modules/geometry/sketch-stroke/sketch-stroke.js +137 -0
  281. package/dist/modules/geometry/sketch-stroke/sketch-stroke.js.map +1 -0
  282. package/dist/modules/geospatial/dggs/dggs-wgsl.cjs +2304 -0
  283. package/dist/modules/geospatial/dggs/dggs-wgsl.d.ts +3 -0
  284. package/dist/modules/geospatial/dggs/dggs-wgsl.d.ts.map +1 -0
  285. package/dist/modules/geospatial/dggs/dggs-wgsl.js +2283 -0
  286. package/dist/modules/geospatial/dggs/dggs-wgsl.js.map +1 -0
  287. package/dist/modules/geospatial/dggs/dggs.cjs +31 -0
  288. package/dist/modules/geospatial/dggs/dggs.d.ts +6 -0
  289. package/dist/modules/geospatial/dggs/dggs.d.ts.map +1 -0
  290. package/dist/modules/geospatial/dggs/dggs.js +10 -0
  291. package/dist/modules/geospatial/dggs/dggs.js.map +1 -0
  292. package/dist/modules/lighting/area-lighting/area-light-types.cjs +68 -0
  293. package/dist/modules/lighting/area-lighting/area-light-types.d.ts +34 -0
  294. package/dist/modules/lighting/area-lighting/area-light-types.d.ts.map +1 -0
  295. package/dist/modules/lighting/area-lighting/area-light-types.js +40 -0
  296. package/dist/modules/lighting/area-lighting/area-light-types.js.map +1 -0
  297. package/dist/modules/lighting/area-lighting/area-lighting-shaders.cjs +101 -0
  298. package/dist/modules/lighting/area-lighting/area-lighting-shaders.d.ts +3 -0
  299. package/dist/modules/lighting/area-lighting/area-lighting-shaders.d.ts.map +1 -0
  300. package/dist/modules/lighting/area-lighting/area-lighting-shaders.js +71 -0
  301. package/dist/modules/lighting/area-lighting/area-lighting-shaders.js.map +1 -0
  302. package/dist/modules/lighting/area-lighting/area-lighting.cjs +62 -0
  303. package/dist/modules/lighting/area-lighting/area-lighting.d.ts +89 -0
  304. package/dist/modules/lighting/area-lighting/area-lighting.d.ts.map +1 -0
  305. package/dist/modules/lighting/area-lighting/area-lighting.js +41 -0
  306. package/dist/modules/lighting/area-lighting/area-lighting.js.map +1 -0
  307. package/dist/modules/lighting/area-lighting/ltc-shaders.cjs +192 -0
  308. package/dist/modules/lighting/area-lighting/ltc-shaders.d.ts +3 -0
  309. package/dist/modules/lighting/area-lighting/ltc-shaders.d.ts.map +1 -0
  310. package/dist/modules/lighting/area-lighting/ltc-shaders.js +162 -0
  311. package/dist/modules/lighting/area-lighting/ltc-shaders.js.map +1 -0
  312. package/dist/modules/lighting/atmosphere/atmosphere.cjs +253 -0
  313. package/dist/modules/lighting/atmosphere/atmosphere.d.ts +45 -0
  314. package/dist/modules/lighting/atmosphere/atmosphere.d.ts.map +1 -0
  315. package/dist/modules/lighting/atmosphere/atmosphere.js +228 -0
  316. package/dist/modules/lighting/atmosphere/atmosphere.js.map +1 -0
  317. package/dist/modules/lighting/clouds/clouds.cjs +216 -0
  318. package/dist/modules/lighting/clouds/clouds.d.ts +58 -0
  319. package/dist/modules/lighting/clouds/clouds.d.ts.map +1 -0
  320. package/dist/modules/lighting/clouds/clouds.js +192 -0
  321. package/dist/modules/lighting/clouds/clouds.js.map +1 -0
  322. package/dist/modules/lighting/firefly/firefly.cjs +74 -0
  323. package/dist/modules/lighting/firefly/firefly.d.ts +36 -0
  324. package/dist/modules/lighting/firefly/firefly.d.ts.map +1 -0
  325. package/dist/modules/lighting/firefly/firefly.js +53 -0
  326. package/dist/modules/lighting/firefly/firefly.js.map +1 -0
  327. package/dist/modules/lighting/globe-clouds/globe-clouds.cjs +143 -0
  328. package/dist/modules/lighting/globe-clouds/globe-clouds.d.ts +53 -0
  329. package/dist/modules/lighting/globe-clouds/globe-clouds.d.ts.map +1 -0
  330. package/dist/modules/lighting/globe-clouds/globe-clouds.js +119 -0
  331. package/dist/modules/lighting/globe-clouds/globe-clouds.js.map +1 -0
  332. package/dist/modules/lighting/gouraud-material/gouraud-material.cjs +61 -0
  333. package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts +12 -0
  334. package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts.map +1 -0
  335. package/dist/modules/lighting/gouraud-material/gouraud-material.js +40 -0
  336. package/dist/modules/lighting/gouraud-material/gouraud-material.js.map +1 -0
  337. package/dist/modules/lighting/height-fog/height-fog-functions.cjs +139 -0
  338. package/dist/modules/lighting/height-fog/height-fog-functions.d.ts +14 -0
  339. package/dist/modules/lighting/height-fog/height-fog-functions.d.ts.map +1 -0
  340. package/dist/modules/lighting/height-fog/height-fog-functions.js +114 -0
  341. package/dist/modules/lighting/height-fog/height-fog-functions.js.map +1 -0
  342. package/dist/modules/lighting/height-fog/height-fog.cjs +104 -0
  343. package/dist/modules/lighting/height-fog/height-fog.d.ts +60 -0
  344. package/dist/modules/lighting/height-fog/height-fog.d.ts.map +1 -0
  345. package/dist/modules/lighting/height-fog/height-fog.js +77 -0
  346. package/dist/modules/lighting/height-fog/height-fog.js.map +1 -0
  347. package/dist/modules/lighting/ibl/ibl.cjs +63 -0
  348. package/dist/modules/lighting/ibl/ibl.d.ts +25 -0
  349. package/dist/modules/lighting/ibl/ibl.d.ts.map +1 -0
  350. package/dist/modules/lighting/ibl/ibl.js +33 -0
  351. package/dist/modules/lighting/ibl/ibl.js.map +1 -0
  352. package/dist/modules/lighting/lambert-material/lambert-material.cjs +54 -0
  353. package/dist/modules/lighting/lambert-material/lambert-material.d.ts +10 -0
  354. package/dist/modules/lighting/lambert-material/lambert-material.d.ts.map +1 -0
  355. package/dist/modules/lighting/lambert-material/lambert-material.js +33 -0
  356. package/dist/modules/lighting/lambert-material/lambert-material.js.map +1 -0
  357. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.cjs +88 -0
  358. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts +3 -0
  359. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts.map +1 -0
  360. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js +60 -0
  361. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js.map +1 -0
  362. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.cjs +97 -0
  363. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.d.ts +2 -0
  364. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.d.ts.map +1 -0
  365. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.js +73 -0
  366. package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.js.map +1 -0
  367. package/dist/modules/lighting/lights/lighting-glsl.cjs +116 -0
  368. package/dist/modules/lighting/lights/lighting-glsl.d.ts +2 -0
  369. package/dist/modules/lighting/lights/lighting-glsl.d.ts.map +1 -0
  370. package/dist/modules/lighting/lights/lighting-glsl.js +92 -0
  371. package/dist/modules/lighting/lights/lighting-glsl.js.map +1 -0
  372. package/dist/modules/lighting/lights/lighting-wgsl.cjs +115 -0
  373. package/dist/modules/lighting/lights/lighting-wgsl.d.ts +2 -0
  374. package/dist/modules/lighting/lights/lighting-wgsl.d.ts.map +1 -0
  375. package/dist/modules/lighting/lights/lighting-wgsl.js +91 -0
  376. package/dist/modules/lighting/lights/lighting-wgsl.js.map +1 -0
  377. package/dist/modules/lighting/lights/lighting.cjs +210 -0
  378. package/dist/modules/lighting/lights/lighting.d.ts +163 -0
  379. package/dist/modules/lighting/lights/lighting.d.ts.map +1 -0
  380. package/dist/modules/lighting/lights/lighting.js +208 -0
  381. package/dist/modules/lighting/lights/lighting.js.map +1 -0
  382. package/dist/modules/lighting/no-material/dirlight.cjs +112 -0
  383. package/dist/modules/lighting/no-material/dirlight.d.ts +33 -0
  384. package/dist/modules/lighting/no-material/dirlight.d.ts.map +1 -0
  385. package/dist/modules/lighting/no-material/dirlight.js +86 -0
  386. package/dist/modules/lighting/no-material/dirlight.js.map +1 -0
  387. package/dist/modules/lighting/pbr-material/pbr-material-glsl.cjs +1767 -0
  388. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts +3 -0
  389. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts.map +1 -0
  390. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js +1745 -0
  391. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js.map +1 -0
  392. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.cjs +2062 -0
  393. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts +3 -0
  394. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts.map +1 -0
  395. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js +2040 -0
  396. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js.map +1 -0
  397. package/dist/modules/lighting/pbr-material/pbr-material.cjs +315 -0
  398. package/dist/modules/lighting/pbr-material/pbr-material.d.ts +516 -0
  399. package/dist/modules/lighting/pbr-material/pbr-material.d.ts.map +1 -0
  400. package/dist/modules/lighting/pbr-material/pbr-material.js +292 -0
  401. package/dist/modules/lighting/pbr-material/pbr-material.js.map +1 -0
  402. package/dist/modules/lighting/pbr-material/pbr-projection.cjs +63 -0
  403. package/dist/modules/lighting/pbr-material/pbr-projection.d.ts +10 -0
  404. package/dist/modules/lighting/pbr-material/pbr-projection.d.ts.map +1 -0
  405. package/dist/modules/lighting/pbr-material/pbr-projection.js +37 -0
  406. package/dist/modules/lighting/pbr-material/pbr-projection.js.map +1 -0
  407. package/dist/modules/lighting/pbr-material/pbr-scene.cjs +109 -0
  408. package/dist/modules/lighting/pbr-material/pbr-scene.d.ts +52 -0
  409. package/dist/modules/lighting/pbr-material/pbr-scene.d.ts.map +1 -0
  410. package/dist/modules/lighting/pbr-material/pbr-scene.js +83 -0
  411. package/dist/modules/lighting/pbr-material/pbr-scene.js.map +1 -0
  412. package/dist/modules/lighting/phong-material/phong-material.cjs +61 -0
  413. package/dist/modules/lighting/phong-material/phong-material.d.ts +13 -0
  414. package/dist/modules/lighting/phong-material/phong-material.d.ts.map +1 -0
  415. package/dist/modules/lighting/phong-material/phong-material.js +40 -0
  416. package/dist/modules/lighting/phong-material/phong-material.js.map +1 -0
  417. package/dist/modules/lighting/phong-material/phong-shaders-glsl.cjs +100 -0
  418. package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts +3 -0
  419. package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts.map +1 -0
  420. package/dist/modules/lighting/phong-material/phong-shaders-glsl.js +72 -0
  421. package/dist/modules/lighting/phong-material/phong-shaders-glsl.js.map +1 -0
  422. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.cjs +153 -0
  423. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.d.ts +2 -0
  424. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.d.ts.map +1 -0
  425. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.js +129 -0
  426. package/dist/modules/lighting/phong-material/phong-shaders-wgsl.js.map +1 -0
  427. package/dist/modules/lighting/surface-weather/surface-weather.cjs +199 -0
  428. package/dist/modules/lighting/surface-weather/surface-weather.d.ts +54 -0
  429. package/dist/modules/lighting/surface-weather/surface-weather.d.ts.map +1 -0
  430. package/dist/modules/lighting/surface-weather/surface-weather.js +175 -0
  431. package/dist/modules/lighting/surface-weather/surface-weather.js.map +1 -0
  432. package/dist/modules/lighting/water-material/river-water-material.cjs +56 -0
  433. package/dist/modules/lighting/water-material/river-water-material.d.ts +21 -0
  434. package/dist/modules/lighting/water-material/river-water-material.d.ts.map +1 -0
  435. package/dist/modules/lighting/water-material/river-water-material.js +36 -0
  436. package/dist/modules/lighting/water-material/river-water-material.js.map +1 -0
  437. package/dist/modules/lighting/water-material/river-water-shaders.cjs +261 -0
  438. package/dist/modules/lighting/water-material/river-water-shaders.d.ts +3 -0
  439. package/dist/modules/lighting/water-material/river-water-shaders.d.ts.map +1 -0
  440. package/dist/modules/lighting/water-material/river-water-shaders.js +233 -0
  441. package/dist/modules/lighting/water-material/river-water-shaders.js.map +1 -0
  442. package/dist/modules/lighting/water-material/water-material.cjs +188 -0
  443. package/dist/modules/lighting/water-material/water-material.d.ts +28 -0
  444. package/dist/modules/lighting/water-material/water-material.d.ts.map +1 -0
  445. package/dist/modules/lighting/water-material/water-material.js +179 -0
  446. package/dist/modules/lighting/water-material/water-material.js.map +1 -0
  447. package/dist/modules/lighting/water-material/water-shaders-glsl.cjs +260 -0
  448. package/dist/modules/lighting/water-material/water-shaders-glsl.d.ts +3 -0
  449. package/dist/modules/lighting/water-material/water-shaders-glsl.d.ts.map +1 -0
  450. package/dist/modules/lighting/water-material/water-shaders-glsl.js +232 -0
  451. package/dist/modules/lighting/water-material/water-shaders-glsl.js.map +1 -0
  452. package/dist/modules/lighting/water-material/water-shaders-wgsl.cjs +254 -0
  453. package/dist/modules/lighting/water-material/water-shaders-wgsl.d.ts +2 -0
  454. package/dist/modules/lighting/water-material/water-shaders-wgsl.d.ts.map +1 -0
  455. package/dist/modules/lighting/water-material/water-shaders-wgsl.js +230 -0
  456. package/dist/modules/lighting/water-material/water-shaders-wgsl.js.map +1 -0
  457. package/dist/modules/math/fp16/fp16-utils.cjs +112 -0
  458. package/dist/modules/math/fp16/fp16-utils.d.ts +13 -0
  459. package/dist/modules/math/fp16/fp16-utils.d.ts.map +1 -0
  460. package/dist/modules/math/fp16/fp16-utils.js +118 -0
  461. package/dist/modules/math/fp16/fp16-utils.js.map +1 -0
  462. package/dist/modules/math/fp32/fp32.cjs +310 -0
  463. package/dist/modules/math/fp32/fp32.d.ts +9 -0
  464. package/dist/modules/math/fp32/fp32.d.ts.map +1 -0
  465. package/dist/modules/math/fp32/fp32.js +288 -0
  466. package/dist/modules/math/fp32/fp32.js.map +1 -0
  467. package/dist/modules/math/fp64/fp64-arithmetic-glsl.cjs +229 -0
  468. package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts +2 -0
  469. package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts.map +1 -0
  470. package/dist/modules/math/fp64/fp64-arithmetic-glsl.js +205 -0
  471. package/dist/modules/math/fp64/fp64-arithmetic-glsl.js.map +1 -0
  472. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.cjs +144 -0
  473. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.d.ts +10 -0
  474. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.d.ts.map +1 -0
  475. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.js +128 -0
  476. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.js.map +1 -0
  477. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.cjs +583 -0
  478. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.d.ts +11 -0
  479. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.d.ts.map +1 -0
  480. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.js +563 -0
  481. package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.js.map +1 -0
  482. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.cjs +946 -0
  483. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.d.ts +3 -0
  484. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.d.ts.map +1 -0
  485. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.js +923 -0
  486. package/dist/modules/math/fp64/fp64-arithmetic-wgsl.js.map +1 -0
  487. package/dist/modules/math/fp64/fp64-functions-glsl.cjs +699 -0
  488. package/dist/modules/math/fp64/fp64-functions-glsl.d.ts +2 -0
  489. package/dist/modules/math/fp64/fp64-functions-glsl.d.ts.map +1 -0
  490. package/dist/modules/math/fp64/fp64-functions-glsl.js +675 -0
  491. package/dist/modules/math/fp64/fp64-functions-glsl.js.map +1 -0
  492. package/dist/modules/math/fp64/fp64-functions-wgsl.cjs +180 -0
  493. package/dist/modules/math/fp64/fp64-functions-wgsl.d.ts +3 -0
  494. package/dist/modules/math/fp64/fp64-functions-wgsl.d.ts.map +1 -0
  495. package/dist/modules/math/fp64/fp64-functions-wgsl.js +157 -0
  496. package/dist/modules/math/fp64/fp64-functions-wgsl.js.map +1 -0
  497. package/dist/modules/math/fp64/fp64-utils.cjs +50 -0
  498. package/dist/modules/math/fp64/fp64-utils.d.ts +22 -0
  499. package/dist/modules/math/fp64/fp64-utils.d.ts.map +1 -0
  500. package/dist/modules/math/fp64/fp64-utils.js +42 -0
  501. package/dist/modules/math/fp64/fp64-utils.js.map +1 -0
  502. package/dist/modules/math/fp64/fp64.cjs +68 -0
  503. package/dist/modules/math/fp64/fp64.d.ts +24 -0
  504. package/dist/modules/math/fp64/fp64.d.ts.map +1 -0
  505. package/dist/modules/math/fp64/fp64.js +46 -0
  506. package/dist/modules/math/fp64/fp64.js.map +1 -0
  507. package/dist/modules/math/random/random.cjs +46 -0
  508. package/dist/modules/math/random/random.d.ts +7 -0
  509. package/dist/modules/math/random/random.d.ts.map +1 -0
  510. package/dist/modules/math/random/random.js +21 -0
  511. package/dist/modules/math/random/random.js.map +1 -0
  512. package/dist/modules/math/value-noise/value-noise.cjs +95 -0
  513. package/dist/modules/math/value-noise/value-noise.d.ts +7 -0
  514. package/dist/modules/math/value-noise/value-noise.d.ts.map +1 -0
  515. package/dist/modules/math/value-noise/value-noise.js +68 -0
  516. package/dist/modules/math/value-noise/value-noise.js.map +1 -0
  517. package/dist/modules/volume/volume-raymarch.cjs +107 -0
  518. package/dist/modules/volume/volume-raymarch.d.ts +6 -0
  519. package/dist/modules/volume/volume-raymarch.d.ts.map +1 -0
  520. package/dist/modules/volume/volume-raymarch.js +84 -0
  521. package/dist/modules/volume/volume-raymarch.js.map +1 -0
  522. package/dist/types/align-to.cjs +38 -0
  523. package/dist/types/align-to.d.ts +3 -0
  524. package/dist/types/align-to.d.ts.map +1 -0
  525. package/dist/types/align-to.js +13 -0
  526. package/dist/types/align-to.js.map +1 -0
  527. package/dist/types/primitive-data-types.cjs +15 -0
  528. package/dist/types/primitive-data-types.d.ts +7 -0
  529. package/dist/types/primitive-data-types.d.ts.map +1 -0
  530. package/dist/types/primitive-data-types.js +5 -0
  531. package/dist/types/primitive-data-types.js.map +1 -0
  532. package/dist/types/sampler-props.cjs +15 -0
  533. package/dist/types/sampler-props.d.ts +26 -0
  534. package/dist/types/sampler-props.d.ts.map +1 -0
  535. package/dist/types/sampler-props.js +5 -0
  536. package/dist/types/sampler-props.js.map +1 -0
  537. package/dist/types/shader-block-layout.cjs +184 -0
  538. package/dist/types/shader-block-layout.d.ts +72 -0
  539. package/dist/types/shader-block-layout.d.ts.map +1 -0
  540. package/dist/types/shader-block-layout.js +209 -0
  541. package/dist/types/shader-block-layout.js.map +1 -0
  542. package/dist/types/shader-layout.cjs +15 -0
  543. package/dist/types/shader-layout.d.ts +178 -0
  544. package/dist/types/shader-layout.d.ts.map +1 -0
  545. package/dist/types/shader-layout.js +5 -0
  546. package/dist/types/shader-layout.js.map +1 -0
  547. package/dist/types/shader-type-decoder.cjs +240 -0
  548. package/dist/types/shader-type-decoder.d.ts +41 -0
  549. package/dist/types/shader-type-decoder.d.ts.map +1 -0
  550. package/dist/types/shader-type-decoder.js +210 -0
  551. package/dist/types/shader-type-decoder.js.map +1 -0
  552. package/dist/types/shader-types.cjs +15 -0
  553. package/dist/types/shader-types.d.ts +101 -0
  554. package/dist/types/shader-types.d.ts.map +1 -0
  555. package/dist/types/shader-types.js +30 -0
  556. package/dist/types/shader-types.js.map +1 -0
  557. package/dist/types/texture-formats.cjs +15 -0
  558. package/dist/types/texture-formats.d.ts +24 -0
  559. package/dist/types/texture-formats.d.ts.map +1 -0
  560. package/dist/types/texture-formats.js +5 -0
  561. package/dist/types/texture-formats.js.map +1 -0
  562. package/dist/types.cjs +42 -0
  563. package/dist/types.cjs.map +6 -0
  564. package/dist/types.d.ts +14 -0
  565. package/dist/types.d.ts.map +1 -0
  566. package/dist/types.js +12 -0
  567. package/dist/types.js.map +1 -0
  568. package/dist/wgsl.cjs +39 -0
  569. package/dist/wgsl.cjs.map +6 -0
  570. package/dist/wgsl.d.ts +8 -0
  571. package/dist/wgsl.d.ts.map +1 -0
  572. package/dist/wgsl.js +9 -0
  573. package/dist/wgsl.js.map +1 -0
  574. package/package.json +65 -4
  575. package/src/glsl.ts +13 -0
  576. package/src/index.ts +259 -0
  577. package/src/lib/color/normalize-byte-colors.ts +57 -0
  578. package/src/lib/filters/prop-types.ts +150 -0
  579. package/src/lib/glsl-shader-assembler.ts +39 -0
  580. package/src/lib/glsl-utils/get-shader-info.ts +42 -0
  581. package/src/lib/glsl-utils/shader-utils.ts +110 -0
  582. package/src/lib/preprocessor/preprocessor.ts +132 -0
  583. package/src/lib/shader-assembler-base.ts +170 -0
  584. package/src/lib/shader-assembler.ts +7 -0
  585. package/src/lib/shader-assembly/assemble-glsl-shaders.ts +305 -0
  586. package/src/lib/shader-assembly/assemble-shaders.ts +13 -0
  587. package/src/lib/shader-assembly/assemble-wgsl-shaders.ts +801 -0
  588. package/src/lib/shader-assembly/platform-defines.ts +58 -0
  589. package/src/lib/shader-assembly/platform-info.ts +23 -0
  590. package/src/lib/shader-assembly/shader-assembly-shared.ts +95 -0
  591. package/src/lib/shader-assembly/shader-assembly-types.ts +142 -0
  592. package/src/lib/shader-assembly/shader-hooks.ts +141 -0
  593. package/src/lib/shader-assembly/shader-injections.ts +250 -0
  594. package/src/lib/shader-assembly/shader-plugin-varyings.ts +524 -0
  595. package/src/lib/shader-assembly/shader-plugin-vertex-inputs.ts +279 -0
  596. package/src/lib/shader-assembly/wgsl-binding-debug.ts +227 -0
  597. package/src/lib/shader-assembly/wgsl-binding-scan.ts +228 -0
  598. package/src/lib/shader-assembly/wgsl-interface-scan.ts +676 -0
  599. package/src/lib/shader-generator/generate-shader.ts +27 -0
  600. package/src/lib/shader-generator/glsl/generate-glsl.ts +101 -0
  601. package/src/lib/shader-generator/utils/capitalize.ts +12 -0
  602. package/src/lib/shader-generator/wgsl/generate-wgsl.ts +40 -0
  603. package/src/lib/shader-module/composite-shader-pass.ts +47 -0
  604. package/src/lib/shader-module/shader-module-dependencies.ts +128 -0
  605. package/src/lib/shader-module/shader-module-uniform-layout.ts +420 -0
  606. package/src/lib/shader-module/shader-module.ts +244 -0
  607. package/src/lib/shader-module/shader-pass.ts +69 -0
  608. package/src/lib/shader-plugin.ts +214 -0
  609. package/src/lib/shader-transpiler/shader-transpiler.ts +34 -0
  610. package/src/lib/shader-transpiler/transpile-glsl-shader.ts +78 -0
  611. package/src/lib/utils/assert.ts +13 -0
  612. package/src/lib/utils/uniform-types.ts +89 -0
  613. package/src/lib/wgsl-shader-assembler.ts +122 -0
  614. package/src/module-injectors.ts +32 -0
  615. package/src/modules/color/float-colors.ts +334 -0
  616. package/src/modules/engine/clip/clip.ts +149 -0
  617. package/src/modules/engine/filter/filter.ts +107 -0
  618. package/src/modules/engine/geometry/geometry.ts +45 -0
  619. package/src/modules/engine/gpu-animation/gpu-animation.ts +244 -0
  620. package/src/modules/engine/picking/README.md +88 -0
  621. package/src/modules/engine/picking/picking.ts +252 -0
  622. package/src/modules/engine/project/project.ts +166 -0
  623. package/src/modules/engine/skin/skin.ts +233 -0
  624. package/src/modules/engine/transform/transform.ts +50 -0
  625. package/src/modules/geometry/path-dash/path-dash.ts +68 -0
  626. package/src/modules/geometry/pattern-fill/pattern-fill-shaders.ts +88 -0
  627. package/src/modules/geometry/pattern-fill/pattern-fill.ts +54 -0
  628. package/src/modules/geometry/point-glow/point-glow.ts +87 -0
  629. package/src/modules/geometry/precipitation/README.md +19 -0
  630. package/src/modules/geometry/precipitation/precipitation.ts +108 -0
  631. package/src/modules/geometry/sketch-stroke/sketch-stroke.ts +160 -0
  632. package/src/modules/geospatial/dggs/dggs-wgsl.ts +2284 -0
  633. package/src/modules/geospatial/dggs/dggs.ts +12 -0
  634. package/src/modules/lighting/area-lighting/area-light-types.ts +71 -0
  635. package/src/modules/lighting/area-lighting/area-lighting-shaders.ts +72 -0
  636. package/src/modules/lighting/area-lighting/area-lighting.ts +63 -0
  637. package/src/modules/lighting/area-lighting/ltc-shaders.ts +163 -0
  638. package/src/modules/lighting/atmosphere/README.md +25 -0
  639. package/src/modules/lighting/atmosphere/atmosphere.ts +246 -0
  640. package/src/modules/lighting/clouds/README.md +24 -0
  641. package/src/modules/lighting/clouds/clouds.ts +216 -0
  642. package/src/modules/lighting/firefly/firefly.ts +64 -0
  643. package/src/modules/lighting/globe-clouds/globe-clouds.ts +124 -0
  644. package/src/modules/lighting/gouraud-material/gouraud-material.ts +55 -0
  645. package/src/modules/lighting/height-fog/README.md +36 -0
  646. package/src/modules/lighting/height-fog/height-fog-functions.ts +116 -0
  647. package/src/modules/lighting/height-fog/height-fog.ts +96 -0
  648. package/src/modules/lighting/ibl/ibl.ts +43 -0
  649. package/src/modules/lighting/lambert-material/lambert-material.ts +42 -0
  650. package/src/modules/lighting/lambert-material/lambert-shaders-glsl.ts +61 -0
  651. package/src/modules/lighting/lambert-material/lambert-shaders-wgsl.ts +73 -0
  652. package/src/modules/lighting/lights/lighting-glsl.ts +92 -0
  653. package/src/modules/lighting/lights/lighting-wgsl.ts +91 -0
  654. package/src/modules/lighting/lights/lighting.ts +385 -0
  655. package/src/modules/lighting/no-material/dirlight.ts +101 -0
  656. package/src/modules/lighting/pbr-material/pbr-material-glsl.ts +1748 -0
  657. package/src/modules/lighting/pbr-material/pbr-material-wgsl.ts +2043 -0
  658. package/src/modules/lighting/pbr-material/pbr-material.ts +517 -0
  659. package/src/modules/lighting/pbr-material/pbr-projection.ts +50 -0
  660. package/src/modules/lighting/pbr-material/pbr-scene.ts +112 -0
  661. package/src/modules/lighting/phong-material/phong-material.ts +53 -0
  662. package/src/modules/lighting/phong-material/phong-shaders-glsl.ts +73 -0
  663. package/src/modules/lighting/phong-material/phong-shaders-wgsl.ts +129 -0
  664. package/src/modules/lighting/surface-weather/README.md +28 -0
  665. package/src/modules/lighting/surface-weather/surface-weather.ts +198 -0
  666. package/src/modules/lighting/water-material/river-water-material.ts +58 -0
  667. package/src/modules/lighting/water-material/river-water-shaders.ts +234 -0
  668. package/src/modules/lighting/water-material/water-material.ts +234 -0
  669. package/src/modules/lighting/water-material/water-shaders-glsl.ts +233 -0
  670. package/src/modules/lighting/water-material/water-shaders-wgsl.ts +230 -0
  671. package/src/modules/math/fp16/fp16-utils.ts +156 -0
  672. package/src/modules/math/fp32/fp32.ts +291 -0
  673. package/src/modules/math/fp64/fp64-arithmetic-glsl.ts +205 -0
  674. package/src/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.ts +129 -0
  675. package/src/modules/math/fp64/fp64-arithmetic-wgsl-integer.ts +564 -0
  676. package/src/modules/math/fp64/fp64-arithmetic-wgsl.ts +924 -0
  677. package/src/modules/math/fp64/fp64-functions-glsl.ts +675 -0
  678. package/src/modules/math/fp64/fp64-functions-wgsl.ts +157 -0
  679. package/src/modules/math/fp64/fp64-utils.ts +46 -0
  680. package/src/modules/math/fp64/fp64.ts +64 -0
  681. package/src/modules/math/random/random.ts +25 -0
  682. package/src/modules/math/value-noise/value-noise.ts +70 -0
  683. package/src/modules/volume/volume-raymarch.ts +87 -0
  684. package/src/types/align-to.ts +13 -0
  685. package/src/types/primitive-data-types.ts +10 -0
  686. package/src/types/sampler-props.ts +39 -0
  687. package/src/types/shader-block-layout.ts +340 -0
  688. package/src/types/shader-layout.ts +208 -0
  689. package/src/types/shader-type-decoder.ts +285 -0
  690. package/src/types/shader-types.ts +207 -0
  691. package/src/types/texture-formats.ts +155 -0
  692. package/src/types.ts +48 -0
  693. package/src/wgsl.ts +23 -0
@@ -0,0 +1,12 @@
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 {dggsWGSL} from './dggs-wgsl';
7
+
8
+ /** WGSL helpers for 64-bit DGGS cell IDs encoded as two u32 words. */
9
+ export const dggs = {
10
+ name: 'dggs',
11
+ source: dggsWGSL
12
+ } as const satisfies ShaderModule<{}, {}>;
@@ -0,0 +1,71 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ import type {NumberArray3} from '@math.gl/core';
6
+ import {normalizeByteColor3} from '../../../lib/color/normalize-byte-colors';
7
+
8
+ /** A uniformly emitting, one-sided rectangle or disk in world space. */
9
+ export type AreaLight = {
10
+ type: 'rect' | 'disk';
11
+ position: Readonly<NumberArray3>;
12
+ /** Orthogonal world-space half-extent vectors; disk vectors represent radii. */
13
+ halfAxisX: Readonly<NumberArray3>;
14
+ halfAxisY: Readonly<NumberArray3>;
15
+ /** World-space emitting normal, corresponding to local -Z. */
16
+ normal: Readonly<NumberArray3>;
17
+ color?: Readonly<NumberArray3>;
18
+ /** Luminance in nits (cd/m²), independent of surface area. */
19
+ intensity?: number;
20
+ };
21
+
22
+ export type AreaLightUniform = {
23
+ color: Readonly<NumberArray3>;
24
+ position: Readonly<NumberArray3>;
25
+ halfAxisX: Readonly<NumberArray3>;
26
+ halfAxisY: Readonly<NumberArray3>;
27
+ normal: Readonly<NumberArray3>;
28
+ disk: number;
29
+ };
30
+ export const MAX_AREA_LIGHTS = 4;
31
+ export function makeEmptyLight(): AreaLightUniform {
32
+ return {
33
+ color: [0, 0, 0],
34
+ position: [0, 0, 0],
35
+ halfAxisX: [0, 0, 0],
36
+ halfAxisY: [0, 0, 0],
37
+ normal: [0, 0, -1],
38
+ disk: 0
39
+ };
40
+ }
41
+
42
+ export const AREA_LIGHT_UNIFORM_TYPE = {
43
+ color: 'vec3<f32>',
44
+ position: 'vec3<f32>',
45
+ halfAxisX: 'vec3<f32>',
46
+ halfAxisY: 'vec3<f32>',
47
+ normal: 'vec3<f32>',
48
+ disk: 'i32'
49
+ } as const;
50
+
51
+ export function packAreaLights(
52
+ lights: readonly AreaLight[],
53
+ useByteColors = false
54
+ ): AreaLightUniform[] {
55
+ return Array.from({length: MAX_AREA_LIGHTS}, (_, index) => {
56
+ const light = lights[index];
57
+ if (!light) return makeEmptyLight();
58
+ const color = normalizeByteColor3(
59
+ light.color || (useByteColors ? [255, 255, 255] : [1, 1, 1]),
60
+ useByteColors
61
+ );
62
+ return {
63
+ position: light.position,
64
+ halfAxisX: light.halfAxisX,
65
+ halfAxisY: light.halfAxisY,
66
+ normal: light.normal,
67
+ disk: light.type === 'disk' ? 1 : 0,
68
+ color: color.map(component => component * (light.intensity ?? 1000)) as NumberArray3
69
+ };
70
+ });
71
+ }
@@ -0,0 +1,72 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ export const areaLightingGLSL = /* glsl */ `
6
+ layout(std140) uniform areaLightingUniforms {
7
+ int lightCount;
8
+ int sampleCount;
9
+ AreaLightUniform lights[4];
10
+ } areaLighting;
11
+
12
+ int areaLighting_getLightCount() { return lighting.areaLightCount + areaLighting.lightCount; }
13
+ AreaLightUniform areaLighting_getLight(int index) {
14
+ if (index < lighting.areaLightCount) return lighting.areaLights[index];
15
+ return areaLighting.lights[index - lighting.areaLightCount];
16
+ }
17
+
18
+ PointLight areaLighting_getSample(int lightIndex, int sampleIndex, vec3 receiver) {
19
+ AreaLightUniform light = areaLighting_getLight(lightIndex);
20
+ int grid = int(sqrt(float(areaLighting.sampleCount)));
21
+ vec2 coordinate = (vec2(float(sampleIndex % grid), float(sampleIndex / grid)) + 0.5) / float(grid);
22
+ float area = 4.0 * length(light.halfAxisX) * length(light.halfAxisY);
23
+ if (light.disk != 0) {
24
+ float radius = sqrt(coordinate.y);
25
+ float angle = coordinate.x * 6.28318530718;
26
+ coordinate = radius * vec2(cos(angle), sin(angle));
27
+ area *= 0.785398163397;
28
+ } else {
29
+ coordinate = coordinate * 2.0 - 1.0;
30
+ }
31
+ vec3 position = light.position + coordinate.x * light.halfAxisX + coordinate.y * light.halfAxisY;
32
+ vec3 displacement = receiver - position;
33
+ float distanceSquared = max(dot(displacement, displacement), 0.000001);
34
+ float emissionCosine = max(dot(light.normal, displacement * inversesqrt(distanceSquared)), 0.0);
35
+ return PointLight(light.color * (area * emissionCosine / (float(areaLighting.sampleCount) * distanceSquared)), position, vec3(1.0, 0.0, 0.0));
36
+ }
37
+ `;
38
+
39
+ export const areaLightingWGSL = /* wgsl */ `
40
+ struct AreaLightingUniforms {
41
+ lightCount: i32,
42
+ sampleCount: i32,
43
+ lights: array<AreaLightUniform, 4>,
44
+ };
45
+ @group(2) @binding(auto) var<uniform> areaLighting: AreaLightingUniforms;
46
+
47
+ fn areaLighting_getLightCount() -> i32 { return lighting.areaLightCount + areaLighting.lightCount; }
48
+ fn areaLighting_getLight(index: i32) -> AreaLightUniform {
49
+ if (index < lighting.areaLightCount) { return lighting.areaLights[index]; }
50
+ return areaLighting.lights[index - lighting.areaLightCount];
51
+ }
52
+
53
+ fn areaLighting_getSample(lightIndex: i32, sampleIndex: i32, receiver: vec3f) -> PointLight {
54
+ let light = areaLighting_getLight(lightIndex);
55
+ let grid = i32(sqrt(f32(areaLighting.sampleCount)));
56
+ var coordinate = (vec2f(f32(sampleIndex % grid), f32(sampleIndex / grid)) + 0.5) / f32(grid);
57
+ var area = 4.0 * length(light.halfAxisX) * length(light.halfAxisY);
58
+ if (light.disk != 0) {
59
+ let radius = sqrt(coordinate.y);
60
+ let angle = coordinate.x * 6.28318530718;
61
+ coordinate = radius * vec2f(cos(angle), sin(angle));
62
+ area *= 0.785398163397;
63
+ } else {
64
+ coordinate = coordinate * 2.0 - 1.0;
65
+ }
66
+ let position = light.position + coordinate.x * light.halfAxisX + coordinate.y * light.halfAxisY;
67
+ let displacement = receiver - position;
68
+ let distanceSquared = max(dot(displacement, displacement), 0.000001);
69
+ let emissionCosine = max(dot(light.normal, displacement * inverseSqrt(distanceSquared)), 0.0);
70
+ return PointLight(light.color * (area * emissionCosine / (f32(areaLighting.sampleCount) * distanceSquared)), position, vec3f(1.0, 0.0, 0.0));
71
+ }
72
+ `;
@@ -0,0 +1,63 @@
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 {lighting} from '../lights/lighting';
7
+ import {areaLTCGLSL, areaLTCWGSL} from './ltc-shaders';
8
+ import {areaLightingGLSL, areaLightingWGSL} from './area-lighting-shaders';
9
+
10
+ export type {AreaLight} from './area-light-types';
11
+ import {
12
+ type AreaLight,
13
+ type AreaLightUniform,
14
+ MAX_AREA_LIGHTS,
15
+ AREA_LIGHT_UNIFORM_TYPE,
16
+ packAreaLights,
17
+ makeEmptyLight
18
+ } from './area-light-types';
19
+
20
+ export type AreaLightingProps = {
21
+ lights?: readonly AreaLight[];
22
+ useByteColors?: boolean;
23
+ sampleCount?: 16 | 64 | 256;
24
+ };
25
+ type AreaLightingUniforms = {
26
+ lightCount: number;
27
+ sampleCount: number;
28
+ lights: readonly AreaLightUniform[];
29
+ };
30
+
31
+ /** Area-light compatibility props and shader resources for LTC or numerical reference integration. */
32
+ export const areaLighting = {
33
+ name: 'areaLighting',
34
+ props: {} as AreaLightingProps,
35
+ uniforms: {} as AreaLightingUniforms,
36
+ dependencies: [lighting],
37
+ defaultUniforms: {
38
+ lightCount: 0,
39
+ sampleCount: 64,
40
+ lights: Array.from({length: MAX_AREA_LIGHTS}, makeEmptyLight)
41
+ },
42
+ uniformTypes: {
43
+ lightCount: 'i32',
44
+ sampleCount: 'i32',
45
+ lights: [AREA_LIGHT_UNIFORM_TYPE, MAX_AREA_LIGHTS]
46
+ },
47
+ bindingLayout: [
48
+ {name: 'areaLighting', group: 2},
49
+ {name: 'areaLTCMatrix', group: 2},
50
+ {name: 'areaLTCAmplitude', group: 2}
51
+ ],
52
+ source: areaLightingWGSL + areaLTCWGSL,
53
+ vs: areaLightingGLSL + areaLTCGLSL,
54
+ fs: areaLightingGLSL + areaLTCGLSL,
55
+ getUniforms(props: AreaLightingProps = {}): AreaLightingUniforms {
56
+ const source = props.lights || [];
57
+ return {
58
+ lightCount: Math.min(source.length, MAX_AREA_LIGHTS),
59
+ sampleCount: props.sampleCount || 64,
60
+ lights: packAreaLights(source, props.useByteColors)
61
+ };
62
+ }
63
+ } as const satisfies ShaderModule<AreaLightingProps, AreaLightingUniforms, {}>;
@@ -0,0 +1,163 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ export const areaLTCGLSL = /* glsl */ `
6
+ #ifdef USE_AREA_LIGHT_LTC
7
+ uniform sampler2D areaLTCMatrix;
8
+ uniform sampler2D areaLTCAmplitude;
9
+ // GGX fit and Fresnel decomposition: Heitz, Dupuy, Hill and Neubelt, SIGGRAPH 2016.
10
+ // Explicit bilinear lookup avoids requiring filterable float32 textures on WebGPU.
11
+ vec4 areaLTC_lookup(sampler2D table, vec2 coordinate) {
12
+ vec2 position = clamp(coordinate, 0.0, 1.0) * 63.0;
13
+ ivec2 lower = ivec2(floor(position));
14
+ ivec2 upper = min(lower + ivec2(1), ivec2(63));
15
+ vec2 fraction = fract(position);
16
+ return mix(mix(texelFetch(table, lower, 0), texelFetch(table, ivec2(upper.x, lower.y), 0), fraction.x),
17
+ mix(texelFetch(table, ivec2(lower.x, upper.y), 0), texelFetch(table, upper, 0), fraction.x), fraction.y);
18
+ }
19
+
20
+ // Exact horizon clipping followed by the spherical polygon edge integral.
21
+ // Disk support uses an inscribed 32-gon; the area error is below 0.65 percent.
22
+ float areaLTC_integral(AreaLightUniform light, vec3 receiver, vec3 normal, vec3 view, mat3 inverseTransform) {
23
+ if (dot(light.normal, receiver - light.position) <= 0.0) return 0.0;
24
+ vec3 tangent = view - normal * dot(view, normal);
25
+ if (dot(tangent, tangent) < 1e-8) {
26
+ vec3 axis = abs(normal.z) < 0.9 ? vec3(0.0, 0.0, 1.0) : vec3(0.0, 1.0, 0.0);
27
+ tangent = cross(axis, normal);
28
+ }
29
+ tangent = normalize(tangent);
30
+ mat3 transform = inverseTransform * transpose(mat3(tangent, -cross(normal, tangent), normal));
31
+ vec3 vertices[33];
32
+ int count = light.disk != 0 ? 32 : 4;
33
+ for (int index = 0; index < 32; index++) {
34
+ if (index >= count) break;
35
+ vec2 coordinate;
36
+ if (light.disk != 0) {
37
+ float angle = float(index) * 6.28318530718 / 32.0;
38
+ coordinate = vec2(cos(angle), -sin(angle));
39
+ } else {
40
+ coordinate = index == 0 ? vec2(1.0, -1.0) : index == 1 ? vec2(-1.0, -1.0) : index == 2 ? vec2(-1.0, 1.0) : vec2(1.0, 1.0);
41
+ }
42
+ vertices[index] = transform * (light.position + coordinate.x * light.halfAxisX + coordinate.y * light.halfAxisY - receiver);
43
+ }
44
+ vec3 clipped[34];
45
+ int clippedCount = 0;
46
+ for (int index = 0; index < 32; index++) {
47
+ if (index >= count) break;
48
+ vec3 start = vertices[index];
49
+ vec3 end = vertices[(index + 1) % count];
50
+ if (start.z > 0.0) { clipped[clippedCount] = start; clippedCount++; }
51
+ if ((start.z > 0.0) != (end.z > 0.0)) {
52
+ clipped[clippedCount] = mix(start, end, start.z / (start.z - end.z));
53
+ clippedCount++;
54
+ }
55
+ }
56
+ if (clippedCount < 3) return 0.0;
57
+ vec3 integral = vec3(0.0);
58
+ for (int index = 0; index < 34; index++) {
59
+ if (index >= clippedCount) break;
60
+ vec3 start = normalize(clipped[index]);
61
+ vec3 end = normalize(clipped[(index + 1) % clippedCount]);
62
+ vec3 edge = cross(start, end);
63
+ float sine = length(edge);
64
+ if (sine > 1e-7) integral += edge * (acos(clamp(dot(start, end), -1.0, 1.0)) / sine);
65
+ }
66
+ return min(abs(integral.z) / 6.28318530718, 1.0);
67
+ }
68
+
69
+ vec3 areaLTC_specular(AreaLightUniform light, vec3 receiver, vec3 normal, vec3 view, float roughness, vec3 reflectance0, vec3 reflectance90) {
70
+ vec2 coordinate = vec2(roughness, sqrt(1.0 - clamp(dot(normal, view), 0.0, 1.0)));
71
+ vec4 coefficients = areaLTC_lookup(areaLTCMatrix, coordinate);
72
+ vec4 amplitude = areaLTC_lookup(areaLTCAmplitude, coordinate);
73
+ mat3 inverseTransform = mat3(vec3(coefficients.x, 0.0, coefficients.y), vec3(0.0, 1.0, 0.0), vec3(coefficients.z, 0.0, coefficients.w));
74
+ vec3 fresnel = reflectance0 * amplitude.x + (reflectance90 - reflectance0) * amplitude.y;
75
+ return light.color * fresnel * areaLTC_integral(light, receiver, normal, view, inverseTransform);
76
+ }
77
+
78
+ vec3 areaLTC_evaluate(int index, vec3 receiver, vec3 normal, vec3 view, float roughness, vec3 diffuseColor, vec3 reflectance0, vec3 reflectance90) {
79
+ AreaLightUniform light = areaLighting_getLight(index);
80
+ float diffuseIntegral = areaLTC_integral(light, receiver, normal, view, mat3(1.0));
81
+ return light.color * diffuseColor * (vec3(1.0) - reflectance0) * diffuseIntegral +
82
+ areaLTC_specular(light, receiver, normal, view, roughness, reflectance0, reflectance90);
83
+ }
84
+ #endif
85
+ `;
86
+
87
+ export const areaLTCWGSL = /* wgsl */ `
88
+ #ifdef USE_AREA_LIGHT_LTC
89
+ @group(2) @binding(auto) var areaLTCMatrix: texture_2d<f32>;
90
+ @group(2) @binding(auto) var areaLTCAmplitude: texture_2d<f32>;
91
+ fn areaLTC_lookup(table: texture_2d<f32>, coordinate: vec2f) -> vec4f {
92
+ let position = clamp(coordinate, vec2f(0.0), vec2f(1.0)) * 63.0;
93
+ let lower = vec2i(floor(position));
94
+ let upper = min(lower + vec2i(1), vec2i(63));
95
+ let fraction = fract(position);
96
+ return mix(mix(textureLoad(table, lower, 0), textureLoad(table, vec2i(upper.x, lower.y), 0), fraction.x),
97
+ mix(textureLoad(table, vec2i(lower.x, upper.y), 0), textureLoad(table, upper, 0), fraction.x), fraction.y);
98
+ }
99
+ fn areaLTC_integral(light: AreaLightUniform, receiver: vec3f, normal: vec3f, view: vec3f, inverseTransform: mat3x3f) -> f32 {
100
+ if (dot(light.normal, receiver - light.position) <= 0.0) { return 0.0; }
101
+ var tangent = view - normal * dot(view, normal);
102
+ if (dot(tangent, tangent) < 1e-8) {
103
+ let axis = select(vec3f(0.0, 1.0, 0.0), vec3f(0.0, 0.0, 1.0), abs(normal.z) < 0.9);
104
+ tangent = cross(axis, normal);
105
+ }
106
+ tangent = normalize(tangent);
107
+ let transform = inverseTransform * transpose(mat3x3f(tangent, -cross(normal, tangent), normal));
108
+ var vertices: array<vec3f, 33>;
109
+ let count = select(4, 32, light.disk != 0);
110
+ for (var index = 0; index < 32; index++) {
111
+ if (index >= count) { break; }
112
+ var coordinate: vec2f;
113
+ if (light.disk != 0) {
114
+ let angle = f32(index) * 6.28318530718 / 32.0;
115
+ coordinate = vec2f(cos(angle), -sin(angle));
116
+ } else {
117
+ coordinate = vec2f(1.0, 1.0);
118
+ if (index == 0) { coordinate = vec2f(1.0, -1.0); }
119
+ if (index == 1) { coordinate = vec2f(-1.0, -1.0); }
120
+ if (index == 2) { coordinate = vec2f(-1.0, 1.0); }
121
+ }
122
+ vertices[index] = transform * (light.position + coordinate.x * light.halfAxisX + coordinate.y * light.halfAxisY - receiver);
123
+ }
124
+ var clipped: array<vec3f, 34>;
125
+ var clippedCount = 0;
126
+ for (var index = 0; index < 32; index++) {
127
+ if (index >= count) { break; }
128
+ let start = vertices[index];
129
+ let end = vertices[(index + 1) % count];
130
+ if (start.z > 0.0) { clipped[clippedCount] = start; clippedCount++; }
131
+ if ((start.z > 0.0) != (end.z > 0.0)) {
132
+ clipped[clippedCount] = mix(start, end, start.z / (start.z - end.z));
133
+ clippedCount++;
134
+ }
135
+ }
136
+ if (clippedCount < 3) { return 0.0; }
137
+ var integral = vec3f(0.0);
138
+ for (var index = 0; index < 34; index++) {
139
+ if (index >= clippedCount) { break; }
140
+ let start = normalize(clipped[index]);
141
+ let end = normalize(clipped[(index + 1) % clippedCount]);
142
+ let edge = cross(start, end);
143
+ let sine = length(edge);
144
+ if (sine > 1e-7) { integral += edge * (acos(clamp(dot(start, end), -1.0, 1.0)) / sine); }
145
+ }
146
+ return min(abs(integral.z) / 6.28318530718, 1.0);
147
+ }
148
+ fn areaLTC_specular(light: AreaLightUniform, receiver: vec3f, normal: vec3f, view: vec3f, roughness: f32, reflectance0: vec3f, reflectance90: vec3f) -> vec3f {
149
+ let coordinate = vec2f(roughness, sqrt(1.0 - clamp(dot(normal, view), 0.0, 1.0)));
150
+ let coefficients = areaLTC_lookup(areaLTCMatrix, coordinate);
151
+ let amplitude = areaLTC_lookup(areaLTCAmplitude, coordinate);
152
+ let inverseTransform = mat3x3f(vec3f(coefficients.x, 0.0, coefficients.y), vec3f(0.0, 1.0, 0.0), vec3f(coefficients.z, 0.0, coefficients.w));
153
+ let fresnel = reflectance0 * amplitude.x + (reflectance90 - reflectance0) * amplitude.y;
154
+ return light.color * fresnel * areaLTC_integral(light, receiver, normal, view, inverseTransform);
155
+ }
156
+ fn areaLTC_evaluate(index: i32, receiver: vec3f, normal: vec3f, view: vec3f, roughness: f32, diffuseColor: vec3f, reflectance0: vec3f, reflectance90: vec3f) -> vec3f {
157
+ let light = areaLighting_getLight(index);
158
+ let diffuseIntegral = areaLTC_integral(light, receiver, normal, view, mat3x3f(vec3f(1.0,0.0,0.0),vec3f(0.0,1.0,0.0),vec3f(0.0,0.0,1.0)));
159
+ return light.color * diffuseColor * (vec3f(1.0) - reflectance0) * diffuseIntegral +
160
+ areaLTC_specular(light, receiver, normal, view, roughness, reflectance0, reflectance90);
161
+ }
162
+ #endif
163
+ `;
@@ -0,0 +1,25 @@
1
+ # atmosphere
2
+
3
+ Portable GLSL/WGSL single-scattering Rayleigh/Mie sky and aerial perspective. The sun direction,
4
+ camera, and surface positions use a local east/north/up frame in metres, with z = altitude.
5
+ The analytic planet is a sphere with `planetRadius` (default 6,371,000 m); the atmosphere
6
+ extends 100 km above it. This is a local tangent-frame renderer, rather than a globe adapter.
7
+
8
+ `atmosphere_getSkyColor(camera, normalizedDirection)` returns exposure-mapped sky RGB.
9
+ `atmosphere_getColor(color, position, camera)` applies atmospheric extinction and in-scattering
10
+ to geometry, preserving alpha. Set `enabled` to zero to leave geometry untouched.
11
+ `atmosphere_getScattering` returns linear radiance and RGB transmittance for applications with
12
+ their own HDR compositor. `sunIntensity`, `rayleigh`, `haze` and `exposure` control illumination,
13
+ molecular scattering, aerosol scattering, and display exposure respectively. `groundColor`
14
+ sets an approximate diffuse ground boundary beneath the horizon. A nonzero
15
+ `sunDirection` is required. Incremental uniform updates preserve previous values.
16
+
17
+ The fixed integration uses twelve view samples and four sunlight samples. Planet occlusion
18
+ removes sunlight from the night side. The implementation omits multiple scattering, ozone,
19
+ terrain shadows and cloud attenuation of atmospheric light; it is not a spectral atmosphere
20
+ model. Long near-horizon paths and very low sunlight can undersample density. Use separate
21
+ celestial layers for disks; this module provides the scattering halo.
22
+
23
+ `AtmosphereLayer` supplies shared perspective camera rays, far depth, picking exclusion and
24
+ premultiplied opacity for deck.gl flat maps on WebGPU and WebGL2. Draw it before SunLayer,
25
+ MoonLayer, CloudLayer and opaque scene layers. Orthographic and globe views are skipped.
@@ -0,0 +1,246 @@
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 AtmosphereUniforms = {
8
+ enabled: number;
9
+ /** Direction toward the sun in a local east/north/up frame; must be nonzero. */
10
+ sunDirection: [number, number, number];
11
+ sunIntensity: number;
12
+ /** Aerosol and molecular scattering multipliers. */
13
+ haze: number;
14
+ rayleigh: number;
15
+ /** Planet radius in metres. Positions use a local tangent frame, with z = altitude. */
16
+ planetRadius: number;
17
+ exposure: number;
18
+ /** Diffuse ground boundary beneath the horizon, in linear RGB. */
19
+ groundColor: [number, number, number];
20
+ };
21
+ export type AtmosphereProps = Partial<AtmosphereUniforms>;
22
+ const DEFAULT_UNIFORMS: AtmosphereUniforms = {
23
+ enabled: 1,
24
+ sunDirection: [0, 0.8, 0.6],
25
+ sunIntensity: 20,
26
+ haze: 1,
27
+ rayleigh: 1,
28
+ planetRadius: 6371000,
29
+ exposure: 1,
30
+ groundColor: [0.18, 0.17, 0.14]
31
+ };
32
+
33
+ /** Single-scattering Rayleigh/Mie sky and aerial perspective. Distances are metres.
34
+ * Includes a spherical planet's solar occlusion, without multiple scattering or ozone.
35
+ */
36
+ export const atmosphere = {
37
+ name: 'atmosphere',
38
+ uniformTypes: {
39
+ enabled: 'f32',
40
+ sunDirection: 'vec3<f32>',
41
+ sunIntensity: 'f32',
42
+ haze: 'f32',
43
+ rayleigh: 'f32',
44
+ planetRadius: 'f32',
45
+ exposure: 'f32',
46
+ groundColor: 'vec3<f32>'
47
+ },
48
+ defaultUniforms: DEFAULT_UNIFORMS,
49
+ getUniforms(props = {}, previousUniforms = DEFAULT_UNIFORMS) {
50
+ return {...DEFAULT_UNIFORMS, ...previousUniforms, ...props};
51
+ },
52
+ fs: /* glsl */ `
53
+ layout(std140) uniform atmosphereUniforms {
54
+ float enabled;
55
+ vec3 sunDirection;
56
+ float sunIntensity;
57
+ float haze;
58
+ float rayleigh;
59
+ float planetRadius;
60
+ float exposure;
61
+ vec3 groundColor;
62
+ } atmosphere;
63
+ struct AtmosphereSample {
64
+ vec3 radiance;
65
+ vec3 transmittance;
66
+ };
67
+
68
+ vec2 atmosphere_intersectSphere(vec3 origin, vec3 direction, float radius) {
69
+ float projected = dot(origin, direction);
70
+ float discriminant = projected * projected - (dot(origin.xy, origin.xy) + (origin.z - radius) * (origin.z + radius));
71
+ if (discriminant < 0.0) return vec2(-1.0);
72
+ float root = sqrt(discriminant);
73
+ return vec2(-projected - root, -projected + root);
74
+ }
75
+ vec2 atmosphere_getDensity(vec3 position) {
76
+ float height = max(length(position) - atmosphere.planetRadius, 0.0);
77
+ return exp(-vec2(height / 8000.0, height / 1200.0));
78
+ }
79
+ AtmosphereSample atmosphere_getScattering(vec3 camera, vec3 direction, float distanceLimit) {
80
+ AtmosphereSample result;
81
+ result.radiance = vec3(0.0);
82
+ result.transmittance = vec3(1.0);
83
+ if (atmosphere.enabled < 0.5 || distanceLimit <= 0.0) return result;
84
+ vec3 origin = vec3(camera.xy, atmosphere.planetRadius + max(camera.z, 1.0));
85
+ vec2 shell = atmosphere_intersectSphere(origin, direction, atmosphere.planetRadius + 100000.0);
86
+ float start = max(shell.x, 0.0);
87
+ float end = min(shell.y, distanceLimit);
88
+ vec2 ground = atmosphere_intersectSphere(origin, direction, atmosphere.planetRadius);
89
+ if (ground.x > 0.0) end = min(end, ground.x);
90
+ if (end <= start) return result;
91
+ vec3 sunlight = normalize(atmosphere.sunDirection);
92
+ vec3 rayleigh = vec3(0.0000058, 0.0000135, 0.0000331) * max(atmosphere.rayleigh, 0.0);
93
+ vec3 mie = vec3(0.000021) * max(atmosphere.haze, 0.0);
94
+ float cosine = dot(direction, sunlight);
95
+ float rayleighPhase = 0.0596831 * (1.0 + cosine * cosine);
96
+ float asymmetry = 0.76;
97
+ float miePhase = (1.0 - asymmetry * asymmetry) / (12.566371 * pow(max(1.0 + asymmetry * asymmetry - 2.0 * asymmetry * cosine, 0.001), 1.5));
98
+ float stepLength = (end - start) / 12.0;
99
+ vec2 opticalDepth = vec2(0.0);
100
+ vec3 radiance = vec3(0.0);
101
+ for (int sampleIndex = 0; sampleIndex < 12; sampleIndex++) {
102
+ vec3 position = origin + direction * (start + (float(sampleIndex) + 0.5) * stepLength);
103
+ vec2 density = atmosphere_getDensity(position);
104
+ vec2 centerDepth = opticalDepth + density * stepLength * 0.5;
105
+ opticalDepth += density * stepLength;
106
+ vec2 solarGround = atmosphere_intersectSphere(position, sunlight, atmosphere.planetRadius);
107
+ if (solarGround.x > 0.0) continue;
108
+ float solarDistance = max(atmosphere_intersectSphere(position, sunlight, atmosphere.planetRadius + 100000.0).y, 0.0);
109
+ float solarStep = solarDistance / 4.0;
110
+ vec2 solarDepth = vec2(0.0);
111
+ for (int solarIndex = 0; solarIndex < 4; solarIndex++) {
112
+ solarDepth += atmosphere_getDensity(position + sunlight * ((float(solarIndex) + 0.5) * solarStep)) * solarStep;
113
+ }
114
+ vec3 attenuation = exp(-rayleigh * (centerDepth.x + solarDepth.x) - mie * (centerDepth.y + solarDepth.y));
115
+ radiance += attenuation * (rayleigh * density.x * rayleighPhase + mie * density.y * miePhase) * stepLength;
116
+ }
117
+ result.radiance = radiance * max(atmosphere.sunIntensity, 0.0);
118
+ result.transmittance = exp(-rayleigh * opticalDepth.x - mie * opticalDepth.y);
119
+ return result;
120
+ }
121
+ vec3 atmosphere_getSkyColor(vec3 camera, vec3 direction) {
122
+ if (atmosphere.enabled < 0.5) return vec3(0.0);
123
+ AtmosphereSample scatteringSample = atmosphere_getScattering(camera, normalize(direction), 1000000.0);
124
+ vec3 origin = vec3(camera.xy, atmosphere.planetRadius + max(camera.z, 1.0));
125
+ vec3 sunlight = normalize(atmosphere.sunDirection);
126
+ float groundDistance = atmosphere_intersectSphere(origin, normalize(direction), atmosphere.planetRadius).x;
127
+ if (groundDistance > 0.0 && sunlight.z > 0.0) {
128
+ // Approximate direct irradiance at the ground boundary, attenuated on its way to the eye.
129
+ float elevation = max(sunlight.z, 0.02);
130
+ vec3 extinction = vec3(0.0000058, 0.0000135, 0.0000331) * max(atmosphere.rayleigh, 0.0) * 8000.0
131
+ + vec3(0.000021) * max(atmosphere.haze, 0.0) * 1200.0;
132
+ scatteringSample.radiance += atmosphere.groundColor * atmosphere.sunIntensity * sunlight.z / 3.141593
133
+ * exp(-extinction / elevation) * scatteringSample.transmittance;
134
+ }
135
+ return vec3(1.0) - exp(-scatteringSample.radiance * atmosphere.exposure);
136
+ }
137
+ vec4 atmosphere_getColor(vec4 color, vec3 position, vec3 camera) {
138
+ vec3 difference = position - camera;
139
+ float distance = length(difference);
140
+ if (distance < 0.001 || atmosphere.enabled < 0.5) return color;
141
+ AtmosphereSample scatteringSample = atmosphere_getScattering(camera, difference / distance, distance);
142
+ vec3 scattering = vec3(1.0) - exp(-scatteringSample.radiance * atmosphere.exposure);
143
+ return vec4(color.rgb * scatteringSample.transmittance + scattering, color.a);
144
+ }
145
+ `,
146
+ source: /* wgsl */ `
147
+ struct atmosphereUniforms {
148
+ enabled: f32,
149
+ sunDirection: vec3f,
150
+ sunIntensity: f32,
151
+ haze: f32,
152
+ rayleigh: f32,
153
+ planetRadius: f32,
154
+ exposure: f32,
155
+ groundColor: vec3f,
156
+ };
157
+ @group(3) @binding(auto) var<uniform> atmosphere: atmosphereUniforms;
158
+ struct AtmosphereSample { radiance: vec3f,
159
+ transmittance: vec3f };
160
+
161
+ fn atmosphere_intersectSphere(origin: vec3f,
162
+ direction: vec3f,
163
+ radius: f32) -> vec2f {
164
+ var projected: f32 = dot(origin, direction);
165
+ var discriminant: f32 = projected * projected - (dot(origin.xy, origin.xy) + (origin.z - radius) * (origin.z + radius));
166
+ if (discriminant < 0.0) { return vec2f(-1.0); }
167
+ var root: f32 = sqrt(discriminant);
168
+ return vec2f(-projected - root, -projected + root);
169
+ }
170
+ fn atmosphere_getDensity(position: vec3f) -> vec2f {
171
+ var height: f32 = max(length(position) - atmosphere.planetRadius, 0.0);
172
+ return exp(-vec2f(height / 8000.0, height / 1200.0));
173
+ }
174
+ fn atmosphere_getScattering(camera: vec3f,
175
+ direction: vec3f,
176
+ distanceLimit: f32) -> AtmosphereSample {
177
+ var result: AtmosphereSample;
178
+ result.radiance = vec3f(0.0);
179
+ result.transmittance = vec3f(1.0);
180
+ if (atmosphere.enabled < 0.5 || distanceLimit <= 0.0) { return result; }
181
+ var origin: vec3f = vec3f(camera.xy, atmosphere.planetRadius + max(camera.z, 1.0));
182
+ var shell: vec2f = atmosphere_intersectSphere(origin, direction, atmosphere.planetRadius + 100000.0);
183
+ var start: f32 = max(shell.x, 0.0);
184
+ var end: f32 = min(shell.y, distanceLimit);
185
+ var ground: vec2f = atmosphere_intersectSphere(origin, direction, atmosphere.planetRadius);
186
+ if (ground.x > 0.0) { end = min(end, ground.x); }
187
+ if (end <= start) { return result; }
188
+ var sunlight: vec3f = normalize(atmosphere.sunDirection);
189
+ var rayleigh: vec3f = vec3f(0.0000058, 0.0000135, 0.0000331) * max(atmosphere.rayleigh, 0.0);
190
+ var mie: vec3f = vec3f(0.000021) * max(atmosphere.haze, 0.0);
191
+ var cosine: f32 = dot(direction, sunlight);
192
+ var rayleighPhase: f32 = 0.0596831 * (1.0 + cosine * cosine);
193
+ var asymmetry: f32 = 0.76;
194
+ var miePhase: f32 = (1.0 - asymmetry * asymmetry) / (12.566371 * pow(max(1.0 + asymmetry * asymmetry - 2.0 * asymmetry * cosine, 0.001), 1.5));
195
+ var stepLength: f32 = (end - start) / 12.0;
196
+ var opticalDepth: vec2f = vec2f(0.0);
197
+ var radiance: vec3f = vec3f(0.0);
198
+ for (var sampleIndex: i32 = 0; sampleIndex < 12; sampleIndex++) {
199
+ var position: vec3f = origin + direction * (start + (f32(sampleIndex) + 0.5) * stepLength);
200
+ var density: vec2f = atmosphere_getDensity(position);
201
+ var centerDepth: vec2f = opticalDepth + density * stepLength * 0.5;
202
+ opticalDepth += density * stepLength;
203
+ var solarGround: vec2f = atmosphere_intersectSphere(position, sunlight, atmosphere.planetRadius);
204
+ if (solarGround.x > 0.0) { continue; }
205
+ var solarDistance: f32 = max(atmosphere_intersectSphere(position, sunlight, atmosphere.planetRadius + 100000.0).y, 0.0);
206
+ var solarStep: f32 = solarDistance / 4.0;
207
+ var solarDepth: vec2f = vec2f(0.0);
208
+ for (var solarIndex: i32 = 0; solarIndex < 4; solarIndex++) {
209
+ solarDepth += atmosphere_getDensity(position + sunlight * ((f32(solarIndex) + 0.5) * solarStep)) * solarStep;
210
+ }
211
+ var attenuation: vec3f = exp(-rayleigh * (centerDepth.x + solarDepth.x) - mie * (centerDepth.y + solarDepth.y));
212
+ radiance += attenuation * (rayleigh * density.x * rayleighPhase + mie * density.y * miePhase) * stepLength;
213
+ }
214
+ result.radiance = radiance * max(atmosphere.sunIntensity, 0.0);
215
+ result.transmittance = exp(-rayleigh * opticalDepth.x - mie * opticalDepth.y);
216
+ return result;
217
+ }
218
+ fn atmosphere_getSkyColor(camera: vec3f,
219
+ direction: vec3f) -> vec3f {
220
+ if (atmosphere.enabled < 0.5) { return vec3f(0.0); }
221
+ var scatteringSample: AtmosphereSample = atmosphere_getScattering(camera, normalize(direction), 1000000.0);
222
+ let origin = vec3f(camera.xy, atmosphere.planetRadius + max(camera.z, 1.0));
223
+ let sunlight = normalize(atmosphere.sunDirection);
224
+ let groundDistance = atmosphere_intersectSphere(origin, normalize(direction), atmosphere.planetRadius).x;
225
+ if (groundDistance > 0.0 && sunlight.z > 0.0) {
226
+ // Approximate direct irradiance at the ground boundary, attenuated on its way to the eye.
227
+ let elevation = max(sunlight.z, 0.02);
228
+ let extinction = vec3f(0.0000058, 0.0000135, 0.0000331) * max(atmosphere.rayleigh, 0.0) * 8000.0
229
+ + vec3f(0.000021) * max(atmosphere.haze, 0.0) * 1200.0;
230
+ scatteringSample.radiance += atmosphere.groundColor * atmosphere.sunIntensity * sunlight.z / 3.141593
231
+ * exp(-extinction / elevation) * scatteringSample.transmittance;
232
+ }
233
+ return vec3f(1.0) - exp(-scatteringSample.radiance * atmosphere.exposure);
234
+ }
235
+ fn atmosphere_getColor(color: vec4f,
236
+ position: vec3f,
237
+ camera: vec3f) -> vec4f {
238
+ var difference: vec3f = position - camera;
239
+ var distance: f32 = length(difference);
240
+ if (distance < 0.001 || atmosphere.enabled < 0.5) { return color; }
241
+ var scatteringSample: AtmosphereSample = atmosphere_getScattering(camera, difference / distance, distance);
242
+ var scattering: vec3f = vec3f(1.0) - exp(-scatteringSample.radiance * atmosphere.exposure);
243
+ return vec4f(color.rgb * scatteringSample.transmittance + scattering, color.a);
244
+ }
245
+ `
246
+ } as const satisfies ShaderModule<AtmosphereProps, AtmosphereUniforms>;