@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
@@ -1,17 +1,4 @@
1
- import { decodeNormalizedFloatFromRGBA } from './misc.js';
2
1
  import { ShaderHelper } from '../material/shader/helper.js';
3
- import '../material/lambert.js';
4
- import '../material/blinn.js';
5
- import '../material/unlit.js';
6
- import '@zephyr3d/device';
7
- import '../values.js';
8
- import '../app.js';
9
- import '../material/meshmaterial.js';
10
- import '../material/grassmaterial.js';
11
- import '../material/terrainmaterial.js';
12
- import '../material/pbrmr.js';
13
- import '../material/pbrsg.js';
14
- import '@zephyr3d/base';
15
2
 
16
3
  const MAX_FLOAT_VALUE = 3.402823466e38;
17
4
  /** @internal */ function SSR_calcJitter(scope, viewPos, roughness) {
@@ -87,15 +74,6 @@ const MAX_FLOAT_VALUE = 3.402823466e38;
87
74
  });
88
75
  return hit3D ? scope[funcName](hit2D, hit3D, thickness, surfaceZ, uv, traceRay, viewMatrix, invProjMatrix, textureSize) : scope[funcName](hit2D, surfaceZ, uv, traceRay, viewMatrix, invProjMatrix, textureSize);
89
76
  }
