@zephyr3d/scene 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/dist/animation/animation.js +149 -27
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +173 -73
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +65 -10
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +41 -20
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/morphtarget.js +14 -38
  10. package/dist/animation/morphtarget.js.map +1 -1
  11. package/dist/animation/morphtrack.js +59 -22
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/proptrack.js +190 -0
  14. package/dist/animation/proptrack.js.map +1 -0
  15. package/dist/animation/rotationtrack.js +29 -11
  16. package/dist/animation/rotationtrack.js.map +1 -1
  17. package/dist/animation/scaletrack.js +29 -11
  18. package/dist/animation/scaletrack.js.map +1 -1
  19. package/dist/animation/skeleton.js +241 -78
  20. package/dist/animation/skeleton.js.map +1 -1
  21. package/dist/animation/translationtrack.js +30 -11
  22. package/dist/animation/translationtrack.js.map +1 -1
  23. package/dist/app/api.js +43 -0
  24. package/dist/app/api.js.map +1 -0
  25. package/dist/app/app.js +153 -0
  26. package/dist/app/app.js.map +1 -0
  27. package/dist/app/engine.js +312 -0
  28. package/dist/app/engine.js.map +1 -0
  29. package/dist/app/inputmgr.js +351 -0
  30. package/dist/app/inputmgr.js.map +1 -0
  31. package/dist/app/runtimescript.js +62 -0
  32. package/dist/app/runtimescript.js.map +1 -0
  33. package/dist/app/scriptingsystem.js +220 -0
  34. package/dist/app/scriptingsystem.js.map +1 -0
  35. package/dist/app/scriptregistry.js +432 -0
  36. package/dist/app/scriptregistry.js.map +1 -0
  37. package/dist/asset/assetmanager.js +772 -291
  38. package/dist/asset/assetmanager.js.map +1 -1
  39. package/dist/asset/builtin.js +7 -43
  40. package/dist/asset/builtin.js.map +1 -1
  41. package/dist/asset/loaders/dds/dds.js +17 -93
  42. package/dist/asset/loaders/dds/dds.js.map +1 -1
  43. package/dist/asset/loaders/dds/dds_loader.js +8 -18
  44. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  45. package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
  46. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  47. package/dist/asset/loaders/gltf/helpers.js +27 -14
  48. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  49. package/dist/asset/loaders/hdr/hdr.js +17 -12
  50. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  51. package/dist/asset/loaders/image/tga_Loader.js +13 -16
  52. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  53. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  54. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  55. package/dist/asset/loaders/loader.js.map +1 -1
  56. package/dist/asset/model.js +158 -4
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/blitter/bilateralblur.js +0 -1
  59. package/dist/blitter/bilateralblur.js.map +1 -1
  60. package/dist/blitter/blitter.js +22 -23
  61. package/dist/blitter/blitter.js.map +1 -1
  62. package/dist/blitter/box.js.map +1 -1
  63. package/dist/blitter/copy.js.map +1 -1
  64. package/dist/blitter/gaussianblur.js +23 -23
  65. package/dist/blitter/gaussianblur.js.map +1 -1
  66. package/dist/camera/base.js +141 -34
  67. package/dist/camera/base.js.map +1 -1
  68. package/dist/camera/camera.js +653 -149
  69. package/dist/camera/camera.js.map +1 -1
  70. package/dist/camera/fps.js +2 -10
  71. package/dist/camera/fps.js.map +1 -1
  72. package/dist/camera/orbit.js +132 -59
  73. package/dist/camera/orbit.js.map +1 -1
  74. package/dist/camera/orthocamera.js +37 -12
  75. package/dist/camera/orthocamera.js.map +1 -1
  76. package/dist/camera/perspectivecamera.js +37 -20
  77. package/dist/camera/perspectivecamera.js.map +1 -1
  78. package/dist/index.d.ts +18268 -6982
  79. package/dist/index.js +49 -16
  80. package/dist/index.js.map +1 -1
  81. package/dist/material/blinn.js +5 -0
  82. package/dist/material/blinn.js.map +1 -1
  83. package/dist/material/grassmaterial.js +6 -1
  84. package/dist/material/grassmaterial.js.map +1 -1
  85. package/dist/material/lambert.js +6 -1
  86. package/dist/material/lambert.js.map +1 -1
  87. package/dist/material/material.js +346 -73
  88. package/dist/material/material.js.map +1 -1
  89. package/dist/material/meshmaterial.js +498 -156
  90. package/dist/material/meshmaterial.js.map +1 -1
  91. package/dist/material/mixins/albedocolor.js +5 -1
  92. package/dist/material/mixins/albedocolor.js.map +1 -1
  93. package/dist/material/mixins/foliage.js +3 -3
  94. package/dist/material/mixins/foliage.js.map +1 -1
  95. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  96. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  97. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  98. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  99. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
  100. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  101. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  102. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  103. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  104. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  105. package/dist/material/mixins/lit.js +16 -4
  106. package/dist/material/mixins/lit.js.map +1 -1
  107. package/dist/material/mixins/pbr/brdf.js +134 -0
  108. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  109. package/dist/material/mixins/pbr/common.js +68 -85
  110. package/dist/material/mixins/pbr/common.js.map +1 -1
  111. package/dist/material/mixins/texture.js +98 -83
  112. package/dist/material/mixins/texture.js.map +1 -1
  113. package/dist/material/mixins/vertexcolor.js +6 -2
  114. package/dist/material/mixins/vertexcolor.js.map +1 -1
  115. package/dist/material/particle.js +272 -0
  116. package/dist/material/particle.js.map +1 -0
  117. package/dist/material/pbrblueprint.js +186 -0
  118. package/dist/material/pbrblueprint.js.map +1 -0
  119. package/dist/material/pbrmr.js +10 -0
  120. package/dist/material/pbrmr.js.map +1 -1
  121. package/dist/material/pbrsg.js +10 -0
  122. package/dist/material/pbrsg.js.map +1 -1
  123. package/dist/material/shader/helper.js +521 -287
  124. package/dist/material/shader/helper.js.map +1 -1
  125. package/dist/material/terrain-cm.js +607 -0
  126. package/dist/material/terrain-cm.js.map +1 -0
  127. package/dist/material/terrainmaterial.js +59 -54
  128. package/dist/material/terrainmaterial.js.map +1 -1
  129. package/dist/material/unlit.js +5 -0
  130. package/dist/material/unlit.js.map +1 -1
  131. package/dist/material/water.js +415 -0
  132. package/dist/material/water.js.map +1 -0
  133. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  134. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  135. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  136. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  137. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  138. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  139. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  140. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  141. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  142. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  143. package/dist/posteffect/bloom.js +39 -54
  144. package/dist/posteffect/bloom.js.map +1 -1
  145. package/dist/posteffect/compositor.js +95 -128
  146. package/dist/posteffect/compositor.js.map +1 -1
  147. package/dist/posteffect/fxaa.js +10 -18
  148. package/dist/posteffect/fxaa.js.map +1 -1
  149. package/dist/posteffect/grayscale.js +9 -17
  150. package/dist/posteffect/grayscale.js.map +1 -1
  151. package/dist/posteffect/motionblur.js +105 -0
  152. package/dist/posteffect/motionblur.js.map +1 -0
  153. package/dist/posteffect/posteffect.js +66 -35
  154. package/dist/posteffect/posteffect.js.map +1 -1
  155. package/dist/posteffect/sao.js +13 -21
  156. package/dist/posteffect/sao.js.map +1 -1
  157. package/dist/posteffect/ssr.js +60 -100
  158. package/dist/posteffect/ssr.js.map +1 -1
  159. package/dist/posteffect/taa.js +175 -0
  160. package/dist/posteffect/taa.js.map +1 -0
  161. package/dist/posteffect/tonemap.js +12 -20
  162. package/dist/posteffect/tonemap.js.map +1 -1
  163. package/dist/render/abuffer_oit.js +30 -19
  164. package/dist/render/abuffer_oit.js.map +1 -1
  165. package/dist/render/clipmap.js +429 -101
  166. package/dist/render/clipmap.js.map +1 -1
  167. package/dist/render/cluster_light.js +7 -5
  168. package/dist/render/cluster_light.js.map +1 -1
  169. package/dist/render/cull_visitor.js +43 -3
  170. package/dist/render/cull_visitor.js.map +1 -1
  171. package/dist/render/depthpass.js +14 -5
  172. package/dist/render/depthpass.js.map +1 -1
  173. package/dist/render/drawable_mixin.js +113 -40
  174. package/dist/render/drawable_mixin.js.map +1 -1
  175. package/dist/render/envlight.js +86 -141
  176. package/dist/render/envlight.js.map +1 -1
  177. package/dist/render/fbm_wavegenerator.js +234 -0
  178. package/dist/render/fbm_wavegenerator.js.map +1 -0
  179. package/dist/render/fft_wavegenerator.js +64 -50
  180. package/dist/render/fft_wavegenerator.js.map +1 -1
  181. package/dist/render/fullscreenquad.js +2 -2
  182. package/dist/render/fullscreenquad.js.map +1 -1
  183. package/dist/render/gerstner_wavegenerator.js +98 -48
  184. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  185. package/dist/render/globalbindgroup_allocator.js +4 -2
  186. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  187. package/dist/render/hzb.js +6 -3
  188. package/dist/render/hzb.js.map +1 -1
  189. package/dist/render/lightpass.js +19 -18
  190. package/dist/render/lightpass.js.map +1 -1
  191. package/dist/render/objectcolorpass.js +4 -4
  192. package/dist/render/objectcolorpass.js.map +1 -1
  193. package/dist/render/primitive.js +213 -104
  194. package/dist/render/primitive.js.map +1 -1
  195. package/dist/render/render_queue.js +40 -20
  196. package/dist/render/render_queue.js.map +1 -1
  197. package/dist/render/renderbundle_wrapper.js +65 -15
  198. package/dist/render/renderbundle_wrapper.js.map +1 -1
  199. package/dist/render/renderer.js +326 -185
  200. package/dist/render/renderer.js.map +1 -1
  201. package/dist/render/renderpass.js +20 -36
  202. package/dist/render/renderpass.js.map +1 -1
  203. package/dist/render/shadowmap_pass.js +3 -3
  204. package/dist/render/shadowmap_pass.js.map +1 -1
  205. package/dist/render/sky.js +864 -541
  206. package/dist/render/sky.js.map +1 -1
  207. package/dist/render/weightedblended_oit.js +13 -15
  208. package/dist/render/weightedblended_oit.js.map +1 -1
  209. package/dist/scene/batchgroup.js +18 -5
  210. package/dist/scene/batchgroup.js.map +1 -1
  211. package/dist/scene/environment.js +78 -48
  212. package/dist/scene/environment.js.map +1 -1
  213. package/dist/scene/graph_node.js +2 -3
  214. package/dist/scene/graph_node.js.map +1 -1
  215. package/dist/scene/light.js +28 -89
  216. package/dist/scene/light.js.map +1 -1
  217. package/dist/scene/mesh.js +218 -87
  218. package/dist/scene/mesh.js.map +1 -1
  219. package/dist/scene/octree.js +371 -162
  220. package/dist/scene/octree.js.map +1 -1
  221. package/dist/scene/particlesys.js +684 -0
  222. package/dist/scene/particlesys.js.map +1 -0
  223. package/dist/scene/raycast_visitor.js +34 -5
  224. package/dist/scene/raycast_visitor.js.map +1 -1
  225. package/dist/scene/scene.js +309 -85
  226. package/dist/scene/scene.js.map +1 -1
  227. package/dist/scene/scene_node.js +675 -102
  228. package/dist/scene/scene_node.js.map +1 -1
  229. package/dist/scene/terrain/grass.js +48 -49
  230. package/dist/scene/terrain/grass.js.map +1 -1
  231. package/dist/scene/terrain/heightfield.js +46 -44
  232. package/dist/scene/terrain/heightfield.js.map +1 -1
  233. package/dist/scene/terrain/patch.js +20 -29
  234. package/dist/scene/terrain/patch.js.map +1 -1
  235. package/dist/scene/terrain/quadtree.js +58 -27
  236. package/dist/scene/terrain/quadtree.js.map +1 -1
  237. package/dist/scene/terrain/terrain.js +31 -45
  238. package/dist/scene/terrain/terrain.js.map +1 -1
  239. package/dist/scene/terrain-cm/grass.js +603 -0
  240. package/dist/scene/terrain-cm/grass.js.map +1 -0
  241. package/dist/scene/terrain-cm/grassmaterial.js +160 -0
  242. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  243. package/dist/scene/terrain-cm/terrain-cm.js +533 -0
  244. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  245. package/dist/scene/water.js +378 -0
  246. package/dist/scene/water.js.map +1 -0
  247. package/dist/shaders/atmosphere.js +957 -0
  248. package/dist/shaders/atmosphere.js.map +1 -0
  249. package/dist/shaders/fog.js +116 -0
  250. package/dist/shaders/fog.js.map +1 -0
  251. package/dist/shaders/misc.js.map +1 -1
  252. package/dist/shaders/noise.js +217 -8
  253. package/dist/shaders/noise.js.map +1 -1
  254. package/dist/shaders/pbr.js.map +1 -1
  255. package/dist/shaders/shadow.js +8 -8
  256. package/dist/shaders/shadow.js.map +1 -1
  257. package/dist/shaders/ssr.js +87 -39
  258. package/dist/shaders/ssr.js.map +1 -1
  259. package/dist/shaders/temporal.js +216 -0
  260. package/dist/shaders/temporal.js.map +1 -0
  261. package/dist/shaders/water.js +42 -20
  262. package/dist/shaders/water.js.map +1 -1
  263. package/dist/shadow/esm.js +31 -13
  264. package/dist/shadow/esm.js.map +1 -1
  265. package/dist/shadow/pcf_opt.js +12 -13
  266. package/dist/shadow/pcf_opt.js.map +1 -1
  267. package/dist/shadow/pcf_pd.js +12 -13
  268. package/dist/shadow/pcf_pd.js.map +1 -1
  269. package/dist/shadow/shader.js +38 -0
  270. package/dist/shadow/shader.js.map +1 -0
  271. package/dist/shadow/shadow_impl.js.map +1 -1
  272. package/dist/shadow/shadowmapper.js +67 -26
  273. package/dist/shadow/shadowmapper.js.map +1 -1
  274. package/dist/shadow/ssm.js +15 -16
  275. package/dist/shadow/ssm.js.map +1 -1
  276. package/dist/shadow/vsm.js +33 -16
  277. package/dist/shadow/vsm.js.map +1 -1
  278. package/dist/shapes/box.js +181 -83
  279. package/dist/shapes/box.js.map +1 -1
  280. package/dist/shapes/cylinder.js +101 -43
  281. package/dist/shapes/cylinder.js.map +1 -1
  282. package/dist/shapes/plane.js +70 -29
  283. package/dist/shapes/plane.js.map +1 -1
  284. package/dist/shapes/shape.js +120 -17
  285. package/dist/shapes/shape.js.map +1 -1
  286. package/dist/shapes/sphere.js +78 -44
  287. package/dist/shapes/sphere.js.map +1 -1
  288. package/dist/shapes/tetrahedron.js +256 -0
  289. package/dist/shapes/tetrahedron.js.map +1 -0
  290. package/dist/shapes/torus.js +76 -55
  291. package/dist/shapes/torus.js.map +1 -1
  292. package/dist/src/animation/animation.js +127 -0
  293. package/dist/src/animation/animation.js.map +1 -0
  294. package/dist/src/animation/animationset.js +255 -0
  295. package/dist/src/animation/animationset.js.map +1 -0
  296. package/dist/src/animation/animationtrack.js +34 -0
  297. package/dist/src/animation/animationtrack.js.map +1 -0
  298. package/dist/src/animation/eulerrotationtrack.js +52 -0
  299. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  300. package/dist/src/animation/morphtarget.js +93 -0
  301. package/dist/src/animation/morphtarget.js.map +1 -0
  302. package/dist/src/animation/morphtrack.js +70 -0
  303. package/dist/src/animation/morphtrack.js.map +1 -0
  304. package/dist/src/animation/proptrack.js +161 -0
  305. package/dist/src/animation/proptrack.js.map +1 -0
  306. package/dist/src/animation/rotationtrack.js +51 -0
  307. package/dist/src/animation/rotationtrack.js.map +1 -0
  308. package/dist/src/animation/scaletrack.js +50 -0
  309. package/dist/src/animation/scaletrack.js.map +1 -0
  310. package/dist/src/animation/skeleton.js +204 -0
  311. package/dist/src/animation/skeleton.js.map +1 -0
  312. package/dist/src/animation/translationtrack.js +50 -0
  313. package/dist/src/animation/translationtrack.js.map +1 -0
  314. package/dist/{app.js → src/app/app.js} +18 -40
  315. package/dist/src/app/app.js.map +1 -0
  316. package/dist/{input → src/app}/inputmgr.js +41 -16
  317. package/dist/src/app/inputmgr.js.map +1 -0
  318. package/dist/src/asset/assetmanager.js +404 -0
  319. package/dist/src/asset/assetmanager.js.map +1 -0
  320. package/dist/src/asset/builtin.js +337 -0
  321. package/dist/src/asset/builtin.js.map +1 -0
  322. package/dist/src/asset/loaders/dds/dds.js +470 -0
  323. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  324. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  325. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  326. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  327. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  328. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  329. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  330. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  331. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  332. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  333. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  334. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  335. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  336. package/dist/src/asset/loaders/loader.js +45 -0
  337. package/dist/src/asset/loaders/loader.js.map +1 -0
  338. package/dist/src/asset/model.js +414 -0
  339. package/dist/src/asset/model.js.map +1 -0
  340. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  341. package/dist/src/blitter/bilateralblur.js.map +1 -0
  342. package/dist/src/blitter/blitter.js +390 -0
  343. package/dist/src/blitter/blitter.js.map +1 -0
  344. package/dist/src/blitter/box.js +118 -0
  345. package/dist/src/blitter/box.js.map +1 -0
  346. package/dist/src/blitter/copy.js +22 -0
  347. package/dist/src/blitter/copy.js.map +1 -0
  348. package/dist/src/blitter/gaussianblur.js +228 -0
  349. package/dist/src/blitter/gaussianblur.js.map +1 -0
  350. package/dist/src/camera/base.js +92 -0
  351. package/dist/src/camera/base.js.map +1 -0
  352. package/dist/src/camera/camera.js +1005 -0
  353. package/dist/src/camera/camera.js.map +1 -0
  354. package/dist/src/camera/fps.js +238 -0
  355. package/dist/src/camera/fps.js.map +1 -0
  356. package/dist/src/camera/orbit.js +245 -0
  357. package/dist/src/camera/orbit.js.map +1 -0
  358. package/dist/src/camera/orthocamera.js +167 -0
  359. package/dist/src/camera/orthocamera.js.map +1 -0
  360. package/dist/src/camera/perspectivecamera.js +141 -0
  361. package/dist/src/camera/perspectivecamera.js.map +1 -0
  362. package/dist/src/index.js +120 -0
  363. package/dist/src/index.js.map +1 -0
  364. package/dist/src/material/blinn.js +81 -0
  365. package/dist/src/material/blinn.js.map +1 -0
  366. package/dist/src/material/grassmaterial.js +113 -0
  367. package/dist/src/material/grassmaterial.js.map +1 -0
  368. package/dist/src/material/lambert.js +92 -0
  369. package/dist/src/material/lambert.js.map +1 -0
  370. package/dist/src/material/material.js +301 -0
  371. package/dist/src/material/material.js.map +1 -0
  372. package/dist/src/material/meshmaterial.js +704 -0
  373. package/dist/src/material/meshmaterial.js.map +1 -0
  374. package/dist/src/material/mixins/albedocolor.js +76 -0
  375. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  376. package/dist/src/material/mixins/foliage.js +47 -0
  377. package/dist/src/material/mixins/foliage.js.map +1 -0
  378. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  379. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  380. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  381. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  382. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  383. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  384. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  385. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  386. package/dist/src/material/mixins/lit.js +476 -0
  387. package/dist/src/material/mixins/lit.js.map +1 -0
  388. package/dist/src/material/mixins/pbr/common.js +918 -0
  389. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  390. package/dist/src/material/mixins/texture.js +172 -0
  391. package/dist/src/material/mixins/texture.js.map +1 -0
  392. package/dist/src/material/mixins/vertexcolor.js +56 -0
  393. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  394. package/dist/src/material/particle.js +178 -0
  395. package/dist/src/material/particle.js.map +1 -0
  396. package/dist/src/material/pbrmr.js +97 -0
  397. package/dist/src/material/pbrmr.js.map +1 -0
  398. package/dist/src/material/pbrsg.js +97 -0
  399. package/dist/src/material/pbrsg.js.map +1 -0
  400. package/dist/src/material/shader/helper.js +1209 -0
  401. package/dist/src/material/shader/helper.js.map +1 -0
  402. package/dist/src/material/terrain-cm.js +606 -0
  403. package/dist/src/material/terrain-cm.js.map +1 -0
  404. package/dist/src/material/terrainmaterial.js +375 -0
  405. package/dist/src/material/terrainmaterial.js.map +1 -0
  406. package/dist/src/material/unlit.js +41 -0
  407. package/dist/src/material/unlit.js.map +1 -0
  408. package/dist/src/material/water.js +417 -0
  409. package/dist/src/material/water.js.map +1 -0
  410. package/dist/src/posteffect/bloom.js +361 -0
  411. package/dist/src/posteffect/bloom.js.map +1 -0
  412. package/dist/src/posteffect/compositor.js +226 -0
  413. package/dist/src/posteffect/compositor.js.map +1 -0
  414. package/dist/src/posteffect/fxaa.js +273 -0
  415. package/dist/src/posteffect/fxaa.js.map +1 -0
  416. package/dist/src/posteffect/grayscale.js +69 -0
  417. package/dist/src/posteffect/grayscale.js.map +1 -0
  418. package/dist/src/posteffect/motionblur.js +96 -0
  419. package/dist/src/posteffect/motionblur.js.map +1 -0
  420. package/dist/src/posteffect/posteffect.js +126 -0
  421. package/dist/src/posteffect/posteffect.js.map +1 -0
  422. package/dist/src/posteffect/sao.js +324 -0
  423. package/dist/src/posteffect/sao.js.map +1 -0
  424. package/dist/src/posteffect/ssr.js +489 -0
  425. package/dist/src/posteffect/ssr.js.map +1 -0
  426. package/dist/src/posteffect/taa.js +172 -0
  427. package/dist/src/posteffect/taa.js.map +1 -0
  428. package/dist/src/posteffect/tonemap.js +94 -0
  429. package/dist/src/posteffect/tonemap.js.map +1 -0
  430. package/dist/src/render/abuffer_oit.js +361 -0
  431. package/dist/src/render/abuffer_oit.js.map +1 -0
  432. package/dist/src/render/clipmap.js +851 -0
  433. package/dist/src/render/clipmap.js.map +1 -0
  434. package/dist/src/render/cluster_light.js +333 -0
  435. package/dist/src/render/cluster_light.js.map +1 -0
  436. package/dist/src/render/cull_visitor.js +187 -0
  437. package/dist/src/render/cull_visitor.js.map +1 -0
  438. package/dist/src/render/depthpass.js +68 -0
  439. package/dist/src/render/depthpass.js.map +1 -0
  440. package/dist/src/render/drawable_mixin.js +227 -0
  441. package/dist/src/render/drawable_mixin.js.map +1 -0
  442. package/dist/src/render/envlight.js +463 -0
  443. package/dist/src/render/envlight.js.map +1 -0
  444. package/dist/src/render/fbm_wavegenerator.js +251 -0
  445. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  446. package/dist/src/render/fft_wavegenerator.js +1006 -0
  447. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  448. package/dist/src/render/fullscreenquad.js +38 -0
  449. package/dist/src/render/fullscreenquad.js.map +1 -0
  450. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  451. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  452. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  453. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  454. package/dist/src/render/hzb.js +273 -0
  455. package/dist/src/render/hzb.js.map +1 -0
  456. package/dist/src/render/lightpass.js +172 -0
  457. package/dist/src/render/lightpass.js.map +1 -0
  458. package/dist/src/render/objectcolorpass.js +51 -0
  459. package/dist/src/render/objectcolorpass.js.map +1 -0
  460. package/dist/src/render/primitive.js +364 -0
  461. package/dist/src/render/primitive.js.map +1 -0
  462. package/dist/src/render/render_queue.js +467 -0
  463. package/dist/src/render/render_queue.js.map +1 -0
  464. package/dist/src/render/renderbundle_wrapper.js +152 -0
  465. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  466. package/dist/src/render/renderer.js +455 -0
  467. package/dist/src/render/renderer.js.map +1 -0
  468. package/dist/src/render/renderpass.js +200 -0
  469. package/dist/src/render/renderpass.js.map +1 -0
  470. package/dist/src/render/shadowmap_pass.js +56 -0
  471. package/dist/src/render/shadowmap_pass.js.map +1 -0
  472. package/dist/src/render/sky.js +1103 -0
  473. package/dist/src/render/sky.js.map +1 -0
  474. package/dist/src/render/weightedblended_oit.js +168 -0
  475. package/dist/src/render/weightedblended_oit.js.map +1 -0
  476. package/dist/src/scene/batchgroup.js +162 -0
  477. package/dist/src/scene/batchgroup.js.map +1 -0
  478. package/dist/src/scene/environment.js +209 -0
  479. package/dist/src/scene/environment.js.map +1 -0
  480. package/dist/src/scene/graph_node.js +72 -0
  481. package/dist/src/scene/graph_node.js.map +1 -0
  482. package/dist/src/scene/light.js +416 -0
  483. package/dist/src/scene/light.js.map +1 -0
  484. package/dist/src/scene/mesh.js +341 -0
  485. package/dist/src/scene/mesh.js.map +1 -0
  486. package/dist/src/scene/octree.js +649 -0
  487. package/dist/src/scene/octree.js.map +1 -0
  488. package/dist/src/scene/particlesys.js +738 -0
  489. package/dist/src/scene/particlesys.js.map +1 -0
  490. package/dist/src/scene/raycast_visitor.js +103 -0
  491. package/dist/src/scene/raycast_visitor.js.map +1 -0
  492. package/dist/src/scene/scene.js +284 -0
  493. package/dist/src/scene/scene.js.map +1 -0
  494. package/dist/src/scene/scene_node.js +732 -0
  495. package/dist/src/scene/scene_node.js.map +1 -0
  496. package/dist/src/scene/terrain/grass.js +278 -0
  497. package/dist/src/scene/terrain/grass.js.map +1 -0
  498. package/dist/src/scene/terrain/heightfield.js +475 -0
  499. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  500. package/dist/src/scene/terrain/patch.js +530 -0
  501. package/dist/src/scene/terrain/patch.js.map +1 -0
  502. package/dist/src/scene/terrain/quadtree.js +461 -0
  503. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  504. package/dist/src/scene/terrain/terrain.js +246 -0
  505. package/dist/src/scene/terrain/terrain.js.map +1 -0
  506. package/dist/src/scene/terrain-cm/grass.js +594 -0
  507. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  508. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  509. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  510. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  511. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  512. package/dist/src/scene/water.js +374 -0
  513. package/dist/src/scene/water.js.map +1 -0
  514. package/dist/src/shaders/atmosphere.js +957 -0
  515. package/dist/src/shaders/atmosphere.js.map +1 -0
  516. package/dist/src/shaders/fog.js +112 -0
  517. package/dist/src/shaders/fog.js.map +1 -0
  518. package/dist/src/shaders/misc.js +266 -0
  519. package/dist/src/shaders/misc.js.map +1 -0
  520. package/dist/src/shaders/noise.js +222 -0
  521. package/dist/src/shaders/noise.js.map +1 -0
  522. package/dist/src/shaders/pbr.js +51 -0
  523. package/dist/src/shaders/pbr.js.map +1 -0
  524. package/dist/src/shaders/shadow.js +636 -0
  525. package/dist/src/shaders/shadow.js.map +1 -0
  526. package/dist/src/shaders/ssr.js +490 -0
  527. package/dist/src/shaders/ssr.js.map +1 -0
  528. package/dist/src/shaders/temporal.js +215 -0
  529. package/dist/src/shaders/temporal.js.map +1 -0
  530. package/dist/src/shaders/water.js +756 -0
  531. package/dist/src/shaders/water.js.map +1 -0
  532. package/dist/src/shadow/esm.js +237 -0
  533. package/dist/src/shadow/esm.js.map +1 -0
  534. package/dist/src/shadow/pcf_opt.js +181 -0
  535. package/dist/src/shadow/pcf_opt.js.map +1 -0
  536. package/dist/src/shadow/pcf_pd.js +189 -0
  537. package/dist/src/shadow/pcf_pd.js.map +1 -0
  538. package/dist/src/shadow/shader.js +37 -0
  539. package/dist/src/shadow/shader.js.map +1 -0
  540. package/dist/src/shadow/shadow_impl.js +15 -0
  541. package/dist/src/shadow/shadow_impl.js.map +1 -0
  542. package/dist/src/shadow/shadowmapper.js +790 -0
  543. package/dist/src/shadow/shadowmapper.js.map +1 -0
  544. package/dist/src/shadow/ssm.js +159 -0
  545. package/dist/src/shadow/ssm.js.map +1 -0
  546. package/dist/src/shadow/vsm.js +297 -0
  547. package/dist/src/shadow/vsm.js.map +1 -0
  548. package/dist/src/shapes/box.js +386 -0
  549. package/dist/src/shapes/box.js.map +1 -0
  550. package/dist/src/shapes/cylinder.js +125 -0
  551. package/dist/src/shapes/cylinder.js.map +1 -0
  552. package/dist/src/shapes/plane.js +88 -0
  553. package/dist/src/shapes/plane.js.map +1 -0
  554. package/dist/src/shapes/shape.js +87 -0
  555. package/dist/src/shapes/shape.js.map +1 -0
  556. package/dist/src/shapes/sphere.js +114 -0
  557. package/dist/src/shapes/sphere.js.map +1 -0
  558. package/dist/src/shapes/tetrahedron.js +188 -0
  559. package/dist/src/shapes/tetrahedron.js.map +1 -0
  560. package/dist/src/shapes/torus.js +111 -0
  561. package/dist/src/shapes/torus.js.map +1 -0
  562. package/dist/src/utility/aabbtree.js +400 -0
  563. package/dist/src/utility/aabbtree.js.map +1 -0
  564. package/dist/src/utility/bounding_volume.js +29 -0
  565. package/dist/src/utility/bounding_volume.js.map +1 -0
  566. package/dist/src/utility/debug.js +28 -0
  567. package/dist/src/utility/debug.js.map +1 -0
  568. package/dist/src/utility/draco/decoder.js +116 -0
  569. package/dist/src/utility/draco/decoder.js.map +1 -0
  570. package/dist/src/utility/misc.js +105 -0
  571. package/dist/src/utility/misc.js.map +1 -0
  572. package/dist/src/utility/panorama.js +163 -0
  573. package/dist/src/utility/panorama.js.map +1 -0
  574. package/dist/src/utility/pmrem.js +354 -0
  575. package/dist/src/utility/pmrem.js.map +1 -0
  576. package/dist/src/utility/rendermipmap.js +115 -0
  577. package/dist/src/utility/rendermipmap.js.map +1 -0
  578. package/dist/src/utility/serialization/json.js +402 -0
  579. package/dist/src/utility/serialization/json.js.map +1 -0
  580. package/dist/src/utility/serialization/manager.js +623 -0
  581. package/dist/src/utility/serialization/manager.js.map +1 -0
  582. package/dist/src/utility/serialization/scene/animation.js +248 -0
  583. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  584. package/dist/src/utility/serialization/scene/batch.js +59 -0
  585. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  586. package/dist/src/utility/serialization/scene/camera.js +790 -0
  587. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  588. package/dist/src/utility/serialization/scene/common.js +222 -0
  589. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  590. package/dist/src/utility/serialization/scene/light.js +575 -0
  591. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  592. package/dist/src/utility/serialization/scene/material.js +1111 -0
  593. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  594. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  595. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  596. package/dist/src/utility/serialization/scene/misc.js +39 -0
  597. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  598. package/dist/src/utility/serialization/scene/node.js +451 -0
  599. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  600. package/dist/src/utility/serialization/scene/particle.js +425 -0
  601. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  602. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  603. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  604. package/dist/src/utility/serialization/scene/scene.js +704 -0
  605. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  606. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  607. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  608. package/dist/src/utility/serialization/scene/water.js +465 -0
  609. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  610. package/dist/src/utility/shprojector.js +297 -0
  611. package/dist/src/utility/shprojector.js.map +1 -0
  612. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  613. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  614. package/dist/src/utility/textures/gradientnoise.js +62 -0
  615. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  616. package/dist/src/utility/textures/randomnoise.js +41 -0
  617. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  618. package/dist/src/values.js +162 -0
  619. package/dist/src/values.js.map +1 -0
  620. package/dist/utility/aabbtree.js +15 -5
  621. package/dist/utility/aabbtree.js.map +1 -1
  622. package/dist/utility/blueprint/common/constants.js +851 -0
  623. package/dist/utility/blueprint/common/constants.js.map +1 -0
  624. package/dist/utility/blueprint/common/math.js +2045 -0
  625. package/dist/utility/blueprint/common/math.js.map +1 -0
  626. package/dist/utility/blueprint/common.js +7 -0
  627. package/dist/utility/blueprint/common.js.map +1 -0
  628. package/dist/utility/blueprint/material/common.js +7 -0
  629. package/dist/utility/blueprint/material/common.js.map +1 -0
  630. package/dist/utility/blueprint/material/func.js +521 -0
  631. package/dist/utility/blueprint/material/func.js.map +1 -0
  632. package/dist/utility/blueprint/material/inputs.js +1659 -0
  633. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  634. package/dist/utility/blueprint/material/ir.js +1311 -0
  635. package/dist/utility/blueprint/material/ir.js.map +1 -0
  636. package/dist/utility/blueprint/material/pbr.js +362 -0
  637. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  638. package/dist/utility/blueprint/material/texture.js +1099 -0
  639. package/dist/utility/blueprint/material/texture.js.map +1 -0
  640. package/dist/utility/blueprint/node.js +187 -0
  641. package/dist/utility/blueprint/node.js.map +1 -0
  642. package/dist/utility/bounding_volume.js +0 -1
  643. package/dist/utility/bounding_volume.js.map +1 -1
  644. package/dist/utility/debug.js +26 -0
  645. package/dist/utility/debug.js.map +1 -0
  646. package/dist/utility/draco/decoder.js +1 -1
  647. package/dist/utility/draco/decoder.js.map +1 -1
  648. package/dist/utility/misc.js +18 -6
  649. package/dist/utility/misc.js.map +1 -1
  650. package/dist/utility/panorama.js +8 -6
  651. package/dist/utility/panorama.js.map +1 -1
  652. package/dist/utility/pmrem.js +30 -18
  653. package/dist/utility/pmrem.js.map +1 -1
  654. package/dist/utility/rendermipmap.js +116 -0
  655. package/dist/utility/rendermipmap.js.map +1 -0
  656. package/dist/utility/serialization/blueprint/constants.js +255 -0
  657. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  658. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  659. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  660. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  661. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  662. package/dist/utility/serialization/json.js +402 -0
  663. package/dist/utility/serialization/json.js.map +1 -0
  664. package/dist/utility/serialization/manager.js +1176 -0
  665. package/dist/utility/serialization/manager.js.map +1 -0
  666. package/dist/utility/serialization/scene/animation.js +699 -0
  667. package/dist/utility/serialization/scene/animation.js.map +1 -0
  668. package/dist/utility/serialization/scene/batch.js +53 -0
  669. package/dist/utility/serialization/scene/batch.js.map +1 -0
  670. package/dist/utility/serialization/scene/camera.js +808 -0
  671. package/dist/utility/serialization/scene/camera.js.map +1 -0
  672. package/dist/utility/serialization/scene/common.js +224 -0
  673. package/dist/utility/serialization/scene/common.js.map +1 -0
  674. package/dist/utility/serialization/scene/light.js +589 -0
  675. package/dist/utility/serialization/scene/light.js.map +1 -0
  676. package/dist/utility/serialization/scene/material.js +942 -0
  677. package/dist/utility/serialization/scene/material.js.map +1 -0
  678. package/dist/utility/serialization/scene/mesh.js +374 -0
  679. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  680. package/dist/utility/serialization/scene/misc.js +39 -0
  681. package/dist/utility/serialization/scene/misc.js.map +1 -0
  682. package/dist/utility/serialization/scene/node.js +391 -0
  683. package/dist/utility/serialization/scene/node.js.map +1 -0
  684. package/dist/utility/serialization/scene/particle.js +425 -0
  685. package/dist/utility/serialization/scene/particle.js.map +1 -0
  686. package/dist/utility/serialization/scene/primitive.js +582 -0
  687. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  688. package/dist/utility/serialization/scene/scene.js +763 -0
  689. package/dist/utility/serialization/scene/scene.js.map +1 -0
  690. package/dist/utility/serialization/scene/terrain.js +495 -0
  691. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  692. package/dist/utility/serialization/scene/water.js +465 -0
  693. package/dist/utility/serialization/scene/water.js.map +1 -0
  694. package/dist/utility/shprojector.js +313 -0
  695. package/dist/utility/shprojector.js.map +1 -0
  696. package/dist/utility/textures/ggxlut.js +4 -5
  697. package/dist/utility/textures/ggxlut.js.map +1 -1
  698. package/dist/utility/textures/gradientnoise.js +2 -1
  699. package/dist/utility/textures/gradientnoise.js.map +1 -1
  700. package/dist/utility/textures/randomnoise.js +1 -0
  701. package/dist/utility/textures/randomnoise.js.map +1 -1
  702. package/dist/values.js +91 -4
  703. package/dist/values.js.map +1 -1
  704. package/package.json +29 -15
  705. package/dist/app.js.map +0 -1
  706. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  707. package/dist/input/inputmgr.js.map +0 -1
  708. package/dist/material/mixins/ggxlut.js.map +0 -1
  709. package/dist/posteffect/water.js +0 -508
  710. package/dist/posteffect/water.js.map +0 -1
  711. package/dist/render/oit.js +0 -16
  712. package/dist/render/oit.js.map +0 -1
  713. package/dist/render/scatteringlut.js +0 -634
  714. package/dist/render/scatteringlut.js.map +0 -1
  715. package/dist/render/watermesh.js +0 -193
  716. package/dist/render/watermesh.js.map +0 -1
  717. package/dist/render/wavegenerator.js +0 -8
  718. package/dist/render/wavegenerator.js.map +0 -1
  719. package/dist/scene/xform.js +0 -247
  720. package/dist/scene/xform.js.map +0 -1
  721. package/dist/utility/shprojection.js +0 -442
  722. package/dist/utility/shprojection.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"renderer.js","sources":["../../src/render/renderer.ts"],"sourcesContent":["import { LightPass } from './lightpass';\r\nimport { ShadowMapPass } from './shadowmap_pass';\r\nimport { DepthPass } from './depthpass';\r\nimport { isPowerOf2, Matrix4x4, nextPowerOf2, Vector3, Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n ColorState,\r\n FrameBuffer,\r\n GPUProgram,\r\n Texture2D,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { CopyBlitter } from '../blitter';\r\nimport type { DrawContext } from './drawable';\r\nimport type { RenderQueue } from './render_queue';\r\nimport type { PunctualLight, Scene } from '../scene';\r\nimport type { PickResult } from '../camera';\r\nimport { Camera } from '../camera';\r\nimport { AbstractPostEffect, PostEffectLayer } from '../posteffect/posteffect';\r\nimport { ClusteredLight } from './cluster_light';\r\nimport { GlobalBindGroupAllocator } from './globalbindgroup_allocator';\r\nimport { ObjectColorPass } from './objectcolorpass';\r\nimport { buildHiZ } from './hzb';\r\nimport { MaterialVaryingFlags } from '../values';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport type { Primitive } from '.';\r\nimport { BoxShape } from '../shapes';\r\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * Forward render scheme\r\n * @internal\r\n */\r\nexport class SceneRenderer {\r\n /** @internal */\r\n private static _skyMotionVectorProgram: GPUProgram = null;\r\n /** @internal */\r\n private static _skyMotionVectorBindGroup: BindGroup = null;\r\n private static _box: Primitive = null;\r\n /** @internal */\r\n private static readonly _pickCamera = new Camera(null);\r\n /** @internal */\r\n private static readonly _scenePass = new LightPass();\r\n /** @internal */\r\n private static readonly _depthPass = new DepthPass();\r\n /** @internal */\r\n private static readonly _shadowMapPass = new ShadowMapPass();\r\n /** @internal */\r\n private static readonly _objectColorPass = new ObjectColorPass();\r\n /** @internal */\r\n private static _frontDepthColorState: ColorState = null;\r\n /** @internal */\r\n private static _backDepthColorState: ColorState = null;\r\n /** @internal */\r\n private static readonly _clusters: ClusteredLight[] = [];\r\n /** lighting render pass */\r\n static get sceneRenderPass(): LightPass {\r\n return this._scenePass;\r\n }\r\n /** depth render pass */\r\n static get depthRenderPass(): DepthPass {\r\n return this._depthPass;\r\n }\r\n /** shadow map render pass */\r\n static get shadowMapRenderPass(): ShadowMapPass {\r\n return this._shadowMapPass;\r\n }\r\n /** @internal */\r\n static getClusteredLight(): ClusteredLight {\r\n if (this._clusters.length > 0) {\r\n return this._clusters.pop();\r\n }\r\n return new ClusteredLight();\r\n }\r\n /** @internal */\r\n static freeClusteredLight(clusteredLight: ClusteredLight) {\r\n this._clusters.push(clusteredLight);\r\n }\r\n /**\r\n * Renders a scene by given camera\r\n * @param scene - The scene tondered\r\n * @param camera - The camera that will be used to render the scene\r\n * @param compositor - The compositor that will be used to apply postprocess effects\r\n */\r\n static renderScene(scene: Scene, camera: Camera): void {\r\n const device = getDevice();\r\n const colorFormat =\r\n camera.HDR && device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer ? 'rgba16f' : 'rgba8unorm';\r\n const depthFormat = device.getDeviceCaps().framebufferCaps.supportDepth32floatStencil8\r\n ? 'd32fs8'\r\n : 'd24s8';\r\n const globalBindGroupAllocator = GlobalBindGroupAllocator.get();\r\n scene.frameUpdate();\r\n scene.frameUpdatePerCamera(camera);\r\n if (camera && !device.isContextLost()) {\r\n const defaultViewport = !camera.viewport && !camera.scissor;\r\n const renderX = camera.viewport ? device.screenToDevice(camera.viewport[0]) : 0;\r\n const renderY = camera.viewport ? device.screenToDevice(camera.viewport[1]) : 0;\r\n const renderWidth = camera.viewport\r\n ? device.screenToDevice(camera.viewport[2])\r\n : device.getDrawingBufferWidth();\r\n const renderHeight = camera.viewport\r\n ? device.screenToDevice(camera.viewport[3])\r\n : device.getDrawingBufferHeight();\r\n if (renderWidth <= 0 || renderHeight <= 0) {\r\n camera.getPickResultResolveFunc()?.(null);\r\n return;\r\n }\r\n const tmpFramebuffer = defaultViewport\r\n ? null\r\n : device.pool.fetchTemporalFramebuffer(false, renderWidth, renderHeight, colorFormat, depthFormat);\r\n const originFramebuffer = device.getFramebuffer();\r\n if (tmpFramebuffer) {\r\n device.pushDeviceStates();\r\n device.setFramebuffer(tmpFramebuffer);\r\n }\r\n device.clearFrameBuffer(camera.clearColor, camera.clearDepth, camera.clearStencil);\r\n const SSR = camera.SSR && scene.env.light.envLight && scene.env.light.envLight.hasRadiance();\r\n const ctx: DrawContext = {\r\n device,\r\n scene,\r\n renderWidth,\r\n renderHeight,\r\n primaryCamera: camera,\r\n picking: false,\r\n oit: null,\r\n motionVectors: device.type !== 'webgl' && (camera.TAA || camera.motionBlur),\r\n HiZ: camera.HiZ && device.type !== 'webgl',\r\n HiZTexture: null,\r\n globalBindGroupAllocator,\r\n camera,\r\n compositor: camera.compositor,\r\n timestamp: device.frameInfo.frameTimestamp,\r\n queue: 0,\r\n lightBlending: false,\r\n renderPass: null,\r\n renderPassHash: null,\r\n fogFlags: 0,\r\n flip: false,\r\n depthFormat,\r\n colorFormat,\r\n drawEnvLight: false,\r\n env: null,\r\n materialFlags: 0,\r\n TAA: camera.TAA,\r\n SSR,\r\n SSRCalcThickness: SSR && camera.ssrCalcThickness,\r\n SSRRoughnessTexture: device.pool.fetchTemporalTexture2D(\r\n true,\r\n 'rgba8unorm',\r\n renderWidth,\r\n renderHeight\r\n ),\r\n SSRNormalTexture: device.pool.fetchTemporalTexture2D(true, 'rgba8unorm', renderWidth, renderHeight),\r\n finalFramebuffer: device.getFramebuffer(),\r\n intermediateFramebuffer: null\r\n };\r\n this._renderScene(ctx);\r\n if (tmpFramebuffer) {\r\n device.popDeviceStates();\r\n const oversizedViewport =\r\n renderX < 0 ||\r\n renderY < 0 ||\r\n renderX + renderWidth > device.getDrawingBufferWidth() ||\r\n renderY + renderHeight > device.getDrawingBufferHeight();\r\n const blitter = new CopyBlitter();\r\n if (oversizedViewport) {\r\n blitter.destRect = [renderX, renderY, renderWidth, renderHeight];\r\n } else {\r\n blitter.viewport = camera.viewport;\r\n }\r\n blitter.scissor = camera.scissor;\r\n blitter.srgbOut = !originFramebuffer;\r\n blitter.blit(\r\n tmpFramebuffer.getColorAttachments()[0],\r\n originFramebuffer ?? null,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n device.pool.releaseFrameBuffer(tmpFramebuffer);\r\n }\r\n }\r\n GlobalBindGroupAllocator.release(globalBindGroupAllocator);\r\n }\r\n private static renderSceneDepth(ctx: DrawContext, renderQueue: RenderQueue, depthFramebuffer: FrameBuffer) {\r\n const transmission = !!depthFramebuffer;\r\n if (!depthFramebuffer) {\r\n const format: TextureFormat =\r\n ctx.device.type === 'webgl'\r\n ? ctx.SSRCalcThickness\r\n ? 'rgba16f'\r\n : 'rgba8unorm'\r\n : ctx.SSRCalcThickness\r\n ? 'rg32f'\r\n : 'r32f';\r\n const mvFormat: TextureFormat = 'rgba16f';\r\n if (!ctx.finalFramebuffer) {\r\n depthFramebuffer = ctx.device.pool.fetchTemporalFramebuffer(\r\n true,\r\n ctx.renderWidth,\r\n ctx.renderHeight,\r\n ctx.motionVectors ? [format, mvFormat] : format,\r\n ctx.depthFormat,\r\n false\r\n );\r\n } else {\r\n const originDepth = ctx.finalFramebuffer?.getDepthAttachment();\r\n depthFramebuffer = originDepth?.isTexture2D()\r\n ? ctx.device.pool.fetchTemporalFramebuffer(\r\n true,\r\n originDepth.width,\r\n originDepth.height,\r\n ctx.motionVectors ? [format, mvFormat] : format,\r\n originDepth,\r\n false\r\n )\r\n : ctx.device.pool.fetchTemporalFramebuffer(\r\n true,\r\n ctx.renderWidth,\r\n ctx.renderHeight,\r\n ctx.motionVectors ? [format, mvFormat] : format,\r\n ctx.depthFormat,\r\n false\r\n );\r\n }\r\n }\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(depthFramebuffer);\r\n this._depthPass.encodeDepth = depthFramebuffer.getColorAttachments()[0].format === 'rgba8unorm';\r\n this._depthPass.clearColor = transmission\r\n ? null\r\n : this._depthPass.encodeDepth\r\n ? new Vector4(0, 0, 0, 1)\r\n : new Vector4(1, 1, 1, 1);\r\n this._depthPass.clearDepth = transmission ? null : 1;\r\n this._depthPass.clearStencil = null;\r\n this._depthPass.transmission = transmission;\r\n if (ctx.SSRCalcThickness && !transmission) {\r\n if (!this._backDepthColorState) {\r\n this._backDepthColorState = ctx.device.createColorState().setColorMask(false, true, false, false);\r\n }\r\n if (!this._frontDepthColorState) {\r\n this._frontDepthColorState = ctx.device.createColorState().setColorMask(true, false, false, false);\r\n }\r\n ctx.forceColorState = this._backDepthColorState;\r\n ctx.forceCullMode = 'front';\r\n this._depthPass.renderBackface = true;\r\n this._depthPass.transmission = false;\r\n this._depthPass.render(ctx, null, renderQueue);\r\n this._depthPass.clearColor = null;\r\n this._depthPass.renderBackface = false;\r\n ctx.forceColorState = this._frontDepthColorState;\r\n ctx.forceCullMode = null;\r\n }\r\n this._depthPass.render(ctx, null, renderQueue);\r\n ctx.forceColorState = null;\r\n ctx.device.popDeviceStates();\r\n\r\n if (!transmission) {\r\n ctx.motionVectorTexture = ctx.motionVectors\r\n ? (depthFramebuffer.getColorAttachments()[1] as Texture2D)\r\n : null;\r\n ctx.linearDepthTexture = depthFramebuffer.getColorAttachments()[0] as Texture2D;\r\n ctx.depthTexture = depthFramebuffer.getDepthAttachment() as Texture2D;\r\n if (ctx.motionVectorTexture) {\r\n this.renderSkyMotionVectors(ctx);\r\n }\r\n if (ctx.HiZ) {\r\n let w = isPowerOf2(ctx.linearDepthTexture.width)\r\n ? ctx.linearDepthTexture.width\r\n : nextPowerOf2(ctx.linearDepthTexture.width);\r\n let h = isPowerOf2(ctx.linearDepthTexture.height)\r\n ? ctx.linearDepthTexture.height\r\n : nextPowerOf2(ctx.linearDepthTexture.height);\r\n w = Math.max(1, w >> 1);\r\n h = Math.max(1, h >> 1);\r\n w = ctx.linearDepthTexture.width;\r\n h = ctx.linearDepthTexture.height;\r\n const HiZFrameBuffer = ctx.device.pool.fetchTemporalFramebuffer(\r\n true,\r\n w,\r\n h,\r\n ctx.linearDepthTexture.format,\r\n null,\r\n true\r\n );\r\n buildHiZ(ctx.depthTexture, HiZFrameBuffer);\r\n ctx.HiZTexture = HiZFrameBuffer.getColorAttachments()[0] as Texture2D;\r\n }\r\n }\r\n return depthFramebuffer;\r\n }\r\n /** @internal */\r\n protected static _renderScene(ctx: DrawContext): void {\r\n const device = ctx.device;\r\n\r\n // Cull scene\r\n const renderQueue = this._scenePass.cullScene(ctx, ctx.camera);\r\n\r\n // Update sky\r\n const sunLightColor = ctx.scene.env.sky.update(ctx);\r\n\r\n // Gather lights\r\n ctx.clusteredLight = this.getClusteredLight();\r\n ctx.clusteredLight.calculateLightIndex(ctx.camera, renderQueue);\r\n\r\n // Do GPU ray picking if required\r\n const pickResolveFunc = ctx.camera.getPickResultResolveFunc();\r\n if (pickResolveFunc) {\r\n this.renderObjectColors(ctx, pickResolveFunc, renderQueue);\r\n }\r\n\r\n // Render shadow maps\r\n this.renderShadowMaps(ctx, renderQueue.shadowedLights);\r\n\r\n // Render scene depth first\r\n const depthFramebuffer = this.renderSceneDepth(ctx, renderQueue, null);\r\n if (ctx.depthTexture === ctx.finalFramebuffer?.getDepthAttachment()) {\r\n ctx.intermediateFramebuffer = ctx.finalFramebuffer;\r\n } else {\r\n // TODO: fetch resizable framebuffer if ctx.defaultViewport is true\r\n ctx.intermediateFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n false,\r\n ctx.depthTexture.width,\r\n ctx.depthTexture.height,\r\n ctx.colorFormat,\r\n ctx.depthTexture\r\n );\r\n }\r\n if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {\r\n device.pushDeviceStates();\r\n device.setFramebuffer(ctx.intermediateFramebuffer);\r\n } else {\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n }\r\n this._scenePass.transmission = false; // transmission\r\n this._scenePass.clearDepth = ctx.depthTexture ? null : 1;\r\n this._scenePass.clearStencil = ctx.depthTexture ? null : 0;\r\n if (ctx.SSR && !renderQueue.needSceneColor()) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n }\r\n ctx.compositor?.begin(ctx);\r\n if (renderQueue.needSceneColor()) {\r\n const compositor = ctx.compositor;\r\n ctx.compositor = null;\r\n const sceneColorFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n true,\r\n ctx.depthTexture.width,\r\n ctx.depthTexture.height,\r\n ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS\r\n ? [\r\n ctx.colorFormat,\r\n device.getFramebuffer().getColorAttachments()[1],\r\n device.getFramebuffer().getColorAttachments()[2]\r\n ]\r\n : ctx.colorFormat,\r\n ctx.depthTexture,\r\n false\r\n );\r\n device.pushDeviceStates();\r\n device.setFramebuffer(sceneColorFramebuffer);\r\n this._scenePass.transmission = false;\r\n this._scenePass.render(ctx, null, renderQueue);\r\n device.popDeviceStates();\r\n ctx.sceneColorTexture = sceneColorFramebuffer.getColorAttachments()[0] as Texture2D;\r\n new CopyBlitter().blit(\r\n ctx.sceneColorTexture,\r\n device.getFramebuffer() ?? null,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._scenePass.transmission = true;\r\n this._scenePass.clearColor = null;\r\n this._scenePass.clearDepth = null;\r\n this._scenePass.clearStencil = null;\r\n ctx.compositor = compositor;\r\n }\r\n this._scenePass.render(ctx, null, renderQueue);\r\n if (renderQueue.needSceneColor()) {\r\n this.renderSceneDepth(ctx, renderQueue, depthFramebuffer);\r\n }\r\n ctx.compositor?.drawPostEffects(ctx, PostEffectLayer.end, ctx.linearDepthTexture);\r\n ctx.compositor?.end(ctx);\r\n renderQueue.dispose();\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n\r\n if (ctx.intermediateFramebuffer && ctx.intermediateFramebuffer !== ctx.finalFramebuffer) {\r\n const blitter = new CopyBlitter();\r\n blitter.srgbOut = !ctx.finalFramebuffer;\r\n const srcTex = ctx.intermediateFramebuffer.getColorAttachments()[0] as Texture2D;\r\n blitter.blit(srcTex, ctx.finalFramebuffer ?? null, fetchSampler('clamp_nearest_nomip'));\r\n device.popDeviceStates();\r\n device.pool.releaseFrameBuffer(ctx.intermediateFramebuffer);\r\n }\r\n //ShadowMapper.releaseTemporalResources(ctx);\r\n this.freeClusteredLight(ctx.clusteredLight);\r\n\r\n // Restore sun color\r\n if (sunLightColor) {\r\n ctx.sunLight.color = sunLightColor;\r\n }\r\n }\r\n private static _getSkyMotionVectorProgram(ctx: DrawContext): GPUProgram {\r\n if (!this._skyMotionVectorProgram) {\r\n this._skyMotionVectorProgram = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec3().attrib('position');\r\n this.VPMatrix = pb.mat4().uniform(0);\r\n this.prevVPMatrix = pb.mat4().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.prevCameraPos = pb.vec3().uniform(0);\r\n pb.main(function () {\r\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\r\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\r\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\r\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\r\n this.clipPos.z = this.clipPos.w;\r\n this.$builtins.position = this.clipPos;\r\n this.$outputs.currentPos = this.clipPos;\r\n this.$outputs.prevPos = this.prevClipPos;\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n this.$l.motionVector = pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\r\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\r\n ),\r\n 0.5\r\n );\r\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\r\n });\r\n }\r\n });\r\n this._skyMotionVectorProgram.name = '@TAA_SkyMotionVector';\r\n }\r\n return this._skyMotionVectorProgram;\r\n }\r\n private static _getBox(_ctx: DrawContext) {\r\n if (!this._box) {\r\n this._box = new BoxShape({\r\n size: 2,\r\n needNormal: false,\r\n needUV: false\r\n });\r\n }\r\n return this._box;\r\n }\r\n /** @internal */\r\n private static renderSkyMotionVectors(ctx: DrawContext) {\r\n if (!ctx.motionVectorTexture) {\r\n return;\r\n }\r\n const fb = ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n 0,\r\n 0,\r\n ctx.motionVectorTexture,\r\n ctx.depthTexture\r\n );\r\n const program = this._getSkyMotionVectorProgram(ctx);\r\n if (!this._skyMotionVectorBindGroup) {\r\n this._skyMotionVectorBindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n }\r\n const box = this._getBox(ctx);\r\n this._skyMotionVectorBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\r\n this._skyMotionVectorBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix);\r\n this._skyMotionVectorBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n this._skyMotionVectorBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition);\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, this._skyMotionVectorBindGroup);\r\n ctx.device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));\r\n ctx.device.setFramebuffer(fb);\r\n box.draw();\r\n ctx.device.popDeviceStates();\r\n ctx.device.pool.releaseFrameBuffer(fb);\r\n }\r\n /** @internal */\r\n private static renderShadowMaps(ctx: DrawContext, lights: PunctualLight[]) {\r\n ctx.renderPass = this._shadowMapPass;\r\n ctx.device.pushDeviceStates();\r\n for (const light of lights) {\r\n light.shadow.render(ctx, this._shadowMapPass);\r\n }\r\n ctx.device.popDeviceStates();\r\n }\r\n /** @internal */\r\n private static decodeNormalizedFloat(rgba: Uint8Array<ArrayBuffer>): number {\r\n const a = rgba[0] / 255;\r\n const b = rgba[1] / 255;\r\n const c = rgba[2] / 255;\r\n const d = rgba[3] / 255;\r\n return a / (256 * 256 * 256) + b / (256 * 256) + c / 256 + d;\r\n }\r\n /** @internal */\r\n private static renderObjectColors(\r\n ctx: DrawContext,\r\n pickResolveFunc: (result: PickResult) => void,\r\n renderQueue: RenderQueue\r\n ) {\r\n const camera = ctx.camera;\r\n const isWebGL1 = ctx.device.type === 'webgl';\r\n ctx.renderPass = this._objectColorPass;\r\n ctx.device.pushDeviceStates();\r\n const fb = ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n 1,\r\n 1,\r\n isWebGL1 ? ['rgba8unorm', 'rgba8unorm'] : ['rgba8unorm', 'rgba32f'],\r\n ctx.depthFormat,\r\n false\r\n );\r\n ctx.device.setViewport(camera.viewport);\r\n const vp = ctx.device.getViewport();\r\n const windowX = camera.getPickPosX() / vp.width;\r\n const windowY = (vp.height - camera.getPickPosY() - 1) / vp.height;\r\n const windowW = 1 / vp.width;\r\n const windowH = 1 / vp.height;\r\n camera.worldMatrix.decompose(\r\n this._pickCamera.scale,\r\n this._pickCamera.rotation,\r\n this._pickCamera.position\r\n );\r\n let left = camera.getProjectionMatrix().getLeftPlane();\r\n let right = camera.getProjectionMatrix().getRightPlane();\r\n let bottom = camera.getProjectionMatrix().getBottomPlane();\r\n let top = camera.getProjectionMatrix().getTopPlane();\r\n const near = camera.getProjectionMatrix().getNearPlane();\r\n const far = camera.getProjectionMatrix().getFarPlane();\r\n const width = right - left;\r\n const height = top - bottom;\r\n left += width * windowX;\r\n bottom += height * windowY;\r\n right = left + width * windowW;\r\n top = bottom + height * windowH;\r\n this._pickCamera.setProjectionMatrix(\r\n camera.isPerspective()\r\n ? Matrix4x4.frustum(left, right, bottom, top, near, far)\r\n : Matrix4x4.ortho(left, right, bottom, top, near, far)\r\n );\r\n const cameraPos = isWebGL1 ? new Vector3(this._pickCamera.position) : null;\r\n const ray = isWebGL1 ? camera.constructRay(camera.getPickPosX(), camera.getPickPosY()) : null;\r\n ctx.device.setFramebuffer(fb);\r\n this._objectColorPass.clearColor = Vector4.zero();\r\n this._objectColorPass.clearDepth = 1;\r\n const rq = this._objectColorPass.cullScene(ctx, this._pickCamera);\r\n ctx.camera = this._pickCamera;\r\n this._objectColorPass.render(ctx, null, rq);\r\n rq.dispose();\r\n ctx.camera = camera;\r\n ctx.device.popDeviceStates();\r\n const colorTex = fb.getColorAttachments()[0];\r\n const distanceTex = fb.getColorAttachments()[1];\r\n const colorPixels = new Uint8Array(4);\r\n const distancePixels = isWebGL1 ? new Uint8Array(4) : new Float32Array(4);\r\n const device = ctx.device;\r\n let fence: Promise<void[]>;\r\n if (ctx.device.type === 'webgl') {\r\n fence = Promise.all([\r\n ctx.device.runNextFrameAsync(() => colorTex.readPixels(0, 0, 1, 1, 0, 0, colorPixels)),\r\n ctx.device.runNextFrameAsync(() => distanceTex.readPixels(0, 0, 1, 1, 0, 0, distancePixels))\r\n ]);\r\n } else {\r\n fence = Promise.all([\r\n colorTex.readPixels(0, 0, 1, 1, 0, 0, colorPixels),\r\n distanceTex.readPixels(0, 0, 1, 1, 0, 0, distancePixels)\r\n ]);\r\n }\r\n fence\r\n .then(() => {\r\n const drawable = renderQueue.getDrawableByColor(colorPixels);\r\n let d = isWebGL1\r\n ? this.decodeNormalizedFloat(distancePixels as Uint8Array<ArrayBuffer>) * far\r\n : distancePixels[0];\r\n const intersectedPoint = new Vector3(distancePixels[0], distancePixels[1], distancePixels[2]);\r\n if (isWebGL1) {\r\n intersectedPoint.x = cameraPos.x + ray.direction.x * d;\r\n intersectedPoint.y = cameraPos.y + ray.direction.y * d;\r\n intersectedPoint.z = cameraPos.z + ray.direction.z * d;\r\n d = Vector3.distance(intersectedPoint, cameraPos);\r\n }\r\n pickResolveFunc(\r\n drawable\r\n ? {\r\n distance: d,\r\n intersectedPoint,\r\n drawable,\r\n target: drawable.getPickTarget()\r\n }\r\n : null\r\n );\r\n device.pool.releaseFrameBuffer(fb);\r\n })\r\n .catch((_err) => {\r\n camera.getPickResultResolveFunc()?.(null);\r\n device.pool.releaseFrameBuffer(fb);\r\n });\r\n }\r\n}\r\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","getDevice","colorFormat","HDR","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","clearFrameBuffer","clearColor","clearDepth","clearStencil","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","srgbOut","blit","getColorAttachments","fetchSampler","releaseFrameBuffer","release","renderSceneDepth","renderQueue","depthFramebuffer","transmission","format","mvFormat","originDepth","getDepthAttachment","isTexture2D","width","height","encodeDepth","Vector4","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","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","name","_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,15 +1,15 @@
1
- import { Vector4 } from '@zephyr3d/base';
1
+ import { Disposable, Vector4 } from '@zephyr3d/base';
2
2
  import { CullVisitor } from './cull_visitor.js';
3
- import { Application } from '../app.js';
4
3
  import { RenderQueue } from './render_queue.js';
5
4
  import { ShaderHelper } from '../material/shader/helper.js';
6
5
  import { RenderBundleWrapper } from './renderbundle_wrapper.js';
7
6
  import { MaterialVaryingFlags } from '../values.js';
7
+ import { getDevice } from '../app/api.js';
8
8
 
9
9
  /**
10
10
  * Base class for any kind of render passes
11
11
  * @public
12
- */ class RenderPass {
12
+ */ class RenderPass extends Disposable {
13
13
  /** @internal */ _type;
14
14
  /** @internal */ _globalBindGroups;
15
15
  /** @internal */ _clearColor;
@@ -19,6 +19,7 @@ import { MaterialVaryingFlags } from '../values.js';
19
19
  * Creates an instanceof RenderPass
20
20
  * @param type - Render pass type
21
21
  */ constructor(type){
22
+ super();
22
23
  this._type = type;
23
24
  this._clearColor = new Vector4(0, 0, 0, 1);
24
25
  this._clearDepth = 1;
@@ -77,11 +78,6 @@ import { MaterialVaryingFlags } from '../values.js';
77
78
  }
78
79
  return bindGroup;
79
80
  }
80
- /**
81
- * Disposes the render pass
82
- */ dispose() {
83
- this._globalBindGroups = {};
84
- }
85
81
  /** @internal */ getGlobalBindGroupHash(ctx) {
86
82
  return `${this.constructor.name}:${this._getGlobalBindGroupHash(ctx)}`;
87
83
  }
@@ -113,20 +109,12 @@ import { MaterialVaryingFlags } from '../values.js';
113
109
  } else {
114
110
  ctx.scene.rootNode.traverse(cullVisitor);
115
111
  }
116
- return renderQueue.end(cullCamera);
112
+ renderQueue.end(cullCamera);
113
+ ctx.sunLight = renderQueue.sunLight;
114
+ return renderQueue;
117
115
  }
