@zephyr3d/scene 0.7.1 → 0.8.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 (441) hide show
  1. package/dist/animation/animation.js +0 -18
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +200 -3
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/ik/ccd_solver.js +371 -0
  6. package/dist/animation/ik/ccd_solver.js.map +1 -0
  7. package/dist/animation/ik/fabrik_solver.js +398 -0
  8. package/dist/animation/ik/fabrik_solver.js.map +1 -0
  9. package/dist/animation/ik/ik_angle_constraint.js +181 -0
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -0
  11. package/dist/animation/ik/ik_chain.js +163 -0
  12. package/dist/animation/ik/ik_chain.js.map +1 -0
  13. package/dist/animation/ik/ik_constraint.js +25 -0
  14. package/dist/animation/ik/ik_constraint.js.map +1 -0
  15. package/dist/animation/ik/ik_pole_constraint.js +128 -0
  16. package/dist/animation/ik/ik_pole_constraint.js.map +1 -0
  17. package/dist/animation/ik/ik_solver.js +48 -0
  18. package/dist/animation/ik/ik_solver.js.map +1 -0
  19. package/dist/animation/ik/ik_track.js +96 -0
  20. package/dist/animation/ik/ik_track.js.map +1 -0
  21. package/dist/animation/ik/ik_utils.js +191 -0
  22. package/dist/animation/ik/ik_utils.js.map +1 -0
  23. package/dist/animation/ik/two_bone_ik_solver.js +331 -0
  24. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -0
  25. package/dist/animation/ik_modifier.js +61 -0
  26. package/dist/animation/ik_modifier.js.map +1 -0
  27. package/dist/animation/ik_postprocessor.js +71 -0
  28. package/dist/animation/ik_postprocessor.js.map +1 -0
  29. package/dist/animation/manual_transform_processor.js +156 -0
  30. package/dist/animation/manual_transform_processor.js.map +1 -0
  31. package/dist/animation/skeleton.js +55 -51
  32. package/dist/animation/skeleton.js.map +1 -1
  33. package/dist/animation/skeleton_modifier.js +38 -0
  34. package/dist/animation/skeleton_modifier.js.map +1 -0
  35. package/dist/animation/skeleton_postprocessor.js +50 -0
  36. package/dist/animation/skeleton_postprocessor.js.map +1 -0
  37. package/dist/animation/spring/multi_chain_spring_system.js +503 -0
  38. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -0
  39. package/dist/animation/spring/spring_bone.js +240 -0
  40. package/dist/animation/spring/spring_bone.js.map +1 -0
  41. package/dist/animation/spring/spring_bone_collider.js +198 -0
  42. package/dist/animation/spring/spring_bone_collider.js.map +1 -0
  43. package/dist/animation/spring/spring_bone_constraint.js +170 -0
  44. package/dist/animation/spring/spring_bone_constraint.js.map +1 -0
  45. package/dist/animation/spring/spring_bone_system.js +328 -0
  46. package/dist/animation/spring/spring_bone_system.js.map +1 -0
  47. package/dist/animation/spring/spring_chain.js +103 -0
  48. package/dist/animation/spring/spring_chain.js.map +1 -0
  49. package/dist/animation/spring/spring_collider.js +247 -0
  50. package/dist/animation/spring/spring_collider.js.map +1 -0
  51. package/dist/animation/spring/spring_constraint.js +21 -0
  52. package/dist/animation/spring/spring_constraint.js.map +1 -0
  53. package/dist/animation/spring/spring_particle.js +20 -0
  54. package/dist/animation/spring/spring_particle.js.map +1 -0
  55. package/dist/animation/spring/spring_system.js +526 -0
  56. package/dist/animation/spring/spring_system.js.map +1 -0
  57. package/dist/animation/spring_modifier.js +45 -0
  58. package/dist/animation/spring_modifier.js.map +1 -0
  59. package/dist/animation/spring_postprocessor.js +54 -0
  60. package/dist/animation/spring_postprocessor.js.map +1 -0
  61. package/dist/app/screen.js +1 -1
  62. package/dist/app/screen.js.map +1 -1
  63. package/dist/asset/model.js +10 -6
  64. package/dist/asset/model.js.map +1 -1
  65. package/dist/camera/perspectivecamera.js +3 -3
  66. package/dist/camera/perspectivecamera.js.map +1 -1
  67. package/dist/index.d.ts +1400 -4
  68. package/dist/index.js +16 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/material/mixins/lightmodel/blinnphong.js +66 -4
  71. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  72. package/dist/material/mixins/pbr/common.js +20 -17
  73. package/dist/material/mixins/pbr/common.js.map +1 -1
  74. package/dist/material/shader/helper.js +5 -3
  75. package/dist/material/shader/helper.js.map +1 -1
  76. package/dist/render/gpu_picking.js +100 -0
  77. package/dist/render/gpu_picking.js.map +1 -0
  78. package/dist/render/rendergraph/device_pool_allocator.js +41 -0
  79. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -0
  80. package/dist/render/rendergraph/executor.js +146 -0
  81. package/dist/render/rendergraph/executor.js.map +1 -0
  82. package/dist/render/rendergraph/forward_plus_builder.js +414 -0
  83. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -0
  84. package/dist/render/rendergraph/rendergraph.js +306 -0
  85. package/dist/render/rendergraph/rendergraph.js.map +1 -0
  86. package/dist/render/rendergraph/types.js +57 -0
  87. package/dist/render/rendergraph/types.js.map +1 -0
  88. package/dist/render/sky_motion_vector.js +85 -0
  89. package/dist/render/sky_motion_vector.js.map +1 -0
  90. package/dist/scene/mesh.js +15 -23
  91. package/dist/scene/mesh.js.map +1 -1
  92. package/dist/utility/serialization/scene/animation.js +24 -23
  93. package/dist/utility/serialization/scene/animation.js.map +1 -1
  94. package/dist/utility/serialization/scene/material.js +62 -0
  95. package/dist/utility/serialization/scene/material.js.map +1 -1
  96. package/dist/utility/serialization/scene/node.js +1 -1
  97. package/package.json +3 -3
  98. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  99. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  100. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  101. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  102. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  103. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  104. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  105. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  106. package/dist/src/animation/animation.js +0 -127
  107. package/dist/src/animation/animation.js.map +0 -1
  108. package/dist/src/animation/animationset.js +0 -255
  109. package/dist/src/animation/animationset.js.map +0 -1
  110. package/dist/src/animation/animationtrack.js +0 -34
  111. package/dist/src/animation/animationtrack.js.map +0 -1
  112. package/dist/src/animation/eulerrotationtrack.js +0 -52
  113. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  114. package/dist/src/animation/morphtarget.js +0 -93
  115. package/dist/src/animation/morphtarget.js.map +0 -1
  116. package/dist/src/animation/morphtrack.js +0 -70
  117. package/dist/src/animation/morphtrack.js.map +0 -1
  118. package/dist/src/animation/proptrack.js +0 -161
  119. package/dist/src/animation/proptrack.js.map +0 -1
  120. package/dist/src/animation/rotationtrack.js +0 -51
  121. package/dist/src/animation/rotationtrack.js.map +0 -1
  122. package/dist/src/animation/scaletrack.js +0 -50
  123. package/dist/src/animation/scaletrack.js.map +0 -1
  124. package/dist/src/animation/skeleton.js +0 -204
  125. package/dist/src/animation/skeleton.js.map +0 -1
  126. package/dist/src/animation/translationtrack.js +0 -50
  127. package/dist/src/animation/translationtrack.js.map +0 -1
  128. package/dist/src/app/app.js +0 -129
  129. package/dist/src/app/app.js.map +0 -1
  130. package/dist/src/app/inputmgr.js +0 -267
  131. package/dist/src/app/inputmgr.js.map +0 -1
  132. package/dist/src/asset/assetmanager.js +0 -404
  133. package/dist/src/asset/assetmanager.js.map +0 -1
  134. package/dist/src/asset/builtin.js +0 -337
  135. package/dist/src/asset/builtin.js.map +0 -1
  136. package/dist/src/asset/loaders/dds/dds.js +0 -470
  137. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  138. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  139. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  140. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  141. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  142. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  143. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  144. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  145. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  146. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  147. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  148. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  149. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  150. package/dist/src/asset/loaders/loader.js +0 -45
  151. package/dist/src/asset/loaders/loader.js.map +0 -1
  152. package/dist/src/asset/model.js +0 -414
  153. package/dist/src/asset/model.js.map +0 -1
  154. package/dist/src/blitter/bilateralblur.js +0 -221
  155. package/dist/src/blitter/bilateralblur.js.map +0 -1
  156. package/dist/src/blitter/blitter.js +0 -390
  157. package/dist/src/blitter/blitter.js.map +0 -1
  158. package/dist/src/blitter/box.js +0 -118
  159. package/dist/src/blitter/box.js.map +0 -1
  160. package/dist/src/blitter/copy.js +0 -22
  161. package/dist/src/blitter/copy.js.map +0 -1
  162. package/dist/src/blitter/gaussianblur.js +0 -228
  163. package/dist/src/blitter/gaussianblur.js.map +0 -1
  164. package/dist/src/camera/base.js +0 -92
  165. package/dist/src/camera/base.js.map +0 -1
  166. package/dist/src/camera/camera.js +0 -1005
  167. package/dist/src/camera/camera.js.map +0 -1
  168. package/dist/src/camera/fps.js +0 -238
  169. package/dist/src/camera/fps.js.map +0 -1
  170. package/dist/src/camera/orbit.js +0 -245
  171. package/dist/src/camera/orbit.js.map +0 -1
  172. package/dist/src/camera/orthocamera.js +0 -167
  173. package/dist/src/camera/orthocamera.js.map +0 -1
  174. package/dist/src/camera/perspectivecamera.js +0 -141
  175. package/dist/src/camera/perspectivecamera.js.map +0 -1
  176. package/dist/src/index.js +0 -120
  177. package/dist/src/index.js.map +0 -1
  178. package/dist/src/material/blinn.js +0 -81
  179. package/dist/src/material/blinn.js.map +0 -1
  180. package/dist/src/material/grassmaterial.js +0 -113
  181. package/dist/src/material/grassmaterial.js.map +0 -1
  182. package/dist/src/material/lambert.js +0 -92
  183. package/dist/src/material/lambert.js.map +0 -1
  184. package/dist/src/material/material.js +0 -301
  185. package/dist/src/material/material.js.map +0 -1
  186. package/dist/src/material/meshmaterial.js +0 -704
  187. package/dist/src/material/meshmaterial.js.map +0 -1
  188. package/dist/src/material/mixins/albedocolor.js +0 -76
  189. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  190. package/dist/src/material/mixins/foliage.js +0 -47
  191. package/dist/src/material/mixins/foliage.js.map +0 -1
  192. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  193. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  194. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  195. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  196. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  197. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  198. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  199. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  200. package/dist/src/material/mixins/lit.js +0 -476
  201. package/dist/src/material/mixins/lit.js.map +0 -1
  202. package/dist/src/material/mixins/pbr/common.js +0 -918
  203. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  204. package/dist/src/material/mixins/texture.js +0 -172
  205. package/dist/src/material/mixins/texture.js.map +0 -1
  206. package/dist/src/material/mixins/vertexcolor.js +0 -56
  207. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  208. package/dist/src/material/particle.js +0 -178
  209. package/dist/src/material/particle.js.map +0 -1
  210. package/dist/src/material/pbrmr.js +0 -97
  211. package/dist/src/material/pbrmr.js.map +0 -1
  212. package/dist/src/material/pbrsg.js +0 -97
  213. package/dist/src/material/pbrsg.js.map +0 -1
  214. package/dist/src/material/shader/helper.js +0 -1209
  215. package/dist/src/material/shader/helper.js.map +0 -1
  216. package/dist/src/material/terrain-cm.js +0 -606
  217. package/dist/src/material/terrain-cm.js.map +0 -1
  218. package/dist/src/material/terrainmaterial.js +0 -375
  219. package/dist/src/material/terrainmaterial.js.map +0 -1
  220. package/dist/src/material/unlit.js +0 -41
  221. package/dist/src/material/unlit.js.map +0 -1
  222. package/dist/src/material/water.js +0 -417
  223. package/dist/src/material/water.js.map +0 -1
  224. package/dist/src/posteffect/bloom.js +0 -361
  225. package/dist/src/posteffect/bloom.js.map +0 -1
  226. package/dist/src/posteffect/compositor.js +0 -226
  227. package/dist/src/posteffect/compositor.js.map +0 -1
  228. package/dist/src/posteffect/fxaa.js +0 -273
  229. package/dist/src/posteffect/fxaa.js.map +0 -1
  230. package/dist/src/posteffect/grayscale.js +0 -69
  231. package/dist/src/posteffect/grayscale.js.map +0 -1
  232. package/dist/src/posteffect/motionblur.js +0 -96
  233. package/dist/src/posteffect/motionblur.js.map +0 -1
  234. package/dist/src/posteffect/posteffect.js +0 -126
  235. package/dist/src/posteffect/posteffect.js.map +0 -1
  236. package/dist/src/posteffect/sao.js +0 -324
  237. package/dist/src/posteffect/sao.js.map +0 -1
  238. package/dist/src/posteffect/ssr.js +0 -489
  239. package/dist/src/posteffect/ssr.js.map +0 -1
  240. package/dist/src/posteffect/taa.js +0 -172
  241. package/dist/src/posteffect/taa.js.map +0 -1
  242. package/dist/src/posteffect/tonemap.js +0 -94
  243. package/dist/src/posteffect/tonemap.js.map +0 -1
  244. package/dist/src/render/abuffer_oit.js +0 -361
  245. package/dist/src/render/abuffer_oit.js.map +0 -1
  246. package/dist/src/render/clipmap.js +0 -851
  247. package/dist/src/render/clipmap.js.map +0 -1
  248. package/dist/src/render/cluster_light.js +0 -333
  249. package/dist/src/render/cluster_light.js.map +0 -1
  250. package/dist/src/render/cull_visitor.js +0 -187
  251. package/dist/src/render/cull_visitor.js.map +0 -1
  252. package/dist/src/render/depthpass.js +0 -68
  253. package/dist/src/render/depthpass.js.map +0 -1
  254. package/dist/src/render/drawable_mixin.js +0 -227
  255. package/dist/src/render/drawable_mixin.js.map +0 -1
  256. package/dist/src/render/envlight.js +0 -463
  257. package/dist/src/render/envlight.js.map +0 -1
  258. package/dist/src/render/fbm_wavegenerator.js +0 -251
  259. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  260. package/dist/src/render/fft_wavegenerator.js +0 -1006
  261. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  262. package/dist/src/render/fullscreenquad.js +0 -38
  263. package/dist/src/render/fullscreenquad.js.map +0 -1
  264. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  265. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  266. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  267. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  268. package/dist/src/render/hzb.js +0 -273
  269. package/dist/src/render/hzb.js.map +0 -1
  270. package/dist/src/render/lightpass.js +0 -172
  271. package/dist/src/render/lightpass.js.map +0 -1
  272. package/dist/src/render/objectcolorpass.js +0 -51
  273. package/dist/src/render/objectcolorpass.js.map +0 -1
  274. package/dist/src/render/primitive.js +0 -364
  275. package/dist/src/render/primitive.js.map +0 -1
  276. package/dist/src/render/render_queue.js +0 -467
  277. package/dist/src/render/render_queue.js.map +0 -1
  278. package/dist/src/render/renderbundle_wrapper.js +0 -152
  279. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  280. package/dist/src/render/renderer.js +0 -455
  281. package/dist/src/render/renderer.js.map +0 -1
  282. package/dist/src/render/renderpass.js +0 -200
  283. package/dist/src/render/renderpass.js.map +0 -1
  284. package/dist/src/render/shadowmap_pass.js +0 -56
  285. package/dist/src/render/shadowmap_pass.js.map +0 -1
  286. package/dist/src/render/sky.js +0 -1103
  287. package/dist/src/render/sky.js.map +0 -1
  288. package/dist/src/render/weightedblended_oit.js +0 -168
  289. package/dist/src/render/weightedblended_oit.js.map +0 -1
  290. package/dist/src/scene/batchgroup.js +0 -162
  291. package/dist/src/scene/batchgroup.js.map +0 -1
  292. package/dist/src/scene/environment.js +0 -209
  293. package/dist/src/scene/environment.js.map +0 -1
  294. package/dist/src/scene/graph_node.js +0 -72
  295. package/dist/src/scene/graph_node.js.map +0 -1
  296. package/dist/src/scene/light.js +0 -416
  297. package/dist/src/scene/light.js.map +0 -1
  298. package/dist/src/scene/mesh.js +0 -341
  299. package/dist/src/scene/mesh.js.map +0 -1
  300. package/dist/src/scene/octree.js +0 -649
  301. package/dist/src/scene/octree.js.map +0 -1
  302. package/dist/src/scene/particlesys.js +0 -738
  303. package/dist/src/scene/particlesys.js.map +0 -1
  304. package/dist/src/scene/raycast_visitor.js +0 -103
  305. package/dist/src/scene/raycast_visitor.js.map +0 -1
  306. package/dist/src/scene/scene.js +0 -284
  307. package/dist/src/scene/scene.js.map +0 -1
  308. package/dist/src/scene/scene_node.js +0 -732
  309. package/dist/src/scene/scene_node.js.map +0 -1
  310. package/dist/src/scene/terrain/grass.js +0 -278
  311. package/dist/src/scene/terrain/grass.js.map +0 -1
  312. package/dist/src/scene/terrain/heightfield.js +0 -475
  313. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  314. package/dist/src/scene/terrain/patch.js +0 -530
  315. package/dist/src/scene/terrain/patch.js.map +0 -1
  316. package/dist/src/scene/terrain/quadtree.js +0 -461
  317. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  318. package/dist/src/scene/terrain/terrain.js +0 -246
  319. package/dist/src/scene/terrain/terrain.js.map +0 -1
  320. package/dist/src/scene/terrain-cm/grass.js +0 -594
  321. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  322. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  323. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  324. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  325. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  326. package/dist/src/scene/water.js +0 -374
  327. package/dist/src/scene/water.js.map +0 -1
  328. package/dist/src/shaders/atmosphere.js +0 -957
  329. package/dist/src/shaders/atmosphere.js.map +0 -1
  330. package/dist/src/shaders/fog.js +0 -112
  331. package/dist/src/shaders/fog.js.map +0 -1
  332. package/dist/src/shaders/misc.js +0 -266
  333. package/dist/src/shaders/misc.js.map +0 -1
  334. package/dist/src/shaders/noise.js +0 -222
  335. package/dist/src/shaders/noise.js.map +0 -1
  336. package/dist/src/shaders/pbr.js +0 -51
  337. package/dist/src/shaders/pbr.js.map +0 -1
  338. package/dist/src/shaders/shadow.js +0 -636
  339. package/dist/src/shaders/shadow.js.map +0 -1
  340. package/dist/src/shaders/ssr.js +0 -490
  341. package/dist/src/shaders/ssr.js.map +0 -1
  342. package/dist/src/shaders/temporal.js +0 -215
  343. package/dist/src/shaders/temporal.js.map +0 -1
  344. package/dist/src/shaders/water.js +0 -756
  345. package/dist/src/shaders/water.js.map +0 -1
  346. package/dist/src/shadow/esm.js +0 -237
  347. package/dist/src/shadow/esm.js.map +0 -1
  348. package/dist/src/shadow/pcf_opt.js +0 -181
  349. package/dist/src/shadow/pcf_opt.js.map +0 -1
  350. package/dist/src/shadow/pcf_pd.js +0 -189
  351. package/dist/src/shadow/pcf_pd.js.map +0 -1
  352. package/dist/src/shadow/shader.js +0 -37
  353. package/dist/src/shadow/shader.js.map +0 -1
  354. package/dist/src/shadow/shadow_impl.js +0 -15
  355. package/dist/src/shadow/shadow_impl.js.map +0 -1
  356. package/dist/src/shadow/shadowmapper.js +0 -790
  357. package/dist/src/shadow/shadowmapper.js.map +0 -1
  358. package/dist/src/shadow/ssm.js +0 -159
  359. package/dist/src/shadow/ssm.js.map +0 -1
  360. package/dist/src/shadow/vsm.js +0 -297
  361. package/dist/src/shadow/vsm.js.map +0 -1
  362. package/dist/src/shapes/box.js +0 -386
  363. package/dist/src/shapes/box.js.map +0 -1
  364. package/dist/src/shapes/cylinder.js +0 -125
  365. package/dist/src/shapes/cylinder.js.map +0 -1
  366. package/dist/src/shapes/plane.js +0 -88
  367. package/dist/src/shapes/plane.js.map +0 -1
  368. package/dist/src/shapes/shape.js +0 -87
  369. package/dist/src/shapes/shape.js.map +0 -1
  370. package/dist/src/shapes/sphere.js +0 -114
  371. package/dist/src/shapes/sphere.js.map +0 -1
  372. package/dist/src/shapes/tetrahedron.js +0 -188
  373. package/dist/src/shapes/tetrahedron.js.map +0 -1
  374. package/dist/src/shapes/torus.js +0 -111
  375. package/dist/src/shapes/torus.js.map +0 -1
  376. package/dist/src/utility/aabbtree.js +0 -400
  377. package/dist/src/utility/aabbtree.js.map +0 -1
  378. package/dist/src/utility/bounding_volume.js +0 -29
  379. package/dist/src/utility/bounding_volume.js.map +0 -1
  380. package/dist/src/utility/debug.js +0 -28
  381. package/dist/src/utility/debug.js.map +0 -1
  382. package/dist/src/utility/draco/decoder.js +0 -116
  383. package/dist/src/utility/draco/decoder.js.map +0 -1
  384. package/dist/src/utility/misc.js +0 -105
  385. package/dist/src/utility/misc.js.map +0 -1
  386. package/dist/src/utility/panorama.js +0 -163
  387. package/dist/src/utility/panorama.js.map +0 -1
  388. package/dist/src/utility/pmrem.js +0 -354
  389. package/dist/src/utility/pmrem.js.map +0 -1
  390. package/dist/src/utility/rendermipmap.js +0 -115
  391. package/dist/src/utility/rendermipmap.js.map +0 -1
  392. package/dist/src/utility/serialization/json.js +0 -402
  393. package/dist/src/utility/serialization/json.js.map +0 -1
  394. package/dist/src/utility/serialization/manager.js +0 -623
  395. package/dist/src/utility/serialization/manager.js.map +0 -1
  396. package/dist/src/utility/serialization/scene/animation.js +0 -248
  397. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  398. package/dist/src/utility/serialization/scene/batch.js +0 -59
  399. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  400. package/dist/src/utility/serialization/scene/camera.js +0 -790
  401. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  402. package/dist/src/utility/serialization/scene/common.js +0 -222
  403. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  404. package/dist/src/utility/serialization/scene/light.js +0 -575
  405. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  406. package/dist/src/utility/serialization/scene/material.js +0 -1111
  407. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  408. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  409. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  410. package/dist/src/utility/serialization/scene/misc.js +0 -39
  411. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  412. package/dist/src/utility/serialization/scene/node.js +0 -451
  413. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  414. package/dist/src/utility/serialization/scene/particle.js +0 -425
  415. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  416. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  417. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  418. package/dist/src/utility/serialization/scene/scene.js +0 -704
  419. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  420. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  421. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  422. package/dist/src/utility/serialization/scene/water.js +0 -465
  423. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  424. package/dist/src/utility/shprojector.js +0 -297
  425. package/dist/src/utility/shprojector.js.map +0 -1
  426. package/dist/src/utility/textures/ggxlut.js +0 -213
  427. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  428. package/dist/src/utility/textures/gradientnoise.js +0 -62
  429. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  430. package/dist/src/utility/textures/randomnoise.js +0 -41
  431. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  432. package/dist/src/values.js +0 -162
  433. package/dist/src/values.js.map +0 -1
  434. package/dist/utility/blueprint/material/common.js +0 -7
  435. package/dist/utility/blueprint/material/common.js.map +0 -1
  436. package/dist/utility/serialization/blueprint/constants.js +0 -255
  437. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  438. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  439. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  440. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  441. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"cluster_light.js","sources":["../../../src/render/cluster_light.ts"],"sourcesContent":["import { Matrix4x4, Vector4 } from '@zephyr3d/base';\nimport { Application } from '../app/app';\nimport { MAX_CLUSTERED_LIGHTS } from '../values';\nimport type {\n AbstractDevice,\n BindGroup,\n FrameBuffer,\n GPUProgram,\n PBStructTypeInfo,\n RenderStateSet,\n StructuredBuffer,\n Texture2D,\n VertexLayout\n} from '@zephyr3d/device';\nimport type { Camera } from '../camera/camera';\nimport type { RenderQueue } from './render_queue';\nimport { ShaderHelper } from '../material/shader/helper';\n\nexport class ClusteredLight {\n private readonly _tileCountX: number;\n private readonly _tileCountY: number;\n private readonly _tileCountZ: number;\n private readonly _lights: Float32Array<ArrayBuffer>;\n private _lightIndexTexture: Texture2D;\n private _lightIndexFramebuffer: FrameBuffer;\n private _lightIndexProgram: GPUProgram;\n private _bindGroup: BindGroup;\n private _lightIndexVertexLayout: VertexLayout;\n private _lightIndexRenderStates: RenderStateSet;\n private _lightBuffer: StructuredBuffer;\n private readonly _sizeParam: Vector4;\n private _countParam: Int32Array<ArrayBuffer>;\n private readonly _clusterParam: Vector4;\n constructor() {\n this._tileCountX = 16;\n this._tileCountY = 16;\n this._tileCountZ = 32;\n this._lights = new Float32Array(12 * (MAX_CLUSTERED_LIGHTS + 1));\n this._lightIndexTexture = null;\n this._lightIndexFramebuffer = null;\n this._lightIndexProgram = null;\n this._lightBuffer = null;\n this._bindGroup = null;\n this._lightIndexVertexLayout = null;\n this._lightIndexRenderStates = null;\n this._sizeParam = new Vector4();\n this._countParam = new Int32Array(4);\n this._clusterParam = new Vector4();\n }\n get lightBuffer() {\n return this._lightBuffer;\n }\n get clusterParam() {\n return this._clusterParam;\n }\n get countParam() {\n return this._countParam;\n }\n get lightIndexTexture() {\n return this._lightIndexTexture;\n }\n private createVertexLayout(device: AbstractDevice, textureWidth: number, textureHeight: number) {\n let vb: StructuredBuffer;\n if (device.type === 'webgl') {\n const vertices = new Float32Array(this._tileCountX * this._tileCountY * this._tileCountZ * 3);\n for (let i = 0; i < vertices.length; i++) {\n const ix = i % textureWidth;\n const iy = Math.floor(i / textureWidth);\n vertices[i * 3 + 0] = (2 * (ix + 0.5)) / textureWidth - 1;\n vertices[i * 3 + 1] = (2 * (iy + 0.5)) / textureHeight - 1;\n vertices[i * 3 + 2] = i;\n }\n vb = device.createVertexBuffer('position_f32x3', vertices);\n } else {\n const vertices = new Float32Array(this._tileCountX * this._tileCountY * this._tileCountZ * 2);\n for (let i = 0; i < vertices.length; i++) {\n const ix = i % textureWidth;\n const iy = Math.floor(i / textureWidth);\n vertices[i * 2 + 0] = (2 * (ix + 0.5)) / textureWidth - 1;\n vertices[i * 2 + 1] = (2 * (iy + 0.5)) / textureHeight - 1;\n }\n vb = device.createVertexBuffer('position_f32x2', vertices);\n }\n this._lightIndexVertexLayout = device.createVertexLayout({\n vertexBuffers: [{ buffer: vb }]\n });\n }\n private createRenderState(device: AbstractDevice) {\n this._lightIndexRenderStates = device.createRenderStateSet();\n this._lightIndexRenderStates.useDepthState().enableTest(false).enableWrite(false);\n this._lightIndexRenderStates.useRasterizerState().setCullMode('none');\n }\n private createProgram(device: AbstractDevice) {\n const webgl1 = device.type === 'webgl';\n this._lightIndexProgram = device.buildRenderProgram({\n vertex(pb) {\n this.$inputs.pos = (webgl1 ? pb.vec3() : pb.vec2()).attrib('position');\n this.$outputs.value = webgl1 ? pb.vec4() : pb.uvec4();\n this.invProjMatrix = pb.mat4().uniform(0);\n this.viewMatrix = pb.mat4().uniform(0);\n this.sizeParam = pb.vec4().uniform(0);\n this.countParam = pb.ivec4().uniform(0);\n this[ShaderHelper.getLightBufferUniformName()] =\n pb.vec4[(MAX_CLUSTERED_LIGHTS + 1) * 3]().uniformBuffer(0);\n pb.func('lineIntersectionToZPlane', [pb.vec3('a'), pb.vec3('b'), pb.float('zDistance')], function () {\n this.$l.normal = pb.vec3(0, 0, 1);\n this.$l.ab = pb.sub(this.b, this.a);\n this.$l.t = pb.div(\n pb.sub(this.zDistance, pb.dot(this.normal, this.a)),\n pb.dot(this.normal, this.ab)\n );\n this.$return(pb.add(this.a, pb.mul(this.t, this.ab)));\n });\n pb.func('clipToView', [pb.vec4('clip')], function () {\n this.$l.view = pb.mul(this.invProjMatrix, this.clip);\n this.$return(pb.div(this.view, this.view.w));\n });\n pb.func('screenToView', [pb.vec4('screen')], function () {\n this.$l.texCoord = pb.div(this.screen.xy, this.sizeParam.xy);\n this.$l.clip = pb.vec4(\n pb.sub(pb.mul(pb.vec2(this.texCoord.x, pb.sub(1, this.texCoord.y)), 2), pb.vec2(1)),\n this.screen.z,\n this.screen.w\n );\n this.$return(this.clipToView(this.clip));\n });\n pb.func(\n 'sphereIntersectsAABB',\n [pb.vec4('sphere'), pb.vec3('aabbMin'), pb.vec3('aabbMax')],\n function () {\n this.$l.dmin = pb.float(0);\n this.$if(pb.lessThanEqual(this.sphere.w, 0), function () {\n this.$return(true);\n });\n this.$for(pb.int('i'), 0, 3, function () {\n this.$if(pb.lessThan(this.sphere.at(this.i), this.aabbMin.at(this.i)), function () {\n this.$l.delta = pb.sub(this.sphere.at(this.i), this.aabbMin.at(this.i));\n this.dmin = pb.add(this.dmin, pb.mul(this.delta, this.delta));\n }).$elseif(pb.greaterThan(this.sphere.at(this.i), this.aabbMax.at(this.i)), function () {\n this.$l.delta = pb.sub(this.sphere.at(this.i), this.aabbMax.at(this.i));\n this.dmin = pb.add(this.dmin, pb.mul(this.delta, this.delta));\n });\n });\n this.$if(pb.lessThanEqual(this.dmin, pb.mul(this.sphere.w, this.sphere.w)), function () {\n this.$return(true);\n });\n this.$return(false);\n }\n );\n pb.main(function () {\n if (pb.getDevice().type !== 'webgpu') {\n this.$builtins.pointSize = 1;\n }\n this.$builtins.position = pb.vec4(this.$inputs.pos.xy, 0, 1);\n if (pb.getDevice().type === 'webgpu') {\n this.$builtins.position = pb.mul(this.$builtins.position, pb.vec4(1, -1, 1, 1));\n }\n this.$l.tileIndex = webgl1 ? pb.int(this.$inputs.pos.z) : pb.int(this.$builtins.vertexIndex);\n this.$l.tileSize = pb.div(this.sizeParam.xy, pb.vec2(this.countParam.xy));\n this.$l.zIndex = pb.div(this.tileIndex, pb.mul(this.countParam.x, this.countParam.y));\n this.$l.yIndex = pb.div(\n pb.sub(this.tileIndex, pb.mul(this.zIndex, this.countParam.x, this.countParam.y)),\n this.countParam.x\n );\n this.$l.xIndex = pb.sub(\n this.tileIndex,\n pb.add(\n pb.mul(this.zIndex, this.countParam.x, this.countParam.y),\n pb.mul(this.yIndex, this.countParam.x)\n )\n );\n this.$l.maxPoint_sS = pb.vec4(\n pb.mul(\n pb.vec2(pb.float(pb.add(this.xIndex, 1)), pb.float(pb.add(this.yIndex, 1))),\n this.tileSize\n ),\n 0.0,\n 1.0\n );\n this.$l.minPoint_sS = pb.vec4(\n pb.mul(pb.vec2(pb.float(this.xIndex), pb.float(this.yIndex)), this.tileSize),\n 0.0,\n 1.0\n );\n this.$l.maxPoint_vS = this.screenToView(this.maxPoint_sS).xyz;\n this.$l.minPoint_vS = this.screenToView(this.minPoint_sS).xyz;\n this.$l.tileNear = pb.mul(\n pb.neg(this.sizeParam.z),\n pb.pow(\n pb.div(this.sizeParam.w, this.sizeParam.z),\n pb.div(pb.float(this.zIndex), pb.float(this.countParam.z))\n )\n );\n this.$l.tileFar = pb.mul(\n pb.neg(this.sizeParam.z),\n pb.pow(\n pb.div(this.sizeParam.w, this.sizeParam.z),\n pb.div(pb.add(pb.float(this.zIndex), 1), pb.float(this.countParam.z))\n )\n );\n this.$l.eyePos = pb.vec3(0);\n this.$l.minPointNear = this.lineIntersectionToZPlane(this.eyePos, this.minPoint_vS, this.tileNear);\n this.$l.minPointFar = this.lineIntersectionToZPlane(this.eyePos, this.minPoint_vS, this.tileFar);\n this.$l.maxPointNear = this.lineIntersectionToZPlane(this.eyePos, this.maxPoint_vS, this.tileNear);\n this.$l.maxPointFar = this.lineIntersectionToZPlane(this.eyePos, this.maxPoint_vS, this.tileFar);\n this.$l.aabbMin = pb.min(\n pb.min(this.minPointNear, this.minPointFar),\n pb.min(this.maxPointNear, this.maxPointFar)\n );\n this.$l.aabbMax = pb.max(\n pb.max(this.minPointNear, this.minPointFar),\n pb.max(this.maxPointNear, this.maxPointFar)\n );\n this.$l.n = pb.int(0);\n if (webgl1) {\n this.$l.lightIndices = pb.float[8]();\n this.$for(pb.int('i'), 0, 8, function () {\n this.lightIndices.setAt(this.i, 0);\n });\n this.$for(pb.int('i'), 1, 256, function () {\n this.$if(pb.equal(this.i, this.countParam.w), function () {\n this.$break();\n });\n this.$l.light = this[ShaderHelper.getLightBufferUniformName()].at(pb.mul(this.i, 3));\n this.$l.lightPos = pb.mul(this.viewMatrix, pb.vec4(this.light.xyz, 1));\n this.$l.lightPos.w = this.light.w;\n this.$if(this.sphereIntersectsAABB(this.lightPos, this.aabbMin, this.aabbMax), function () {\n this.$for(pb.int('j'), 0, 8, function () {\n this.$if(pb.equal(this.j, this.n), function () {\n this.lightIndices.setAt(this.j, pb.float(this.i));\n this.n = pb.add(this.n, 1);\n this.$break();\n });\n });\n this.$if(pb.equal(this.n, 8), function () {\n this.$break();\n });\n });\n });\n this.$outputs.value.r = pb.add(pb.mul(this.lightIndices[0], 256), this.lightIndices[1]);\n this.$outputs.value.g = pb.add(pb.mul(this.lightIndices[2], 256), this.lightIndices[3]);\n this.$outputs.value.b = pb.add(pb.mul(this.lightIndices[4], 256), this.lightIndices[5]);\n this.$outputs.value.a = pb.add(pb.mul(this.lightIndices[6], 256), this.lightIndices[7]);\n } else {\n this.$l.lightIndex = [\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0),\n pb.uint(0)\n ];\n this.$for(pb.uint('i'), 1, pb.uint(this.countParam.w), function () {\n this.$l.light = this[ShaderHelper.getLightBufferUniformName()].at(pb.mul(this.i, 3));\n this.$l.lightPos = pb.mul(this.viewMatrix, pb.vec4(this.light.xyz, 1));\n this.$l.lightPos.w = this.light.w;\n this.$if(this.sphereIntersectsAABB(this.lightPos, this.aabbMin, this.aabbMax), function () {\n this.lightIndex.setAt(this.n, this.i);\n this.n = pb.add(this.n, 1);\n this.$if(pb.equal(this.n, 16), function () {\n this.$break();\n });\n });\n });\n this.$l.r = pb.add(\n pb.sal(this.lightIndex[0], 24),\n pb.sal(this.lightIndex[1], 16),\n pb.sal(this.lightIndex[2], 8),\n this.lightIndex[3]\n );\n this.$l.g = pb.add(\n pb.sal(this.lightIndex[4], 24),\n pb.sal(this.lightIndex[5], 16),\n pb.sal(this.lightIndex[6], 8),\n this.lightIndex[7]\n );\n this.$l.b = pb.add(\n pb.sal(this.lightIndex[8], 24),\n pb.sal(this.lightIndex[9], 16),\n pb.sal(this.lightIndex[10], 8),\n this.lightIndex[11]\n );\n this.$l.a = pb.add(\n pb.sal(this.lightIndex[12], 24),\n pb.sal(this.lightIndex[13], 16),\n pb.sal(this.lightIndex[14], 8),\n this.lightIndex[15]\n );\n this.$outputs.value = pb.uvec4(this.r, this.g, this.b, this.a);\n }\n });\n },\n fragment(pb) {\n this.$outputs.color = webgl1 ? pb.vec4() : pb.uvec4();\n pb.main(function () {\n this.$outputs.color = this.$inputs.value;\n });\n }\n });\n this._bindGroup = device.createBindGroup(this._lightIndexProgram.bindGroupLayouts[0]);\n this._lightBuffer?.dispose();\n const lightBufferType = this._lightIndexProgram.getBindingInfo(\n ShaderHelper.getLightBufferUniformName()\n ).type;\n this._lightBuffer = device.createStructuredBuffer(lightBufferType as PBStructTypeInfo, {\n usage: 'uniform'\n });\n }\n private createLightIndexTexture(device: AbstractDevice) {\n const exp = Math.log2(this._tileCountX * this._tileCountY * this._tileCountZ);\n const a = (exp + 1) >>> 1;\n const b = exp - a;\n const textureWidth = 2 << (a - 1);\n const textureHeight = 2 << (b - 1);\n if (textureWidth * textureHeight !== this._tileCountX * this._tileCountY * this._tileCountZ) {\n throw new Error('Internal error');\n }\n this._lightIndexTexture = device.createTexture2D(\n device.type === 'webgl' ? 'rgba32f' : 'rgba32ui',\n textureWidth,\n textureHeight,\n { samplerOptions: { mipFilter: 'none' } }\n );\n this._lightIndexTexture.name = 'ClusterLightIndex';\n this._lightIndexFramebuffer?.dispose();\n this._lightIndexFramebuffer = device.createFrameBuffer([this._lightIndexTexture], null);\n }\n calculateLightIndex(camera: Camera, renderQueue: RenderQueue) {\n const numLights = this.getVisibleLights(renderQueue, this._lights);\n const device = Application.instance.device;\n if (!this._lightIndexTexture) {\n this.createLightIndexTexture(device);\n }\n if (!this._lightIndexProgram) {\n this.createProgram(device);\n }\n if (!this._lightIndexVertexLayout) {\n this.createVertexLayout(device, this._lightIndexTexture.width, this._lightIndexTexture.height);\n }\n if (!this._lightIndexRenderStates) {\n this.createRenderState(device);\n }\n const viewport = device.getViewport();\n const vw = device.screenToDevice(viewport.width);\n const vh = device.screenToDevice(viewport.height);\n const scale = this._tileCountZ / Math.log2(camera.getFarPlane() / camera.getNearPlane());\n const bias = -(\n (this._tileCountZ * Math.log2(camera.getNearPlane())) /\n Math.log2(camera.getFarPlane() / camera.getNearPlane())\n );\n this._clusterParam.setXYZW(vw, vh, scale, bias);\n device.pushDeviceStates();\n device.setFramebuffer(this._lightIndexFramebuffer);\n if (numLights > 0) {\n if (this._lightBuffer.disposed) {\n this._lightBuffer.reload();\n }\n this._lightBuffer.bufferSubData(0, this._lights);\n this._sizeParam.setXYZW(vw, vh, camera.getNearPlane(), camera.getFarPlane());\n this._countParam[0] = this._tileCountX;\n this._countParam[1] = this._tileCountY;\n this._countParam[2] = this._tileCountZ;\n this._countParam[3] = numLights + 1;\n this._bindGroup.setValue('invProjMatrix', Matrix4x4.invert(camera.getProjectionMatrix()));\n this._bindGroup.setValue('viewMatrix', camera.viewMatrix);\n this._bindGroup.setValue('sizeParam', this._sizeParam);\n this._bindGroup.setValue('countParam', this._countParam);\n this._bindGroup.setBuffer(ShaderHelper.getLightBufferUniformName(), this._lightBuffer);\n device.setProgram(this._lightIndexProgram);\n device.setVertexLayout(this._lightIndexVertexLayout);\n device.setBindGroup(0, this._bindGroup);\n const savedRS = device.getRenderStates();\n device.setRenderStates(this._lightIndexRenderStates);\n device.draw('point-list', 0, this._tileCountX * this._tileCountY * this._tileCountZ);\n device.setRenderStates(savedRS);\n } else {\n device.clearFrameBuffer(new Vector4(0, 0, 0, 0), 1, 0);\n }\n device.popDeviceStates();\n }\n private getVisibleLights(renderQueue: RenderQueue, lights: Float32Array): number {\n const numLights = Math.min(renderQueue.unshadowedLights.length, MAX_CLUSTERED_LIGHTS);\n for (let i = 1; i <= numLights; i++) {\n const light = renderQueue.unshadowedLights[i - 1];\n lights.set(light.positionAndRange, i * 12);\n lights.set(light.directionAndCutoff, i * 12 + 4);\n lights.set(light.diffuseAndIntensity, i * 12 + 8);\n }\n return numLights;\n }\n}\n"],"names":["ClusteredLight","_tileCountX","_tileCountY","_tileCountZ","_lights","_lightIndexTexture","_lightIndexFramebuffer","_lightIndexProgram","_bindGroup","_lightIndexVertexLayout","_lightIndexRenderStates","_lightBuffer","_sizeParam","_countParam","_clusterParam","Float32Array","MAX_CLUSTERED_LIGHTS","Vector4","Int32Array","lightBuffer","clusterParam","countParam","lightIndexTexture","createVertexLayout","device","textureWidth","textureHeight","vb","type","vertices","i","length","ix","iy","Math","floor","createVertexBuffer","vertexBuffers","buffer","createRenderState","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","createProgram","webgl1","buildRenderProgram","vertex","pb","$inputs","pos","vec3","vec2","attrib","$outputs","value","vec4","uvec4","invProjMatrix","mat4","uniform","viewMatrix","sizeParam","ivec4","ShaderHelper","getLightBufferUniformName","uniformBuffer","func","float","$l","normal","ab","sub","b","a","t","div","zDistance","dot","$return","add","mul","view","clip","w","texCoord","screen","xy","x","y","z","clipToView","dmin","$if","lessThanEqual","sphere","$for","int","lessThan","at","aabbMin","delta","$elseif","greaterThan","aabbMax","main","getDevice","$builtins","pointSize","position","tileIndex","vertexIndex","tileSize","zIndex","yIndex","xIndex","maxPoint_sS","minPoint_sS","maxPoint_vS","screenToView","xyz","minPoint_vS","tileNear","neg","pow","tileFar","eyePos","minPointNear","lineIntersectionToZPlane","minPointFar","maxPointNear","maxPointFar","min","max","n","lightIndices","setAt","equal","$break","light","lightPos","sphereIntersectsAABB","j","r","g","lightIndex","uint","sal","fragment","color","createBindGroup","bindGroupLayouts","dispose","lightBufferType","getBindingInfo","createStructuredBuffer","usage","createLightIndexTexture","exp","log2","Error","createTexture2D","samplerOptions","mipFilter","name","createFrameBuffer","calculateLightIndex","camera","renderQueue","numLights","getVisibleLights","Application","instance","width","height","viewport","getViewport","vw","screenToDevice","vh","scale","getFarPlane","getNearPlane","bias","setXYZW","pushDeviceStates","setFramebuffer","disposed","reload","bufferSubData","setValue","Matrix4x4","invert","getProjectionMatrix","setBuffer","setProgram","setVertexLayout","setBindGroup","savedRS","getRenderStates","setRenderStates","draw","clearFrameBuffer","popDeviceStates","lights","unshadowedLights","set","positionAndRange","directionAndCutoff","diffuseAndIntensity"],"mappings":"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"}