90
- function sampleLinearDepth(scope, tex, uv, level) {
91
- const pb = scope.$builder;
92
- const depth = pb.textureSampleLevel(tex, uv, level);
93
- return pb.getDevice().type === 'webgl' ? decodeNormalizedFloatFromRGBA(scope, depth) : depth.r;
94
- }
95
- function sampleLinearDepthWithBackface(scope, tex, uv, level) {
96
- const pb = scope.$builder;
97
- return pb.textureSampleLevel(tex, uv, level).rg;
98
- }
99
77
  function screenSpaceRayTracing_Linear2D(scope, viewPos, traceRay, viewMatrix, projMatrix, invProjMatrix, cameraNearFar, maxDistance, maxIterations, thickness, stride, textureSize, linearDepthTex, normalTexture, useBackfaceDepth) {
100
78
  const pb = scope.$builder;
101
79
  pb.func('distanceSquared', [
@@ -114,11 +92,11 @@ function screenSpaceRayTracing_Linear2D(scope, viewPos, traceRay, viewMatrix, pr
114
92
  ], function() {
115
93
  let thickness = this.thickness;
116
94
  if (useBackfaceDepth) {
117
- this.$l.sceneZ = sampleLinearDepthWithBackface(this, linearDepthTex, this.uv, 0);
95
+ this.$l.sceneZ = ShaderHelper.sampleLinearDepthWithBackface(this, linearDepthTex, this.uv, 0);
118
96
  this.$l.sceneZMax01 = this.sceneZ.x;
119
97
  thickness = pb.max(this.thickness, pb.mul(pb.sub(this.sceneZ.y, this.sceneZ.x), this.cameraFar));
120
98
  } else {
121
- this.$l.sceneZMax01 = sampleLinearDepth(this, linearDepthTex, this.uv, 0);
99
+ this.$l.sceneZMax01 = ShaderHelper.sampleLinearDepth(this, linearDepthTex, this.uv, 0);
122
100
  }
123
101
  this.sceneZMax = pb.neg(pb.mul(this.sceneZMax01, this.cameraFar));
124
102
  this.$return(pb.and(pb.lessThan(this.sceneZMax01, 1), pb.greaterThanEqual(this.zA, pb.sub(this.sceneZMax, thickness)), pb.lessThanEqual(this.zB, this.sceneZMax)));
@@ -127,7 +105,6 @@ function screenSpaceRayTracing_Linear2D(scope, viewPos, traceRay, viewMatrix, pr
127
105
  pb.vec3('rayOrigin'),
128
106
  pb.vec3('rayDirection'),
129
107
  pb.float('stride'),
130
- pb.float('strideZCutoff'),
131
108
  pb.float('maxDistance'),
132
109
  pb.float('maxIterations'),
133
110
  pb.float('thickness'),
@@ -203,7 +180,7 @@ function screenSpaceRayTracing_Linear2D(scope, viewPos, traceRay, viewMatrix, pr
203
180
  this.$l.hitUV = pb.vec2();
204
181
  this.$l.hitZ = pb.float();
205
182
  this.numIterations = 0;
206
- this.skippedIterations = pb.min(this.maxIterations, 2);
183
+ this.skippedIterations = pb.min(this.maxIterations, 1);
207
184
  this.$for(pb.float('i'), 0, pb.getDevice().type === 'webgl' ? 1000 : this.maxIterations, function() {
208
185
  if (pb.getDevice().type === 'webgl') {
209
186
  this.$if(pb.greaterThanEqual(this.i, this.maxIterations), function() {
@@ -241,7 +218,6 @@ function screenSpaceRayTracing_Linear2D(scope, viewPos, traceRay, viewMatrix, pr
241
218
  pb.mat4('projMatrix'),
242
219
  pb.mat4('invProjMatrix'),
243
220
  pb.float('stride'),
244
- pb.float('strideZCutoff'),
245
221
  pb.float('maxDistance'),
246
222
  pb.float('maxIterations'),
247
223
  pb.float('thickness'),
@@ -252,11 +228,11 @@ function screenSpaceRayTracing_Linear2D(scope, viewPos, traceRay, viewMatrix, pr
252
228
  this.$l.hit3D = pb.vec3();
253
229
  this.$l.origin = pb.vec2();
254
230
  this.$l.numIterations = pb.float();
255
- this.$l.intersected = this.traceRayLinear2D(this.rayOrigin, this.rayDirection, this.stride, this.strideZCutoff, this.maxDistance, this.maxIterations, this.thickness, this.cameraNearFar, this.projMatrix, this.textureSize, this.hit2D, this.hit3D, this.origin, this.numIterations);
231
+ this.$l.intersected = this.traceRayLinear2D(this.rayOrigin, this.rayDirection, this.stride, this.maxDistance, this.maxIterations, this.thickness, this.cameraNearFar, this.projMatrix, this.textureSize, this.hit2D, this.hit3D, this.origin, this.numIterations);
256
232
  this.$if(pb.not(this.intersected), function() {
257
233
  this.$return(pb.vec4(0));
258
234
  });
259
- this.$l.surfaceZ01 = sampleLinearDepth(this, linearDepthTex, this.hit2D.xy, 0);
235
+ this.$l.surfaceZ01 = ShaderHelper.sampleLinearDepth(this, linearDepthTex, this.hit2D.xy, 0);
260
236
  this.$if(pb.equal(this.surfaceZ01, 1), function() {
261
237
  this.$return(pb.vec4(0));
262
238
  });
@@ -270,7 +246,7 @@ function screenSpaceRayTracing_Linear2D(scope, viewPos, traceRay, viewMatrix, pr
270
246
  this.$l.hitDistance = pb.length(pb.sub(this.hitPixel, this.startPixel));
271
247
  this.$return(pb.vec4(this.hit2D.xy, this.hitDistance, this.confidence));
272
248
  });
273
- return scope.SSR_Linear2D(viewPos, traceRay, viewMatrix, projMatrix, invProjMatrix, stride, 100, maxDistance, maxIterations, thickness, cameraNearFar, textureSize);
249
+ return scope.SSR_Linear2D(viewPos, traceRay, viewMatrix, projMatrix, invProjMatrix, stride, maxDistance, maxIterations, thickness, cameraNearFar, textureSize);
274
250
  }
275
251
  function screenSpaceRayTracing_HiZ(scope, viewPos, traceRay, viewMatrix, projMatrix, invProjMatrix, cameraNearFar, maxMipLevel, maxIterations, thickness, textureSize, HiZTexture, normalTexture) {
276
252
  const pb = scope.$builder;
@@ -368,13 +344,7 @@ function screenSpaceRayTracing_HiZ(scope, viewPos, traceRay, viewMatrix, projMat
368
344
  this.$l.currentMipResolution = this.getMipResolution(this.currentMip);
369
345
  this.$l.invCurrentMipResolution = pb.div(pb.vec2(1), this.currentMipResolution);
370
346
  this.$l.uvOffset = pb.div(pb.mul(0.005, pb.exp2(pb.float(this.mostDetailMip))), this.screenSize);
371
- /*
372
- this.$l.uvOffset = pb.div(
373
- pb.vec2(0.001),
374
- //pb.mul(pb.exp2(pb.float(this.mostDetailMip)), 0.005),
375
- pb.vec2(pb.textureDimensions(HiZTexture, this.mostDetailMip))
376
- );
377
- */ this.uvOffset = pb.vec2(this.$choice(pb.lessThan(this.screenSpaceDirection.x, 0), pb.neg(this.uvOffset.x), this.uvOffset.x), this.$choice(pb.lessThan(this.screenSpaceDirection.y, 0), pb.neg(this.uvOffset.y), this.uvOffset.y));
347
+ this.uvOffset = pb.vec2(this.$choice(pb.lessThan(this.screenSpaceDirection.x, 0), pb.neg(this.uvOffset.x), this.uvOffset.x), this.$choice(pb.lessThan(this.screenSpaceDirection.y, 0), pb.neg(this.uvOffset.y), this.uvOffset.y));
378
348
  this.$l.floorOffset = pb.vec2(this.$choice(pb.lessThan(this.screenSpaceDirection.x, 0), pb.float(0), pb.float(1)), this.$choice(pb.lessThan(this.screenSpaceDirection.y, 0), pb.float(0), pb.float(1)));
379
349
  this.$l.currentT = pb.float();
380
350
  this.$l.position = pb.vec3();
@@ -436,7 +406,85 @@ function screenSpaceRayTracing_HiZ(scope, viewPos, traceRay, viewMatrix, projMat
436
406
  this.$return(pb.vec4(this.hit.xy, this.hitDistance, this.confidence));
437
407
  });
438
408
  return scope.SSR_HiZ(viewPos, traceRay, viewMatrix, projMatrix, invProjMatrix, cameraNearFar, thickness, textureSize, pb.sub(maxMipLevel, 1), maxIterations);
439
- }
409
+ } /*
410
+ float2 cell(float2 ray, float2 cell_count, uint camera) {
411
+ return floor(ray.xy * cell_count);
412
+ }
413
+
414
+ float2 cell_count(float level) {
415
+ return input_texture2_size / (level == 0.0 ? 1.0 : exp2(level));
416
+ }
417
+
418
+ float3 intersect_cell_boundary(float3 pos, float3 dir, float2 cell_id, float2 cell_count, float2 cross_step, float2 cross_offset, uint camera) {
419
+ float2 cell_size = 1.0 / cell_count;
420
+ float2 planes = cell_id/cell_count + cell_size * cross_step;
421
+
422
+ float2 solutions = (planes - pos)/dir.xy;
423
+ float3 intersection_pos = pos + dir * min(solutions.x, solutions.y);
424
+
425
+ intersection_pos.xy += (solutions.x < solutions.y) ? float2(cross_offset.x, 0.0) : float2(0.0, cross_offset.y);
426
+
427
+ return intersection_pos;
428
+ }
429
+
430
+ bool crossed_cell_boundary(float2 cell_id_one, float2 cell_id_two) {
431
+ return (int)cell_id_one.x != (int)cell_id_two.x || (int)cell_id_one.y != (int)cell_id_two.y;
432
+ }
433
+
434
+ float minimum_depth_plane(float2 ray, float level, float2 cell_count, uint camera) {
435
+ return input_texture2.Load(int3(vr_stereo_to_mono(ray.xy, camera) * cell_count, level)).r;
436
+ }
437
+
438
+ float3 hi_z_trace(float3 p, float3 v, in uint camera, out uint iterations) {
439
+ float level = HIZ_START_LEVEL;
440
+ float3 v_z = v/v.z;
441
+ float2 hi_z_size = cell_count(level);
442
+ float3 ray = p;
443
+
444
+ float2 cross_step = float2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0);
445
+ float2 cross_offset = cross_step * 0.00001;
446
+ cross_step = saturate(cross_step);
447
+
448
+ float2 ray_cell = cell(ray.xy, hi_z_size.xy, camera);
449
+ ray = intersect_cell_boundary(ray, v, ray_cell, hi_z_size, cross_step, cross_offset, camera);
450
+
451
+ iterations = 0;
452
+ while(level >= HIZ_STOP_LEVEL && iterations < MAX_ITERATIONS) {
453
+ // get the cell number of the current ray
454
+ float2 current_cell_count = cell_count(level);
455
+ float2 old_cell_id = cell(ray.xy, current_cell_count, camera);
456
+
457
+ // get the minimum depth plane in which the current ray resides
458
+ float min_z = minimum_depth_plane(ray.xy, level, current_cell_count, camera);
459
+
460
+ // intersect only if ray depth is below the minimum depth plane
461
+ float3 tmp_ray = ray;
462
+ if(v.z > 0) {
463
+ float min_minus_ray = min_z - ray.z;
464
+ tmp_ray = min_minus_ray > 0 ? ray + v_z*min_minus_ray : tmp_ray;
465
+ float2 new_cell_id = cell(tmp_ray.xy, current_cell_count, camera);
466
+ if(crossed_cell_boundary(old_cell_id, new_cell_id)) {
467
+ tmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);
468
+ level = min(HIZ_MAX_LEVEL, level + 2.0f);
469
+ }else{
470
+ if(level == 1 && abs(min_minus_ray) > 0.0001) {
471
+ tmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);
472
+ level = 2;
473
+ }
474
+ }
475
+ } else if(ray.z < min_z) {
476
+ tmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);
477
+ level = min(HIZ_MAX_LEVEL, level + 2.0f);
478
+ }
479
+
480
+ ray.xyz = tmp_ray.xyz;
481
+ --level;
482
+
483
+ ++iterations;
484
+ }
485
+ return ray;
486
+ }
487
+ */
440
488
 
441
- export { SSR_calcJitter, sampleLinearDepth, sampleLinearDepthWithBackface, screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D };
489
+ export { SSR_calcJitter, screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D };
442
490
  //# sourceMappingURL=ssr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssr.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ssr.js","sources":["../../src/shaders/ssr.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\n\r\nconst MAX_FLOAT_VALUE = 3.402823466e38;\r\n\r\n/** @internal */\r\nexport function SSR_calcJitter(scope: PBInsideFunctionScope, viewPos: PBShaderExp, roughness: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('SSR_calcJitter', [pb.vec3('viewPos'), pb.float('roughness')], function () {\r\n this.$l.h = pb.fract(pb.mul(this.viewPos, 0.8));\r\n this.h = pb.add(this.h, pb.dot(this.h, pb.add(this.h.yxz, pb.vec3(19.19))));\r\n this.h = pb.fract(pb.mul(pb.add(this.h.xxy, this.h.yxx), this.h.zyx));\r\n this.h = pb.sub(this.h, pb.vec3(0.5));\r\n this.$return(pb.mix(pb.vec3(0), this.h, this.roughness));\r\n });\r\n return scope.SSR_calcJitter(viewPos, roughness);\r\n}\r\n\r\n/** @internal */\r\n// source: https://github.com/blender/blender/blob/594f47ecd2d5367ca936cf6fc6ec8168c2b360d0/source/blender/gpu/shaders/material/gpu_shader_material_fresnel.glsl\r\nexport function SSR_fresnel(\r\n scope: PBInsideFunctionScope,\r\n viewVec: PBShaderExp,\r\n normal: PBShaderExp,\r\n eta: PBShaderExp | number = 1.5\r\n) {\r\n const pb = scope.$builder;\r\n pb.func('SSR_fresnel', [pb.vec3('viewVec'), pb.vec3('viewNormal'), pb.float('eta')], function () {\r\n this.$l.cos = pb.dot(this.viewVec, this.viewNormal);\r\n this.$l.c = pb.abs(this.cos);\r\n this.$l.g = pb.add(pb.sub(pb.mul(this.eta, this.eta), 1), pb.mul(this.c, this.c));\r\n this.$l.r = pb.float();\r\n this.$if(pb.greaterThan(this.g, 0), function () {\r\n this.g = pb.sqrt(this.g);\r\n this.$l.A = pb.div(pb.sub(this.g, this.c), pb.add(this.g, this.c));\r\n this.$l.B = pb.div(\r\n pb.sub(pb.mul(this.c, pb.add(this.g, this.c)), 1),\r\n pb.add(pb.mul(this.c, pb.sub(this.g, this.c)), 1)\r\n );\r\n this.r = pb.mul(this.A, this.A, 0.5, pb.add(pb.mul(this.B, this.B), 1));\r\n }).$else(function () {\r\n this.r = 1;\r\n });\r\n this.$return(pb.min(1, pb.mul(this.r, 5)));\r\n });\r\n return scope.SSR_fresnel(viewVec, normal, eta);\r\n}\r\n\r\n/** @internal */\r\nexport function SSR_dither(scope: PBInsideFunctionScope, uv: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (pb.getDevice().type === 'webgl') {\r\n return pb.float(0);\r\n }\r\n if (!pb.getGlobalScope().Z_dither) {\r\n pb.getGlobalScope().Z_dither = [\r\n pb.float(0),\r\n pb.float(0.5),\r\n pb.float(0.125),\r\n pb.float(0.625),\r\n pb.float(0.75),\r\n pb.float(0.25),\r\n pb.float(0.875),\r\n pb.float(0.375),\r\n pb.float(0.187),\r\n pb.float(0.687),\r\n pb.float(0.0625),\r\n pb.float(0.562),\r\n pb.float(0.937),\r\n pb.float(0.437),\r\n pb.float(0.812),\r\n pb.float(0.312)\r\n ];\r\n pb.func('SSR_dither', [pb.vec2('uv')], function () {\r\n this.$l.ditherUV = pb.mod(this.uv, pb.vec2(4));\r\n this.$return(this.Z_dither.at(pb.uint(pb.add(pb.mul(this.ditherUV.x, 4), this.ditherUV.y))));\r\n });\r\n return scope.SSR_dither(uv);\r\n }\r\n}\r\n/** @internal */\r\nfunction invProjectPosition(scope: PBInsideFunctionScope, pos: PBShaderExp, mat: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('invProjectPosition', [pb.vec3('p'), pb.mat4('mat')], function () {\r\n this.$l.c = pb.sub(pb.mul(this.p, 2), pb.vec3(1));\r\n this.$l.u = pb.mul(this.mat, pb.vec4(this.c, 1));\r\n this.u = pb.div(this.u, this.u.w);\r\n this.$return(this.u.xyz);\r\n });\r\n return scope.invProjectPosition(pos, mat);\r\n}\r\n\r\n/** @internal */\r\nfunction validateHit(\r\n scope: PBInsideFunctionScope,\r\n hit2D: PBShaderExp,\r\n hit3D: PBShaderExp,\r\n surfaceZ: PBShaderExp,\r\n thickness: PBShaderExp,\r\n uv: PBShaderExp,\r\n traceRay: PBShaderExp,\r\n viewMatrix: PBShaderExp,\r\n invProjMatrix: PBShaderExp,\r\n textureSize: PBShaderExp,\r\n normalTexture?: PBShaderExp\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = hit3D ? 'SSR_validateHit_HiZ' : 'SSR_validateHit';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec2('hit2d'),\r\n ...(hit3D ? [pb.vec3('hit3d')] : []),\r\n ...(hit3D ? [pb.float('thickness')] : []),\r\n pb.float('surfaceZ'),\r\n pb.vec2('uv'),\r\n pb.vec3('viewSpaceRayDirection'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('invProjMatrix'),\r\n pb.vec4('textureSize')\r\n ],\r\n function () {\r\n this.$if(\r\n pb.or(pb.any(pb.lessThan(this.hit2d, pb.vec2(0))), pb.any(pb.greaterThan(this.hit2d, pb.vec2(1)))),\r\n function () {\r\n this.$return(pb.float(0));\r\n }\r\n );\r\n this.$l.manhattanDist = pb.abs(pb.sub(this.hit2d, this.uv));\r\n this.$if(\r\n pb.all(pb.lessThan(this.manhattanDist, pb.vec2(pb.div(pb.vec2(2), this.textureSize.xy)))),\r\n function () {\r\n this.$return(pb.float(0));\r\n }\r\n );\r\n if (normalTexture) {\r\n this.$l.hitNormalWS = pb.sub(\r\n pb.mul(pb.textureSampleLevel(normalTexture, this.hit2d, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.hitNormalVS = pb.mul(this.viewMatrix, pb.vec4(this.hitNormalWS, 0)).xyz;\r\n this.$if(pb.greaterThan(pb.dot(this.hitNormalVS, this.viewSpaceRayDirection), 0), function () {\r\n this.$return(pb.float(0));\r\n });\r\n }\r\n this.$l.viewSpaceSurface = invProjectPosition(\r\n this,\r\n pb.vec3(this.hit2d, this.surfaceZ),\r\n this.invProjMatrix\r\n );\r\n this.$l.fov = pb.mul(pb.vec2(pb.div(this.textureSize.y, this.textureSize.x), 1), 0.05);\r\n this.$l.border = pb.mul(\r\n pb.smoothStep(pb.vec2(0), this.fov, this.hit2d),\r\n pb.sub(pb.vec2(1), pb.smoothStep(pb.sub(pb.vec2(1), this.fov), pb.vec2(1), this.hit2d))\r\n );\r\n this.$l.vignette = pb.mul(this.border.x, this.border.y);\r\n if (this.hit3d) {\r\n this.$l.distance = pb.distance(this.viewSpaceSurface, this.hit3d);\r\n this.$l.confidence = pb.sub(1, pb.smoothStep(0, this.thickness, this.distance));\r\n this.$return(pb.mul(this.vignette, this.confidence, this.confidence));\r\n } else {\r\n this.$return(this.vignette);\r\n }\r\n }\r\n );\r\n return hit3D\r\n ? scope[funcName](hit2D, hit3D, thickness, surfaceZ, uv, traceRay, viewMatrix, invProjMatrix, textureSize)\r\n : scope[funcName](hit2D, surfaceZ, uv, traceRay, viewMatrix, invProjMatrix, textureSize);\r\n}\r\n\r\nexport function screenSpaceRayTracing_Linear2D(\r\n scope: PBInsideFunctionScope,\r\n viewPos: PBShaderExp,\r\n traceRay: PBShaderExp,\r\n viewMatrix: PBShaderExp,\r\n projMatrix: PBShaderExp,\r\n invProjMatrix: PBShaderExp,\r\n cameraNearFar: PBShaderExp,\r\n maxDistance: PBShaderExp | number,\r\n maxIterations: PBShaderExp | number,\r\n thickness: PBShaderExp | number,\r\n stride: PBShaderExp | number,\r\n textureSize: PBShaderExp,\r\n linearDepthTex: PBShaderExp,\r\n normalTexture?: PBShaderExp,\r\n useBackfaceDepth?: boolean\r\n) {\r\n const pb = scope.$builder;\r\n pb.func('distanceSquared', [pb.vec2('a'), pb.vec2('b')], function () {\r\n this.$l.x = pb.sub(this.a, this.b);\r\n this.$return(pb.dot(this.x, this.x));\r\n });\r\n pb.func(\r\n 'rayIntersectDepth',\r\n [pb.float('zA'), pb.float('zB'), pb.float('thickness'), pb.vec2('uv'), pb.float('cameraFar')],\r\n function () {\r\n let thickness = this.thickness;\r\n if (useBackfaceDepth) {\r\n this.$l.sceneZ = ShaderHelper.sampleLinearDepthWithBackface(this, linearDepthTex, this.uv, 0);\r\n this.$l.sceneZMax01 = this.sceneZ.x;\r\n thickness = pb.max(this.thickness, pb.mul(pb.sub(this.sceneZ.y, this.sceneZ.x), this.cameraFar));\r\n } else {\r\n this.$l.sceneZMax01 = ShaderHelper.sampleLinearDepth(this, linearDepthTex, this.uv, 0);\r\n }\r\n this.sceneZMax = pb.neg(pb.mul(this.sceneZMax01, this.cameraFar));\r\n this.$return(\r\n pb.and(\r\n pb.lessThan(this.sceneZMax01, 1),\r\n pb.greaterThanEqual(this.zA, pb.sub(this.sceneZMax, thickness)),\r\n pb.lessThanEqual(this.zB, this.sceneZMax)\r\n )\r\n );\r\n }\r\n );\r\n pb.func(\r\n 'traceRayLinear2D',\r\n [\r\n pb.vec3('rayOrigin'),\r\n pb.vec3('rayDirection'),\r\n pb.float('stride'),\r\n pb.float('maxDistance'),\r\n pb.float('maxIterations'),\r\n pb.float('thickness'),\r\n pb.vec2('cameraNearFar'),\r\n pb.mat4('projMatrix'),\r\n pb.vec4('textureSize'),\r\n pb.vec3('hit2D').out(),\r\n pb.vec3('hit3D').out(),\r\n pb.vec2('origin').out(),\r\n pb.float('numIterations').out()\r\n ],\r\n function () {\r\n this.$l.rayLen = this.$choice(\r\n pb.greaterThan(\r\n pb.add(this.rayOrigin.z, pb.mul(this.rayDirection.z, this.maxDistance)),\r\n pb.neg(this.cameraNearFar.x)\r\n ),\r\n pb.div(pb.sub(pb.neg(this.cameraNearFar.x), this.rayOrigin.z), this.rayDirection.z),\r\n this.maxDistance\r\n );\r\n this.$l.rayEnd = pb.add(this.rayOrigin, pb.mul(this.rayDirection, this.rayLen));\r\n this.$l.zMin = pb.min(this.rayOrigin.z, this.rayEnd.z);\r\n this.$l.zMax = pb.max(this.rayOrigin.z, this.rayEnd.z);\r\n this.$l.rayOriginH = pb.mul(this.projMatrix, pb.vec4(this.rayOrigin, 1));\r\n this.$l.rayEndH = pb.mul(this.projMatrix, pb.vec4(this.rayEnd, 1));\r\n this.$l.k0 = pb.div(1, this.rayOriginH.w);\r\n this.$l.k1 = pb.div(1, this.rayEndH.w);\r\n this.$l.Q0 = pb.mul(this.rayOrigin, this.k0);\r\n this.$l.Q1 = pb.mul(this.rayEnd, this.k1);\r\n this.$l.rayOriginNDC = pb.mul(this.rayOriginH, this.k0);\r\n this.$l.rayEndNDC = pb.mul(this.rayEndH, this.k1);\r\n this.origin = pb.add(pb.mul(this.rayOriginNDC.xy, 0.5), pb.vec2(0.5));\r\n this.$l.P0 = pb.mul(this.origin, this.textureSize.zw);\r\n this.$l.P1 = pb.mul(pb.add(pb.mul(this.rayEndNDC.xy, 0.5), pb.vec2(0.5)), this.textureSize.zw);\r\n this.$l.xMin = 0.5;\r\n this.$l.xMax = pb.sub(this.textureSize.z, 0.5);\r\n this.$l.yMin = 0.5;\r\n this.$l.yMax = pb.sub(this.textureSize.w, 0.5);\r\n this.$l.t = pb.float();\r\n this.$if(pb.or(pb.greaterThan(this.P1.y, this.yMax), pb.lessThan(this.P1.y, this.yMin)), function () {\r\n this.t = pb.div(\r\n pb.sub(this.P1.y, this.$choice(pb.greaterThan(this.P1.y, this.yMax), this.yMax, this.yMin)),\r\n pb.sub(this.P1.y, this.P0.y)\r\n );\r\n });\r\n this.$if(pb.or(pb.greaterThan(this.P1.x, this.xMax), pb.lessThan(this.P1.x, this.xMin)), function () {\r\n this.t2 = pb.div(\r\n pb.sub(this.P1.x, this.$choice(pb.greaterThan(this.P1.x, this.xMax), this.xMax, this.xMin)),\r\n pb.sub(this.P1.x, this.P0.x)\r\n );\r\n this.t = pb.max(this.t, this.t2);\r\n });\r\n this.P1 = pb.mix(this.P1, this.P0, this.t);\r\n this.k1 = pb.mix(this.k1, this.k0, this.t);\r\n this.Q1 = pb.mix(this.Q1, this.Q0, this.t);\r\n this.P1 = this.$choice(\r\n pb.lessThan(this.distanceSquared(this.P0, this.P1), 0.0001),\r\n pb.add(this.P1, pb.vec2(0.01)),\r\n this.P1\r\n );\r\n this.$l.delta = pb.sub(this.P1, this.P0);\r\n this.$l.permute = false;\r\n this.$if(pb.lessThan(pb.abs(this.delta.x), pb.abs(this.delta.y)), function () {\r\n this.permute = true;\r\n this.delta = this.delta.yx;\r\n this.P0 = this.P0.yx;\r\n this.P1 = this.P1.yx;\r\n });\r\n this.$l.stepDir = pb.sign(this.delta.x);\r\n this.$l.invdx = pb.div(this.stepDir, this.delta.x);\r\n this.$l.dQ = pb.mul(pb.sub(this.Q1, this.Q0), this.invdx);\r\n this.$l.dK = pb.mul(pb.sub(this.k1, this.k0), this.invdx);\r\n this.$l.dP = pb.vec2(this.stepDir, pb.mul(this.delta.y, this.invdx));\r\n //this.$l.strideScalar = pb.sub(1, pb.min(1, pb.div(pb.neg(this.rayOrigin.z), this.strideZCutoff)));\r\n //this.$l.pixelStride = pb.add(1, pb.mul(this.strideScalar, this.stride));\r\n this.$l.pixelStride = this.stride;\r\n this.dP = pb.mul(this.dP, this.pixelStride);\r\n this.dQ = pb.mul(this.dQ, this.pixelStride);\r\n this.dK = pb.mul(this.dK, this.pixelStride);\r\n this.$l.jitter = pb.float(1); //dither(this, this.P0);\r\n this.P0 = pb.add(this.P0, pb.mul(this.dP, this.jitter));\r\n this.Q0 = pb.add(this.Q0, pb.mul(this.dQ, this.jitter));\r\n this.k0 = pb.add(this.k0, pb.mul(this.dK, this.jitter));\r\n this.$l.prevZMaxEstimate = this.rayOrigin.z;\r\n this.$l.zA = this.prevZMaxEstimate;\r\n this.$l.zB = this.prevZMaxEstimate;\r\n this.$l.pqk = pb.vec4(this.P0, this.Q0.z, this.k0);\r\n this.$l.dpqk = pb.vec4(this.dP, this.dQ.z, this.dK);\r\n this.$l.invRenderTargetSize = pb.div(pb.vec2(1), this.textureSize.zw);\r\n this.$l.intersected = false;\r\n this.$l.hitUV = pb.vec2();\r\n this.$l.hitZ = pb.float();\r\n this.numIterations = 0;\r\n this.skippedIterations = pb.min(this.maxIterations, 1);\r\n this.$for(pb.float('i'), 0, pb.getDevice().type === 'webgl' ? 1000 : this.maxIterations, function () {\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$if(pb.greaterThanEqual(this.i, this.maxIterations), function () {\r\n this.$break();\r\n });\r\n }\r\n this.$if(pb.and(this.intersected, pb.greaterThanEqual(this.i, this.skippedIterations)), function () {\r\n this.$break();\r\n });\r\n this.numIterations = pb.add(this.numIterations, 1);\r\n this.pqk = pb.add(this.pqk, this.dpqk);\r\n this.zA = this.prevZMaxEstimate;\r\n this.zB = pb.div(\r\n pb.add(pb.mul(this.dpqk.z, 0.5), this.pqk.z),\r\n pb.add(pb.mul(this.dpqk.w, 0.5), this.pqk.w)\r\n );\r\n this.zB = pb.clamp(this.zB, this.zMin, this.zMax);\r\n this.prevZMaxEstimate = this.zB;\r\n this.hitZ = this.zB;\r\n this.$if(pb.greaterThan(this.zB, this.zA), function () {\r\n this.$l.t = this.zB;\r\n this.zB = this.zA;\r\n this.zA = this.t;\r\n });\r\n this.hitUV = this.$choice(this.permute, this.pqk.yx, this.pqk.xy);\r\n this.hitUV = pb.mul(this.hitUV, this.invRenderTargetSize);\r\n this.intersected = this.rayIntersectDepth(\r\n this.zA,\r\n this.zB,\r\n this.thickness,\r\n this.hitUV,\r\n this.cameraNearFar.y\r\n );\r\n });\r\n this.hit2D = pb.vec3(this.hitUV, this.hitZ);\r\n this.Q0 = pb.vec3(pb.add(this.Q0.xy, pb.mul(this.dQ.xy, this.numIterations)), this.pqk.z);\r\n this.hit3D = pb.div(this.Q0, this.pqk.w);\r\n this.$return(this.intersected);\r\n }\r\n );\r\n pb.func(\r\n 'SSR_Linear2D',\r\n [\r\n pb.vec3('rayOrigin'),\r\n pb.vec3('rayDirection'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('projMatrix'),\r\n pb.mat4('invProjMatrix'),\r\n pb.float('stride'),\r\n pb.float('maxDistance'),\r\n pb.float('maxIterations'),\r\n pb.float('thickness'),\r\n pb.vec2('cameraNearFar'),\r\n pb.vec4('textureSize')\r\n ],\r\n function () {\r\n this.$l.hit2D = pb.vec3();\r\n this.$l.hit3D = pb.vec3();\r\n this.$l.origin = pb.vec2();\r\n this.$l.numIterations = pb.float();\r\n this.$l.intersected = this.traceRayLinear2D(\r\n this.rayOrigin,\r\n this.rayDirection,\r\n this.stride,\r\n this.maxDistance,\r\n this.maxIterations,\r\n this.thickness,\r\n this.cameraNearFar,\r\n this.projMatrix,\r\n this.textureSize,\r\n this.hit2D,\r\n this.hit3D,\r\n this.origin,\r\n this.numIterations\r\n );\r\n this.$if(pb.not(this.intersected), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.surfaceZ01 = ShaderHelper.sampleLinearDepth(this, linearDepthTex, this.hit2D.xy, 0);\r\n this.$if(pb.equal(this.surfaceZ01, 1), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.surfaceZ = ShaderHelper.linearDepthToNonLinear(\r\n this,\r\n pb.mul(this.surfaceZ01, this.cameraNearFar.y),\r\n this.cameraNearFar\r\n );\r\n this.$l.confidence = validateHit(\r\n this,\r\n this.hit2D.xy,\r\n null,\r\n this.surfaceZ,\r\n null,\r\n this.origin,\r\n this.rayDirection,\r\n this.viewMatrix,\r\n this.invProjMatrix,\r\n this.textureSize,\r\n normalTexture\r\n );\r\n this.$l.iterationAttenuation = pb.sub(1, pb.smoothStep(0, this.maxIterations, this.numIterations));\r\n //this.$l.iterationAttenuation = pb.smoothStep(this.maxIterations, 1, this.numIterations);\r\n this.confidence = pb.mul(this.confidence, this.iterationAttenuation);\r\n this.$l.hitPixel = pb.mul(this.hit2D.xy, this.textureSize.zw);\r\n this.$l.startPixel = pb.mul(this.origin.xy, this.textureSize.zw);\r\n this.$l.hitDistance = pb.length(pb.sub(this.hitPixel, this.startPixel));\r\n this.$return(pb.vec4(this.hit2D.xy, this.hitDistance, this.confidence));\r\n }\r\n );\r\n return scope.SSR_Linear2D(\r\n viewPos,\r\n traceRay,\r\n viewMatrix,\r\n projMatrix,\r\n invProjMatrix,\r\n stride,\r\n maxDistance,\r\n maxIterations,\r\n thickness,\r\n cameraNearFar,\r\n textureSize\r\n );\r\n}\r\n\r\nexport function screenSpaceRayTracing_HiZ(\r\n scope: PBInsideFunctionScope,\r\n viewPos: PBShaderExp,\r\n traceRay: PBShaderExp,\r\n viewMatrix: PBShaderExp,\r\n projMatrix: PBShaderExp,\r\n invProjMatrix: PBShaderExp,\r\n cameraNearFar: PBShaderExp,\r\n maxMipLevel: PBShaderExp | number,\r\n maxIterations: PBShaderExp | number,\r\n thickness: PBShaderExp | number,\r\n textureSize: PBShaderExp,\r\n HiZTexture: PBShaderExp,\r\n normalTexture?: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n pb.func('getMipResolution', [pb.int('mipLevel')], function () {\r\n this.$return(pb.vec2(pb.textureDimensions(HiZTexture, this.mipLevel)));\r\n });\r\n pb.func('SSR_loadDepth', [pb.vec2('uv'), pb.float('level')], function () {\r\n this.$return(pb.textureSampleLevel(HiZTexture, this.uv, this.level).r);\r\n });\r\n pb.func('invProjectPosition', [pb.vec3('p'), pb.mat4('mat')], function () {\r\n this.$l.c = pb.sub(pb.mul(this.p, 2), pb.vec3(1));\r\n this.$l.u = pb.mul(this.mat, pb.vec4(this.c, 1));\r\n this.u = pb.div(this.u, this.u.w);\r\n this.$return(this.u.xyz);\r\n });\r\n pb.func('projectPosition', [pb.vec3('p'), pb.mat4('mat')], function () {\r\n this.$l.projected = pb.mul(this.mat, pb.vec4(this.p, 1));\r\n this.projected = pb.div(this.projected, this.projected.w);\r\n this.projected = pb.add(pb.mul(this.projected, 0.5), pb.vec4(0.5));\r\n this.$return(this.projected.xyz);\r\n });\r\n pb.func(\r\n 'projectDirection',\r\n [pb.vec3('p'), pb.vec3('d'), pb.vec3('screenSpacePos'), pb.mat4('mat')],\r\n function () {\r\n this.$return(pb.sub(this.projectPosition(pb.add(this.p, this.d), this.mat), this.screenSpacePos));\r\n }\r\n );\r\n pb.func(\r\n 'SSR_initialAdvanceRay',\r\n [\r\n pb.vec3('origin'),\r\n pb.vec3('direction'),\r\n pb.vec3('invDirection'),\r\n pb.vec2('currentMipResolution'),\r\n pb.vec2('invCurrentMipResolution'),\r\n pb.vec2('floorOffset'),\r\n pb.vec2('uvOffset'),\r\n pb.vec3('position').out(),\r\n pb.float('currentT').out()\r\n ],\r\n function () {\r\n this.$l.currentMipPosition = pb.mul(this.currentMipResolution, this.origin.xy);\r\n this.$l.xyPlane = pb.add(pb.floor(this.currentMipPosition), this.floorOffset);\r\n this.xyPlane = pb.add(pb.mul(this.xyPlane, this.invCurrentMipResolution), this.uvOffset);\r\n this.$l.t = pb.mul(pb.sub(this.xyPlane, this.origin.xy), this.invDirection.xy);\r\n this.currentT = pb.min(this.t.x, this.t.y);\r\n this.position = pb.add(this.origin, pb.mul(this.direction, this.currentT));\r\n }\r\n );\r\n pb.func(\r\n 'SSR_advanceRay',\r\n [\r\n pb.vec3('origin'),\r\n pb.vec3('direction'),\r\n pb.vec3('invDirection'),\r\n pb.vec2('currentMipPosition'),\r\n pb.vec2('invCurrentMipResolution'),\r\n pb.vec2('floorOffset'),\r\n pb.vec2('uvOffset'),\r\n pb.float('surfaceZ'),\r\n pb.vec3('position').inout(),\r\n pb.float('currentT').inout()\r\n ],\r\n function () {\r\n this.$l.xyPlane = pb.add(pb.floor(this.currentMipPosition), this.floorOffset);\r\n this.xyPlane = pb.add(pb.mul(this.xyPlane, this.invCurrentMipResolution), this.uvOffset);\r\n this.$l.boundaryPlanes = pb.vec3(this.xyPlane, this.surfaceZ);\r\n this.$l.t = pb.mul(pb.sub(this.boundaryPlanes, this.origin), this.invDirection);\r\n this.t.z = this.$choice(pb.greaterThan(this.direction.z, 0), this.t.z, MAX_FLOAT_VALUE);\r\n this.$l.tMin = pb.min(pb.min(this.t.x, this.t.y), this.t.z);\r\n this.$l.aboveSurface = pb.greaterThan(this.surfaceZ, this.position.z);\r\n this.$l.skippedTile = pb.and(\r\n pb.notEqual(pb.floatBitsToUint(this.tMin), pb.floatBitsToUint(this.t.z)),\r\n this.aboveSurface\r\n );\r\n this.currentT = this.$choice(this.aboveSurface, this.tMin, this.currentT);\r\n this.position = pb.add(this.origin, pb.mul(this.direction, this.currentT));\r\n this.$return(this.skippedTile);\r\n }\r\n );\r\n pb.func(\r\n 'SSR_RaymarchHiZ',\r\n [\r\n pb.vec3('screenSpacePos'),\r\n pb.vec3('screenSpaceDirection'),\r\n pb.vec2('cameraNearFar'),\r\n pb.vec2('screenSize'),\r\n pb.int('mostDetailMip'),\r\n pb.int('maxMipLevel'),\r\n pb.float('maxIterations'),\r\n pb.float('numIterations').out()\r\n ],\r\n function () {\r\n this.$l.invDirection = this.$choice(\r\n pb.all(pb.compNotEqual(this.screenSpaceDirection, pb.vec3(0))),\r\n pb.div(pb.vec3(1), this.screenSpaceDirection),\r\n pb.vec3(MAX_FLOAT_VALUE)\r\n );\r\n this.$l.currentMip = this.mostDetailMip;\r\n this.$l.currentMipResolution = this.getMipResolution(this.currentMip);\r\n this.$l.invCurrentMipResolution = pb.div(pb.vec2(1), this.currentMipResolution);\r\n this.$l.uvOffset = pb.div(pb.mul(0.005, pb.exp2(pb.float(this.mostDetailMip))), this.screenSize);\r\n this.uvOffset = pb.vec2(\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.x, 0), pb.neg(this.uvOffset.x), this.uvOffset.x),\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.y, 0), pb.neg(this.uvOffset.y), this.uvOffset.y)\r\n );\r\n this.$l.floorOffset = pb.vec2(\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.x, 0), pb.float(0), pb.float(1)),\r\n this.$choice(pb.lessThan(this.screenSpaceDirection.y, 0), pb.float(0), pb.float(1))\r\n );\r\n this.$l.currentT = pb.float();\r\n this.$l.position = pb.vec3();\r\n this.SSR_initialAdvanceRay(\r\n this.screenSpacePos,\r\n this.screenSpaceDirection,\r\n this.invDirection,\r\n this.currentMipResolution,\r\n this.invCurrentMipResolution,\r\n this.floorOffset,\r\n this.uvOffset,\r\n this.position,\r\n this.currentT\r\n );\r\n this.numIterations = pb.float(0);\r\n this.$while(\r\n pb.and(\r\n pb.lessThan(this.numIterations, this.maxIterations),\r\n pb.greaterThanEqual(this.currentMip, this.mostDetailMip)\r\n ),\r\n function () {\r\n this.$l.currentMipPosition = pb.mul(this.currentMipResolution, this.position.xy);\r\n this.$l.surfaceZ = pb.textureLoad(HiZTexture, pb.ivec2(this.currentMipPosition), this.currentMip).r;\r\n this.$l.skippedTile = this.SSR_advanceRay(\r\n this.screenSpacePos,\r\n this.screenSpaceDirection,\r\n this.invDirection,\r\n this.currentMipPosition,\r\n this.invCurrentMipResolution,\r\n this.floorOffset,\r\n this.uvOffset,\r\n this.surfaceZ,\r\n this.position,\r\n this.currentT\r\n );\r\n this.$l.nextMipIsOutOfRange = pb.and(\r\n this.skippedTile,\r\n pb.greaterThanEqual(this.currentMip, this.maxMipLevel)\r\n );\r\n this.$if(pb.not(this.nextMipIsOutOfRange), function () {\r\n this.currentMip = pb.add(this.currentMip, this.$choice(this.skippedTile, pb.int(1), pb.int(-1)));\r\n this.currentMipResolution = pb.mul(\r\n this.currentMipResolution,\r\n this.$choice(this.skippedTile, 0.5, 2)\r\n );\r\n this.invCurrentMipResolution = pb.mul(\r\n this.invCurrentMipResolution,\r\n this.$choice(this.skippedTile, 2, 0.5)\r\n );\r\n });\r\n this.numIterations = pb.add(this.numIterations, 1);\r\n }\r\n );\r\n this.$l.validHit = this.$choice(\r\n pb.lessThanEqual(this.numIterations, this.maxIterations),\r\n pb.float(1),\r\n pb.float(0)\r\n );\r\n this.$return(pb.vec4(this.position, this.validHit));\r\n }\r\n );\r\n pb.func(\r\n 'SSR_HiZ',\r\n [\r\n pb.vec3('viewPos'),\r\n pb.vec3('traceRay'),\r\n pb.mat4('viewMatrix'),\r\n pb.mat4('projMatrix'),\r\n pb.mat4('invProjMatrix'),\r\n pb.vec2('cameraNearFar'),\r\n pb.float('thickness'),\r\n pb.vec4('textureSize'),\r\n pb.int('maxMipLevel'),\r\n pb.float('maxIterations')\r\n ],\r\n function () {\r\n this.$if(pb.greaterThan(this.traceRay.z, 0), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.originH = pb.mul(this.projMatrix, pb.vec4(this.viewPos, 1));\r\n this.$l.originCS = pb.div(this.originH.xyz, this.originH.w);\r\n this.$l.originTS = pb.add(pb.mul(this.originCS, 0.5), pb.vec3(0.5));\r\n this.$l.directionTS = this.projectDirection(\r\n this.viewPos,\r\n this.traceRay,\r\n this.originTS,\r\n this.projMatrix\r\n );\r\n this.$l.mostDetailMip = pb.int(0);\r\n this.$l.numIterations = pb.float();\r\n this.$l.hit = this.SSR_RaymarchHiZ(\r\n this.originTS,\r\n this.directionTS,\r\n this.cameraNearFar,\r\n this.textureSize.zw,\r\n this.mostDetailMip,\r\n this.maxMipLevel,\r\n this.maxIterations,\r\n this.numIterations\r\n );\r\n this.$l.confidence = pb.float(0);\r\n this.$if(pb.notEqual(this.hit.w, 0), function () {\r\n this.$l.surfaceZ = pb.textureSampleLevel(HiZTexture, this.hit.xy, 0).r;\r\n this.$if(pb.equal(this.surfaceZ, 1), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.hit3D = invProjectPosition(this, this.hit.xyz, this.invProjMatrix);\r\n this.confidence = validateHit(\r\n this,\r\n this.hit.xy,\r\n this.hit3D,\r\n this.surfaceZ,\r\n this.thickness,\r\n this.originTS.xy,\r\n this.traceRay,\r\n this.viewMatrix,\r\n this.invProjMatrix,\r\n this.textureSize,\r\n normalTexture\r\n );\r\n });\r\n this.$l.iterationAttenuation = pb.sub(1, pb.smoothStep(0, this.maxIterations, this.numIterations));\r\n this.$l.viewAttenuation = pb.sub(1, pb.smoothStep(-0.5, 0, this.traceRay.z));\r\n //this.$l.iterationAttenuation = pb.smoothStep(this.maxIterations, 1, this.numIterations);\r\n this.confidence = pb.mul(this.confidence, this.iterationAttenuation, this.viewAttenuation);\r\n this.$l.hitPixel = pb.mul(this.hit.xy, this.textureSize.zw);\r\n this.$l.startPixel = pb.mul(this.originTS.xy, this.textureSize.zw);\r\n this.$l.hitDistance = pb.length(pb.sub(this.hitPixel, this.startPixel));\r\n this.$return(pb.vec4(this.hit.xy, this.hitDistance, this.confidence));\r\n }\r\n );\r\n return scope.SSR_HiZ(\r\n viewPos,\r\n traceRay,\r\n viewMatrix,\r\n projMatrix,\r\n invProjMatrix,\r\n cameraNearFar,\r\n thickness,\r\n textureSize,\r\n pb.sub(maxMipLevel, 1),\r\n maxIterations\r\n );\r\n}\r\n\r\n/*\r\nfloat2 cell(float2 ray, float2 cell_count, uint camera) {\r\n\treturn floor(ray.xy * cell_count);\r\n}\r\n\r\nfloat2 cell_count(float level) {\r\n\treturn input_texture2_size / (level == 0.0 ? 1.0 : exp2(level));\r\n}\r\n\r\nfloat3 intersect_cell_boundary(float3 pos, float3 dir, float2 cell_id, float2 cell_count, float2 cross_step, float2 cross_offset, uint camera) {\r\n\tfloat2 cell_size = 1.0 / cell_count;\r\n\tfloat2 planes = cell_id/cell_count + cell_size * cross_step;\r\n\r\n\tfloat2 solutions = (planes - pos)/dir.xy;\r\n\tfloat3 intersection_pos = pos + dir * min(solutions.x, solutions.y);\r\n\r\n\tintersection_pos.xy += (solutions.x < solutions.y) ? float2(cross_offset.x, 0.0) : float2(0.0, cross_offset.y);\r\n\r\n\treturn intersection_pos;\r\n}\r\n\r\nbool crossed_cell_boundary(float2 cell_id_one, float2 cell_id_two) {\r\n\treturn (int)cell_id_one.x != (int)cell_id_two.x || (int)cell_id_one.y != (int)cell_id_two.y;\r\n}\r\n\r\nfloat minimum_depth_plane(float2 ray, float level, float2 cell_count, uint camera) {\r\n\treturn input_texture2.Load(int3(vr_stereo_to_mono(ray.xy, camera) * cell_count, level)).r;\r\n}\r\n\r\nfloat3 hi_z_trace(float3 p, float3 v, in uint camera, out uint iterations) {\r\n\tfloat level = HIZ_START_LEVEL;\r\n\tfloat3 v_z = v/v.z;\r\n\tfloat2 hi_z_size = cell_count(level);\r\n\tfloat3 ray = p;\r\n\r\n\tfloat2 cross_step = float2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0);\r\n\tfloat2 cross_offset = cross_step * 0.00001;\r\n\tcross_step = saturate(cross_step);\r\n\r\n\tfloat2 ray_cell = cell(ray.xy, hi_z_size.xy, camera);\r\n\tray = intersect_cell_boundary(ray, v, ray_cell, hi_z_size, cross_step, cross_offset, camera);\r\n\r\n\titerations = 0;\r\n\twhile(level >= HIZ_STOP_LEVEL && iterations < MAX_ITERATIONS) {\r\n\t\t// get the cell number of the current ray\r\n\t\tfloat2 current_cell_count = cell_count(level);\r\n\t\tfloat2 old_cell_id = cell(ray.xy, current_cell_count, camera);\r\n\r\n\t\t// get the minimum depth plane in which the current ray resides\r\n\t\tfloat min_z = minimum_depth_plane(ray.xy, level, current_cell_count, camera);\r\n\r\n\t\t// intersect only if ray depth is below the minimum depth plane\r\n\t\tfloat3 tmp_ray = ray;\r\n\t\tif(v.z > 0) {\r\n\t\t\tfloat min_minus_ray = min_z - ray.z;\r\n\t\t\ttmp_ray = min_minus_ray > 0 ? ray + v_z*min_minus_ray : tmp_ray;\r\n\t\t\tfloat2 new_cell_id = cell(tmp_ray.xy, current_cell_count, camera);\r\n\t\t\tif(crossed_cell_boundary(old_cell_id, new_cell_id)) {\r\n\t\t\t\ttmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\r\n\t\t\t\tlevel = min(HIZ_MAX_LEVEL, level + 2.0f);\r\n\t\t\t}else{\r\n\t\t\t\tif(level == 1 && abs(min_minus_ray) > 0.0001) {\r\n\t\t\t\t\ttmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\r\n\t\t\t\t\tlevel = 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if(ray.z < min_z) {\r\n\t\t\ttmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\r\n\t\t\tlevel = min(HIZ_MAX_LEVEL, level + 2.0f);\r\n\t\t}\r\n\r\n\t\tray.xyz = tmp_ray.xyz;\r\n\t\t--level;\r\n\r\n\t\t++iterations;\r\n\t}\r\n\treturn ray;\r\n}\r\n*/\r\n"],"names":["MAX_FLOAT_VALUE","SSR_calcJitter","scope","viewPos","roughness","pb","$builder","func","vec3","float","$l","h","fract","mul","add","dot","yxz","xxy","yxx","zyx","sub","$return","mix","invProjectPosition","pos","mat","mat4","c","p","u","vec4","div","w","xyz","validateHit","hit2D","hit3D","surfaceZ","thickness","uv","traceRay","viewMatrix","invProjMatrix","textureSize","normalTexture","funcName","vec2","$if","or","any","lessThan","hit2d","greaterThan","manhattanDist","abs","all","xy","hitNormalWS","textureSampleLevel","rgb","hitNormalVS","viewSpaceRayDirection","viewSpaceSurface","fov","y","x","border","smoothStep","vignette","hit3d","distance","confidence","screenSpaceRayTracing_Linear2D","projMatrix","cameraNearFar","maxDistance","maxIterations","stride","linearDepthTex","useBackfaceDepth","a","b","sceneZ","ShaderHelper","sampleLinearDepthWithBackface","sceneZMax01","max","cameraFar","sampleLinearDepth","sceneZMax","neg","and","greaterThanEqual","zA","lessThanEqual","zB","out","rayLen","$choice","rayOrigin","z","rayDirection","rayEnd","zMin","min","zMax","rayOriginH","rayEndH","k0","k1","Q0","Q1","rayOriginNDC","rayEndNDC","origin","P0","zw","P1","xMin","xMax","yMin","yMax","t","t2","distanceSquared","delta","permute","yx","stepDir","sign","invdx","dQ","dK","dP","pixelStride","jitter","prevZMaxEstimate","pqk","dpqk","invRenderTargetSize","intersected","hitUV","hitZ","numIterations","skippedIterations","$for","getDevice","type","i","$break","clamp","rayIntersectDepth","traceRayLinear2D","not","surfaceZ01","equal","linearDepthToNonLinear","iterationAttenuation","hitPixel","startPixel","hitDistance","length","SSR_Linear2D","screenSpaceRayTracing_HiZ","maxMipLevel","HiZTexture","int","textureDimensions","mipLevel","level","r","projected","projectPosition","d","screenSpacePos","currentMipPosition","currentMipResolution","xyPlane","floor","floorOffset","invCurrentMipResolution","uvOffset","invDirection","currentT","position","direction","inout","boundaryPlanes","tMin","aboveSurface","skippedTile","notEqual","floatBitsToUint","compNotEqual","screenSpaceDirection","currentMip","mostDetailMip","getMipResolution","exp2","screenSize","SSR_initialAdvanceRay","$while","textureLoad","ivec2","SSR_advanceRay","nextMipIsOutOfRange","validHit","originH","originCS","originTS","directionTS","projectDirection","hit","SSR_RaymarchHiZ","viewAttenuation","SSR_HiZ"],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ /** @internal */ const TAA_DEBUG_NONE = 0;
2
+ /** @internal */ const TAA_DEBUG_CURRENT_COLOR = 1;
3
+ /** @internal */ const TAA_DEBUG_HISTORY_COLOR = 2;
4
+ /** @internal */ const TAA_DEBUG_VELOCITY = 3;
5
+ /** @internal */ const TAA_DEBUG_EDGE = 4;
6
+ /** @internal */ const TAA_DEBUG_ALAPH = 5;
7
+ /** @internal */ const TAA_DEBUG_MOTION_VECTOR = 6;
8
+ /** @internal */ const TAA_DEBUG_STRENGTH = 7;
9
+ const FLT_MIN = 0.00000001;
10
+ const FLT_MAX = 32767;
11
+ /**
12
+ * Temporal resolve implementation
13
+ *
14
+ * @param scope - The shader scope
15
+ * @param currentColorTex - 2D texture that holds the current color
16
+ * @param historyColorTex - 2D texture that holds the history color
17
+ * @param currentDepthTex - 2D texture that holds the scene depth
18
+ * @param motionVectorTex - 2D texture that holds the motion vector
19
+ * @param prevMotionVectorTex - 2D texture that holds the previous motion vector
20
+ * @param uv - Fragment uv coordinate
21
+ * @param workSize - Target texture size
22
+ * @param debug - Value for debugging
23
+ * @returns
24
+ *
25
+ * @public
26
+ */ function temporalResolve(scope, currentColorTex, historyColorTex, currentDepthTex, motionVectorTex, prevMotionVectorTex, uv, workSize, debug = TAA_DEBUG_NONE) {
27
+ const pb = scope.$builder;
28
+ pb.func('getClosestVelocity', [
29
+ pb.vec2('uv'),
30
+ pb.vec2('texSize')
31
+ ], function() {
32
+ this.$l.minDepth = pb.float(1);
33
+ this.$l.closestUV = this.uv;
34
+ this.$l.tmpDepth = pb.float();
35
+ this.$l.tmpUV = pb.vec2();
36
+ for(let i = -1; i <= 1; i++){
37
+ for(let j = -1; j <= 1; j++){
38
+ this.tmpUV = pb.add(this.uv, pb.div(pb.vec2(i, j), this.texSize));
39
+ this.tmpDepth = pb.textureSampleLevel(currentDepthTex, this.tmpUV, 0).r;
40
+ this.$if(pb.lessThan(this.tmpDepth, this.minDepth), function() {
41
+ this.minDepth = this.tmpDepth;
42
+ this.closestUV = this.tmpUV;
43
+ });
44
+ }
45
+ }
46
+ this.$l.motionVector = pb.textureSampleLevel(motionVectorTex, this.closestUV, 0);
47
+ this.$return(this.motionVector.xyz);
48
+ });
49
+ pb.func('clipAABB', [
50
+ pb.vec3('aabbMin'),
51
+ pb.vec3('aabbMax'),
52
+ pb.vec3('p'),
53
+ pb.vec3('q')
54
+ ], function() {
55
+ this.$l.r = pb.sub(this.q, this.p);
56
+ this.$l.rMax = pb.sub(this.aabbMax, this.p);
57
+ this.$l.rMin = pb.sub(this.aabbMin, this.p);
58
+ this.$if(pb.greaterThan(this.r.x, pb.add(this.rMax.x, FLT_MIN)), function() {
59
+ this.r = pb.mul(this.r, pb.div(this.rMax.x, this.r.x));
60
+ });
61
+ this.$if(pb.greaterThan(this.r.y, pb.add(this.rMax.y, FLT_MIN)), function() {
62
+ this.r = pb.mul(this.r, pb.div(this.rMax.y, this.r.y));
63
+ });
64
+ this.$if(pb.greaterThan(this.r.z, pb.add(this.rMax.z, FLT_MIN)), function() {
65
+ this.r = pb.mul(this.r, pb.div(this.rMax.z, this.r.z));
66
+ });
67
+ this.$if(pb.lessThan(this.r.x, pb.sub(this.rMin.x, FLT_MIN)), function() {
68
+ this.r = pb.mul(this.r, pb.div(this.rMin.x, this.r.x));
69
+ });
70
+ this.$if(pb.lessThan(this.r.y, pb.sub(this.rMin.y, FLT_MIN)), function() {
71
+ this.r = pb.mul(this.r, pb.div(this.rMin.y, this.r.y));
72
+ });
73
+ this.$if(pb.lessThan(this.r.z, pb.sub(this.rMin.z, FLT_MIN)), function() {
74
+ this.r = pb.mul(this.r, pb.div(this.rMin.z, this.r.z));
75
+ });
76
+ this.$return(pb.add(this.p, this.r));
77
+ });
78
+ pb.func('clipHistoryColor', [
79
+ pb.vec2('uv'),
80
+ pb.vec3('historyColor'),
81
+ pb.vec2('closestVelocity'),
82
+ pb.vec2('texSize')
83
+ ], function() {
84
+ let n = 1;
85
+ this.$l.colorAvg = pb.vec3(0);
86
+ this.$l.colorAvg2 = pb.vec3(0);
87
+ for(let i = -1; i <= 1; i++){
88
+ for(let j = -1; j <= 1; j++){
89
+ this.$l[`s${n}`] = pb.textureSampleLevel(currentColorTex, pb.add(this.uv, pb.div(pb.vec2(i, j), this.texSize)), 0).rgb;
90
+ this.colorAvg = pb.add(this.colorAvg, this[`s${n}`]);
91
+ this.colorAvg2 = pb.add(this.colorAvg2, pb.mul(this[`s${n}`], this[`s${n}`]));
92
+ n++;
93
+ }
94
+ }
95
+ this.colorAvg = pb.div(this.colorAvg, n - 1);
96
+ this.colorAvg2 = pb.div(this.colorAvg2, n - 1);
97
+ this.$l.boxSize = pb.mix(2.5, 0, pb.smoothStep(0, 0.02, pb.length(this.closestVelocity)));
98
+ this.$l.dev = pb.mul(pb.sqrt(pb.abs(pb.sub(this.colorAvg2, pb.mul(this.colorAvg, this.colorAvg)))), this.boxSize);
99
+ this.$l.colorMin = pb.sub(this.colorAvg, this.dev);
100
+ this.$l.colorMax = pb.add(this.colorAvg, this.dev);
101
+ this.$l.color = this.clipAABB(this.colorMin, this.colorMax, pb.clamp(this.colorAvg, this.colorMin, this.colorMax), this.historyColor);
102
+ this.color = pb.clamp(this.color, pb.vec3(FLT_MIN), pb.vec3(FLT_MAX));
103
+ this.$return(this.color);
104
+ });
105
+ pb.func('reinhard', [
106
+ pb.vec3('hdr')
107
+ ], function() {
108
+ this.$return(pb.div(this.hdr, pb.add(this.hdr, pb.vec3(1))));
109
+ });
110
+ pb.func('reinhardInv', [
111
+ pb.vec3('sdr')
112
+ ], function() {
113
+ this.$return(pb.div(this.sdr, pb.sub(pb.vec3(1), this.sdr)));
114
+ });
115
+ pb.func('luminance', [
116
+ pb.vec3('color')
117
+ ], function() {
118
+ this.$return(pb.max(pb.dot(this.color, pb.vec3(0.299, 0.587, 0.114)), 0.0001));
119
+ });
120
+ pb.func('getDisocclusionFactor', [
121
+ pb.vec2('uv'),
122
+ pb.vec2('velocity'),
123
+ pb.vec2('texSize')
124
+ ], function() {
125
+ this.$l.prevVelocitySample = pb.textureSampleLevel(prevMotionVectorTex, this.uv, 0);
126
+ this.$l.prevVelocity = this.prevVelocitySample.xy;
127
+ this.$l.disocclusion = pb.sub(pb.length(pb.mul(pb.sub(this.velocity, this.prevVelocity), this.texSize)), 2.5);
128
+ this.$return(pb.clamp(pb.mul(this.disocclusion, 0.01), 0, 1));
129
+ });
130
+ pb.func('sampleHistoryColorCatmulRom9', [
131
+ pb.vec2('uv'),
132
+ pb.vec2('texSize')
133
+ ], function() {
134
+ this.$l.samplePos = pb.mul(this.uv, this.texSize);
135
+ this.$l.texPos1 = pb.add(pb.floor(pb.sub(this.samplePos, pb.vec2(0.5))), pb.vec2(0.5));
136
+ this.$l.f = pb.sub(this.samplePos, this.texPos1);
137
+ this.$l.w0 = pb.mul(this.f, pb.sub(pb.mul(this.f, pb.sub(pb.vec2(1), pb.mul(this.f, 0.5))), pb.vec2(0.5)));
138
+ this.$l.w1 = pb.add(pb.vec2(1), pb.mul(this.f, this.f, pb.sub(pb.mul(this.f, 1.5), pb.vec2(2.5))));
139
+ this.$l.w2 = pb.mul(this.f, pb.add(pb.vec2(0.5), pb.mul(this.f, pb.sub(pb.vec2(2), pb.mul(this.f, 1.5)))));
140
+ this.$l.w3 = pb.mul(this.f, this.f, pb.sub(pb.mul(this.f, 0.5), pb.vec2(0.5)));
141
+ this.$l.w12 = pb.add(this.w1, this.w2);
142
+ this.$l.offset12 = pb.div(this.w2, pb.add(this.w1, this.w2));
143
+ this.$l.texPos0 = pb.sub(this.texPos1, pb.vec2(1));
144
+ this.$l.texPos3 = pb.add(this.texPos1, pb.vec2(2));
145
+ this.$l.texPos12 = pb.add(this.texPos1, this.offset12);
146
+ this.texPos0 = pb.div(this.texPos0, this.texSize);
147
+ this.texPos3 = pb.div(this.texPos3, this.texSize);
148
+ this.texPos12 = pb.div(this.texPos12, this.texSize);
149
+ this.$l.result = pb.vec3(0);
150
+ this.result = pb.add(this.result, pb.mul(pb.textureSampleLevel(historyColorTex, this.texPos0, 0).rgb, this.w0.x, this.w0.y));
151
+ this.result = pb.add(this.result, pb.mul(pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos12.x, this.texPos0.y), 0).rgb, this.w12.x, this.w0.y));
152
+ this.result = pb.add(this.result, pb.mul(pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos3.x, this.texPos0.y), 0).rgb, this.w3.x, this.w0.y));
153
+ this.result = pb.add(this.result, pb.mul(pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos0.x, this.texPos12.y), 0).rgb, this.w0.x, this.w12.y));
154
+ this.result = pb.add(this.result, pb.mul(pb.textureSampleLevel(historyColorTex, this.texPos12, 0).rgb, this.w12.x, this.w12.y));
155
+ this.result = pb.add(this.result, pb.mul(pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos3.x, this.texPos12.y), 0).rgb, this.w3.x, this.w12.y));
156
+ this.result = pb.add(this.result, pb.mul(pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos0.x, this.texPos3.y), 0).rgb, this.w0.x, this.w3.y));
157
+ this.result = pb.add(this.result, pb.mul(pb.textureSampleLevel(historyColorTex, pb.vec2(this.texPos12.x, this.texPos3.y), 0).rgb, this.w12.x, this.w3.y));
158
+ this.result = pb.add(this.result, pb.mul(pb.textureSampleLevel(historyColorTex, this.texPos3, 0).rgb, this.w3.x, this.w3.y));
159
+ this.$return(pb.max(this.result, pb.vec3(0)));
160
+ });
161
+ pb.func('temporalResolve', [
162
+ pb.vec2('screenUV'),
163
+ pb.vec2('texSize')
164
+ ], function() {
165
+ this.$l.velocitySample = pb.textureSampleLevel(motionVectorTex, this.screenUV, 0);
166
+ this.$l.velocity = this.velocitySample.xy;
167
+ this.$l.sampleColor = pb.textureSampleLevel(currentColorTex, this.screenUV, 0).rgb;
168
+ this.$if(pb.and(pb.greaterThanEqual(this.velocity.x, 5e4), pb.greaterThanEqual(this.velocity.y, 5e4)), function() {
169
+ this.$return(this.sampleColor);
170
+ });
171
+ this.$l.reprojectedUV = pb.sub(this.screenUV, this.velocity);
172
+ //this.$l.historyColor = pb.textureSampleLevel(historyColorTex, this.reprojectedUV, 0).rgb;
173
+ this.$l.historyColor = this.sampleHistoryColorCatmulRom9(this.reprojectedUV, this.texSize);
174
+ this.$l.velocityClosest = this.getClosestVelocity(this.screenUV, this.texSize);
175
+ this.$l.blendFactor = pb.div(this.velocityClosest.z, 50000);
176
+ this.prevColor = this.clipHistoryColor(this.screenUV, this.historyColor, this.velocityClosest.xy, this.texSize);
177
+ this.$l.screenFactor = this.$choice(pb.or(pb.any(pb.lessThan(this.reprojectedUV, pb.vec2(0))), pb.any(pb.greaterThan(this.reprojectedUV, pb.vec2(1)))), pb.float(1), pb.float(0));
178
+ this.$l.disocclusionFactor = this.getDisocclusionFactor(this.reprojectedUV, this.velocity, this.texSize);
179
+ this.$l.alpha = pb.clamp(pb.add(this.blendFactor, this.screenFactor, this.disocclusionFactor), 0, 1);
180
+ //this.alpha = 0.1;
181
+ this.prevColor = this.reinhard(this.prevColor);
182
+ this.currentColor = this.reinhard(this.sampleColor);
183
+ this.$l.currentLum = this.luminance(this.currentColor);
184
+ this.$l.prevLum = this.luminance(this.prevColor);
185
+ this.$l.diff = pb.div(pb.abs(pb.sub(this.currentLum, this.prevLum)), pb.max(this.currentLum, pb.max(this.prevLum, 1.001)));
186
+ this.diff = pb.sub(1, this.diff);
187
+ this.diff = pb.mul(this.diff, this.diff);
188
+ this.alpha = pb.clamp(pb.mix(0, this.alpha, this.diff), 0.1, 1);
189
+ this.$l.resolvedColor = pb.vec3();
190
+ if (debug === TAA_DEBUG_CURRENT_COLOR) {
191
+ this.resolvedColor = this.currentColor.rgb;
192
+ this.resolvedColor = this.reinhardInv(this.resolvedColor);
193
+ } else if (debug === TAA_DEBUG_HISTORY_COLOR) {
194
+ this.resolvedColor = this.prevColor.rgb;
195
+ this.resolvedColor = this.reinhardInv(this.resolvedColor);
196
+ } else if (debug === TAA_DEBUG_EDGE) {
197
+ this.resolvedColor = pb.vec3(this.screenFactor);
198
+ } else if (debug === TAA_DEBUG_ALAPH) {
199
+ this.resolvedColor = pb.vec3(this.alpha);
200
+ } else if (debug === TAA_DEBUG_VELOCITY) {
201
+ this.resolvedColor = pb.abs(pb.sub(this.sampleColor, this.historyColor));
202
+ } else if (debug === TAA_DEBUG_MOTION_VECTOR) {
203
+ this.resolvedColor = pb.abs(pb.mul(this.velocityClosest, 20));
204
+ } else if (debug === TAA_DEBUG_STRENGTH) {
205
+ this.resolvedColor = pb.vec3(this.blendFactor);
206
+ } else {
207
+ this.resolvedColor = pb.mix(this.prevColor.rgb, this.currentColor.rgb, this.alpha);
208
+ this.resolvedColor = this.reinhardInv(this.resolvedColor);
209
+ }
210
+ this.$return(this.resolvedColor);
211
+ });
212
+ return scope.temporalResolve(uv, workSize);
213
+ }
214
+
215
+ export { TAA_DEBUG_ALAPH, TAA_DEBUG_CURRENT_COLOR, TAA_DEBUG_EDGE, TAA_DEBUG_HISTORY_COLOR, TAA_DEBUG_MOTION_VECTOR, TAA_DEBUG_NONE, TAA_DEBUG_STRENGTH, TAA_DEBUG_VELOCITY, temporalResolve };
216
+ //# sourceMappingURL=temporal.js.map