118
116
  return null;
119
117
  }
120
- /** @internal */ drawItem(device, item, ctx, reverseWinding) {
121
- const reverse = reverseWinding !== item.drawable.getXForm().worldMatrixDet < 0;
122
- if (reverse) {
123
- device.reverseVertexWindingOrder(!device.isWindingOrderReversed());
124
- }
125
- item.drawable.draw(ctx);
126
- if (reverse) {
127
- device.reverseVertexWindingOrder(!device.isWindingOrderReversed());
128
- }
129
- }
130
118
  /** @internal */ internalDrawItemList(ctx, items, renderBundle, reverseWinding, hash) {
131
119
  let recording = false;
132
120
  if (renderBundle && ctx.primaryCamera.commandBufferReuse) {
@@ -140,14 +128,14 @@ import { MaterialVaryingFlags } from '../values.js';
140
128
  }
141
129
  for (const item of items){
142
130
  ctx.instanceData = item.instanceData;
143
- const reverse = reverseWinding !== item.drawable.getXForm().worldMatrixDet < 0;
131
+ const reverse = reverseWinding !== item.drawable.getNode().worldMatrixDet < 0;
144
132
  if (reverse) {
145
133
  ctx.device.reverseVertexWindingOrder(!ctx.device.isWindingOrderReversed());
146
134
  }
147
135
  if (recording) {
148
- RenderBundleWrapper.addDrawable(item.drawable, item.drawable.getMaterial(), renderBundle, hash);
136
+ RenderBundleWrapper.addDrawable(item.drawable, item.drawable.getMaterial()?.coreMaterial, item.drawable.getPrimitive(), renderBundle, hash);
149
137
  }
150
- item.drawable.draw(ctx);
138
+ item.drawable.draw(ctx, recording ? undefined : hash);
151
139
  if (reverse) {
152
140
  ctx.device.reverseVertexWindingOrder(!ctx.device.isWindingOrderReversed());
153
141
  }
@@ -193,24 +181,20 @@ import { MaterialVaryingFlags } from '../values.js';
193
181
  ctx.materialFlags &= ~(MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.MORPH_ANIMATION);
194
182
  itemList.materialList.forEach((mat)=>mat.apply(ctx));
195
183
  this.internalDrawItemList(ctx, itemList.instanceItemList, itemList.instanceRenderBundle, reverseWinding, hash);
196
- /*
197
- for (const item of itemList.instanceItemList) {
198
- ctx.instanceData = item.instanceData;
199
- const reverse = reverseWinding !== item.drawable.getXForm().worldMatrixDet < 0;
200
- if (reverse) {
201
- device.reverseVertexWindingOrder(!device.isWindingOrderReversed());
202
- }
203
- item.drawable.draw(ctx);
204
- if (reverse) {
205
- device.reverseVertexWindingOrder(!device.isWindingOrderReversed());
206
- }
207
- }
208
- */ }
184
+ }
209
185
  }