@@ -1,187 +0,0 @@
1
- import { ClipState } from '@zephyr3d/base';
2
- import { OctreeNode } from '../scene/octree.js';
3
- import { RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
4
-
5
- /**
6
- * Node visitor for culling
7
- * @public
8
- */ class CullVisitor {
9
- /** @internal */ _primaryCamera;
10
- /** @internal */ _camera;
11
- /** @internal */ _skipClipTest;
12
- /** @internal */ _renderQueue;
13
- /** @internal */ _renderPass;
14
- /** @internal */ _isGPUPicking;
15
- /** @internal */ _isShadowMapping;
16
- /**
17
- * Creates an instance of CullVisitor
18
- * @param renderPass - Render pass for the culling task
19
- * @param camera - Camera that will be used for culling
20
- * @param rendeQueue - RenderQueue
21
- * @param viewPoint - Camera position of the primary render pass
22
- */ constructor(renderPass, camera, renderQueue, primaryCamera){
23
- this._primaryCamera = primaryCamera;
24
- this._camera = camera;
25
- this._renderQueue = renderQueue;
26
- this._skipClipTest = false;
27
- this._renderPass = renderPass;
28
- this._isGPUPicking = this._renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR;
29
- this._isShadowMapping = this._renderPass.type === RENDER_PASS_TYPE_SHADOWMAP;
30
- }
31
- /** The camera that will be used for culling */ get camera() {
32
- return this._camera;
33
- }
34
- set camera(camera) {
35
- this._camera = camera || null;
36
- }
37
- /** true if cull with frustum culling, otherwise false. default is true */ get frustumCulling() {
38
- return !this._skipClipTest;
39
- }
40
- set frustumCulling(val) {
41
- this._skipClipTest = !val;
42
- }
43
- /** The camera position of the primary render pass */ get primaryCamera() {
44
- return this._primaryCamera;
45
- }
46
- /** Render pass for the culling task */ get renderPass() {
47
- return this._renderPass;
48
- }
49
- /** The result of culling */ get renderQueue() {
50
- return this._renderQueue;
51
- }
52
- set renderQueue(renderQueue) {
53
- this._renderQueue = renderQueue;
54
- }
55
- /** Frustum for culling */ get frustum() {
56
- return this._camera?.frustum || null;
57
- }
58
- /** @internal */ push(camera, drawable) {
59
- this.renderQueue.push(camera, drawable);
60
- }
61
- /** @internal */ pushRenderQueue(renderQueue) {
62
- this.renderQueue.pushRenderQueue(renderQueue);
63
- }
64
- /**
65
- * Visits a node
66
- * @param target - The node to be visit
67
- */ visit(target) {
68
- if (target instanceof OctreeNode) {
69
- return this.visitOctreeNode(target);
70
- } else if (target.isMesh()) {
71
- return this.visitMesh(target);
72
- } else if (target.isWater()) {
73
- return this.visitWater(target);
74
- } else if (target.isParticleSystem()) {
75
- return this.visitParticleSystem(target);
76
- } else if (target.isTerrain()) {
77
- return this.visitTerrain(target);
78
- } else if (target.isClipmapTerrain()) {
79
- return this.visitClipmapTerrain(target);
80
- } else if (target.isPunctualLight()) {
81
- return this.visitPunctualLight(target);
82
- } else if (target.isBatchGroup()) {
83
- return this.visitBatchGroup(target);
84
- }
85
- }
86
- /** @internal */ visitPunctualLight(node) {
87
- if (!node.hidden) {
88
- const clipState = this.getClipStateWithNode(node);
89
- if (clipState !== ClipState.NOT_CLIPPED) {
90
- this.renderQueue.pushLight(node);
91
- return true;
92
- }
93
- }
94
- return false;
95
- }
96
- /** @internal */ visitTerrain(node) {
97
- if (!node.hidden && (node.castShadow || !this._isShadowMapping) && (node.gpuPickable || !this._isGPUPicking)) {
98
- const clipState = this.getClipStateWithNode(node);
99
- if (clipState !== ClipState.NOT_CLIPPED) {
100
- return node.cull(this) > 0;
101
- }
102
- }
103
- return false;
104
- }
105
- /** @internal */ visitClipmapTerrain(node) {
106
- if (!node.hidden && (node.castShadow || !this._isShadowMapping) && (node.gpuPickable || !this._isGPUPicking)) {
107
- const clipState = this.getClipStateWithNode(node);
108
- if (clipState !== ClipState.NOT_CLIPPED) {
109
- this.push(this._camera, node);
110
- return true;
111
- }
112
- }
113
- return false;
114
- }
115
- /** @internal */ visitBatchGroup(node) {
116
- if (!node.hidden) {
117
- const clipState = this.getClipStateWithNode(node);
118
- if (clipState !== ClipState.NOT_CLIPPED) {
119
- node.cull(this);
120
- return true;
121
- }
122
- }
123
- return false;
124
- }
125
- /** @internal */ visitParticleSystem(node) {
126
- if (!node.hidden && !this._isShadowMapping && (node.gpuPickable || !this._isGPUPicking)) {
127
- const clipState = this.getClipStateWithNode(node);
128
- if (clipState !== ClipState.NOT_CLIPPED) {
129
- this.push(this._camera, node);
130
- return true;
131
- }
132
- }
133
- return false;
134
- }
135
- /** @internal */ visitMesh(node) {
136
- if (!node.hidden && (node.castShadow || !this._isShadowMapping) && (node.gpuPickable || !this._isGPUPicking)) {
137
- const clipState = this.getClipStateWithNode(node);
138
- if (clipState !== ClipState.NOT_CLIPPED) {
139
- this.push(this._camera, node);
140
- return true;
141
- }
142
- }
143
- return false;
144
- }
145
- /** @internal */ visitWater(node) {
146
- if (!node.hidden && !this._isShadowMapping && (node.gpuPickable || !this._isGPUPicking)) {
147
- const clipState = this.getClipStateWithNode(node);
148
- if (clipState !== ClipState.NOT_CLIPPED) {
149
- this.push(this._camera, node);
150
- return true;
151
- }
152
- }
153
- return false;
154
- }
155
- /** @internal */ visitOctreeNode(node) {
156
- const clipState = node.getLevel() > 0 ? this.getClipStateWithAABB(node.getBoxLoosed()) : ClipState.CLIPPED;
157
- if (clipState !== ClipState.NOT_CLIPPED) {
158
- const saveSkipFlag = this._skipClipTest;
159
- this._skipClipTest = this._skipClipTest || clipState === ClipState.A_INSIDE_B;
160
- const nodes = node.getNodes();
161
- for(let i = 0; i < nodes.length; i++){
162
- this.visit(nodes[i]);
163
- }
164
- this._skipClipTest = saveSkipFlag;
165
- return true;
166
- }
167
- return false;
168
- }
169
- /** @internal */ getClipStateWithNode(node) {
170
- let clipState;
171
- if (this._skipClipTest) {
172
- clipState = ClipState.A_INSIDE_B;
173
- } else if (!node.clipTestEnabled) {
174
- clipState = ClipState.CLIPPED;
175
- } else {
176
- const bv = node.getWorldBoundingVolume();
177
- clipState = bv ? this.getClipStateWithAABB(bv.toAABB()) : ClipState.CLIPPED;
178
- }
179
- return clipState;
180
- }
181
- /** @internal */ getClipStateWithAABB(aabb) {
182
- return this.camera.clipMask ? aabb.getClipStateWithFrustumMask(this.frustum, this.camera.clipMask) : aabb.getClipStateWithFrustum(this.frustum);
183
- }
184
- }
185
-
186
- export { CullVisitor };
187
- //# sourceMappingURL=cull_visitor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cull_visitor.js","sources":["../../../src/render/cull_visitor.ts"],"sourcesContent":["import type { AABB } from '@zephyr3d/base';\r\nimport { ClipState } from '@zephyr3d/base';\r\nimport { OctreeNode } from '../scene/octree';\r\nimport { RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP } from '../values';\r\nimport type { GraphNode } from '../scene/graph_node';\r\nimport type { RenderQueue } from './render_queue';\r\nimport type { RenderPass, Drawable } from '.';\r\nimport type { Mesh } from '../scene/mesh';\r\nimport type { Terrain } from '../scene/terrain';\r\nimport type { ClipmapTerrain } from '../scene/terrain-cm';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { Visitor } from '../scene/visitor';\r\nimport type { Camera } from '../camera/camera';\r\nimport type { SceneNode } from '../scene/scene_node';\r\nimport type { BatchGroup } from '../scene/batchgroup';\r\nimport type { ParticleSystem } from '../scene';\r\nimport type { Water } from '../scene/water';\r\n\r\n/**\r\n * Node visitor for culling\r\n * @public\r\n */\r\nexport class CullVisitor implements Visitor<SceneNode | OctreeNode> {\r\n /** @internal */\r\n private readonly _primaryCamera: Camera;\r\n /** @internal */\r\n private _camera: Camera;\r\n /** @internal */\r\n private _skipClipTest: boolean;\r\n /** @internal */\r\n private _renderQueue: RenderQueue;\r\n /** @internal */\r\n private readonly _renderPass: RenderPass;\r\n /** @internal */\r\n private readonly _isGPUPicking: boolean;\r\n /** @internal */\r\n private readonly _isShadowMapping: boolean;\r\n /**\r\n * Creates an instance of CullVisitor\r\n * @param renderPass - Render pass for the culling task\r\n * @param camera - Camera that will be used for culling\r\n * @param rendeQueue - RenderQueue\r\n * @param viewPoint - Camera position of the primary render pass\r\n */\r\n constructor(renderPass: RenderPass, camera: Camera, renderQueue: RenderQueue, primaryCamera: Camera) {\r\n this._primaryCamera = primaryCamera;\r\n this._camera = camera;\r\n this._renderQueue = renderQueue;\r\n this._skipClipTest = false;\r\n this._renderPass = renderPass;\r\n this._isGPUPicking = this._renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR;\r\n this._isShadowMapping = this._renderPass.type === RENDER_PASS_TYPE_SHADOWMAP;\r\n }\r\n /** The camera that will be used for culling */\r\n get camera() {\r\n return this._camera;\r\n }\r\n set camera(camera: Camera) {\r\n this._camera = camera || null;\r\n }\r\n /** true if cull with frustum culling, otherwise false. default is true */\r\n get frustumCulling(): boolean {\r\n return !this._skipClipTest;\r\n }\r\n set frustumCulling(val: boolean) {\r\n this._skipClipTest = !val;\r\n }\r\n /** The camera position of the primary render pass */\r\n get primaryCamera() {\r\n return this._primaryCamera;\r\n }\r\n /** Render pass for the culling task */\r\n get renderPass(): RenderPass {\r\n return this._renderPass;\r\n }\r\n /** The result of culling */\r\n get renderQueue() {\r\n return this._renderQueue;\r\n }\r\n set renderQueue(renderQueue: RenderQueue) {\r\n this._renderQueue = renderQueue;\r\n }\r\n /** Frustum for culling */\r\n get frustum() {\r\n return this._camera?.frustum || null;\r\n }\r\n /** @internal */\r\n push(camera: Camera, drawable: Drawable) {\r\n this.renderQueue.push(camera, drawable);\r\n }\r\n /** @internal */\r\n pushRenderQueue(renderQueue: RenderQueue) {\r\n this.renderQueue.pushRenderQueue(renderQueue);\r\n }\r\n /**\r\n * Visits a node\r\n * @param target - The node to be visit\r\n */\r\n visit(target: SceneNode | OctreeNode): unknown {\r\n if (target instanceof OctreeNode) {\r\n return this.visitOctreeNode(target);\r\n } else if (target.isMesh()) {\r\n return this.visitMesh(target);\r\n } else if (target.isWater()) {\r\n return this.visitWater(target);\r\n } else if (target.isParticleSystem()) {\r\n return this.visitParticleSystem(target);\r\n } else if (target.isTerrain()) {\r\n return this.visitTerrain(target);\r\n } else if (target.isClipmapTerrain()) {\r\n return this.visitClipmapTerrain(target);\r\n } else if (target.isPunctualLight()) {\r\n return this.visitPunctualLight(target);\r\n } else if (target.isBatchGroup()) {\r\n return this.visitBatchGroup(target);\r\n }\r\n }\r\n /** @internal */\r\n visitPunctualLight(node: PunctualLight) {\r\n if (!node.hidden) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n this.renderQueue.pushLight(node);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitTerrain(node: Terrain) {\r\n if (\r\n !node.hidden &&\r\n (node.castShadow || !this._isShadowMapping) &&\r\n (node.gpuPickable || !this._isGPUPicking)\r\n ) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n return node.cull(this) > 0;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitClipmapTerrain(node: ClipmapTerrain) {\r\n if (\r\n !node.hidden &&\r\n (node.castShadow || !this._isShadowMapping) &&\r\n (node.gpuPickable || !this._isGPUPicking)\r\n ) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n this.push(this._camera, node);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitBatchGroup(node: BatchGroup) {\r\n if (!node.hidden) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n node.cull(this);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitParticleSystem(node: ParticleSystem) {\r\n if (!node.hidden && !this._isShadowMapping && (node.gpuPickable || !this._isGPUPicking)) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n this.push(this._camera, node);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitMesh(node: Mesh) {\r\n if (\r\n !node.hidden &&\r\n (node.castShadow || !this._isShadowMapping) &&\r\n (node.gpuPickable || !this._isGPUPicking)\r\n ) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n this.push(this._camera, node);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitWater(node: Water) {\r\n if (!node.hidden && !this._isShadowMapping && (node.gpuPickable || !this._isGPUPicking)) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n this.push(this._camera, node);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitOctreeNode(node: OctreeNode) {\r\n const clipState =\r\n node.getLevel() > 0 ? this.getClipStateWithAABB(node.getBoxLoosed()) : ClipState.CLIPPED;\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n const saveSkipFlag = this._skipClipTest;\r\n this._skipClipTest = this._skipClipTest || clipState === ClipState.A_INSIDE_B;\r\n const nodes = node.getNodes();\r\n for (let i = 0; i < nodes.length; i++) {\r\n this.visit(nodes[i]);\r\n }\r\n this._skipClipTest = saveSkipFlag;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n protected getClipStateWithNode(node: GraphNode): ClipState {\r\n let clipState: ClipState;\r\n if (this._skipClipTest) {\r\n clipState = ClipState.A_INSIDE_B;\r\n } else if (!node.clipTestEnabled) {\r\n clipState = ClipState.CLIPPED;\r\n } else {\r\n const bv = node.getWorldBoundingVolume();\r\n clipState = bv ? this.getClipStateWithAABB(bv.toAABB()) : ClipState.CLIPPED;\r\n }\r\n return clipState;\r\n }\r\n /** @internal */\r\n protected getClipStateWithAABB(aabb: AABB): ClipState {\r\n return this.camera.clipMask\r\n ? aabb.getClipStateWithFrustumMask(this.frustum, this.camera.clipMask)\r\n : aabb.getClipStateWithFrustum(this.frustum);\r\n }\r\n}\r\n"],"names":["CullVisitor","renderPass","camera","renderQueue","primaryCamera","_primaryCamera","_camera","_renderQueue","_skipClipTest","_renderPass","_isGPUPicking","type","RENDER_PASS_TYPE_OBJECT_COLOR","_isShadowMapping","RENDER_PASS_TYPE_SHADOWMAP","frustumCulling","val","frustum","push","drawable","pushRenderQueue","visit","target","OctreeNode","visitOctreeNode","isMesh","visitMesh","isWater","visitWater","isParticleSystem","visitParticleSystem","isTerrain","visitTerrain","isClipmapTerrain","visitClipmapTerrain","isPunctualLight","visitPunctualLight","isBatchGroup","visitBatchGroup","node","hidden","clipState","getClipStateWithNode","ClipState","NOT_CLIPPED","pushLight","castShadow","gpuPickable","cull","getLevel","getClipStateWithAABB","getBoxLoosed","CLIPPED","saveSkipFlag","A_INSIDE_B","nodes","getNodes","i","length","clipTestEnabled","bv","getWorldBoundingVolume","toAABB","aabb","clipMask","getClipStateWithFrustumMask","getClipStateWithFrustum"],"mappings":";;;;AAkBA;;;AAGC,IACM,MAAMA,WAAAA,CAAAA;qBAEX,cAAwC;qBAExC,OAAwB;qBAExB,aAA+B;qBAE/B,YAAkC;qBAElC,WAAyC;qBAEzC,aAAwC;qBAExC,gBAA2C;AAC3C;;;;;;MAOA,WAAA,CAAYC,UAAsB,EAAEC,MAAc,EAAEC,WAAwB,EAAEC,aAAqB,CAAE;QACnG,IAAI,CAACC,cAAc,GAAGD,aAAAA;QACtB,IAAI,CAACE,OAAO,GAAGJ,MAAAA;QACf,IAAI,CAACK,YAAY,GAAGJ,WAAAA;QACpB,IAAI,CAACK,aAAa,GAAG,KAAA;QACrB,IAAI,CAACC,WAAW,GAAGR,UAAAA;QACnB,IAAI,CAACS,aAAa,GAAG,IAAI,CAACD,WAAW,CAACE,IAAI,KAAKC,6BAAAA;QAC/C,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACJ,WAAW,CAACE,IAAI,KAAKG,0BAAAA;AACpD;oDAEA,IAAIZ,MAAS,GAAA;QACX,OAAO,IAAI,CAACI,OAAO;AACrB;IACA,IAAIJ,MAAAA,CAAOA,MAAc,EAAE;QACzB,IAAI,CAACI,OAAO,GAAGJ,MAAU,IAAA,IAAA;AAC3B;+EAEA,IAAIa,cAA0B,GAAA;QAC5B,OAAO,CAAC,IAAI,CAACP,aAAa;AAC5B;IACA,IAAIO,cAAAA,CAAeC,GAAY,EAAE;QAC/B,IAAI,CAACR,aAAa,GAAG,CAACQ,GAAAA;AACxB;0DAEA,IAAIZ,aAAgB,GAAA;QAClB,OAAO,IAAI,CAACC,cAAc;AAC5B;4CAEA,IAAIJ,UAAyB,GAAA;QAC3B,OAAO,IAAI,CAACQ,WAAW;AACzB;iCAEA,IAAIN,WAAc,GAAA;QAChB,OAAO,IAAI,CAACI,YAAY;AAC1B;IACA,IAAIJ,WAAAA,CAAYA,WAAwB,EAAE;QACxC,IAAI,CAACI,YAAY,GAAGJ,WAAAA;AACtB;+BAEA,IAAIc,OAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAACX,OAAO,EAAEW,OAAW,IAAA,IAAA;AAClC;AACA,qBACAC,IAAAA,CAAKhB,MAAc,EAAEiB,QAAkB,EAAE;AACvC,QAAA,IAAI,CAAChB,WAAW,CAACe,IAAI,CAAChB,MAAQiB,EAAAA,QAAAA,CAAAA;AAChC;qBAEAC,eAAgBjB,CAAAA,WAAwB,EAAE;AACxC,QAAA,IAAI,CAACA,WAAW,CAACiB,eAAe,CAACjB,WAAAA,CAAAA;AACnC;AACA;;;MAIAkB,KAAAA,CAAMC,MAA8B,EAAW;AAC7C,QAAA,IAAIA,kBAAkBC,UAAY,EAAA;YAChC,OAAO,IAAI,CAACC,eAAe,CAACF,MAAAA,CAAAA;SACvB,MAAA,IAAIA,MAAOG,CAAAA,MAAM,EAAI,EAAA;YAC1B,OAAO,IAAI,CAACC,SAAS,CAACJ,MAAAA,CAAAA;SACjB,MAAA,IAAIA,MAAOK,CAAAA,OAAO,EAAI,EAAA;YAC3B,OAAO,IAAI,CAACC,UAAU,CAACN,MAAAA,CAAAA;SAClB,MAAA,IAAIA,MAAOO,CAAAA,gBAAgB,EAAI,EAAA;YACpC,OAAO,IAAI,CAACC,mBAAmB,CAACR,MAAAA,CAAAA;SAC3B,MAAA,IAAIA,MAAOS,CAAAA,SAAS,EAAI,EAAA;YAC7B,OAAO,IAAI,CAACC,YAAY,CAACV,MAAAA,CAAAA;SACpB,MAAA,IAAIA,MAAOW,CAAAA,gBAAgB,EAAI,EAAA;YACpC,OAAO,IAAI,CAACC,mBAAmB,CAACZ,MAAAA,CAAAA;SAC3B,MAAA,IAAIA,MAAOa,CAAAA,eAAe,EAAI,EAAA;YACnC,OAAO,IAAI,CAACC,kBAAkB,CAACd,MAAAA,CAAAA;SAC1B,MAAA,IAAIA,MAAOe,CAAAA,YAAY,EAAI,EAAA;YAChC,OAAO,IAAI,CAACC,eAAe,CAAChB,MAAAA,CAAAA;AAC9B;AACF;qBAEAc,kBAAmBG,CAAAA,IAAmB,EAAE;QACtC,IAAI,CAACA,IAAKC,CAAAA,MAAM,EAAE;AAChB,YAAA,MAAMC,SAAY,GAAA,IAAI,CAACC,oBAAoB,CAACH,IAAAA,CAAAA;YAC5C,IAAIE,SAAAA,KAAcE,SAAUC,CAAAA,WAAW,EAAE;AACvC,gBAAA,IAAI,CAACzC,WAAW,CAAC0C,SAAS,CAACN,IAAAA,CAAAA;gBAC3B,OAAO,IAAA;AACT;AACF;QACA,OAAO,KAAA;AACT;qBAEAP,YAAaO,CAAAA,IAAa,EAAE;QAC1B,IACE,CAACA,KAAKC,MAAM,KACXD,IAAKO,CAAAA,UAAU,IAAI,CAAC,IAAI,CAACjC,gBAAgB,CAAD,KACxC0B,IAAAA,CAAKQ,WAAW,IAAI,CAAC,IAAI,CAACrC,aAAY,CACvC,EAAA;AACA,YAAA,MAAM+B,SAAY,GAAA,IAAI,CAACC,oBAAoB,CAACH,IAAAA,CAAAA;YAC5C,IAAIE,SAAAA,KAAcE,SAAUC,CAAAA,WAAW,EAAE;AACvC,gBAAA,OAAOL,IAAKS,CAAAA,IAAI,CAAC,IAAI,CAAI,GAAA,CAAA;AAC3B;AACF;QACA,OAAO,KAAA;AACT;qBAEAd,mBAAoBK,CAAAA,IAAoB,EAAE;QACxC,IACE,CAACA,KAAKC,MAAM,KACXD,IAAKO,CAAAA,UAAU,IAAI,CAAC,IAAI,CAACjC,gBAAgB,CAAD,KACxC0B,IAAAA,CAAKQ,WAAW,IAAI,CAAC,IAAI,CAACrC,aAAY,CACvC,EAAA;AACA,YAAA,MAAM+B,SAAY,GAAA,IAAI,CAACC,oBAAoB,CAACH,IAAAA,CAAAA;YAC5C,IAAIE,SAAAA,KAAcE,SAAUC,CAAAA,WAAW,EAAE;AACvC,gBAAA,IAAI,CAAC1B,IAAI,CAAC,IAAI,CAACZ,OAAO,EAAEiC,IAAAA,CAAAA;gBACxB,OAAO,IAAA;AACT;AACF;QACA,OAAO,KAAA;AACT;qBAEAD,eAAgBC,CAAAA,IAAgB,EAAE;QAChC,IAAI,CAACA,IAAKC,CAAAA,MAAM,EAAE;AAChB,YAAA,MAAMC,SAAY,GAAA,IAAI,CAACC,oBAAoB,CAACH,IAAAA,CAAAA;YAC5C,IAAIE,SAAAA,KAAcE,SAAUC,CAAAA,WAAW,EAAE;gBACvCL,IAAKS,CAAAA,IAAI,CAAC,IAAI,CAAA;gBACd,OAAO,IAAA;AACT;AACF;QACA,OAAO,KAAA;AACT;qBAEAlB,mBAAoBS,CAAAA,IAAoB,EAAE;AACxC,QAAA,IAAI,CAACA,IAAKC,CAAAA,MAAM,IAAI,CAAC,IAAI,CAAC3B,gBAAgB,KAAK0B,IAAAA,CAAKQ,WAAW,IAAI,CAAC,IAAI,CAACrC,aAAa,CAAG,EAAA;AACvF,YAAA,MAAM+B,SAAY,GAAA,IAAI,CAACC,oBAAoB,CAACH,IAAAA,CAAAA;YAC5C,IAAIE,SAAAA,KAAcE,SAAUC,CAAAA,WAAW,EAAE;AACvC,gBAAA,IAAI,CAAC1B,IAAI,CAAC,IAAI,CAACZ,OAAO,EAAEiC,IAAAA,CAAAA;gBACxB,OAAO,IAAA;AACT;AACF;QACA,OAAO,KAAA;AACT;qBAEAb,SAAUa,CAAAA,IAAU,EAAE;QACpB,IACE,CAACA,KAAKC,MAAM,KACXD,IAAKO,CAAAA,UAAU,IAAI,CAAC,IAAI,CAACjC,gBAAgB,CAAD,KACxC0B,IAAAA,CAAKQ,WAAW,IAAI,CAAC,IAAI,CAACrC,aAAY,CACvC,EAAA;AACA,YAAA,MAAM+B,SAAY,GAAA,IAAI,CAACC,oBAAoB,CAACH,IAAAA,CAAAA;YAC5C,IAAIE,SAAAA,KAAcE,SAAUC,CAAAA,WAAW,EAAE;AACvC,gBAAA,IAAI,CAAC1B,IAAI,CAAC,IAAI,CAACZ,OAAO,EAAEiC,IAAAA,CAAAA;gBACxB,OAAO,IAAA;AACT;AACF;QACA,OAAO,KAAA;AACT;qBAEAX,UAAWW,CAAAA,IAAW,EAAE;AACtB,QAAA,IAAI,CAACA,IAAKC,CAAAA,MAAM,IAAI,CAAC,IAAI,CAAC3B,gBAAgB,KAAK0B,IAAAA,CAAKQ,WAAW,IAAI,CAAC,IAAI,CAACrC,aAAa,CAAG,EAAA;AACvF,YAAA,MAAM+B,SAAY,GAAA,IAAI,CAACC,oBAAoB,CAACH,IAAAA,CAAAA;YAC5C,IAAIE,SAAAA,KAAcE,SAAUC,CAAAA,WAAW,EAAE;AACvC,gBAAA,IAAI,CAAC1B,IAAI,CAAC,IAAI,CAACZ,OAAO,EAAEiC,IAAAA,CAAAA;gBACxB,OAAO,IAAA;AACT;AACF;QACA,OAAO,KAAA;AACT;qBAEAf,eAAgBe,CAAAA,IAAgB,EAAE;AAChC,QAAA,MAAME,SACJF,GAAAA,IAAAA,CAAKU,QAAQ,EAAA,GAAK,CAAI,GAAA,IAAI,CAACC,oBAAoB,CAACX,IAAAA,CAAKY,YAAY,EAAA,CAAA,GAAMR,UAAUS,OAAO;QAC1F,IAAIX,SAAAA,KAAcE,SAAUC,CAAAA,WAAW,EAAE;YACvC,MAAMS,YAAAA,GAAe,IAAI,CAAC7C,aAAa;YACvC,IAAI,CAACA,aAAa,GAAG,IAAI,CAACA,aAAa,IAAIiC,SAAcE,KAAAA,SAAAA,CAAUW,UAAU;YAC7E,MAAMC,KAAAA,GAAQhB,KAAKiB,QAAQ,EAAA;AAC3B,YAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIF,KAAMG,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;AACrC,gBAAA,IAAI,CAACpC,KAAK,CAACkC,KAAK,CAACE,CAAE,CAAA,CAAA;AACrB;YACA,IAAI,CAACjD,aAAa,GAAG6C,YAAAA;YACrB,OAAO,IAAA;AACT;QACA,OAAO,KAAA;AACT;AACA,qBACUX,oBAAqBH,CAAAA,IAAe,EAAa;QACzD,IAAIE,SAAAA;QACJ,IAAI,IAAI,CAACjC,aAAa,EAAE;AACtBiC,YAAAA,SAAAA,GAAYE,UAAUW,UAAU;AAClC,SAAA,MAAO,IAAI,CAACf,IAAKoB,CAAAA,eAAe,EAAE;AAChClB,YAAAA,SAAAA,GAAYE,UAAUS,OAAO;SACxB,MAAA;YACL,MAAMQ,EAAAA,GAAKrB,KAAKsB,sBAAsB,EAAA;YACtCpB,SAAYmB,GAAAA,EAAAA,GAAK,IAAI,CAACV,oBAAoB,CAACU,EAAGE,CAAAA,MAAM,EAAMnB,CAAAA,GAAAA,SAAAA,CAAUS,OAAO;AAC7E;QACA,OAAOX,SAAAA;AACT;AACA,qBACUS,oBAAqBa,CAAAA,IAAU,EAAa;QACpD,OAAO,IAAI,CAAC7D,MAAM,CAAC8D,QAAQ,GACvBD,IAAKE,CAAAA,2BAA2B,CAAC,IAAI,CAAChD,OAAO,EAAE,IAAI,CAACf,MAAM,CAAC8D,QAAQ,CAAA,GACnED,KAAKG,uBAAuB,CAAC,IAAI,CAACjD,OAAO,CAAA;AAC/C;AACF;;;;"}
@@ -1,68 +0,0 @@
1
- import { RenderPass } from './renderpass.js';
2
- import { RENDER_PASS_TYPE_DEPTH } from '../values.js';
3
- import { ShaderHelper } from '../material/shader/helper.js';
4
-
5
- /**
6
- * Depth render pass
7
- *
8
- * Scene depth render pass
9
- *
10
- * @public
11
- */ class DepthPass extends RenderPass {
12
- _renderBackface;
13
- _encodeDepth;
14
- _transmission;
15
- /**
16
- * Creates an instance of DepthRenderPass
17
- */ constructor(){
18
- super(RENDER_PASS_TYPE_DEPTH);
19
- this._renderBackface = false;
20
- this._encodeDepth = false;
21
- this._transmission = false;
22
- }
23
- get transmission() {
24
- return this._transmission;
25
- }
26
- set transmission(val) {
27
- this._transmission = val;
28
- }
29
- get renderBackface() {
30
- return this._renderBackface;
31
- }
32
- set renderBackface(val) {
33
- this._renderBackface = !!val;
34
- }
35
- get encodeDepth() {
36
- return this._encodeDepth;
37
- }
38
- set encodeDepth(val) {
39
- this._encodeDepth = !!val;
40
- }
41
- /** @internal */ _getGlobalBindGroupHash(ctx) {
42
- return `${Number(this._renderBackface)}:${Number(this._encodeDepth)}:${Number(ctx.motionVectors)}`;
43
- }
44
- /** @internal */ renderItems(ctx, renderQueue) {
45
- const items = renderQueue.itemList;
46
- if (items) {
47
- ctx.fogFlags = 0;
48
- ctx.drawEnvLight = false;
49
- ctx.env = null;
50
- ctx.flip = this.isAutoFlip(ctx);
51
- ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);
52
- const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
53
- ctx.device.setBindGroup(0, bindGroup);
54
- ShaderHelper.setCameraUniforms(bindGroup, ctx, true);
55
- const reverseWinding = ctx.camera.worldMatrixDet < 0;
56
- const list = this._transmission ? items.transmission : items.opaque;
57
- for (const lit of list.lit){
58
- this.drawItemList(lit, ctx, reverseWinding);
59
- }
60
- for (const unlit of list.unlit){
61
- this.drawItemList(unlit, ctx, reverseWinding);
62
- }
63
- }
64
- }
65
- }
66
-
67
- export { DepthPass };
68
- //# sourceMappingURL=depthpass.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"depthpass.js","sources":["../../../src/render/depthpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { RENDER_PASS_TYPE_DEPTH } from '../values';\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 * Depth render pass\r\n *\r\n * Scene depth render pass\r\n *\r\n * @public\r\n */\r\nexport class DepthPass extends RenderPass {\r\n private _renderBackface: boolean;\r\n private _encodeDepth: boolean;\r\n private _transmission: boolean;\r\n /**\r\n * Creates an instance of DepthRenderPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_DEPTH);\r\n this._renderBackface = false;\r\n this._encodeDepth = false;\r\n this._transmission = false;\r\n }\r\n get transmission() {\r\n return this._transmission;\r\n }\r\n set transmission(val: boolean) {\r\n this._transmission = val;\r\n }\r\n get renderBackface(): boolean {\r\n return this._renderBackface;\r\n }\r\n set renderBackface(val: boolean) {\r\n this._renderBackface = !!val;\r\n }\r\n get encodeDepth(): boolean {\r\n return this._encodeDepth;\r\n }\r\n set encodeDepth(val: boolean) {\r\n this._encodeDepth = !!val;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${Number(this._renderBackface)}:${Number(this._encodeDepth)}:${Number(ctx.motionVectors)}`;\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.fogFlags = 0;\r\n ctx.drawEnvLight = false;\r\n ctx.env = null;\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.setCameraUniforms(bindGroup, ctx, true);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n const list = this._transmission ? items.transmission : items.opaque;\r\n for (const lit of list.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of list.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["DepthPass","RenderPass","_renderBackface","_encodeDepth","_transmission","RENDER_PASS_TYPE_DEPTH","transmission","val","renderBackface","encodeDepth","_getGlobalBindGroupHash","ctx","Number","motionVectors","renderItems","renderQueue","items","itemList","fogFlags","drawEnvLight","env","flip","isAutoFlip","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","device","setBindGroup","ShaderHelper","setCameraUniforms","reverseWinding","camera","worldMatrixDet","list","opaque","lit","drawItemList","unlit"],"mappings":";;;;AAMA;;;;;;IAOO,MAAMA,SAAkBC,SAAAA,UAAAA,CAAAA;IACrBC,eAAyB;IACzBC,YAAsB;IACtBC,aAAuB;AAC/B;;AAEC,MACD,WAAc,EAAA;AACZ,QAAA,KAAK,CAACC,sBAAAA,CAAAA;QACN,IAAI,CAACH,eAAe,GAAG,KAAA;QACvB,IAAI,CAACC,YAAY,GAAG,KAAA;QACpB,IAAI,CAACC,aAAa,GAAG,KAAA;AACvB;AACA,IAAA,IAAIE,YAAe,GAAA;QACjB,OAAO,IAAI,CAACF,aAAa;AAC3B;IACA,IAAIE,YAAAA,CAAaC,GAAY,EAAE;QAC7B,IAAI,CAACH,aAAa,GAAGG,GAAAA;AACvB;AACA,IAAA,IAAIC,cAA0B,GAAA;QAC5B,OAAO,IAAI,CAACN,eAAe;AAC7B;IACA,IAAIM,cAAAA,CAAeD,GAAY,EAAE;AAC/B,QAAA,IAAI,CAACL,eAAe,GAAG,CAAC,CAACK,GAAAA;AAC3B;AACA,IAAA,IAAIE,WAAuB,GAAA;QACzB,OAAO,IAAI,CAACN,YAAY;AAC1B;IACA,IAAIM,WAAAA,CAAYF,GAAY,EAAE;AAC5B,QAAA,IAAI,CAACJ,YAAY,GAAG,CAAC,CAACI,GAAAA;AACxB;AACA,qBACUG,uBAAwBC,CAAAA,GAAgB,EAAE;AAClD,QAAA,OAAO,GAAGC,MAAO,CAAA,IAAI,CAACV,eAAe,CAAA,CAAE,CAAC,EAAEU,MAAAA,CAAO,IAAI,CAACT,YAAY,CAAE,CAAA,CAAC,EAAES,MAAOD,CAAAA,GAAAA,CAAIE,aAAa,CAAG,CAAA,CAAA;AACpG;AACA,qBACA,WAAUC,CAAYH,GAAgB,EAAEI,WAAwB,EAAE;QAChE,MAAMC,KAAAA,GAAQD,YAAYE,QAAQ;AAClC,QAAA,IAAID,KAAO,EAAA;AACTL,YAAAA,GAAAA,CAAIO,QAAQ,GAAG,CAAA;AACfP,YAAAA,GAAAA,CAAIQ,YAAY,GAAG,KAAA;AACnBR,YAAAA,GAAAA,CAAIS,GAAG,GAAG,IAAA;AACVT,YAAAA,GAAAA,CAAIU,IAAI,GAAG,IAAI,CAACC,UAAU,CAACX,GAAAA,CAAAA;AAC3BA,YAAAA,GAAAA,CAAIY,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACb,GAAAA,CAAAA;AACjD,YAAA,MAAMc,SAAYd,GAAAA,GAAAA,CAAIe,wBAAwB,CAACC,kBAAkB,CAAChB,GAAAA,CAAAA;AAClEA,YAAAA,GAAAA,CAAIiB,MAAM,CAACC,YAAY,CAAC,CAAGJ,EAAAA,SAAAA,CAAAA;YAC3BK,YAAaC,CAAAA,iBAAiB,CAACN,SAAAA,EAAWd,GAAK,EAAA,IAAA,CAAA;AAC/C,YAAA,MAAMqB,cAAiBrB,GAAAA,GAAAA,CAAIsB,MAAM,CAACC,cAAc,GAAG,CAAA;YACnD,MAAMC,IAAAA,GAAO,IAAI,CAAC/B,aAAa,GAAGY,KAAMV,CAAAA,YAAY,GAAGU,KAAAA,CAAMoB,MAAM;AACnE,YAAA,KAAK,MAAMC,GAAAA,IAAOF,IAAKE,CAAAA,GAAG,CAAE;AAC1B,gBAAA,IAAI,CAACC,YAAY,CAACD,GAAAA,EAAK1B,GAAKqB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,YAAA,KAAK,MAAMO,KAAAA,IAASJ,IAAKI,CAAAA,KAAK,CAAE;AAC9B,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO5B,GAAKqB,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;AACF;;;;"}
@@ -1,227 +0,0 @@
1
- import { Vector2, Vector4 } from '@zephyr3d/base';
2
- import { ShaderHelper } from '../material/shader/helper.js';
3
- import '../material/lambert.js';
4
- import '../material/blinn.js';
5
- import '../material/unlit.js';
6
- import '../material/particle.js';
7
- import '@zephyr3d/device';
8
- import { MaterialVaryingFlags } from '../values.js';
9
- import { Application } from '../app/app.js';
10
- import '../material/meshmaterial.js';
11
- import '../material/grassmaterial.js';
12
- import '../material/terrainmaterial.js';
13
- import '../material/terrain-cm.js';
14
- import '../material/pbrmr.js';
15
- import '../material/pbrsg.js';
16
-
17
- let _drawableId = 0;
18
- const boneTextureSize = new Vector2();
19
- const instanceBindGroupTransfromTags = new WeakMap();
20
- const drawableBindGroupTransfromTags = new WeakMap();
21
- const bindGroupCache = {};
22
- const usedBindGroups = new WeakMap();
23
- function fetchBindGroup(skinning, morphing, instancing) {
24
- const hash = `${instancing}:${morphing}:${skinning}`;
25
- const bindGroups = bindGroupCache[hash];
26
- let bindGroup = null;
27
- if (bindGroups && bindGroups.length > 0) {
28
- bindGroup = bindGroups.pop();
29
- } else {
30
- const layout = ShaderHelper.getDrawableBindGroupLayout(skinning, morphing, instancing);
31
- bindGroup = Application.instance.device.createBindGroup(layout);
32
- }
33
- usedBindGroups.set(bindGroup, hash);
34
- return bindGroup;
35
- }
36
- function releaseBindGroup(bindGroup) {
37
- if (bindGroup) {
38
- const hash = usedBindGroups.get(bindGroup);
39
- if (hash) {
40
- usedBindGroups.delete(bindGroup);
41
- drawableBindGroupTransfromTags.delete(bindGroup);
42
- const bindGroups = bindGroupCache[hash];
43
- if (bindGroups) {
44
- bindGroups.push(bindGroup);
45
- } else {
46
- bindGroupCache[hash] = [
47
- bindGroup
48
- ];
49
- }
50
- } else {
51
- bindGroup.dispose();
52
- }
53
- }
54
- }
55
- function mixinDrawable(baseCls) {
56
- const cls = class extends baseCls {
57
- _mdRenderQueueRef;
58
- _mdDrawableBindGroup;
59
- _mdDrawableBindGroupInstanced;
60
- _mdDrawableBindGroupSkin;
61
- _mdDrawableBindGroupMorph;
62
- _mdDrawableBindGroupSkinMorph;
63
- _worldMatrixBuffer;
64
- _framestampBuffer;
65
- _currentWorldMatrixBuffer;
66
- _prevWorldMatrixBuffer;
67
- _drawableId;
68
- _objectColor;
69
- constructor(...args){
70
- super(...args);
71
- this._drawableId = ++_drawableId;
72
- this._objectColor = null;
73
- this._mdRenderQueueRef = [];
74
- this._mdDrawableBindGroup = null;
75
- this._mdDrawableBindGroupInstanced = new Map();
76
- this._mdDrawableBindGroupSkin = null;
77
- this._mdDrawableBindGroupMorph = null;
78
- this._mdDrawableBindGroupSkinMorph = null;
79
- this._worldMatrixBuffer = new Float32Array(4 * 9);
80
- this._framestampBuffer = new Int32Array(this._worldMatrixBuffer.buffer, 4 * 16);
81
- this._currentWorldMatrixBuffer = this._worldMatrixBuffer.subarray(0, 16);
82
- this._prevWorldMatrixBuffer = this._worldMatrixBuffer.subarray(20, 36);
83
- this._currentWorldMatrixBuffer.set(this.getNode().worldMatrix);
84
- this._framestampBuffer[0] = Application.instance.device.frameInfo.frameCounter;
85
- this._framestampBuffer[1] = this._framestampBuffer[0];
86
- this._prevWorldMatrixBuffer.set(this.getNode().worldMatrix);
87
- this.getNode().on('transformchanged', ()=>{
88
- const frame = Application.instance.device.frameInfo.frameCounter;
89
- if (frame !== this._framestampBuffer[1]) {
90
- this._prevWorldMatrixBuffer.set(this._currentWorldMatrixBuffer);
91
- this._framestampBuffer[0] = frame;
92
- this._framestampBuffer[1] = frame;
93
- }
94
- this._currentWorldMatrixBuffer.set(this.getNode().worldMatrix);
95
- for (const ref of this._mdRenderQueueRef){
96
- if (ref.ref) {
97
- this.applyTransformUniforms(ref.ref);
98
- }
99
- }
100
- });
101
- }
102
- getDrawableId() {
103
- return this._drawableId;
104
- }
105
- getObjectColor() {
106
- if (!this._objectColor) {
107
- const a = (this._drawableId & 0xff) / 255;
108
- const b = (this._drawableId >>> 8 & 0xff) / 255;
109
- const g = (this._drawableId >>> 16 & 0xff) / 255;
110
- const r = (this._drawableId >>> 24 & 0xff) / 255;
111
- this._objectColor = new Vector4(r, g, b, a);
112
- }
113
- return this._objectColor;
114
- }
115
- pushRenderQueueRef(ref) {
116
- this.renderQueueRefPrune();
117
- this._mdRenderQueueRef.push(ref);
118
- }
119
- renderQueueRefPrune(force = false) {
120
- for(let i = this._mdRenderQueueRef.length - 1; i >= 0; i--){
121
- const ref = this._mdRenderQueueRef[i].ref;
122
- if (force || ref.disposed) {
123
- this._mdRenderQueueRef.splice(i, 1);
124
- const bindGroup = this._mdDrawableBindGroupInstanced.get(ref);
125
- if (bindGroup) {
126
- releaseBindGroup(bindGroup);
127
- this._mdDrawableBindGroupInstanced.delete(ref);
128
- }
129
- }
130
- }
131
- }
132
- applyInstanceOffsetAndStride(renderQueue, stride, offset) {
133
- const drawableBindGroup = this.getDrawableBindGroup(Application.instance.device, true, renderQueue);
134
- drawableBindGroup.setValue(ShaderHelper.getInstanceDataStrideUniformName(), stride >> 2);
135
- drawableBindGroup.setValue(ShaderHelper.getInstanceDataOffsetUniformName(), offset >> 2);
136
- }
137
- applyTransformUniforms(renderQueue) {
138
- const instanceInfo = renderQueue.getInstanceInfo(this);
139
- const currentTag = this.getNode().transformTag;
140
- if (instanceInfo) {
141
- const tag = instanceBindGroupTransfromTags.get(instanceInfo) ?? -1;
142
- if (tag !== currentTag) {
143
- instanceInfo.bindGroup.bindGroup.setRawData(ShaderHelper.getInstanceDataUniformName(), instanceInfo.offset * 4, this._worldMatrixBuffer, 0, 36);
144
- instanceBindGroupTransfromTags.set(instanceInfo, currentTag);
145
- }
146
- } else {
147
- const drawableBindGroup = this.getDrawableBindGroup(Application.instance.device, false, renderQueue);
148
- const tag = drawableBindGroupTransfromTags.get(drawableBindGroup) ?? -1;
149
- if (tag !== currentTag) {
150
- drawableBindGroup.setValue(ShaderHelper.getWorldMatrixUniformName(), this._currentWorldMatrixBuffer);
151
- drawableBindGroup.setValue(ShaderHelper.getPrevWorldMatrixUniformName(), this._prevWorldMatrixBuffer);
152
- drawableBindGroup.setValue(ShaderHelper.getPrevWorldMatrixFrameUniformName(), this._framestampBuffer[0]);
153
- if (this.getBoneMatrices()) {
154
- drawableBindGroup.setValue(ShaderHelper.getBoneInvBindMatrixUniformName(), this.invWorldMatrix);
155
- }
156
- drawableBindGroupTransfromTags.set(drawableBindGroup, currentTag);
157
- }
158
- }
159
- }
160
- applyMaterialUniformsAll() {
161
- for (const ref of this._mdRenderQueueRef){
162
- if (ref.ref) {
163
- const instanceInfo = ref.ref.getInstanceInfo(this);
164
- if (instanceInfo) {
165
- this.applyMaterialUniforms(instanceInfo);
166
- }
167
- }
168
- }
169
- }
170
- applyMaterialUniforms(instanceInfo) {
171
- const uniforms = this.getInstanceUniforms();
172
- if (uniforms) {
173
- instanceInfo.bindGroup.bindGroup.setRawData(ShaderHelper.getInstanceDataUniformName(), (instanceInfo.offset + ShaderHelper.MATERIAL_INSTANCE_DATA_OFFSET * 4) * 4, uniforms, 0, uniforms.length);
174
- }
175
- }
176
- /** @internal */ bind(ctx) {
177
- const device = ctx.device;
178
- const drawableBindGroup = this.getDrawableBindGroup(device, !!ctx.instanceData, ctx.renderQueue);
179
- device.setBindGroup(1, drawableBindGroup);
180
- device.setBindGroup(3, ctx.instanceData ? ctx.instanceData.bindGroup.bindGroup : null);
181
- if (ctx.materialFlags & MaterialVaryingFlags.SKIN_ANIMATION) {
182
- const boneTexture = this.getBoneMatrices();
183
- drawableBindGroup.setTexture(ShaderHelper.getBoneMatricesUniformName(), boneTexture);
184
- drawableBindGroup.setValue(ShaderHelper.getBoneInvBindMatrixUniformName(), this.invWorldMatrix);
185
- boneTextureSize.setXY(boneTexture.width, boneTexture.height);
186
- drawableBindGroup.setValue(ShaderHelper.getBoneTextureSizeUniformName(), boneTextureSize);
187
- }
188
- if (ctx.materialFlags & MaterialVaryingFlags.MORPH_ANIMATION) {
189
- const morphData = this.getMorphData();
190
- const morphInfo = this.getMorphInfo();
191
- drawableBindGroup.setTexture(ShaderHelper.getMorphDataUniformName(), morphData);
192
- drawableBindGroup.setBuffer(ShaderHelper.getMorphInfoUniformName(), morphInfo);
193
- }
194
- }
195
- /** @internal */ getDrawableBindGroup(device, instancing, renderQueue) {
196
- const skinning = !!this.getBoneMatrices();
197
- const morphing = !!this.getMorphData();
198
- let bindGroup = instancing ? this._mdDrawableBindGroupInstanced.get(renderQueue) : skinning && morphing ? this._mdDrawableBindGroupSkinMorph : skinning ? this._mdDrawableBindGroupSkin : morphing ? this._mdDrawableBindGroupMorph : this._mdDrawableBindGroup;
199
- if (!bindGroup) {
200
- bindGroup = fetchBindGroup(skinning, morphing, instancing);
201
- if (instancing) {
202
- this._mdDrawableBindGroupInstanced.set(renderQueue, bindGroup);
203
- } else if (skinning && morphing) {
204
- this._mdDrawableBindGroupSkinMorph = bindGroup;
205
- } else if (skinning) {
206
- this._mdDrawableBindGroupSkin = bindGroup;
207
- } else if (morphing) {
208
- this._mdDrawableBindGroupMorph = bindGroup;
209
- } else {
210
- this._mdDrawableBindGroup = bindGroup;
211
- }
212
- }
213
- return bindGroup;
214
- }
215
- dispose() {
216
- super.dispose();
217
- this.renderQueueRefPrune(true);
218
- releaseBindGroup(this._mdDrawableBindGroup);
219
- releaseBindGroup(this._mdDrawableBindGroupSkin);
220
- releaseBindGroup(this._mdDrawableBindGroupMorph);
221
- }
222
- };
223
- return cls;
224
- }
225
-
226
- export { mixinDrawable };
227
- //# sourceMappingURL=drawable_mixin.js.map