@zephyr3d/scene 0.9.5 → 0.9.7

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 (621) hide show
  1. package/dist/animation/joint_dynamics/controller.js +92 -32
  2. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  3. package/dist/animation/joint_dynamics/convex_collider.js +320 -0
  4. package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
  5. package/dist/animation/joint_dynamics/joint_dynamics_system.js +57 -19
  6. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  7. package/dist/animation/joint_dynamics/solver.js +71 -27
  8. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  9. package/dist/animation/joint_dynamics_modifier.js +21 -20
  10. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  11. package/dist/animation/skeleton.js +7 -10
  12. package/dist/animation/skeleton.js.map +1 -1
  13. package/dist/app/engine.js +134 -140
  14. package/dist/app/engine.js.map +1 -1
  15. package/dist/app/scriptregistry.js +47 -16
  16. package/dist/app/scriptregistry.js.map +1 -1
  17. package/dist/asset/assetmanager.js +3 -1
  18. package/dist/asset/assetmanager.js.map +1 -1
  19. package/dist/asset/model.js +346 -7
  20. package/dist/asset/model.js.map +1 -1
  21. package/dist/avatar/wardrobe.js +20 -16
  22. package/dist/avatar/wardrobe.js.map +1 -1
  23. package/dist/camera/camera.js +416 -210
  24. package/dist/camera/camera.js.map +1 -1
  25. package/dist/index.d.ts +1350 -621
  26. package/dist/index.js +6 -11
  27. package/dist/index.js.map +1 -1
  28. package/dist/material/blinn.js +1 -1
  29. package/dist/material/blinn.js.map +1 -1
  30. package/dist/material/lambert.js +1 -1
  31. package/dist/material/lambert.js.map +1 -1
  32. package/dist/material/material.js +23 -1
  33. package/dist/material/material.js.map +1 -1
  34. package/dist/material/meshmaterial.js +178 -23
  35. package/dist/material/meshmaterial.js.map +1 -1
  36. package/dist/material/mixins/albedocolor.js +4 -4
  37. package/dist/material/mixins/albedocolor.js.map +1 -1
  38. package/dist/material/mixins/lightmodel/blinnphong.js +2 -1
  39. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  40. package/dist/material/mixins/lightmodel/lambert.js +2 -1
  41. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  42. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +63 -16
  43. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  44. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +105 -32
  45. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  46. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +16 -6
  47. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  48. package/dist/material/mixins/lit.js +1 -1
  49. package/dist/material/mixins/lit.js.map +1 -1
  50. package/dist/material/mixins/pbr/common.js +276 -65
  51. package/dist/material/mixins/pbr/common.js.map +1 -1
  52. package/dist/material/mixins/texture.js +3 -3
  53. package/dist/material/mixins/texture.js.map +1 -1
  54. package/dist/material/mixins/vertexcolor.js +2 -2
  55. package/dist/material/mixins/vertexcolor.js.map +1 -1
  56. package/dist/material/msdf_text.js +3 -3
  57. package/dist/material/msdf_text.js.map +1 -1
  58. package/dist/material/mtoon.js +574 -0
  59. package/dist/material/mtoon.js.map +1 -0
  60. package/dist/material/pbrblueprint.js +499 -336
  61. package/dist/material/pbrblueprint.js.map +1 -1
  62. package/dist/material/pbrmr.js +118 -100
  63. package/dist/material/pbrmr.js.map +1 -1
  64. package/dist/material/pbrsg.js +1 -1
  65. package/dist/material/pbrsg.js.map +1 -1
  66. package/dist/material/shader/helper.js +324 -294
  67. package/dist/material/shader/helper.js.map +1 -1
  68. package/dist/material/subsurfaceprofile.js +812 -0
  69. package/dist/material/subsurfaceprofile.js.map +1 -0
  70. package/dist/material/unlit.js +1 -1
  71. package/dist/material/unlit.js.map +1 -1
  72. package/dist/posteffect/compositor.js +46 -11
  73. package/dist/posteffect/compositor.js.map +1 -1
  74. package/dist/posteffect/ssr.js +422 -96
  75. package/dist/posteffect/ssr.js.map +1 -1
  76. package/dist/posteffect/sss.js +1053 -0
  77. package/dist/posteffect/sss.js.map +1 -0
  78. package/dist/posteffect/taa.js +61 -60
  79. package/dist/posteffect/taa.js.map +1 -1
  80. package/dist/render/abuffer_oit.js +63 -12
  81. package/dist/render/abuffer_oit.js.map +1 -1
  82. package/dist/render/cluster_light.js +6 -5
  83. package/dist/render/cluster_light.js.map +1 -1
  84. package/dist/render/drawable.js +1 -5
  85. package/dist/render/drawable.js.map +1 -1
  86. package/dist/render/drawable_mixin.js +2 -1
  87. package/dist/render/drawable_mixin.js.map +1 -1
  88. package/dist/render/fbm_wavegenerator.js +2 -1
  89. package/dist/render/fbm_wavegenerator.js.map +1 -1
  90. package/dist/render/gerstner_wavegenerator.js +2 -1
  91. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  92. package/dist/render/globalbindgroup_allocator.js +2 -1
  93. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  94. package/dist/render/lightpass.js +110 -23
  95. package/dist/render/lightpass.js.map +1 -1
  96. package/dist/render/render_queue.js +51 -8
  97. package/dist/render/render_queue.js.map +1 -1
  98. package/dist/render/renderer.js +80 -66
  99. package/dist/render/renderer.js.map +1 -1
  100. package/dist/render/rendergraph/device_pool_allocator.js +8 -0
  101. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  102. package/dist/render/rendergraph/forward_plus_builder.js +481 -95
  103. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  104. package/dist/render/rendergraph/history_resource_manager.js +55 -0
  105. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  106. package/dist/render/rendergraph/history_resources.js +3 -1
  107. package/dist/render/rendergraph/history_resources.js.map +1 -1
  108. package/dist/render/rendergraph/types.js.map +1 -1
  109. package/dist/render/renderpass.js +10 -4
  110. package/dist/render/renderpass.js.map +1 -1
  111. package/dist/render/sky.js +31 -1
  112. package/dist/render/sky.js.map +1 -1
  113. package/dist/render/weightedblended_oit.js +23 -5
  114. package/dist/render/weightedblended_oit.js.map +1 -1
  115. package/dist/scene/basesprite.js +4 -2
  116. package/dist/scene/basesprite.js.map +1 -1
  117. package/dist/scene/batchgroup.js +3 -1
  118. package/dist/scene/batchgroup.js.map +1 -1
  119. package/dist/scene/environment.js +11 -1
  120. package/dist/scene/environment.js.map +1 -1
  121. package/dist/scene/light.js +21 -3
  122. package/dist/scene/light.js.map +1 -1
  123. package/dist/scene/mesh.js +29 -14
  124. package/dist/scene/mesh.js.map +1 -1
  125. package/dist/scene/meshdrawable.js +6 -0
  126. package/dist/scene/meshdrawable.js.map +1 -1
  127. package/dist/scene/msdftext.js +5 -2
  128. package/dist/scene/msdftext.js.map +1 -1
  129. package/dist/scene/msdftextsprite.js +5 -3
  130. package/dist/scene/msdftextsprite.js.map +1 -1
  131. package/dist/scene/particlesys.js +3 -1
  132. package/dist/scene/particlesys.js.map +1 -1
  133. package/dist/scene/scene.js +6 -5
  134. package/dist/scene/scene.js.map +1 -1
  135. package/dist/scene/terrain-cm/grass.js +4 -2
  136. package/dist/scene/terrain-cm/grass.js.map +1 -1
  137. package/dist/scene/terrain-cm/grassmaterial.js +2 -1
  138. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  139. package/dist/scene/terrain-cm/terrain-cm.js +4 -2
  140. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  141. package/dist/scene/water.js +4 -2
  142. package/dist/scene/water.js.map +1 -1
  143. package/dist/shaders/shadow.js +26 -393
  144. package/dist/shaders/shadow.js.map +1 -1
  145. package/dist/shadow/esm.js +112 -12
  146. package/dist/shadow/esm.js.map +1 -1
  147. package/dist/shadow/pcf_opt.js +2 -2
  148. package/dist/shadow/pcf_opt.js.map +1 -1
  149. package/dist/shadow/pcf_pd.js +19 -10
  150. package/dist/shadow/pcf_pd.js.map +1 -1
  151. package/dist/shadow/shader.js +58 -7
  152. package/dist/shadow/shader.js.map +1 -1
  153. package/dist/shadow/shadow_impl.js +6 -0
  154. package/dist/shadow/shadow_impl.js.map +1 -1
  155. package/dist/shadow/shadow_region.js +229 -0
  156. package/dist/shadow/shadow_region.js.map +1 -0
  157. package/dist/shadow/shadowmapper.js +67 -59
  158. package/dist/shadow/shadowmapper.js.map +1 -1
  159. package/dist/shadow/vsm.js +45 -19
  160. package/dist/shadow/vsm.js.map +1 -1
  161. package/dist/text/font/cff_font.js +890 -0
  162. package/dist/text/font/cff_font.js.map +1 -0
  163. package/dist/text/font/font_asset.js +17 -3
  164. package/dist/text/font/font_asset.js.map +1 -1
  165. package/dist/utility/blueprint/common/constants.js +8 -8
  166. package/dist/utility/blueprint/common/constants.js.map +1 -1
  167. package/dist/utility/blueprint/material/pbr.js +31 -4
  168. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  169. package/dist/utility/blueprint/material/texture.js +1 -17
  170. package/dist/utility/blueprint/material/texture.js.map +1 -1
  171. package/dist/utility/serialization/manager.js +327 -359
  172. package/dist/utility/serialization/manager.js.map +1 -1
  173. package/dist/utility/serialization/scene/animation.js +5 -2
  174. package/dist/utility/serialization/scene/animation.js.map +1 -1
  175. package/dist/utility/serialization/scene/batch.js +4 -1
  176. package/dist/utility/serialization/scene/batch.js.map +1 -1
  177. package/dist/utility/serialization/scene/camera.js +249 -54
  178. package/dist/utility/serialization/scene/camera.js.map +1 -1
  179. package/dist/utility/serialization/scene/common.js +37 -1
  180. package/dist/utility/serialization/scene/common.js.map +1 -1
  181. package/dist/utility/serialization/scene/light.js +42 -3
  182. package/dist/utility/serialization/scene/light.js.map +1 -1
  183. package/dist/utility/serialization/scene/material.js +1112 -646
  184. package/dist/utility/serialization/scene/material.js.map +1 -1
  185. package/dist/utility/serialization/scene/mesh.js +7 -4
  186. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  187. package/dist/utility/serialization/scene/node.js +31 -12
  188. package/dist/utility/serialization/scene/node.js.map +1 -1
  189. package/dist/utility/serialization/scene/particle.js +4 -1
  190. package/dist/utility/serialization/scene/particle.js.map +1 -1
  191. package/dist/utility/serialization/scene/primitive.js +3 -1
  192. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  193. package/dist/utility/serialization/scene/scene.js +18 -0
  194. package/dist/utility/serialization/scene/scene.js.map +1 -1
  195. package/dist/utility/serialization/scene/sprite.js +6 -3
  196. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  197. package/dist/utility/serialization/scene/terrain.js +5 -2
  198. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  199. package/dist/utility/serialization/scene/text.js +3 -1
  200. package/dist/utility/serialization/scene/text.js.map +1 -1
  201. package/dist/utility/serialization/scene/water.js +4 -1
  202. package/dist/utility/serialization/scene/water.js.map +1 -1
  203. package/dist/utility/textures/ltcdata.js +6 -0
  204. package/dist/utility/textures/ltcdata.js.map +1 -0
  205. package/dist/utility/textures/ltclut.js +61 -0
  206. package/dist/utility/textures/ltclut.js.map +1 -0
  207. package/dist/values.js +9 -1
  208. package/dist/values.js.map +1 -1
  209. package/package.json +3 -3
  210. package/dist/animation/ik/ik_chain_builder.js +0 -68
  211. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  212. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  213. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  214. package/dist/animation/ik/ik_track.js +0 -96
  215. package/dist/animation/ik/ik_track.js.map +0 -1
  216. package/dist/animation/ik_postprocessor.js +0 -71
  217. package/dist/animation/ik_postprocessor.js.map +0 -1
  218. package/dist/animation/joint_dynamics/math.js +0 -16
  219. package/dist/animation/joint_dynamics/math.js.map +0 -1
  220. package/dist/animation/manual_transform_processor.js +0 -156
  221. package/dist/animation/manual_transform_processor.js.map +0 -1
  222. package/dist/animation/skeleton_postprocessor.js +0 -50
  223. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  224. package/dist/animation/spring2/collision.js +0 -469
  225. package/dist/animation/spring2/collision.js.map +0 -1
  226. package/dist/animation/spring2/constraints.js +0 -329
  227. package/dist/animation/spring2/constraints.js.map +0 -1
  228. package/dist/animation/spring2/controller.js +0 -434
  229. package/dist/animation/spring2/controller.js.map +0 -1
  230. package/dist/animation/spring2/math.js +0 -16
  231. package/dist/animation/spring2/math.js.map +0 -1
  232. package/dist/animation/spring2/solver.js +0 -624
  233. package/dist/animation/spring2/solver.js.map +0 -1
  234. package/dist/animation/spring2/spring_system.js +0 -118
  235. package/dist/animation/spring2/spring_system.js.map +0 -1
  236. package/dist/animation/spring2/types.js +0 -19
  237. package/dist/animation/spring2/types.js.map +0 -1
  238. package/dist/animation/spring_postprocessor.js +0 -54
  239. package/dist/animation/spring_postprocessor.js.map +0 -1
  240. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1276
  241. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  242. package/dist/asset/loaders/gltf/helpers.js +0 -331
  243. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  244. package/dist/material/sprite3d.js +0 -301
  245. package/dist/material/sprite3d.js.map +0 -1
  246. package/dist/material/sprite3d_std.js +0 -116
  247. package/dist/material/sprite3d_std.js.map +0 -1
  248. package/dist/material/sprite3dblueprint.js +0 -235
  249. package/dist/material/sprite3dblueprint.js.map +0 -1
  250. package/dist/material/sprite_sdf.js +0 -106
  251. package/dist/material/sprite_sdf.js.map +0 -1
  252. package/dist/material/terrainmaterial.js +0 -368
  253. package/dist/material/terrainmaterial.js.map +0 -1
  254. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  255. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  256. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  257. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  258. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  259. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  260. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  261. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  262. package/dist/render/deferredlightpass.js +0 -510
  263. package/dist/render/deferredlightpass.js.map +0 -1
  264. package/dist/render/deferredshadowlightpass.js +0 -428
  265. package/dist/render/deferredshadowlightpass.js.map +0 -1
  266. package/dist/render/gbufferpass.js +0 -50
  267. package/dist/render/gbufferpass.js.map +0 -1
  268. package/dist/scene/sdftextsprite.js +0 -322
  269. package/dist/scene/sdftextsprite.js.map +0 -1
  270. package/dist/scene/sprite3d.js +0 -18
  271. package/dist/scene/sprite3d.js.map +0 -1
  272. package/dist/scene/terrain/grass.js +0 -280
  273. package/dist/scene/terrain/grass.js.map +0 -1
  274. package/dist/scene/terrain/heightfield.js +0 -475
  275. package/dist/scene/terrain/heightfield.js.map +0 -1
  276. package/dist/scene/terrain/patch.js +0 -532
  277. package/dist/scene/terrain/patch.js.map +0 -1
  278. package/dist/scene/terrain/quadtree.js +0 -461
  279. package/dist/scene/terrain/quadtree.js.map +0 -1
  280. package/dist/scene/terrain/terrain.js +0 -231
  281. package/dist/scene/terrain/terrain.js.map +0 -1
  282. package/dist/src/animation/animation.js +0 -127
  283. package/dist/src/animation/animation.js.map +0 -1
  284. package/dist/src/animation/animationset.js +0 -255
  285. package/dist/src/animation/animationset.js.map +0 -1
  286. package/dist/src/animation/animationtrack.js +0 -34
  287. package/dist/src/animation/animationtrack.js.map +0 -1
  288. package/dist/src/animation/eulerrotationtrack.js +0 -52
  289. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  290. package/dist/src/animation/morphtarget.js +0 -93
  291. package/dist/src/animation/morphtarget.js.map +0 -1
  292. package/dist/src/animation/morphtrack.js +0 -70
  293. package/dist/src/animation/morphtrack.js.map +0 -1
  294. package/dist/src/animation/proptrack.js +0 -161
  295. package/dist/src/animation/proptrack.js.map +0 -1
  296. package/dist/src/animation/rotationtrack.js +0 -51
  297. package/dist/src/animation/rotationtrack.js.map +0 -1
  298. package/dist/src/animation/scaletrack.js +0 -50
  299. package/dist/src/animation/scaletrack.js.map +0 -1
  300. package/dist/src/animation/skeleton.js +0 -204
  301. package/dist/src/animation/skeleton.js.map +0 -1
  302. package/dist/src/animation/translationtrack.js +0 -50
  303. package/dist/src/animation/translationtrack.js.map +0 -1
  304. package/dist/src/app/app.js +0 -129
  305. package/dist/src/app/app.js.map +0 -1
  306. package/dist/src/app/inputmgr.js +0 -267
  307. package/dist/src/app/inputmgr.js.map +0 -1
  308. package/dist/src/asset/assetmanager.js +0 -404
  309. package/dist/src/asset/assetmanager.js.map +0 -1
  310. package/dist/src/asset/builtin.js +0 -337
  311. package/dist/src/asset/builtin.js.map +0 -1
  312. package/dist/src/asset/loaders/dds/dds.js +0 -470
  313. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  314. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  315. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  316. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  317. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  318. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  319. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  320. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  321. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  322. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  323. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  324. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  325. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  326. package/dist/src/asset/loaders/loader.js +0 -45
  327. package/dist/src/asset/loaders/loader.js.map +0 -1
  328. package/dist/src/asset/model.js +0 -414
  329. package/dist/src/asset/model.js.map +0 -1
  330. package/dist/src/blitter/bilateralblur.js +0 -221
  331. package/dist/src/blitter/bilateralblur.js.map +0 -1
  332. package/dist/src/blitter/blitter.js +0 -390
  333. package/dist/src/blitter/blitter.js.map +0 -1
  334. package/dist/src/blitter/box.js +0 -118
  335. package/dist/src/blitter/box.js.map +0 -1
  336. package/dist/src/blitter/copy.js +0 -22
  337. package/dist/src/blitter/copy.js.map +0 -1
  338. package/dist/src/blitter/gaussianblur.js +0 -228
  339. package/dist/src/blitter/gaussianblur.js.map +0 -1
  340. package/dist/src/camera/base.js +0 -92
  341. package/dist/src/camera/base.js.map +0 -1
  342. package/dist/src/camera/camera.js +0 -1005
  343. package/dist/src/camera/camera.js.map +0 -1
  344. package/dist/src/camera/fps.js +0 -238
  345. package/dist/src/camera/fps.js.map +0 -1
  346. package/dist/src/camera/orbit.js +0 -245
  347. package/dist/src/camera/orbit.js.map +0 -1
  348. package/dist/src/camera/orthocamera.js +0 -167
  349. package/dist/src/camera/orthocamera.js.map +0 -1
  350. package/dist/src/camera/perspectivecamera.js +0 -141
  351. package/dist/src/camera/perspectivecamera.js.map +0 -1
  352. package/dist/src/index.js +0 -120
  353. package/dist/src/index.js.map +0 -1
  354. package/dist/src/material/blinn.js +0 -81
  355. package/dist/src/material/blinn.js.map +0 -1
  356. package/dist/src/material/grassmaterial.js +0 -113
  357. package/dist/src/material/grassmaterial.js.map +0 -1
  358. package/dist/src/material/lambert.js +0 -92
  359. package/dist/src/material/lambert.js.map +0 -1
  360. package/dist/src/material/material.js +0 -301
  361. package/dist/src/material/material.js.map +0 -1
  362. package/dist/src/material/meshmaterial.js +0 -704
  363. package/dist/src/material/meshmaterial.js.map +0 -1
  364. package/dist/src/material/mixins/albedocolor.js +0 -76
  365. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  366. package/dist/src/material/mixins/foliage.js +0 -47
  367. package/dist/src/material/mixins/foliage.js.map +0 -1
  368. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  369. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  370. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  371. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  372. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  373. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  374. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  375. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  376. package/dist/src/material/mixins/lit.js +0 -476
  377. package/dist/src/material/mixins/lit.js.map +0 -1
  378. package/dist/src/material/mixins/pbr/common.js +0 -918
  379. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  380. package/dist/src/material/mixins/texture.js +0 -172
  381. package/dist/src/material/mixins/texture.js.map +0 -1
  382. package/dist/src/material/mixins/vertexcolor.js +0 -56
  383. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  384. package/dist/src/material/particle.js +0 -178
  385. package/dist/src/material/particle.js.map +0 -1
  386. package/dist/src/material/pbrmr.js +0 -97
  387. package/dist/src/material/pbrmr.js.map +0 -1
  388. package/dist/src/material/pbrsg.js +0 -97
  389. package/dist/src/material/pbrsg.js.map +0 -1
  390. package/dist/src/material/shader/helper.js +0 -1209
  391. package/dist/src/material/shader/helper.js.map +0 -1
  392. package/dist/src/material/terrain-cm.js +0 -606
  393. package/dist/src/material/terrain-cm.js.map +0 -1
  394. package/dist/src/material/terrainmaterial.js +0 -375
  395. package/dist/src/material/terrainmaterial.js.map +0 -1
  396. package/dist/src/material/unlit.js +0 -41
  397. package/dist/src/material/unlit.js.map +0 -1
  398. package/dist/src/material/water.js +0 -417
  399. package/dist/src/material/water.js.map +0 -1
  400. package/dist/src/posteffect/bloom.js +0 -361
  401. package/dist/src/posteffect/bloom.js.map +0 -1
  402. package/dist/src/posteffect/compositor.js +0 -226
  403. package/dist/src/posteffect/compositor.js.map +0 -1
  404. package/dist/src/posteffect/fxaa.js +0 -273
  405. package/dist/src/posteffect/fxaa.js.map +0 -1
  406. package/dist/src/posteffect/grayscale.js +0 -69
  407. package/dist/src/posteffect/grayscale.js.map +0 -1
  408. package/dist/src/posteffect/motionblur.js +0 -96
  409. package/dist/src/posteffect/motionblur.js.map +0 -1
  410. package/dist/src/posteffect/posteffect.js +0 -126
  411. package/dist/src/posteffect/posteffect.js.map +0 -1
  412. package/dist/src/posteffect/sao.js +0 -324
  413. package/dist/src/posteffect/sao.js.map +0 -1
  414. package/dist/src/posteffect/ssr.js +0 -489
  415. package/dist/src/posteffect/ssr.js.map +0 -1
  416. package/dist/src/posteffect/taa.js +0 -172
  417. package/dist/src/posteffect/taa.js.map +0 -1
  418. package/dist/src/posteffect/tonemap.js +0 -94
  419. package/dist/src/posteffect/tonemap.js.map +0 -1
  420. package/dist/src/render/abuffer_oit.js +0 -361
  421. package/dist/src/render/abuffer_oit.js.map +0 -1
  422. package/dist/src/render/clipmap.js +0 -851
  423. package/dist/src/render/clipmap.js.map +0 -1
  424. package/dist/src/render/cluster_light.js +0 -333
  425. package/dist/src/render/cluster_light.js.map +0 -1
  426. package/dist/src/render/cull_visitor.js +0 -187
  427. package/dist/src/render/cull_visitor.js.map +0 -1
  428. package/dist/src/render/depthpass.js +0 -68
  429. package/dist/src/render/depthpass.js.map +0 -1
  430. package/dist/src/render/drawable_mixin.js +0 -227
  431. package/dist/src/render/drawable_mixin.js.map +0 -1
  432. package/dist/src/render/envlight.js +0 -463
  433. package/dist/src/render/envlight.js.map +0 -1
  434. package/dist/src/render/fbm_wavegenerator.js +0 -251
  435. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  436. package/dist/src/render/fft_wavegenerator.js +0 -1006
  437. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  438. package/dist/src/render/fullscreenquad.js +0 -38
  439. package/dist/src/render/fullscreenquad.js.map +0 -1
  440. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  441. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  442. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  443. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  444. package/dist/src/render/hzb.js +0 -273
  445. package/dist/src/render/hzb.js.map +0 -1
  446. package/dist/src/render/lightpass.js +0 -172
  447. package/dist/src/render/lightpass.js.map +0 -1
  448. package/dist/src/render/objectcolorpass.js +0 -51
  449. package/dist/src/render/objectcolorpass.js.map +0 -1
  450. package/dist/src/render/primitive.js +0 -364
  451. package/dist/src/render/primitive.js.map +0 -1
  452. package/dist/src/render/render_queue.js +0 -467
  453. package/dist/src/render/render_queue.js.map +0 -1
  454. package/dist/src/render/renderbundle_wrapper.js +0 -152
  455. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  456. package/dist/src/render/renderer.js +0 -455
  457. package/dist/src/render/renderer.js.map +0 -1
  458. package/dist/src/render/renderpass.js +0 -200
  459. package/dist/src/render/renderpass.js.map +0 -1
  460. package/dist/src/render/shadowmap_pass.js +0 -56
  461. package/dist/src/render/shadowmap_pass.js.map +0 -1
  462. package/dist/src/render/sky.js +0 -1103
  463. package/dist/src/render/sky.js.map +0 -1
  464. package/dist/src/render/weightedblended_oit.js +0 -168
  465. package/dist/src/render/weightedblended_oit.js.map +0 -1
  466. package/dist/src/scene/batchgroup.js +0 -162
  467. package/dist/src/scene/batchgroup.js.map +0 -1
  468. package/dist/src/scene/environment.js +0 -209
  469. package/dist/src/scene/environment.js.map +0 -1
  470. package/dist/src/scene/graph_node.js +0 -72
  471. package/dist/src/scene/graph_node.js.map +0 -1
  472. package/dist/src/scene/light.js +0 -416
  473. package/dist/src/scene/light.js.map +0 -1
  474. package/dist/src/scene/mesh.js +0 -341
  475. package/dist/src/scene/mesh.js.map +0 -1
  476. package/dist/src/scene/octree.js +0 -649
  477. package/dist/src/scene/octree.js.map +0 -1
  478. package/dist/src/scene/particlesys.js +0 -738
  479. package/dist/src/scene/particlesys.js.map +0 -1
  480. package/dist/src/scene/raycast_visitor.js +0 -103
  481. package/dist/src/scene/raycast_visitor.js.map +0 -1
  482. package/dist/src/scene/scene.js +0 -284
  483. package/dist/src/scene/scene.js.map +0 -1
  484. package/dist/src/scene/scene_node.js +0 -732
  485. package/dist/src/scene/scene_node.js.map +0 -1
  486. package/dist/src/scene/terrain/grass.js +0 -278
  487. package/dist/src/scene/terrain/grass.js.map +0 -1
  488. package/dist/src/scene/terrain/heightfield.js +0 -475
  489. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  490. package/dist/src/scene/terrain/patch.js +0 -530
  491. package/dist/src/scene/terrain/patch.js.map +0 -1
  492. package/dist/src/scene/terrain/quadtree.js +0 -461
  493. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  494. package/dist/src/scene/terrain/terrain.js +0 -246
  495. package/dist/src/scene/terrain/terrain.js.map +0 -1
  496. package/dist/src/scene/terrain-cm/grass.js +0 -594
  497. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  498. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  499. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  500. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  501. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  502. package/dist/src/scene/water.js +0 -374
  503. package/dist/src/scene/water.js.map +0 -1
  504. package/dist/src/shaders/atmosphere.js +0 -957
  505. package/dist/src/shaders/atmosphere.js.map +0 -1
  506. package/dist/src/shaders/fog.js +0 -112
  507. package/dist/src/shaders/fog.js.map +0 -1
  508. package/dist/src/shaders/misc.js +0 -266
  509. package/dist/src/shaders/misc.js.map +0 -1
  510. package/dist/src/shaders/noise.js +0 -222
  511. package/dist/src/shaders/noise.js.map +0 -1
  512. package/dist/src/shaders/pbr.js +0 -51
  513. package/dist/src/shaders/pbr.js.map +0 -1
  514. package/dist/src/shaders/shadow.js +0 -636
  515. package/dist/src/shaders/shadow.js.map +0 -1
  516. package/dist/src/shaders/ssr.js +0 -490
  517. package/dist/src/shaders/ssr.js.map +0 -1
  518. package/dist/src/shaders/temporal.js +0 -215
  519. package/dist/src/shaders/temporal.js.map +0 -1
  520. package/dist/src/shaders/water.js +0 -756
  521. package/dist/src/shaders/water.js.map +0 -1
  522. package/dist/src/shadow/esm.js +0 -237
  523. package/dist/src/shadow/esm.js.map +0 -1
  524. package/dist/src/shadow/pcf_opt.js +0 -181
  525. package/dist/src/shadow/pcf_opt.js.map +0 -1
  526. package/dist/src/shadow/pcf_pd.js +0 -189
  527. package/dist/src/shadow/pcf_pd.js.map +0 -1
  528. package/dist/src/shadow/shader.js +0 -37
  529. package/dist/src/shadow/shader.js.map +0 -1
  530. package/dist/src/shadow/shadow_impl.js +0 -15
  531. package/dist/src/shadow/shadow_impl.js.map +0 -1
  532. package/dist/src/shadow/shadowmapper.js +0 -790
  533. package/dist/src/shadow/shadowmapper.js.map +0 -1
  534. package/dist/src/shadow/ssm.js +0 -159
  535. package/dist/src/shadow/ssm.js.map +0 -1
  536. package/dist/src/shadow/vsm.js +0 -297
  537. package/dist/src/shadow/vsm.js.map +0 -1
  538. package/dist/src/shapes/box.js +0 -386
  539. package/dist/src/shapes/box.js.map +0 -1
  540. package/dist/src/shapes/cylinder.js +0 -125
  541. package/dist/src/shapes/cylinder.js.map +0 -1
  542. package/dist/src/shapes/plane.js +0 -88
  543. package/dist/src/shapes/plane.js.map +0 -1
  544. package/dist/src/shapes/shape.js +0 -87
  545. package/dist/src/shapes/shape.js.map +0 -1
  546. package/dist/src/shapes/sphere.js +0 -114
  547. package/dist/src/shapes/sphere.js.map +0 -1
  548. package/dist/src/shapes/tetrahedron.js +0 -188
  549. package/dist/src/shapes/tetrahedron.js.map +0 -1
  550. package/dist/src/shapes/torus.js +0 -111
  551. package/dist/src/shapes/torus.js.map +0 -1
  552. package/dist/src/utility/aabbtree.js +0 -400
  553. package/dist/src/utility/aabbtree.js.map +0 -1
  554. package/dist/src/utility/bounding_volume.js +0 -29
  555. package/dist/src/utility/bounding_volume.js.map +0 -1
  556. package/dist/src/utility/debug.js +0 -28
  557. package/dist/src/utility/debug.js.map +0 -1
  558. package/dist/src/utility/draco/decoder.js +0 -116
  559. package/dist/src/utility/draco/decoder.js.map +0 -1
  560. package/dist/src/utility/misc.js +0 -105
  561. package/dist/src/utility/misc.js.map +0 -1
  562. package/dist/src/utility/panorama.js +0 -163
  563. package/dist/src/utility/panorama.js.map +0 -1
  564. package/dist/src/utility/pmrem.js +0 -354
  565. package/dist/src/utility/pmrem.js.map +0 -1
  566. package/dist/src/utility/rendermipmap.js +0 -115
  567. package/dist/src/utility/rendermipmap.js.map +0 -1
  568. package/dist/src/utility/serialization/json.js +0 -402
  569. package/dist/src/utility/serialization/json.js.map +0 -1
  570. package/dist/src/utility/serialization/manager.js +0 -623
  571. package/dist/src/utility/serialization/manager.js.map +0 -1
  572. package/dist/src/utility/serialization/scene/animation.js +0 -248
  573. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  574. package/dist/src/utility/serialization/scene/batch.js +0 -59
  575. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  576. package/dist/src/utility/serialization/scene/camera.js +0 -790
  577. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  578. package/dist/src/utility/serialization/scene/common.js +0 -222
  579. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  580. package/dist/src/utility/serialization/scene/light.js +0 -575
  581. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  582. package/dist/src/utility/serialization/scene/material.js +0 -1111
  583. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  584. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  585. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  586. package/dist/src/utility/serialization/scene/misc.js +0 -39
  587. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  588. package/dist/src/utility/serialization/scene/node.js +0 -451
  589. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  590. package/dist/src/utility/serialization/scene/particle.js +0 -425
  591. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  592. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  593. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  594. package/dist/src/utility/serialization/scene/scene.js +0 -704
  595. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  596. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  597. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  598. package/dist/src/utility/serialization/scene/water.js +0 -465
  599. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  600. package/dist/src/utility/shprojector.js +0 -297
  601. package/dist/src/utility/shprojector.js.map +0 -1
  602. package/dist/src/utility/textures/ggxlut.js +0 -213
  603. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  604. package/dist/src/utility/textures/gradientnoise.js +0 -62
  605. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  606. package/dist/src/utility/textures/randomnoise.js +0 -41
  607. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  608. package/dist/src/values.js +0 -162
  609. package/dist/src/values.js.map +0 -1
  610. package/dist/utility/blueprint/material/common.js +0 -7
  611. package/dist/utility/blueprint/material/common.js.map +0 -1
  612. package/dist/utility/serialization/blueprint/constants.js +0 -255
  613. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  614. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  615. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  616. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  617. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  618. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  619. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  620. package/dist/utility/serialization/scene/spring_script.js +0 -596
  621. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderer.js","sources":["../../../src/render/renderer.ts"],"sourcesContent":["import { LightPass } from './lightpass';\nimport { ShadowMapPass } from './shadowmap_pass';\nimport { DepthPass } from './depthpass';\nimport { isPowerOf2, Matrix4x4, nextPowerOf2, Vector3, Vector4 } from '@zephyr3d/base';\nimport type {\n BindGroup,\n ColorState,\n FrameBuffer,\n GPUProgram,\n Texture2D,\n TextureFormat\n} from '@zephyr3d/device';\nimport { Application } from '../app/app';\nimport { CopyBlitter } from '../blitter';\nimport type { DrawContext } from './drawable';\nimport type { RenderQueue } from './render_queue';\nimport type { PunctualLight, Scene } from '../scene';\nimport type { PickResult } from '../camera';\nimport { Camera } from '../camera';\nimport { AbstractPostEffect, PostEffectLayer } from '../posteffect/posteffect';\nimport { ClusteredLight } from './cluster_light';\nimport { GlobalBindGroupAllocator } from './globalbindgroup_allocator';\nimport { ObjectColorPass } from './objectcolorpass';\nimport { buildHiZ } from './hzb';\nimport { MaterialVaryingFlags } from '../values';\nimport { fetchSampler } from '../utility/misc';\nimport type { Primitive } from '.';\nimport { BoxShape } from '../shapes';\n\n/**\n * Forward render scheme\n * @internal\n */\nexport class SceneRenderer {\n /** @internal */\n private static _skyMotionVectorProgram: GPUProgram = null;\n /** @internal */\n private static _skyMotionVectorBindGroup: BindGroup = null;\n private static _box: Primitive = null;\n /** @internal */\n private static readonly _pickCamera = new Camera(null);\n /** @internal */\n private static readonly _scenePass = new LightPass();\n /** @internal */\n private static readonly _depthPass = new DepthPass();\n /** @internal */\n private static readonly _shadowMapPass = new ShadowMapPass();\n /** @internal */\n private static readonly _objectColorPass = new ObjectColorPass();\n /** @internal */\n private static _frontDepthColorState: ColorState = null;\n /** @internal */\n private static _backDepthColorState: ColorState = null;\n /** @internal */\n private static readonly _clusters: ClusteredLight[] = [];\n /** lighting render pass */\n static get sceneRenderPass(): LightPass {\n return this._scenePass;\n }\n /** depth render pass */\n static get depthRenderPass(): DepthPass {\n return this._depthPass;\n }\n /** shadow map render pass */\n static get shadowMapRenderPass(): ShadowMapPass {\n return this._shadowMapPass;\n }\n /** @internal */\n static getClusteredLight(): ClusteredLight {\n if (this._clusters.length > 0) {\n return this._clusters.pop();\n }\n return new ClusteredLight();\n }\n /** @internal */\n static freeClusteredLight(clusteredLight: ClusteredLight) {\n this._clusters.push(clusteredLight);\n }\n /**\n * Renders a scene by given camera\n * @param scene - The scene tondered\n * @param camera - The camera that will be used to render the scene\n * @param compositor - The compositor that will be used to apply postprocess effects\n */\n static renderScene(scene: Scene, camera: Camera): void {\n const device = Application.instance.device;\n const colorFormat = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\n ? 'rgba16f'\n : 'rgba8unorm';\n const depthFormat = device.getDeviceCaps().framebufferCaps.supportDepth32floatStencil8\n ? 'd32fs8'\n : 'd24s8';\n const globalBindGroupAllocator = GlobalBindGroupAllocator.get();\n scene.frameUpdate();\n scene.frameUpdatePerCamera(camera);\n if (camera && !device.isContextLost()) {\n const defaultViewport = !camera.viewport && !camera.scissor;\n const renderX = camera.viewport ? device.screenToDevice(camera.viewport[0]) : 0;\n const renderY = camera.viewport ? device.screenToDevice(camera.viewport[1]) : 0;\n const renderWidth = camera.viewport\n ? device.screenToDevice(camera.viewport[2])\n : device.getDrawingBufferWidth();\n const renderHeight = camera.viewport\n ? device.screenToDevice(camera.viewport[3])\n : device.getDrawingBufferHeight();\n if (renderWidth <= 0 || renderHeight <= 0) {\n camera.getPickResultResolveFunc()?.(null);\n return;\n }\n const tmpFramebuffer = defaultViewport\n ? null\n : device.pool.fetchTemporalFramebuffer(false, renderWidth, renderHeight, colorFormat, depthFormat);\n const originFramebuffer = device.getFramebuffer();\n if (tmpFramebuffer) {\n device.pushDeviceStates();\n device.setFramebuffer(tmpFramebuffer);\n }\n const SSR = camera.SSR && scene.env.light.envLight && scene.env.light.envLight.hasRadiance();\n const ctx: DrawContext = {\n device,\n scene,\n renderWidth,\n renderHeight,\n primaryCamera: camera,\n picking: false,\n oit: null,\n motionVectors: device.type !== 'webgl' && (camera.TAA || camera.motionBlur),\n HiZ: camera.HiZ && device.type !== 'webgl',\n HiZTexture: null,\n globalBindGroupAllocator,\n camera,\n compositor: camera.compositor,\n timestamp: device.frameInfo.frameTimestamp,\n queue: 0,\n lightBlending: false,\n renderPass: null,\n renderPassHash: null,\n fogFlags: 0,\n flip: false,\n depthFormat,\n colorFormat,\n drawEnvLight: false,\n env: null,\n materialFlags: 0,\n TAA: camera.TAA,\n SSR,\n SSRCalcThickness: SSR && camera.ssrCalcThickness,\n SSRRoughnessTexture: device.pool.fetchTemporalTexture2D(\n true,\n 'rgba8unorm',\n renderWidth,\n renderHeight\n ),\n SSRNormalTexture: device.pool.fetchTemporalTexture2D(true, 'rgba8unorm', renderWidth, renderHeight),\n finalFramebuffer: device.getFramebuffer(),\n intermediateFramebuffer: null\n };\n this._renderScene(ctx);\n if (tmpFramebuffer) {\n device.popDeviceStates();\n const oversizedViewport =\n renderX < 0 ||\n renderY < 0 ||\n renderX + renderWidth > device.getDrawingBufferWidth() ||\n renderY + renderHeight > device.getDrawingBufferHeight();\n const blitter = new CopyBlitter();\n if (oversizedViewport) {\n blitter.destRect = [renderX, renderY, renderWidth, renderHeight];\n } else {\n blitter.viewport = camera.viewport;\n }\n blitter.scissor = camera.scissor;\n blitter.blit(\n tmpFramebuffer.getColorAttachments()[0],\n originFramebuffer ?? null,\n fetchSampler('clamp_nearest_nomip')\n );\n device.pool.releaseFrameBuffer(tmpFramebuffer);\n }\n }\n GlobalBindGroupAllocator.release(globalBindGroupAllocator);\n }\n private static renderSceneDepth(ctx: DrawContext, renderQueue: RenderQueue, depthFramebuffer: FrameBuffer) {\n const transmission = !!depthFramebuffer;\n if (!depthFramebuffer) {\n const format: TextureFormat =\n ctx.device.type === 'webgl'\n ? ctx.SSRCalcThickness\n ? 'rgba16f'\n : 'rgba8unorm'\n : ctx.SSRCalcThickness\n ? 'rg32f'\n : 'r32f';\n const mvFormat: TextureFormat = ctx.device.type === 'webgl' ? 'rgba16f' : 'rgba16f';\n if (!ctx.finalFramebuffer) {\n depthFramebuffer = ctx.device.pool.fetchTemporalFramebuffer(\n true,\n ctx.renderWidth,\n ctx.renderHeight,\n ctx.motionVectors ? [format, mvFormat] : format,\n ctx.depthFormat,\n false\n );\n } else {\n const originDepth = ctx.finalFramebuffer?.getDepthAttachment();\n depthFramebuffer = originDepth?.isTexture2D()\n ? ctx.device.pool.fetchTemporalFramebuffer(\n true,\n originDepth.width,\n originDepth.height,\n ctx.motionVectors ? [format, mvFormat] : format,\n originDepth,\n false\n )\n : ctx.device.pool.fetchTemporalFramebuffer(\n true,\n ctx.renderWidth,\n ctx.renderHeight,\n ctx.motionVectors ? [format, mvFormat] : format,\n ctx.depthFormat,\n false\n );\n }\n }\n ctx.device.pushDeviceStates();\n ctx.device.setFramebuffer(depthFramebuffer);\n this._depthPass.encodeDepth = depthFramebuffer.getColorAttachments()[0].format === 'rgba8unorm';\n this._depthPass.clearColor = transmission\n ? null\n : this._depthPass.encodeDepth\n ? new Vector4(0, 0, 0, 1)\n : new Vector4(1, 1, 1, 1);\n this._depthPass.clearDepth = transmission ? null : 1;\n this._depthPass.clearStencil = null;\n this._depthPass.transmission = transmission;\n if (ctx.SSRCalcThickness && !transmission) {\n if (!this._backDepthColorState) {\n this._backDepthColorState = ctx.device.createColorState().setColorMask(false, true, false, false);\n }\n if (!this._frontDepthColorState) {\n this._frontDepthColorState = ctx.device.createColorState().setColorMask(true, false, false, false);\n }\n ctx.forceColorState = this._backDepthColorState;\n ctx.forceCullMode = 'front';\n this._depthPass.renderBackface = true;\n this._depthPass.transmission = false;\n this._depthPass.render(ctx, null, renderQueue);\n this._depthPass.clearColor = null;\n this._depthPass.renderBackface = false;\n ctx.forceColorState = this._frontDepthColorState;\n ctx.forceCullMode = null;\n }\n this._depthPass.render(ctx, null, renderQueue);\n ctx.forceColorState = null;\n ctx.device.popDeviceStates();\n\n if (!transmission) {\n ctx.motionVectorTexture = ctx.motionVectors\n ? (depthFramebuffer.getColorAttachments()[1] as Texture2D)\n : null;\n ctx.linearDepthTexture = depthFramebuffer.getColorAttachments()[0] as Texture2D;\n ctx.depthTexture = depthFramebuffer.getDepthAttachment() as Texture2D;\n if (ctx.motionVectorTexture) {\n this.renderSkyMotionVectors(ctx);\n }\n if (ctx.HiZ) {\n let w = isPowerOf2(ctx.linearDepthTexture.width)\n ? ctx.linearDepthTexture.width\n : nextPowerOf2(ctx.linearDepthTexture.width);\n let h = isPowerOf2(ctx.linearDepthTexture.height)\n ? ctx.linearDepthTexture.height\n : nextPowerOf2(ctx.linearDepthTexture.height);\n w = Math.max(1, w >> 1);\n h = Math.max(1, h >> 1);\n w = ctx.linearDepthTexture.width;\n h = ctx.linearDepthTexture.height;\n const HiZFrameBuffer = ctx.device.pool.fetchTemporalFramebuffer(\n true,\n w,\n h,\n ctx.linearDepthTexture.format,\n null,\n true\n );\n buildHiZ(ctx.depthTexture, HiZFrameBuffer);\n ctx.HiZTexture = HiZFrameBuffer.getColorAttachments()[0] as Texture2D;\n }\n }\n return depthFramebuffer;\n }\n /** @internal */\n protected static _renderScene(ctx: DrawContext): void {\n const device = ctx.device;\n\n // Cull scene\n const renderQueue = this._scenePass.cullScene(ctx, ctx.camera);\n\n // Update sky\n const sunLightColor = ctx.scene.env.sky.update(ctx);\n\n // Gather lights\n ctx.clusteredLight = this.getClusteredLight();\n ctx.clusteredLight.calculateLightIndex(ctx.camera, renderQueue);\n\n // Do GPU ray picking if required\n const pickResolveFunc = ctx.camera.getPickResultResolveFunc();\n if (pickResolveFunc) {\n this.renderObjectColors(ctx, pickResolveFunc, renderQueue);\n }\n\n // Render shadow maps\n this.renderShadowMaps(ctx, renderQueue.shadowedLights);\n\n // Render scene depth first\n const depthFramebuffer = this.renderSceneDepth(ctx, renderQueue, null);\n if (ctx.depthTexture === ctx.finalFramebuffer?.getDepthAttachment()) {\n ctx.intermediateFramebuffer = ctx.finalFramebuffer;\n } else {\n // TODO: fetch resizable framebuffer if ctx.defaultViewport is true\n ctx.intermediateFramebuffer = device.pool.fetchTemporalFramebuffer(\n false,\n ctx.depthTexture.width,\n ctx.depthTexture.height,\n ctx.colorFormat,\n ctx.depthTexture\n );\n }\n if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {\n device.pushDeviceStates();\n device.setFramebuffer(ctx.intermediateFramebuffer);\n } else {\n device.setViewport(null);\n device.setScissor(null);\n }\n this._scenePass.transmission = false; // transmission\n this._scenePass.clearDepth = ctx.depthTexture ? null : 1;\n this._scenePass.clearStencil = ctx.depthTexture ? null : 0;\n if (ctx.SSR && !renderQueue.needSceneColor()) {\n ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\n }\n ctx.compositor?.begin(ctx);\n if (renderQueue.needSceneColor()) {\n const compositor = ctx.compositor;\n ctx.compositor = null;\n const sceneColorFramebuffer = device.pool.fetchTemporalFramebuffer(\n true,\n ctx.depthTexture.width,\n ctx.depthTexture.height,\n ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS\n ? [\n ctx.colorFormat,\n device.getFramebuffer().getColorAttachments()[1],\n device.getFramebuffer().getColorAttachments()[2]\n ]\n : ctx.colorFormat,\n ctx.depthTexture,\n false\n );\n device.pushDeviceStates();\n device.setFramebuffer(sceneColorFramebuffer);\n this._scenePass.transmission = false;\n this._scenePass.render(ctx, null, renderQueue);\n device.popDeviceStates();\n ctx.sceneColorTexture = sceneColorFramebuffer.getColorAttachments()[0] as Texture2D;\n new CopyBlitter().blit(\n ctx.sceneColorTexture,\n device.getFramebuffer() ?? null,\n fetchSampler('clamp_nearest_nomip')\n );\n this._scenePass.transmission = true;\n this._scenePass.clearColor = null;\n this._scenePass.clearDepth = null;\n this._scenePass.clearStencil = null;\n ctx.compositor = compositor;\n }\n this._scenePass.render(ctx, null, renderQueue);\n if (renderQueue.needSceneColor()) {\n this.renderSceneDepth(ctx, renderQueue, depthFramebuffer);\n }\n ctx.compositor?.drawPostEffects(ctx, PostEffectLayer.end, ctx.linearDepthTexture);\n ctx.compositor?.end(ctx);\n renderQueue.dispose();\n ctx.materialFlags &= ~MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\n\n if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {\n const blitter = new CopyBlitter();\n blitter.srgbOut = !ctx.finalFramebuffer;\n const srcTex = ctx.intermediateFramebuffer.getColorAttachments()[0] as Texture2D;\n blitter.blit(srcTex, ctx.finalFramebuffer ?? null, fetchSampler('clamp_nearest_nomip'));\n device.popDeviceStates();\n device.pool.releaseFrameBuffer(ctx.intermediateFramebuffer);\n }\n //ShadowMapper.releaseTemporalResources(ctx);\n this.freeClusteredLight(ctx.clusteredLight);\n\n // Restore sun color\n if (sunLightColor) {\n ctx.sunLight.color = sunLightColor;\n }\n }\n private static _getSkyMotionVectorProgram(ctx: DrawContext): GPUProgram {\n if (!this._skyMotionVectorProgram) {\n this._skyMotionVectorProgram = ctx.device.buildRenderProgram({\n vertex(pb) {\n this.$inputs.pos = pb.vec3().attrib('position');\n this.VPMatrix = pb.mat4().uniform(0);\n this.prevVPMatrix = pb.mat4().uniform(0);\n this.cameraPos = pb.vec3().uniform(0);\n this.prevCameraPos = pb.vec3().uniform(0);\n pb.main(function () {\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\n this.clipPos.z = this.clipPos.w;\n this.$builtins.position = this.clipPos;\n this.$outputs.currentPos = this.clipPos;\n this.$outputs.prevPos = this.prevClipPos;\n });\n },\n fragment(pb) {\n this.$outputs.color = pb.vec4();\n pb.main(function () {\n this.$l.motionVector = pb.mul(\n pb.sub(\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\n ),\n 0.5\n );\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\n });\n }\n });\n }\n return this._skyMotionVectorProgram;\n }\n private static _getBox(_ctx: DrawContext) {\n if (!this._box) {\n this._box = new BoxShape({\n size: 2,\n needNormal: false,\n needUV: false\n });\n }\n return this._box;\n }\n /** @internal */\n private static renderSkyMotionVectors(ctx: DrawContext) {\n if (!ctx.motionVectorTexture) {\n return;\n }\n const fb = ctx.device.pool.fetchTemporalFramebuffer(\n false,\n 0,\n 0,\n ctx.motionVectorTexture,\n ctx.depthTexture\n );\n const program = this._getSkyMotionVectorProgram(ctx);\n if (!this._skyMotionVectorBindGroup) {\n this._skyMotionVectorBindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\n }\n const box = this._getBox(ctx);\n this._skyMotionVectorBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\n this._skyMotionVectorBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix);\n this._skyMotionVectorBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\n this._skyMotionVectorBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition);\n ctx.device.pushDeviceStates();\n ctx.device.setProgram(program);\n ctx.device.setBindGroup(0, this._skyMotionVectorBindGroup);\n ctx.device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));\n ctx.device.setFramebuffer(fb);\n box.draw();\n ctx.device.popDeviceStates();\n ctx.device.pool.releaseFrameBuffer(fb);\n }\n /** @internal */\n private static renderShadowMaps(ctx: DrawContext, lights: PunctualLight[]) {\n ctx.renderPass = this._shadowMapPass;\n ctx.device.pushDeviceStates();\n for (const light of lights) {\n light.shadow.render(ctx, this._shadowMapPass);\n }\n ctx.device.popDeviceStates();\n }\n /** @internal */\n private static decodeNormalizedFloat(rgba: Uint8Array<ArrayBuffer>): number {\n const a = rgba[0] / 255;\n const b = rgba[1] / 255;\n const c = rgba[2] / 255;\n const d = rgba[3] / 255;\n return a / (256 * 256 * 256) + b / (256 * 256) + c / 256 + d;\n }\n /** @internal */\n private static renderObjectColors(\n ctx: DrawContext,\n pickResolveFunc: (result: PickResult) => void,\n renderQueue: RenderQueue\n ) {\n const camera = ctx.camera;\n const isWebGL1 = ctx.device.type === 'webgl';\n ctx.renderPass = this._objectColorPass;\n ctx.device.pushDeviceStates();\n const fb = ctx.device.pool.fetchTemporalFramebuffer(\n false,\n 1,\n 1,\n isWebGL1 ? ['rgba8unorm', 'rgba8unorm'] : ['rgba8unorm', 'rgba32f'],\n ctx.depthFormat,\n false\n );\n ctx.device.setViewport(camera.viewport);\n const vp = ctx.device.getViewport();\n const windowX = camera.getPickPosX() / vp.width;\n const windowY = (vp.height - camera.getPickPosY() - 1) / vp.height;\n const windowW = 1 / vp.width;\n const windowH = 1 / vp.height;\n camera.worldMatrix.decompose(\n this._pickCamera.scale,\n this._pickCamera.rotation,\n this._pickCamera.position\n );\n let left = camera.getProjectionMatrix().getLeftPlane();\n let right = camera.getProjectionMatrix().getRightPlane();\n let bottom = camera.getProjectionMatrix().getBottomPlane();\n let top = camera.getProjectionMatrix().getTopPlane();\n const near = camera.getProjectionMatrix().getNearPlane();\n const far = camera.getProjectionMatrix().getFarPlane();\n const width = right - left;\n const height = top - bottom;\n left += width * windowX;\n bottom += height * windowY;\n right = left + width * windowW;\n top = bottom + height * windowH;\n this._pickCamera.setProjectionMatrix(\n camera.isPerspective()\n ? Matrix4x4.frustum(left, right, bottom, top, near, far)\n : Matrix4x4.ortho(left, right, bottom, top, near, far)\n );\n const cameraPos = isWebGL1 ? new Vector3(this._pickCamera.position) : null;\n const ray = isWebGL1 ? camera.constructRay(camera.getPickPosX(), camera.getPickPosY()) : null;\n ctx.device.setFramebuffer(fb);\n this._objectColorPass.clearColor = Vector4.zero();\n this._objectColorPass.clearDepth = 1;\n const rq = this._objectColorPass.cullScene(ctx, this._pickCamera);\n ctx.camera = this._pickCamera;\n this._objectColorPass.render(ctx, null, rq);\n ctx.camera = camera;\n ctx.device.popDeviceStates();\n const colorTex = fb.getColorAttachments()[0];\n const distanceTex = fb.getColorAttachments()[1];\n const colorPixels = new Uint8Array(4);\n const distancePixels = isWebGL1 ? new Uint8Array(4) : new Float32Array(4);\n const device = ctx.device;\n let fence: Promise<void[]>;\n if (ctx.device.type === 'webgl') {\n fence = Promise.all([\n ctx.device.runNextFrameAsync(() => colorTex.readPixels(0, 0, 1, 1, 0, 0, colorPixels)),\n ctx.device.runNextFrameAsync(() => distanceTex.readPixels(0, 0, 1, 1, 0, 0, distancePixels))\n ]);\n } else {\n fence = Promise.all([\n colorTex.readPixels(0, 0, 1, 1, 0, 0, colorPixels),\n distanceTex.readPixels(0, 0, 1, 1, 0, 0, distancePixels)\n ]);\n }\n fence\n .then(() => {\n const drawable = renderQueue.getDrawableByColor(colorPixels);\n let d = isWebGL1\n ? this.decodeNormalizedFloat(distancePixels as Uint8Array<ArrayBuffer>) * far\n : distancePixels[0];\n const intersectedPoint = new Vector3(distancePixels[0], distancePixels[1], distancePixels[2]);\n if (isWebGL1) {\n intersectedPoint.x = cameraPos.x + ray.direction.x * d;\n intersectedPoint.y = cameraPos.y + ray.direction.y * d;\n intersectedPoint.z = cameraPos.z + ray.direction.z * d;\n d = Vector3.distance(intersectedPoint, cameraPos);\n }\n pickResolveFunc(\n drawable\n ? {\n distance: d,\n intersectedPoint,\n drawable,\n target: drawable.getPickTarget()\n }\n : null\n );\n device.pool.releaseFrameBuffer(fb);\n })\n .catch((_err) => {\n camera.getPickResultResolveFunc()?.(null);\n device.pool.releaseFrameBuffer(fb);\n });\n }\n}\n"],"names":["SceneRenderer","_skyMotionVectorProgram","_skyMotionVectorBindGroup","_box","_pickCamera","Camera","_scenePass","LightPass","_depthPass","DepthPass","_shadowMapPass","ShadowMapPass","_objectColorPass","ObjectColorPass","_frontDepthColorState","_backDepthColorState","_clusters","sceneRenderPass","depthRenderPass","shadowMapRenderPass","getClusteredLight","length","pop","ClusteredLight","freeClusteredLight","clusteredLight","push","renderScene","scene","camera","device","Application","instance","colorFormat","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","depthFormat","framebufferCaps","supportDepth32floatStencil8","globalBindGroupAllocator","GlobalBindGroupAllocator","get","frameUpdate","frameUpdatePerCamera","isContextLost","defaultViewport","viewport","scissor","renderX","screenToDevice","renderY","renderWidth","getDrawingBufferWidth","renderHeight","getDrawingBufferHeight","getPickResultResolveFunc","tmpFramebuffer","pool","fetchTemporalFramebuffer","originFramebuffer","getFramebuffer","pushDeviceStates","setFramebuffer","SSR","env","light","envLight","hasRadiance","ctx","primaryCamera","picking","oit","motionVectors","type","TAA","motionBlur","HiZ","HiZTexture","compositor","timestamp","frameInfo","frameTimestamp","queue","lightBlending","renderPass","renderPassHash","fogFlags","flip","drawEnvLight","materialFlags","SSRCalcThickness","ssrCalcThickness","SSRRoughnessTexture","fetchTemporalTexture2D","SSRNormalTexture","finalFramebuffer","intermediateFramebuffer","_renderScene","popDeviceStates","oversizedViewport","blitter","CopyBlitter","destRect","blit","getColorAttachments","fetchSampler","releaseFrameBuffer","release","renderSceneDepth","renderQueue","depthFramebuffer","transmission","format","mvFormat","originDepth","getDepthAttachment","isTexture2D","width","height","encodeDepth","clearColor","Vector4","clearDepth","clearStencil","createColorState","setColorMask","forceColorState","forceCullMode","renderBackface","render","motionVectorTexture","linearDepthTexture","depthTexture","renderSkyMotionVectors","w","isPowerOf2","nextPowerOf2","h","Math","max","HiZFrameBuffer","buildHiZ","cullScene","sunLightColor","sky","update","calculateLightIndex","pickResolveFunc","renderObjectColors","renderShadowMaps","shadowedLights","setViewport","setScissor","needSceneColor","MaterialVaryingFlags","SSR_STORE_ROUGHNESS","begin","sceneColorFramebuffer","sceneColorTexture","drawPostEffects","PostEffectLayer","end","dispose","srgbOut","srcTex","sunLight","color","_getSkyMotionVectorProgram","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","prevVPMatrix","cameraPos","prevCameraPos","main","$l","worldPos","add","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","$builtins","position","$outputs","currentPos","prevPos","fragment","motionVector","sub","div","xy","_getBox","_ctx","BoxShape","size","needNormal","needUV","fb","program","createBindGroup","bindGroupLayouts","box","setValue","viewProjectionMatrix","getWorldPosition","prevPosition","setProgram","setBindGroup","setRenderStates","AbstractPostEffect","getDefaultRenderState","draw","lights","shadow","decodeNormalizedFloat","rgba","a","b","c","d","isWebGL1","vp","getViewport","windowX","getPickPosX","windowY","getPickPosY","windowW","windowH","worldMatrix","decompose","scale","rotation","left","getProjectionMatrix","getLeftPlane","right","getRightPlane","bottom","getBottomPlane","top","getTopPlane","near","getNearPlane","far","getFarPlane","setProjectionMatrix","isPerspective","Matrix4x4","frustum","ortho","Vector3","ray","constructRay","zero","rq","colorTex","distanceTex","colorPixels","Uint8Array","distancePixels","Float32Array","fence","Promise","all","runNextFrameAsync","readPixels","then","drawable","getDrawableByColor","intersectedPoint","x","direction","y","distance","target","getPickTarget","catch","_err"],"mappings":"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"}
@@ -1,200 +0,0 @@
1
- import { Vector4 } from '@zephyr3d/base';
2
- import { CullVisitor } from './cull_visitor.js';
3
- import { Application } from '../app/app.js';
4
- import { RenderQueue } from './render_queue.js';
5
- import { ShaderHelper } from '../material/shader/helper.js';
6
- import { RenderBundleWrapper } from './renderbundle_wrapper.js';
7
- import { MaterialVaryingFlags } from '../values.js';
8
-
9
- /**
10
- * Base class for any kind of render passes
11
- * @public
12
- */ class RenderPass {
13
- /** @internal */ _type;
14
- /** @internal */ _globalBindGroups;
15
- /** @internal */ _clearColor;
16
- /** @internal */ _clearDepth;
17
- /** @internal */ _clearStencil;
18
- /**
19
- * Creates an instanceof RenderPass
20
- * @param type - Render pass type
21
- */ constructor(type){
22
- this._type = type;
23
- this._clearColor = new Vector4(0, 0, 0, 1);
24
- this._clearDepth = 1;
25
- this._clearStencil = 0;
26
- this._globalBindGroups = {};
27
- }
28
- /** Color value that is used to clear the frame buffer */ get clearColor() {
29
- return this._clearColor;
30
- }
31
- set clearColor(color) {
32
- this._clearColor = color ?? null;
33
- }
34
- /** Depth value that is used to clear the frame buffer */ get clearDepth() {
35
- return this._clearDepth;
36
- }
37
- set clearDepth(depth) {
38
- this._clearDepth = depth ?? null;
39
- }
40
- /** Stencil value that is used to clear the frame buffer */ get clearStencil() {
41
- return this._clearStencil;
42
- }
43
- set clearStencil(stencil) {
44
- this._clearStencil = stencil ?? null;
45
- }
46
- /**
47
- * The render pass type
48
- */ get type() {
49
- return this._type;
50
- }
51
- /** @internal */ isAutoFlip(ctx) {
52
- return !!(ctx.device.getFramebuffer() && ctx.device.type === 'webgpu');
53
- }
54
- /**
55
- * Renders a scene
56
- * @param ctx - Drawing context
57
- */ render(ctx, cullCamera, renderQueue) {
58
- ctx.renderPass = this;
59
- this.drawScene(ctx, cullCamera ?? ctx.camera, renderQueue);
60
- }
61
- /** @internal */ getGlobalBindGroup(ctx) {
62
- const hash = this.getGlobalBindGroupHash(ctx);
63
- let bindGroup = this._globalBindGroups[hash];
64
- if (!bindGroup) {
65
- const ret = ctx.device.programBuilder.buildRender({
66
- vertex (pb) {
67
- ShaderHelper.prepareVertexShader(pb, ctx);
68
- pb.main(function() {});
69
- },
70
- fragment (pb) {
71
- ShaderHelper.prepareFragmentShader(pb, ctx);
72
- pb.main(function() {});
73
- }
74
- });
75
- bindGroup = ctx.device.createBindGroup(ret[2][0]);
76
- this._globalBindGroups[hash] = bindGroup;
77
- }
78
- return bindGroup;
79
- }
80
- /**
81
- * Disposes the render pass
82
- */ dispose() {
83
- this._globalBindGroups = {};
84
- }
85
- /** @internal */ getGlobalBindGroupHash(ctx) {
86
- return `${this.constructor.name}:${this._getGlobalBindGroupHash(ctx)}`;
87
- }
88
- /** @internal */ drawScene(ctx, cullCamera, renderQueue) {
89
- const device = ctx.device;
90
- this.clearFramebuffer();
91
- const rq = renderQueue ?? this.cullScene(ctx, cullCamera);
92
- if (rq) {
93
- const windingReversed = device.isWindingOrderReversed();
94
- device.reverseVertexWindingOrder(this.isAutoFlip(ctx) ? !windingReversed : windingReversed);
95
- this.renderItems(ctx, rq);
96
- device.reverseVertexWindingOrder(windingReversed);
97
- if (rq !== renderQueue) {
98
- rq.dispose();
99
- }
100
- }
101
- }
102
- /**
103
- * Culls a scene by a given camera
104
- * @param ctx - The draw context
105
- * @param cullCamera - The camera that will be used to cull the scene
106
- * @returns The cull result
107
- */ cullScene(ctx, cullCamera) {
108
- if (cullCamera) {
109
- const renderQueue = new RenderQueue(this);
110
- const cullVisitor = new CullVisitor(this, cullCamera, renderQueue, ctx.primaryCamera);
111
- if (ctx.scene.octree) {
112
- ctx.scene.octree.getRootNode().traverse(cullVisitor);
113
- } else {
114
- ctx.scene.rootNode.traverse(cullVisitor);
115
- }
116
- renderQueue.end(cullCamera);
117
- ctx.sunLight = renderQueue.sunLight;
118
- return renderQueue;
119
- }
120
- return null;
121
- }
122
- /** @internal */ internalDrawItemList(ctx, items, renderBundle, reverseWinding, hash) {
123
- let recording = false;
124
- if (renderBundle && ctx.primaryCamera.commandBufferReuse) {
125
- const bundle = renderBundle.getRenderBundle(hash);
126
- if (bundle) {
127
- ctx.device.executeRenderBundle(bundle);
128
- return;
129
- }
130
- recording = true;
131
- renderBundle.beginRenderBundle();
132
- }
133
- for (const item of items){
134
- ctx.instanceData = item.instanceData;
135
- const reverse = reverseWinding !== item.drawable.getNode().worldMatrixDet < 0;
136
- if (reverse) {
137
- ctx.device.reverseVertexWindingOrder(!ctx.device.isWindingOrderReversed());
138
- }
139
- if (recording) {
140
- RenderBundleWrapper.addDrawable(item.drawable, item.drawable.getMaterial()?.coreMaterial, item.drawable.getPrimitive(), renderBundle, hash);
141
- }
142
- item.drawable.draw(ctx, recording ? undefined : hash);
143
- if (reverse) {
144
- ctx.device.reverseVertexWindingOrder(!ctx.device.isWindingOrderReversed());
145
- }
146
- }
147
- if (renderBundle && ctx.primaryCamera.commandBufferReuse) {
148
- renderBundle.endRenderBundle(hash);
149
- }
150
- }
151
- /** @internal */ drawItemList(itemList, ctx, reverseWinding) {
152
- ctx.renderQueue = itemList.renderQueue;
153
- ctx.instanceData = null;
154
- const windingHash = reverseWinding ? '1' : '0';
155
- const bindGroupHash = ctx.device.getBindGroup(0)[0].getGPUId();
156
- const framebufferHash = ctx.device.getFramebuffer()?.getHash() ?? '';
157
- const ctxHash = `${ctx.sceneColorTexture?.uid ?? 0}-${ctx.linearDepthTexture?.uid ?? 0}`;
158
- const hash = `${windingHash}-${bindGroupHash}-${framebufferHash}-${ctxHash}-${ctx.renderPassHash}`;
159
- if (itemList) {
160
- if (itemList.itemList.length > 0) {
161
- ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.INSTANCING | MaterialVaryingFlags.MORPH_ANIMATION);
162
- itemList.materialList.forEach((mat)=>mat.apply(ctx));
163
- this.internalDrawItemList(ctx, itemList.itemList, itemList.renderBundle, reverseWinding, hash);
164
- }
165
- if (itemList.skinItemList.length > 0) {
166
- ctx.materialFlags |= MaterialVaryingFlags.SKIN_ANIMATION;
167
- ctx.materialFlags &= ~(MaterialVaryingFlags.MORPH_ANIMATION | MaterialVaryingFlags.INSTANCING);
168
- itemList.materialList.forEach((mat)=>mat.apply(ctx));
169
- this.internalDrawItemList(ctx, itemList.skinItemList, itemList.skinRenderBundle, reverseWinding, hash);
170
- }
171
- if (itemList.morphItemList.length > 0) {
172
- ctx.materialFlags |= MaterialVaryingFlags.MORPH_ANIMATION;
173
- ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.INSTANCING);
174
- itemList.materialList.forEach((mat)=>mat.apply(ctx));
175
- this.internalDrawItemList(ctx, itemList.morphItemList, itemList.morphRenderBundle, reverseWinding, hash);
176
- }
177
- if (itemList.skinAndMorphItemList.length > 0) {
178
- ctx.materialFlags |= MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.MORPH_ANIMATION;
179
- ctx.materialFlags &= ~MaterialVaryingFlags.INSTANCING;
180
- itemList.materialList.forEach((mat)=>mat.apply(ctx));
181
- this.internalDrawItemList(ctx, itemList.skinAndMorphItemList, itemList.skinAndMorphRenderBundle, reverseWinding, hash);
182
- }
183
- if (itemList.instanceItemList.length > 0) {
184
- ctx.materialFlags |= MaterialVaryingFlags.INSTANCING;
185
- ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.MORPH_ANIMATION);
186
- itemList.materialList.forEach((mat)=>mat.apply(ctx));
187
- this.internalDrawItemList(ctx, itemList.instanceItemList, itemList.instanceRenderBundle, reverseWinding, hash);
188
- }
189
- }
190
- ctx.renderQueue = null;
191
- }
192
- /** @internal */ clearFramebuffer() {
193
- if (this._clearColor || this._clearDepth || this._clearStencil) {
194
- Application.instance.device.clearFrameBuffer(this._clearColor, this._clearDepth, this._clearStencil);
195
- }
196
- }
197
- }
198
-
199
- export { RenderPass };
200
- //# sourceMappingURL=renderpass.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderpass.js","sources":["../../../src/render/renderpass.ts"],"sourcesContent":["import { Vector4 } from '@zephyr3d/base';\r\nimport { CullVisitor } from './cull_visitor';\r\nimport { Application } from '../app';\r\nimport type { RenderItemListInfo, RenderQueueItem } from './render_queue';\r\nimport { RenderQueue } from './render_queue';\r\nimport type { Camera } from '../camera/camera';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { RenderBundleWrapper } from './renderbundle_wrapper';\r\nimport { MaterialVaryingFlags } from '../values';\r\nimport type { BindGroup } from '@zephyr3d/device';\r\n\r\n/**\r\n * Base class for any kind of render passes\r\n * @public\r\n */\r\nexport abstract class RenderPass {\r\n /** @internal */\r\n protected _type: number;\r\n /** @internal */\r\n protected _globalBindGroups: Record<string, BindGroup>;\r\n /** @internal */\r\n protected _clearColor: Vector4;\r\n /** @internal */\r\n protected _clearDepth: number;\r\n /** @internal */\r\n protected _clearStencil: number;\r\n /**\r\n * Creates an instanceof RenderPass\r\n * @param type - Render pass type\r\n */\r\n constructor(type: number) {\r\n this._type = type;\r\n this._clearColor = new Vector4(0, 0, 0, 1);\r\n this._clearDepth = 1;\r\n this._clearStencil = 0;\r\n this._globalBindGroups = {};\r\n }\r\n /** Color value that is used to clear the frame buffer */\r\n get clearColor(): Vector4 {\r\n return this._clearColor;\r\n }\r\n set clearColor(color: Vector4) {\r\n this._clearColor = color ?? null;\r\n }\r\n /** Depth value that is used to clear the frame buffer */\r\n get clearDepth(): number {\r\n return this._clearDepth;\r\n }\r\n set clearDepth(depth: number) {\r\n this._clearDepth = depth ?? null;\r\n }\r\n /** Stencil value that is used to clear the frame buffer */\r\n get clearStencil(): number {\r\n return this._clearStencil;\r\n }\r\n set clearStencil(stencil: number) {\r\n this._clearStencil = stencil ?? null;\r\n }\r\n /**\r\n * The render pass type\r\n */\r\n get type(): number {\r\n return this._type;\r\n }\r\n /** @internal */\r\n isAutoFlip(ctx: DrawContext): boolean {\r\n return !!(ctx.device.getFramebuffer() && ctx.device.type === 'webgpu');\r\n }\r\n /**\r\n * Renders a scene\r\n * @param ctx - Drawing context\r\n */\r\n render(ctx: DrawContext, cullCamera?: Camera, renderQueue?: RenderQueue) {\r\n ctx.renderPass = this;\r\n this.drawScene(ctx, cullCamera ?? ctx.camera, renderQueue);\r\n }\r\n /** @internal */\r\n protected getGlobalBindGroup(ctx: DrawContext): BindGroup {\r\n const hash = this.getGlobalBindGroupHash(ctx);\r\n let bindGroup = this._globalBindGroups[hash];\r\n if (!bindGroup) {\r\n const ret = ctx.device.programBuilder.buildRender({\r\n vertex(pb) {\r\n ShaderHelper.prepareVertexShader(pb, ctx);\r\n pb.main(function () {});\r\n },\r\n fragment(pb) {\r\n ShaderHelper.prepareFragmentShader(pb, ctx);\r\n pb.main(function () {});\r\n }\r\n });\r\n bindGroup = ctx.device.createBindGroup(ret[2][0]);\r\n this._globalBindGroups[hash] = bindGroup;\r\n }\r\n return bindGroup;\r\n }\r\n /**\r\n * Disposes the render pass\r\n */\r\n dispose() {\r\n this._globalBindGroups = {};\r\n }\r\n /** @internal */\r\n getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${this.constructor.name}:${this._getGlobalBindGroupHash(ctx)}`;\r\n }\r\n /** @internal */\r\n protected abstract _getGlobalBindGroupHash(ctx: DrawContext);\r\n /** @internal */\r\n protected abstract renderItems(ctx: DrawContext, renderQueue: RenderQueue);\r\n /** @internal */\r\n protected drawScene(ctx: DrawContext, cullCamera: Camera, renderQueue?: RenderQueue) {\r\n const device = ctx.device;\r\n this.clearFramebuffer();\r\n const rq = renderQueue ?? this.cullScene(ctx, cullCamera);\r\n if (rq) {\r\n const windingReversed = device.isWindingOrderReversed();\r\n device.reverseVertexWindingOrder(this.isAutoFlip(ctx) ? !windingReversed : windingReversed);\r\n this.renderItems(ctx, rq);\r\n device.reverseVertexWindingOrder(windingReversed);\r\n if (rq !== renderQueue) {\r\n rq.dispose();\r\n }\r\n }\r\n }\r\n /**\r\n * Culls a scene by a given camera\r\n * @param ctx - The draw context\r\n * @param cullCamera - The camera that will be used to cull the scene\r\n * @returns The cull result\r\n */\r\n cullScene(ctx: DrawContext, cullCamera: Camera): RenderQueue {\r\n if (cullCamera) {\r\n const renderQueue = new RenderQueue(this);\r\n const cullVisitor = new CullVisitor(this, cullCamera, renderQueue, ctx.primaryCamera);\r\n if (ctx.scene.octree) {\r\n ctx.scene.octree.getRootNode().traverse(cullVisitor);\r\n } else {\r\n ctx.scene.rootNode.traverse(cullVisitor);\r\n }\r\n renderQueue.end(cullCamera);\r\n ctx.sunLight = renderQueue.sunLight;\r\n return renderQueue;\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private internalDrawItemList(\r\n ctx: DrawContext,\r\n items: RenderQueueItem[],\r\n renderBundle: RenderBundleWrapper,\r\n reverseWinding: boolean,\r\n hash: string\r\n ) {\r\n let recording = false;\r\n if (renderBundle && ctx.primaryCamera.commandBufferReuse) {\r\n const bundle = renderBundle.getRenderBundle(hash);\r\n if (bundle) {\r\n ctx.device.executeRenderBundle(bundle);\r\n return;\r\n }\r\n recording = true;\r\n renderBundle.beginRenderBundle();\r\n }\r\n for (const item of items) {\r\n ctx.instanceData = item.instanceData;\r\n const reverse = reverseWinding !== item.drawable.getNode().worldMatrixDet < 0;\r\n if (reverse) {\r\n ctx.device.reverseVertexWindingOrder(!ctx.device.isWindingOrderReversed());\r\n }\r\n if (recording) {\r\n RenderBundleWrapper.addDrawable(\r\n item.drawable,\r\n item.drawable.getMaterial()?.coreMaterial,\r\n item.drawable.getPrimitive(),\r\n renderBundle,\r\n hash\r\n );\r\n }\r\n item.drawable.draw(ctx, recording ? undefined : hash);\r\n if (reverse) {\r\n ctx.device.reverseVertexWindingOrder(!ctx.device.isWindingOrderReversed());\r\n }\r\n }\r\n if (renderBundle && ctx.primaryCamera.commandBufferReuse) {\r\n renderBundle.endRenderBundle(hash);\r\n }\r\n }\r\n /** @internal */\r\n protected drawItemList(itemList: RenderItemListInfo, ctx: DrawContext, reverseWinding: boolean) {\r\n ctx.renderQueue = itemList.renderQueue;\r\n ctx.instanceData = null;\r\n const windingHash = reverseWinding ? '1' : '0';\r\n const bindGroupHash = ctx.device.getBindGroup(0)[0].getGPUId();\r\n const framebufferHash = ctx.device.getFramebuffer()?.getHash() ?? '';\r\n const ctxHash = `${ctx.sceneColorTexture?.uid ?? 0}-${ctx.linearDepthTexture?.uid ?? 0}`;\r\n const hash = `${windingHash}-${bindGroupHash}-${framebufferHash}-${ctxHash}-${ctx.renderPassHash}`;\r\n if (itemList) {\r\n if (itemList.itemList.length > 0) {\r\n ctx.materialFlags &= ~(\r\n MaterialVaryingFlags.SKIN_ANIMATION |\r\n MaterialVaryingFlags.INSTANCING |\r\n MaterialVaryingFlags.MORPH_ANIMATION\r\n );\r\n itemList.materialList.forEach((mat) => mat.apply(ctx));\r\n this.internalDrawItemList(ctx, itemList.itemList, itemList.renderBundle, reverseWinding, hash);\r\n }\r\n if (itemList.skinItemList.length > 0) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SKIN_ANIMATION;\r\n ctx.materialFlags &= ~(MaterialVaryingFlags.MORPH_ANIMATION | MaterialVaryingFlags.INSTANCING);\r\n itemList.materialList.forEach((mat) => mat.apply(ctx));\r\n this.internalDrawItemList(\r\n ctx,\r\n itemList.skinItemList,\r\n itemList.skinRenderBundle,\r\n reverseWinding,\r\n hash\r\n );\r\n }\r\n if (itemList.morphItemList.length > 0) {\r\n ctx.materialFlags |= MaterialVaryingFlags.MORPH_ANIMATION;\r\n ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.INSTANCING);\r\n itemList.materialList.forEach((mat) => mat.apply(ctx));\r\n this.internalDrawItemList(\r\n ctx,\r\n itemList.morphItemList,\r\n itemList.morphRenderBundle,\r\n reverseWinding,\r\n hash\r\n );\r\n }\r\n if (itemList.skinAndMorphItemList.length > 0) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.MORPH_ANIMATION;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.INSTANCING;\r\n itemList.materialList.forEach((mat) => mat.apply(ctx));\r\n this.internalDrawItemList(\r\n ctx,\r\n itemList.skinAndMorphItemList,\r\n itemList.skinAndMorphRenderBundle,\r\n reverseWinding,\r\n hash\r\n );\r\n }\r\n if (itemList.instanceItemList.length > 0) {\r\n ctx.materialFlags |= MaterialVaryingFlags.INSTANCING;\r\n ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.MORPH_ANIMATION);\r\n itemList.materialList.forEach((mat) => mat.apply(ctx));\r\n this.internalDrawItemList(\r\n ctx,\r\n itemList.instanceItemList,\r\n itemList.instanceRenderBundle,\r\n reverseWinding,\r\n hash\r\n );\r\n }\r\n }\r\n ctx.renderQueue = null;\r\n }\r\n /** @internal */\r\n private clearFramebuffer() {\r\n if (this._clearColor || this._clearDepth || this._clearStencil) {\r\n Application.instance.device.clearFrameBuffer(this._clearColor, this._clearDepth, this._clearStencil);\r\n }\r\n }\r\n}\r\n"],"names":["RenderPass","type","_type","_clearColor","Vector4","_clearDepth","_clearStencil","_globalBindGroups","clearColor","color","clearDepth","depth","clearStencil","stencil","isAutoFlip","ctx","device","getFramebuffer","render","cullCamera","renderQueue","renderPass","drawScene","camera","getGlobalBindGroup","hash","getGlobalBindGroupHash","bindGroup","ret","programBuilder","buildRender","vertex","pb","ShaderHelper","prepareVertexShader","main","fragment","prepareFragmentShader","createBindGroup","dispose","name","_getGlobalBindGroupHash","clearFramebuffer","rq","cullScene","windingReversed","isWindingOrderReversed","reverseVertexWindingOrder","renderItems","RenderQueue","cullVisitor","CullVisitor","primaryCamera","scene","octree","getRootNode","traverse","rootNode","end","sunLight","internalDrawItemList","items","renderBundle","reverseWinding","recording","commandBufferReuse","bundle","getRenderBundle","executeRenderBundle","beginRenderBundle","item","instanceData","reverse","drawable","getNode","worldMatrixDet","RenderBundleWrapper","addDrawable","getMaterial","coreMaterial","getPrimitive","draw","undefined","endRenderBundle","itemList","windingHash","bindGroupHash","getBindGroup","getGPUId","framebufferHash","getHash","ctxHash","sceneColorTexture","uid","linearDepthTexture","renderPassHash","length","materialFlags","MaterialVaryingFlags","SKIN_ANIMATION","INSTANCING","MORPH_ANIMATION","materialList","forEach","mat","apply","skinItemList","skinRenderBundle","morphItemList","morphRenderBundle","skinAndMorphItemList","skinAndMorphRenderBundle","instanceItemList","instanceRenderBundle","Application","instance","clearFrameBuffer"],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- import { RenderPass } from './renderpass.js';
2
- import { RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
3
- import { ShaderHelper } from '../material/shader/helper.js';
4
-
5
- /**
6
- * Shadow map render pass
7
- *
8
- * @public
9
- */ class ShadowMapPass extends RenderPass {
10
- /** @internal */ _currentLight;
11
- /**
12
- * Creates an instance of ShadowMapPass
13
- */ constructor(){
14
- super(RENDER_PASS_TYPE_SHADOWMAP);
15
- this._currentLight = null;
16
- }
17
- /** The light that will be used to render shadow map */ get light() {
18
- return this._currentLight;
19
- }
20
- set light(light) {
21
- this._currentLight = light;
22
- }
23
- /** @internal */ _getGlobalBindGroupHash(ctx) {
24
- return `${ctx.shadowMapInfo.get(this.light).shaderHash}`;
25
- }
26
- /** @internal */ renderItems(ctx, renderQueue) {
27
- const items = renderQueue.itemList;
28
- if (items) {
29
- ctx.drawEnvLight = false;
30
- ctx.env = null;
31
- ctx.fogFlags = 0;
32
- ctx.flip = this.isAutoFlip(ctx);
33
- ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);
34
- const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
35
- ctx.device.setBindGroup(0, bindGroup);
36
- ShaderHelper.setLightUniformsShadowMap(bindGroup, ctx, this._currentLight);
37
- ShaderHelper.setCameraUniforms(bindGroup, ctx, true);
38
- const reverseWinding = ctx.camera.worldMatrixDet < 0;
39
- for (const lit of items.opaque.lit){
40
- this.drawItemList(lit, ctx, reverseWinding);
41
- }
42
- for (const unlit of items.opaque.unlit){
43
- this.drawItemList(unlit, ctx, reverseWinding);
44
- }
45
- for (const lit of items.transmission.lit){
46
- this.drawItemList(lit, ctx, reverseWinding);
47
- }
48
- for (const unlit of items.transmission.unlit){
49
- this.drawItemList(unlit, ctx, reverseWinding);
50
- }
51
- }
52
- }
53
- }
54
-
55
- export { ShadowMapPass };
56
- //# sourceMappingURL=shadowmap_pass.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shadowmap_pass.js","sources":["../../../src/render/shadowmap_pass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { RENDER_PASS_TYPE_SHADOWMAP } from '../values';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { RenderQueue } from './render_queue';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\n\r\n/**\r\n * Shadow map render pass\r\n *\r\n * @public\r\n */\r\nexport class ShadowMapPass extends RenderPass {\r\n /** @internal */\r\n protected _currentLight: PunctualLight;\r\n /**\r\n * Creates an instance of ShadowMapPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_SHADOWMAP);\r\n this._currentLight = null;\r\n }\r\n /** The light that will be used to render shadow map */\r\n get light(): PunctualLight {\r\n return this._currentLight;\r\n }\r\n set light(light: PunctualLight) {\r\n this._currentLight = light;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${ctx.shadowMapInfo.get(this.light).shaderHash}`;\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, renderQueue: RenderQueue) {\r\n const items = renderQueue.itemList;\r\n if (items) {\r\n ctx.drawEnvLight = false;\r\n ctx.env = null;\r\n ctx.fogFlags = 0;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n ShaderHelper.setLightUniformsShadowMap(bindGroup, ctx, this._currentLight);\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, true);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n for (const lit of items.opaque.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of items.opaque.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n for (const lit of items.transmission.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of items.transmission.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["ShadowMapPass","RenderPass","RENDER_PASS_TYPE_SHADOWMAP","_currentLight","light","_getGlobalBindGroupHash","ctx","shadowMapInfo","get","shaderHash","renderItems","renderQueue","items","itemList","drawEnvLight","env","fogFlags","flip","isAutoFlip","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","device","setBindGroup","ShaderHelper","setLightUniformsShadowMap","setCameraUniforms","reverseWinding","camera","worldMatrixDet","lit","opaque","drawItemList","unlit","transmission"],"mappings":";;;;AAOA;;;;IAKO,MAAMA,aAAsBC,SAAAA,UAAAA,CAAAA;qBAEjC,aAAuC;AACvC;;AAEC,MACD,WAAc,EAAA;AACZ,QAAA,KAAK,CAACC,0BAAAA,CAAAA;QACN,IAAI,CAACC,aAAa,GAAG,IAAA;AACvB;4DAEA,IAAIC,KAAuB,GAAA;QACzB,OAAO,IAAI,CAACD,aAAa;AAC3B;IACA,IAAIC,KAAAA,CAAMA,KAAoB,EAAE;QAC9B,IAAI,CAACD,aAAa,GAAGC,KAAAA;AACvB;AACA,qBACUC,uBAAwBC,CAAAA,GAAgB,EAAE;QAClD,OAAO,CAAA,EAAGA,GAAIC,CAAAA,aAAa,CAACC,GAAG,CAAC,IAAI,CAACJ,KAAK,CAAEK,CAAAA,UAAU,CAAE,CAAA;AAC1D;AACA,qBACA,WAAUC,CAAYJ,GAAgB,EAAEK,WAAwB,EAAE;QAChE,MAAMC,KAAAA,GAAQD,YAAYE,QAAQ;AAClC,QAAA,IAAID,KAAO,EAAA;AACTN,YAAAA,GAAAA,CAAIQ,YAAY,GAAG,KAAA;AACnBR,YAAAA,GAAAA,CAAIS,GAAG,GAAG,IAAA;AACVT,YAAAA,GAAAA,CAAIU,QAAQ,GAAG,CAAA;AACfV,YAAAA,GAAAA,CAAIW,IAAI,GAAG,IAAI,CAACC,UAAU,CAACZ,GAAAA,CAAAA;AAC3BA,YAAAA,GAAAA,CAAIa,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACd,GAAAA,CAAAA;AACjD,YAAA,MAAMe,SAAYf,GAAAA,GAAAA,CAAIgB,wBAAwB,CAACC,kBAAkB,CAACjB,GAAAA,CAAAA;AAClEA,YAAAA,GAAAA,CAAIkB,MAAM,CAACC,YAAY,CAAC,CAAGJ,EAAAA,SAAAA,CAAAA;AAC3BK,YAAAA,YAAAA,CAAaC,yBAAyB,CAACN,SAAAA,EAAWf,GAAK,EAAA,IAAI,CAACH,aAAa,CAAA;YACzEuB,YAAaE,CAAAA,iBAAiB,CAACP,SAAAA,EAAWf,GAAK,EAAA,IAAA,CAAA;AAC/C,YAAA,MAAMuB,cAAiBvB,GAAAA,GAAAA,CAAIwB,MAAM,CAACC,cAAc,GAAG,CAAA;AACnD,YAAA,KAAK,MAAMC,GAAOpB,IAAAA,KAAAA,CAAMqB,MAAM,CAACD,GAAG,CAAE;AAClC,gBAAA,IAAI,CAACE,YAAY,CAACF,GAAAA,EAAK1B,GAAKuB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,YAAA,KAAK,MAAMM,KAASvB,IAAAA,KAAAA,CAAMqB,MAAM,CAACE,KAAK,CAAE;AACtC,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO7B,GAAKuB,EAAAA,cAAAA,CAAAA;AAChC;AACA,YAAA,KAAK,MAAMG,GAAOpB,IAAAA,KAAAA,CAAMwB,YAAY,CAACJ,GAAG,CAAE;AACxC,gBAAA,IAAI,CAACE,YAAY,CAACF,GAAAA,EAAK1B,GAAKuB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,YAAA,KAAK,MAAMM,KAASvB,IAAAA,KAAAA,CAAMwB,YAAY,CAACD,KAAK,CAAE;AAC5C,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO7B,GAAKuB,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;AACF;;;;"}