210
186
  ctx.renderQueue = null;
211
187
  }
188
+ /**
189
+ * Disposes the render pass
190
+ */ onDispose() {
191
+ super.onDispose();
192
+ this._globalBindGroups = {};
193
+ }
212
194
  /** @internal */ clearFramebuffer() {
213
- Application.instance.device.clearFrameBuffer(this._clearColor, this._clearDepth, this._clearStencil);
195
+ if (this._clearColor || this._clearDepth || this._clearStencil) {
196
+ getDevice().clearFrameBuffer(this._clearColor, this._clearDepth, this._clearStencil);
197
+ }
214
198
  }
215
199
  }
216
200
 
@@ -1 +1 @@
1
- {"version":3,"file":"renderpass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"renderpass.js","sources":["../../src/render/renderpass.ts"],"sourcesContent":["import { Disposable, Vector4 } from '@zephyr3d/base';\r\nimport { CullVisitor } from './cull_visitor';\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\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * Base class for any kind of render passes\r\n * @public\r\n */\r\nexport abstract class RenderPass extends Disposable {\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 super();\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 /** @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 /**\r\n * Disposes the render pass\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._globalBindGroups = {};\r\n }\r\n /** @internal */\r\n private clearFramebuffer() {\r\n if (this._clearColor || this._clearDepth || this._clearStencil) {\r\n getDevice().clearFrameBuffer(this._clearColor, this._clearDepth, this._clearStencil);\r\n }\r\n }\r\n}\r\n"],"names":["RenderPass","Disposable","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","name","_getGlobalBindGroupHash","clearFramebuffer","rq","cullScene","windingReversed","isWindingOrderReversed","reverseVertexWindingOrder","renderItems","dispose","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","onDispose","getDevice","clearFrameBuffer"],"mappings":"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"}
@@ -21,20 +21,20 @@ import { ShaderHelper } from '../material/shader/helper.js';
21
21
  this._currentLight = light;
22
22
  }
