@zephyr3d/scene 0.9.1 → 0.9.3

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 (522) hide show
  1. package/dist/animation/animationset.js +2 -0
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/cloth/gpu_cloth_system.js +9 -1
  4. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  5. package/dist/animation/fixed_geometry_cache_track.js +5 -1
  6. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  7. package/dist/animation/geometry_cache_utils.js +20 -4
  8. package/dist/animation/geometry_cache_utils.js.map +1 -1
  9. package/dist/animation/ik/ik_angle_constraint.js +2 -6
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
  11. package/dist/animation/ik/ik_chain_builder.js +68 -0
  12. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  13. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  14. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  15. package/dist/animation/ik/two_bone_ik_solver.js +2 -6
  16. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
  17. package/dist/animation/joint_dynamics/collision.js +60 -12
  18. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  19. package/dist/animation/joint_dynamics/constraints.js +20 -4
  20. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  21. package/dist/animation/joint_dynamics/controller.js +94 -46
  22. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  23. package/dist/animation/joint_dynamics/math.js +16 -0
  24. package/dist/animation/joint_dynamics/math.js.map +1 -0
  25. package/dist/animation/joint_dynamics/solver.js +21 -11
  26. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  27. package/dist/animation/joint_dynamics/types.js +15 -3
  28. package/dist/animation/joint_dynamics/types.js.map +1 -1
  29. package/dist/animation/pca_geometry_cache_track.js +5 -1
  30. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  31. package/dist/animation/skeleton.js +2 -2
  32. package/dist/animation/skeleton.js.map +1 -1
  33. package/dist/animation/skeleton_modifier.js +2 -6
  34. package/dist/animation/skeleton_modifier.js.map +1 -1
  35. package/dist/animation/spring/spring_particle.js +4 -4
  36. package/dist/animation/spring/spring_particle.js.map +1 -1
  37. package/dist/animation/spring/spring_system.js +13 -40
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring2/constraints.js.map +1 -1
  40. package/dist/animation/spring2/controller.js +64 -64
  41. package/dist/animation/spring2/controller.js.map +1 -1
  42. package/dist/animation/spring2/math.js.map +1 -1
  43. package/dist/animation/spring2/spring_system.js +8 -8
  44. package/dist/animation/spring2/spring_system.js.map +1 -1
  45. package/dist/app/app.js.map +1 -1
  46. package/dist/app/engine.js +1 -1
  47. package/dist/app/engine.js.map +1 -1
  48. package/dist/app/screen.js +4 -4
  49. package/dist/app/screen.js.map +1 -1
  50. package/dist/app/scriptingsystem.js +24 -1
  51. package/dist/app/scriptingsystem.js.map +1 -1
  52. package/dist/app/scriptregistry.js +22 -1
  53. package/dist/app/scriptregistry.js.map +1 -1
  54. package/dist/asset/assetmanager.js +2 -2
  55. package/dist/asset/assetmanager.js.map +1 -1
  56. package/dist/asset/model.js +60 -60
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/camera/camera.js +1 -1
  59. package/dist/camera/camera.js.map +1 -1
  60. package/dist/camera/orbit.js.map +1 -1
  61. package/dist/index.d.ts +795 -266
  62. package/dist/index.js +3 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/material/material.js +3 -1
  65. package/dist/material/material.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  67. package/dist/material/shader/helper.js +281 -278
  68. package/dist/material/shader/helper.js.map +1 -1
  69. package/dist/material/sprite.js +6 -6
  70. package/dist/material/sprite.js.map +1 -1
  71. package/dist/material/terrain-cm.js +2 -2
  72. package/dist/material/terrain-cm.js.map +1 -1
  73. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  74. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  75. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  76. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  77. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  78. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  79. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  80. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  81. package/dist/posteffect/taa.js +31 -39
  82. package/dist/posteffect/taa.js.map +1 -1
  83. package/dist/render/cluster_light.js +3 -4
  84. package/dist/render/cluster_light.js.map +1 -1
  85. package/dist/render/drawable.js +5 -1
  86. package/dist/render/drawable.js.map +1 -1
  87. package/dist/render/rendergraph/device_pool_allocator.js +29 -3
  88. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  89. package/dist/render/rendergraph/executor.js +283 -33
  90. package/dist/render/rendergraph/executor.js.map +1 -1
  91. package/dist/render/rendergraph/forward_plus_builder.js +338 -108
  92. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  93. package/dist/render/rendergraph/history_resource_manager.js +195 -115
  94. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  95. package/dist/render/rendergraph/history_resources.js +10 -0
  96. package/dist/render/rendergraph/history_resources.js.map +1 -0
  97. package/dist/render/rendergraph/rendergraph.js +162 -35
  98. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  99. package/dist/render/rendergraph/types.js +25 -5
  100. package/dist/render/rendergraph/types.js.map +1 -1
  101. package/dist/render/rendertarget.js +5 -1
  102. package/dist/render/rendertarget.js.map +1 -1
  103. package/dist/render/screenrendertarget.js +5 -1
  104. package/dist/render/screenrendertarget.js.map +1 -1
  105. package/dist/render/sky.js +4 -4
  106. package/dist/render/sky.js.map +1 -1
  107. package/dist/scene/basesprite.js +2 -2
  108. package/dist/scene/basesprite.js.map +1 -1
  109. package/dist/scene/graph_node.js +1 -1
  110. package/dist/scene/graph_node.js.map +1 -1
  111. package/dist/scene/mesh.js +81 -97
  112. package/dist/scene/mesh.js.map +1 -1
  113. package/dist/scene/particlesys.js +1 -1
  114. package/dist/scene/particlesys.js.map +1 -1
  115. package/dist/scene/scene_node.js +228 -228
  116. package/dist/scene/scene_node.js.map +1 -1
  117. package/dist/scene/script_attachment.js +15 -3
  118. package/dist/scene/script_attachment.js.map +1 -1
  119. package/dist/scene/terrain-cm/terrain-cm.js +3 -3
  120. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  121. package/dist/shadow/shadowmapper.js.map +1 -1
  122. package/dist/shapes/box.js +1 -1
  123. package/dist/shapes/box.js.map +1 -1
  124. package/dist/shapes/capsule.js +0 -3
  125. package/dist/shapes/capsule.js.map +1 -1
  126. package/dist/shapes/cylinder.js +0 -3
  127. package/dist/shapes/cylinder.js.map +1 -1
  128. package/dist/shapes/plane.js +0 -3
  129. package/dist/shapes/plane.js.map +1 -1
  130. package/dist/shapes/tetrahedron.js +3 -9
  131. package/dist/shapes/tetrahedron.js.map +1 -1
  132. package/dist/shapes/torus.js +94 -66
  133. package/dist/shapes/torus.js.map +1 -1
  134. package/dist/src/animation/animation.js +127 -0
  135. package/dist/src/animation/animation.js.map +1 -0
  136. package/dist/src/animation/animationset.js +255 -0
  137. package/dist/src/animation/animationset.js.map +1 -0
  138. package/dist/src/animation/animationtrack.js +34 -0
  139. package/dist/src/animation/animationtrack.js.map +1 -0
  140. package/dist/src/animation/eulerrotationtrack.js +52 -0
  141. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  142. package/dist/src/animation/morphtarget.js +93 -0
  143. package/dist/src/animation/morphtarget.js.map +1 -0
  144. package/dist/src/animation/morphtrack.js +70 -0
  145. package/dist/src/animation/morphtrack.js.map +1 -0
  146. package/dist/src/animation/proptrack.js +161 -0
  147. package/dist/src/animation/proptrack.js.map +1 -0
  148. package/dist/src/animation/rotationtrack.js +51 -0
  149. package/dist/src/animation/rotationtrack.js.map +1 -0
  150. package/dist/src/animation/scaletrack.js +50 -0
  151. package/dist/src/animation/scaletrack.js.map +1 -0
  152. package/dist/src/animation/skeleton.js +204 -0
  153. package/dist/src/animation/skeleton.js.map +1 -0
  154. package/dist/src/animation/translationtrack.js +50 -0
  155. package/dist/src/animation/translationtrack.js.map +1 -0
  156. package/dist/src/app/app.js +129 -0
  157. package/dist/src/app/app.js.map +1 -0
  158. package/dist/src/app/inputmgr.js +267 -0
  159. package/dist/src/app/inputmgr.js.map +1 -0
  160. package/dist/src/asset/assetmanager.js +404 -0
  161. package/dist/src/asset/assetmanager.js.map +1 -0
  162. package/dist/src/asset/builtin.js +337 -0
  163. package/dist/src/asset/builtin.js.map +1 -0
  164. package/dist/src/asset/loaders/dds/dds.js +470 -0
  165. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  166. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  167. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  168. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  169. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  170. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  171. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  172. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  173. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  174. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  175. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  176. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  177. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  178. package/dist/src/asset/loaders/loader.js +45 -0
  179. package/dist/src/asset/loaders/loader.js.map +1 -0
  180. package/dist/src/asset/model.js +414 -0
  181. package/dist/src/asset/model.js.map +1 -0
  182. package/dist/src/blitter/bilateralblur.js +221 -0
  183. package/dist/src/blitter/bilateralblur.js.map +1 -0
  184. package/dist/src/blitter/blitter.js +390 -0
  185. package/dist/src/blitter/blitter.js.map +1 -0
  186. package/dist/src/blitter/box.js +118 -0
  187. package/dist/src/blitter/box.js.map +1 -0
  188. package/dist/src/blitter/copy.js +22 -0
  189. package/dist/src/blitter/copy.js.map +1 -0
  190. package/dist/src/blitter/gaussianblur.js +228 -0
  191. package/dist/src/blitter/gaussianblur.js.map +1 -0
  192. package/dist/src/camera/base.js +92 -0
  193. package/dist/src/camera/base.js.map +1 -0
  194. package/dist/src/camera/camera.js +1005 -0
  195. package/dist/src/camera/camera.js.map +1 -0
  196. package/dist/src/camera/fps.js +238 -0
  197. package/dist/src/camera/fps.js.map +1 -0
  198. package/dist/src/camera/orbit.js +245 -0
  199. package/dist/src/camera/orbit.js.map +1 -0
  200. package/dist/src/camera/orthocamera.js +167 -0
  201. package/dist/src/camera/orthocamera.js.map +1 -0
  202. package/dist/src/camera/perspectivecamera.js +141 -0
  203. package/dist/src/camera/perspectivecamera.js.map +1 -0
  204. package/dist/src/index.js +120 -0
  205. package/dist/src/index.js.map +1 -0
  206. package/dist/src/material/blinn.js +81 -0
  207. package/dist/src/material/blinn.js.map +1 -0
  208. package/dist/src/material/grassmaterial.js +113 -0
  209. package/dist/src/material/grassmaterial.js.map +1 -0
  210. package/dist/src/material/lambert.js +92 -0
  211. package/dist/src/material/lambert.js.map +1 -0
  212. package/dist/src/material/material.js +301 -0
  213. package/dist/src/material/material.js.map +1 -0
  214. package/dist/src/material/meshmaterial.js +704 -0
  215. package/dist/src/material/meshmaterial.js.map +1 -0
  216. package/dist/src/material/mixins/albedocolor.js +76 -0
  217. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  218. package/dist/src/material/mixins/foliage.js +47 -0
  219. package/dist/src/material/mixins/foliage.js.map +1 -0
  220. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  221. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  222. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  223. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  224. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  225. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  226. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  227. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  228. package/dist/src/material/mixins/lit.js +476 -0
  229. package/dist/src/material/mixins/lit.js.map +1 -0
  230. package/dist/src/material/mixins/pbr/common.js +918 -0
  231. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  232. package/dist/src/material/mixins/texture.js +172 -0
  233. package/dist/src/material/mixins/texture.js.map +1 -0
  234. package/dist/src/material/mixins/vertexcolor.js +56 -0
  235. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  236. package/dist/src/material/particle.js +178 -0
  237. package/dist/src/material/particle.js.map +1 -0
  238. package/dist/src/material/pbrmr.js +97 -0
  239. package/dist/src/material/pbrmr.js.map +1 -0
  240. package/dist/src/material/pbrsg.js +97 -0
  241. package/dist/src/material/pbrsg.js.map +1 -0
  242. package/dist/src/material/shader/helper.js +1209 -0
  243. package/dist/src/material/shader/helper.js.map +1 -0
  244. package/dist/src/material/terrain-cm.js +606 -0
  245. package/dist/src/material/terrain-cm.js.map +1 -0
  246. package/dist/src/material/terrainmaterial.js +375 -0
  247. package/dist/src/material/terrainmaterial.js.map +1 -0
  248. package/dist/src/material/unlit.js +41 -0
  249. package/dist/src/material/unlit.js.map +1 -0
  250. package/dist/src/material/water.js +417 -0
  251. package/dist/src/material/water.js.map +1 -0
  252. package/dist/src/posteffect/bloom.js +361 -0
  253. package/dist/src/posteffect/bloom.js.map +1 -0
  254. package/dist/src/posteffect/compositor.js +226 -0
  255. package/dist/src/posteffect/compositor.js.map +1 -0
  256. package/dist/src/posteffect/fxaa.js +273 -0
  257. package/dist/src/posteffect/fxaa.js.map +1 -0
  258. package/dist/src/posteffect/grayscale.js +69 -0
  259. package/dist/src/posteffect/grayscale.js.map +1 -0
  260. package/dist/src/posteffect/motionblur.js +96 -0
  261. package/dist/src/posteffect/motionblur.js.map +1 -0
  262. package/dist/src/posteffect/posteffect.js +126 -0
  263. package/dist/src/posteffect/posteffect.js.map +1 -0
  264. package/dist/src/posteffect/sao.js +324 -0
  265. package/dist/src/posteffect/sao.js.map +1 -0
  266. package/dist/src/posteffect/ssr.js +489 -0
  267. package/dist/src/posteffect/ssr.js.map +1 -0
  268. package/dist/src/posteffect/taa.js +172 -0
  269. package/dist/src/posteffect/taa.js.map +1 -0
  270. package/dist/src/posteffect/tonemap.js +94 -0
  271. package/dist/src/posteffect/tonemap.js.map +1 -0
  272. package/dist/src/render/abuffer_oit.js +361 -0
  273. package/dist/src/render/abuffer_oit.js.map +1 -0
  274. package/dist/src/render/clipmap.js +851 -0
  275. package/dist/src/render/clipmap.js.map +1 -0
  276. package/dist/src/render/cluster_light.js +333 -0
  277. package/dist/src/render/cluster_light.js.map +1 -0
  278. package/dist/src/render/cull_visitor.js +187 -0
  279. package/dist/src/render/cull_visitor.js.map +1 -0
  280. package/dist/src/render/depthpass.js +68 -0
  281. package/dist/src/render/depthpass.js.map +1 -0
  282. package/dist/src/render/drawable_mixin.js +227 -0
  283. package/dist/src/render/drawable_mixin.js.map +1 -0
  284. package/dist/src/render/envlight.js +463 -0
  285. package/dist/src/render/envlight.js.map +1 -0
  286. package/dist/src/render/fbm_wavegenerator.js +251 -0
  287. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  288. package/dist/src/render/fft_wavegenerator.js +1006 -0
  289. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  290. package/dist/src/render/fullscreenquad.js +38 -0
  291. package/dist/src/render/fullscreenquad.js.map +1 -0
  292. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  293. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  294. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  295. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  296. package/dist/src/render/hzb.js +273 -0
  297. package/dist/src/render/hzb.js.map +1 -0
  298. package/dist/src/render/lightpass.js +172 -0
  299. package/dist/src/render/lightpass.js.map +1 -0
  300. package/dist/src/render/objectcolorpass.js +51 -0
  301. package/dist/src/render/objectcolorpass.js.map +1 -0
  302. package/dist/src/render/primitive.js +364 -0
  303. package/dist/src/render/primitive.js.map +1 -0
  304. package/dist/src/render/render_queue.js +467 -0
  305. package/dist/src/render/render_queue.js.map +1 -0
  306. package/dist/src/render/renderbundle_wrapper.js +152 -0
  307. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  308. package/dist/src/render/renderer.js +455 -0
  309. package/dist/src/render/renderer.js.map +1 -0
  310. package/dist/src/render/renderpass.js +200 -0
  311. package/dist/src/render/renderpass.js.map +1 -0
  312. package/dist/src/render/shadowmap_pass.js +56 -0
  313. package/dist/src/render/shadowmap_pass.js.map +1 -0
  314. package/dist/src/render/sky.js +1103 -0
  315. package/dist/src/render/sky.js.map +1 -0
  316. package/dist/src/render/weightedblended_oit.js +168 -0
  317. package/dist/src/render/weightedblended_oit.js.map +1 -0
  318. package/dist/src/scene/batchgroup.js +162 -0
  319. package/dist/src/scene/batchgroup.js.map +1 -0
  320. package/dist/src/scene/environment.js +209 -0
  321. package/dist/src/scene/environment.js.map +1 -0
  322. package/dist/src/scene/graph_node.js +72 -0
  323. package/dist/src/scene/graph_node.js.map +1 -0
  324. package/dist/src/scene/light.js +416 -0
  325. package/dist/src/scene/light.js.map +1 -0
  326. package/dist/src/scene/mesh.js +341 -0
  327. package/dist/src/scene/mesh.js.map +1 -0
  328. package/dist/src/scene/octree.js +649 -0
  329. package/dist/src/scene/octree.js.map +1 -0
  330. package/dist/src/scene/particlesys.js +738 -0
  331. package/dist/src/scene/particlesys.js.map +1 -0
  332. package/dist/src/scene/raycast_visitor.js +103 -0
  333. package/dist/src/scene/raycast_visitor.js.map +1 -0
  334. package/dist/src/scene/scene.js +284 -0
  335. package/dist/src/scene/scene.js.map +1 -0
  336. package/dist/src/scene/scene_node.js +732 -0
  337. package/dist/src/scene/scene_node.js.map +1 -0
  338. package/dist/src/scene/terrain/grass.js +278 -0
  339. package/dist/src/scene/terrain/grass.js.map +1 -0
  340. package/dist/src/scene/terrain/heightfield.js +475 -0
  341. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  342. package/dist/src/scene/terrain/patch.js +530 -0
  343. package/dist/src/scene/terrain/patch.js.map +1 -0
  344. package/dist/src/scene/terrain/quadtree.js +461 -0
  345. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  346. package/dist/src/scene/terrain/terrain.js +246 -0
  347. package/dist/src/scene/terrain/terrain.js.map +1 -0
  348. package/dist/src/scene/terrain-cm/grass.js +594 -0
  349. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  350. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  351. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  352. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  353. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  354. package/dist/src/scene/water.js +374 -0
  355. package/dist/src/scene/water.js.map +1 -0
  356. package/dist/src/shaders/atmosphere.js +957 -0
  357. package/dist/src/shaders/atmosphere.js.map +1 -0
  358. package/dist/src/shaders/fog.js +112 -0
  359. package/dist/src/shaders/fog.js.map +1 -0
  360. package/dist/src/shaders/misc.js +266 -0
  361. package/dist/src/shaders/misc.js.map +1 -0
  362. package/dist/src/shaders/noise.js +222 -0
  363. package/dist/src/shaders/noise.js.map +1 -0
  364. package/dist/src/shaders/pbr.js +51 -0
  365. package/dist/src/shaders/pbr.js.map +1 -0
  366. package/dist/src/shaders/shadow.js +636 -0
  367. package/dist/src/shaders/shadow.js.map +1 -0
  368. package/dist/src/shaders/ssr.js +490 -0
  369. package/dist/src/shaders/ssr.js.map +1 -0
  370. package/dist/src/shaders/temporal.js +215 -0
  371. package/dist/src/shaders/temporal.js.map +1 -0
  372. package/dist/src/shaders/water.js +756 -0
  373. package/dist/src/shaders/water.js.map +1 -0
  374. package/dist/src/shadow/esm.js +237 -0
  375. package/dist/src/shadow/esm.js.map +1 -0
  376. package/dist/src/shadow/pcf_opt.js +181 -0
  377. package/dist/src/shadow/pcf_opt.js.map +1 -0
  378. package/dist/src/shadow/pcf_pd.js +189 -0
  379. package/dist/src/shadow/pcf_pd.js.map +1 -0
  380. package/dist/src/shadow/shader.js +37 -0
  381. package/dist/src/shadow/shader.js.map +1 -0
  382. package/dist/src/shadow/shadow_impl.js +15 -0
  383. package/dist/src/shadow/shadow_impl.js.map +1 -0
  384. package/dist/src/shadow/shadowmapper.js +790 -0
  385. package/dist/src/shadow/shadowmapper.js.map +1 -0
  386. package/dist/src/shadow/ssm.js +159 -0
  387. package/dist/src/shadow/ssm.js.map +1 -0
  388. package/dist/src/shadow/vsm.js +297 -0
  389. package/dist/src/shadow/vsm.js.map +1 -0
  390. package/dist/src/shapes/box.js +386 -0
  391. package/dist/src/shapes/box.js.map +1 -0
  392. package/dist/src/shapes/cylinder.js +125 -0
  393. package/dist/src/shapes/cylinder.js.map +1 -0
  394. package/dist/src/shapes/plane.js +88 -0
  395. package/dist/src/shapes/plane.js.map +1 -0
  396. package/dist/src/shapes/shape.js +87 -0
  397. package/dist/src/shapes/shape.js.map +1 -0
  398. package/dist/src/shapes/sphere.js +114 -0
  399. package/dist/src/shapes/sphere.js.map +1 -0
  400. package/dist/src/shapes/tetrahedron.js +188 -0
  401. package/dist/src/shapes/tetrahedron.js.map +1 -0
  402. package/dist/src/shapes/torus.js +111 -0
  403. package/dist/src/shapes/torus.js.map +1 -0
  404. package/dist/src/utility/aabbtree.js +400 -0
  405. package/dist/src/utility/aabbtree.js.map +1 -0
  406. package/dist/src/utility/bounding_volume.js +29 -0
  407. package/dist/src/utility/bounding_volume.js.map +1 -0
  408. package/dist/src/utility/debug.js +28 -0
  409. package/dist/src/utility/debug.js.map +1 -0
  410. package/dist/src/utility/draco/decoder.js +116 -0
  411. package/dist/src/utility/draco/decoder.js.map +1 -0
  412. package/dist/src/utility/misc.js +105 -0
  413. package/dist/src/utility/misc.js.map +1 -0
  414. package/dist/src/utility/panorama.js +163 -0
  415. package/dist/src/utility/panorama.js.map +1 -0
  416. package/dist/src/utility/pmrem.js +354 -0
  417. package/dist/src/utility/pmrem.js.map +1 -0
  418. package/dist/src/utility/rendermipmap.js +115 -0
  419. package/dist/src/utility/rendermipmap.js.map +1 -0
  420. package/dist/src/utility/serialization/json.js +402 -0
  421. package/dist/src/utility/serialization/json.js.map +1 -0
  422. package/dist/src/utility/serialization/manager.js +623 -0
  423. package/dist/src/utility/serialization/manager.js.map +1 -0
  424. package/dist/src/utility/serialization/scene/animation.js +248 -0
  425. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  426. package/dist/src/utility/serialization/scene/batch.js +59 -0
  427. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  428. package/dist/src/utility/serialization/scene/camera.js +790 -0
  429. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  430. package/dist/src/utility/serialization/scene/common.js +222 -0
  431. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  432. package/dist/src/utility/serialization/scene/light.js +575 -0
  433. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  434. package/dist/src/utility/serialization/scene/material.js +1111 -0
  435. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  436. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  437. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  438. package/dist/src/utility/serialization/scene/misc.js +39 -0
  439. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  440. package/dist/src/utility/serialization/scene/node.js +451 -0
  441. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  442. package/dist/src/utility/serialization/scene/particle.js +425 -0
  443. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  444. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  445. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  446. package/dist/src/utility/serialization/scene/scene.js +704 -0
  447. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  448. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  449. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  450. package/dist/src/utility/serialization/scene/water.js +465 -0
  451. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  452. package/dist/src/utility/shprojector.js +297 -0
  453. package/dist/src/utility/shprojector.js.map +1 -0
  454. package/dist/src/utility/textures/ggxlut.js +213 -0
  455. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  456. package/dist/src/utility/textures/gradientnoise.js +62 -0
  457. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  458. package/dist/src/utility/textures/randomnoise.js +41 -0
  459. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  460. package/dist/src/values.js +162 -0
  461. package/dist/src/values.js.map +1 -0
  462. package/dist/utility/blueprint/material/common.js +7 -0
  463. package/dist/utility/blueprint/material/common.js.map +1 -0
  464. package/dist/utility/blueprint/material/inputs.js +3 -3
  465. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  466. package/dist/utility/blueprint/material/ir.js +4 -4
  467. package/dist/utility/blueprint/material/ir.js.map +1 -1
  468. package/dist/utility/serialization/blueprint/constants.js +255 -0
  469. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  470. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  471. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  472. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  473. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  474. package/dist/utility/serialization/manager.js +299 -268
  475. package/dist/utility/serialization/manager.js.map +1 -1
  476. package/dist/utility/serialization/scene/animation.js +45 -0
  477. package/dist/utility/serialization/scene/animation.js.map +1 -1
  478. package/dist/utility/serialization/scene/camera.js +53 -0
  479. package/dist/utility/serialization/scene/camera.js.map +1 -1
  480. package/dist/utility/serialization/scene/common.js +10 -0
  481. package/dist/utility/serialization/scene/common.js.map +1 -1
  482. package/dist/utility/serialization/scene/light.js +30 -0
  483. package/dist/utility/serialization/scene/light.js.map +1 -1
  484. package/dist/utility/serialization/scene/material.js +63 -0
  485. package/dist/utility/serialization/scene/material.js.map +1 -1
  486. package/dist/utility/serialization/scene/mesh.js +11 -0
  487. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  488. package/dist/utility/serialization/scene/misc.js +2 -0
  489. package/dist/utility/serialization/scene/misc.js.map +1 -1
  490. package/dist/utility/serialization/scene/node.js +19 -0
  491. package/dist/utility/serialization/scene/node.js.map +1 -1
  492. package/dist/utility/serialization/scene/particle.js +22 -0
  493. package/dist/utility/serialization/scene/particle.js.map +1 -1
  494. package/dist/utility/serialization/scene/primitive.js +33 -0
  495. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  496. package/dist/utility/serialization/scene/scene.js +39 -0
  497. package/dist/utility/serialization/scene/scene.js.map +1 -1
  498. package/dist/utility/serialization/scene/script.js +2 -0
  499. package/dist/utility/serialization/scene/script.js.map +1 -1
  500. package/dist/utility/serialization/scene/sprite.js +6 -0
  501. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  502. package/dist/utility/serialization/scene/terrain.js +9 -0
  503. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  504. package/dist/utility/serialization/scene/water.js +21 -0
  505. package/dist/utility/serialization/scene/water.js.map +1 -1
  506. package/dist/utility/serialization/types.js +5 -1
  507. package/dist/utility/serialization/types.js.map +1 -1
  508. package/dist/values.js +49 -53
  509. package/dist/values.js.map +1 -1
  510. package/package.json +2 -2
  511. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  512. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  513. package/dist/animation/spring/spring_bone.js +0 -240
  514. package/dist/animation/spring/spring_bone.js.map +0 -1
  515. package/dist/animation/spring/spring_bone_collider.js +0 -198
  516. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  517. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  518. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  519. package/dist/animation/spring/spring_bone_system.js +0 -328
  520. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  521. package/dist/render/sky_motion_vector.js +0 -85
  522. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fft_wavegenerator.js","sources":["../../../src/render/fft_wavegenerator.ts"],"sourcesContent":["import type { AABB } from '@zephyr3d/base';\r\nimport { Disposable, PRNG, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { WaveGenerator } from './wavegenerator';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCreationOptions,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from './primitive';\r\nimport { Application } from '../app';\r\nimport {\r\n createProgramFFT2H,\r\n createProgramFFT2V,\r\n createProgramH0,\r\n createProgramHk,\r\n createProgramPostFFT2\r\n} from '../shaders';\r\nimport { fetchSampler } from '../utility/misc';\r\n\r\ntype OceanFieldCascade = {\r\n /** The size of simulated patch of field. (in meters) */\r\n size: number;\r\n /** How \"croppy\" this pattern would be */\r\n croppiness: number;\r\n /** Strength factor for this pattern */\r\n strength: number;\r\n /** Min wave length. Kind of spectrum filter. (Waves less that this thresold are not involved in spectrum generation) */\r\n minWave: number;\r\n /** Max wave length. Kind of spectrum filter. */\r\n maxWave: number;\r\n};\r\n\r\ntype OceanFieldBuildParams = {\r\n /** Size of generated texture. Must be power of 2 */\r\n resolution: number;\r\n /** Ocean field sub-pattern options. */\r\n cascades: [OceanFieldCascade, OceanFieldCascade, OceanFieldCascade];\r\n /** Wind vector. Module correspond to wind force. */\r\n wind: Vector2;\r\n /** Parameter for waves motion. 0 means no wave motion */\r\n alignment: number;\r\n /** Foam parameters */\r\n foamParams: Vector2;\r\n /** Seed of random generator */\r\n randomSeed: number;\r\n};\r\n\r\nfunction getDefaultBuildParams(): OceanFieldBuildParams {\r\n return {\r\n cascades: [\r\n {\r\n size: 400.0,\r\n strength: 0.4,\r\n croppiness: -1.5,\r\n minWave: 0,\r\n maxWave: 100\r\n },\r\n {\r\n size: 100.0,\r\n strength: 0.4,\r\n croppiness: -1.2,\r\n minWave: 0,\r\n maxWave: 100\r\n },\r\n {\r\n size: 15,\r\n strength: 0.2,\r\n croppiness: -0.5,\r\n minWave: 0,\r\n maxWave: 7\r\n }\r\n ],\r\n resolution: 256,\r\n wind: new Vector2(2, 2),\r\n alignment: 1,\r\n foamParams: new Vector2(1.2, 7.2),\r\n randomSeed: 0\r\n };\r\n}\r\n\r\ntype Programs = {\r\n h0Program: GPUProgram;\r\n hkProgram: GPUProgram;\r\n hkProgram2: GPUProgram;\r\n hkProgram4: GPUProgram;\r\n fft2hProgram: GPUProgram;\r\n fft2hProgram2: GPUProgram;\r\n fft2hProgram4: GPUProgram;\r\n fft2vProgram: GPUProgram;\r\n fft2vProgram2: GPUProgram;\r\n fft2vProgram4: GPUProgram;\r\n postfft2Program: GPUProgram;\r\n postfft2Program2: GPUProgram;\r\n postfft2Program4: GPUProgram;\r\n};\r\n\r\ntype Globales = {\r\n programs: Programs;\r\n quad: Primitive;\r\n noiseTextures: Map<number, Texture2D>;\r\n butterflyTextures: Map<number, Texture2D>;\r\n};\r\n\r\ntype WaterInstanceData = {\r\n h0Framebuffer: FrameBuffer;\r\n h0Textures: Texture2D[] | Texture2DArray;\r\n spectrumFramebuffer: FrameBuffer;\r\n spectrumFramebuffer2: FrameBuffer;\r\n spectrumFramebuffer4: FrameBuffer;\r\n spectrumTextures: Texture2D[] | Texture2DArray;\r\n pingpongFramebuffer: FrameBuffer;\r\n pingpongFramebuffer2: FrameBuffer;\r\n pingpongFramebuffer4: FrameBuffer;\r\n pingpongTextures: Texture2D[] | Texture2DArray;\r\n postIfft2Framebuffer: FrameBuffer;\r\n postIfft2Framebuffer2: FrameBuffer;\r\n postIfft2Framebuffer4: FrameBuffer;\r\n dataTextures: Texture2D[] | Texture2DArray;\r\n};\r\n\r\nconst RENDER_NONE = 0;\r\nconst RENDER_NORMAL = 1;\r\nconst RENDER_TWO_PASS = 2;\r\n\r\nconst THREAD_GROUP_SIZE = 16;\r\n\r\n/**\r\n * This class generates a 2D ocean field using the Fast Fourier Transform (FFT) algorithm.\r\n * @public\r\n */\r\nexport class FFTWaveGenerator extends Disposable implements WaveGenerator {\r\n private static _globals: Globales = null;\r\n private readonly _useComputeShader: boolean;\r\n private readonly _h0BindGroup: BindGroup;\r\n private readonly _hkBindGroup: BindGroup;\r\n private readonly _hkBindGroup2: BindGroup;\r\n private readonly _hkBindGroup4: BindGroup;\r\n private readonly _fft2hBindGroup: BindGroup;\r\n private readonly _fft2vBindGroup: BindGroup;\r\n private readonly _fft2hBindGroup2Used: BindGroup[][];\r\n private readonly _fft2hBindGroup2Free: BindGroup[][];\r\n private readonly _fft2hBindGroup4Used: BindGroup[][];\r\n private readonly _fft2hBindGroup4Free: BindGroup[][];\r\n private readonly _fft2vBindGroup2Used: BindGroup[][];\r\n private readonly _fft2vBindGroup2Free: BindGroup[][];\r\n private readonly _fft2vBindGroup4Used: BindGroup[][];\r\n private readonly _fft2vBindGroup4Free: BindGroup[][];\r\n private readonly _postfft2BindGroup: BindGroup;\r\n private readonly _postfft2BindGroup2: BindGroup;\r\n private readonly _postfft2BindGroup4: BindGroup;\r\n private readonly _updateRenderStates: RenderStateSet;\r\n private _sizes: Vector4;\r\n private _croppinesses: Vector4;\r\n private readonly _params: OceanFieldBuildParams;\r\n private _instanceData: WaterInstanceData;\r\n private _ifftTextures: Texture2D[] | Texture2DArray;\r\n private readonly _cascades: Vector4[];\r\n private _paramsChanged: boolean;\r\n private _version: number;\r\n private _resolutionChanged: boolean;\r\n private readonly _textureFormat: TextureFormat;\r\n private readonly _h0TextureFormat: TextureFormat;\r\n private readonly _dataTextureFormat: TextureFormat;\r\n private readonly _renderMode: number;\r\n /**\r\n * Create a new instance of the FFTWaveGenerator class.\r\n * @param params - Ocean field build parameters. If not provided, default parameters will be used.\r\n */\r\n constructor(params?: OceanFieldBuildParams) {\r\n super();\r\n const device = Application.instance.device;\r\n const renderTargetFloat16 = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer;\r\n const maxDrawBuffers = /*device.type !== 'webgl' && */ renderTargetFloat16\r\n ? device.getDeviceCaps().framebufferCaps.maxDrawBuffers\r\n : 0;\r\n this._textureFormat = 'rgba16f';\r\n this._h0TextureFormat = 'rgba16f';\r\n this._dataTextureFormat = 'rgba16f';\r\n this._useComputeShader = device.type === 'webgpu';\r\n const maxSampleBytes = device.getDeviceCaps().framebufferCaps.maxColorAttachmentBytesPerSample;\r\n if (maxDrawBuffers === 0) {\r\n this._renderMode = RENDER_NONE;\r\n } else if (this._useComputeShader || maxSampleBytes >= 48) {\r\n this._renderMode = RENDER_NORMAL;\r\n } else {\r\n this._renderMode = RENDER_TWO_PASS;\r\n }\r\n if (this._renderMode !== RENDER_NONE) {\r\n FFTWaveGenerator._globals = FFTWaveGenerator._globals ?? {\r\n programs: {\r\n h0Program: createProgramH0(this._useComputeShader, THREAD_GROUP_SIZE, this._h0TextureFormat),\r\n hkProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramHk(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n hkProgram2: this._renderMode === RENDER_TWO_PASS ? createProgramHk(false, 0, null, 2) : null,\r\n hkProgram4: this._renderMode === RENDER_TWO_PASS ? createProgramHk(false, 0, null, 4) : null,\r\n fft2hProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramFFT2H(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n fft2hProgram2: this._renderMode === RENDER_TWO_PASS ? createProgramFFT2H(false, 0, null, 2) : null,\r\n fft2hProgram4: this._renderMode === RENDER_TWO_PASS ? createProgramFFT2H(false, 0, null, 4) : null,\r\n fft2vProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramFFT2V(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n fft2vProgram2: this._renderMode === RENDER_TWO_PASS ? createProgramFFT2V(false, 0, null, 2) : null,\r\n fft2vProgram4: this._renderMode === RENDER_TWO_PASS ? createProgramFFT2V(false, 0, null, 4) : null,\r\n postfft2Program:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramPostFFT2(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n postfft2Program2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, null, 2) : null,\r\n postfft2Program4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, null, 4) : null\r\n },\r\n quad: FFTWaveGenerator.createQuad(),\r\n noiseTextures: new Map(),\r\n butterflyTextures: new Map()\r\n };\r\n this._params = params ?? getDefaultBuildParams();\r\n const programs = FFTWaveGenerator._globals.programs;\r\n this._h0BindGroup = device.createBindGroup(programs.h0Program.bindGroupLayouts[0]);\r\n this._hkBindGroup = programs.hkProgram\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.hkProgram.bindGroupLayouts[0])\r\n : null;\r\n this._hkBindGroup2 = programs.hkProgram2\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.hkProgram2.bindGroupLayouts[0])\r\n : null;\r\n this._hkBindGroup4 = programs.hkProgram4\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.hkProgram4.bindGroupLayouts[0])\r\n : null;\r\n this._fft2hBindGroup = programs.fft2hProgram\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.fft2hProgram.bindGroupLayouts[0])\r\n : null;\r\n this._fft2vBindGroup = programs.fft2vProgram\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.fft2vProgram.bindGroupLayouts[0])\r\n : null;\r\n this._fft2hBindGroup2Used = [[], []];\r\n this._fft2hBindGroup2Free = [[], []];\r\n this._fft2hBindGroup4Used = [[], []];\r\n this._fft2hBindGroup4Free = [[], []];\r\n this._fft2vBindGroup2Used = [[], []];\r\n this._fft2vBindGroup2Free = [[], []];\r\n this._fft2vBindGroup4Used = [[], []];\r\n this._fft2vBindGroup4Free = [[], []];\r\n this._postfft2BindGroup = programs.postfft2Program\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.postfft2Program.bindGroupLayouts[0])\r\n : null;\r\n this._postfft2BindGroup2 = programs.postfft2Program2\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.postfft2Program2.bindGroupLayouts[0])\r\n : null;\r\n this._postfft2BindGroup4 = programs.postfft2Program4\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.postfft2Program4.bindGroupLayouts[0])\r\n : null;\r\n this._instanceData = null;\r\n this._ifftTextures = null;\r\n this._sizes = new Vector4();\r\n this._croppinesses = new Vector4();\r\n this._cascades = [new Vector4(), new Vector4(), new Vector4(), new Vector4()];\r\n this._updateRenderStates = Application.instance.device.createRenderStateSet();\r\n this._updateRenderStates.useRasterizerState().setCullMode('none');\r\n this._updateRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this._version = 0;\r\n this.paramsChanged();\r\n }\r\n }\r\n get version() {\r\n return this._version;\r\n }\r\n clone(): this {\r\n return new FFTWaveGenerator(this._params) as this;\r\n }\r\n /*\r\n get params() {\r\n return this._params;\r\n }\r\n set params(val: OceanFieldBuildParams) {\r\n if (val && val !== this._params) {\r\n this._params = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n */\r\n private paramsChanged() {\r\n this._paramsChanged = true;\r\n this._version++;\r\n }\r\n /** Gets the wave alighment */\r\n get alignment(): number {\r\n return this._params.alignment;\r\n }\r\n set alignment(val: number) {\r\n if (this._params.alignment !== val) {\r\n this._params.alignment = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wind vector */\r\n get wind(): Vector2 {\r\n return this._params.wind;\r\n }\r\n set wind(val: Vector2) {\r\n if (val !== this._params.wind && (val.x !== this._params.wind.x || val.y !== this._params.wind.y)) {\r\n this._params.wind.x = val.x;\r\n this._params.wind.y = val.y;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the foam width */\r\n get foamWidth(): number {\r\n return this._params.foamParams.x;\r\n }\r\n set foamWidth(val: number) {\r\n if (val !== this._params.foamParams.x) {\r\n this._params.foamParams.x = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the foam contrast */\r\n get foamContrast(): number {\r\n return this._params.foamParams.y;\r\n }\r\n set foamContrast(val: number) {\r\n if (val !== this._params.foamParams.y) {\r\n this._params.foamParams.y = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave length for the specified cascade */\r\n getWaveLength(cascade: number) {\r\n return this._params.cascades[cascade].size;\r\n }\r\n /**\r\n * Sets the wave length for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param length - The new wave length for the specified cascade\r\n */\r\n setWaveLength(cascade: number, length: number) {\r\n if (this._params.cascades[cascade].size !== length) {\r\n this._params.cascades[cascade].size = length;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave strength for the specified cascade */\r\n getWaveStrength(cascade: number) {\r\n return this._params.cascades[cascade].strength;\r\n }\r\n /**\r\n * Sets the wave strength for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param strength - The new wave strength for the specified cascade\r\n */\r\n setWaveStrength(cascade: number, strength: number) {\r\n if (this._params.cascades[cascade].strength !== strength) {\r\n this._params.cascades[cascade].strength = strength;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave croppiness for the specified cascade */\r\n getWaveCroppiness(cascade: number) {\r\n return this._params.cascades[cascade].croppiness;\r\n }\r\n /**\r\n * Sets the wave croppiness for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param croppiness - The new wave croppiness for the specified cascade\r\n */\r\n setWaveCroppiness(cascade: number, croppiness: number) {\r\n if (this._params.cascades[cascade].croppiness !== croppiness) {\r\n this._params.cascades[cascade].croppiness = croppiness;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** @internal */\r\n private static createQuad(): Primitive {\r\n const vertexData = new Float32Array([\r\n -1, -1, 0, 0.0, 0.0, 1, -1, 0, 1.0, 0.0, 1, 1, 0, 1.0, 1.0, -1, 1, 0, 0.0, 1.0\r\n ]);\r\n const indexData = new Uint32Array([0, 1, 2, 0, 2, 3]);\r\n const prim = new Primitive();\r\n prim.createAndSetVertexBuffer(['position_f32x3', 'tex0_f32x2'], vertexData);\r\n prim.createAndSetIndexBuffer(indexData);\r\n prim.primitiveType = 'triangle-list';\r\n prim.indexStart = 0;\r\n prim.indexCount = indexData.length;\r\n return prim;\r\n }\r\n /** @internal */\r\n private getButterflyTexture(size: number) {\r\n const device = Application.instance.device;\r\n let tex = FFTWaveGenerator._globals.butterflyTextures.get(size);\r\n if (!tex) {\r\n tex = device.createTexture2D('rgba32f', Math.log2(size), size, {\r\n samplerOptions: { mipFilter: 'none' }\r\n });\r\n tex.name = `butterfly${size}`;\r\n tex.update(this.createButterflyTexture(size), 0, 0, tex.width, tex.height);\r\n FFTWaveGenerator._globals.butterflyTextures.set(size, tex);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n private generateInitialSpectrum(): void {\r\n const device = Application.instance.device;\r\n const instanceData = this.getInstanceData();\r\n device.setProgram(FFTWaveGenerator._globals.programs.h0Program);\r\n device.setBindGroup(0, this._h0BindGroup);\r\n this._h0BindGroup.setTexture(\r\n 'noise',\r\n this.getNoiseTexture(this._params.resolution, this._params.randomSeed),\r\n fetchSampler('repeat_nearest_nomip')\r\n );\r\n this._h0BindGroup.setValue('resolution', this._params.resolution);\r\n this._h0BindGroup.setValue('wind', this._params.wind);\r\n this._h0BindGroup.setValue('alignment', this._params.alignment);\r\n for (let i = 0; i < this._params.cascades.length; i++) {\r\n this._cascades[i].x = this._params.cascades[i].size;\r\n this._cascades[i].y =\r\n (this._params.cascades[i].strength * 0.081) /\r\n (this._params.cascades[i].size * this._params.cascades[i].size);\r\n this._cascades[i].z = (2 * Math.PI) / this._params.cascades[i].maxWave;\r\n this._cascades[i].w = (2 * Math.PI) / this._params.cascades[i].minWave;\r\n }\r\n this._h0BindGroup.setValue('cascade0', this._cascades[0]);\r\n this._h0BindGroup.setValue('cascade1', this._cascades[1]);\r\n this._h0BindGroup.setValue('cascade2', this._cascades[2]);\r\n if (device.type === 'webgpu') {\r\n this._h0BindGroup.setTexture('spectrum', instanceData.h0Textures as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(instanceData.h0Framebuffer);\r\n device.clearFrameBuffer(Vector4.zero(), null, null);\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private getNoiseTexture(size: number, randomSeed: number): Texture2D {\r\n const device = Application.instance.device;\r\n let tex = FFTWaveGenerator._globals.noiseTextures.get(size);\r\n if (!tex) {\r\n tex = device.createTexture2D(device.type === 'webgl' ? 'rgba32f' : 'rg32f', size, size, {\r\n samplerOptions: { mipFilter: 'none' }\r\n });\r\n tex.name = `noiseTex${size}`;\r\n tex.update(this.getNoise2d(size, randomSeed, device.type === 'webgl'), 0, 0, size, size);\r\n FFTWaveGenerator._globals.noiseTextures.set(size, tex);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n private getNoise2d(size: number, randomSeed: number, rgba: boolean) {\r\n const rand = new PRNG(randomSeed);\r\n if (rgba) {\r\n const array = new Float32Array(size * size * 4);\r\n for (let i = 0; i < size * size; i++) {\r\n array[i * 4 + 0] = rand.get();\r\n array[i * 4 + 1] = rand.get();\r\n }\r\n return array;\r\n } else {\r\n return Float32Array.from([...Array(size * size * 2)].map(() => rand.get()));\r\n }\r\n }\r\n /** @internal */\r\n private reverseBits(v: number, width: number): number {\r\n return parseInt(v.toString(2).padStart(width, '0').split('').reverse().join(''), 2);\r\n }\r\n /** @internal */\r\n private createButterflyTexture(size: number): Float32Array<ArrayBuffer> {\r\n const width = Math.log2(size);\r\n const height = size;\r\n const texture = new Float32Array(width * height * 4);\r\n const w = (2.0 * Math.PI) / size;\r\n const bitReversed = [...Array(size).keys()].map((v) => this.reverseBits(v, width));\r\n\r\n for (let j = 0; j < width; j++) {\r\n for (let i = 0; i < height; i++) {\r\n const k = i * (size >> (j + 1));\r\n const c = Math.cos(k * w);\r\n const s = Math.sin(k * w);\r\n const span = 2 ** j;\r\n const wing = i % 2 ** (j + 1) < span ? 0 : 1; // 0 - top wing, 1 - bottom wing\r\n const texel = new Vector4();\r\n if (j === 0) {\r\n if (wing === 0) {\r\n texel.setXYZW(c, s, bitReversed[i], bitReversed[i + 1]);\r\n } else {\r\n texel.setXYZW(c, s, bitReversed[i - 1], bitReversed[i]);\r\n }\r\n } else {\r\n if (wing === 0) {\r\n texel.setXYZW(c, s, i, i + span);\r\n } else {\r\n texel.setXYZW(c, s, i - span, i);\r\n }\r\n }\r\n\r\n texture[(width * i + j) * 4] = texel[0];\r\n texture[(width * i + j) * 4 + 1] = texel[1];\r\n texture[(width * i + j) * 4 + 2] = texel[2];\r\n texture[(width * i + j) * 4 + 3] = texel[3];\r\n }\r\n }\r\n return texture;\r\n }\r\n /** @internal */\r\n private getInstanceData(): WaterInstanceData {\r\n if (!this._instanceData) {\r\n const device = Application.instance.device;\r\n const h0Textures = this.createNTextures(\r\n device,\r\n this._h0TextureFormat,\r\n this._params.resolution,\r\n 3,\r\n 'Water-h0',\r\n false\r\n );\r\n const dataTextures = this.createNTextures(\r\n device,\r\n this._dataTextureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-data',\r\n true\r\n );\r\n const spectrumTextures = this.createNTextures(\r\n device,\r\n this._textureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-spectrum',\r\n true\r\n );\r\n const pingpongTextures = this.createNTextures(\r\n device,\r\n this._textureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-pingpong',\r\n false\r\n );\r\n this._instanceData = {\r\n dataTextures,\r\n h0Textures: h0Textures,\r\n pingpongTextures: pingpongTextures,\r\n spectrumTextures: spectrumTextures,\r\n h0Framebuffer: this._useComputeShader\r\n ? null\r\n : device.createFrameBuffer(h0Textures as Texture2D[], null),\r\n spectrumFramebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(spectrumTextures as Texture2D[], null)\r\n : null,\r\n spectrumFramebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((spectrumTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n spectrumFramebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((spectrumTextures as Texture2D[]).slice(0, 4), null)\r\n : null,\r\n pingpongFramebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(pingpongTextures as Texture2D[], null)\r\n : null,\r\n pingpongFramebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((pingpongTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n pingpongFramebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((pingpongTextures as Texture2D[]).slice(0, 4), null)\r\n : null,\r\n postIfft2Framebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(dataTextures as Texture2D[], null)\r\n : null,\r\n postIfft2Framebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((dataTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n postIfft2Framebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((dataTextures as Texture2D[]).slice(0, 4), null)\r\n : null\r\n };\r\n }\r\n return this._instanceData;\r\n }\r\n /** @internal */\r\n private createNTextures(\r\n device: AbstractDevice,\r\n format: TextureFormat,\r\n size: number,\r\n num: number,\r\n name: string,\r\n linear: boolean\r\n ): Texture2D[] | Texture2DArray {\r\n const options: TextureCreationOptions = {\r\n samplerOptions: {\r\n minFilter: linear ? 'linear' : 'nearest',\r\n magFilter: linear ? 'linear' : 'nearest',\r\n mipFilter: 'none',\r\n addressU: 'repeat',\r\n addressV: 'repeat'\r\n },\r\n writable: !!this._useComputeShader\r\n };\r\n if (this._useComputeShader) {\r\n const tex = device.createTexture2DArray(format, size, size, num, options);\r\n tex.name = name;\r\n return tex;\r\n } else {\r\n return Array.from({ length: num }).map((val, index) => {\r\n const tex = device.createTexture2D(format, size, size, options);\r\n tex.name = `${name}-${index}`;\r\n return tex;\r\n });\r\n }\r\n }\r\n /** {@inheritDoc WaveGenerator.update} */\r\n update(time: number): void {\r\n const device = Application.instance.device;\r\n device.pushDeviceStates();\r\n device.setRenderStates(this._updateRenderStates);\r\n if (this._resolutionChanged) {\r\n this.disposeInstanceData();\r\n }\r\n if (this._paramsChanged) {\r\n this.generateInitialSpectrum();\r\n }\r\n this._resolutionChanged = false;\r\n this._paramsChanged = false;\r\n for (let i = 0; i < 3; i++) {\r\n this._sizes[i] = this._params.cascades[i].size;\r\n this._croppinesses[i] = this._params.cascades[i].croppiness;\r\n }\r\n if (this._renderMode === RENDER_NORMAL) {\r\n this.generateSpectrum(time);\r\n this.ifft2();\r\n this.postIfft2();\r\n } else {\r\n this.generateSpectrumTwoPass(time);\r\n this.ifft2TwoPass();\r\n this.postIfft2TwoPass();\r\n }\r\n device.popDeviceStates();\r\n }\r\n /** {@inheritDoc WaveGenerator.needUpdate} */\r\n needUpdate() {\r\n return true;\r\n }\r\n /** @internal */\r\n private disposeNTextures(texture: Texture2D[] | Texture2DArray) {\r\n if (Array.isArray(texture)) {\r\n texture.forEach((tex) => tex.dispose());\r\n } else if (texture) {\r\n texture.dispose();\r\n }\r\n }\r\n /** @internal */\r\n private disposeInstanceData(): void {\r\n if (this._instanceData) {\r\n this.disposeNTextures(this._instanceData.dataTextures);\r\n this._instanceData.dataTextures = null;\r\n this.disposeNTextures(this._instanceData.h0Textures);\r\n this._instanceData.h0Textures = null;\r\n this.disposeNTextures(this._instanceData.pingpongTextures);\r\n this._instanceData.pingpongTextures = null;\r\n this.disposeNTextures(this._instanceData.spectrumTextures);\r\n this._instanceData.spectrumTextures = null;\r\n this._instanceData.h0Framebuffer?.dispose();\r\n this._instanceData.pingpongFramebuffer?.dispose();\r\n this._instanceData.pingpongFramebuffer2?.dispose();\r\n this._instanceData.pingpongFramebuffer4?.dispose();\r\n this._instanceData.spectrumFramebuffer?.dispose();\r\n this._instanceData.spectrumFramebuffer2?.dispose();\r\n this._instanceData.spectrumFramebuffer4?.dispose();\r\n this._instanceData.postIfft2Framebuffer?.dispose();\r\n this._instanceData.postIfft2Framebuffer2?.dispose();\r\n this._instanceData.postIfft2Framebuffer4?.dispose();\r\n this._instanceData = null;\r\n }\r\n }\r\n /** @internal */\r\n private generateSpectrum(time: number): void {\r\n const device = Application.instance.device;\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals.programs.hkProgram);\r\n device.setBindGroup(0, this._hkBindGroup);\r\n this._hkBindGroup.setValue('t', time);\r\n this._hkBindGroup.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup.setValue('sizes', this._sizes);\r\n if (this._useComputeShader) {\r\n this._hkBindGroup.setTexture('h0Texture', instanceData.h0Textures as Texture2DArray);\r\n this._hkBindGroup.setTexture('spectrum', instanceData.spectrumTextures as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n this._hkBindGroup.setTexture('h0Texture0', instanceData.h0Textures[0], nearestRepeatSampler);\r\n this._hkBindGroup.setTexture('h0Texture1', instanceData.h0Textures[1], nearestRepeatSampler);\r\n this._hkBindGroup.setTexture('h0Texture2', instanceData.h0Textures[2], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup.setValue(\r\n 'h0TexSize',\r\n new Vector2(instanceData.h0Textures[0].width, instanceData.h0Textures[0].height)\r\n );\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer);\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private generateSpectrumTwoPass(time: number): void {\r\n const device = Application.instance.device;\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals.programs.hkProgram4);\r\n device.setBindGroup(0, this._hkBindGroup4);\r\n this._hkBindGroup4.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup4.setValue('sizes', this._sizes);\r\n this._hkBindGroup4.setTexture('h0Texture0', instanceData.h0Textures[0], nearestRepeatSampler);\r\n this._hkBindGroup4.setTexture('h0Texture1', instanceData.h0Textures[1], nearestRepeatSampler);\r\n this._hkBindGroup4.setValue('t', time);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup4.setValue(\r\n 'h0TexSize',\r\n new Vector2(instanceData.h0Textures[0].width, instanceData.h0Textures[0].height)\r\n );\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer4);\r\n FFTWaveGenerator._globals.quad.draw();\r\n\r\n device.setProgram(FFTWaveGenerator._globals.programs.hkProgram2);\r\n device.setBindGroup(0, this._hkBindGroup2);\r\n this._hkBindGroup2.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup2.setValue('sizes', this._sizes);\r\n this._hkBindGroup2.setTexture('h0Texture2', instanceData.h0Textures[2], nearestRepeatSampler);\r\n this._hkBindGroup2.setValue('t', time);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup2.setValue(\r\n 'h0TexSize',\r\n new Vector2(instanceData.h0Textures[0].width, instanceData.h0Textures[0].height)\r\n );\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer2);\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n /** @internal */\r\n private ifft2(): void {\r\n const device = Application.instance.device;\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n const phases = Math.log2(this._params.resolution);\r\n const pingPongTextures: [Texture2D[] | Texture2DArray, Texture2D[] | Texture2DArray] = [\r\n instanceData.spectrumTextures,\r\n instanceData.pingpongTextures\r\n ];\r\n const pingPongFramebuffers: [FrameBuffer | Texture2DArray, FrameBuffer | Texture2DArray] = this\r\n ._useComputeShader\r\n ? [instanceData.pingpongTextures as Texture2DArray, instanceData.spectrumTextures as Texture2DArray]\r\n : [instanceData.pingpongFramebuffer, instanceData.spectrumFramebuffer];\r\n const butterflyTex = this.getButterflyTexture(this._params.resolution);\r\n\r\n let pingPong = 0;\r\n\r\n // horizontal ifft\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2hProgram);\r\n device.setBindGroup(0, this._fft2hBindGroup);\r\n this._fft2hBindGroup.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n for (let phase = 0; phase < phases; phase++) {\r\n this._fft2hBindGroup.setValue('phase', phase);\r\n if (this._useComputeShader) {\r\n this._fft2hBindGroup.setTexture(\r\n 'spectrum',\r\n pingPongTextures[pingPong] as Texture2DArray,\r\n nearestRepeatSampler\r\n );\r\n this._fft2hBindGroup.setTexture('ifft', pingPongFramebuffers[pingPong] as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(pingPongFramebuffers[pingPong] as FrameBuffer);\r\n this._fft2hBindGroup.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n this._fft2hBindGroup.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n this._fft2hBindGroup.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n this._fft2hBindGroup.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n this._fft2hBindGroup.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n this._fft2hBindGroup.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._fft2hBindGroup.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n pingPong = 1 - pingPong; //(pingPong + 1) % 2;\r\n }\r\n // vertical ifft\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2vProgram);\r\n device.setBindGroup(0, this._fft2vBindGroup);\r\n this._fft2vBindGroup.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n for (let phase = 0; phase < phases; phase++) {\r\n this._fft2vBindGroup.setValue('phase', phase);\r\n if (this._useComputeShader) {\r\n this._fft2vBindGroup.setTexture(\r\n 'spectrum',\r\n pingPongTextures[pingPong] as Texture2DArray,\r\n nearestRepeatSampler\r\n );\r\n this._fft2vBindGroup.setTexture('ifft', pingPongFramebuffers[pingPong] as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(pingPongFramebuffers[pingPong] as FrameBuffer);\r\n this._fft2vBindGroup.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n this._fft2vBindGroup.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n this._fft2vBindGroup.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n this._fft2vBindGroup.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n this._fft2vBindGroup.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n this._fft2vBindGroup.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._fft2vBindGroup.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n pingPong = 1 - pingPong;\r\n }\r\n this._ifftTextures = pingPongTextures[pingPong];\r\n }\r\n /** @internal */\r\n private getFFT2hBindGroup2(device: AbstractDevice, pingpong: number): BindGroup {\r\n let bindGroup = this._fft2hBindGroup2Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals.programs.fft2hProgram2.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2hBindGroup2Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2hBindGroup4(device: AbstractDevice, pingpong: number): BindGroup {\r\n let bindGroup = this._fft2hBindGroup4Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals.programs.fft2hProgram4.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2hBindGroup4Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2vBindGroup2(device: AbstractDevice, pingpong: number): BindGroup {\r\n let bindGroup = this._fft2vBindGroup2Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals.programs.fft2vProgram2.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2vBindGroup2Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2vBindGroup4(device: AbstractDevice, pingpong: number): BindGroup {\r\n let bindGroup = this._fft2vBindGroup4Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals.programs.fft2vProgram4.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2vBindGroup4Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private ifft2TwoPass(): void {\r\n const device = Application.instance.device;\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n const phases = Math.log2(this._params.resolution);\r\n const pingPongTextures = [\r\n instanceData.spectrumTextures as Texture2D[],\r\n instanceData.pingpongTextures as Texture2D[]\r\n ];\r\n const pingPongFramebuffers4: [FrameBuffer, FrameBuffer] = [\r\n instanceData.pingpongFramebuffer4,\r\n instanceData.spectrumFramebuffer4\r\n ];\r\n const pingPongFramebuffers2: [FrameBuffer, FrameBuffer] = [\r\n instanceData.pingpongFramebuffer2,\r\n instanceData.spectrumFramebuffer2\r\n ];\r\n const butterflyTex = this.getButterflyTexture(this._params.resolution);\r\n\r\n // horizontal ifft\r\n let pingPong = 0;\r\n for (let phase = 0; phase < phases; phase++) {\r\n device.setFramebuffer(pingPongFramebuffers4[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2hProgram4);\r\n const fft2hBindGroup4 = this.getFFT2hBindGroup4(device, pingPong);\r\n device.setBindGroup(0, fft2hBindGroup4);\r\n fft2hBindGroup4.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2hBindGroup4.setValue('phase', phase);\r\n fft2hBindGroup4.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2hBindGroup4.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n device.setFramebuffer(pingPongFramebuffers2[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2hProgram2);\r\n const fft2hBindGroup2 = this.getFFT2hBindGroup2(device, pingPong);\r\n device.setBindGroup(0, fft2hBindGroup2);\r\n fft2hBindGroup2.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2hBindGroup2.setValue('phase', phase);\r\n fft2hBindGroup2.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n fft2hBindGroup2.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2hBindGroup2.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n pingPong = (pingPong + 1) % 2;\r\n }\r\n\r\n // vertical ifft\r\n for (let phase = 0; phase < phases; phase++) {\r\n device.setFramebuffer(pingPongFramebuffers4[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2vProgram4);\r\n const fft2vBindGroup4 = this.getFFT2vBindGroup4(device, pingPong);\r\n device.setBindGroup(0, fft2vBindGroup4);\r\n fft2vBindGroup4.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2vBindGroup4.setValue('phase', phase);\r\n fft2vBindGroup4.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2vBindGroup4.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n device.setFramebuffer(pingPongFramebuffers2[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2vProgram2);\r\n const fft2vBindGroup2 = this.getFFT2vBindGroup2(device, pingPong);\r\n device.setBindGroup(0, fft2vBindGroup2);\r\n fft2vBindGroup2.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2vBindGroup2.setValue('phase', phase);\r\n fft2vBindGroup2.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n fft2vBindGroup2.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2vBindGroup2.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n pingPong = (pingPong + 1) % 2;\r\n }\r\n this._ifftTextures = pingPongTextures[pingPong];\r\n for (let i = 0; i < 2; i++) {\r\n this._fft2hBindGroup2Used[i].push(...this._fft2hBindGroup2Free[i]);\r\n this._fft2hBindGroup2Free[i].length = 0;\r\n this._fft2hBindGroup4Used[i].push(...this._fft2hBindGroup4Free[i]);\r\n this._fft2hBindGroup4Free[i].length = 0;\r\n this._fft2vBindGroup2Used[i].push(...this._fft2vBindGroup2Free[i]);\r\n this._fft2vBindGroup2Free[i].length = 0;\r\n this._fft2vBindGroup4Used[i].push(...this._fft2vBindGroup4Free[i]);\r\n this._fft2vBindGroup4Free[i].length = 0;\r\n }\r\n }\r\n /** @internal */\r\n private postIfft2(): void {\r\n const device = Application.instance.device;\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals.programs.postfft2Program);\r\n device.setBindGroup(0, this._postfft2BindGroup);\r\n this._postfft2BindGroup.setValue('N2', this._params.resolution * this._params.resolution);\r\n if (this._useComputeShader) {\r\n this._postfft2BindGroup.setTexture('output', instanceData.dataTextures as Texture2DArray);\r\n this._postfft2BindGroup.setTexture('ifft', this._ifftTextures as Texture2DArray, nearestRepeatSampler);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer);\r\n this._postfft2BindGroup.setTexture('ifft0', this._ifftTextures[0], nearestRepeatSampler);\r\n this._postfft2BindGroup.setTexture('ifft1', this._ifftTextures[1], nearestRepeatSampler);\r\n this._postfft2BindGroup.setTexture('ifft2', this._ifftTextures[2], nearestRepeatSampler);\r\n this._postfft2BindGroup.setTexture('ifft3', this._ifftTextures[3], nearestRepeatSampler);\r\n this._postfft2BindGroup.setTexture('ifft4', this._ifftTextures[4], nearestRepeatSampler);\r\n this._postfft2BindGroup.setTexture('ifft5', this._ifftTextures[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup.setValue(\r\n 'ifftTexSize',\r\n new Vector2(this._ifftTextures[0].width, this._ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private postIfft2TwoPass(): void {\r\n const device = Application.instance.device;\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer4);\r\n device.setProgram(FFTWaveGenerator._globals.programs.postfft2Program4);\r\n device.setBindGroup(0, this._postfft2BindGroup4);\r\n this._postfft2BindGroup4.setValue('N2', this._params.resolution * this._params.resolution);\r\n this._postfft2BindGroup4.setTexture('ifft0', this._ifftTextures[0], nearestRepeatSampler);\r\n this._postfft2BindGroup4.setTexture('ifft1', this._ifftTextures[1], nearestRepeatSampler);\r\n this._postfft2BindGroup4.setTexture('ifft2', this._ifftTextures[2], nearestRepeatSampler);\r\n this._postfft2BindGroup4.setTexture('ifft3', this._ifftTextures[3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup4.setValue(\r\n 'ifftTexSize',\r\n new Vector2(this._ifftTextures[0].width, this._ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer2);\r\n device.setProgram(FFTWaveGenerator._globals.programs.postfft2Program2);\r\n device.setBindGroup(0, this._postfft2BindGroup2);\r\n this._postfft2BindGroup2.setValue('N2', this._params.resolution * this._params.resolution);\r\n this._postfft2BindGroup2.setTexture('ifft4', this._ifftTextures[4], nearestRepeatSampler);\r\n this._postfft2BindGroup2.setTexture('ifft5', this._ifftTextures[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup2.setValue(\r\n 'ifftTexSize',\r\n new Vector2(this._ifftTextures[0].width, this._ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n /** {@inheritDoc WaveGenerator.setupUniforms} */\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number): void {\r\n const pb = scope.$builder;\r\n scope.sizes = pb.vec4().uniform(uniformGroup);\r\n scope.croppinesses = pb.vec4().uniform(uniformGroup);\r\n if (this._useComputeShader) {\r\n scope.dataTexture = pb.tex2DArray().uniform(uniformGroup);\r\n } else {\r\n scope.dx_hy_dz_dxdz0 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz0 = pb.tex2D().uniform(uniformGroup);\r\n scope.dx_hy_dz_dxdz1 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz1 = pb.tex2D().uniform(uniformGroup);\r\n scope.dx_hy_dz_dxdz2 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz2 = pb.tex2D().uniform(uniformGroup);\r\n }\r\n if (pb.shaderKind === 'fragment') {\r\n scope.foamParams = pb.vec2().uniform(uniformGroup);\r\n }\r\n }\r\n /** {@inheritDoc WaveGenerator.calcVertexPositionAndNormal} */\r\n calcVertexPositionAndNormal(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ): void {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'calcPositionAndNormal',\r\n [pb.vec3('inPos'), pb.vec3('outPos').out(), pb.vec3('outNormal').out()],\r\n function () {\r\n this.$l.xz = this.inPos.xz;\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l.a = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv0, 0, 0).rgb,\r\n pb.vec3(this.croppinesses.x, 1, this.croppinesses.x)\r\n );\r\n this.$l.b = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv1, 2, 0).rgb,\r\n pb.vec3(this.croppinesses.y, 1, this.croppinesses.y)\r\n );\r\n this.$l.c = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv2, 4, 0).rgb,\r\n pb.vec3(this.croppinesses.z, 1, this.croppinesses.z)\r\n );\r\n } else {\r\n this.$l.a = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz0, this.uv0, 0).rgb,\r\n pb.vec3(this.croppinesses.x, 1, this.croppinesses.x)\r\n );\r\n this.$l.b = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz1, this.uv1, 0).rgb,\r\n pb.vec3(this.croppinesses.y, 1, this.croppinesses.y)\r\n );\r\n this.$l.c = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz2, this.uv2, 0).rgb,\r\n pb.vec3(this.croppinesses.z, 1, this.croppinesses.z)\r\n );\r\n }\r\n this.$l.displacement = pb.add(this.a, this.b, this.c);\r\n this.outPos = pb.add(this.inPos, this.displacement);\r\n this.outNormal = pb.vec3(0, 1, 0);\r\n }\r\n );\r\n scope.calcPositionAndNormal(inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormal} */\r\n calcFragmentNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcFragmentNormal', [pb.vec2('xz')], function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 1, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 3, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 5, 0);\r\n } else {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz0, this.uv0, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz1, this.uv1, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz2, this.uv2, 0);\r\n }\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n this.$l.slope = pb.vec2(\r\n pb.div(this.sx, pb.add(1.0, this.dxdx_dzdz.x)),\r\n pb.div(this.sz, pb.add(1.0, this.dxdx_dzdz.y))\r\n );\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.slope.x), 1.0, pb.neg(this.slope.y)));\r\n this.$return(this.normal);\r\n });\r\n return scope.calcFragmentNormal(xz);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */\r\n calcFragmentNormalAndFoam(scope: PBInsideFunctionScope, xz: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('jacobian', [pb.float('dxdx'), pb.float('dxdz'), pb.float('dzdz')], function () {\r\n this.$l.Jxx = pb.add(this.dxdx, 1);\r\n this.$l.Jxz = this.dxdz;\r\n this.$l.Jzz = pb.add(this.dzdz, 1);\r\n this.$return(pb.vec4(this.Jxx, this.Jxz, this.Jxz, this.Jzz));\r\n });\r\n pb.func('det', [pb.vec4('jacobian')], function () {\r\n this.$return(\r\n pb.sub(pb.mul(this.jacobian.x, this.jacobian.w), pb.mul(this.jacobian.y, this.jacobian.z))\r\n );\r\n });\r\n pb.func('calcNormalAndFoam', [pb.vec2('xz')], function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 1, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 3, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 5, 0);\r\n } else {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz0, this.uv0, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz1, this.uv1, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz2, this.uv2, 0);\r\n }\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n this.$l.slope = pb.vec2(\r\n pb.div(this.sx, pb.add(1.0, this.dxdx_dzdz.x)),\r\n pb.div(this.sz, pb.add(1.0, this.dxdx_dzdz.y))\r\n );\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.slope.x), 1.0, pb.neg(this.slope.y)));\r\n\r\n // foam\r\n this.$l.dxdx_dzdz0 = this._sx_sz_dxdx_dzdz0.zw;\r\n this.$l.dxdx_dzdz1 = this._sx_sz_dxdx_dzdz1.zw;\r\n this.$l.dxdx_dzdz2 = this._sx_sz_dxdx_dzdz2.zw;\r\n if (that._useComputeShader) {\r\n this.$l.dxdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 0, 0).w;\r\n this.$l.dxdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 2, 0).w;\r\n this.$l.dxdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 4, 0).w;\r\n } else {\r\n this.$l.dxdz0 = pb.textureSampleLevel(this.dx_hy_dz_dxdz0, this.uv0, 0).w;\r\n this.$l.dxdz1 = pb.textureSampleLevel(this.dx_hy_dz_dxdz1, this.uv1, 0).w;\r\n this.$l.dxdz2 = pb.textureSampleLevel(this.dx_hy_dz_dxdz2, this.uv2, 0).w;\r\n }\r\n this.$l.dxdz = pb.add(\r\n pb.mul(this.dxdz0, this.croppinesses.x),\r\n pb.mul(this.dxdz1, this.croppinesses.y),\r\n pb.mul(this.dxdz2, this.croppinesses.z)\r\n );\r\n this.$l.val = this.det(this.jacobian(this.dxdx_dzdz.x, this.dxdz, this.dxdx_dzdz.y));\r\n this.$l.foam = pb.abs(\r\n pb.pow(pb.neg(pb.min(0, pb.sub(this.val, this.foamParams.x))), this.foamParams.y)\r\n );\r\n this.$return(pb.vec4(this.normal, this.foam));\r\n });\r\n return scope.calcNormalAndFoam(xz);\r\n }\r\n /** {@inheritDoc WaveGenerator.isOk} */\r\n isOk(): boolean {\r\n return this._renderMode !== RENDER_NONE;\r\n }\r\n /** {@inheritDoc WaveGenerator.applyWaterBindGroup} */\r\n applyWaterBindGroup(bindGroup: BindGroup): void {\r\n const instanceData = this.getInstanceData();\r\n const linearRepeatSampler = fetchSampler('repeat_linear_nomip');\r\n if (this._useComputeShader) {\r\n bindGroup.setTexture('dataTexture', instanceData.dataTextures as Texture2DArray, linearRepeatSampler);\r\n } else {\r\n bindGroup.setTexture('dx_hy_dz_dxdz0', instanceData.dataTextures[0], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz0', instanceData.dataTextures[1], linearRepeatSampler);\r\n bindGroup.setTexture('dx_hy_dz_dxdz1', instanceData.dataTextures[2], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz1', instanceData.dataTextures[3], linearRepeatSampler);\r\n bindGroup.setTexture('dx_hy_dz_dxdz2', instanceData.dataTextures[4], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz2', instanceData.dataTextures[5], linearRepeatSampler);\r\n }\r\n bindGroup.setValue('foamParams', this._params.foamParams);\r\n bindGroup.setValue('sizes', this._sizes);\r\n bindGroup.setValue('croppinesses', this._croppinesses);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */\r\n calcClipmapTileAABB(minX: number, maxX: number, minZ: number, maxZ: number, y: number, outAABB: AABB) {\r\n const disturb = Math.max(Math.abs(this.wind.x), Math.abs(this.wind.y), 2);\r\n outAABB.minPoint.setXYZ(minX - 8 * disturb, y - 8 * disturb, minZ - 8 * disturb);\r\n outAABB.maxPoint.setXYZ(maxX + 8 * disturb, y + 8 * disturb, maxZ + 8 * disturb);\r\n }\r\n /** {@inheritDoc WaveGenerator.getHash} */\r\n getHash(): string {\r\n return 'FFTWaveGenerator';\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this.disposeInstanceData();\r\n }\r\n}\r\n"],"names":["getDefaultBuildParams","cascades","size","strength","croppiness","minWave","maxWave","resolution","wind","Vector2","alignment","foamParams","randomSeed","RENDER_NONE","RENDER_NORMAL","RENDER_TWO_PASS","THREAD_GROUP_SIZE","FFTWaveGenerator","Disposable","_globals","_useComputeShader","_h0BindGroup","_hkBindGroup","_hkBindGroup2","_hkBindGroup4","_fft2hBindGroup","_fft2vBindGroup","_fft2hBindGroup2Used","_fft2hBindGroup2Free","_fft2hBindGroup4Used","_fft2hBindGroup4Free","_fft2vBindGroup2Used","_fft2vBindGroup2Free","_fft2vBindGroup4Used","_fft2vBindGroup4Free","_postfft2BindGroup","_postfft2BindGroup2","_postfft2BindGroup4","_updateRenderStates","_sizes","_croppinesses","_params","_instanceData","_ifftTextures","_cascades","_paramsChanged","_version","_resolutionChanged","_textureFormat","_h0TextureFormat","_dataTextureFormat","_renderMode","params","device","Application","instance","renderTargetFloat16","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","maxDrawBuffers","framebufferCaps","type","maxSampleBytes","maxColorAttachmentBytesPerSample","programs","h0Program","createProgramH0","hkProgram","createProgramHk","hkProgram2","hkProgram4","fft2hProgram","createProgramFFT2H","fft2hProgram2","fft2hProgram4","fft2vProgram","createProgramFFT2V","fft2vProgram2","fft2vProgram4","postfft2Program","createProgramPostFFT2","postfft2Program2","postfft2Program4","quad","createQuad","noiseTextures","Map","butterflyTextures","createBindGroup","bindGroupLayouts","Vector4","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","paramsChanged","version","clone","val","x","y","foamWidth","foamContrast","getWaveLength","cascade","setWaveLength","length","getWaveStrength","setWaveStrength","getWaveCroppiness","setWaveCroppiness","vertexData","Float32Array","indexData","Uint32Array","prim","Primitive","createAndSetVertexBuffer","createAndSetIndexBuffer","primitiveType","indexStart","indexCount","getButterflyTexture","tex","get","createTexture2D","Math","log2","samplerOptions","mipFilter","name","update","createButterflyTexture","width","height","set","instanceData","getInstanceData","setProgram","setBindGroup","setTexture","getNoiseTexture","fetchSampler","setValue","i","z","PI","w","h0Textures","compute","setFramebuffer","h0Framebuffer","clearFrameBuffer","zero","draw","getNoise2d","rgba","rand","PRNG","array","from","Array","map","reverseBits","v","parseInt","toString","padStart","split","reverse","join","texture","bitReversed","keys","j","k","c","cos","s","sin","span","wing","texel","setXYZW","createNTextures","dataTextures","spectrumTextures","pingpongTextures","createFrameBuffer","spectrumFramebuffer","spectrumFramebuffer2","slice","spectrumFramebuffer4","pingpongFramebuffer","pingpongFramebuffer2","pingpongFramebuffer4","postIfft2Framebuffer","postIfft2Framebuffer2","postIfft2Framebuffer4","format","num","linear","options","minFilter","magFilter","addressU","addressV","writable","createTexture2DArray","index","time","pushDeviceStates","setRenderStates","disposeInstanceData","generateInitialSpectrum","generateSpectrum","ifft2","postIfft2","generateSpectrumTwoPass","ifft2TwoPass","postIfft2TwoPass","popDeviceStates","needUpdate","disposeNTextures","isArray","forEach","dispose","nearestRepeatSampler","phases","pingPongTextures","pingPongFramebuffers","butterflyTex","pingPong","phase","getFFT2hBindGroup2","pingpong","bindGroup","pop","push","getFFT2hBindGroup4","getFFT2vBindGroup2","getFFT2vBindGroup4","pingPongFramebuffers4","pingPongFramebuffers2","fft2hBindGroup4","fft2hBindGroup2","fft2vBindGroup4","fft2vBindGroup2","setupUniforms","scope","uniformGroup","pb","$builder","sizes","vec4","uniform","croppinesses","dataTexture","tex2DArray","dx_hy_dz_dxdz0","tex2D","sx_sz_dxdx_dzdz0","dx_hy_dz_dxdz1","sx_sz_dxdx_dzdz1","dx_hy_dz_dxdz2","sx_sz_dxdx_dzdz2","shaderKind","vec2","calcVertexPositionAndNormal","inPos","outPos","outNormal","that","func","vec3","out","$l","xz","uv0","div","uv1","uv2","a","mul","textureArraySampleLevel","rgb","b","textureSampleLevel","displacement","add","calcPositionAndNormal","calcFragmentNormal","_vertexNormal","_sx_sz_dxdx_dzdz0","_sx_sz_dxdx_dzdz1","_sx_sz_dxdx_dzdz2","sx","sz","dxdx_dzdz","zw","slope","normal","normalize","neg","$return","calcFragmentNormalAndFoam","float","Jxx","dxdx","Jxz","dxdz","Jzz","dzdz","sub","jacobian","dxdx_dzdz0","dxdx_dzdz1","dxdx_dzdz2","dxdz0","dxdz1","dxdz2","det","foam","abs","pow","min","calcNormalAndFoam","isOk","applyWaterBindGroup","linearRepeatSampler","calcClipmapTileAABB","minX","maxX","minZ","maxZ","outAABB","disturb","max","minPoint","setXYZ","maxPoint","getHash","onDispose"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { Application } from '../app/app.js';
2
+
3
+ let quadVertexLayout = null;
4
+ let quadRenderStateSet = null;
5
+ function drawFullscreenQuad(renderStates) {
6
+ const device = Application.instance.device;
7
+ if (!quadVertexLayout) {
8
+ quadVertexLayout = device.createVertexLayout({
9
+ vertexBuffers: [
10
+ {
11
+ buffer: device.createVertexBuffer('position_f32x2', new Float32Array([
12
+ -1,
13
+ -1,
14
+ 1,
15
+ -1,
16
+ -1,
17
+ 1,
18
+ 1,
19
+ 1
20
+ ]))
21
+ }
22
+ ]
23
+ });
24
+ }
25
+ if (!quadRenderStateSet) {
26
+ quadRenderStateSet = device.createRenderStateSet();
27
+ quadRenderStateSet.useRasterizerState().setCullMode('none');
28
+ quadRenderStateSet.useDepthState().enableTest(false).enableWrite(false);
29
+ }
30
+ const saveRenderStateSet = device.getRenderStates();
31
+ device.setRenderStates(renderStates ?? quadRenderStateSet);
32
+ device.setVertexLayout(quadVertexLayout);
33
+ device.draw('triangle-strip', 0, 4);
34
+ device.setRenderStates(saveRenderStateSet);
35
+ }
36
+
37
+ export { drawFullscreenQuad };
38
+ //# sourceMappingURL=fullscreenquad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreenquad.js","sources":["../../../src/render/fullscreenquad.ts"],"sourcesContent":["import type { RenderStateSet, VertexLayout } from '@zephyr3d/device';\r\nimport { Application } from '../app';\r\n\r\nlet quadVertexLayout: VertexLayout = null;\r\nlet quadRenderStateSet: RenderStateSet = null;\r\n\r\nexport function drawFullscreenQuad(renderStates?: RenderStateSet) {\r\n const device = Application.instance.device;\r\n if (!quadVertexLayout) {\r\n quadVertexLayout = device.createVertexLayout({\r\n vertexBuffers: [\r\n {\r\n buffer: device.createVertexBuffer('position_f32x2', new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]))\r\n }\r\n ]\r\n });\r\n }\r\n if (!quadRenderStateSet) {\r\n quadRenderStateSet = device.createRenderStateSet();\r\n quadRenderStateSet.useRasterizerState().setCullMode('none');\r\n quadRenderStateSet.useDepthState().enableTest(false).enableWrite(false);\r\n }\r\n const saveRenderStateSet = device.getRenderStates();\r\n device.setRenderStates(renderStates ?? quadRenderStateSet);\r\n device.setVertexLayout(quadVertexLayout);\r\n device.draw('triangle-strip', 0, 4);\r\n device.setRenderStates(saveRenderStateSet);\r\n}\r\n"],"names":["quadVertexLayout","quadRenderStateSet","drawFullscreenQuad","renderStates","device","Application","instance","createVertexLayout","vertexBuffers","buffer","createVertexBuffer","Float32Array","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","saveRenderStateSet","getRenderStates","setRenderStates","setVertexLayout","draw"],"mappings":";;AAGA,IAAIA,gBAAiC,GAAA,IAAA;AACrC,IAAIC,kBAAqC,GAAA,IAAA;AAElC,SAASC,mBAAmBC,YAA6B,EAAA;AAC9D,IAAA,MAAMC,MAASC,GAAAA,WAAAA,CAAYC,QAAQ,CAACF,MAAM;AAC1C,IAAA,IAAI,CAACJ,gBAAkB,EAAA;QACrBA,gBAAmBI,GAAAA,MAAAA,CAAOG,kBAAkB,CAAC;YAC3CC,aAAe,EAAA;AACb,gBAAA;AACEC,oBAAAA,MAAAA,EAAQL,MAAOM,CAAAA,kBAAkB,CAAC,gBAAA,EAAkB,IAAIC,YAAa,CAAA;wBAAC,EAAC;wBAAG,EAAC;AAAG,wBAAA,CAAA;wBAAG,EAAC;wBAAG,EAAC;AAAG,wBAAA,CAAA;AAAG,wBAAA,CAAA;AAAG,wBAAA;AAAE,qBAAA,CAAA;AACnG;AACD;AACH,SAAA,CAAA;AACF;AACA,IAAA,IAAI,CAACV,kBAAoB,EAAA;AACvBA,QAAAA,kBAAAA,GAAqBG,OAAOQ,oBAAoB,EAAA;QAChDX,kBAAmBY,CAAAA,kBAAkB,EAAGC,CAAAA,WAAW,CAAC,MAAA,CAAA;AACpDb,QAAAA,kBAAAA,CAAmBc,aAAa,EAAGC,CAAAA,UAAU,CAAC,KAAA,CAAA,CAAOC,WAAW,CAAC,KAAA,CAAA;AACnE;IACA,MAAMC,kBAAAA,GAAqBd,OAAOe,eAAe,EAAA;IACjDf,MAAOgB,CAAAA,eAAe,CAACjB,YAAgBF,IAAAA,kBAAAA,CAAAA;AACvCG,IAAAA,MAAAA,CAAOiB,eAAe,CAACrB,gBAAAA,CAAAA;IACvBI,MAAOkB,CAAAA,IAAI,CAAC,gBAAA,EAAkB,CAAG,EAAA,CAAA,CAAA;AACjClB,IAAAA,MAAAA,CAAOgB,eAAe,CAACF,kBAAAA,CAAAA;AACzB;;;;"}