@zephyr3d/scene 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/dist/animation/animation.js +149 -27
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +173 -73
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +65 -10
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +41 -20
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/morphtarget.js +14 -38
  10. package/dist/animation/morphtarget.js.map +1 -1
  11. package/dist/animation/morphtrack.js +59 -22
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/proptrack.js +190 -0
  14. package/dist/animation/proptrack.js.map +1 -0
  15. package/dist/animation/rotationtrack.js +29 -11
  16. package/dist/animation/rotationtrack.js.map +1 -1
  17. package/dist/animation/scaletrack.js +29 -11
  18. package/dist/animation/scaletrack.js.map +1 -1
  19. package/dist/animation/skeleton.js +241 -78
  20. package/dist/animation/skeleton.js.map +1 -1
  21. package/dist/animation/translationtrack.js +30 -11
  22. package/dist/animation/translationtrack.js.map +1 -1
  23. package/dist/app/api.js +43 -0
  24. package/dist/app/api.js.map +1 -0
  25. package/dist/app/app.js +153 -0
  26. package/dist/app/app.js.map +1 -0
  27. package/dist/app/engine.js +312 -0
  28. package/dist/app/engine.js.map +1 -0
  29. package/dist/app/inputmgr.js +351 -0
  30. package/dist/app/inputmgr.js.map +1 -0
  31. package/dist/app/runtimescript.js +62 -0
  32. package/dist/app/runtimescript.js.map +1 -0
  33. package/dist/app/scriptingsystem.js +220 -0
  34. package/dist/app/scriptingsystem.js.map +1 -0
  35. package/dist/app/scriptregistry.js +432 -0
  36. package/dist/app/scriptregistry.js.map +1 -0
  37. package/dist/asset/assetmanager.js +772 -291
  38. package/dist/asset/assetmanager.js.map +1 -1
  39. package/dist/asset/builtin.js +7 -43
  40. package/dist/asset/builtin.js.map +1 -1
  41. package/dist/asset/loaders/dds/dds.js +17 -93
  42. package/dist/asset/loaders/dds/dds.js.map +1 -1
  43. package/dist/asset/loaders/dds/dds_loader.js +8 -18
  44. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  45. package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
  46. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  47. package/dist/asset/loaders/gltf/helpers.js +27 -14
  48. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  49. package/dist/asset/loaders/hdr/hdr.js +17 -12
  50. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  51. package/dist/asset/loaders/image/tga_Loader.js +13 -16
  52. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  53. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  54. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  55. package/dist/asset/loaders/loader.js.map +1 -1
  56. package/dist/asset/model.js +158 -4
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/blitter/bilateralblur.js +0 -1
  59. package/dist/blitter/bilateralblur.js.map +1 -1
  60. package/dist/blitter/blitter.js +22 -23
  61. package/dist/blitter/blitter.js.map +1 -1
  62. package/dist/blitter/box.js.map +1 -1
  63. package/dist/blitter/copy.js.map +1 -1
  64. package/dist/blitter/gaussianblur.js +23 -23
  65. package/dist/blitter/gaussianblur.js.map +1 -1
  66. package/dist/camera/base.js +141 -34
  67. package/dist/camera/base.js.map +1 -1
  68. package/dist/camera/camera.js +653 -149
  69. package/dist/camera/camera.js.map +1 -1
  70. package/dist/camera/fps.js +2 -10
  71. package/dist/camera/fps.js.map +1 -1
  72. package/dist/camera/orbit.js +132 -59
  73. package/dist/camera/orbit.js.map +1 -1
  74. package/dist/camera/orthocamera.js +37 -12
  75. package/dist/camera/orthocamera.js.map +1 -1
  76. package/dist/camera/perspectivecamera.js +37 -20
  77. package/dist/camera/perspectivecamera.js.map +1 -1
  78. package/dist/index.d.ts +18268 -6982
  79. package/dist/index.js +49 -16
  80. package/dist/index.js.map +1 -1
  81. package/dist/material/blinn.js +5 -0
  82. package/dist/material/blinn.js.map +1 -1
  83. package/dist/material/grassmaterial.js +6 -1
  84. package/dist/material/grassmaterial.js.map +1 -1
  85. package/dist/material/lambert.js +6 -1
  86. package/dist/material/lambert.js.map +1 -1
  87. package/dist/material/material.js +346 -73
  88. package/dist/material/material.js.map +1 -1
  89. package/dist/material/meshmaterial.js +498 -156
  90. package/dist/material/meshmaterial.js.map +1 -1
  91. package/dist/material/mixins/albedocolor.js +5 -1
  92. package/dist/material/mixins/albedocolor.js.map +1 -1
  93. package/dist/material/mixins/foliage.js +3 -3
  94. package/dist/material/mixins/foliage.js.map +1 -1
  95. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  96. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  97. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  98. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  99. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
  100. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  101. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  102. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  103. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  104. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  105. package/dist/material/mixins/lit.js +16 -4
  106. package/dist/material/mixins/lit.js.map +1 -1
  107. package/dist/material/mixins/pbr/brdf.js +134 -0
  108. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  109. package/dist/material/mixins/pbr/common.js +68 -85
  110. package/dist/material/mixins/pbr/common.js.map +1 -1
  111. package/dist/material/mixins/texture.js +98 -83
  112. package/dist/material/mixins/texture.js.map +1 -1
  113. package/dist/material/mixins/vertexcolor.js +6 -2
  114. package/dist/material/mixins/vertexcolor.js.map +1 -1
  115. package/dist/material/particle.js +272 -0
  116. package/dist/material/particle.js.map +1 -0
  117. package/dist/material/pbrblueprint.js +186 -0
  118. package/dist/material/pbrblueprint.js.map +1 -0
  119. package/dist/material/pbrmr.js +10 -0
  120. package/dist/material/pbrmr.js.map +1 -1
  121. package/dist/material/pbrsg.js +10 -0
  122. package/dist/material/pbrsg.js.map +1 -1
  123. package/dist/material/shader/helper.js +521 -287
  124. package/dist/material/shader/helper.js.map +1 -1
  125. package/dist/material/terrain-cm.js +607 -0
  126. package/dist/material/terrain-cm.js.map +1 -0
  127. package/dist/material/terrainmaterial.js +59 -54
  128. package/dist/material/terrainmaterial.js.map +1 -1
  129. package/dist/material/unlit.js +5 -0
  130. package/dist/material/unlit.js.map +1 -1
  131. package/dist/material/water.js +415 -0
  132. package/dist/material/water.js.map +1 -0
  133. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  134. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  135. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  136. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  137. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  138. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  139. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  140. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  141. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  142. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  143. package/dist/posteffect/bloom.js +39 -54
  144. package/dist/posteffect/bloom.js.map +1 -1
  145. package/dist/posteffect/compositor.js +95 -128
  146. package/dist/posteffect/compositor.js.map +1 -1
  147. package/dist/posteffect/fxaa.js +10 -18
  148. package/dist/posteffect/fxaa.js.map +1 -1
  149. package/dist/posteffect/grayscale.js +9 -17
  150. package/dist/posteffect/grayscale.js.map +1 -1
  151. package/dist/posteffect/motionblur.js +105 -0
  152. package/dist/posteffect/motionblur.js.map +1 -0
  153. package/dist/posteffect/posteffect.js +66 -35
  154. package/dist/posteffect/posteffect.js.map +1 -1
  155. package/dist/posteffect/sao.js +13 -21
  156. package/dist/posteffect/sao.js.map +1 -1
  157. package/dist/posteffect/ssr.js +60 -100
  158. package/dist/posteffect/ssr.js.map +1 -1
  159. package/dist/posteffect/taa.js +175 -0
  160. package/dist/posteffect/taa.js.map +1 -0
  161. package/dist/posteffect/tonemap.js +12 -20
  162. package/dist/posteffect/tonemap.js.map +1 -1
  163. package/dist/render/abuffer_oit.js +30 -19
  164. package/dist/render/abuffer_oit.js.map +1 -1
  165. package/dist/render/clipmap.js +429 -101
  166. package/dist/render/clipmap.js.map +1 -1
  167. package/dist/render/cluster_light.js +7 -5
  168. package/dist/render/cluster_light.js.map +1 -1
  169. package/dist/render/cull_visitor.js +43 -3
  170. package/dist/render/cull_visitor.js.map +1 -1
  171. package/dist/render/depthpass.js +14 -5
  172. package/dist/render/depthpass.js.map +1 -1
  173. package/dist/render/drawable_mixin.js +113 -40
  174. package/dist/render/drawable_mixin.js.map +1 -1
  175. package/dist/render/envlight.js +86 -141
  176. package/dist/render/envlight.js.map +1 -1
  177. package/dist/render/fbm_wavegenerator.js +234 -0
  178. package/dist/render/fbm_wavegenerator.js.map +1 -0
  179. package/dist/render/fft_wavegenerator.js +64 -50
  180. package/dist/render/fft_wavegenerator.js.map +1 -1
  181. package/dist/render/fullscreenquad.js +2 -2
  182. package/dist/render/fullscreenquad.js.map +1 -1
  183. package/dist/render/gerstner_wavegenerator.js +98 -48
  184. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  185. package/dist/render/globalbindgroup_allocator.js +4 -2
  186. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  187. package/dist/render/hzb.js +6 -3
  188. package/dist/render/hzb.js.map +1 -1
  189. package/dist/render/lightpass.js +19 -18
  190. package/dist/render/lightpass.js.map +1 -1
  191. package/dist/render/objectcolorpass.js +4 -4
  192. package/dist/render/objectcolorpass.js.map +1 -1
  193. package/dist/render/primitive.js +213 -104
  194. package/dist/render/primitive.js.map +1 -1
  195. package/dist/render/render_queue.js +40 -20
  196. package/dist/render/render_queue.js.map +1 -1
  197. package/dist/render/renderbundle_wrapper.js +65 -15
  198. package/dist/render/renderbundle_wrapper.js.map +1 -1
  199. package/dist/render/renderer.js +326 -185
  200. package/dist/render/renderer.js.map +1 -1
  201. package/dist/render/renderpass.js +20 -36
  202. package/dist/render/renderpass.js.map +1 -1
  203. package/dist/render/shadowmap_pass.js +3 -3
  204. package/dist/render/shadowmap_pass.js.map +1 -1
  205. package/dist/render/sky.js +864 -541
  206. package/dist/render/sky.js.map +1 -1
  207. package/dist/render/weightedblended_oit.js +13 -15
  208. package/dist/render/weightedblended_oit.js.map +1 -1
  209. package/dist/scene/batchgroup.js +18 -5
  210. package/dist/scene/batchgroup.js.map +1 -1
  211. package/dist/scene/environment.js +78 -48
  212. package/dist/scene/environment.js.map +1 -1
  213. package/dist/scene/graph_node.js +2 -3
  214. package/dist/scene/graph_node.js.map +1 -1
  215. package/dist/scene/light.js +28 -89
  216. package/dist/scene/light.js.map +1 -1
  217. package/dist/scene/mesh.js +218 -87
  218. package/dist/scene/mesh.js.map +1 -1
  219. package/dist/scene/octree.js +371 -162
  220. package/dist/scene/octree.js.map +1 -1
  221. package/dist/scene/particlesys.js +684 -0
  222. package/dist/scene/particlesys.js.map +1 -0
  223. package/dist/scene/raycast_visitor.js +34 -5
  224. package/dist/scene/raycast_visitor.js.map +1 -1
  225. package/dist/scene/scene.js +309 -85
  226. package/dist/scene/scene.js.map +1 -1
  227. package/dist/scene/scene_node.js +675 -102
  228. package/dist/scene/scene_node.js.map +1 -1
  229. package/dist/scene/terrain/grass.js +48 -49
  230. package/dist/scene/terrain/grass.js.map +1 -1
  231. package/dist/scene/terrain/heightfield.js +46 -44
  232. package/dist/scene/terrain/heightfield.js.map +1 -1
  233. package/dist/scene/terrain/patch.js +20 -29
  234. package/dist/scene/terrain/patch.js.map +1 -1
  235. package/dist/scene/terrain/quadtree.js +58 -27
  236. package/dist/scene/terrain/quadtree.js.map +1 -1
  237. package/dist/scene/terrain/terrain.js +31 -45
  238. package/dist/scene/terrain/terrain.js.map +1 -1
  239. package/dist/scene/terrain-cm/grass.js +603 -0
  240. package/dist/scene/terrain-cm/grass.js.map +1 -0
  241. package/dist/scene/terrain-cm/grassmaterial.js +160 -0
  242. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  243. package/dist/scene/terrain-cm/terrain-cm.js +533 -0
  244. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  245. package/dist/scene/water.js +378 -0
  246. package/dist/scene/water.js.map +1 -0
  247. package/dist/shaders/atmosphere.js +957 -0
  248. package/dist/shaders/atmosphere.js.map +1 -0
  249. package/dist/shaders/fog.js +116 -0
  250. package/dist/shaders/fog.js.map +1 -0
  251. package/dist/shaders/misc.js.map +1 -1
  252. package/dist/shaders/noise.js +217 -8
  253. package/dist/shaders/noise.js.map +1 -1
  254. package/dist/shaders/pbr.js.map +1 -1
  255. package/dist/shaders/shadow.js +8 -8
  256. package/dist/shaders/shadow.js.map +1 -1
  257. package/dist/shaders/ssr.js +87 -39
  258. package/dist/shaders/ssr.js.map +1 -1
  259. package/dist/shaders/temporal.js +216 -0
  260. package/dist/shaders/temporal.js.map +1 -0
  261. package/dist/shaders/water.js +42 -20
  262. package/dist/shaders/water.js.map +1 -1
  263. package/dist/shadow/esm.js +31 -13
  264. package/dist/shadow/esm.js.map +1 -1
  265. package/dist/shadow/pcf_opt.js +12 -13
  266. package/dist/shadow/pcf_opt.js.map +1 -1
  267. package/dist/shadow/pcf_pd.js +12 -13
  268. package/dist/shadow/pcf_pd.js.map +1 -1
  269. package/dist/shadow/shader.js +38 -0
  270. package/dist/shadow/shader.js.map +1 -0
  271. package/dist/shadow/shadow_impl.js.map +1 -1
  272. package/dist/shadow/shadowmapper.js +67 -26
  273. package/dist/shadow/shadowmapper.js.map +1 -1
  274. package/dist/shadow/ssm.js +15 -16
  275. package/dist/shadow/ssm.js.map +1 -1
  276. package/dist/shadow/vsm.js +33 -16
  277. package/dist/shadow/vsm.js.map +1 -1
  278. package/dist/shapes/box.js +181 -83
  279. package/dist/shapes/box.js.map +1 -1
  280. package/dist/shapes/cylinder.js +101 -43
  281. package/dist/shapes/cylinder.js.map +1 -1
  282. package/dist/shapes/plane.js +70 -29
  283. package/dist/shapes/plane.js.map +1 -1
  284. package/dist/shapes/shape.js +120 -17
  285. package/dist/shapes/shape.js.map +1 -1
  286. package/dist/shapes/sphere.js +78 -44
  287. package/dist/shapes/sphere.js.map +1 -1
  288. package/dist/shapes/tetrahedron.js +256 -0
  289. package/dist/shapes/tetrahedron.js.map +1 -0
  290. package/dist/shapes/torus.js +76 -55
  291. package/dist/shapes/torus.js.map +1 -1
  292. package/dist/src/animation/animation.js +127 -0
  293. package/dist/src/animation/animation.js.map +1 -0
  294. package/dist/src/animation/animationset.js +255 -0
  295. package/dist/src/animation/animationset.js.map +1 -0
  296. package/dist/src/animation/animationtrack.js +34 -0
  297. package/dist/src/animation/animationtrack.js.map +1 -0
  298. package/dist/src/animation/eulerrotationtrack.js +52 -0
  299. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  300. package/dist/src/animation/morphtarget.js +93 -0
  301. package/dist/src/animation/morphtarget.js.map +1 -0
  302. package/dist/src/animation/morphtrack.js +70 -0
  303. package/dist/src/animation/morphtrack.js.map +1 -0
  304. package/dist/src/animation/proptrack.js +161 -0
  305. package/dist/src/animation/proptrack.js.map +1 -0
  306. package/dist/src/animation/rotationtrack.js +51 -0
  307. package/dist/src/animation/rotationtrack.js.map +1 -0
  308. package/dist/src/animation/scaletrack.js +50 -0
  309. package/dist/src/animation/scaletrack.js.map +1 -0
  310. package/dist/src/animation/skeleton.js +204 -0
  311. package/dist/src/animation/skeleton.js.map +1 -0
  312. package/dist/src/animation/translationtrack.js +50 -0
  313. package/dist/src/animation/translationtrack.js.map +1 -0
  314. package/dist/{app.js → src/app/app.js} +18 -40
  315. package/dist/src/app/app.js.map +1 -0
  316. package/dist/{input → src/app}/inputmgr.js +41 -16
  317. package/dist/src/app/inputmgr.js.map +1 -0
  318. package/dist/src/asset/assetmanager.js +404 -0
  319. package/dist/src/asset/assetmanager.js.map +1 -0
  320. package/dist/src/asset/builtin.js +337 -0
  321. package/dist/src/asset/builtin.js.map +1 -0
  322. package/dist/src/asset/loaders/dds/dds.js +470 -0
  323. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  324. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  325. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  326. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  327. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  328. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  329. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  330. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  331. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  332. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  333. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  334. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  335. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  336. package/dist/src/asset/loaders/loader.js +45 -0
  337. package/dist/src/asset/loaders/loader.js.map +1 -0
  338. package/dist/src/asset/model.js +414 -0
  339. package/dist/src/asset/model.js.map +1 -0
  340. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  341. package/dist/src/blitter/bilateralblur.js.map +1 -0
  342. package/dist/src/blitter/blitter.js +390 -0
  343. package/dist/src/blitter/blitter.js.map +1 -0
  344. package/dist/src/blitter/box.js +118 -0
  345. package/dist/src/blitter/box.js.map +1 -0
  346. package/dist/src/blitter/copy.js +22 -0
  347. package/dist/src/blitter/copy.js.map +1 -0
  348. package/dist/src/blitter/gaussianblur.js +228 -0
  349. package/dist/src/blitter/gaussianblur.js.map +1 -0
  350. package/dist/src/camera/base.js +92 -0
  351. package/dist/src/camera/base.js.map +1 -0
  352. package/dist/src/camera/camera.js +1005 -0
  353. package/dist/src/camera/camera.js.map +1 -0
  354. package/dist/src/camera/fps.js +238 -0
  355. package/dist/src/camera/fps.js.map +1 -0
  356. package/dist/src/camera/orbit.js +245 -0
  357. package/dist/src/camera/orbit.js.map +1 -0
  358. package/dist/src/camera/orthocamera.js +167 -0
  359. package/dist/src/camera/orthocamera.js.map +1 -0
  360. package/dist/src/camera/perspectivecamera.js +141 -0
  361. package/dist/src/camera/perspectivecamera.js.map +1 -0
  362. package/dist/src/index.js +120 -0
  363. package/dist/src/index.js.map +1 -0
  364. package/dist/src/material/blinn.js +81 -0
  365. package/dist/src/material/blinn.js.map +1 -0
  366. package/dist/src/material/grassmaterial.js +113 -0
  367. package/dist/src/material/grassmaterial.js.map +1 -0
  368. package/dist/src/material/lambert.js +92 -0
  369. package/dist/src/material/lambert.js.map +1 -0
  370. package/dist/src/material/material.js +301 -0
  371. package/dist/src/material/material.js.map +1 -0
  372. package/dist/src/material/meshmaterial.js +704 -0
  373. package/dist/src/material/meshmaterial.js.map +1 -0
  374. package/dist/src/material/mixins/albedocolor.js +76 -0
  375. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  376. package/dist/src/material/mixins/foliage.js +47 -0
  377. package/dist/src/material/mixins/foliage.js.map +1 -0
  378. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  379. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  380. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  381. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  382. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  383. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  384. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  385. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  386. package/dist/src/material/mixins/lit.js +476 -0
  387. package/dist/src/material/mixins/lit.js.map +1 -0
  388. package/dist/src/material/mixins/pbr/common.js +918 -0
  389. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  390. package/dist/src/material/mixins/texture.js +172 -0
  391. package/dist/src/material/mixins/texture.js.map +1 -0
  392. package/dist/src/material/mixins/vertexcolor.js +56 -0
  393. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  394. package/dist/src/material/particle.js +178 -0
  395. package/dist/src/material/particle.js.map +1 -0
  396. package/dist/src/material/pbrmr.js +97 -0
  397. package/dist/src/material/pbrmr.js.map +1 -0
  398. package/dist/src/material/pbrsg.js +97 -0
  399. package/dist/src/material/pbrsg.js.map +1 -0
  400. package/dist/src/material/shader/helper.js +1209 -0
  401. package/dist/src/material/shader/helper.js.map +1 -0
  402. package/dist/src/material/terrain-cm.js +606 -0
  403. package/dist/src/material/terrain-cm.js.map +1 -0
  404. package/dist/src/material/terrainmaterial.js +375 -0
  405. package/dist/src/material/terrainmaterial.js.map +1 -0
  406. package/dist/src/material/unlit.js +41 -0
  407. package/dist/src/material/unlit.js.map +1 -0
  408. package/dist/src/material/water.js +417 -0
  409. package/dist/src/material/water.js.map +1 -0
  410. package/dist/src/posteffect/bloom.js +361 -0
  411. package/dist/src/posteffect/bloom.js.map +1 -0
  412. package/dist/src/posteffect/compositor.js +226 -0
  413. package/dist/src/posteffect/compositor.js.map +1 -0
  414. package/dist/src/posteffect/fxaa.js +273 -0
  415. package/dist/src/posteffect/fxaa.js.map +1 -0
  416. package/dist/src/posteffect/grayscale.js +69 -0
  417. package/dist/src/posteffect/grayscale.js.map +1 -0
  418. package/dist/src/posteffect/motionblur.js +96 -0
  419. package/dist/src/posteffect/motionblur.js.map +1 -0
  420. package/dist/src/posteffect/posteffect.js +126 -0
  421. package/dist/src/posteffect/posteffect.js.map +1 -0
  422. package/dist/src/posteffect/sao.js +324 -0
  423. package/dist/src/posteffect/sao.js.map +1 -0
  424. package/dist/src/posteffect/ssr.js +489 -0
  425. package/dist/src/posteffect/ssr.js.map +1 -0
  426. package/dist/src/posteffect/taa.js +172 -0
  427. package/dist/src/posteffect/taa.js.map +1 -0
  428. package/dist/src/posteffect/tonemap.js +94 -0
  429. package/dist/src/posteffect/tonemap.js.map +1 -0
  430. package/dist/src/render/abuffer_oit.js +361 -0
  431. package/dist/src/render/abuffer_oit.js.map +1 -0
  432. package/dist/src/render/clipmap.js +851 -0
  433. package/dist/src/render/clipmap.js.map +1 -0
  434. package/dist/src/render/cluster_light.js +333 -0
  435. package/dist/src/render/cluster_light.js.map +1 -0
  436. package/dist/src/render/cull_visitor.js +187 -0
  437. package/dist/src/render/cull_visitor.js.map +1 -0
  438. package/dist/src/render/depthpass.js +68 -0
  439. package/dist/src/render/depthpass.js.map +1 -0
  440. package/dist/src/render/drawable_mixin.js +227 -0
  441. package/dist/src/render/drawable_mixin.js.map +1 -0
  442. package/dist/src/render/envlight.js +463 -0
  443. package/dist/src/render/envlight.js.map +1 -0
  444. package/dist/src/render/fbm_wavegenerator.js +251 -0
  445. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  446. package/dist/src/render/fft_wavegenerator.js +1006 -0
  447. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  448. package/dist/src/render/fullscreenquad.js +38 -0
  449. package/dist/src/render/fullscreenquad.js.map +1 -0
  450. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  451. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  452. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  453. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  454. package/dist/src/render/hzb.js +273 -0
  455. package/dist/src/render/hzb.js.map +1 -0
  456. package/dist/src/render/lightpass.js +172 -0
  457. package/dist/src/render/lightpass.js.map +1 -0
  458. package/dist/src/render/objectcolorpass.js +51 -0
  459. package/dist/src/render/objectcolorpass.js.map +1 -0
  460. package/dist/src/render/primitive.js +364 -0
  461. package/dist/src/render/primitive.js.map +1 -0
  462. package/dist/src/render/render_queue.js +467 -0
  463. package/dist/src/render/render_queue.js.map +1 -0
  464. package/dist/src/render/renderbundle_wrapper.js +152 -0
  465. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  466. package/dist/src/render/renderer.js +455 -0
  467. package/dist/src/render/renderer.js.map +1 -0
  468. package/dist/src/render/renderpass.js +200 -0
  469. package/dist/src/render/renderpass.js.map +1 -0
  470. package/dist/src/render/shadowmap_pass.js +56 -0
  471. package/dist/src/render/shadowmap_pass.js.map +1 -0
  472. package/dist/src/render/sky.js +1103 -0
  473. package/dist/src/render/sky.js.map +1 -0
  474. package/dist/src/render/weightedblended_oit.js +168 -0
  475. package/dist/src/render/weightedblended_oit.js.map +1 -0
  476. package/dist/src/scene/batchgroup.js +162 -0
  477. package/dist/src/scene/batchgroup.js.map +1 -0
  478. package/dist/src/scene/environment.js +209 -0
  479. package/dist/src/scene/environment.js.map +1 -0
  480. package/dist/src/scene/graph_node.js +72 -0
  481. package/dist/src/scene/graph_node.js.map +1 -0
  482. package/dist/src/scene/light.js +416 -0
  483. package/dist/src/scene/light.js.map +1 -0
  484. package/dist/src/scene/mesh.js +341 -0
  485. package/dist/src/scene/mesh.js.map +1 -0
  486. package/dist/src/scene/octree.js +649 -0
  487. package/dist/src/scene/octree.js.map +1 -0
  488. package/dist/src/scene/particlesys.js +738 -0
  489. package/dist/src/scene/particlesys.js.map +1 -0
  490. package/dist/src/scene/raycast_visitor.js +103 -0
  491. package/dist/src/scene/raycast_visitor.js.map +1 -0
  492. package/dist/src/scene/scene.js +284 -0
  493. package/dist/src/scene/scene.js.map +1 -0
  494. package/dist/src/scene/scene_node.js +732 -0
  495. package/dist/src/scene/scene_node.js.map +1 -0
  496. package/dist/src/scene/terrain/grass.js +278 -0
  497. package/dist/src/scene/terrain/grass.js.map +1 -0
  498. package/dist/src/scene/terrain/heightfield.js +475 -0
  499. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  500. package/dist/src/scene/terrain/patch.js +530 -0
  501. package/dist/src/scene/terrain/patch.js.map +1 -0
  502. package/dist/src/scene/terrain/quadtree.js +461 -0
  503. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  504. package/dist/src/scene/terrain/terrain.js +246 -0
  505. package/dist/src/scene/terrain/terrain.js.map +1 -0
  506. package/dist/src/scene/terrain-cm/grass.js +594 -0
  507. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  508. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  509. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  510. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  511. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  512. package/dist/src/scene/water.js +374 -0
  513. package/dist/src/scene/water.js.map +1 -0
  514. package/dist/src/shaders/atmosphere.js +957 -0
  515. package/dist/src/shaders/atmosphere.js.map +1 -0
  516. package/dist/src/shaders/fog.js +112 -0
  517. package/dist/src/shaders/fog.js.map +1 -0
  518. package/dist/src/shaders/misc.js +266 -0
  519. package/dist/src/shaders/misc.js.map +1 -0
  520. package/dist/src/shaders/noise.js +222 -0
  521. package/dist/src/shaders/noise.js.map +1 -0
  522. package/dist/src/shaders/pbr.js +51 -0
  523. package/dist/src/shaders/pbr.js.map +1 -0
  524. package/dist/src/shaders/shadow.js +636 -0
  525. package/dist/src/shaders/shadow.js.map +1 -0
  526. package/dist/src/shaders/ssr.js +490 -0
  527. package/dist/src/shaders/ssr.js.map +1 -0
  528. package/dist/src/shaders/temporal.js +215 -0
  529. package/dist/src/shaders/temporal.js.map +1 -0
  530. package/dist/src/shaders/water.js +756 -0
  531. package/dist/src/shaders/water.js.map +1 -0
  532. package/dist/src/shadow/esm.js +237 -0
  533. package/dist/src/shadow/esm.js.map +1 -0
  534. package/dist/src/shadow/pcf_opt.js +181 -0
  535. package/dist/src/shadow/pcf_opt.js.map +1 -0
  536. package/dist/src/shadow/pcf_pd.js +189 -0
  537. package/dist/src/shadow/pcf_pd.js.map +1 -0
  538. package/dist/src/shadow/shader.js +37 -0
  539. package/dist/src/shadow/shader.js.map +1 -0
  540. package/dist/src/shadow/shadow_impl.js +15 -0
  541. package/dist/src/shadow/shadow_impl.js.map +1 -0
  542. package/dist/src/shadow/shadowmapper.js +790 -0
  543. package/dist/src/shadow/shadowmapper.js.map +1 -0
  544. package/dist/src/shadow/ssm.js +159 -0
  545. package/dist/src/shadow/ssm.js.map +1 -0
  546. package/dist/src/shadow/vsm.js +297 -0
  547. package/dist/src/shadow/vsm.js.map +1 -0
  548. package/dist/src/shapes/box.js +386 -0
  549. package/dist/src/shapes/box.js.map +1 -0
  550. package/dist/src/shapes/cylinder.js +125 -0
  551. package/dist/src/shapes/cylinder.js.map +1 -0
  552. package/dist/src/shapes/plane.js +88 -0
  553. package/dist/src/shapes/plane.js.map +1 -0
  554. package/dist/src/shapes/shape.js +87 -0
  555. package/dist/src/shapes/shape.js.map +1 -0
  556. package/dist/src/shapes/sphere.js +114 -0
  557. package/dist/src/shapes/sphere.js.map +1 -0
  558. package/dist/src/shapes/tetrahedron.js +188 -0
  559. package/dist/src/shapes/tetrahedron.js.map +1 -0
  560. package/dist/src/shapes/torus.js +111 -0
  561. package/dist/src/shapes/torus.js.map +1 -0
  562. package/dist/src/utility/aabbtree.js +400 -0
  563. package/dist/src/utility/aabbtree.js.map +1 -0
  564. package/dist/src/utility/bounding_volume.js +29 -0
  565. package/dist/src/utility/bounding_volume.js.map +1 -0
  566. package/dist/src/utility/debug.js +28 -0
  567. package/dist/src/utility/debug.js.map +1 -0
  568. package/dist/src/utility/draco/decoder.js +116 -0
  569. package/dist/src/utility/draco/decoder.js.map +1 -0
  570. package/dist/src/utility/misc.js +105 -0
  571. package/dist/src/utility/misc.js.map +1 -0
  572. package/dist/src/utility/panorama.js +163 -0
  573. package/dist/src/utility/panorama.js.map +1 -0
  574. package/dist/src/utility/pmrem.js +354 -0
  575. package/dist/src/utility/pmrem.js.map +1 -0
  576. package/dist/src/utility/rendermipmap.js +115 -0
  577. package/dist/src/utility/rendermipmap.js.map +1 -0
  578. package/dist/src/utility/serialization/json.js +402 -0
  579. package/dist/src/utility/serialization/json.js.map +1 -0
  580. package/dist/src/utility/serialization/manager.js +623 -0
  581. package/dist/src/utility/serialization/manager.js.map +1 -0
  582. package/dist/src/utility/serialization/scene/animation.js +248 -0
  583. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  584. package/dist/src/utility/serialization/scene/batch.js +59 -0
  585. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  586. package/dist/src/utility/serialization/scene/camera.js +790 -0
  587. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  588. package/dist/src/utility/serialization/scene/common.js +222 -0
  589. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  590. package/dist/src/utility/serialization/scene/light.js +575 -0
  591. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  592. package/dist/src/utility/serialization/scene/material.js +1111 -0
  593. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  594. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  595. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  596. package/dist/src/utility/serialization/scene/misc.js +39 -0
  597. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  598. package/dist/src/utility/serialization/scene/node.js +451 -0
  599. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  600. package/dist/src/utility/serialization/scene/particle.js +425 -0
  601. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  602. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  603. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  604. package/dist/src/utility/serialization/scene/scene.js +704 -0
  605. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  606. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  607. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  608. package/dist/src/utility/serialization/scene/water.js +465 -0
  609. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  610. package/dist/src/utility/shprojector.js +297 -0
  611. package/dist/src/utility/shprojector.js.map +1 -0
  612. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  613. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  614. package/dist/src/utility/textures/gradientnoise.js +62 -0
  615. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  616. package/dist/src/utility/textures/randomnoise.js +41 -0
  617. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  618. package/dist/src/values.js +162 -0
  619. package/dist/src/values.js.map +1 -0
  620. package/dist/utility/aabbtree.js +15 -5
  621. package/dist/utility/aabbtree.js.map +1 -1
  622. package/dist/utility/blueprint/common/constants.js +851 -0
  623. package/dist/utility/blueprint/common/constants.js.map +1 -0
  624. package/dist/utility/blueprint/common/math.js +2045 -0
  625. package/dist/utility/blueprint/common/math.js.map +1 -0
  626. package/dist/utility/blueprint/common.js +7 -0
  627. package/dist/utility/blueprint/common.js.map +1 -0
  628. package/dist/utility/blueprint/material/common.js +7 -0
  629. package/dist/utility/blueprint/material/common.js.map +1 -0
  630. package/dist/utility/blueprint/material/func.js +521 -0
  631. package/dist/utility/blueprint/material/func.js.map +1 -0
  632. package/dist/utility/blueprint/material/inputs.js +1659 -0
  633. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  634. package/dist/utility/blueprint/material/ir.js +1311 -0
  635. package/dist/utility/blueprint/material/ir.js.map +1 -0
  636. package/dist/utility/blueprint/material/pbr.js +362 -0
  637. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  638. package/dist/utility/blueprint/material/texture.js +1099 -0
  639. package/dist/utility/blueprint/material/texture.js.map +1 -0
  640. package/dist/utility/blueprint/node.js +187 -0
  641. package/dist/utility/blueprint/node.js.map +1 -0
  642. package/dist/utility/bounding_volume.js +0 -1
  643. package/dist/utility/bounding_volume.js.map +1 -1
  644. package/dist/utility/debug.js +26 -0
  645. package/dist/utility/debug.js.map +1 -0
  646. package/dist/utility/draco/decoder.js +1 -1
  647. package/dist/utility/draco/decoder.js.map +1 -1
  648. package/dist/utility/misc.js +18 -6
  649. package/dist/utility/misc.js.map +1 -1
  650. package/dist/utility/panorama.js +8 -6
  651. package/dist/utility/panorama.js.map +1 -1
  652. package/dist/utility/pmrem.js +30 -18
  653. package/dist/utility/pmrem.js.map +1 -1
  654. package/dist/utility/rendermipmap.js +116 -0
  655. package/dist/utility/rendermipmap.js.map +1 -0
  656. package/dist/utility/serialization/blueprint/constants.js +255 -0
  657. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  658. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  659. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  660. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  661. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  662. package/dist/utility/serialization/json.js +402 -0
  663. package/dist/utility/serialization/json.js.map +1 -0
  664. package/dist/utility/serialization/manager.js +1176 -0
  665. package/dist/utility/serialization/manager.js.map +1 -0
  666. package/dist/utility/serialization/scene/animation.js +699 -0
  667. package/dist/utility/serialization/scene/animation.js.map +1 -0
  668. package/dist/utility/serialization/scene/batch.js +53 -0
  669. package/dist/utility/serialization/scene/batch.js.map +1 -0
  670. package/dist/utility/serialization/scene/camera.js +808 -0
  671. package/dist/utility/serialization/scene/camera.js.map +1 -0
  672. package/dist/utility/serialization/scene/common.js +224 -0
  673. package/dist/utility/serialization/scene/common.js.map +1 -0
  674. package/dist/utility/serialization/scene/light.js +589 -0
  675. package/dist/utility/serialization/scene/light.js.map +1 -0
  676. package/dist/utility/serialization/scene/material.js +942 -0
  677. package/dist/utility/serialization/scene/material.js.map +1 -0
  678. package/dist/utility/serialization/scene/mesh.js +374 -0
  679. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  680. package/dist/utility/serialization/scene/misc.js +39 -0
  681. package/dist/utility/serialization/scene/misc.js.map +1 -0
  682. package/dist/utility/serialization/scene/node.js +391 -0
  683. package/dist/utility/serialization/scene/node.js.map +1 -0
  684. package/dist/utility/serialization/scene/particle.js +425 -0
  685. package/dist/utility/serialization/scene/particle.js.map +1 -0
  686. package/dist/utility/serialization/scene/primitive.js +582 -0
  687. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  688. package/dist/utility/serialization/scene/scene.js +763 -0
  689. package/dist/utility/serialization/scene/scene.js.map +1 -0
  690. package/dist/utility/serialization/scene/terrain.js +495 -0
  691. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  692. package/dist/utility/serialization/scene/water.js +465 -0
  693. package/dist/utility/serialization/scene/water.js.map +1 -0
  694. package/dist/utility/shprojector.js +313 -0
  695. package/dist/utility/shprojector.js.map +1 -0
  696. package/dist/utility/textures/ggxlut.js +4 -5
  697. package/dist/utility/textures/ggxlut.js.map +1 -1
  698. package/dist/utility/textures/gradientnoise.js +2 -1
  699. package/dist/utility/textures/gradientnoise.js.map +1 -1
  700. package/dist/utility/textures/randomnoise.js +1 -0
  701. package/dist/utility/textures/randomnoise.js.map +1 -1
  702. package/dist/values.js +91 -4
  703. package/dist/values.js.map +1 -1
  704. package/package.json +29 -15
  705. package/dist/app.js.map +0 -1
  706. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  707. package/dist/input/inputmgr.js.map +0 -1
  708. package/dist/material/mixins/ggxlut.js.map +0 -1
  709. package/dist/posteffect/water.js +0 -508
  710. package/dist/posteffect/water.js.map +0 -1
  711. package/dist/render/oit.js +0 -16
  712. package/dist/render/oit.js.map +0 -1
  713. package/dist/render/scatteringlut.js +0 -634
  714. package/dist/render/scatteringlut.js.map +0 -1
  715. package/dist/render/watermesh.js +0 -193
  716. package/dist/render/watermesh.js.map +0 -1
  717. package/dist/render/wavegenerator.js +0 -8
  718. package/dist/render/wavegenerator.js.map +0 -1
  719. package/dist/scene/xform.js +0 -247
  720. package/dist/scene/xform.js.map +0 -1
  721. package/dist/utility/shprojection.js +0 -442
  722. package/dist/utility/shprojection.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atmosphere.js","sources":["../../src/shaders/atmosphere.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport { drawFullscreenQuad } from '../render/fullscreenquad';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { Matrix4x4, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport { uniformSphereSamples } from '../values';\r\nimport { getDevice } from '../app/api';\r\n\r\nconst TRANSMITTANCE_SAMPLES = 16;\r\nconst RAYLEIGH_SIGMA = [5.802, 13.558, 33.1];\r\nconst MIE_SIGMA = 3.996;\r\nconst MIE_ABSORPTION_SIGMA = 4.4;\r\nconst OZONE_ABSORPTION_SIGMA = [0.65, 1.881, 0.085];\r\n\r\n/** @internal */\r\nexport const CAMERA_POS_Y = 1;\r\n\r\n/** @internal */\r\nexport type AtmosphereParams = {\r\n plantRadius: number;\r\n atmosphereHeight: number;\r\n rayleighScatteringHeight: number;\r\n mieScatteringHeight: number;\r\n mieAnstropy: number;\r\n ozoneCenter: number;\r\n ozoneWidth: number;\r\n apDistance: number;\r\n cameraWorldMatrix: Matrix4x4;\r\n lightDir: Vector3;\r\n lightColor: Vector4;\r\n cameraAspect: number;\r\n cameraHeightScale: number;\r\n};\r\n\r\n/** @internal */\r\nexport function getDefaultAtmosphereParams(): AtmosphereParams {\r\n return {\r\n plantRadius: 6360000,\r\n atmosphereHeight: 60000,\r\n rayleighScatteringHeight: 8000,\r\n mieScatteringHeight: 1200,\r\n mieAnstropy: 0.8,\r\n ozoneCenter: 25000,\r\n ozoneWidth: 15000,\r\n apDistance: 4000,\r\n cameraWorldMatrix: Matrix4x4.identity(),\r\n lightDir: new Vector3(1, 0, 0),\r\n lightColor: new Vector4(1, 1, 1, 10),\r\n cameraAspect: 1,\r\n cameraHeightScale: 1\r\n };\r\n}\r\n\r\nconst defaultAtmosphereParams = getDefaultAtmosphereParams();\r\n\r\nlet currentAtmosphereParams: AtmosphereParams = null;\r\n\r\nfunction checkParams(other?: Partial<AtmosphereParams>): {\r\n transmittance: boolean;\r\n multiScattering: boolean;\r\n skyView: boolean;\r\n aerialPerspective: boolean;\r\n} {\r\n const result = {\r\n transmittance: false,\r\n multiScattering: false,\r\n skyView: false,\r\n aerialPerspective: false\r\n };\r\n other = { ...defaultAtmosphereParams, ...other };\r\n if (!currentAtmosphereParams) {\r\n currentAtmosphereParams = {\r\n ...defaultAtmosphereParams,\r\n lightDir: new Vector3(defaultAtmosphereParams.lightDir),\r\n lightColor: new Vector4(defaultAtmosphereParams.lightColor),\r\n cameraWorldMatrix: new Matrix4x4(defaultAtmosphereParams.cameraWorldMatrix)\r\n };\r\n result.transmittance = true;\r\n result.multiScattering = true;\r\n result.skyView = true;\r\n result.aerialPerspective = true;\r\n } else {\r\n result.transmittance =\r\n currentAtmosphereParams.plantRadius !== other.plantRadius ||\r\n currentAtmosphereParams.atmosphereHeight !== other.atmosphereHeight ||\r\n currentAtmosphereParams.rayleighScatteringHeight !== other.rayleighScatteringHeight ||\r\n currentAtmosphereParams.mieScatteringHeight !== other.mieScatteringHeight ||\r\n currentAtmosphereParams.ozoneCenter !== other.ozoneCenter ||\r\n currentAtmosphereParams.ozoneWidth !== other.ozoneWidth;\r\n result.multiScattering =\r\n result.transmittance || currentAtmosphereParams.mieAnstropy !== other.mieAnstropy;\r\n result.skyView =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n currentAtmosphereParams.cameraHeightScale !== other.cameraHeightScale ||\r\n !currentAtmosphereParams.lightDir.equalsTo(other.lightDir) ||\r\n !currentAtmosphereParams.lightColor.equalsTo(other.lightColor) ||\r\n !currentAtmosphereParams.cameraWorldMatrix.equalsTo(other.cameraWorldMatrix);\r\n result.aerialPerspective =\r\n result.transmittance ||\r\n result.multiScattering ||\r\n result.skyView ||\r\n currentAtmosphereParams.apDistance !== other.apDistance ||\r\n currentAtmosphereParams.cameraAspect !== other.cameraAspect;\r\n }\r\n if (result.transmittance) {\r\n currentAtmosphereParams.plantRadius = other.plantRadius;\r\n currentAtmosphereParams.atmosphereHeight = other.atmosphereHeight;\r\n currentAtmosphereParams.rayleighScatteringHeight = other.rayleighScatteringHeight;\r\n currentAtmosphereParams.mieScatteringHeight = other.mieScatteringHeight;\r\n currentAtmosphereParams.ozoneCenter = other.ozoneCenter;\r\n currentAtmosphereParams.ozoneWidth = other.ozoneWidth;\r\n }\r\n if (result.multiScattering) {\r\n currentAtmosphereParams.mieAnstropy = other.mieAnstropy;\r\n }\r\n if (result.skyView) {\r\n currentAtmosphereParams.cameraHeightScale = other.cameraHeightScale;\r\n currentAtmosphereParams.lightDir.set(other.lightDir);\r\n currentAtmosphereParams.lightColor.set(other.lightColor);\r\n currentAtmosphereParams.cameraWorldMatrix.set(other.cameraWorldMatrix);\r\n }\r\n if (result.aerialPerspective) {\r\n currentAtmosphereParams.apDistance = other.apDistance;\r\n currentAtmosphereParams.cameraAspect = other.cameraAspect;\r\n }\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function rayIntersectSphere(\r\n scope: PBInsideFunctionScope,\r\n f3Center: PBShaderExp,\r\n fRadius: PBShaderExp,\r\n f3RayStart: PBShaderExp,\r\n f3RayDir: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayIntersectSphere';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('center'), pb.float('radius'), pb.vec3('rayStart'), pb.vec3('rayDir')],\r\n function () {\r\n this.$l.OS = pb.length(pb.sub(this.center, this.rayStart));\r\n this.$l.SH = pb.dot(pb.sub(this.center, this.rayStart), this.rayDir);\r\n this.$l.OH = pb.sqrt(pb.sub(pb.mul(this.OS, this.OS), pb.mul(this.SH, this.SH)));\r\n this.$l.PH = pb.sqrt(pb.sub(pb.mul(this.radius, this.radius), pb.mul(this.OH, this.OH)));\r\n this.$if(pb.greaterThan(this.OH, this.radius), function () {\r\n this.$return(pb.float(-1));\r\n });\r\n this.$l.t1 = pb.sub(this.SH, this.PH);\r\n this.$l.t2 = pb.add(this.SH, this.PH);\r\n this.$return(this.$choice(pb.lessThan(this.t1, 0), this.t2, this.t1));\r\n }\r\n );\r\n return scope[funcName](f3Center, fRadius, f3RayStart, f3RayDir);\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceToSky(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3Dir: PBShaderExp,\r\n texLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToSky';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('dir')], function () {\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.params.plantRadius, this.params.atmosphereHeight);\r\n this.$l.upVector = pb.normalize(this.p);\r\n this.$l.cosTheta = pb.dot(this.upVector, this.dir);\r\n this.$l.r = pb.length(this.p);\r\n this.$l.uv = transmittanceLutToUV(this, this.bottomRadius, this.topRadius, this.cosTheta, this.r);\r\n this.$return(pb.textureSampleLevel(texLut, this.uv, 0).rgb);\r\n });\r\n return scope[funcName](stParams, f3Pos, f3Dir);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fRayleighScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighCoefficient';\r\n pb.func(funcName, [pb.float('rayleighScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(RAYLEIGH_SIGMA[0], RAYLEIGH_SIGMA[1], RAYLEIGH_SIGMA[2]), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.rayleighScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fRayleighScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function rayleighPhase(scope: PBInsideFunctionScope, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_rayleighPhase';\r\n pb.func(funcName, [pb.float('cosTheta')], function () {\r\n this.$return(pb.mul(3 / (16 * Math.PI), pb.add(1, pb.mul(this.cosTheta, this.cosTheta))));\r\n });\r\n return scope[funcName](fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieCoefficient(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieCoefficient';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function miePhase(scope: PBInsideFunctionScope, fMieAnstropy: PBShaderExp, fCosTheta: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_miePhase';\r\n pb.func(funcName, [pb.float('g'), pb.float('cosTheta')], function () {\r\n this.$l.g2 = pb.mul(this.g, this.g);\r\n this.$l.a = 3 / (8 * Math.PI);\r\n this.$l.b = pb.div(pb.sub(1, this.g2), pb.add(2, this.g2));\r\n this.$l.c = pb.add(1, pb.mul(this.cosTheta, this.cosTheta));\r\n this.$l.d = pb.pow(pb.sub(pb.add(1, this.g2), pb.mul(this.g, this.cosTheta, 2)), 1.5);\r\n this.$return(pb.div(pb.mul(this.a, this.b, this.c), this.d));\r\n });\r\n return scope[funcName](fMieAnstropy, fCosTheta);\r\n}\r\n\r\n/** @internal */\r\nexport function mieAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fMieScatteringHeight: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_mieAbsorption';\r\n pb.func(funcName, [pb.float('mieScatteringHeight'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(pb.vec3(MIE_ABSORPTION_SIGMA), 1e-6);\r\n this.$l.rho_h = pb.exp(pb.neg(pb.div(this.h, this.mieScatteringHeight)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fMieScatteringHeight, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function ozoneAbsorption(\r\n scope: PBInsideFunctionScope,\r\n fOzoneLevelCenterHeight: PBShaderExp,\r\n fOzoneLevelWidth: PBShaderExp,\r\n fH: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_ozoneAbsorption';\r\n pb.func(funcName, [pb.float('center'), pb.float('width'), pb.float('h')], function () {\r\n this.$l.sigma = pb.mul(\r\n pb.vec3(OZONE_ABSORPTION_SIGMA[0], OZONE_ABSORPTION_SIGMA[1], OZONE_ABSORPTION_SIGMA[2]),\r\n 1e-6\r\n );\r\n this.$l.rho_h = pb.max(0, pb.sub(1, pb.div(pb.abs(pb.sub(this.h, this.center)), this.width)));\r\n this.$return(pb.mul(this.sigma, this.rho_h));\r\n });\r\n return scope[funcName](fOzoneLevelCenterHeight, fOzoneLevelWidth, fH);\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyView(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3EyePos: PBShaderExp,\r\n f3ViewDir: PBShaderExp,\r\n fMaxDis: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp,\r\n withGround = true\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_getSkyView';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec3('eyePos'), pb.vec3('viewDir'), pb.float('maxDis')],\r\n function () {\r\n const N_SAMPLE = 32;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.eyePos,\r\n this.viewDir\r\n );\r\n this.$if(pb.lessThan(this.dis, 0), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n if (withGround) {\r\n this.$l.d = rayIntersectSphere(this, pb.vec3(0), this.params.plantRadius, this.eyePos, this.viewDir);\r\n this.$if(pb.greaterThan(this.d, 0), function () {\r\n this.dis = pb.min(this.dis, this.d);\r\n });\r\n }\r\n this.$if(pb.greaterThanEqual(this.maxDis, 0), function () {\r\n this.dis = pb.min(this.dis, this.maxDis);\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.eyePos, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.sunLuminance = pb.mul(this.params.lightColor.rgb, this.params.lightColor.a);\r\n this.$l.opticalDepth = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.extinction = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.extinction, this.ds));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.params.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\r\n\r\n this.$l.inScattering = pb.mul(this.t1, this.s, this.t2, this.ds, this.sunLuminance);\r\n this.color = pb.add(this.color, this.inScattering);\r\n\r\n this.$l.multiScattering = getMultiScattering(this, this.params, this.p, texMultiScatteringLut);\r\n this.color = pb.add(this.color, pb.mul(this.multiScattering, this.t2, this.ds, this.sunLuminance));\r\n\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n this.$return(this.color);\r\n }\r\n );\r\n return scope[funcName](stParams, f3EyePos, f3ViewDir, fMaxDis);\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_getMultiScattering';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(funcName, [Params('params'), pb.vec3('p')], function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.zenithAngle = pb.dot(pb.normalize(this.p), this.params.lightDir);\r\n this.$l.uv = pb.vec2(\r\n pb.add(pb.mul(this.zenithAngle, 0.5), 0.5),\r\n pb.div(this.h, this.params.atmosphereHeight)\r\n );\r\n this.$l.G_ALL = pb.textureSampleLevel(texMultiScatteringLut, this.uv, 0).rgb;\r\n this.$return(pb.mul(this.G_ALL, this.sigma_s));\r\n });\r\n return scope[funcName](stParams, f3Pos);\r\n}\r\n\r\n/** @internal */\r\nexport function integralMultiScattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f3SamplePoint: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const N_DIRECTION = 64;\r\n const N_SAMPLE = 32;\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_integralMultiScattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('lightDir'), pb.vec3('samplePoint')], function () {\r\n const uniformPhase = 1 / (4 * Math.PI);\r\n const sphereSolidAngle = (4 * Math.PI) / N_DIRECTION;\r\n this.$l.G_2 = pb.vec3(0);\r\n this.$l.f_ms = pb.vec3(0);\r\n this.$for(pb.int('i'), 0, N_DIRECTION, function () {\r\n this.$l.viewDir = this.uniformSphereSamples.at(this.i).xyz;\r\n this.$l.dis = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n pb.add(this.params.plantRadius, this.params.atmosphereHeight),\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$l.d = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.samplePoint,\r\n this.viewDir\r\n );\r\n this.$if(pb.greaterThan(this.d, 0), function () {\r\n this.dis = pb.min(this.dis, this.d);\r\n });\r\n this.$l.ds = pb.div(this.dis, N_SAMPLE);\r\n this.$l.p = pb.add(this.samplePoint, pb.mul(this.viewDir, this.ds, 0.5));\r\n this.$l.opticalDepth = pb.vec3(0);\r\n this.$for(pb.int('j'), 0, N_SAMPLE, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.sigma_s = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_a = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.sigma_t = pb.add(this.sigma_s, this.sigma_a);\r\n this.opticalDepth = pb.add(this.opticalDepth, pb.mul(this.sigma_t, this.ds));\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.p, this.lightDir, texTransmittanceLut);\r\n this.$l.s = scattering(this, this.params, this.p, this.viewDir);\r\n this.$l.t2 = pb.exp(pb.neg(this.opticalDepth));\r\n this.G_2 = pb.add(this.G_2, pb.mul(this.t1, this.s, this.t2, uniformPhase, this.ds));\r\n this.f_ms = pb.add(this.f_ms, pb.mul(this.t2, this.sigma_s, uniformPhase, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.viewDir, this.ds));\r\n });\r\n });\r\n this.G_2 = pb.mul(this.G_2, sphereSolidAngle);\r\n this.f_ms = pb.mul(this.f_ms, sphereSolidAngle);\r\n this.$return(pb.div(this.G_2, pb.sub(pb.vec3(1), this.f_ms)));\r\n });\r\n return scope[funcName](stParams, f3LightDir, f3SamplePoint);\r\n}\r\n\r\n/** @internal */\r\nexport function scattering(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3Pos: PBShaderExp,\r\n f3ViewDir: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_scattering';\r\n pb.func(funcName, [Params('params'), pb.vec3('p'), pb.vec3('viewDir')], function () {\r\n this.$l.cosTheta = pb.dot(this.params.lightDir, this.viewDir);\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.rayleigh = pb.mul(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n rayleighPhase(this, this.cosTheta)\r\n );\r\n this.$l.mie = pb.mul(\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h),\r\n miePhase(this, this.params.mieAnstropy, this.cosTheta)\r\n );\r\n this.$return(pb.add(this.rayleigh, this.mie));\r\n });\r\n return scope[funcName](stParams, f3Pos, f3ViewDir);\r\n}\r\n\r\n/** @internal */\r\nexport function transmittance(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f3P1: PBShaderExp,\r\n f3P2: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_transmittance';\r\n pb.func(funcName, [Params('params'), pb.vec3('p1'), pb.vec3('p2')], function () {\r\n this.$l.dir = pb.normalize(pb.sub(this.p2, this.p1));\r\n this.$l.distance = pb.length(pb.sub(this.p2, this.p1));\r\n this.$l.ds = pb.div(this.distance, TRANSMITTANCE_SAMPLES);\r\n this.$l.sum = pb.vec3(0);\r\n this.$l.p = pb.add(this.p1, pb.mul(this.dir, this.ds, 0.5));\r\n this.$for(pb.int('i'), 0, TRANSMITTANCE_SAMPLES, function () {\r\n this.$l.h = pb.sub(pb.length(this.p), this.params.plantRadius);\r\n this.$l.scattering = pb.add(\r\n rayleighCoefficient(this, this.params.rayleighScatteringHeight, this.h),\r\n mieCoefficient(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.absorption = pb.add(\r\n ozoneAbsorption(this, this.params.ozoneCenter, this.params.ozoneWidth, this.h),\r\n mieAbsorption(this, this.params.mieScatteringHeight, this.h)\r\n );\r\n this.$l.extinction = pb.add(this.scattering, this.absorption);\r\n this.sum = pb.add(this.sum, pb.mul(this.extinction, this.ds));\r\n this.p = pb.add(this.p, pb.mul(this.dir, this.ds));\r\n });\r\n this.$return(pb.exp(pb.neg(this.sum)));\r\n });\r\n return scope[funcName](stParams, f3P1, f3P2);\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLutToUV(\r\n scope: PBInsideFunctionScope,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp,\r\n fMu: PBShaderExp,\r\n fR: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_transmittanceToUV';\r\n pb.func(\r\n funcName,\r\n [pb.float('bottomRadius'), pb.float('topRadius'), pb.float('mu'), pb.float('r')],\r\n function () {\r\n this.$l.H = pb.sqrt(\r\n pb.max(\r\n 0,\r\n pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius))\r\n )\r\n );\r\n this.$l.rho = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.r, this.r), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.discriminant = pb.add(\r\n pb.mul(this.r, this.r, pb.sub(pb.mul(this.mu, this.mu), 1)),\r\n pb.mul(this.topRadius, this.topRadius)\r\n );\r\n this.$l.d = pb.max(0, pb.sub(pb.sqrt(this.discriminant), pb.mul(this.mu, this.r)));\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.x_mu = pb.div(pb.sub(this.d, this.d_min), pb.sub(this.d_max, this.d_min));\r\n this.$l.x_r = pb.div(this.rho, this.H);\r\n this.$return(pb.vec2(this.x_mu, this.x_r));\r\n }\r\n );\r\n return scope[funcName](fBottomRadius, fTopRadius, fMu, fR);\r\n}\r\n\r\n/** @internal */\r\nexport function viewDirToUV(scope: PBInsideFunctionScope, f3ViewDir: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_viewDirToUV';\r\n pb.func(funcName, [pb.vec3('viewDir')], function () {\r\n this.$l.uv = pb.vec2(pb.atan2(this.viewDir.z, this.viewDir.x), pb.asin(this.viewDir.y));\r\n this.uv = pb.div(this.uv, pb.vec2(2 * Math.PI, Math.PI));\r\n this.uv = pb.add(this.uv, pb.vec2(0.5));\r\n this.$return(this.uv);\r\n });\r\n return scope[funcName](f3ViewDir);\r\n}\r\n\r\n/** @internal */\r\nexport function uvToViewDir(scope: PBInsideFunctionScope, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToViewDir';\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.theta = pb.mul(pb.sub(1, this.uv.y), Math.PI);\r\n this.$l.phi = pb.mul(pb.sub(pb.mul(this.uv.x, 2), 1), Math.PI);\r\n this.$l.x = pb.mul(pb.sin(this.theta), pb.cos(this.phi));\r\n this.$l.z = pb.mul(pb.sin(this.theta), pb.sin(this.phi));\r\n this.$l.y = pb.cos(this.theta);\r\n this.$return(pb.vec3(this.x, this.y, this.z));\r\n });\r\n return scope[funcName](f2UV);\r\n}\r\n\r\n/** @internal */\r\nexport function uvToTransmittanceLut(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n fBottomRadius: PBShaderExp,\r\n fTopRadius: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'z_uvToTransmittanceLut';\r\n pb.func(funcName, [pb.vec2('uv'), pb.float('bottomRadius'), pb.float('topRadius')], function () {\r\n this.$l.x_mu = this.uv.x;\r\n this.$l.x_r = this.uv.y;\r\n this.$l.H = pb.sqrt(\r\n pb.max(0, pb.sub(pb.mul(this.topRadius, this.topRadius), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.rho = pb.mul(this.H, this.x_r);\r\n this.$l.r = pb.sqrt(\r\n pb.max(0, pb.add(pb.mul(this.rho, this.rho), pb.mul(this.bottomRadius, this.bottomRadius)))\r\n );\r\n this.$l.d_min = pb.sub(this.topRadius, this.r);\r\n this.$l.d_max = pb.add(this.rho, this.H);\r\n this.$l.d = pb.add(this.d_min, pb.mul(this.x_mu, pb.sub(this.d_max, this.d_min)));\r\n this.$l.mu = this.$choice(\r\n pb.equal(this.d, 0),\r\n pb.float(1),\r\n pb.div(\r\n pb.sub(pb.mul(this.H, this.H), pb.add(pb.mul(this.rho, this.rho), pb.mul(this.d, this.d))),\r\n pb.mul(this.r, this.d, 2)\r\n )\r\n );\r\n this.mu = pb.clamp(this.mu, -1, 1);\r\n this.$return(pb.vec2(this.mu, this.r));\r\n });\r\n return scope[funcName](f2UV, fBottomRadius, fTopRadius);\r\n}\r\n\r\nfunction sunBloom(\r\n scope: PBInsideFunctionScope,\r\n f3ViewDir: PBShaderExp,\r\n f3LightDir: PBShaderExp,\r\n f4LightColorAndIntensity: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_sunBloom';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('viewDir'), pb.vec3('lightDir'), pb.vec4('sunColorAndIntensity'), pb.float('sunSolidAngle')],\r\n function () {\r\n this.$l.minSunCosTheta = pb.cos(this.sunSolidAngle);\r\n this.$l.cosTheta = pb.dot(this.viewDir, this.lightDir);\r\n this.$l.luminance = pb.mul(this.sunColorAndIntensity.rgb, this.sunColorAndIntensity.a);\r\n this.$if(pb.lessThan(this.cosTheta, this.minSunCosTheta), function () {\r\n this.$l.offset = pb.sub(this.minSunCosTheta, this.cosTheta);\r\n this.$l.gaussianBloom = pb.mul(pb.exp(pb.mul(this.offset, -50000)), 0.5);\r\n this.$l.invBloom = pb.mul(pb.div(1, pb.add(0.02, pb.mul(this.offset, 300))), 0.01);\r\n this.luminance = pb.mul(this.luminance, pb.add(this.gaussianBloom, this.invBloom));\r\n });\r\n this.$return(this.luminance);\r\n }\r\n );\r\n return scope[funcName](f3ViewDir, f3LightDir, f4LightColorAndIntensity, fSunSolidAngle);\r\n}\r\n\r\n/** @internal */\r\nexport function skyBox(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f4SunColor: PBShaderExp,\r\n f3SkyBoxWorldPos: PBShaderExp,\r\n fSunSolidAngle: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texSkyViewLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'v_skybox';\r\n const Params = getAtmosphereParamsStruct(pb);\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec4('sunColor').out(), pb.vec3('worldPos'), pb.float('sunSolidAngle')],\r\n function () {\r\n this.$l.rgb = pb.vec3(0);\r\n this.$l.viewDir = pb.normalize(this.worldPos);\r\n this.rgb = pb.add(\r\n this.rgb,\r\n pb.textureSampleLevel(texSkyViewLut, viewDirToUV(this, this.viewDir), 0).rgb\r\n );\r\n this.$l.groundDistance = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n pb.vec3(0, pb.add(this.params.plantRadius, pb.mul(CAMERA_POS_Y, this.params.cameraHeightScale)), 0),\r\n this.viewDir\r\n );\r\n this.$l.sunTransmittance = transmittanceToSky(\r\n this,\r\n this.params,\r\n pb.vec3(0, pb.add(this.params.cameraHeightScale, this.params.plantRadius), 0),\r\n this.params.lightDir,\r\n texTransmittanceLut\r\n );\r\n this.sunColor = pb.mul(this.params.lightColor, pb.vec4(this.sunTransmittance, 1));\r\n this.$if(pb.lessThan(this.groundDistance, 0), function () {\r\n this.rgb = pb.add(\r\n this.rgb,\r\n sunBloom(this, this.viewDir, this.params.lightDir, this.sunColor, this.sunSolidAngle)\r\n );\r\n });\r\n this.$return(pb.vec4(this.rgb, 1));\r\n }\r\n );\r\n return scope[funcName](stParams, f4SunColor, f3SkyBoxWorldPos, fSunSolidAngle);\r\n}\r\n\r\n/** @internal */\r\nexport function aerialPerspective(\r\n scope: PBInsideFunctionScope,\r\n f2UV: PBShaderExp,\r\n stParams: PBShaderExp,\r\n f3CameraPos: PBShaderExp,\r\n f3WorldPos: PBShaderExp,\r\n f3Dim: PBShaderExp,\r\n texAerialPerspectiveLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'z_aerialPerspective';\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec2('uv'), pb.vec3('cameraPos'), pb.vec3('worldPos'), pb.vec3('dim')],\r\n function () {\r\n this.$l.V = pb.sub(this.worldPos, this.cameraPos);\r\n this.$l.dis = pb.length(this.V);\r\n this.$l.viewDir = pb.normalize(this.V);\r\n this.$l.apDistance = pb.div(this.params.apDistance, this.params.cameraHeightScale);\r\n this.$l.d0 = pb.clamp(pb.div(this.dis, this.apDistance), 0, 1);\r\n this.$l.weight = pb.clamp(pb.mul(this.d0, 2), 0, 1);\r\n this.$l.dz = pb.mul(this.d0, pb.sub(this.dim.z, 1));\r\n this.$l.slice = pb.floor(this.dz);\r\n this.$l.nextSlice = pb.min(pb.add(this.slice, 1), pb.sub(this.dim.z, 1));\r\n this.$l.factor = pb.sub(this.dz, pb.floor(this.dz));\r\n this.t = pb.div(this.uv, pb.vec2(this.dim.x, 1));\r\n this.$l.uv1 = pb.add(this.t, pb.vec2(pb.div(this.slice, this.dim.z), 0));\r\n this.$l.uv2 = pb.add(this.t, pb.vec2(pb.div(this.nextSlice, this.dim.z), 0));\r\n this.$l.data1 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv1, 0);\r\n this.$l.data2 = pb.textureSampleLevel(texAerialPerspectiveLut, this.uv2, 0);\r\n this.$l.data = pb.mix(this.data1, this.data2, this.factor);\r\n this.$l.inscattering = pb.mul(this.data.rgb, this.weight);\r\n //this.$l.transmittance = pb.sub(1, pb.mul(this.weight, pb.sub(1, this.data.a)));\r\n this.$l.planetTranslate = pb.vec3(0, this.params.plantRadius, 0);\r\n this.$l.transmittance = pb.dot(\r\n transmittance(\r\n this,\r\n this.params,\r\n pb.add(this.cameraPos, this.planetTranslate),\r\n pb.add(this.worldPos, this.planetTranslate)\r\n ),\r\n pb.vec3(1 / 3, 1 / 3, 1 / 3)\r\n );\r\n this.$return(pb.vec4(this.inscattering, this.transmittance));\r\n }\r\n );\r\n return scope[funcName](stParams, f2UV, f3CameraPos, f3WorldPos, f3Dim);\r\n}\r\n\r\n/** @internal */\r\nexport function aerialPerspectiveLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n f3VoxelDim: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcNameFixVoxel = 'z_fixVoxel';\r\n pb.func(\r\n funcNameFixVoxel,\r\n [\r\n Params('params'),\r\n pb.vec3('eyePos'),\r\n pb.vec3('viewDir').inout(),\r\n pb.float('maxDis'),\r\n pb.float('adjustedMaxDis').inout()\r\n ],\r\n function () {\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$l.voxelHeight = pb.length(this.voxelPos);\r\n this.$l.underGround = pb.lessThan(this.voxelHeight, this.params.plantRadius);\r\n this.$l.cameraToVoxel = pb.sub(this.voxelPos, this.eyePos);\r\n this.$l.cameraToVoxelLen = pb.length(this.cameraToVoxel);\r\n this.$l.cameraToVoxelDir = pb.div(this.cameraToVoxel, this.cameraToVoxelLen);\r\n this.$l.planetNearT = rayIntersectSphere(\r\n this,\r\n pb.vec3(0),\r\n this.params.plantRadius,\r\n this.eyePos,\r\n this.cameraToVoxelDir\r\n );\r\n this.$l.belowHorizon = pb.and(\r\n pb.greaterThan(this.planetNearT, 0),\r\n pb.greaterThan(this.cameraToVoxelLen, this.planetNearT)\r\n );\r\n this.$l.eyePos2 = this.eyePos;\r\n this.$if(pb.or(this.underGround, this.belowHorizon), function () {\r\n this.eyePos2 = pb.add(this.eyePos2, pb.mul(pb.normalize(this.eyePos2), 0.02));\r\n this.$if(this.belowHorizon, function () {\r\n this.$l.voxelWorldPosNorm = pb.normalize(this.voxelPos);\r\n this.$l.camProjOnGround = pb.mul(pb.normalize(this.eyePos2), this.params.plantRadius);\r\n this.$l.voxProjOnGround = pb.mul(this.voxelWorldPosNorm, this.params.plantRadius);\r\n this.$l.voxelGroundToRayStart = pb.sub(this.eyePos2, this.voxProjOnGround);\r\n this.$if(\r\n pb.lessThan(pb.dot(pb.normalize(this.voxelGroundToRayStart), this.voxelWorldPosNorm), 0.0001),\r\n function () {\r\n this.$l.middlePoint = pb.mul(pb.add(this.camProjOnGround, this.voxProjOnGround), 0.5);\r\n this.$l.middlePointOnGround = pb.mul(pb.normalize(this.middlePoint), this.params.plantRadius);\r\n this.voxelPos = pb.add(this.eyePos2, pb.mul(pb.sub(this.middlePointOnGround, this.eyePos2), 2));\r\n }\r\n );\r\n }).$else(function () {\r\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\r\n });\r\n this.$l.V = pb.sub(this.voxelPos, this.eyePos2);\r\n this.adjustedMaxDis = pb.length(this.V);\r\n this.viewDir = pb.div(this.V, this.adjustedMaxDis);\r\n });\r\n this.$return(this.eyePos2);\r\n }\r\n );\r\n const funcName = 'z_aerialPerspectiveLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.vec3('dim'), pb.float('cameraPosY')], function () {\r\n this.$l.uvw = pb.vec3(this.uv, 0);\r\n this.uvw.x = pb.mul(this.uvw.x, this.dim.x, this.dim.z);\r\n this.uvw.z = pb.div(pb.floor(pb.div(this.uvw.x, this.dim.z)), this.dim.x);\r\n this.uvw.x = pb.div(pb.mod(this.uvw.x, this.dim.z), this.dim.x);\r\n this.uvw = pb.add(this.uvw, pb.div(pb.vec3(0.5), this.dim));\r\n this.$l.slice = this.uvw.z; //pb.mul(this.uvw.z, this.uvw.z);\r\n this.$l.viewDir = pb.normalize(\r\n pb.mul(\r\n this.params.cameraWorldMatrix,\r\n pb.vec4(\r\n pb.sub(pb.mul(this.uvw.x, 2), 1),\r\n pb.div(pb.sub(pb.mul(this.uvw.y, 2), 1), this.params.cameraAspect),\r\n -1,\r\n 0\r\n )\r\n ).xyz\r\n );\r\n this.$l.eyePos = pb.vec3(\r\n 0,\r\n pb.add(pb.mul(this.cameraPosY, this.params.cameraHeightScale), this.params.plantRadius),\r\n 0\r\n );\r\n this.$l.maxDis = pb.mul(this.slice, this.params.apDistance);\r\n this.$l.voxelPos = pb.add(this.eyePos, pb.mul(this.viewDir, this.maxDis));\r\n this.$if(pb.lessThan(pb.length(this.voxelPos), this.params.plantRadius), function () {\r\n this.voxelPos = pb.mul(pb.normalize(this.voxelPos), this.params.plantRadius);\r\n this.maxDis = pb.length(pb.sub(this.eyePos, this.voxelPos));\r\n });\r\n this.$l.color = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n this.maxDis,\r\n texTransmittanceLut,\r\n texMultiScatteringLut\r\n );\r\n this.$l.t1 = transmittanceToSky(this, this.params, this.eyePos, this.viewDir, texTransmittanceLut);\r\n this.$l.t2 = transmittanceToSky(this, this.params, this.voxelPos, this.viewDir, texTransmittanceLut);\r\n this.$l.t = pb.clamp(pb.div(this.t1, pb.max(this.t2, pb.vec3(0.0001))), pb.vec3(0), pb.vec3(1));\r\n this.$return(pb.vec4(this.color, pb.dot(this.t, pb.vec3(1 / 3, 1 / 3, 1 / 3))));\r\n });\r\n return scope[funcName](stParams, f2UV, f3VoxelDim, CAMERA_POS_Y);\r\n}\r\n\r\n/** @internal */\r\nexport function skyViewLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp,\r\n texMultiScatteringLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_skyViewLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv'), pb.float('cameraPosY')], function () {\r\n this.$l.viewDir = uvToViewDir(this, this.uv);\r\n this.$l.h = pb.add(this.params.plantRadius, pb.mul(this.cameraPosY, this.params.cameraHeightScale));\r\n this.$l.eyePos = pb.vec3(0, this.h, 0);\r\n this.$l.rgb = getSkyView(\r\n this,\r\n this.params,\r\n this.eyePos,\r\n this.viewDir,\r\n pb.float(-1),\r\n texTransmittanceLut,\r\n texMultiScatteringLut\r\n );\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV, CAMERA_POS_Y);\r\n}\r\n\r\n/** @internal */\r\nexport function multiScatteringLut(\r\n scope: PBInsideFunctionScope,\r\n stParams: PBShaderExp,\r\n f2UV: PBShaderExp,\r\n texTransmittanceLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'v_multiScatteringLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.mu_s = pb.sub(pb.mul(this.uv.x, 2), 1);\r\n this.$l.r = pb.add(pb.mul(this.uv.y, this.params.atmosphereHeight), this.params.plantRadius);\r\n this.$l.cosTheta = this.mu_s;\r\n this.$l.sinTheta = pb.sqrt(pb.sub(1, pb.mul(this.cosTheta, this.cosTheta)));\r\n this.$l.lightDir = pb.vec3(this.sinTheta, this.cosTheta, 0);\r\n this.$l.p = pb.vec3(0, this.r, 0);\r\n this.$l.rgb = integralMultiScattering(this, this.params, this.lightDir, this.p, texTransmittanceLut);\r\n this.$return(pb.vec4(this.rgb, 1));\r\n });\r\n return scope[funcName](stParams, f2UV);\r\n}\r\n\r\n/** @internal */\r\nexport function transmittanceLut(scope: PBInsideFunctionScope, stParams: PBShaderExp, f2UV: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const Params = getAtmosphereParamsStruct(pb);\r\n const funcName = 'transmittanceLut';\r\n pb.func(funcName, [Params('params'), pb.vec2('uv')], function () {\r\n this.$l.color = pb.vec4(0, 0, 0, 1);\r\n this.$l.bottomRadius = this.params.plantRadius;\r\n this.$l.topRadius = pb.add(this.bottomRadius, this.params.atmosphereHeight);\r\n this.$l.lutParams = uvToTransmittanceLut(this, this.uv, this.bottomRadius, this.topRadius);\r\n this.$l.cos_theta = this.lutParams.x;\r\n this.$l.r = this.lutParams.y;\r\n this.$l.sin_theta = pb.sqrt(pb.sub(1, pb.mul(this.cos_theta, this.cos_theta)));\r\n this.$l.viewDir = pb.vec3(this.sin_theta, this.cos_theta, 0);\r\n this.$l.eyePos = pb.vec3(0, this.r, 0);\r\n this.$l.dis = rayIntersectSphere(this, pb.vec3(0), this.topRadius, this.eyePos, this.viewDir);\r\n this.$l.hitPoint = pb.add(this.eyePos, pb.mul(this.viewDir, this.dis));\r\n this.$return(pb.vec4(transmittance(this, this.params, this.eyePos, this.hitPoint), 1));\r\n });\r\n return scope[funcName](stParams, f2UV);\r\n}\r\n\r\n/** @internal */\r\nexport function atmosphereLUTRendered(): boolean {\r\n return !!transmittanceLUT && !!multiScatteringLUT && !!skyViewLUT && !!ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAtmosphereLUTs(params?: Partial<AtmosphereParams>) {\r\n const checkResult = checkParams(params);\r\n if (checkResult.transmittance || !transmittanceLUT) {\r\n renderTransmittanceLut(currentAtmosphereParams);\r\n }\r\n if (checkResult.multiScattering || !multiScatteringLUT) {\r\n renderMultiScatteringLut(currentAtmosphereParams);\r\n }\r\n if (checkResult.skyView || !skyViewLUT) {\r\n renderSkyViewLut(currentAtmosphereParams);\r\n }\r\n if (checkResult.aerialPerspective || !ApLut) {\r\n renderAPLut(currentAtmosphereParams);\r\n }\r\n}\r\n\r\n/* For debug */\r\nlet transmittanceLutProgram: GPUProgram = undefined;\r\nlet multiScatteringLutProgram: GPUProgram = undefined;\r\nlet skyViewLutProgram: GPUProgram = undefined;\r\nlet APLutProgram: GPUProgram = undefined;\r\nlet transmittanceLutBindGroup: BindGroup = undefined;\r\nlet transmittanceLUT: Texture2D = undefined;\r\nlet transmittanceFramebuffer: FrameBuffer = undefined;\r\n\r\nlet multiScatteringLutBindGroup: BindGroup = undefined;\r\nlet multiScatteringLUT: Texture2D = undefined;\r\nlet uniformSphereSampleBuffer: GPUDataBuffer = undefined;\r\nlet multiScatteringFramebuffer: FrameBuffer = undefined;\r\n\r\nlet skyViewLutBindGroup: BindGroup = undefined;\r\nlet skyViewLUT: Texture2D = undefined;\r\nlet skyViewFramebuffer: FrameBuffer = undefined;\r\n\r\nlet APLutBindGroup: BindGroup = undefined;\r\nlet ApLut: Texture2D = undefined;\r\nlet APFramebuffer: FrameBuffer = undefined;\r\n\r\n/** @internal */\r\nexport function getTransmittanceLut() {\r\n return transmittanceLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getMultiScatteringLut() {\r\n return multiScatteringLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getSkyViewLut() {\r\n return skyViewLUT;\r\n}\r\n\r\n/** @internal */\r\nexport function getAerialPerspectiveLut() {\r\n return ApLut;\r\n}\r\n\r\n/** @internal */\r\nexport function getAtmosphereParamsStruct(pb: ProgramBuilder) {\r\n return pb.defineStruct([\r\n pb.mat4('cameraWorldMatrix'),\r\n pb.vec4('lightColor'),\r\n pb.vec3('lightDir'),\r\n pb.float('cameraAspect'),\r\n pb.float('plantRadius'),\r\n pb.float('atmosphereHeight'),\r\n pb.float('rayleighScatteringHeight'),\r\n pb.float('mieScatteringHeight'),\r\n pb.float('mieAnstropy'),\r\n pb.float('ozoneCenter'),\r\n pb.float('ozoneWidth'),\r\n pb.float('apDistance'),\r\n pb.float('cameraHeightScale')\r\n ]);\r\n}\r\n\r\n/** @internal */\r\nexport function createTransmittanceLutProgram(device: AbstractDevice): GPUProgram {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = transmittanceLut(this, this.params, this.$inputs.uv);\r\n });\r\n }\r\n });\r\n program.name = '@TransmittanceLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderTransmittanceLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (transmittanceLutProgram === undefined) {\r\n try {\r\n transmittanceLutProgram = createTransmittanceLutProgram(device);\r\n transmittanceLutBindGroup = device.createBindGroup(transmittanceLutProgram.bindGroupLayouts[0]);\r\n transmittanceLUT = device.createTexture2D('rgba16f', 256, 64, {\r\n mipmapping: false\r\n });\r\n transmittanceLUT.name = 'DebugTransmittanceLut';\r\n transmittanceFramebuffer = device.createFrameBuffer([transmittanceLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n transmittanceLutProgram = null;\r\n transmittanceLutBindGroup = null;\r\n transmittanceFramebuffer = null;\r\n }\r\n }\r\n if (transmittanceLutProgram) {\r\n transmittanceLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n transmittanceLutBindGroup.setValue('params', params);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(transmittanceFramebuffer);\r\n device.setProgram(transmittanceLutProgram);\r\n device.setBindGroup(0, transmittanceLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createMultiScatteringLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.uniformSphereSamples = pb.vec4[64]().uniformBuffer(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = multiScatteringLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut\r\n );\r\n });\r\n }\r\n });\r\n program.name = '@MultiScatteringLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderMultiScatteringLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (multiScatteringLutProgram === undefined) {\r\n try {\r\n multiScatteringLutProgram = createMultiScatteringLutProgram(device);\r\n multiScatteringLutBindGroup = device.createBindGroup(multiScatteringLutProgram.bindGroupLayouts[0]);\r\n multiScatteringLUT = device.createTexture2D('rgba16f', 32, 32, {\r\n mipmapping: false\r\n });\r\n multiScatteringLUT.name = 'DebugMultiScatteringLut';\r\n multiScatteringFramebuffer = device.createFrameBuffer([multiScatteringLUT], null);\r\n uniformSphereSampleBuffer = multiScatteringLutBindGroup.getBuffer('uniformSphereSamples', false);\r\n const sphereSamples = new Float32Array(64 * 4);\r\n for (let i = 0; i < 64; i++) {\r\n sphereSamples[i * 4 + 0] = uniformSphereSamples[i].x;\r\n sphereSamples[i * 4 + 1] = uniformSphereSamples[i].y;\r\n sphereSamples[i * 4 + 2] = uniformSphereSamples[i].z;\r\n sphereSamples[i * 4 + 3] = 0;\r\n }\r\n uniformSphereSampleBuffer.bufferSubData(0, sphereSamples);\r\n } catch (err) {\r\n console.error(err);\r\n multiScatteringLutProgram = null;\r\n multiScatteringLutBindGroup = null;\r\n multiScatteringFramebuffer = null;\r\n }\r\n }\r\n if (multiScatteringLutProgram) {\r\n multiScatteringLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n multiScatteringLutBindGroup.setValue('params', params);\r\n //multiScatteringLutBindGroup.setBuffer('uniformSphereSamples', uniformSphereSampleBuffer);\r\n multiScatteringLutBindGroup.setTexture(\r\n 'transmittanceLut',\r\n transmittanceLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(multiScatteringFramebuffer);\r\n device.setProgram(multiScatteringLutProgram);\r\n device.setBindGroup(0, multiScatteringLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createSkyViewLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = skyViewLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n });\r\n program.name = '@SkyViewLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderSkyViewLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (skyViewLutProgram === undefined) {\r\n try {\r\n skyViewLutProgram = createSkyViewLutProgram(device);\r\n skyViewLutBindGroup = device.createBindGroup(skyViewLutProgram.bindGroupLayouts[0]);\r\n skyViewLUT = device.createTexture2D('rgba16f', 256, 128, {\r\n mipmapping: false\r\n });\r\n skyViewLUT.name = 'DebugSkyViewLut';\r\n skyViewFramebuffer = device.createFrameBuffer([skyViewLUT], null);\r\n } catch (err) {\r\n console.error(err);\r\n skyViewLutProgram = null;\r\n skyViewLutBindGroup = null;\r\n skyViewFramebuffer = null;\r\n }\r\n }\r\n if (skyViewLutProgram) {\r\n skyViewLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n skyViewLutBindGroup.setValue('params', params);\r\n skyViewLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n skyViewLutBindGroup.setTexture(\r\n 'multiScatteringLut',\r\n multiScatteringLUT,\r\n fetchSampler('clamp_linear_nomip')\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(skyViewFramebuffer);\r\n device.setProgram(skyViewLutProgram);\r\n device.setBindGroup(0, skyViewLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createAPLutProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n const Params = getAtmosphereParamsStruct(pb);\r\n this.params = Params().uniform(0);\r\n this.transmittanceLut = pb.tex2D().uniform(0);\r\n this.multiScatteringLut = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = aerialPerspectiveLut(\r\n this,\r\n this.params,\r\n this.$inputs.uv,\r\n pb.vec3(32, 32, 32),\r\n this.transmittanceLut,\r\n this.multiScatteringLut\r\n );\r\n });\r\n }\r\n });\r\n program.name = '@APLutProgram';\r\n return program;\r\n}\r\n\r\n/** @internal */\r\nexport function renderAPLut(params: AtmosphereParams) {\r\n const device = getDevice();\r\n if (APLutProgram === undefined) {\r\n try {\r\n APLutProgram = createAPLutProgram(device);\r\n APLutBindGroup = device.createBindGroup(APLutProgram.bindGroupLayouts[0]);\r\n ApLut = device.createTexture2D('rgba16f', 32 * 32, 32, { mipmapping: false });\r\n ApLut.name = 'DebugAPLut';\r\n APFramebuffer = device.createFrameBuffer([ApLut], null);\r\n } catch (err) {\r\n console.error(err);\r\n APLutProgram = null;\r\n APLutBindGroup = null;\r\n APFramebuffer = null;\r\n }\r\n }\r\n if (APLutProgram) {\r\n APLutBindGroup.setValue('flip', device.type === 'webgpu' ? 1 : 0);\r\n APLutBindGroup.setValue('params', params);\r\n APLutBindGroup.setTexture('transmittanceLut', transmittanceLUT, fetchSampler('clamp_linear_nomip'));\r\n APLutBindGroup.setTexture('multiScatteringLut', multiScatteringLUT, fetchSampler('clamp_linear_nomip'));\r\n device.pushDeviceStates();\r\n device.setFramebuffer(APFramebuffer);\r\n device.setProgram(APLutProgram);\r\n device.setBindGroup(0, APLutBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n }\r\n}\r\n"],"names":["TRANSMITTANCE_SAMPLES","RAYLEIGH_SIGMA","MIE_SIGMA","MIE_ABSORPTION_SIGMA","OZONE_ABSORPTION_SIGMA","CAMERA_POS_Y","getDefaultAtmosphereParams","plantRadius","atmosphereHeight","rayleighScatteringHeight","mieScatteringHeight","mieAnstropy","ozoneCenter","ozoneWidth","apDistance","cameraWorldMatrix","Matrix4x4","identity","lightDir","Vector3","lightColor","Vector4","cameraAspect","cameraHeightScale","defaultAtmosphereParams","currentAtmosphereParams","checkParams","other","result","transmittance","multiScattering","skyView","aerialPerspective","equalsTo","set","rayIntersectSphere","scope","f3Center","fRadius","f3RayStart","f3RayDir","pb","$builder","funcName","func","vec3","float","$l","OS","length","sub","center","rayStart","SH","dot","rayDir","OH","sqrt","mul","PH","radius","$if","greaterThan","$return","t1","t2","add","$choice","lessThan","transmittanceToSky","stParams","f3Pos","f3Dir","texLut","Params","getAtmosphereParamsStruct","bottomRadius","params","topRadius","upVector","normalize","p","cosTheta","dir","r","uv","transmittanceLutToUV","textureSampleLevel","rgb","rayleighCoefficient","fRayleighScatteringHeight","fH","sigma","rho_h","exp","neg","div","h","rayleighPhase","fCosTheta","Math","PI","mieCoefficient","fMieScatteringHeight","miePhase","fMieAnstropy","g2","g","a","b","c","d","pow","mieAbsorption","ozoneAbsorption","fOzoneLevelCenterHeight","fOzoneLevelWidth","max","abs","width","getSkyView","f3EyePos","f3ViewDir","fMaxDis","texTransmittanceLut","texMultiScatteringLut","withGround","N_SAMPLE","color","dis","eyePos","viewDir","min","greaterThanEqual","maxDis","ds","sunLuminance","opticalDepth","$for","int","extinction","s","scattering","inScattering","getMultiScattering","sigma_s","zenithAngle","vec2","G_ALL","integralMultiScattering","f3LightDir","f3SamplePoint","N_DIRECTION","uniformPhase","sphereSolidAngle","G_2","f_ms","uniformSphereSamples","at","i","xyz","samplePoint","sigma_a","sigma_t","rayleigh","mie","f3P1","f3P2","p2","p1","distance","sum","absorption","fBottomRadius","fTopRadius","fMu","fR","H","rho","discriminant","mu","d_min","d_max","x_mu","x_r","viewDirToUV","atan2","z","x","asin","y","uvToViewDir","f2UV","theta","phi","sin","cos","uvToTransmittanceLut","equal","clamp","sunBloom","f4LightColorAndIntensity","fSunSolidAngle","vec4","minSunCosTheta","sunSolidAngle","luminance","sunColorAndIntensity","offset","gaussianBloom","invBloom","skyBox","f4SunColor","f3SkyBoxWorldPos","texSkyViewLut","out","worldPos","groundDistance","sunTransmittance","sunColor","f3CameraPos","f3WorldPos","f3Dim","texAerialPerspectiveLut","V","cameraPos","d0","weight","dz","dim","slice","floor","nextSlice","factor","t","uv1","uv2","data1","data2","data","mix","inscattering","planetTranslate","aerialPerspectiveLut","f3VoxelDim","funcNameFixVoxel","inout","voxelPos","voxelHeight","underGround","cameraToVoxel","cameraToVoxelLen","cameraToVoxelDir","planetNearT","belowHorizon","and","eyePos2","or","voxelWorldPosNorm","camProjOnGround","voxProjOnGround","voxelGroundToRayStart","middlePoint","middlePointOnGround","$else","adjustedMaxDis","uvw","mod","cameraPosY","skyViewLut","multiScatteringLut","mu_s","sinTheta","transmittanceLut","lutParams","cos_theta","sin_theta","hitPoint","atmosphereLUTRendered","transmittanceLUT","multiScatteringLUT","skyViewLUT","ApLut","renderAtmosphereLUTs","checkResult","renderTransmittanceLut","renderMultiScatteringLut","renderSkyViewLut","renderAPLut","transmittanceLutProgram","undefined","multiScatteringLutProgram","skyViewLutProgram","APLutProgram","transmittanceLutBindGroup","transmittanceFramebuffer","multiScatteringLutBindGroup","uniformSphereSampleBuffer","multiScatteringFramebuffer","skyViewLutBindGroup","skyViewFramebuffer","APLutBindGroup","APFramebuffer","getTransmittanceLut","getMultiScatteringLut","getSkyViewLut","getAerialPerspectiveLut","defineStruct","mat4","createTransmittanceLutProgram","device","program","buildRenderProgram","vertex","flip","uniform","$inputs","pos","attrib","$outputs","main","$builtins","position","xy","notEqual","fragment","outColor","name","getDevice","createBindGroup","bindGroupLayouts","createTexture2D","mipmapping","createFrameBuffer","err","console","error","setValue","type","pushDeviceStates","setFramebuffer","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","createMultiScatteringLutProgram","uniformBuffer","tex2D","getBuffer","sphereSamples","Float32Array","bufferSubData","setTexture","fetchSampler","createSkyViewLutProgram","createAPLutProgram"],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { Vector4, Vector3 } from '@zephyr3d/base';
2
+ import { getAtmosphereParamsStruct, aerialPerspective } from './atmosphere.js';
3
+ import { Fog } from '../values.js';
4
+
5
+ /** @internal */ const MAX_FOG_HEIGHT = 100;
6
+ /** @internal */ function getDefaultHeightFogParams() {
7
+ return {
8
+ parameter1: new Vector4(0, 0, 0, 0.1),
9
+ parameter2: new Vector4(0.01, 0, 0, 10000),
10
+ parameter3: new Vector4(0.8, 1, 0, 4),
11
+ parameter4: new Vector4(0, 0, 0, 0),
12
+ lightDir: new Vector3(0, 1, 0),
13
+ lightColor: new Vector3(0, 0, 0)
14
+ };
15
+ }
16
+ /** @internal */ function getHeightFogParamsStruct(pb) {
17
+ return pb.defineStruct([
18
+ pb.vec4('parameter1'),
19
+ pb.vec4('parameter2'),
20
+ pb.vec4('parameter3'),
21
+ pb.vec4('parameter4'),
22
+ pb.float('dirInscatteringStartDistance'),
23
+ pb.vec3('dirInscatteringColor'),
24
+ pb.vec3('lightDir'),
25
+ pb.vec3('lightColor')
26
+ ]);
27
+ }
28
+ function calculateFog(scope, aerialperspective, fogType, atmosphereParams, heightFogParams, uv, isSky, cameraPos, worldPos, additive, apLut, distantLightLut) {
29
+ const pb = scope.$builder;
30
+ const funcName = 'Z_calculateFog';
31
+ const AtmosphereParams = getAtmosphereParamsStruct(pb);
32
+ const HeightFogParams = getHeightFogParamsStruct(pb);
33
+ pb.func(funcName, [
34
+ pb.int('withAerialPerspective'),
35
+ pb.int('fogType'),
36
+ AtmosphereParams('atmosphereParams'),
37
+ HeightFogParams('heightFogParams'),
38
+ pb.bool('isSky'),
39
+ pb.vec2('uv'),
40
+ pb.vec3('cameraPos'),
41
+ pb.vec3('worldPos'),
42
+ pb.int('additive')
43
+ ], function() {
44
+ this.$l.fogging = pb.vec4(0, 0, 0, 1);
45
+ this.$if(pb.equal(this.fogType, Fog.FOG_TYPE_HEIGHT), function() {
46
+ this.fogging = calculateHeightFog(this, this.heightFogParams, this.cameraPos, this.worldPos, this.isSky, distantLightLut);
47
+ });
48
+ this.$if(pb.and(pb.notEqual(this.withAerialPerspective, 0), pb.not(this.isSky)), function() {
49
+ this.$l.atmosphericFogging = aerialPerspective(this, this.uv, this.atmosphereParams, this.cameraPos, this.worldPos, pb.vec3(32), apLut);
50
+ this.$if(pb.notEqual(this.fogType, Fog.FOG_TYPE_NONE), function() {
51
+ this.fogging = combineAerialPerspectiveFog(this, this.fogging, this.atmosphericFogging);
52
+ }).$else(function() {
53
+ this.fogging = this.atmosphericFogging;
54
+ });
55
+ });
56
+ this.$if(pb.notEqual(this.additive, 0), function() {
57
+ this.fogging = pb.vec4(pb.vec3(0), this.fogging.a);
58
+ });
59
+ this.$return(this.fogging);
60
+ });
61
+ return scope[funcName](aerialperspective, fogType, atmosphereParams, heightFogParams, isSky, uv, cameraPos, worldPos, additive);
62
+ }
63
+ function combineAerialPerspectiveFog(scope, fogging, aerialPerspectiveFog) {
64
+ const pb = scope.$builder;
65
+ const funcName = 'Z_combineAerialPerspectiveFog';
66
+ pb.func(funcName, [
67
+ pb.vec4('fogging'),
68
+ pb.vec4('aerialPerspectiveFog')
69
+ ], function() {
70
+ this.$l.rgb = pb.add(this.fogging.rgb, pb.mul(this.aerialPerspectiveFog.rgb, this.fogging.a));
71
+ this.$l.a = pb.mul(this.fogging.a, this.aerialPerspectiveFog.a);
72
+ this.$return(pb.vec4(this.rgb, this.a));
73
+ });
74
+ return scope[funcName](fogging, aerialPerspectiveFog);
75
+ }
76
+ function calculateHeightFog(scope, params, cameraPos, worldPos, isSky, skyDistantColorLut) {
77
+ const pb = scope.$builder;
78
+ const funcName = 'Z_calcHeightFog';
79
+ const Params = getHeightFogParamsStruct(pb);
80
+ pb.func(funcName, [
81
+ Params('params'),
82
+ pb.vec3('cameraPosition'),
83
+ pb.vec3('worldPosition'),
84
+ pb.bool('isSky')
85
+ ], function() {
86
+ this.$l.cameraPos = this.$choice(this.isSky, this.cameraPosition, pb.vec3(this.cameraPosition.x, pb.min(this.cameraPosition.y, pb.add(this.params.parameter2.y, MAX_FOG_HEIGHT)), this.cameraPosition.z));
87
+ this.$l.ray = pb.sub(this.worldPosition, this.cameraPos);
88
+ this.$l.d = pb.length(this.ray);
89
+ this.$l.rayNorm = pb.div(this.ray, this.d);
90
+ this.$l.origin = pb.add(this.cameraPos, pb.mul(this.rayNorm, this.params.parameter2.z));
91
+ this.$l.term = this.params.parameter3.z;
92
+ this.$l.worldPos = this.$choice(this.isSky, pb.add(this.cameraPosition, pb.mul(this.rayNorm, 1e8)), this.worldPosition);
93
+ this.$l.falloff = pb.clamp(pb.mul(this.params.parameter1.w, pb.sub(this.worldPos.y, this.origin.y)), -125, 126);
94
+ this.$l.fading = this.$choice(this.isSky, pb.smoothStep(5e6, 0, this.worldPos.y), 0);
95
+ this.$l.factor = this.$choice(pb.greaterThan(pb.abs(this.falloff), 0.01), pb.div(pb.sub(1, pb.exp2(pb.neg(this.falloff))), this.falloff), pb.sub(Math.log(2), pb.mul(0.5 * Math.log(2) * Math.log(2), this.falloff)));
96
+ this.$l.worldDistance = pb.dot(pb.sub(this.worldPos, this.origin), this.rayNorm);
97
+ this.$l.lineIntegral = pb.mul(this.term, this.factor, pb.max(0, this.worldDistance));
98
+ this.$l.directionalInscattering = pb.mul(pb.add(this.params.parameter4.rgb, pb.mul(this.params.lightColor, this.params.parameter3.y)), pb.pow(pb.clamp(pb.dot(this.rayNorm, this.params.lightDir), 0, 1), this.params.parameter3.w));
99
+ this.$l.fogFactor = pb.sub(1, pb.clamp(pb.exp2(pb.neg(this.lineIntegral)), 0, 1));
100
+ this.$l.distanceFactor = pb.clamp(pb.div(this.worldDistance, this.params.parameter2.w), 0, 1);
101
+ this.fogFactor = pb.mul(this.fogFactor, pb.sub(1, this.distanceFactor));
102
+ this.$l.directionalInscattering = pb.mul(this.$l.directionalInscattering, pb.max(this.fogFactor, this.fading));
103
+ this.$l.fogColor = this.params.parameter1.rgb;
104
+ this.$if(pb.greaterThan(this.params.parameter3.y, 0), function() {
105
+ this.$l.skyContrib = pb.textureSampleLevel(skyDistantColorLut, pb.vec2(0.5), 0).rgb;
106
+ this.fogColor = pb.add(this.fogColor, pb.mul(this.skyContrib, this.params.parameter3.y));
107
+ });
108
+ this.$l.fogFactor = pb.max(pb.min(this.fogFactor, this.params.parameter3.x), this.fading);
109
+ this.$l.fogColor = pb.add(pb.mul(this.fogColor, this.fogFactor), this.directionalInscattering);
110
+ this.$return(pb.vec4(this.fogColor, pb.sub(1, this.fogFactor)));
111
+ });
112
+ return scope[funcName](params, cameraPos, worldPos, isSky);
113
+ }
114
+
115
+ export { MAX_FOG_HEIGHT, calculateFog, calculateHeightFog, combineAerialPerspectiveFog, getDefaultHeightFogParams, getHeightFogParamsStruct };
116
+ //# sourceMappingURL=fog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fog.js","sources":["../../src/shaders/fog.ts"],"sourcesContent":["import { Vector3, Vector4 } from '@zephyr3d/base';\r\nimport type { PBInsideFunctionScope, PBShaderExp, ProgramBuilder } from '@zephyr3d/device';\r\nimport { aerialPerspective, getAtmosphereParamsStruct } from './atmosphere';\r\nimport { Fog } from '../values';\r\n\r\n/** @internal */\r\nexport const MAX_FOG_HEIGHT = 100;\r\n\r\n/** @internal */\r\nexport type HeightFogParams = {\r\n parameter1: Vector4; // [rgb=fogColor a=heightFalloff]\r\n parameter2: Vector4; // [r=density g=startHeight b=startDistance a=maxHeight]\r\n parameter3: Vector4; // [r=maxOpacity g=atmosphereStrength b=rayOriginTerm a=dirInscatteringExponent]\r\n parameter4: Vector4; // [rgb=directionalInscatteringColor a=UNUSED]\r\n lightDir: Vector3;\r\n lightColor: Vector3;\r\n};\r\n\r\n/** @internal */\r\nexport function getDefaultHeightFogParams(): HeightFogParams {\r\n return {\r\n parameter1: new Vector4(0, 0, 0, 0.1),\r\n parameter2: new Vector4(0.01, 0, 0, 10000),\r\n parameter3: new Vector4(0.8, 1, 0, 4),\r\n parameter4: new Vector4(0, 0, 0, 0),\r\n lightDir: new Vector3(0, 1, 0),\r\n lightColor: new Vector3(0, 0, 0)\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getHeightFogParamsStruct(pb: ProgramBuilder) {\r\n return pb.defineStruct([\r\n pb.vec4('parameter1'),\r\n pb.vec4('parameter2'),\r\n pb.vec4('parameter3'),\r\n pb.vec4('parameter4'),\r\n pb.float('dirInscatteringStartDistance'),\r\n pb.vec3('dirInscatteringColor'),\r\n pb.vec3('lightDir'),\r\n pb.vec3('lightColor')\r\n ]);\r\n}\r\n\r\nexport function calculateFog(\r\n scope: PBInsideFunctionScope,\r\n aerialperspective: PBShaderExp,\r\n fogType: PBShaderExp,\r\n atmosphereParams: PBShaderExp,\r\n heightFogParams: PBShaderExp,\r\n uv: PBShaderExp,\r\n isSky: PBShaderExp | boolean,\r\n cameraPos: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n additive: PBShaderExp | number,\r\n apLut: PBShaderExp,\r\n distantLightLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_calculateFog';\r\n const AtmosphereParams = getAtmosphereParamsStruct(pb);\r\n const HeightFogParams = getHeightFogParamsStruct(pb);\r\n pb.func(\r\n funcName,\r\n [\r\n pb.int('withAerialPerspective'),\r\n pb.int('fogType'),\r\n AtmosphereParams('atmosphereParams'),\r\n HeightFogParams('heightFogParams'),\r\n pb.bool('isSky'),\r\n pb.vec2('uv'),\r\n pb.vec3('cameraPos'),\r\n pb.vec3('worldPos'),\r\n pb.int('additive')\r\n ],\r\n function () {\r\n this.$l.fogging = pb.vec4(0, 0, 0, 1);\r\n this.$if(pb.equal(this.fogType, Fog.FOG_TYPE_HEIGHT), function () {\r\n this.fogging = calculateHeightFog(\r\n this,\r\n this.heightFogParams,\r\n this.cameraPos,\r\n this.worldPos,\r\n this.isSky,\r\n distantLightLut\r\n );\r\n });\r\n this.$if(pb.and(pb.notEqual(this.withAerialPerspective, 0), pb.not(this.isSky)), function () {\r\n this.$l.atmosphericFogging = aerialPerspective(\r\n this,\r\n this.uv,\r\n this.atmosphereParams,\r\n this.cameraPos,\r\n this.worldPos,\r\n pb.vec3(32),\r\n apLut\r\n );\r\n this.$if(pb.notEqual(this.fogType, Fog.FOG_TYPE_NONE), function () {\r\n this.fogging = combineAerialPerspectiveFog(this, this.fogging, this.atmosphericFogging);\r\n }).$else(function () {\r\n this.fogging = this.atmosphericFogging;\r\n });\r\n });\r\n this.$if(pb.notEqual(this.additive, 0), function () {\r\n this.fogging = pb.vec4(pb.vec3(0), this.fogging.a);\r\n });\r\n this.$return(this.fogging);\r\n }\r\n );\r\n return scope[funcName](\r\n aerialperspective,\r\n fogType,\r\n atmosphereParams,\r\n heightFogParams,\r\n isSky,\r\n uv,\r\n cameraPos,\r\n worldPos,\r\n additive\r\n );\r\n}\r\n\r\nexport function combineAerialPerspectiveFog(\r\n scope: PBInsideFunctionScope,\r\n fogging: PBShaderExp,\r\n aerialPerspectiveFog: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_combineAerialPerspectiveFog';\r\n pb.func(funcName, [pb.vec4('fogging'), pb.vec4('aerialPerspectiveFog')], function () {\r\n this.$l.rgb = pb.add(this.fogging.rgb, pb.mul(this.aerialPerspectiveFog.rgb, this.fogging.a));\r\n this.$l.a = pb.mul(this.fogging.a, this.aerialPerspectiveFog.a);\r\n this.$return(pb.vec4(this.rgb, this.a));\r\n });\r\n return scope[funcName](fogging, aerialPerspectiveFog);\r\n}\r\n\r\nexport function calculateHeightFog(\r\n scope: PBInsideFunctionScope,\r\n params: PBShaderExp,\r\n cameraPos: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n isSky: PBShaderExp | boolean,\r\n skyDistantColorLut: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_calcHeightFog';\r\n const Params = getHeightFogParamsStruct(pb);\r\n pb.func(\r\n funcName,\r\n [Params('params'), pb.vec3('cameraPosition'), pb.vec3('worldPosition'), pb.bool('isSky')],\r\n function () {\r\n this.$l.cameraPos = this.$choice(\r\n this.isSky,\r\n this.cameraPosition,\r\n pb.vec3(\r\n this.cameraPosition.x,\r\n pb.min(this.cameraPosition.y, pb.add(this.params.parameter2.y, MAX_FOG_HEIGHT)),\r\n this.cameraPosition.z\r\n )\r\n );\r\n this.$l.ray = pb.sub(this.worldPosition, this.cameraPos);\r\n this.$l.d = pb.length(this.ray);\r\n this.$l.rayNorm = pb.div(this.ray, this.d);\r\n this.$l.origin = pb.add(this.cameraPos, pb.mul(this.rayNorm, this.params.parameter2.z));\r\n this.$l.term = this.params.parameter3.z;\r\n this.$l.worldPos = this.$choice(\r\n this.isSky,\r\n pb.add(this.cameraPosition, pb.mul(this.rayNorm, 1e8)),\r\n this.worldPosition\r\n );\r\n this.$l.falloff = pb.clamp(\r\n pb.mul(this.params.parameter1.w, pb.sub(this.worldPos.y, this.origin.y)),\r\n -125,\r\n 126\r\n );\r\n this.$l.fading = this.$choice(this.isSky, pb.smoothStep(5e6, 0, this.worldPos.y), 0);\r\n this.$l.factor = this.$choice(\r\n pb.greaterThan(pb.abs(this.falloff), 0.01),\r\n pb.div(pb.sub(1, pb.exp2(pb.neg(this.falloff))), this.falloff),\r\n pb.sub(Math.log(2), pb.mul(0.5 * Math.log(2) * Math.log(2), this.falloff))\r\n );\r\n this.$l.worldDistance = pb.dot(pb.sub(this.worldPos, this.origin), this.rayNorm);\r\n this.$l.lineIntegral = pb.mul(\r\n this.term,\r\n this.factor,\r\n pb.max(0, this.worldDistance) /*pb.distance(this.origin, this.worldPos)*/\r\n );\r\n\r\n this.$l.directionalInscattering = pb.mul(\r\n pb.add(this.params.parameter4.rgb, pb.mul(this.params.lightColor, this.params.parameter3.y)),\r\n pb.pow(pb.clamp(pb.dot(this.rayNorm, this.params.lightDir), 0, 1), this.params.parameter3.w)\r\n );\r\n this.$l.fogFactor = pb.sub(1, pb.clamp(pb.exp2(pb.neg(this.lineIntegral)), 0, 1));\r\n this.$l.distanceFactor = pb.clamp(pb.div(this.worldDistance, this.params.parameter2.w), 0, 1);\r\n this.fogFactor = pb.mul(this.fogFactor, pb.sub(1, this.distanceFactor));\r\n this.$l.directionalInscattering = pb.mul(\r\n this.$l.directionalInscattering,\r\n pb.max(this.fogFactor, this.fading)\r\n );\r\n\r\n this.$l.fogColor = this.params.parameter1.rgb;\r\n this.$if(pb.greaterThan(this.params.parameter3.y, 0), function () {\r\n this.$l.skyContrib = pb.textureSampleLevel(skyDistantColorLut, pb.vec2(0.5), 0).rgb;\r\n this.fogColor = pb.add(this.fogColor, pb.mul(this.skyContrib, this.params.parameter3.y));\r\n });\r\n this.$l.fogFactor = pb.max(pb.min(this.fogFactor, this.params.parameter3.x), this.fading);\r\n this.$l.fogColor = pb.add(pb.mul(this.fogColor, this.fogFactor), this.directionalInscattering);\r\n this.$return(pb.vec4(this.fogColor, pb.sub(1, this.fogFactor)));\r\n }\r\n );\r\n return scope[funcName](params, cameraPos, worldPos, isSky);\r\n}\r\n"],"names":["MAX_FOG_HEIGHT","getDefaultHeightFogParams","parameter1","Vector4","parameter2","parameter3","parameter4","lightDir","Vector3","lightColor","getHeightFogParamsStruct","pb","defineStruct","vec4","float","vec3","calculateFog","scope","aerialperspective","fogType","atmosphereParams","heightFogParams","uv","isSky","cameraPos","worldPos","additive","apLut","distantLightLut","$builder","funcName","AtmosphereParams","getAtmosphereParamsStruct","HeightFogParams","func","int","bool","vec2","$l","fogging","$if","equal","Fog","FOG_TYPE_HEIGHT","calculateHeightFog","and","notEqual","withAerialPerspective","not","atmosphericFogging","aerialPerspective","FOG_TYPE_NONE","combineAerialPerspectiveFog","$else","a","$return","aerialPerspectiveFog","rgb","add","mul","params","skyDistantColorLut","Params","$choice","cameraPosition","x","min","y","z","ray","sub","worldPosition","d","length","rayNorm","div","origin","term","falloff","clamp","w","fading","smoothStep","factor","greaterThan","abs","exp2","neg","Math","log","worldDistance","dot","lineIntegral","max","directionalInscattering","pow","fogFactor","distanceFactor","fogColor","skyContrib","textureSampleLevel"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"misc.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"misc.js","sources":["../../src/shaders/misc.ts"],"sourcesContent":["import type { PBShaderExp } from '@zephyr3d/device';\r\nimport { PBInsideFunctionScope, PBPrimitiveType } from '@zephyr3d/device';\r\n\r\n/**\r\n * Decodes a float that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns The decoded float value\r\n *\r\n * @public\r\n */\r\nexport function decodeFloatFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (\r\n !value ||\r\n !value.$typeinfo.isPrimitiveType() ||\r\n value.$typeinfo.primitiveType !== PBPrimitiveType.F32VEC4\r\n ) {\r\n throw new Error('decodeFloatFromRGBA() failed: parameter type must be vec4');\r\n }\r\n if (!scope || !(scope instanceof PBInsideFunctionScope)) {\r\n throw new Error(\r\n 'decodeFloatFromRGBA() failed: decodeNormalizedFloatFromRGBA() must be called inside a function'\r\n );\r\n }\r\n const funcName = 'Z_DecodeFloatFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$l.pack = pb.floor(pb.add(pb.mul(this.value, 255), 0.5));\r\n\r\n // Extract bits\r\n this.$l.bitSign = pb.float(pb.greaterThan(this.pack.x, 127.0));\r\n this.$l.bitExpn = pb.float(pb.greaterThan(this.pack.y, 127.0));\r\n this.pack.x = pb.sub(this.pack.x, pb.mul(this.bitSign, 128));\r\n this.pack.y = pb.sub(this.pack.y, pb.mul(this.bitExpn, 128));\r\n\r\n // Compute parts of number\r\n this.$l.exponent = pb.add(pb.mul(this.pack.x, 2.0), this.bitExpn);\r\n this.exponent = pb.pow(2.0, pb.sub(this.exponent, 127.0));\r\n this.$l.mantissa = pb.float(1.0);\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.y, 128.0));\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.z, 32768.0));\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.w, 8388608.0));\r\n\r\n // Return result\r\n this.$return(pb.mul(pb.sub(1.0, pb.mul(this.bitSign, 2)), this.exponent, this.mantissa));\r\n });\r\n return scope[funcName](value);\r\n}\r\n\r\n/**\r\n * Encodes a float into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The float value to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encodeFloatToRGBA(scope: PBInsideFunctionScope, value: PBShaderExp | number): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_EncodeFloatToRGBA';\r\n pb.func(funcName, [pb.float('value')], function () {\r\n this.$l.floatMax = pb.mul(1.70141184, pb.pow(10, 38));\r\n this.$l.floatMin = pb.mul(1.17549435, pb.pow(10, -38));\r\n this.$l.absvalue = pb.abs(this.value);\r\n this.$if(pb.lessThanEqual(this.absvalue, this.floatMin), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$if(pb.greaterThanEqual(this.value, this.floatMax), function () {\r\n this.$return(pb.vec4(127 / 255, 128 / 255, 0, 0));\r\n });\r\n this.$if(pb.lessThanEqual(this.value, pb.neg(this.floatMax)), function () {\r\n this.$return(pb.vec4(1, 128 / 255, 0, 0));\r\n });\r\n this.$l.pack = pb.vec4(0);\r\n\r\n // Compute Exponent and Mantissa\r\n this.$l.exponent = pb.floor(pb.log2(this.absvalue));\r\n this.$l.mantissa = pb.sub(pb.mul(this.absvalue, pb.pow(2.0, pb.neg(this.exponent))), 1.0);\r\n\r\n // Pack Mantissa into bytes\r\n this.pack.y = pb.floor(pb.mul(this.mantissa, 128.0));\r\n this.mantissa = pb.sub(this.mantissa, pb.div(this.pack.y, 128.0));\r\n this.pack.z = pb.floor(pb.mul(this.mantissa, 32768.0));\r\n this.mantissa = pb.sub(this.mantissa, pb.div(this.pack.z, 32768.0));\r\n this.pack.w = pb.floor(pb.mul(this.mantissa, 8388608.0));\r\n\r\n // Pack Sing and Exponent into bytes\r\n this.$l.expbias = pb.add(this.exponent, 127.0);\r\n this.pack.x = pb.add(this.pack.x, pb.floor(pb.div(this.expbias, 2.0)));\r\n this.expbias = pb.sub(this.expbias, pb.mul(this.pack.x, 2.0));\r\n this.pack.y = pb.add(this.pack.y, pb.mul(pb.floor(this.expbias), 128.0));\r\n this.pack.x = pb.add(this.pack.x, pb.mul(128.0, pb.float(pb.lessThan(this.value, 0)))); // Sign\r\n this.$return(pb.div(pb.floor(pb.add(this.pack, pb.vec4(0.5))), 255.0));\r\n });\r\n return pb.getGlobalScope()[funcName](value);\r\n}\r\n\r\n/**\r\n * Decodes a float that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns The decoded float value\r\n *\r\n * @public\r\n */\r\nexport function decodeNormalizedFloatFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (\r\n !value ||\r\n !value.$typeinfo.isPrimitiveType() ||\r\n value.$typeinfo.primitiveType !== PBPrimitiveType.F32VEC4\r\n ) {\r\n throw new Error('decodeNormalizedFloatFromRGBA() failed: parameter type must be vec4');\r\n }\r\n if (!scope || !(scope instanceof PBInsideFunctionScope)) {\r\n throw new Error(\r\n 'decodeNormalizedFloatFromRGBA() failed: decodeNormalizedFloatFromRGBA() must be called inside a function'\r\n );\r\n }\r\n const funcName = 'Z_decodeNormalizedFloatFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$l.bitShift = pb.vec4(1 / (256 * 256 * 256), 1 / (256 * 256), 1 / 256, 1);\r\n this.$return(pb.dot(this.value, this.bitShift));\r\n });\r\n return scope[funcName](value);\r\n}\r\n\r\n/**\r\n * Encodes a float into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The float value to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encodeNormalizedFloatToRGBA(\r\n scope: PBInsideFunctionScope,\r\n value: PBShaderExp | number\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encodeNormalizedFloatToRGBA';\r\n pb.func(funcName, [pb.float('value')], function () {\r\n this.$l.bitShift = pb.vec4(256 * 256 * 256, 256 * 256, 256, 1);\r\n this.$l.bitMask = pb.vec4(0, 1 / 256, 1 / 256, 1 / 256);\r\n this.$l.t = pb.fract(pb.mul(this.value, this.bitShift));\r\n this.$return(pb.sub(this.t, pb.mul(this.t.xxyz, this.bitMask)));\r\n });\r\n return pb.getGlobalScope()[funcName](value);\r\n}\r\n\r\n/**\r\n * Encodes two half floats into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param a - The first half float to be encode\r\n * @param b - The second half float to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encode2HalfToRGBA(\r\n scope: PBInsideFunctionScope,\r\n a: PBShaderExp | number,\r\n b: PBShaderExp | number\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encode2HalfToRGBA';\r\n pb.func(funcName, [pb.float('a'), pb.float('b')], function () {\r\n this.$l.t = pb.vec4(this.a, pb.fract(pb.mul(this.a, 255)), this.b, pb.fract(pb.mul(this.b, 255)));\r\n this.$return(\r\n pb.vec4(\r\n pb.sub(this.t.x, pb.div(this.t.y, 255)),\r\n this.t.y,\r\n pb.sub(this.t.z, pb.div(this.t.w, 255)),\r\n this.t.w\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](a, b);\r\n}\r\n/**\r\n * Decodes two half floats that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns A vec2 that contains the two half floats\r\n *\r\n * @public\r\n */\r\nexport function decode2HalfFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_decode2HalfFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$return(\r\n pb.vec2(\r\n pb.add(this.value.x, pb.div(this.value.y, 255)),\r\n pb.add(this.value.z, pb.div(this.value.w, 255))\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](value);\r\n}\r\n\r\n/**\r\n * Encodes a color value into RGBM format\r\n *\r\n * @param scope - Current shader scope\r\n * @param rgb - The color value to be encoded\r\n * @param maxRange - The max range of color components\r\n * @returns The encoded RGBA value\r\n *\r\n * @public\r\n */\r\nexport function encodeRGBM(\r\n scope: PBInsideFunctionScope,\r\n rgb: PBShaderExp,\r\n maxRange: PBShaderExp | number\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encodeRGBM';\r\n pb.func(funcName, [pb.vec3('rgb'), pb.float('range')], function () {\r\n this.$l.maxRGB = pb.max(this.rgb.r, pb.max(this.rgb.g, this.rgb.b));\r\n this.$l.M = pb.div(this.maxRGB, this.range);\r\n this.M = pb.div(pb.ceil(pb.mul(this.M, 255)), 255);\r\n this.$return(pb.vec4(pb.div(this.rgb, pb.mul(this.M, this.range)), this.M));\r\n });\r\n return pb.getGlobalScope()[funcName](rgb, maxRange);\r\n}\r\n\r\n/**\r\n * Decodes color value that was encoded into RGBM format\r\n *\r\n * @param scope - Current shader scope\r\n * @param rgbm - The RGBM to be decoded\r\n * @param maxRange - The max range of color components\r\n * @returns The decoded RGB color value\r\n *\r\n * @public\r\n */\r\nexport function decodeRGBM(\r\n scope: PBInsideFunctionScope,\r\n rgbm: PBShaderExp,\r\n maxRange: PBShaderExp | number\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_decodeRGBM';\r\n pb.func(funcName, [pb.vec4('rgbm'), pb.float('range')], function () {\r\n this.$return(pb.mul(this.rgbm.rgb, this.rgbm.a, this.range));\r\n });\r\n return pb.getGlobalScope()[funcName](rgbm, maxRange);\r\n}\r\n\r\n/**\r\n * Converts a vec3 color from gamma space to linear space\r\n *\r\n * @param scope - Current shader scope\r\n * @param color - The vec3 color to be converted\r\n * @returns The linear space vec3 color\r\n *\r\n * @public\r\n */\r\nexport function gammaToLinear(scope: PBInsideFunctionScope, color: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_gammaToLinear';\r\n pb.func(funcName, [pb.vec3('color')], function () {\r\n // Approximate version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1\r\n // float3 RGB = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878);\r\n this.$return(\r\n pb.mul(\r\n this.color,\r\n pb.add(\r\n pb.mul(this.color, pb.add(pb.mul(this.color, 0.305306011), pb.vec3(0.682171111))),\r\n pb.vec3(0.012522878)\r\n )\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](color);\r\n}\r\n\r\n/**\r\n * Converts a vec3 color from linear space to gamma space\r\n *\r\n * @param scope - Current shader scope\r\n * @param color - The vec3 color to be converted\r\n * @returns The gamma space vec3 color\r\n *\r\n * @public\r\n */\r\nexport function linearToGamma(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_linearToGamma';\r\n pb.func(funcName, [pb.vec3('color')], function () {\r\n // Almost perfect version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1\r\n // C_srgb_2 = max(1.055 * pow(C_lin, 0.416666667) - 0.055, 0);\r\n this.$return(\r\n pb.max(pb.sub(pb.mul(pb.pow(this.color, pb.vec3(0.416666667)), 1.055), pb.vec3(0.055)), pb.vec3(0))\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](color);\r\n}\r\n\r\n/** @internal */\r\nexport function fetchNormalizedFloatForDevice(\r\n scope: PBInsideFunctionScope,\r\n tex: PBShaderExp,\r\n uv: PBShaderExp,\r\n level?: PBShaderExp | number\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n const texel =\r\n level === undefined || level === null ? pb.textureSample(tex, uv) : pb.textureSampleLevel(tex, uv, level);\r\n if (pb.getDevice().type === 'webgl') {\r\n return decodeNormalizedFloatFromRGBA(scope, texel);\r\n } else {\r\n return texel;\r\n }\r\n}\r\n"],"names":["decodeFloatFromRGBA","scope","value","pb","$builder","$typeinfo","isPrimitiveType","primitiveType","PBPrimitiveType","F32VEC4","Error","PBInsideFunctionScope","funcName","func","vec4","$l","pack","floor","add","mul","bitSign","float","greaterThan","x","bitExpn","y","sub","exponent","pow","mantissa","div","z","w","$return","encodeFloatToRGBA","floatMax","floatMin","absvalue","abs","$if","lessThanEqual","greaterThanEqual","neg","log2","expbias","lessThan","getGlobalScope","decodeNormalizedFloatFromRGBA","bitShift","dot","encodeNormalizedFloatToRGBA","bitMask","t","fract","xxyz","encode2HalfToRGBA","a","b","decode2HalfFromRGBA","vec2","encodeRGBM","rgb","maxRange","vec3","maxRGB","max","r","g","M","range","ceil","decodeRGBM","rgbm","gammaToLinear","color","linearToGamma","fetchNormalizedFloatForDevice","tex","uv","level","texel","undefined","textureSample","textureSampleLevel","getDevice","type"],"mappings":"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"}