23
23
  /** @internal */ _getGlobalBindGroupHash(ctx) {
24
- return `sm:${ctx.shadowMapInfo.get(this.light).shaderHash}`;
24
+ return `${ctx.shadowMapInfo.get(this.light).shaderHash}`;
25
25
  }
26
26
  /** @internal */ renderItems(ctx, renderQueue) {
27
27
  const items = renderQueue.itemList;
28
28
  if (items) {
29
29
  ctx.drawEnvLight = false;
30
30
  ctx.env = null;
31
- ctx.applyFog = null;
31
+ ctx.fogFlags = 0;
32
32
  ctx.flip = this.isAutoFlip(ctx);
33
33
  ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);
34
34
  const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
35
35
  ctx.device.setBindGroup(0, bindGroup);
36
36
  ShaderHelper.setLightUniformsShadowMap(bindGroup, ctx, this._currentLight);
37
- ShaderHelper.setCameraUniforms(bindGroup, ctx.camera, ctx.flip, true);
37
+ ShaderHelper.setCameraUniforms(bindGroup, ctx, true);
38
38
  const reverseWinding = ctx.camera.worldMatrixDet < 0;
39
39
  for (const lit of items.opaque.lit){
40
40
  this.drawItemList(lit, ctx, reverseWinding);
@@ -1 +1 @@
1
- {"version":3,"file":"shadowmap_pass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
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;;;;"}