@zephyr3d/scene 0.6.1 → 0.7.1

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 (754) hide show
  1. package/dist/animation/animation.js +142 -31
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +186 -73
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +66 -10
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +40 -20
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/morphtarget.js +20 -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 +186 -0
  14. package/dist/animation/proptrack.js.map +1 -0
  15. package/dist/animation/rotationtrack.js +28 -11
  16. package/dist/animation/rotationtrack.js.map +1 -1
  17. package/dist/animation/scaletrack.js +28 -11
  18. package/dist/animation/scaletrack.js.map +1 -1
  19. package/dist/animation/skeleton.js +238 -82
  20. package/dist/animation/skeleton.js.map +1 -1
  21. package/dist/animation/translationtrack.js +29 -11
  22. package/dist/animation/translationtrack.js.map +1 -1
  23. package/dist/app/api.js +52 -0
  24. package/dist/app/api.js.map +1 -0
  25. package/dist/app/app.js +165 -0
  26. package/dist/app/app.js.map +1 -0
  27. package/dist/app/engine.js +300 -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/screen.js +318 -0
  34. package/dist/app/screen.js.map +1 -0
  35. package/dist/app/scriptingsystem.js +224 -0
  36. package/dist/app/scriptingsystem.js.map +1 -0
  37. package/dist/app/scriptregistry.js +421 -0
  38. package/dist/app/scriptregistry.js.map +1 -0
  39. package/dist/asset/assetmanager.js +823 -321
  40. package/dist/asset/assetmanager.js.map +1 -1
  41. package/dist/asset/builtin.js +12 -48
  42. package/dist/asset/builtin.js.map +1 -1
  43. package/dist/asset/loaders/dds/dds.js +23 -95
  44. package/dist/asset/loaders/dds/dds.js.map +1 -1
  45. package/dist/asset/loaders/dds/dds_loader.js +9 -19
  46. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  47. package/dist/asset/loaders/gltf/gltf_loader.js +50 -48
  48. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  49. package/dist/asset/loaders/gltf/helpers.js +33 -16
  50. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  51. package/dist/asset/loaders/hdr/hdr.js +39 -27
  52. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  53. package/dist/asset/loaders/image/tga_Loader.js +15 -17
  54. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  55. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  56. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  57. package/dist/asset/loaders/loader.js +2 -2
  58. package/dist/asset/loaders/loader.js.map +1 -1
  59. package/dist/asset/model.js +160 -6
  60. package/dist/asset/model.js.map +1 -1
  61. package/dist/blitter/bilateralblur.js +0 -1
  62. package/dist/blitter/bilateralblur.js.map +1 -1
  63. package/dist/blitter/blitter.js +28 -31
  64. package/dist/blitter/blitter.js.map +1 -1
  65. package/dist/blitter/box.js +0 -1
  66. package/dist/blitter/box.js.map +1 -1
  67. package/dist/blitter/copy.js.map +1 -1
  68. package/dist/blitter/gaussianblur.js +23 -23
  69. package/dist/blitter/gaussianblur.js.map +1 -1
  70. package/dist/camera/base.js +139 -34
  71. package/dist/camera/base.js.map +1 -1
  72. package/dist/camera/camera.js +760 -172
  73. package/dist/camera/camera.js.map +1 -1
  74. package/dist/camera/fps.js +21 -27
  75. package/dist/camera/fps.js.map +1 -1
  76. package/dist/camera/orbit.js +134 -59
  77. package/dist/camera/orbit.js.map +1 -1
  78. package/dist/camera/orthocamera.js +52 -21
  79. package/dist/camera/orthocamera.js.map +1 -1
  80. package/dist/camera/perspectivecamera.js +60 -34
  81. package/dist/camera/perspectivecamera.js.map +1 -1
  82. package/dist/index.d.ts +17031 -6901
  83. package/dist/index.js +60 -21
  84. package/dist/index.js.map +1 -1
  85. package/dist/material/blinn.js +5 -0
  86. package/dist/material/blinn.js.map +1 -1
  87. package/dist/material/grassmaterial.js +6 -1
  88. package/dist/material/grassmaterial.js.map +1 -1
  89. package/dist/material/lambert.js +6 -1
  90. package/dist/material/lambert.js.map +1 -1
  91. package/dist/material/material.js +356 -77
  92. package/dist/material/material.js.map +1 -1
  93. package/dist/material/meshmaterial.js +505 -162
  94. package/dist/material/meshmaterial.js.map +1 -1
  95. package/dist/material/mixins/albedocolor.js +5 -1
  96. package/dist/material/mixins/albedocolor.js.map +1 -1
  97. package/dist/material/mixins/foliage.js +3 -3
  98. package/dist/material/mixins/foliage.js.map +1 -1
  99. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  100. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  101. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  102. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  103. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +242 -0
  104. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  105. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  106. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  107. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  108. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  109. package/dist/material/mixins/lit.js +19 -7
  110. package/dist/material/mixins/lit.js.map +1 -1
  111. package/dist/material/mixins/pbr/brdf.js +134 -0
  112. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  113. package/dist/material/mixins/pbr/common.js +68 -85
  114. package/dist/material/mixins/pbr/common.js.map +1 -1
  115. package/dist/material/mixins/texture.js +101 -83
  116. package/dist/material/mixins/texture.js.map +1 -1
  117. package/dist/material/mixins/vertexcolor.js +6 -2
  118. package/dist/material/mixins/vertexcolor.js.map +1 -1
  119. package/dist/material/particle.js +272 -0
  120. package/dist/material/particle.js.map +1 -0
  121. package/dist/material/pbrblueprint.js +344 -0
  122. package/dist/material/pbrblueprint.js.map +1 -0
  123. package/dist/material/pbrmr.js +10 -0
  124. package/dist/material/pbrmr.js.map +1 -1
  125. package/dist/material/pbrsg.js +10 -0
  126. package/dist/material/pbrsg.js.map +1 -1
  127. package/dist/material/shader/helper.js +533 -316
  128. package/dist/material/shader/helper.js.map +1 -1
  129. package/dist/material/sprite.js +301 -0
  130. package/dist/material/sprite.js.map +1 -0
  131. package/dist/material/sprite3d.js +301 -0
  132. package/dist/material/sprite3d.js.map +1 -0
  133. package/dist/material/sprite3d_std.js +116 -0
  134. package/dist/material/sprite3d_std.js.map +1 -0
  135. package/dist/material/sprite3dblueprint.js +235 -0
  136. package/dist/material/sprite3dblueprint.js.map +1 -0
  137. package/dist/material/sprite_std.js +116 -0
  138. package/dist/material/sprite_std.js.map +1 -0
  139. package/dist/material/spriteblueprint.js +235 -0
  140. package/dist/material/spriteblueprint.js.map +1 -0
  141. package/dist/material/terrain-cm.js +606 -0
  142. package/dist/material/terrain-cm.js.map +1 -0
  143. package/dist/material/terrainmaterial.js +59 -54
  144. package/dist/material/terrainmaterial.js.map +1 -1
  145. package/dist/material/unlit.js +5 -0
  146. package/dist/material/unlit.js.map +1 -1
  147. package/dist/material/water.js +415 -0
  148. package/dist/material/water.js.map +1 -0
  149. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  150. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  151. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  152. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  153. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  154. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  155. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  156. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  157. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  158. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  159. package/dist/posteffect/bloom.js +39 -54
  160. package/dist/posteffect/bloom.js.map +1 -1
  161. package/dist/posteffect/compositor.js +95 -128
  162. package/dist/posteffect/compositor.js.map +1 -1
  163. package/dist/posteffect/fxaa.js +10 -18
  164. package/dist/posteffect/fxaa.js.map +1 -1
  165. package/dist/posteffect/grayscale.js +9 -17
  166. package/dist/posteffect/grayscale.js.map +1 -1
  167. package/dist/posteffect/motionblur.js +105 -0
  168. package/dist/posteffect/motionblur.js.map +1 -0
  169. package/dist/posteffect/posteffect.js +66 -35
  170. package/dist/posteffect/posteffect.js.map +1 -1
  171. package/dist/posteffect/sao.js +13 -21
  172. package/dist/posteffect/sao.js.map +1 -1
  173. package/dist/posteffect/ssr.js +65 -103
  174. package/dist/posteffect/ssr.js.map +1 -1
  175. package/dist/posteffect/taa.js +175 -0
  176. package/dist/posteffect/taa.js.map +1 -0
  177. package/dist/posteffect/tonemap.js +12 -20
  178. package/dist/posteffect/tonemap.js.map +1 -1
  179. package/dist/render/abuffer_oit.js +38 -25
  180. package/dist/render/abuffer_oit.js.map +1 -1
  181. package/dist/render/clipmap.js +424 -106
  182. package/dist/render/clipmap.js.map +1 -1
  183. package/dist/render/cluster_light.js +11 -9
  184. package/dist/render/cluster_light.js.map +1 -1
  185. package/dist/render/cull_visitor.js +51 -13
  186. package/dist/render/cull_visitor.js.map +1 -1
  187. package/dist/render/depthpass.js +15 -7
  188. package/dist/render/depthpass.js.map +1 -1
  189. package/dist/render/drawable.js +15 -0
  190. package/dist/render/drawable.js.map +1 -0
  191. package/dist/render/drawable_mixin.js +121 -44
  192. package/dist/render/drawable_mixin.js.map +1 -1
  193. package/dist/render/envlight.js +86 -141
  194. package/dist/render/envlight.js.map +1 -1
  195. package/dist/render/fbm_wavegenerator.js +236 -0
  196. package/dist/render/fbm_wavegenerator.js.map +1 -0
  197. package/dist/render/fft_wavegenerator.js +131 -114
  198. package/dist/render/fft_wavegenerator.js.map +1 -1
  199. package/dist/render/fullscreenquad.js +2 -2
  200. package/dist/render/fullscreenquad.js.map +1 -1
  201. package/dist/render/gerstner_wavegenerator.js +100 -48
  202. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  203. package/dist/render/globalbindgroup_allocator.js +7 -3
  204. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  205. package/dist/render/hzb.js +7 -5
  206. package/dist/render/hzb.js.map +1 -1
  207. package/dist/render/lightpass.js +28 -27
  208. package/dist/render/lightpass.js.map +1 -1
  209. package/dist/render/objectcolorpass.js +6 -9
  210. package/dist/render/objectcolorpass.js.map +1 -1
  211. package/dist/render/primitive.js +213 -105
  212. package/dist/render/primitive.js.map +1 -1
  213. package/dist/render/render_queue.js +49 -24
  214. package/dist/render/render_queue.js.map +1 -1
  215. package/dist/render/renderbundle_wrapper.js +65 -15
  216. package/dist/render/renderbundle_wrapper.js.map +1 -1
  217. package/dist/render/renderer.js +324 -189
  218. package/dist/render/renderer.js.map +1 -1
  219. package/dist/render/renderpass.js +43 -84
  220. package/dist/render/renderpass.js.map +1 -1
  221. package/dist/render/rendertarget.js +5 -0
  222. package/dist/render/rendertarget.js.map +1 -0
  223. package/dist/render/screenrendertarget.js +56 -0
  224. package/dist/render/screenrendertarget.js.map +1 -0
  225. package/dist/render/shadowmap_pass.js +5 -6
  226. package/dist/render/shadowmap_pass.js.map +1 -1
  227. package/dist/render/sky.js +867 -542
  228. package/dist/render/sky.js.map +1 -1
  229. package/dist/render/weightedblended_oit.js +13 -15
  230. package/dist/render/weightedblended_oit.js.map +1 -1
  231. package/dist/scene/basesprite.js +296 -0
  232. package/dist/scene/basesprite.js.map +1 -0
  233. package/dist/scene/batchgroup.js +22 -7
  234. package/dist/scene/batchgroup.js.map +1 -1
  235. package/dist/scene/environment.js +78 -49
  236. package/dist/scene/environment.js.map +1 -1
  237. package/dist/scene/graph_node.js +2 -3
  238. package/dist/scene/graph_node.js.map +1 -1
  239. package/dist/scene/light.js +49 -92
  240. package/dist/scene/light.js.map +1 -1
  241. package/dist/scene/mesh.js +298 -89
  242. package/dist/scene/mesh.js.map +1 -1
  243. package/dist/scene/octree.js +371 -162
  244. package/dist/scene/octree.js.map +1 -1
  245. package/dist/scene/particlesys.js +687 -0
  246. package/dist/scene/particlesys.js.map +1 -0
  247. package/dist/scene/raycast_visitor.js +26 -13
  248. package/dist/scene/raycast_visitor.js.map +1 -1
  249. package/dist/scene/scene.js +312 -85
  250. package/dist/scene/scene.js.map +1 -1
  251. package/dist/scene/scene_node.js +663 -105
  252. package/dist/scene/scene_node.js.map +1 -1
  253. package/dist/scene/sprite.js +18 -0
  254. package/dist/scene/sprite.js.map +1 -0
  255. package/dist/scene/sprite3d.js +18 -0
  256. package/dist/scene/sprite3d.js.map +1 -0
  257. package/dist/scene/terrain/grass.js +48 -49
  258. package/dist/scene/terrain/grass.js.map +1 -1
  259. package/dist/scene/terrain/heightfield.js +46 -44
  260. package/dist/scene/terrain/heightfield.js.map +1 -1
  261. package/dist/scene/terrain/patch.js +20 -29
  262. package/dist/scene/terrain/patch.js.map +1 -1
  263. package/dist/scene/terrain/quadtree.js +58 -27
  264. package/dist/scene/terrain/quadtree.js.map +1 -1
  265. package/dist/scene/terrain/terrain.js +31 -45
  266. package/dist/scene/terrain/terrain.js.map +1 -1
  267. package/dist/scene/terrain-cm/grass.js +604 -0
  268. package/dist/scene/terrain-cm/grass.js.map +1 -0
  269. package/dist/scene/terrain-cm/grassmaterial.js +162 -0
  270. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  271. package/dist/scene/terrain-cm/terrain-cm.js +550 -0
  272. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  273. package/dist/scene/water.js +383 -0
  274. package/dist/scene/water.js.map +1 -0
  275. package/dist/shaders/atmosphere.js +945 -0
  276. package/dist/shaders/atmosphere.js.map +1 -0
  277. package/dist/shaders/fog.js +116 -0
  278. package/dist/shaders/fog.js.map +1 -0
  279. package/dist/shaders/misc.js.map +1 -1
  280. package/dist/shaders/noise.js +217 -8
  281. package/dist/shaders/noise.js.map +1 -1
  282. package/dist/shaders/pbr.js.map +1 -1
  283. package/dist/shaders/shadow.js +8 -8
  284. package/dist/shaders/shadow.js.map +1 -1
  285. package/dist/shaders/ssr.js +87 -39
  286. package/dist/shaders/ssr.js.map +1 -1
  287. package/dist/shaders/temporal.js +216 -0
  288. package/dist/shaders/temporal.js.map +1 -0
  289. package/dist/shaders/water.js +42 -20
  290. package/dist/shaders/water.js.map +1 -1
  291. package/dist/shadow/esm.js +32 -14
  292. package/dist/shadow/esm.js.map +1 -1
  293. package/dist/shadow/pcf_opt.js +12 -13
  294. package/dist/shadow/pcf_opt.js.map +1 -1
  295. package/dist/shadow/pcf_pd.js +12 -13
  296. package/dist/shadow/pcf_pd.js.map +1 -1
  297. package/dist/shadow/shader.js +40 -0
  298. package/dist/shadow/shader.js.map +1 -0
  299. package/dist/shadow/shadow_impl.js.map +1 -1
  300. package/dist/shadow/shadowmapper.js +73 -44
  301. package/dist/shadow/shadowmapper.js.map +1 -1
  302. package/dist/shadow/ssm.js +15 -16
  303. package/dist/shadow/ssm.js.map +1 -1
  304. package/dist/shadow/vsm.js +33 -16
  305. package/dist/shadow/vsm.js.map +1 -1
  306. package/dist/shapes/box.js +187 -83
  307. package/dist/shapes/box.js.map +1 -1
  308. package/dist/shapes/cylinder.js +101 -43
  309. package/dist/shapes/cylinder.js.map +1 -1
  310. package/dist/shapes/plane.js +70 -29
  311. package/dist/shapes/plane.js.map +1 -1
  312. package/dist/shapes/shape.js +121 -17
  313. package/dist/shapes/shape.js.map +1 -1
  314. package/dist/shapes/sphere.js +78 -44
  315. package/dist/shapes/sphere.js.map +1 -1
  316. package/dist/shapes/tetrahedron.js +255 -0
  317. package/dist/shapes/tetrahedron.js.map +1 -0
  318. package/dist/shapes/torus.js +76 -55
  319. package/dist/shapes/torus.js.map +1 -1
  320. package/dist/src/animation/animation.js +127 -0
  321. package/dist/src/animation/animation.js.map +1 -0
  322. package/dist/src/animation/animationset.js +255 -0
  323. package/dist/src/animation/animationset.js.map +1 -0
  324. package/dist/src/animation/animationtrack.js +34 -0
  325. package/dist/src/animation/animationtrack.js.map +1 -0
  326. package/dist/src/animation/eulerrotationtrack.js +52 -0
  327. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  328. package/dist/src/animation/morphtarget.js +93 -0
  329. package/dist/src/animation/morphtarget.js.map +1 -0
  330. package/dist/src/animation/morphtrack.js +70 -0
  331. package/dist/src/animation/morphtrack.js.map +1 -0
  332. package/dist/src/animation/proptrack.js +161 -0
  333. package/dist/src/animation/proptrack.js.map +1 -0
  334. package/dist/src/animation/rotationtrack.js +51 -0
  335. package/dist/src/animation/rotationtrack.js.map +1 -0
  336. package/dist/src/animation/scaletrack.js +50 -0
  337. package/dist/src/animation/scaletrack.js.map +1 -0
  338. package/dist/src/animation/skeleton.js +204 -0
  339. package/dist/src/animation/skeleton.js.map +1 -0
  340. package/dist/src/animation/translationtrack.js +50 -0
  341. package/dist/src/animation/translationtrack.js.map +1 -0
  342. package/dist/{app.js → src/app/app.js} +18 -40
  343. package/dist/src/app/app.js.map +1 -0
  344. package/dist/{input → src/app}/inputmgr.js +41 -16
  345. package/dist/src/app/inputmgr.js.map +1 -0
  346. package/dist/src/asset/assetmanager.js +404 -0
  347. package/dist/src/asset/assetmanager.js.map +1 -0
  348. package/dist/src/asset/builtin.js +337 -0
  349. package/dist/src/asset/builtin.js.map +1 -0
  350. package/dist/src/asset/loaders/dds/dds.js +470 -0
  351. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  352. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  353. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  354. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  355. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  356. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  357. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  358. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  359. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  360. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  361. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  362. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  363. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  364. package/dist/src/asset/loaders/loader.js +45 -0
  365. package/dist/src/asset/loaders/loader.js.map +1 -0
  366. package/dist/src/asset/model.js +414 -0
  367. package/dist/src/asset/model.js.map +1 -0
  368. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  369. package/dist/src/blitter/bilateralblur.js.map +1 -0
  370. package/dist/src/blitter/blitter.js +390 -0
  371. package/dist/src/blitter/blitter.js.map +1 -0
  372. package/dist/src/blitter/box.js +118 -0
  373. package/dist/src/blitter/box.js.map +1 -0
  374. package/dist/src/blitter/copy.js +22 -0
  375. package/dist/src/blitter/copy.js.map +1 -0
  376. package/dist/src/blitter/gaussianblur.js +228 -0
  377. package/dist/src/blitter/gaussianblur.js.map +1 -0
  378. package/dist/src/camera/base.js +92 -0
  379. package/dist/src/camera/base.js.map +1 -0
  380. package/dist/src/camera/camera.js +1005 -0
  381. package/dist/src/camera/camera.js.map +1 -0
  382. package/dist/src/camera/fps.js +238 -0
  383. package/dist/src/camera/fps.js.map +1 -0
  384. package/dist/src/camera/orbit.js +245 -0
  385. package/dist/src/camera/orbit.js.map +1 -0
  386. package/dist/src/camera/orthocamera.js +167 -0
  387. package/dist/src/camera/orthocamera.js.map +1 -0
  388. package/dist/src/camera/perspectivecamera.js +141 -0
  389. package/dist/src/camera/perspectivecamera.js.map +1 -0
  390. package/dist/src/index.js +120 -0
  391. package/dist/src/index.js.map +1 -0
  392. package/dist/src/material/blinn.js +81 -0
  393. package/dist/src/material/blinn.js.map +1 -0
  394. package/dist/src/material/grassmaterial.js +113 -0
  395. package/dist/src/material/grassmaterial.js.map +1 -0
  396. package/dist/src/material/lambert.js +92 -0
  397. package/dist/src/material/lambert.js.map +1 -0
  398. package/dist/src/material/material.js +301 -0
  399. package/dist/src/material/material.js.map +1 -0
  400. package/dist/src/material/meshmaterial.js +704 -0
  401. package/dist/src/material/meshmaterial.js.map +1 -0
  402. package/dist/src/material/mixins/albedocolor.js +76 -0
  403. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  404. package/dist/src/material/mixins/foliage.js +47 -0
  405. package/dist/src/material/mixins/foliage.js.map +1 -0
  406. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  407. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  408. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  409. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  410. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  411. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  412. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  413. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  414. package/dist/src/material/mixins/lit.js +476 -0
  415. package/dist/src/material/mixins/lit.js.map +1 -0
  416. package/dist/src/material/mixins/pbr/common.js +918 -0
  417. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  418. package/dist/src/material/mixins/texture.js +172 -0
  419. package/dist/src/material/mixins/texture.js.map +1 -0
  420. package/dist/src/material/mixins/vertexcolor.js +56 -0
  421. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  422. package/dist/src/material/particle.js +178 -0
  423. package/dist/src/material/particle.js.map +1 -0
  424. package/dist/src/material/pbrmr.js +97 -0
  425. package/dist/src/material/pbrmr.js.map +1 -0
  426. package/dist/src/material/pbrsg.js +97 -0
  427. package/dist/src/material/pbrsg.js.map +1 -0
  428. package/dist/src/material/shader/helper.js +1209 -0
  429. package/dist/src/material/shader/helper.js.map +1 -0
  430. package/dist/src/material/terrain-cm.js +606 -0
  431. package/dist/src/material/terrain-cm.js.map +1 -0
  432. package/dist/src/material/terrainmaterial.js +375 -0
  433. package/dist/src/material/terrainmaterial.js.map +1 -0
  434. package/dist/src/material/unlit.js +41 -0
  435. package/dist/src/material/unlit.js.map +1 -0
  436. package/dist/src/material/water.js +417 -0
  437. package/dist/src/material/water.js.map +1 -0
  438. package/dist/src/posteffect/bloom.js +361 -0
  439. package/dist/src/posteffect/bloom.js.map +1 -0
  440. package/dist/src/posteffect/compositor.js +226 -0
  441. package/dist/src/posteffect/compositor.js.map +1 -0
  442. package/dist/src/posteffect/fxaa.js +273 -0
  443. package/dist/src/posteffect/fxaa.js.map +1 -0
  444. package/dist/src/posteffect/grayscale.js +69 -0
  445. package/dist/src/posteffect/grayscale.js.map +1 -0
  446. package/dist/src/posteffect/motionblur.js +96 -0
  447. package/dist/src/posteffect/motionblur.js.map +1 -0
  448. package/dist/src/posteffect/posteffect.js +126 -0
  449. package/dist/src/posteffect/posteffect.js.map +1 -0
  450. package/dist/src/posteffect/sao.js +324 -0
  451. package/dist/src/posteffect/sao.js.map +1 -0
  452. package/dist/src/posteffect/ssr.js +489 -0
  453. package/dist/src/posteffect/ssr.js.map +1 -0
  454. package/dist/src/posteffect/taa.js +172 -0
  455. package/dist/src/posteffect/taa.js.map +1 -0
  456. package/dist/src/posteffect/tonemap.js +94 -0
  457. package/dist/src/posteffect/tonemap.js.map +1 -0
  458. package/dist/src/render/abuffer_oit.js +361 -0
  459. package/dist/src/render/abuffer_oit.js.map +1 -0
  460. package/dist/src/render/clipmap.js +851 -0
  461. package/dist/src/render/clipmap.js.map +1 -0
  462. package/dist/src/render/cluster_light.js +333 -0
  463. package/dist/src/render/cluster_light.js.map +1 -0
  464. package/dist/src/render/cull_visitor.js +187 -0
  465. package/dist/src/render/cull_visitor.js.map +1 -0
  466. package/dist/src/render/depthpass.js +68 -0
  467. package/dist/src/render/depthpass.js.map +1 -0
  468. package/dist/src/render/drawable_mixin.js +227 -0
  469. package/dist/src/render/drawable_mixin.js.map +1 -0
  470. package/dist/src/render/envlight.js +463 -0
  471. package/dist/src/render/envlight.js.map +1 -0
  472. package/dist/src/render/fbm_wavegenerator.js +251 -0
  473. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  474. package/dist/src/render/fft_wavegenerator.js +1006 -0
  475. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  476. package/dist/src/render/fullscreenquad.js +38 -0
  477. package/dist/src/render/fullscreenquad.js.map +1 -0
  478. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  479. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  480. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  481. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  482. package/dist/src/render/hzb.js +273 -0
  483. package/dist/src/render/hzb.js.map +1 -0
  484. package/dist/src/render/lightpass.js +172 -0
  485. package/dist/src/render/lightpass.js.map +1 -0
  486. package/dist/src/render/objectcolorpass.js +51 -0
  487. package/dist/src/render/objectcolorpass.js.map +1 -0
  488. package/dist/src/render/primitive.js +364 -0
  489. package/dist/src/render/primitive.js.map +1 -0
  490. package/dist/src/render/render_queue.js +467 -0
  491. package/dist/src/render/render_queue.js.map +1 -0
  492. package/dist/src/render/renderbundle_wrapper.js +152 -0
  493. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  494. package/dist/src/render/renderer.js +455 -0
  495. package/dist/src/render/renderer.js.map +1 -0
  496. package/dist/src/render/renderpass.js +200 -0
  497. package/dist/src/render/renderpass.js.map +1 -0
  498. package/dist/src/render/shadowmap_pass.js +56 -0
  499. package/dist/src/render/shadowmap_pass.js.map +1 -0
  500. package/dist/src/render/sky.js +1103 -0
  501. package/dist/src/render/sky.js.map +1 -0
  502. package/dist/src/render/weightedblended_oit.js +168 -0
  503. package/dist/src/render/weightedblended_oit.js.map +1 -0
  504. package/dist/src/scene/batchgroup.js +162 -0
  505. package/dist/src/scene/batchgroup.js.map +1 -0
  506. package/dist/src/scene/environment.js +209 -0
  507. package/dist/src/scene/environment.js.map +1 -0
  508. package/dist/src/scene/graph_node.js +72 -0
  509. package/dist/src/scene/graph_node.js.map +1 -0
  510. package/dist/src/scene/light.js +416 -0
  511. package/dist/src/scene/light.js.map +1 -0
  512. package/dist/src/scene/mesh.js +341 -0
  513. package/dist/src/scene/mesh.js.map +1 -0
  514. package/dist/src/scene/octree.js +649 -0
  515. package/dist/src/scene/octree.js.map +1 -0
  516. package/dist/src/scene/particlesys.js +738 -0
  517. package/dist/src/scene/particlesys.js.map +1 -0
  518. package/dist/src/scene/raycast_visitor.js +103 -0
  519. package/dist/src/scene/raycast_visitor.js.map +1 -0
  520. package/dist/src/scene/scene.js +284 -0
  521. package/dist/src/scene/scene.js.map +1 -0
  522. package/dist/src/scene/scene_node.js +732 -0
  523. package/dist/src/scene/scene_node.js.map +1 -0
  524. package/dist/src/scene/terrain/grass.js +278 -0
  525. package/dist/src/scene/terrain/grass.js.map +1 -0
  526. package/dist/src/scene/terrain/heightfield.js +475 -0
  527. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  528. package/dist/src/scene/terrain/patch.js +530 -0
  529. package/dist/src/scene/terrain/patch.js.map +1 -0
  530. package/dist/src/scene/terrain/quadtree.js +461 -0
  531. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  532. package/dist/src/scene/terrain/terrain.js +246 -0
  533. package/dist/src/scene/terrain/terrain.js.map +1 -0
  534. package/dist/src/scene/terrain-cm/grass.js +594 -0
  535. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  536. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  537. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  538. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  539. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  540. package/dist/src/scene/water.js +374 -0
  541. package/dist/src/scene/water.js.map +1 -0
  542. package/dist/src/shaders/atmosphere.js +957 -0
  543. package/dist/src/shaders/atmosphere.js.map +1 -0
  544. package/dist/src/shaders/fog.js +112 -0
  545. package/dist/src/shaders/fog.js.map +1 -0
  546. package/dist/src/shaders/misc.js +266 -0
  547. package/dist/src/shaders/misc.js.map +1 -0
  548. package/dist/src/shaders/noise.js +222 -0
  549. package/dist/src/shaders/noise.js.map +1 -0
  550. package/dist/src/shaders/pbr.js +51 -0
  551. package/dist/src/shaders/pbr.js.map +1 -0
  552. package/dist/src/shaders/shadow.js +636 -0
  553. package/dist/src/shaders/shadow.js.map +1 -0
  554. package/dist/src/shaders/ssr.js +490 -0
  555. package/dist/src/shaders/ssr.js.map +1 -0
  556. package/dist/src/shaders/temporal.js +215 -0
  557. package/dist/src/shaders/temporal.js.map +1 -0
  558. package/dist/src/shaders/water.js +756 -0
  559. package/dist/src/shaders/water.js.map +1 -0
  560. package/dist/src/shadow/esm.js +237 -0
  561. package/dist/src/shadow/esm.js.map +1 -0
  562. package/dist/src/shadow/pcf_opt.js +181 -0
  563. package/dist/src/shadow/pcf_opt.js.map +1 -0
  564. package/dist/src/shadow/pcf_pd.js +189 -0
  565. package/dist/src/shadow/pcf_pd.js.map +1 -0
  566. package/dist/src/shadow/shader.js +37 -0
  567. package/dist/src/shadow/shader.js.map +1 -0
  568. package/dist/src/shadow/shadow_impl.js +15 -0
  569. package/dist/src/shadow/shadow_impl.js.map +1 -0
  570. package/dist/src/shadow/shadowmapper.js +790 -0
  571. package/dist/src/shadow/shadowmapper.js.map +1 -0
  572. package/dist/src/shadow/ssm.js +159 -0
  573. package/dist/src/shadow/ssm.js.map +1 -0
  574. package/dist/src/shadow/vsm.js +297 -0
  575. package/dist/src/shadow/vsm.js.map +1 -0
  576. package/dist/src/shapes/box.js +386 -0
  577. package/dist/src/shapes/box.js.map +1 -0
  578. package/dist/src/shapes/cylinder.js +125 -0
  579. package/dist/src/shapes/cylinder.js.map +1 -0
  580. package/dist/src/shapes/plane.js +88 -0
  581. package/dist/src/shapes/plane.js.map +1 -0
  582. package/dist/src/shapes/shape.js +87 -0
  583. package/dist/src/shapes/shape.js.map +1 -0
  584. package/dist/src/shapes/sphere.js +114 -0
  585. package/dist/src/shapes/sphere.js.map +1 -0
  586. package/dist/src/shapes/tetrahedron.js +188 -0
  587. package/dist/src/shapes/tetrahedron.js.map +1 -0
  588. package/dist/src/shapes/torus.js +111 -0
  589. package/dist/src/shapes/torus.js.map +1 -0
  590. package/dist/src/utility/aabbtree.js +400 -0
  591. package/dist/src/utility/aabbtree.js.map +1 -0
  592. package/dist/src/utility/bounding_volume.js +29 -0
  593. package/dist/src/utility/bounding_volume.js.map +1 -0
  594. package/dist/src/utility/debug.js +28 -0
  595. package/dist/src/utility/debug.js.map +1 -0
  596. package/dist/src/utility/draco/decoder.js +116 -0
  597. package/dist/src/utility/draco/decoder.js.map +1 -0
  598. package/dist/src/utility/misc.js +105 -0
  599. package/dist/src/utility/misc.js.map +1 -0
  600. package/dist/src/utility/panorama.js +163 -0
  601. package/dist/src/utility/panorama.js.map +1 -0
  602. package/dist/src/utility/pmrem.js +354 -0
  603. package/dist/src/utility/pmrem.js.map +1 -0
  604. package/dist/src/utility/rendermipmap.js +115 -0
  605. package/dist/src/utility/rendermipmap.js.map +1 -0
  606. package/dist/src/utility/serialization/json.js +402 -0
  607. package/dist/src/utility/serialization/json.js.map +1 -0
  608. package/dist/src/utility/serialization/manager.js +623 -0
  609. package/dist/src/utility/serialization/manager.js.map +1 -0
  610. package/dist/src/utility/serialization/scene/animation.js +248 -0
  611. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  612. package/dist/src/utility/serialization/scene/batch.js +59 -0
  613. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  614. package/dist/src/utility/serialization/scene/camera.js +790 -0
  615. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  616. package/dist/src/utility/serialization/scene/common.js +222 -0
  617. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  618. package/dist/src/utility/serialization/scene/light.js +575 -0
  619. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  620. package/dist/src/utility/serialization/scene/material.js +1111 -0
  621. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  622. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  623. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  624. package/dist/src/utility/serialization/scene/misc.js +39 -0
  625. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  626. package/dist/src/utility/serialization/scene/node.js +451 -0
  627. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  628. package/dist/src/utility/serialization/scene/particle.js +425 -0
  629. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  630. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  631. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  632. package/dist/src/utility/serialization/scene/scene.js +704 -0
  633. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  634. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  635. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  636. package/dist/src/utility/serialization/scene/water.js +465 -0
  637. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  638. package/dist/src/utility/shprojector.js +297 -0
  639. package/dist/src/utility/shprojector.js.map +1 -0
  640. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  641. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  642. package/dist/src/utility/textures/gradientnoise.js +62 -0
  643. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  644. package/dist/src/utility/textures/randomnoise.js +41 -0
  645. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  646. package/dist/src/values.js +162 -0
  647. package/dist/src/values.js.map +1 -0
  648. package/dist/utility/aabbtree.js +16 -6
  649. package/dist/utility/aabbtree.js.map +1 -1
  650. package/dist/utility/blueprint/common/constants.js +1325 -0
  651. package/dist/utility/blueprint/common/constants.js.map +1 -0
  652. package/dist/utility/blueprint/common/math.js +2507 -0
  653. package/dist/utility/blueprint/common/math.js.map +1 -0
  654. package/dist/utility/blueprint/common.js +7 -0
  655. package/dist/utility/blueprint/common.js.map +1 -0
  656. package/dist/utility/blueprint/material/common.js +7 -0
  657. package/dist/utility/blueprint/material/common.js.map +1 -0
  658. package/dist/utility/blueprint/material/func.js +525 -0
  659. package/dist/utility/blueprint/material/func.js.map +1 -0
  660. package/dist/utility/blueprint/material/inputs.js +1659 -0
  661. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  662. package/dist/utility/blueprint/material/ir.js +1519 -0
  663. package/dist/utility/blueprint/material/ir.js.map +1 -0
  664. package/dist/utility/blueprint/material/pbr.js +450 -0
  665. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  666. package/dist/utility/blueprint/material/texture.js +1116 -0
  667. package/dist/utility/blueprint/material/texture.js.map +1 -0
  668. package/dist/utility/blueprint/node.js +214 -0
  669. package/dist/utility/blueprint/node.js.map +1 -0
  670. package/dist/utility/bounding_volume.js +0 -1
  671. package/dist/utility/bounding_volume.js.map +1 -1
  672. package/dist/utility/debug.js +26 -0
  673. package/dist/utility/debug.js.map +1 -0
  674. package/dist/utility/draco/decoder.js +1 -1
  675. package/dist/utility/draco/decoder.js.map +1 -1
  676. package/dist/utility/misc.js +19 -7
  677. package/dist/utility/misc.js.map +1 -1
  678. package/dist/utility/panorama.js +8 -6
  679. package/dist/utility/panorama.js.map +1 -1
  680. package/dist/utility/pmrem.js +30 -18
  681. package/dist/utility/pmrem.js.map +1 -1
  682. package/dist/utility/rendermipmap.js +116 -0
  683. package/dist/utility/rendermipmap.js.map +1 -0
  684. package/dist/utility/serialization/blueprint/constants.js +255 -0
  685. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  686. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  687. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  688. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  689. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  690. package/dist/utility/serialization/json.js +406 -0
  691. package/dist/utility/serialization/json.js.map +1 -0
  692. package/dist/utility/serialization/manager.js +1243 -0
  693. package/dist/utility/serialization/manager.js.map +1 -0
  694. package/dist/utility/serialization/scene/animation.js +701 -0
  695. package/dist/utility/serialization/scene/animation.js.map +1 -0
  696. package/dist/utility/serialization/scene/batch.js +54 -0
  697. package/dist/utility/serialization/scene/batch.js.map +1 -0
  698. package/dist/utility/serialization/scene/camera.js +896 -0
  699. package/dist/utility/serialization/scene/camera.js.map +1 -0
  700. package/dist/utility/serialization/scene/common.js +298 -0
  701. package/dist/utility/serialization/scene/common.js.map +1 -0
  702. package/dist/utility/serialization/scene/light.js +591 -0
  703. package/dist/utility/serialization/scene/light.js.map +1 -0
  704. package/dist/utility/serialization/scene/material.js +1070 -0
  705. package/dist/utility/serialization/scene/material.js.map +1 -0
  706. package/dist/utility/serialization/scene/mesh.js +345 -0
  707. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  708. package/dist/utility/serialization/scene/misc.js +40 -0
  709. package/dist/utility/serialization/scene/misc.js.map +1 -0
  710. package/dist/utility/serialization/scene/node.js +424 -0
  711. package/dist/utility/serialization/scene/node.js.map +1 -0
  712. package/dist/utility/serialization/scene/particle.js +427 -0
  713. package/dist/utility/serialization/scene/particle.js.map +1 -0
  714. package/dist/utility/serialization/scene/primitive.js +585 -0
  715. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  716. package/dist/utility/serialization/scene/scene.js +764 -0
  717. package/dist/utility/serialization/scene/scene.js.map +1 -0
  718. package/dist/utility/serialization/scene/sprite.js +164 -0
  719. package/dist/utility/serialization/scene/sprite.js.map +1 -0
  720. package/dist/utility/serialization/scene/terrain.js +497 -0
  721. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  722. package/dist/utility/serialization/scene/water.js +467 -0
  723. package/dist/utility/serialization/scene/water.js.map +1 -0
  724. package/dist/utility/serialization/types.js +6 -0
  725. package/dist/utility/serialization/types.js.map +1 -0
  726. package/dist/utility/shprojector.js +313 -0
  727. package/dist/utility/shprojector.js.map +1 -0
  728. package/dist/utility/textures/ggxlut.js +4 -5
  729. package/dist/utility/textures/ggxlut.js.map +1 -1
  730. package/dist/utility/textures/gradientnoise.js +2 -1
  731. package/dist/utility/textures/gradientnoise.js.map +1 -1
  732. package/dist/utility/textures/randomnoise.js +1 -0
  733. package/dist/utility/textures/randomnoise.js.map +1 -1
  734. package/dist/values.js +103 -16
  735. package/dist/values.js.map +1 -1
  736. package/package.json +80 -66
  737. package/dist/app.js.map +0 -1
  738. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  739. package/dist/input/inputmgr.js.map +0 -1
  740. package/dist/material/mixins/ggxlut.js.map +0 -1
  741. package/dist/posteffect/water.js +0 -508
  742. package/dist/posteffect/water.js.map +0 -1
  743. package/dist/render/oit.js +0 -16
  744. package/dist/render/oit.js.map +0 -1
  745. package/dist/render/scatteringlut.js +0 -634
  746. package/dist/render/scatteringlut.js.map +0 -1
  747. package/dist/render/watermesh.js +0 -193
  748. package/dist/render/watermesh.js.map +0 -1
  749. package/dist/render/wavegenerator.js +0 -8
  750. package/dist/render/wavegenerator.js.map +0 -1
  751. package/dist/scene/xform.js +0 -247
  752. package/dist/scene/xform.js.map +0 -1
  753. package/dist/utility/shprojection.js +0 -442
  754. package/dist/utility/shprojection.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.js","sources":["../../../src/camera/camera.ts"],"sourcesContent":["import type { CubeFace } from '@zephyr3d/base';\r\nimport { DRef, Plane, Vector2, Matrix4x4, Frustum, Vector4, Vector3, Ray, halton23 } from '@zephyr3d/base';\r\nimport type { NodeClonable, NodeCloneMethod } from '../scene/scene_node';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport { Application } from '../app';\r\nimport type { Drawable, PickTarget } from '../render/drawable';\r\nimport type { BaseTexture } from '@zephyr3d/device';\r\nimport { Compositor } from '../posteffect/compositor';\r\nimport type { Scene } from '../scene/scene';\r\nimport type { BaseCameraController } from './base';\r\nimport type { OIT } from '../render/oit';\r\nimport { TAA } from '../posteffect/taa';\r\nimport { SSR } from '../posteffect/ssr';\r\nimport { Tonemap } from '../posteffect/tonemap';\r\nimport { FXAA } from '../posteffect/fxaa';\r\nimport { Bloom } from '../posteffect/bloom';\r\nimport { SAO } from '../posteffect/sao';\r\nimport { MotionBlur } from '../posteffect/motionblur';\r\n\r\n/**\r\n * Camera pick result\r\n * @public\r\n */\r\nexport type PickResult = {\r\n distance: number;\r\n intersectedPoint: Vector3;\r\n drawable: Drawable;\r\n target: PickTarget;\r\n};\r\n\r\n/**\r\n * History data of the camera\r\n * @public\r\n */\r\nexport type CameraHistoryData = {\r\n prevColorTex: BaseTexture;\r\n prevMotionVectorTex: BaseTexture;\r\n};\r\n\r\n/**\r\n * The camera node class\r\n * @public\r\n */\r\nexport class Camera extends SceneNode implements NodeClonable<Camera> {\r\n /** @internal */\r\n private static readonly _halton23 = halton23(16);\r\n /** @internal */\r\n private static readonly _historyData: WeakMap<Camera, CameraHistoryData> = new WeakMap();\r\n /** @internal */\r\n protected _projMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _invProjMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _viewMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _viewProjMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _rotationMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _invViewProjMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _clipPlane: Plane;\r\n /** @internal */\r\n protected _controller: BaseCameraController;\r\n /** @internal */\r\n protected _frustum: Frustum;\r\n /** @internal */\r\n protected _frustumV: Frustum;\r\n /** @internal */\r\n protected _dirty: boolean;\r\n /** @internal */\r\n protected _viewport: number[];\r\n /** @internal */\r\n protected _scissor: number[];\r\n /** @internal */\r\n protected _clipMask: number;\r\n /** @internal */\r\n protected _oit: DRef<OIT>;\r\n /** @internal */\r\n protected _depthPrePass: boolean;\r\n /** @internal */\r\n protected _commandBufferReuse: boolean;\r\n /** @internal */\r\n protected _HiZ: boolean;\r\n /** @internal */\r\n protected _toneMap: boolean;\r\n /** @internal */\r\n protected _postEffectTonemap: DRef<Tonemap>;\r\n /** @internal */\r\n protected _tonemapExposure: number;\r\n /** @internal */\r\n protected _motionBlur: boolean;\r\n /** @internal */\r\n protected _postEffectMotionBlur: DRef<MotionBlur>;\r\n /** @internal */\r\n protected _motionBlurStrength: number;\r\n /** @internal */\r\n protected _bloom: boolean;\r\n /** @internal */\r\n protected _postEffectBloom: DRef<Bloom>;\r\n /** @internal */\r\n protected _bloomMaxDownsampleLevels: number;\r\n /** @internal */\r\n protected _bloomDownsampleLimit: number;\r\n /** @internal */\r\n protected _bloomThreshold: number;\r\n /** @internal */\r\n protected _bloomThresholdKnee: number;\r\n /** @internal */\r\n protected _bloomIntensity: number;\r\n /** @internal */\r\n protected _FXAA: boolean;\r\n /** @internal */\r\n protected _postEffectFXAA: DRef<FXAA>;\r\n /** @internal */\r\n protected _TAA: boolean;\r\n /** @internal */\r\n protected _postEffectTAA: DRef<TAA>;\r\n /** @internal */\r\n protected _TAADebug: number;\r\n /** @internal */\r\n protected _SSR: boolean;\r\n /** @internal */\r\n protected _postEffectSSR: DRef<SSR>;\r\n /** @internal */\r\n protected _ssrParams: Vector4;\r\n /** @internal */\r\n protected _ssrMaxRoughness: number;\r\n /** @internal */\r\n protected _ssrRoughnessFactor: number;\r\n /** @internal */\r\n protected _ssrStride: number;\r\n /** @internal */\r\n protected _ssrCalcThickness: boolean;\r\n /** @internal */\r\n protected _ssrBlurriness: number;\r\n /** @internal */\r\n protected _ssrBlurDepthCutoff: number;\r\n /** @internal */\r\n protected _ssrBlurKernelSize: number;\r\n /** @internal */\r\n protected _ssrBlurStdDev: number;\r\n /** @internal */\r\n protected _SSAO: boolean;\r\n /** @internal */\r\n protected _postEffectSSAO: DRef<SAO>;\r\n /** @internal */\r\n protected _SSAOScale: number;\r\n /** @internal */\r\n protected _SSAOBias: number;\r\n /** @internal */\r\n protected _SSAORadius: number;\r\n /** @internal */\r\n protected _SSAOIntensity: number;\r\n /** @internal */\r\n protected _SSAOBlurDepthCutoff: number;\r\n /** @internal */\r\n protected _pickResultPromise: Promise<PickResult>;\r\n /** @internal */\r\n protected _pickResultResolve: (result: PickResult) => void;\r\n /** @internal */\r\n protected _pickPosX: number;\r\n /** @internal */\r\n protected _pickPosY: number;\r\n /** @internal */\r\n protected _pickResult: PickResult;\r\n /** @internal */\r\n protected _jitterValue: Vector2;\r\n /** @internal */\r\n protected _prevJitterValue: Vector2;\r\n /** @internal */\r\n protected _jitteredVPMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _jitteredInvVPMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _prevVPMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _prevPosition: Vector3;\r\n /** @internal */\r\n protected _prevJitteredVPMatrix: Matrix4x4;\r\n /** @internal */\r\n protected _compositor: Compositor;\r\n /**\r\n * Creates a new camera node\r\n *\r\n * @param scene - The scene that the camera belongs to\r\n * @param projectionMatrix - Projection matrix for this camera\r\n */\r\n constructor(scene: Scene, projectionMatrix?: Matrix4x4) {\r\n super(scene);\r\n this._projMatrix = projectionMatrix || Matrix4x4.identity();\r\n this._invProjMatrix = Matrix4x4.invert(this._projMatrix);\r\n this._viewMatrix = Matrix4x4.identity();\r\n this._viewProjMatrix = Matrix4x4.identity();\r\n this._invViewProjMatrix = Matrix4x4.identity();\r\n this._clipPlane = null;\r\n this._dirty = true;\r\n this._controller = null;\r\n this._viewport = null;\r\n this._scissor = null;\r\n this._clipMask = 0;\r\n this._frustum = null;\r\n this._frustumV = null;\r\n this._oit = new DRef();\r\n this._depthPrePass = false;\r\n this._HiZ = false;\r\n this._toneMap = true;\r\n this._postEffectTonemap = new DRef();\r\n this._tonemapExposure = 1;\r\n this._motionBlur = false;\r\n this._postEffectMotionBlur = new DRef();\r\n this._motionBlurStrength = 1;\r\n this._bloom = false;\r\n this._postEffectBloom = new DRef();\r\n this._bloomMaxDownsampleLevels = 4;\r\n this._bloomDownsampleLimit = 32;\r\n this._bloomThreshold = 0.8;\r\n this._bloomThresholdKnee = 0;\r\n this._bloomIntensity = 1;\r\n this._FXAA = false;\r\n this._postEffectFXAA = new DRef();\r\n this._TAA = false;\r\n this._postEffectTAA = new DRef();\r\n this._TAADebug = 0;\r\n this._SSR = false;\r\n this._postEffectSSR = new DRef();\r\n this._ssrParams = new Vector4(100, 120, 0.5, 0);\r\n this._ssrMaxRoughness = 0.8;\r\n this._ssrRoughnessFactor = 1;\r\n this._ssrStride = 2;\r\n this._ssrCalcThickness = false;\r\n this._ssrBlurriness = 0.05;\r\n this._ssrBlurDepthCutoff = 2;\r\n this._ssrBlurKernelSize = 17;\r\n this._ssrBlurStdDev = 10;\r\n this._SSAO = false;\r\n this._postEffectSSAO = new DRef();\r\n this._SSAOScale = 10;\r\n this._SSAOBias = 1;\r\n this._SSAOIntensity = 0.025;\r\n this._SSAORadius = 100;\r\n this._SSAOBlurDepthCutoff = 2;\r\n this._pickResult = null;\r\n this._commandBufferReuse = true;\r\n this._jitteredVPMatrix = new Matrix4x4();\r\n this._jitteredInvVPMatrix = new Matrix4x4();\r\n this._jitterValue = new Vector2(0, 0);\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n this._pickResultPromise = null;\r\n this._pickResultResolve = null;\r\n this._pickPosX = 0;\r\n this._pickPosY = 0;\r\n this._compositor = new Compositor();\r\n this.updatePostProcessing();\r\n }\r\n clone(method: NodeCloneMethod, recursive: boolean): Camera {\r\n const other = new Camera(this.scene);\r\n other.copyFrom(this, method, recursive);\r\n other.parent = this.parent;\r\n return other;\r\n }\r\n copyFrom(other: this, method: NodeCloneMethod, recursive: boolean): void {\r\n super.copyFrom(other, method, recursive);\r\n this.clipPlane = other.clipPlane ? new Plane(other.clipPlane) : null;\r\n this.HiZ = other.HiZ;\r\n this.toneMap = other.toneMap;\r\n this.toneMapExposure = other.toneMapExposure;\r\n this.bloom = other.bloom;\r\n this.FXAA = other.FXAA;\r\n this.TAA = other.TAA;\r\n this.TAADebug = other.TAADebug;\r\n this.SSR = other.SSR;\r\n this.ssrMaxRoughness = other.ssrMaxRoughness;\r\n this.ssrRoughnessFactor = other.ssrRoughnessFactor;\r\n this.ssrStride = other.ssrStride;\r\n this.ssrMaxDistance = other.ssrMaxDistance;\r\n this.ssrIterations = other.ssrIterations;\r\n this.ssrThickness = other.ssrThickness;\r\n this.ssrCalcThickness = other.ssrCalcThickness;\r\n this.ssrBlurScale = other.ssrBlurScale;\r\n this.ssrBlurDepthCutoff = other.ssrBlurDepthCutoff;\r\n this.ssrBlurKernelSize = other.ssrBlurKernelSize;\r\n this.depthPrePass = other.depthPrePass;\r\n this.commandBufferReuse = other.commandBufferReuse;\r\n this.oit = other.oit;\r\n this.clipMask = other.clipMask;\r\n this.viewport = other.viewport?.slice() ?? null;\r\n this.scissor = other.scissor?.slice() ?? null;\r\n this.setProjectionMatrix(other.getProjectionMatrix());\r\n }\r\n /** Compositor */\r\n get compositor() {\r\n return this._compositor;\r\n }\r\n /** Clip plane in camera space */\r\n get clipPlane(): Plane {\r\n return this._clipPlane;\r\n }\r\n set clipPlane(plane: Plane) {\r\n this._clipPlane = plane;\r\n this._invalidate(false);\r\n }\r\n /**\r\n * Gets whether Hi-Z acceleration is enabled.\r\n * When enabled, it can significantly improve SSR performance with minimal quality impact.\r\n */\r\n get HiZ(): boolean {\r\n return this._HiZ;\r\n }\r\n set HiZ(val: boolean) {\r\n this._HiZ = !!val;\r\n }\r\n /**\r\n * Gets whether Tonemap is enabled.\r\n */\r\n get toneMap(): boolean {\r\n return this._postEffectTonemap.get().enabled;\r\n }\r\n set toneMap(val: boolean) {\r\n this._postEffectTonemap.get().enabled = !!val;\r\n }\r\n /**\r\n * Gets whether motion blur is enabled\r\n */\r\n get motionBlur(): boolean {\r\n return this._postEffectMotionBlur.get().enabled;\r\n }\r\n set motionBlur(val: boolean) {\r\n this._postEffectMotionBlur.get().enabled = !!val;\r\n }\r\n /** Motion blur strength */\r\n get motionBlurStrength(): number {\r\n return this._motionBlurStrength;\r\n }\r\n set motionBlurStrength(val: number) {\r\n this._motionBlurStrength = val;\r\n if (this._postEffectMotionBlur.get()) {\r\n this._postEffectMotionBlur.get().strength = this._motionBlurStrength;\r\n }\r\n }\r\n /**\r\n * Gets whether Bloom is enabled.\r\n */\r\n get bloom(): boolean {\r\n return this._postEffectBloom.get().enabled;\r\n }\r\n set bloom(val: boolean) {\r\n this._postEffectBloom.get().enabled = !!val;\r\n }\r\n /**\r\n * Maximum bloom downsample levels\r\n */\r\n get bloomMaxDownsampleLevels() {\r\n return this._bloomMaxDownsampleLevels;\r\n }\r\n set bloomMaxDownsampleLevels(val: number) {\r\n this._bloomMaxDownsampleLevels = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().maxDownsampleLevel = val;\r\n }\r\n }\r\n /**\r\n * Bloom downsample limit\r\n */\r\n get bloomDownsampleLimit() {\r\n return this._bloomDownsampleLimit;\r\n }\r\n set bloomDownsampleLimit(val: number) {\r\n this._bloomDownsampleLimit = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().downsampleLimit = val;\r\n }\r\n }\r\n /**\r\n * Bloom threshold\r\n */\r\n get bloomThreshold() {\r\n return this._bloomThreshold;\r\n }\r\n set bloomThreshold(val: number) {\r\n this._bloomThreshold = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().threshold = val;\r\n }\r\n }\r\n /**\r\n * Bloom threshold knee\r\n */\r\n get bloomThresholdKnee() {\r\n return this._bloomThresholdKnee;\r\n }\r\n set bloomThresholdKnee(val: number) {\r\n this._bloomThresholdKnee = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().thresholdKnee = val;\r\n }\r\n }\r\n /**\r\n * Bloom intensity\r\n */\r\n get bloomIntensity() {\r\n return this._bloomIntensity;\r\n }\r\n set bloomIntensity(val: number) {\r\n this._bloomIntensity = val;\r\n if (this._postEffectBloom.get()) {\r\n this._postEffectBloom.get().intensity = val;\r\n }\r\n }\r\n /**\r\n * Gets whether FXAA is enabled.\r\n */\r\n get FXAA(): boolean {\r\n return this._postEffectFXAA.get().enabled;\r\n }\r\n set FXAA(val: boolean) {\r\n this._postEffectFXAA.get().enabled = !!val;\r\n }\r\n /**\r\n * Tonemap exposure\r\n */\r\n get toneMapExposure(): number {\r\n return this._tonemapExposure;\r\n }\r\n set toneMapExposure(val: number) {\r\n this._tonemapExposure = val;\r\n if (this._postEffectTonemap.get()) {\r\n this._postEffectTonemap.get().exposure = val;\r\n }\r\n }\r\n /**\r\n * Gets whether TAA is enabled.\r\n */\r\n get TAA(): boolean {\r\n return this._postEffectTAA.get().enabled;\r\n }\r\n set TAA(val: boolean) {\r\n this._postEffectTAA.get().enabled = !!val;\r\n }\r\n /**\r\n * Gets the debug flag for TAA\r\n */\r\n get TAADebug(): number {\r\n return this._TAADebug;\r\n }\r\n set TAADebug(val: number) {\r\n this._TAADebug = val;\r\n }\r\n /**\r\n * Gets whether Screen Space Reflections (SSR) is enabled.\r\n */\r\n get SSR(): boolean {\r\n return this._postEffectSSR.get().enabled;\r\n }\r\n set SSR(val: boolean) {\r\n this._postEffectSSR.get().enabled = !!val;\r\n }\r\n /**\r\n * Gets the maximum roughness value for screen space reflections.\r\n * Controls the cutoff point where surfaces are considered too rough for SSR.\r\n */\r\n get ssrMaxRoughness(): number {\r\n return this._ssrMaxRoughness;\r\n }\r\n set ssrMaxRoughness(val: number) {\r\n this._ssrMaxRoughness = val;\r\n }\r\n /**\r\n * Gets the roughness factor for SSR calculations.\r\n * Affects how surface roughness influences reflection clarity.\r\n */\r\n get ssrRoughnessFactor(): number {\r\n return this._ssrRoughnessFactor;\r\n }\r\n set ssrRoughnessFactor(val: number) {\r\n this._ssrRoughnessFactor = val;\r\n }\r\n /**\r\n * Gets the stride value for SSR ray marching.\r\n * Controls the step size during ray marching. Larger values improve performance but may miss details.\r\n */\r\n get ssrStride(): number {\r\n return this._ssrStride;\r\n }\r\n set ssrStride(val: number) {\r\n this._ssrStride = val;\r\n }\r\n /**\r\n * Gets the maximum distance for SSR ray marching.\r\n * Defines how far rays will travel when searching for reflection intersections.\r\n */\r\n get ssrMaxDistance(): number {\r\n return this._ssrParams.x;\r\n }\r\n set ssrMaxDistance(val: number) {\r\n this._ssrParams.x = val;\r\n }\r\n /**\r\n * Gets the number of iterations for SSR ray marching.\r\n * Higher values provide more accurate reflections but impact performance.\r\n */\r\n get ssrIterations(): number {\r\n return this._ssrParams.y;\r\n }\r\n set ssrIterations(val: number) {\r\n this._ssrParams.y = val;\r\n }\r\n /**\r\n * Gets the thickness value for SSR calculations.\r\n * Determines the thickness threshold for surfaces when calculating reflections.\r\n */\r\n get ssrThickness(): number {\r\n return this._ssrParams.z;\r\n }\r\n set ssrThickness(val: number) {\r\n this._ssrParams.z = val;\r\n }\r\n /**\r\n * Gets whether SSR should calculate thickness automatically.\r\n * When enabled, the system will dynamically compute surface thickness for reflections.\r\n */\r\n get ssrCalcThickness(): boolean {\r\n return this._ssrCalcThickness;\r\n }\r\n set ssrCalcThickness(val: boolean) {\r\n this._ssrCalcThickness = !!val;\r\n }\r\n /**\r\n * Gets the blur scale factor for SSR.\r\n * Controls the overall intensity of the blur effect applied to reflections.\r\n */\r\n get ssrBlurScale(): number {\r\n return this._ssrBlurriness;\r\n }\r\n set ssrBlurScale(val: number) {\r\n this._ssrBlurriness = val;\r\n }\r\n /**\r\n * Gets the depth cutoff value for SSR blur.\r\n * Determines at what depth difference the blur effect should be reduced or eliminated.\r\n */\r\n get ssrBlurDepthCutoff(): number {\r\n return this._ssrBlurDepthCutoff;\r\n }\r\n set ssrBlurDepthCutoff(val: number) {\r\n this._ssrBlurDepthCutoff = val;\r\n }\r\n /**\r\n * Gets the kernel size for the SSR blur effect.\r\n * Defines the size of the blur kernel. Larger values create softer, more spread-out blur.\r\n */\r\n get ssrBlurKernelSize(): number {\r\n return this._ssrBlurKernelSize;\r\n }\r\n set ssrBlurKernelSize(val: number) {\r\n this._ssrBlurKernelSize = val;\r\n }\r\n /**\r\n * Gets the standard deviation for the SSR Gaussian blur.\r\n * Controls the distribution of the blur effect. Higher values create more pronounced blur.\r\n */\r\n get ssrBlurStdDev(): number {\r\n return this._ssrBlurStdDev;\r\n }\r\n set ssrBlurStdDev(val: number) {\r\n this._ssrBlurStdDev = val;\r\n }\r\n /** @internal */\r\n get ssrParams(): Vector4 {\r\n return this._ssrParams;\r\n }\r\n /**\r\n * Gets whether SSAO is enabled.\r\n */\r\n get SSAO(): boolean {\r\n return this._postEffectSSAO.get().enabled;\r\n }\r\n set SSAO(val: boolean) {\r\n this._postEffectSSAO.get().enabled = !!val;\r\n }\r\n /** SSAO scale */\r\n get SSAOScale() {\r\n return this._SSAOScale;\r\n }\r\n set SSAOScale(val: number) {\r\n this._SSAOScale = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().scale = val;\r\n }\r\n }\r\n /** SSAO bias */\r\n get SSAOBias() {\r\n return this._SSAOBias;\r\n }\r\n set SSAOBias(val: number) {\r\n this._SSAOBias = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().bias = val;\r\n }\r\n }\r\n /** SSAO radius */\r\n get SSAORadius() {\r\n return this._SSAORadius;\r\n }\r\n set SSAORadius(val: number) {\r\n this._SSAORadius = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().radius = val;\r\n }\r\n }\r\n /** SSAO intensity */\r\n get SSAOIntensity() {\r\n return this._SSAOIntensity;\r\n }\r\n set SSAOIntensity(val: number) {\r\n this._SSAOIntensity = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().intensity = val;\r\n }\r\n }\r\n /** SSAO depth cutoff */\r\n get SSAOBlurDepthCutoff() {\r\n return this._SSAOBlurDepthCutoff;\r\n }\r\n set SSAOBlurDepthCutoff(val: number) {\r\n this._SSAOBlurDepthCutoff = val;\r\n if (this._postEffectSSAO.get()) {\r\n this._postEffectSSAO.get().blurDepthCutoff = val;\r\n }\r\n }\r\n /** Whether to perform a depth pass */\r\n get depthPrePass(): boolean {\r\n return this._depthPrePass;\r\n }\r\n set depthPrePass(val: boolean) {\r\n this._depthPrePass = !!val;\r\n }\r\n /** Whether to allow command buffer reuse optimization */\r\n get commandBufferReuse(): boolean {\r\n return this._commandBufferReuse;\r\n }\r\n set commandBufferReuse(val: boolean) {\r\n this._commandBufferReuse = !!val;\r\n }\r\n /** OIT */\r\n get oit(): OIT {\r\n return this._oit.get();\r\n }\r\n set oit(val: OIT) {\r\n this._oit.set(val);\r\n }\r\n /** Clip plane mask */\r\n get clipMask(): number {\r\n return this._clipMask;\r\n }\r\n set clipMask(val: number) {\r\n this._clipMask = val;\r\n }\r\n /** Viewport used for rendering, if null, use full framebuffer size */\r\n get viewport(): number[] {\r\n return this._viewport ? [...this._viewport] : null;\r\n }\r\n set viewport(rect: number[]) {\r\n this._viewport = rect?.slice() ?? null;\r\n }\r\n /** Scissor rectangle used for rendering, if null, use viewport value */\r\n get scissor(): number[] {\r\n return this._scissor ? [...this._scissor] : null;\r\n }\r\n set scissor(rect: number[]) {\r\n this._scissor = rect?.slice() ?? null;\r\n }\r\n /**\r\n * Handle input events\r\n * @param ev - input event object\r\n * @param type - event type, default to ev.type\r\n * @returns Boolean value indicates whether the event was handled.\r\n */\r\n handleEvent(ev: Event, type?: string): boolean {\r\n let handled = false;\r\n if (this._controller) {\r\n type = type ?? ev.type;\r\n if (type === 'pointerdown') {\r\n handled = this._controller.onMouseDown(ev as PointerEvent);\r\n } else if (type === 'pointerup') {\r\n handled = this._controller.onMouseUp(ev as PointerEvent);\r\n } else if (type === 'pointermove') {\r\n handled = this._controller.onMouseMove(ev as PointerEvent);\r\n } else if (type === 'wheel') {\r\n handled = this._controller.onMouseWheel(ev as WheelEvent);\r\n } else if (type === 'keydown') {\r\n handled = this._controller.onKeyDown(ev as KeyboardEvent);\r\n } else if (type === 'keyup') {\r\n handled = this._controller.onKeyUp(ev as KeyboardEvent);\r\n }\r\n if (handled) {\r\n ev.preventDefault();\r\n }\r\n }\r\n return handled;\r\n }\r\n /**\r\n * Constructs a ray based on the given screen coordinates.\r\n *\r\n * @param x - The x-component of the screen coordinates, relative to the top-left corner of the viewport.\r\n * @param y - The y-component of the screen coordinates, relative to the top-left corner of the viewport.\r\n * @returns The ray originating from the camera position and passing through the given screen coordinates.\r\n */\r\n constructRay(x: number, y: number): Ray {\r\n const width = this.viewport ? this.viewport[2] : Application.instance.device.getViewport().width;\r\n const height = this.viewport ? this.viewport[3] : Application.instance.device.getViewport().height;\r\n const ndcX = (2 * x) / width - 1;\r\n const ndcY = 1 - (2 * y) / height;\r\n const nearClip = new Vector4(ndcX, ndcY, 0, 1);\r\n const farClip = new Vector4(ndcX, ndcY, 1, 1);\r\n const nearWorld = this.invViewProjectionMatrix.transform(nearClip);\r\n const farWorld = this.invViewProjectionMatrix.transform(farClip);\r\n if (this.isPerspective()) {\r\n nearWorld.scaleBy(1 / nearWorld.w);\r\n farWorld.scaleBy(1 / farWorld.w);\r\n }\r\n const vEye = this.isPerspective() ? this.getWorldPosition() : nearWorld.xyz();\r\n const vDir = Vector3.sub(farWorld.xyz(), vEye).inplaceNormalize();\r\n return new Ray(vEye, vDir);\r\n }\r\n /**\r\n * Place the camera by specifying the camera position and the target point\r\n * @param eye - The camera position\r\n * @param target - The target point to look at\r\n * @param up - The up vector\r\n * @returns self\r\n */\r\n lookAt(eye: Vector3, target: Vector3, up: Vector3): this {\r\n return this.setLocalTransform(Matrix4x4.lookAt(eye, target, up));\r\n }\r\n /**\r\n * Place the camera to look at a given cube face at a given camera position\r\n * @param face - The cube face to look at\r\n * @param position - The camera position\r\n * @returns self\r\n */\r\n lookAtCubeFace(face: CubeFace, position?: Vector3): this {\r\n return this.setLocalTransform(Matrix4x4.lookAtCubeFace(face, position ?? this.position));\r\n }\r\n /**\r\n * Setup a perspective projection matrix for the camera\r\n * @param fovY - The vertical field of view in radians.\r\n * @param aspect - The aspect ratio\r\n * @param zNear - The near clip plane\r\n * @param zFar - The far clip plane\r\n * @returns self\r\n */\r\n setPerspective(fovY: number, aspect: number, zNear: number, zFar: number): this {\r\n this._projMatrix.perspective(fovY, aspect, zNear, zFar);\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Setup a orthogonal projection matrix for the camera\r\n * @param left - Left bound of the frustum\r\n * @param right - Right bound of the frustum\r\n * @param bottom - Bottom bound of the frustum\r\n * @param top - Top bound of the frustum\r\n * @param near - Near bound of the frustum.\r\n * @param far - Far bound of the frustum.\r\n * @returns self\r\n */\r\n setOrtho(left: number, right: number, bottom: number, top: number, near: number, far: number): this {\r\n this._projMatrix.ortho(left, right, bottom, top, near, far);\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Setup a projection matrix for the camera\r\n * @param matrix - The projection matrix\r\n */\r\n setProjectionMatrix(matrix: Matrix4x4): void {\r\n if (matrix && matrix !== this._projMatrix) {\r\n this._projMatrix = matrix;\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n this._invalidate(true);\r\n }\r\n }\r\n /**\r\n * Gets the projection matrix of the camera\r\n * @returns The projection matrix\r\n */\r\n getProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._projMatrix;\r\n }\r\n /**\r\n * Gets the inverse projection matrix of the camera\r\n * @returns The projection matrix\r\n */\r\n getInvProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._invProjMatrix;\r\n }\r\n getRotationMatrix(): Matrix4x4 {\r\n const rotationMatrix = new Matrix4x4();\r\n this.worldMatrix.decompose(null, rotationMatrix, null);\r\n const xAxis = rotationMatrix.getRow(0).xyz().scaleBy(-1);\r\n const yAxis = rotationMatrix.getRow(1).xyz();\r\n const zAxis = rotationMatrix.getRow(2).xyz().scaleBy(-1);\r\n rotationMatrix.setRow(0, new Vector4(xAxis.x, xAxis.y, xAxis.z, 0));\r\n rotationMatrix.setRow(1, new Vector4(yAxis.x, yAxis.y, yAxis.z, 0));\r\n rotationMatrix.setRow(2, new Vector4(zAxis.x, zAxis.y, zAxis.z, 0));\r\n return rotationMatrix;\r\n }\r\n /**\r\n * View matrix of the camera\r\n *\r\n * @remarks\r\n * Camera's view matrix will transform a point from the world space to the camera space\r\n */\r\n get viewMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._viewMatrix;\r\n }\r\n get viewProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._viewProjMatrix;\r\n }\r\n /**\r\n * The inverse-view-projection matrix of the camera\r\n *\r\n * @remarks\r\n * The inverse-view-projection matrix transforms a point from the clip space to the camera space\r\n */\r\n get invViewProjectionMatrix(): Matrix4x4 {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._invViewProjMatrix;\r\n }\r\n /** Gets the frustum of the camera */\r\n get frustum(): Frustum {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n return this._frustum;\r\n }\r\n get frustumViewSpace(): Frustum {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n this._compute();\r\n }\r\n if (!this._frustumV) {\r\n this._frustumV = new Frustum(this._projMatrix);\r\n }\r\n return this._frustumV;\r\n }\r\n /** The camera controller */\r\n get controller(): BaseCameraController {\r\n return this._controller || null;\r\n }\r\n set controller(controller: BaseCameraController) {\r\n this.setController(controller);\r\n }\r\n /** {@inheritDoc SceneNode.isCamera} */\r\n isCamera(): this is Camera {\r\n return true;\r\n }\r\n /** Gets the near clip plane of the camera */\r\n getNearPlane(): number {\r\n return this.getProjectionMatrix().getNearPlane();\r\n }\r\n /** Gets the far clip plane of the camera */\r\n getFarPlane(): number {\r\n return this.getProjectionMatrix().getFarPlane();\r\n }\r\n /** Gets the vertical field of view of the camera */\r\n getFOV(): number {\r\n return this.getProjectionMatrix().getFov();\r\n }\r\n /** Gets the tangent of half of the vertical field of view */\r\n getTanHalfFovy(): number {\r\n return this.getProjectionMatrix().getTanHalfFov();\r\n }\r\n /** Gets the aspect ratio */\r\n getAspect(): number {\r\n return this.getProjectionMatrix().getAspect();\r\n }\r\n /** Returns true if the camera is perspective */\r\n isPerspective(): boolean {\r\n return this.getProjectionMatrix().isPerspective();\r\n }\r\n /** Returns true if the camera is orthographic */\r\n isOrtho(): boolean {\r\n return this.getProjectionMatrix().isOrtho();\r\n }\r\n /**\r\n * Gets the camera history data which is used in temporal reprojection\r\n * @returns Camera history data\r\n */\r\n getHistoryData(): CameraHistoryData {\r\n let data = Camera._historyData.get(this);\r\n if (!data) {\r\n data = {\r\n prevColorTex: null,\r\n prevMotionVectorTex: null\r\n };\r\n Camera._historyData.set(this, data);\r\n }\r\n return data;\r\n }\r\n /**\r\n * Clears the camera history data which is used in temporal reprojection\r\n */\r\n clearHistoryData() {\r\n const data = Camera._historyData.get(this);\r\n if (data) {\r\n if (data.prevColorTex) {\r\n Application.instance.device.pool.releaseTexture(data.prevColorTex);\r\n }\r\n if (data.prevMotionVectorTex) {\r\n Application.instance.device.pool.releaseTexture(data.prevMotionVectorTex);\r\n }\r\n Camera._historyData.delete(this);\r\n }\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n }\r\n /** @internal */\r\n private updatePostProcessing() {\r\n this._compositor.clear();\r\n if (!this._postEffectSSR.get()) {\r\n const ssr = new SSR();\r\n ssr.enabled = false;\r\n this._postEffectSSR.set(ssr);\r\n this._compositor.appendPostEffect(ssr);\r\n }\r\n if (!this._postEffectSSAO.get()) {\r\n const ssao = new SAO();\r\n ssao.enabled = false;\r\n ssao.scale = this._SSAOScale;\r\n ssao.bias = this._SSAOBias;\r\n ssao.radius = this._SSAORadius;\r\n ssao.intensity = this._SSAOIntensity;\r\n ssao.blurDepthCutoff = this._SSAOBlurDepthCutoff;\r\n this._postEffectSSAO.set(ssao);\r\n this._compositor.appendPostEffect(ssao);\r\n }\r\n if (!this._postEffectTAA.get()) {\r\n const taa = new TAA();\r\n taa.enabled = false;\r\n this._postEffectTAA.set(taa);\r\n this._compositor.appendPostEffect(taa);\r\n }\r\n if (!this._postEffectMotionBlur.get()) {\r\n const motionBlur = new MotionBlur();\r\n motionBlur.enabled = false;\r\n motionBlur.strength = this._motionBlurStrength;\r\n this._postEffectMotionBlur.set(motionBlur);\r\n this._compositor.appendPostEffect(motionBlur);\r\n }\r\n if (!this._postEffectTonemap.get()) {\r\n const tonemap = new Tonemap();\r\n tonemap.enabled = true;\r\n tonemap.exposure = this._tonemapExposure;\r\n this._postEffectTonemap.set(tonemap);\r\n this._compositor.appendPostEffect(tonemap);\r\n }\r\n if (!this._postEffectFXAA.get()) {\r\n const fxaa = new FXAA();\r\n fxaa.enabled = false;\r\n this._postEffectFXAA.set(fxaa);\r\n this._compositor.appendPostEffect(fxaa);\r\n }\r\n if (!this._postEffectBloom.get()) {\r\n const bloom = new Bloom();\r\n bloom.enabled = false;\r\n bloom.maxDownsampleLevel = this._bloomMaxDownsampleLevels;\r\n bloom.downsampleLimit = this._bloomDownsampleLimit;\r\n bloom.threshold = this._bloomThreshold;\r\n bloom.thresholdKnee = this._bloomThresholdKnee;\r\n bloom.intensity = this._bloomIntensity;\r\n this._postEffectBloom.set(bloom);\r\n this._compositor.appendPostEffect(bloom);\r\n }\r\n }\r\n /**\r\n * Renders a scene\r\n * @param scene - The scene to be rendered\r\n * @param compositor - Compositor instance that will be used to apply postprocess effects\r\n */\r\n render(scene: Scene) {\r\n const device = Application.instance.device;\r\n //this.updatePostProcessing(device);\r\n const useMotionVector = (this.TAA || this.motionBlur) && device.type !== 'webgl';\r\n const useTAA = useMotionVector && this.TAA;\r\n scene.dispatchEvent('startrender', scene, this, this._compositor);\r\n if (useMotionVector) {\r\n const width = device.getDrawingBufferWidth();\r\n const height = device.getDrawingBufferHeight();\r\n if (useTAA) {\r\n const halton = Camera._halton23[device.frameInfo.frameCounter % Camera._halton23.length];\r\n this._jitterValue.setXY((halton[0] * 2) / width, (halton[1] * 2) / height);\r\n } else {\r\n this._jitterValue.setXY(0, 0);\r\n }\r\n this._jitteredVPMatrix.set(this.getProjectionMatrix());\r\n this._jitteredVPMatrix[8] += this._jitterValue.x;\r\n this._jitteredVPMatrix[9] += this._jitterValue.y;\r\n this._jitteredVPMatrix.multiplyRight(this.viewMatrix);\r\n Matrix4x4.invert(this._jitteredVPMatrix, this._jitteredInvVPMatrix);\r\n if (!this._prevJitteredVPMatrix) {\r\n this._prevJitteredVPMatrix = new Matrix4x4();\r\n this._prevJitteredVPMatrix.set(this._jitteredVPMatrix);\r\n this._prevJitterValue = new Vector2(this._jitterValue);\r\n }\r\n if (!this._prevVPMatrix) {\r\n this._prevVPMatrix = new Matrix4x4();\r\n this._prevVPMatrix.set(this.viewProjectionMatrix);\r\n this._prevPosition = this.getWorldPosition();\r\n }\r\n } else {\r\n this._jitterValue.setXY(0, 0);\r\n this._prevVPMatrix = null;\r\n this._prevPosition = null;\r\n this._prevJitteredVPMatrix = null;\r\n this._prevJitterValue = null;\r\n this._jitteredInvVPMatrix.set(this.invViewProjectionMatrix);\r\n }\r\n device.pushDeviceStates();\r\n device.reverseVertexWindingOrder(false);\r\n scene.getRenderer().renderScene(scene, this);\r\n device.popDeviceStates();\r\n if (useMotionVector) {\r\n this._prevJitteredVPMatrix.set(this._jitteredVPMatrix);\r\n this._prevJitterValue.set(this._jitterValue);\r\n this._prevVPMatrix.set(this.viewProjectionMatrix);\r\n this._prevPosition = this.getWorldPosition();\r\n }\r\n scene.dispatchEvent('endrender', scene, this, this._compositor);\r\n }\r\n async pickAsync(posX: number, posY: number): Promise<PickResult> {\r\n this._pickPosX = posX;\r\n this._pickPosY = posY;\r\n if (!this._pickResultPromise) {\r\n this._pickResultPromise = new Promise<PickResult>((resolve) => {\r\n this._pickResultResolve = (result: PickResult) => {\r\n resolve(result);\r\n this._pickResultPromise = null;\r\n this._pickResultResolve = null;\r\n };\r\n });\r\n }\r\n return this._pickResultPromise;\r\n }\r\n /** @internal */\r\n getPickResultResolveFunc() {\r\n return this._pickResultResolve;\r\n }\r\n /** @internal */\r\n getPickPosX() {\r\n return this._pickPosX;\r\n }\r\n /** @internal */\r\n getPickPosY() {\r\n return this._pickPosY;\r\n }\r\n /**\r\n * Updates the controller state\r\n */\r\n updateController() {\r\n this._controller?.update();\r\n }\r\n /**\r\n * Reset the controller\r\n */\r\n resetController() {\r\n this._controller?.reset();\r\n }\r\n /** @internal */\r\n get jitteredVPMatrix() {\r\n return this._jitteredVPMatrix;\r\n }\r\n /** @internal */\r\n get jitteredInvVPMatrix() {\r\n return this._jitteredInvVPMatrix;\r\n }\r\n /** @internal */\r\n get jitterValue() {\r\n return this._jitterValue;\r\n }\r\n /** @internal */\r\n get prevJitteredVPMatrix() {\r\n return this._prevJitteredVPMatrix;\r\n }\r\n /** @internal */\r\n get prevJitterValue() {\r\n return this._prevJitterValue;\r\n }\r\n /** @internal */\r\n get prevVPMatrix() {\r\n return this._prevVPMatrix;\r\n }\r\n /** @internal */\r\n get prevPosition() {\r\n return this._prevPosition;\r\n }\r\n /** @internal */\r\n private setController(controller: BaseCameraController): this {\r\n if (this._controller !== controller) {\r\n if (controller && controller._getCamera() && controller._getCamera() !== this) {\r\n throw new Error(\r\n 'Camera.setController failed: one camera controller object cannot be assigned to multiple camera'\r\n );\r\n }\r\n this._controller?._setCamera(null);\r\n this._controller = controller;\r\n this._controller?._setCamera(this);\r\n }\r\n return this;\r\n }\r\n /** @internal */\r\n protected _invalidate(projectMatrixChanged: boolean) {\r\n this._dirty = true;\r\n if (projectMatrixChanged) {\r\n this._frustumV = null;\r\n }\r\n }\r\n /** @internal */\r\n protected _compute() {\r\n this._computeProj();\r\n Matrix4x4.invertAffine(this.worldMatrix, this._viewMatrix);\r\n Matrix4x4.multiply(this._projMatrix, this._viewMatrix, this._viewProjMatrix);\r\n Matrix4x4.invert(this._viewProjMatrix, this._invViewProjMatrix);\r\n if (!this._frustum) {\r\n this._frustum = new Frustum(this._viewProjMatrix);\r\n } else {\r\n this._frustum.initWithMatrix(this._viewProjMatrix);\r\n }\r\n }\r\n /** @internal */\r\n protected _computeProj() {}\r\n /** @internal */\r\n protected _onTransformChanged(invalidateLocal: boolean) {\r\n super._onTransformChanged(invalidateLocal);\r\n this._invalidate(false);\r\n }\r\n /** {@inheritdoc SceneNode.dispose} */\r\n dispose() {\r\n this.setController(null);\r\n this.clearHistoryData();\r\n this._projMatrix = null;\r\n this._viewMatrix = null;\r\n this._viewProjMatrix = null;\r\n this._postEffectBloom.dispose();\r\n this._postEffectFXAA.dispose();\r\n this._postEffectMotionBlur.dispose();\r\n this._postEffectSSAO.dispose();\r\n this._postEffectSSR.dispose();\r\n this._postEffectTAA.dispose();\r\n this._postEffectTonemap.dispose();\r\n this._oit.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"],"names":["Camera","SceneNode","_halton23","halton23","_historyData","WeakMap","scene","projectionMatrix","_projMatrix","Matrix4x4","identity","_invProjMatrix","invert","_viewMatrix","_viewProjMatrix","_invViewProjMatrix","_clipPlane","_dirty","_controller","_viewport","_scissor","_clipMask","_frustum","_frustumV","_oit","DRef","_depthPrePass","_HiZ","_toneMap","_postEffectTonemap","_tonemapExposure","_motionBlur","_postEffectMotionBlur","_motionBlurStrength","_bloom","_postEffectBloom","_bloomMaxDownsampleLevels","_bloomDownsampleLimit","_bloomThreshold","_bloomThresholdKnee","_bloomIntensity","_FXAA","_postEffectFXAA","_TAA","_postEffectTAA","_TAADebug","_SSR","_postEffectSSR","_ssrParams","Vector4","_ssrMaxRoughness","_ssrRoughnessFactor","_ssrStride","_ssrCalcThickness","_ssrBlurriness","_ssrBlurDepthCutoff","_ssrBlurKernelSize","_ssrBlurStdDev","_SSAO","_postEffectSSAO","_SSAOScale","_SSAOBias","_SSAOIntensity","_SSAORadius","_SSAOBlurDepthCutoff","_pickResult","_commandBufferReuse","_jitteredVPMatrix","_jitteredInvVPMatrix","_jitterValue","Vector2","_prevVPMatrix","_prevPosition","_prevJitteredVPMatrix","_prevJitterValue","_pickResultPromise","_pickResultResolve","_pickPosX","_pickPosY","_compositor","Compositor","updatePostProcessing","clone","method","recursive","other","copyFrom","parent","clipPlane","Plane","HiZ","toneMap","toneMapExposure","bloom","FXAA","TAA","TAADebug","SSR","ssrMaxRoughness","ssrRoughnessFactor","ssrStride","ssrMaxDistance","ssrIterations","ssrThickness","ssrCalcThickness","ssrBlurScale","ssrBlurDepthCutoff","ssrBlurKernelSize","depthPrePass","commandBufferReuse","oit","clipMask","viewport","slice","scissor","setProjectionMatrix","getProjectionMatrix","compositor","plane","_invalidate","val","get","enabled","motionBlur","motionBlurStrength","strength","bloomMaxDownsampleLevels","maxDownsampleLevel","bloomDownsampleLimit","downsampleLimit","bloomThreshold","threshold","bloomThresholdKnee","thresholdKnee","bloomIntensity","intensity","exposure","x","y","z","ssrBlurStdDev","ssrParams","SSAO","SSAOScale","scale","SSAOBias","bias","SSAORadius","radius","SSAOIntensity","SSAOBlurDepthCutoff","blurDepthCutoff","set","rect","handleEvent","ev","type","handled","onMouseDown","onMouseUp","onMouseMove","onMouseWheel","onKeyDown","onKeyUp","preventDefault","constructRay","width","Application","instance","device","getViewport","height","ndcX","ndcY","nearClip","farClip","nearWorld","invViewProjectionMatrix","transform","farWorld","isPerspective","scaleBy","w","vEye","getWorldPosition","xyz","vDir","Vector3","sub","inplaceNormalize","Ray","lookAt","eye","target","up","setLocalTransform","lookAtCubeFace","face","position","setPerspective","fovY","aspect","zNear","zFar","perspective","setOrtho","left","right","bottom","top","near","far","ortho","matrix","_compute","getInvProjectionMatrix","getRotationMatrix","rotationMatrix","worldMatrix","decompose","xAxis","getRow","yAxis","zAxis","setRow","viewMatrix","viewProjectionMatrix","frustum","frustumViewSpace","Frustum","controller","setController","isCamera","getNearPlane","getFarPlane","getFOV","getFov","getTanHalfFovy","getTanHalfFov","getAspect","isOrtho","getHistoryData","data","prevColorTex","prevMotionVectorTex","clearHistoryData","pool","releaseTexture","delete","clear","ssr","appendPostEffect","ssao","SAO","taa","MotionBlur","tonemap","Tonemap","fxaa","Bloom","render","useMotionVector","useTAA","dispatchEvent","getDrawingBufferWidth","getDrawingBufferHeight","halton","frameInfo","frameCounter","length","setXY","multiplyRight","pushDeviceStates","reverseVertexWindingOrder","getRenderer","renderScene","popDeviceStates","pickAsync","posX","posY","Promise","resolve","result","getPickResultResolveFunc","getPickPosX","getPickPosY","updateController","update","resetController","reset","jitteredVPMatrix","jitteredInvVPMatrix","jitterValue","prevJitteredVPMatrix","prevJitterValue","prevVPMatrix","prevPosition","_getCamera","Error","_setCamera","projectMatrixChanged","_computeProj","invertAffine","multiply","initWithMatrix","_onTransformChanged","invalidateLocal","dispose"],"mappings":"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"}
@@ -0,0 +1,238 @@
1
+ import { Vector3, Quaternion, Matrix3x3, Matrix4x4 } from '@zephyr3d/base';
2
+ import { BaseCameraController } from './base.js';
3
+
4
+ /**
5
+ * FPS camera controller
6
+ * @public
7
+ */ class FPSCameraController extends BaseCameraController {
8
+ /** @internal */ options;
9
+ /** @internal */ mouseDown;
10
+ /** @internal */ lastMouseX;
11
+ /** @internal */ lastMouseY;
12
+ /** @internal */ keyUp;
13
+ /** @internal */ keyDown;
14
+ /** @internal */ keyLeft;
15
+ /** @internal */ keyRight;
16
+ /** @internal */ keyForward;
17
+ /** @internal */ keyBackward;
18
+ /**
19
+ * Creates an instance of FPSCameraController
20
+ * @param options - The creation options
21
+ */ constructor(options){
22
+ super();
23
+ this.options = Object.assign({
24
+ controlKeys: {
25
+ up: 'KeyQ',
26
+ down: 'KeyE',
27
+ forward: 'KeyW',
28
+ backward: 'KeyS',
29
+ left: 'KeyA',
30
+ right: 'KeyD'
31
+ },
32
+ moveSpeed: 0.2,
33
+ rotateSpeed: 0.01
34
+ }, options || {});
35
+ this.reset();
36
+ }
37
+ /**
38
+ * {@inheritDoc BaseCameraController.reset}
39
+ * @override
40
+ */ reset() {
41
+ this.mouseDown = false;
42
+ this.lastMouseX = 0;
43
+ this.lastMouseY = 0;
44
+ this.keyUp = false;
45
+ this.keyDown = false;
46
+ this.keyLeft = false;
47
+ this.keyRight = false;
48
+ this.keyForward = false;
49
+ this.keyBackward = false;
50
+ }
51
+ /**
52
+ * {@inheritDoc BaseCameraController._onMouseDown}
53
+ * @override
54
+ */ _onMouseDown(evt) {
55
+ if (evt.button === 0) {
56
+ this.mouseDown = true;
57
+ this.lastMouseX = evt.offsetX;
58
+ this.lastMouseY = evt.offsetY;
59
+ return true;
60
+ }
61
+ return false;
62
+ }
63
+ /**
64
+ * {@inheritDoc BaseCameraController._onMouseUp}
65
+ * @override
66
+ */ _onMouseUp(evt) {
67
+ if (evt.button === 0 && this.mouseDown) {
68
+ this.mouseDown = false;
69
+ return true;
70
+ }
71
+ return false;
72
+ }
73
+ /**
74
+ * {@inheritDoc BaseCameraController._onMouseMove}
75
+ * @override
76
+ */ _onMouseMove(evt) {
77
+ if (this.mouseDown) {
78
+ const dx = evt.offsetX - this.lastMouseX;
79
+ const dy = evt.offsetY - this.lastMouseY;
80
+ this.lastMouseX = evt.offsetX;
81
+ this.lastMouseY = evt.offsetY;
82
+ const zAxis = this._getCamera().worldMatrix.getRow(2).xyz();
83
+ const alpha = Math.atan2(zAxis.z, zAxis.x) + dx * this.options.rotateSpeed;
84
+ const beta = Math.min(Math.PI / 2.1, Math.max(-Math.PI / 2.1, Math.asin(zAxis.y) + dy * this.options.rotateSpeed));
85
+ const newY = Math.sin(beta);
86
+ const r = Math.sqrt(Math.max(0, 1 - newY * newY));
87
+ const newZ = Math.sin(alpha) * r;
88
+ const newX = Math.cos(alpha) * r;
89
+ zAxis.setXYZ(newX, newY, newZ).inplaceNormalize();
90
+ const XAxis = Vector3.cross(Vector3.axisPY(), zAxis).inplaceNormalize();
91
+ const YAxis = Vector3.cross(zAxis, XAxis).inplaceNormalize();
92
+ const rotation = Quaternion.fromRotationMatrix(new Matrix3x3([
93
+ XAxis.x,
94
+ XAxis.y,
95
+ XAxis.z,
96
+ YAxis.x,
97
+ YAxis.y,
98
+ YAxis.z,
99
+ zAxis.x,
100
+ zAxis.y,
101
+ zAxis.z
102
+ ]));
103
+ if (!this._getCamera().parent) {
104
+ this._getCamera().rotation.set(rotation);
105
+ } else {
106
+ const pos = new Vector3();
107
+ const scale = new Vector3();
108
+ this._getCamera().worldMatrix.decompose(scale, null, pos);
109
+ const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);
110
+ const newLocalMatrix = this._getCamera().parent ? newWorldMatrix.multiplyLeftAffine(Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix)) : newWorldMatrix;
111
+ newLocalMatrix.decompose(scale, rotation, pos);
112
+ this._getCamera().position.set(pos);
113
+ this._getCamera().scale.set(scale);
114
+ this._getCamera().rotation.set(rotation);
115
+ }
116
+ return true;
117
+ }
118
+ return false;
119
+ }
120
+ /**
121
+ * {@inheritDoc BaseCameraController._onKeyDown}
122
+ * @override
123
+ */ _onKeyDown(evt) {
124
+ switch(evt.code){
125
+ case this.options.controlKeys.up:
126
+ this.keyUp = true;
127
+ break;
128
+ case this.options.controlKeys.down:
129
+ this.keyDown = true;
130
+ break;
131
+ case this.options.controlKeys.left:
132
+ this.keyLeft = true;
133
+ break;
134
+ case this.options.controlKeys.right:
135
+ this.keyRight = true;
136
+ break;
137
+ case this.options.controlKeys.forward:
138
+ this.keyForward = true;
139
+ break;
140
+ case this.options.controlKeys.backward:
141
+ this.keyBackward = true;
142
+ break;
143
+ default:
144
+ return false;
145
+ }
146
+ return true;
147
+ }
148
+ /**
149
+ * {@inheritDoc BaseCameraController._onKeyUp}
150
+ * @override
151
+ */ _onKeyUp(evt) {
152
+ switch(evt.code){
153
+ case this.options.controlKeys.up:
154
+ this.keyUp = false;
155
+ break;
156
+ case this.options.controlKeys.down:
157
+ this.keyDown = false;
158
+ break;
159
+ case this.options.controlKeys.left:
160
+ this.keyLeft = false;
161
+ break;
162
+ case this.options.controlKeys.right:
163
+ this.keyRight = false;
164
+ break;
165
+ case this.options.controlKeys.forward:
166
+ this.keyForward = false;
167
+ break;
168
+ case this.options.controlKeys.backward:
169
+ this.keyBackward = false;
170
+ break;
171
+ default:
172
+ return false;
173
+ }
174
+ return true;
175
+ }
176
+ /**
177
+ * Set options
178
+ * @param opt - options
179
+ */ setOptions(opt) {
180
+ Object.assign(this.options, opt ?? {});
181
+ this.reset();
182
+ }
183
+ /**
184
+ * {@inheritDoc BaseCameraController.update}
185
+ * @override
186
+ */ update() {
187
+ const x = this._getCamera().worldMatrix.getRow(0).xyz();
188
+ x.y = 0;
189
+ x.inplaceNormalize();
190
+ const z = this._getCamera().worldMatrix.getRow(2).xyz().inplaceNormalize();
191
+ const move = new Vector3(0, 0, 0);
192
+ let changed = false;
193
+ if (this.keyForward) {
194
+ changed = true;
195
+ move.subBy(Vector3.scale(z, this.options.moveSpeed));
196
+ }
197
+ if (this.keyBackward) {
198
+ changed = true;
199
+ move.addBy(Vector3.scale(z, this.options.moveSpeed));
200
+ }
201
+ if (this.keyUp) {
202
+ changed = true;
203
+ move.y += this.options.moveSpeed;
204
+ }
205
+ if (this.keyDown) {
206
+ changed = true;
207
+ move.y -= this.options.moveSpeed;
208
+ }
209
+ if (this.keyLeft) {
210
+ changed = true;
211
+ move.subBy(Vector3.scale(x, this.options.moveSpeed));
212
+ }
213
+ if (this.keyRight) {
214
+ changed = true;
215
+ move.addBy(Vector3.scale(x, this.options.moveSpeed));
216
+ }
217
+ if (changed) {
218
+ if (this._getCamera().parent) {
219
+ const pos = new Vector3();
220
+ const scale = new Vector3();
221
+ const rotation = new Quaternion();
222
+ this._getCamera().worldMatrix.decompose(scale, rotation, pos);
223
+ pos.addBy(move);
224
+ const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);
225
+ const newLocalMatrix = newWorldMatrix.multiplyLeftAffine(Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix));
226
+ newLocalMatrix.decompose(scale, rotation, pos);
227
+ this._getCamera().position.set(pos);
228
+ this._getCamera().scale.set(scale);
229
+ this._getCamera().rotation.set(rotation);
230
+ } else {
231
+ this._getCamera().moveBy(move);
232
+ }
233
+ }
234
+ }
235
+ }
236
+
237
+ export { FPSCameraController };
238
+ //# sourceMappingURL=fps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fps.js","sources":["../../../src/camera/fps.ts"],"sourcesContent":["import { Vector3, Quaternion, Matrix3x3, Matrix4x4 } from '@zephyr3d/base';\r\nimport { BaseCameraController } from './base';\r\n\r\n/**\r\n * Creation options for FPSCameraController\r\n * @public\r\n */\r\nexport interface FPSCameraControllerOptions {\r\n /** The control keys */\r\n controlKeys?: {\r\n up: string;\r\n down: string;\r\n forward: string;\r\n backward: string;\r\n left: string;\r\n right: string;\r\n };\r\n /** Moving speed */\r\n moveSpeed?: number;\r\n /** Rotating speed */\r\n rotateSpeed?: number;\r\n}\r\n\r\n/**\r\n * FPS camera controller\r\n * @public\r\n */\r\nexport class FPSCameraController extends BaseCameraController {\r\n /** @internal */\r\n private readonly options: FPSCameraControllerOptions;\r\n /** @internal */\r\n private mouseDown: boolean;\r\n /** @internal */\r\n private lastMouseX: number;\r\n /** @internal */\r\n private lastMouseY: number;\r\n /** @internal */\r\n private keyUp: boolean;\r\n /** @internal */\r\n private keyDown: boolean;\r\n /** @internal */\r\n private keyLeft: boolean;\r\n /** @internal */\r\n private keyRight: boolean;\r\n /** @internal */\r\n private keyForward: boolean;\r\n /** @internal */\r\n private keyBackward: boolean;\r\n /**\r\n * Creates an instance of FPSCameraController\r\n * @param options - The creation options\r\n */\r\n constructor(options?: FPSCameraControllerOptions) {\r\n super();\r\n this.options = Object.assign(\r\n {\r\n controlKeys: {\r\n up: 'KeyQ',\r\n down: 'KeyE',\r\n forward: 'KeyW',\r\n backward: 'KeyS',\r\n left: 'KeyA',\r\n right: 'KeyD'\r\n },\r\n moveSpeed: 0.2,\r\n rotateSpeed: 0.01\r\n },\r\n options || {}\r\n );\r\n this.reset();\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController.reset}\r\n * @override\r\n */\r\n reset() {\r\n this.mouseDown = false;\r\n this.lastMouseX = 0;\r\n this.lastMouseY = 0;\r\n this.keyUp = false;\r\n this.keyDown = false;\r\n this.keyLeft = false;\r\n this.keyRight = false;\r\n this.keyForward = false;\r\n this.keyBackward = false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onMouseDown}\r\n * @override\r\n */\r\n protected _onMouseDown(evt: PointerEvent): boolean {\r\n if (evt.button === 0) {\r\n this.mouseDown = true;\r\n this.lastMouseX = evt.offsetX;\r\n this.lastMouseY = evt.offsetY;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onMouseUp}\r\n * @override\r\n */\r\n protected _onMouseUp(evt: PointerEvent): boolean {\r\n if (evt.button === 0 && this.mouseDown) {\r\n this.mouseDown = false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onMouseMove}\r\n * @override\r\n */\r\n protected _onMouseMove(evt: PointerEvent): boolean {\r\n if (this.mouseDown) {\r\n const dx = evt.offsetX - this.lastMouseX;\r\n const dy = evt.offsetY - this.lastMouseY;\r\n this.lastMouseX = evt.offsetX;\r\n this.lastMouseY = evt.offsetY;\r\n const zAxis = this._getCamera().worldMatrix.getRow(2).xyz();\r\n const alpha = Math.atan2(zAxis.z, zAxis.x) + dx * this.options.rotateSpeed;\r\n const beta = Math.min(\r\n Math.PI / 2.1,\r\n Math.max(-Math.PI / 2.1, Math.asin(zAxis.y) + dy * this.options.rotateSpeed)\r\n );\r\n const newY = Math.sin(beta);\r\n const r = Math.sqrt(Math.max(0, 1 - newY * newY));\r\n const newZ = Math.sin(alpha) * r;\r\n const newX = Math.cos(alpha) * r;\r\n zAxis.setXYZ(newX, newY, newZ).inplaceNormalize();\r\n const XAxis = Vector3.cross(Vector3.axisPY(), zAxis).inplaceNormalize();\r\n const YAxis = Vector3.cross(zAxis, XAxis).inplaceNormalize();\r\n const rotation = Quaternion.fromRotationMatrix(\r\n new Matrix3x3([XAxis.x, XAxis.y, XAxis.z, YAxis.x, YAxis.y, YAxis.z, zAxis.x, zAxis.y, zAxis.z])\r\n );\r\n if (!this._getCamera().parent) {\r\n this._getCamera().rotation.set(rotation);\r\n } else {\r\n const pos = new Vector3();\r\n const scale = new Vector3();\r\n this._getCamera().worldMatrix.decompose(scale, null, pos);\r\n const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);\r\n const newLocalMatrix = this._getCamera().parent\r\n ? newWorldMatrix.multiplyLeftAffine(Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix))\r\n : newWorldMatrix;\r\n newLocalMatrix.decompose(scale, rotation, pos);\r\n this._getCamera().position.set(pos);\r\n this._getCamera().scale.set(scale);\r\n this._getCamera().rotation.set(rotation);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onKeyDown}\r\n * @override\r\n */\r\n protected _onKeyDown(evt: KeyboardEvent): boolean {\r\n switch (evt.code) {\r\n case this.options.controlKeys.up:\r\n this.keyUp = true;\r\n break;\r\n case this.options.controlKeys.down:\r\n this.keyDown = true;\r\n break;\r\n case this.options.controlKeys.left:\r\n this.keyLeft = true;\r\n break;\r\n case this.options.controlKeys.right:\r\n this.keyRight = true;\r\n break;\r\n case this.options.controlKeys.forward:\r\n this.keyForward = true;\r\n break;\r\n case this.options.controlKeys.backward:\r\n this.keyBackward = true;\r\n break;\r\n default:\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController._onKeyUp}\r\n * @override\r\n */\r\n protected _onKeyUp(evt: KeyboardEvent): boolean {\r\n switch (evt.code) {\r\n case this.options.controlKeys.up:\r\n this.keyUp = false;\r\n break;\r\n case this.options.controlKeys.down:\r\n this.keyDown = false;\r\n break;\r\n case this.options.controlKeys.left:\r\n this.keyLeft = false;\r\n break;\r\n case this.options.controlKeys.right:\r\n this.keyRight = false;\r\n break;\r\n case this.options.controlKeys.forward:\r\n this.keyForward = false;\r\n break;\r\n case this.options.controlKeys.backward:\r\n this.keyBackward = false;\r\n break;\r\n default:\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Set options\r\n * @param opt - options\r\n */\r\n setOptions(opt?: FPSCameraControllerOptions) {\r\n Object.assign(this.options, opt ?? {});\r\n this.reset();\r\n }\r\n /**\r\n * {@inheritDoc BaseCameraController.update}\r\n * @override\r\n */\r\n update() {\r\n const x = this._getCamera().worldMatrix.getRow(0).xyz();\r\n x.y = 0;\r\n x.inplaceNormalize();\r\n const z = this._getCamera().worldMatrix.getRow(2).xyz().inplaceNormalize();\r\n const move = new Vector3(0, 0, 0);\r\n let changed = false;\r\n if (this.keyForward) {\r\n changed = true;\r\n move.subBy(Vector3.scale(z, this.options.moveSpeed));\r\n }\r\n if (this.keyBackward) {\r\n changed = true;\r\n move.addBy(Vector3.scale(z, this.options.moveSpeed));\r\n }\r\n if (this.keyUp) {\r\n changed = true;\r\n move.y += this.options.moveSpeed;\r\n }\r\n if (this.keyDown) {\r\n changed = true;\r\n move.y -= this.options.moveSpeed;\r\n }\r\n if (this.keyLeft) {\r\n changed = true;\r\n move.subBy(Vector3.scale(x, this.options.moveSpeed));\r\n }\r\n if (this.keyRight) {\r\n changed = true;\r\n move.addBy(Vector3.scale(x, this.options.moveSpeed));\r\n }\r\n if (changed) {\r\n if (this._getCamera().parent) {\r\n const pos = new Vector3();\r\n const scale = new Vector3();\r\n const rotation = new Quaternion();\r\n this._getCamera().worldMatrix.decompose(scale, rotation, pos);\r\n pos.addBy(move);\r\n const newWorldMatrix = Matrix4x4.scaling(scale).rotateLeft(rotation).translateLeft(pos);\r\n const newLocalMatrix = newWorldMatrix.multiplyLeftAffine(\r\n Matrix4x4.invertAffine(this._getCamera().parent.worldMatrix)\r\n );\r\n newLocalMatrix.decompose(scale, rotation, pos);\r\n this._getCamera().position.set(pos);\r\n this._getCamera().scale.set(scale);\r\n this._getCamera().rotation.set(rotation);\r\n } else {\r\n this._getCamera().moveBy(move);\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["FPSCameraController","BaseCameraController","options","Object","assign","controlKeys","up","down","forward","backward","left","right","moveSpeed","rotateSpeed","reset","mouseDown","lastMouseX","lastMouseY","keyUp","keyDown","keyLeft","keyRight","keyForward","keyBackward","_onMouseDown","evt","button","offsetX","offsetY","_onMouseUp","_onMouseMove","dx","dy","zAxis","_getCamera","worldMatrix","getRow","xyz","alpha","Math","atan2","z","x","beta","min","PI","max","asin","y","newY","sin","r","sqrt","newZ","newX","cos","setXYZ","inplaceNormalize","XAxis","Vector3","cross","axisPY","YAxis","rotation","Quaternion","fromRotationMatrix","Matrix3x3","parent","set","pos","scale","decompose","newWorldMatrix","Matrix4x4","scaling","rotateLeft","translateLeft","newLocalMatrix","multiplyLeftAffine","invertAffine","position","_onKeyDown","code","_onKeyUp","setOptions","opt","update","move","changed","subBy","addBy","moveBy"],"mappings":";;;AAuBA;;;IAIO,MAAMA,mBAA4BC,SAAAA,oBAAAA,CAAAA;qBAEvC,OAAqD;qBAErD,SAA2B;qBAE3B,UAA2B;qBAE3B,UAA2B;qBAE3B,KAAuB;qBAEvB,OAAyB;qBAEzB,OAAyB;qBAEzB,QAA0B;qBAE1B,UAA4B;qBAE5B,WAA6B;AAC7B;;;MAIA,WAAA,CAAYC,OAAoC,CAAE;QAChD,KAAK,EAAA;AACL,QAAA,IAAI,CAACA,OAAO,GAAGC,MAAAA,CAAOC,MAAM,CAC1B;YACEC,WAAa,EAAA;gBACXC,EAAI,EAAA,MAAA;gBACJC,IAAM,EAAA,MAAA;gBACNC,OAAS,EAAA,MAAA;gBACTC,QAAU,EAAA,MAAA;gBACVC,IAAM,EAAA,MAAA;gBACNC,KAAO,EAAA;AACT,aAAA;YACAC,SAAW,EAAA,GAAA;YACXC,WAAa,EAAA;AACf,SAAA,EACAX,WAAW,EAAC,CAAA;AAEd,QAAA,IAAI,CAACY,KAAK,EAAA;AACZ;AACA;;;AAGC,MACDA,KAAQ,GAAA;QACN,IAAI,CAACC,SAAS,GAAG,KAAA;QACjB,IAAI,CAACC,UAAU,GAAG,CAAA;QAClB,IAAI,CAACC,UAAU,GAAG,CAAA;QAClB,IAAI,CAACC,KAAK,GAAG,KAAA;QACb,IAAI,CAACC,OAAO,GAAG,KAAA;QACf,IAAI,CAACC,OAAO,GAAG,KAAA;QACf,IAAI,CAACC,QAAQ,GAAG,KAAA;QAChB,IAAI,CAACC,UAAU,GAAG,KAAA;QAClB,IAAI,CAACC,WAAW,GAAG,KAAA;AACrB;AACA;;;MAIUC,YAAaC,CAAAA,GAAiB,EAAW;QACjD,IAAIA,GAAAA,CAAIC,MAAM,KAAK,CAAG,EAAA;YACpB,IAAI,CAACX,SAAS,GAAG,IAAA;AACjB,YAAA,IAAI,CAACC,UAAU,GAAGS,GAAAA,CAAIE,OAAO;AAC7B,YAAA,IAAI,CAACV,UAAU,GAAGQ,GAAAA,CAAIG,OAAO;YAC7B,OAAO,IAAA;AACT;QACA,OAAO,KAAA;AACT;AACA;;;MAIUC,UAAWJ,CAAAA,GAAiB,EAAW;AAC/C,QAAA,IAAIA,IAAIC,MAAM,KAAK,KAAK,IAAI,CAACX,SAAS,EAAE;YACtC,IAAI,CAACA,SAAS,GAAG,KAAA;YACjB,OAAO,IAAA;AACT;QACA,OAAO,KAAA;AACT;AACA;;;MAIUe,YAAaL,CAAAA,GAAiB,EAAW;QACjD,IAAI,IAAI,CAACV,SAAS,EAAE;AAClB,YAAA,MAAMgB,KAAKN,GAAIE,CAAAA,OAAO,GAAG,IAAI,CAACX,UAAU;AACxC,YAAA,MAAMgB,KAAKP,GAAIG,CAAAA,OAAO,GAAG,IAAI,CAACX,UAAU;AACxC,YAAA,IAAI,CAACD,UAAU,GAAGS,GAAAA,CAAIE,OAAO;AAC7B,YAAA,IAAI,CAACV,UAAU,GAAGQ,GAAAA,CAAIG,OAAO;YAC7B,MAAMK,KAAAA,GAAQ,IAAI,CAACC,UAAU,EAAA,CAAGC,WAAW,CAACC,MAAM,CAAC,CAAA,CAAA,CAAGC,GAAG,EAAA;AACzD,YAAA,MAAMC,KAAQC,GAAAA,IAAAA,CAAKC,KAAK,CAACP,MAAMQ,CAAC,EAAER,KAAMS,CAAAA,CAAC,IAAIX,EAAK,GAAA,IAAI,CAAC7B,OAAO,CAACW,WAAW;YAC1E,MAAM8B,IAAAA,GAAOJ,IAAKK,CAAAA,GAAG,CACnBL,IAAAA,CAAKM,EAAE,GAAG,GACVN,EAAAA,IAAAA,CAAKO,GAAG,CAAC,CAACP,IAAAA,CAAKM,EAAE,GAAG,GAAKN,EAAAA,IAAAA,CAAKQ,IAAI,CAACd,KAAMe,CAAAA,CAAC,CAAIhB,GAAAA,EAAAA,GAAK,IAAI,CAAC9B,OAAO,CAACW,WAAW,CAAA,CAAA;YAE7E,MAAMoC,IAAAA,GAAOV,IAAKW,CAAAA,GAAG,CAACP,IAAAA,CAAAA;YACtB,MAAMQ,CAAAA,GAAIZ,KAAKa,IAAI,CAACb,KAAKO,GAAG,CAAC,CAAG,EAAA,CAAA,GAAIG,IAAOA,GAAAA,IAAAA,CAAAA,CAAAA;AAC3C,YAAA,MAAMI,IAAOd,GAAAA,IAAAA,CAAKW,GAAG,CAACZ,KAASa,CAAAA,GAAAA,CAAAA;AAC/B,YAAA,MAAMG,IAAOf,GAAAA,IAAAA,CAAKgB,GAAG,CAACjB,KAASa,CAAAA,GAAAA,CAAAA;AAC/BlB,YAAAA,KAAAA,CAAMuB,MAAM,CAACF,IAAML,EAAAA,IAAAA,EAAMI,MAAMI,gBAAgB,EAAA;YAC/C,MAAMC,KAAAA,GAAQC,QAAQC,KAAK,CAACD,QAAQE,MAAM,EAAA,EAAI5B,OAAOwB,gBAAgB,EAAA;AACrE,YAAA,MAAMK,QAAQH,OAAQC,CAAAA,KAAK,CAAC3B,KAAAA,EAAOyB,OAAOD,gBAAgB,EAAA;AAC1D,YAAA,MAAMM,QAAWC,GAAAA,UAAAA,CAAWC,kBAAkB,CAC5C,IAAIC,SAAU,CAAA;AAACR,gBAAAA,KAAAA,CAAMhB,CAAC;AAAEgB,gBAAAA,KAAAA,CAAMV,CAAC;AAAEU,gBAAAA,KAAAA,CAAMjB,CAAC;AAAEqB,gBAAAA,KAAAA,CAAMpB,CAAC;AAAEoB,gBAAAA,KAAAA,CAAMd,CAAC;AAAEc,gBAAAA,KAAAA,CAAMrB,CAAC;AAAER,gBAAAA,KAAAA,CAAMS,CAAC;AAAET,gBAAAA,KAAAA,CAAMe,CAAC;AAAEf,gBAAAA,KAAAA,CAAMQ;AAAE,aAAA,CAAA,CAAA;AAEjG,YAAA,IAAI,CAAC,IAAI,CAACP,UAAU,EAAA,CAAGiC,MAAM,EAAE;AAC7B,gBAAA,IAAI,CAACjC,UAAU,EAAA,CAAG6B,QAAQ,CAACK,GAAG,CAACL,QAAAA,CAAAA;aAC1B,MAAA;AACL,gBAAA,MAAMM,MAAM,IAAIV,OAAAA,EAAAA;AAChB,gBAAA,MAAMW,QAAQ,IAAIX,OAAAA,EAAAA;gBAClB,IAAI,CAACzB,UAAU,EAAGC,CAAAA,WAAW,CAACoC,SAAS,CAACD,OAAO,IAAMD,EAAAA,GAAAA,CAAAA;gBACrD,MAAMG,cAAAA,GAAiBC,UAAUC,OAAO,CAACJ,OAAOK,UAAU,CAACZ,QAAUa,CAAAA,CAAAA,aAAa,CAACP,GAAAA,CAAAA;gBACnF,MAAMQ,cAAAA,GAAiB,IAAI,CAAC3C,UAAU,GAAGiC,MAAM,GAC3CK,eAAeM,kBAAkB,CAACL,UAAUM,YAAY,CAAC,IAAI,CAAC7C,UAAU,GAAGiC,MAAM,CAAChC,WAAW,CAC7FqC,CAAAA,GAAAA,cAAAA;gBACJK,cAAeN,CAAAA,SAAS,CAACD,KAAAA,EAAOP,QAAUM,EAAAA,GAAAA,CAAAA;AAC1C,gBAAA,IAAI,CAACnC,UAAU,EAAA,CAAG8C,QAAQ,CAACZ,GAAG,CAACC,GAAAA,CAAAA;AAC/B,gBAAA,IAAI,CAACnC,UAAU,EAAA,CAAGoC,KAAK,CAACF,GAAG,CAACE,KAAAA,CAAAA;AAC5B,gBAAA,IAAI,CAACpC,UAAU,EAAA,CAAG6B,QAAQ,CAACK,GAAG,CAACL,QAAAA,CAAAA;AACjC;YACA,OAAO,IAAA;AACT;QACA,OAAO,KAAA;AACT;AACA;;;MAIUkB,UAAWxD,CAAAA,GAAkB,EAAW;AAChD,QAAA,OAAQA,IAAIyD,IAAI;AACd,YAAA,KAAK,IAAI,CAAChF,OAAO,CAACG,WAAW,CAACC,EAAE;gBAC9B,IAAI,CAACY,KAAK,GAAG,IAAA;AACb,gBAAA;AACF,YAAA,KAAK,IAAI,CAAChB,OAAO,CAACG,WAAW,CAACE,IAAI;gBAChC,IAAI,CAACY,OAAO,GAAG,IAAA;AACf,gBAAA;AACF,YAAA,KAAK,IAAI,CAACjB,OAAO,CAACG,WAAW,CAACK,IAAI;gBAChC,IAAI,CAACU,OAAO,GAAG,IAAA;AACf,gBAAA;AACF,YAAA,KAAK,IAAI,CAAClB,OAAO,CAACG,WAAW,CAACM,KAAK;gBACjC,IAAI,CAACU,QAAQ,GAAG,IAAA;AAChB,gBAAA;AACF,YAAA,KAAK,IAAI,CAACnB,OAAO,CAACG,WAAW,CAACG,OAAO;gBACnC,IAAI,CAACc,UAAU,GAAG,IAAA;AAClB,gBAAA;AACF,YAAA,KAAK,IAAI,CAACpB,OAAO,CAACG,WAAW,CAACI,QAAQ;gBACpC,IAAI,CAACc,WAAW,GAAG,IAAA;AACnB,gBAAA;AACF,YAAA;gBACE,OAAO,KAAA;AACX;QACA,OAAO,IAAA;AACT;AACA;;;MAIU4D,QAAS1D,CAAAA,GAAkB,EAAW;AAC9C,QAAA,OAAQA,IAAIyD,IAAI;AACd,YAAA,KAAK,IAAI,CAAChF,OAAO,CAACG,WAAW,CAACC,EAAE;gBAC9B,IAAI,CAACY,KAAK,GAAG,KAAA;AACb,gBAAA;AACF,YAAA,KAAK,IAAI,CAAChB,OAAO,CAACG,WAAW,CAACE,IAAI;gBAChC,IAAI,CAACY,OAAO,GAAG,KAAA;AACf,gBAAA;AACF,YAAA,KAAK,IAAI,CAACjB,OAAO,CAACG,WAAW,CAACK,IAAI;gBAChC,IAAI,CAACU,OAAO,GAAG,KAAA;AACf,gBAAA;AACF,YAAA,KAAK,IAAI,CAAClB,OAAO,CAACG,WAAW,CAACM,KAAK;gBACjC,IAAI,CAACU,QAAQ,GAAG,KAAA;AAChB,gBAAA;AACF,YAAA,KAAK,IAAI,CAACnB,OAAO,CAACG,WAAW,CAACG,OAAO;gBACnC,IAAI,CAACc,UAAU,GAAG,KAAA;AAClB,gBAAA;AACF,YAAA,KAAK,IAAI,CAACpB,OAAO,CAACG,WAAW,CAACI,QAAQ;gBACpC,IAAI,CAACc,WAAW,GAAG,KAAA;AACnB,gBAAA;AACF,YAAA;gBACE,OAAO,KAAA;AACX;QACA,OAAO,IAAA;AACT;AACA;;;MAIA6D,UAAAA,CAAWC,GAAgC,EAAE;AAC3ClF,QAAAA,MAAAA,CAAOC,MAAM,CAAC,IAAI,CAACF,OAAO,EAAEmF,OAAO,EAAC,CAAA;AACpC,QAAA,IAAI,CAACvE,KAAK,EAAA;AACZ;AACA;;;AAGC,MACDwE,MAAS,GAAA;QACP,MAAM5C,CAAAA,GAAI,IAAI,CAACR,UAAU,EAAA,CAAGC,WAAW,CAACC,MAAM,CAAC,CAAA,CAAA,CAAGC,GAAG,EAAA;AACrDK,QAAAA,CAAAA,CAAEM,CAAC,GAAG,CAAA;AACNN,QAAAA,CAAAA,CAAEe,gBAAgB,EAAA;AAClB,QAAA,MAAMhB,CAAI,GAAA,IAAI,CAACP,UAAU,EAAGC,CAAAA,WAAW,CAACC,MAAM,CAAC,CAAA,CAAA,CAAGC,GAAG,EAAA,CAAGoB,gBAAgB,EAAA;AACxE,QAAA,MAAM8B,IAAO,GAAA,IAAI5B,OAAQ,CAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;AAC/B,QAAA,IAAI6B,OAAU,GAAA,KAAA;QACd,IAAI,IAAI,CAAClE,UAAU,EAAE;YACnBkE,OAAU,GAAA,IAAA;YACVD,IAAKE,CAAAA,KAAK,CAAC9B,OAAAA,CAAQW,KAAK,CAAC7B,GAAG,IAAI,CAACvC,OAAO,CAACU,SAAS,CAAA,CAAA;AACpD;QACA,IAAI,IAAI,CAACW,WAAW,EAAE;YACpBiE,OAAU,GAAA,IAAA;YACVD,IAAKG,CAAAA,KAAK,CAAC/B,OAAAA,CAAQW,KAAK,CAAC7B,GAAG,IAAI,CAACvC,OAAO,CAACU,SAAS,CAAA,CAAA;AACpD;QACA,IAAI,IAAI,CAACM,KAAK,EAAE;YACdsE,OAAU,GAAA,IAAA;AACVD,YAAAA,IAAAA,CAAKvC,CAAC,IAAI,IAAI,CAAC9C,OAAO,CAACU,SAAS;AAClC;QACA,IAAI,IAAI,CAACO,OAAO,EAAE;YAChBqE,OAAU,GAAA,IAAA;AACVD,YAAAA,IAAAA,CAAKvC,CAAC,IAAI,IAAI,CAAC9C,OAAO,CAACU,SAAS;AAClC;QACA,IAAI,IAAI,CAACQ,OAAO,EAAE;YAChBoE,OAAU,GAAA,IAAA;YACVD,IAAKE,CAAAA,KAAK,CAAC9B,OAAAA,CAAQW,KAAK,CAAC5B,GAAG,IAAI,CAACxC,OAAO,CAACU,SAAS,CAAA,CAAA;AACpD;QACA,IAAI,IAAI,CAACS,QAAQ,EAAE;YACjBmE,OAAU,GAAA,IAAA;YACVD,IAAKG,CAAAA,KAAK,CAAC/B,OAAAA,CAAQW,KAAK,CAAC5B,GAAG,IAAI,CAACxC,OAAO,CAACU,SAAS,CAAA,CAAA;AACpD;AACA,QAAA,IAAI4E,OAAS,EAAA;AACX,YAAA,IAAI,IAAI,CAACtD,UAAU,EAAA,CAAGiC,MAAM,EAAE;AAC5B,gBAAA,MAAME,MAAM,IAAIV,OAAAA,EAAAA;AAChB,gBAAA,MAAMW,QAAQ,IAAIX,OAAAA,EAAAA;AAClB,gBAAA,MAAMI,WAAW,IAAIC,UAAAA,EAAAA;gBACrB,IAAI,CAAC9B,UAAU,EAAGC,CAAAA,WAAW,CAACoC,SAAS,CAACD,OAAOP,QAAUM,EAAAA,GAAAA,CAAAA;AACzDA,gBAAAA,GAAAA,CAAIqB,KAAK,CAACH,IAAAA,CAAAA;gBACV,MAAMf,cAAAA,GAAiBC,UAAUC,OAAO,CAACJ,OAAOK,UAAU,CAACZ,QAAUa,CAAAA,CAAAA,aAAa,CAACP,GAAAA,CAAAA;AACnF,gBAAA,MAAMQ,cAAiBL,GAAAA,cAAAA,CAAeM,kBAAkB,CACtDL,SAAUM,CAAAA,YAAY,CAAC,IAAI,CAAC7C,UAAU,EAAGiC,CAAAA,MAAM,CAAChC,WAAW,CAAA,CAAA;gBAE7D0C,cAAeN,CAAAA,SAAS,CAACD,KAAAA,EAAOP,QAAUM,EAAAA,GAAAA,CAAAA;AAC1C,gBAAA,IAAI,CAACnC,UAAU,EAAA,CAAG8C,QAAQ,CAACZ,GAAG,CAACC,GAAAA,CAAAA;AAC/B,gBAAA,IAAI,CAACnC,UAAU,EAAA,CAAGoC,KAAK,CAACF,GAAG,CAACE,KAAAA,CAAAA;AAC5B,gBAAA,IAAI,CAACpC,UAAU,EAAA,CAAG6B,QAAQ,CAACK,GAAG,CAACL,QAAAA,CAAAA;aAC1B,MAAA;AACL,gBAAA,IAAI,CAAC7B,UAAU,EAAGyD,CAAAA,MAAM,CAACJ,IAAAA,CAAAA;AAC3B;AACF;AACF;AACF;;;;"}