@zephyr3d/scene 0.6.0 → 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 (723) hide show
  1. package/README.md +1 -1
  2. package/dist/animation/animation.js +149 -27
  3. package/dist/animation/animation.js.map +1 -1
  4. package/dist/animation/animationset.js +173 -73
  5. package/dist/animation/animationset.js.map +1 -1
  6. package/dist/animation/animationtrack.js +65 -10
  7. package/dist/animation/animationtrack.js.map +1 -1
  8. package/dist/animation/eulerrotationtrack.js +41 -20
  9. package/dist/animation/eulerrotationtrack.js.map +1 -1
  10. package/dist/animation/morphtarget.js +14 -38
  11. package/dist/animation/morphtarget.js.map +1 -1
  12. package/dist/animation/morphtrack.js +59 -22
  13. package/dist/animation/morphtrack.js.map +1 -1
  14. package/dist/animation/proptrack.js +190 -0
  15. package/dist/animation/proptrack.js.map +1 -0
  16. package/dist/animation/rotationtrack.js +29 -11
  17. package/dist/animation/rotationtrack.js.map +1 -1
  18. package/dist/animation/scaletrack.js +29 -11
  19. package/dist/animation/scaletrack.js.map +1 -1
  20. package/dist/animation/skeleton.js +241 -78
  21. package/dist/animation/skeleton.js.map +1 -1
  22. package/dist/animation/translationtrack.js +30 -11
  23. package/dist/animation/translationtrack.js.map +1 -1
  24. package/dist/app/api.js +43 -0
  25. package/dist/app/api.js.map +1 -0
  26. package/dist/app/app.js +153 -0
  27. package/dist/app/app.js.map +1 -0
  28. package/dist/app/engine.js +312 -0
  29. package/dist/app/engine.js.map +1 -0
  30. package/dist/app/inputmgr.js +351 -0
  31. package/dist/app/inputmgr.js.map +1 -0
  32. package/dist/app/runtimescript.js +62 -0
  33. package/dist/app/runtimescript.js.map +1 -0
  34. package/dist/app/scriptingsystem.js +220 -0
  35. package/dist/app/scriptingsystem.js.map +1 -0
  36. package/dist/app/scriptregistry.js +432 -0
  37. package/dist/app/scriptregistry.js.map +1 -0
  38. package/dist/asset/assetmanager.js +772 -291
  39. package/dist/asset/assetmanager.js.map +1 -1
  40. package/dist/asset/builtin.js +7 -43
  41. package/dist/asset/builtin.js.map +1 -1
  42. package/dist/asset/loaders/dds/dds.js +17 -93
  43. package/dist/asset/loaders/dds/dds.js.map +1 -1
  44. package/dist/asset/loaders/dds/dds_loader.js +8 -18
  45. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  46. package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
  47. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  48. package/dist/asset/loaders/gltf/helpers.js +27 -14
  49. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  50. package/dist/asset/loaders/hdr/hdr.js +17 -12
  51. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  52. package/dist/asset/loaders/image/tga_Loader.js +13 -16
  53. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  54. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  55. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  56. package/dist/asset/loaders/loader.js.map +1 -1
  57. package/dist/asset/model.js +158 -4
  58. package/dist/asset/model.js.map +1 -1
  59. package/dist/blitter/bilateralblur.js +0 -1
  60. package/dist/blitter/bilateralblur.js.map +1 -1
  61. package/dist/blitter/blitter.js +22 -23
  62. package/dist/blitter/blitter.js.map +1 -1
  63. package/dist/blitter/box.js.map +1 -1
  64. package/dist/blitter/copy.js.map +1 -1
  65. package/dist/blitter/gaussianblur.js +23 -23
  66. package/dist/blitter/gaussianblur.js.map +1 -1
  67. package/dist/camera/base.js +141 -34
  68. package/dist/camera/base.js.map +1 -1
  69. package/dist/camera/camera.js +653 -149
  70. package/dist/camera/camera.js.map +1 -1
  71. package/dist/camera/fps.js +2 -10
  72. package/dist/camera/fps.js.map +1 -1
  73. package/dist/camera/orbit.js +132 -59
  74. package/dist/camera/orbit.js.map +1 -1
  75. package/dist/camera/orthocamera.js +37 -12
  76. package/dist/camera/orthocamera.js.map +1 -1
  77. package/dist/camera/perspectivecamera.js +37 -20
  78. package/dist/camera/perspectivecamera.js.map +1 -1
  79. package/dist/index.d.ts +18268 -6982
  80. package/dist/index.js +49 -16
  81. package/dist/index.js.map +1 -1
  82. package/dist/material/blinn.js +5 -0
  83. package/dist/material/blinn.js.map +1 -1
  84. package/dist/material/grassmaterial.js +6 -1
  85. package/dist/material/grassmaterial.js.map +1 -1
  86. package/dist/material/lambert.js +6 -1
  87. package/dist/material/lambert.js.map +1 -1
  88. package/dist/material/material.js +346 -73
  89. package/dist/material/material.js.map +1 -1
  90. package/dist/material/meshmaterial.js +498 -156
  91. package/dist/material/meshmaterial.js.map +1 -1
  92. package/dist/material/mixins/albedocolor.js +5 -1
  93. package/dist/material/mixins/albedocolor.js.map +1 -1
  94. package/dist/material/mixins/foliage.js +3 -3
  95. package/dist/material/mixins/foliage.js.map +1 -1
  96. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  97. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  98. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  99. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  100. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
  101. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  102. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  103. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  104. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  105. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  106. package/dist/material/mixins/lit.js +16 -4
  107. package/dist/material/mixins/lit.js.map +1 -1
  108. package/dist/material/mixins/pbr/brdf.js +134 -0
  109. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  110. package/dist/material/mixins/pbr/common.js +68 -85
  111. package/dist/material/mixins/pbr/common.js.map +1 -1
  112. package/dist/material/mixins/texture.js +98 -83
  113. package/dist/material/mixins/texture.js.map +1 -1
  114. package/dist/material/mixins/vertexcolor.js +6 -2
  115. package/dist/material/mixins/vertexcolor.js.map +1 -1
  116. package/dist/material/particle.js +272 -0
  117. package/dist/material/particle.js.map +1 -0
  118. package/dist/material/pbrblueprint.js +186 -0
  119. package/dist/material/pbrblueprint.js.map +1 -0
  120. package/dist/material/pbrmr.js +10 -0
  121. package/dist/material/pbrmr.js.map +1 -1
  122. package/dist/material/pbrsg.js +10 -0
  123. package/dist/material/pbrsg.js.map +1 -1
  124. package/dist/material/shader/helper.js +521 -287
  125. package/dist/material/shader/helper.js.map +1 -1
  126. package/dist/material/terrain-cm.js +607 -0
  127. package/dist/material/terrain-cm.js.map +1 -0
  128. package/dist/material/terrainmaterial.js +59 -54
  129. package/dist/material/terrainmaterial.js.map +1 -1
  130. package/dist/material/unlit.js +5 -0
  131. package/dist/material/unlit.js.map +1 -1
  132. package/dist/material/water.js +415 -0
  133. package/dist/material/water.js.map +1 -0
  134. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  135. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  136. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  137. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  138. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  139. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  140. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  141. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  142. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  143. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  144. package/dist/posteffect/bloom.js +39 -54
  145. package/dist/posteffect/bloom.js.map +1 -1
  146. package/dist/posteffect/compositor.js +95 -128
  147. package/dist/posteffect/compositor.js.map +1 -1
  148. package/dist/posteffect/fxaa.js +10 -18
  149. package/dist/posteffect/fxaa.js.map +1 -1
  150. package/dist/posteffect/grayscale.js +9 -17
  151. package/dist/posteffect/grayscale.js.map +1 -1
  152. package/dist/posteffect/motionblur.js +105 -0
  153. package/dist/posteffect/motionblur.js.map +1 -0
  154. package/dist/posteffect/posteffect.js +66 -35
  155. package/dist/posteffect/posteffect.js.map +1 -1
  156. package/dist/posteffect/sao.js +13 -21
  157. package/dist/posteffect/sao.js.map +1 -1
  158. package/dist/posteffect/ssr.js +60 -100
  159. package/dist/posteffect/ssr.js.map +1 -1
  160. package/dist/posteffect/taa.js +175 -0
  161. package/dist/posteffect/taa.js.map +1 -0
  162. package/dist/posteffect/tonemap.js +12 -20
  163. package/dist/posteffect/tonemap.js.map +1 -1
  164. package/dist/render/abuffer_oit.js +30 -19
  165. package/dist/render/abuffer_oit.js.map +1 -1
  166. package/dist/render/clipmap.js +429 -101
  167. package/dist/render/clipmap.js.map +1 -1
  168. package/dist/render/cluster_light.js +7 -5
  169. package/dist/render/cluster_light.js.map +1 -1
  170. package/dist/render/cull_visitor.js +43 -3
  171. package/dist/render/cull_visitor.js.map +1 -1
  172. package/dist/render/depthpass.js +14 -5
  173. package/dist/render/depthpass.js.map +1 -1
  174. package/dist/render/drawable_mixin.js +113 -40
  175. package/dist/render/drawable_mixin.js.map +1 -1
  176. package/dist/render/envlight.js +86 -141
  177. package/dist/render/envlight.js.map +1 -1
  178. package/dist/render/fbm_wavegenerator.js +234 -0
  179. package/dist/render/fbm_wavegenerator.js.map +1 -0
  180. package/dist/render/fft_wavegenerator.js +64 -50
  181. package/dist/render/fft_wavegenerator.js.map +1 -1
  182. package/dist/render/fullscreenquad.js +2 -2
  183. package/dist/render/fullscreenquad.js.map +1 -1
  184. package/dist/render/gerstner_wavegenerator.js +98 -48
  185. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  186. package/dist/render/globalbindgroup_allocator.js +4 -2
  187. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  188. package/dist/render/hzb.js +6 -3
  189. package/dist/render/hzb.js.map +1 -1
  190. package/dist/render/lightpass.js +19 -18
  191. package/dist/render/lightpass.js.map +1 -1
  192. package/dist/render/objectcolorpass.js +4 -4
  193. package/dist/render/objectcolorpass.js.map +1 -1
  194. package/dist/render/primitive.js +213 -104
  195. package/dist/render/primitive.js.map +1 -1
  196. package/dist/render/render_queue.js +40 -20
  197. package/dist/render/render_queue.js.map +1 -1
  198. package/dist/render/renderbundle_wrapper.js +65 -15
  199. package/dist/render/renderbundle_wrapper.js.map +1 -1
  200. package/dist/render/renderer.js +326 -185
  201. package/dist/render/renderer.js.map +1 -1
  202. package/dist/render/renderpass.js +20 -36
  203. package/dist/render/renderpass.js.map +1 -1
  204. package/dist/render/shadowmap_pass.js +3 -3
  205. package/dist/render/shadowmap_pass.js.map +1 -1
  206. package/dist/render/sky.js +864 -541
  207. package/dist/render/sky.js.map +1 -1
  208. package/dist/render/weightedblended_oit.js +13 -15
  209. package/dist/render/weightedblended_oit.js.map +1 -1
  210. package/dist/scene/batchgroup.js +18 -5
  211. package/dist/scene/batchgroup.js.map +1 -1
  212. package/dist/scene/environment.js +78 -48
  213. package/dist/scene/environment.js.map +1 -1
  214. package/dist/scene/graph_node.js +2 -3
  215. package/dist/scene/graph_node.js.map +1 -1
  216. package/dist/scene/light.js +28 -89
  217. package/dist/scene/light.js.map +1 -1
  218. package/dist/scene/mesh.js +218 -87
  219. package/dist/scene/mesh.js.map +1 -1
  220. package/dist/scene/octree.js +371 -162
  221. package/dist/scene/octree.js.map +1 -1
  222. package/dist/scene/particlesys.js +684 -0
  223. package/dist/scene/particlesys.js.map +1 -0
  224. package/dist/scene/raycast_visitor.js +34 -5
  225. package/dist/scene/raycast_visitor.js.map +1 -1
  226. package/dist/scene/scene.js +309 -85
  227. package/dist/scene/scene.js.map +1 -1
  228. package/dist/scene/scene_node.js +675 -102
  229. package/dist/scene/scene_node.js.map +1 -1
  230. package/dist/scene/terrain/grass.js +48 -49
  231. package/dist/scene/terrain/grass.js.map +1 -1
  232. package/dist/scene/terrain/heightfield.js +46 -44
  233. package/dist/scene/terrain/heightfield.js.map +1 -1
  234. package/dist/scene/terrain/patch.js +20 -29
  235. package/dist/scene/terrain/patch.js.map +1 -1
  236. package/dist/scene/terrain/quadtree.js +58 -27
  237. package/dist/scene/terrain/quadtree.js.map +1 -1
  238. package/dist/scene/terrain/terrain.js +31 -45
  239. package/dist/scene/terrain/terrain.js.map +1 -1
  240. package/dist/scene/terrain-cm/grass.js +603 -0
  241. package/dist/scene/terrain-cm/grass.js.map +1 -0
  242. package/dist/scene/terrain-cm/grassmaterial.js +160 -0
  243. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  244. package/dist/scene/terrain-cm/terrain-cm.js +533 -0
  245. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  246. package/dist/scene/water.js +378 -0
  247. package/dist/scene/water.js.map +1 -0
  248. package/dist/shaders/atmosphere.js +957 -0
  249. package/dist/shaders/atmosphere.js.map +1 -0
  250. package/dist/shaders/fog.js +116 -0
  251. package/dist/shaders/fog.js.map +1 -0
  252. package/dist/shaders/misc.js.map +1 -1
  253. package/dist/shaders/noise.js +217 -8
  254. package/dist/shaders/noise.js.map +1 -1
  255. package/dist/shaders/pbr.js.map +1 -1
  256. package/dist/shaders/shadow.js +8 -8
  257. package/dist/shaders/shadow.js.map +1 -1
  258. package/dist/shaders/ssr.js +87 -39
  259. package/dist/shaders/ssr.js.map +1 -1
  260. package/dist/shaders/temporal.js +216 -0
  261. package/dist/shaders/temporal.js.map +1 -0
  262. package/dist/shaders/water.js +42 -20
  263. package/dist/shaders/water.js.map +1 -1
  264. package/dist/shadow/esm.js +31 -13
  265. package/dist/shadow/esm.js.map +1 -1
  266. package/dist/shadow/pcf_opt.js +12 -13
  267. package/dist/shadow/pcf_opt.js.map +1 -1
  268. package/dist/shadow/pcf_pd.js +12 -13
  269. package/dist/shadow/pcf_pd.js.map +1 -1
  270. package/dist/shadow/shader.js +38 -0
  271. package/dist/shadow/shader.js.map +1 -0
  272. package/dist/shadow/shadow_impl.js.map +1 -1
  273. package/dist/shadow/shadowmapper.js +67 -26
  274. package/dist/shadow/shadowmapper.js.map +1 -1
  275. package/dist/shadow/ssm.js +15 -16
  276. package/dist/shadow/ssm.js.map +1 -1
  277. package/dist/shadow/vsm.js +33 -16
  278. package/dist/shadow/vsm.js.map +1 -1
  279. package/dist/shapes/box.js +181 -83
  280. package/dist/shapes/box.js.map +1 -1
  281. package/dist/shapes/cylinder.js +101 -43
  282. package/dist/shapes/cylinder.js.map +1 -1
  283. package/dist/shapes/plane.js +70 -29
  284. package/dist/shapes/plane.js.map +1 -1
  285. package/dist/shapes/shape.js +120 -17
  286. package/dist/shapes/shape.js.map +1 -1
  287. package/dist/shapes/sphere.js +78 -44
  288. package/dist/shapes/sphere.js.map +1 -1
  289. package/dist/shapes/tetrahedron.js +256 -0
  290. package/dist/shapes/tetrahedron.js.map +1 -0
  291. package/dist/shapes/torus.js +76 -55
  292. package/dist/shapes/torus.js.map +1 -1
  293. package/dist/src/animation/animation.js +127 -0
  294. package/dist/src/animation/animation.js.map +1 -0
  295. package/dist/src/animation/animationset.js +255 -0
  296. package/dist/src/animation/animationset.js.map +1 -0
  297. package/dist/src/animation/animationtrack.js +34 -0
  298. package/dist/src/animation/animationtrack.js.map +1 -0
  299. package/dist/src/animation/eulerrotationtrack.js +52 -0
  300. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  301. package/dist/src/animation/morphtarget.js +93 -0
  302. package/dist/src/animation/morphtarget.js.map +1 -0
  303. package/dist/src/animation/morphtrack.js +70 -0
  304. package/dist/src/animation/morphtrack.js.map +1 -0
  305. package/dist/src/animation/proptrack.js +161 -0
  306. package/dist/src/animation/proptrack.js.map +1 -0
  307. package/dist/src/animation/rotationtrack.js +51 -0
  308. package/dist/src/animation/rotationtrack.js.map +1 -0
  309. package/dist/src/animation/scaletrack.js +50 -0
  310. package/dist/src/animation/scaletrack.js.map +1 -0
  311. package/dist/src/animation/skeleton.js +204 -0
  312. package/dist/src/animation/skeleton.js.map +1 -0
  313. package/dist/src/animation/translationtrack.js +50 -0
  314. package/dist/src/animation/translationtrack.js.map +1 -0
  315. package/dist/{app.js → src/app/app.js} +18 -40
  316. package/dist/src/app/app.js.map +1 -0
  317. package/dist/{input → src/app}/inputmgr.js +41 -16
  318. package/dist/src/app/inputmgr.js.map +1 -0
  319. package/dist/src/asset/assetmanager.js +404 -0
  320. package/dist/src/asset/assetmanager.js.map +1 -0
  321. package/dist/src/asset/builtin.js +337 -0
  322. package/dist/src/asset/builtin.js.map +1 -0
  323. package/dist/src/asset/loaders/dds/dds.js +470 -0
  324. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  325. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  326. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  327. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  328. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  329. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  330. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  331. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  332. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  333. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  334. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  335. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  336. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  337. package/dist/src/asset/loaders/loader.js +45 -0
  338. package/dist/src/asset/loaders/loader.js.map +1 -0
  339. package/dist/src/asset/model.js +414 -0
  340. package/dist/src/asset/model.js.map +1 -0
  341. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  342. package/dist/src/blitter/bilateralblur.js.map +1 -0
  343. package/dist/src/blitter/blitter.js +390 -0
  344. package/dist/src/blitter/blitter.js.map +1 -0
  345. package/dist/src/blitter/box.js +118 -0
  346. package/dist/src/blitter/box.js.map +1 -0
  347. package/dist/src/blitter/copy.js +22 -0
  348. package/dist/src/blitter/copy.js.map +1 -0
  349. package/dist/src/blitter/gaussianblur.js +228 -0
  350. package/dist/src/blitter/gaussianblur.js.map +1 -0
  351. package/dist/src/camera/base.js +92 -0
  352. package/dist/src/camera/base.js.map +1 -0
  353. package/dist/src/camera/camera.js +1005 -0
  354. package/dist/src/camera/camera.js.map +1 -0
  355. package/dist/src/camera/fps.js +238 -0
  356. package/dist/src/camera/fps.js.map +1 -0
  357. package/dist/src/camera/orbit.js +245 -0
  358. package/dist/src/camera/orbit.js.map +1 -0
  359. package/dist/src/camera/orthocamera.js +167 -0
  360. package/dist/src/camera/orthocamera.js.map +1 -0
  361. package/dist/src/camera/perspectivecamera.js +141 -0
  362. package/dist/src/camera/perspectivecamera.js.map +1 -0
  363. package/dist/src/index.js +120 -0
  364. package/dist/src/index.js.map +1 -0
  365. package/dist/src/material/blinn.js +81 -0
  366. package/dist/src/material/blinn.js.map +1 -0
  367. package/dist/src/material/grassmaterial.js +113 -0
  368. package/dist/src/material/grassmaterial.js.map +1 -0
  369. package/dist/src/material/lambert.js +92 -0
  370. package/dist/src/material/lambert.js.map +1 -0
  371. package/dist/src/material/material.js +301 -0
  372. package/dist/src/material/material.js.map +1 -0
  373. package/dist/src/material/meshmaterial.js +704 -0
  374. package/dist/src/material/meshmaterial.js.map +1 -0
  375. package/dist/src/material/mixins/albedocolor.js +76 -0
  376. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  377. package/dist/src/material/mixins/foliage.js +47 -0
  378. package/dist/src/material/mixins/foliage.js.map +1 -0
  379. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  380. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  381. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  382. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  383. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  384. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  385. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  386. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  387. package/dist/src/material/mixins/lit.js +476 -0
  388. package/dist/src/material/mixins/lit.js.map +1 -0
  389. package/dist/src/material/mixins/pbr/common.js +918 -0
  390. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  391. package/dist/src/material/mixins/texture.js +172 -0
  392. package/dist/src/material/mixins/texture.js.map +1 -0
  393. package/dist/src/material/mixins/vertexcolor.js +56 -0
  394. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  395. package/dist/src/material/particle.js +178 -0
  396. package/dist/src/material/particle.js.map +1 -0
  397. package/dist/src/material/pbrmr.js +97 -0
  398. package/dist/src/material/pbrmr.js.map +1 -0
  399. package/dist/src/material/pbrsg.js +97 -0
  400. package/dist/src/material/pbrsg.js.map +1 -0
  401. package/dist/src/material/shader/helper.js +1209 -0
  402. package/dist/src/material/shader/helper.js.map +1 -0
  403. package/dist/src/material/terrain-cm.js +606 -0
  404. package/dist/src/material/terrain-cm.js.map +1 -0
  405. package/dist/src/material/terrainmaterial.js +375 -0
  406. package/dist/src/material/terrainmaterial.js.map +1 -0
  407. package/dist/src/material/unlit.js +41 -0
  408. package/dist/src/material/unlit.js.map +1 -0
  409. package/dist/src/material/water.js +417 -0
  410. package/dist/src/material/water.js.map +1 -0
  411. package/dist/src/posteffect/bloom.js +361 -0
  412. package/dist/src/posteffect/bloom.js.map +1 -0
  413. package/dist/src/posteffect/compositor.js +226 -0
  414. package/dist/src/posteffect/compositor.js.map +1 -0
  415. package/dist/src/posteffect/fxaa.js +273 -0
  416. package/dist/src/posteffect/fxaa.js.map +1 -0
  417. package/dist/src/posteffect/grayscale.js +69 -0
  418. package/dist/src/posteffect/grayscale.js.map +1 -0
  419. package/dist/src/posteffect/motionblur.js +96 -0
  420. package/dist/src/posteffect/motionblur.js.map +1 -0
  421. package/dist/src/posteffect/posteffect.js +126 -0
  422. package/dist/src/posteffect/posteffect.js.map +1 -0
  423. package/dist/src/posteffect/sao.js +324 -0
  424. package/dist/src/posteffect/sao.js.map +1 -0
  425. package/dist/src/posteffect/ssr.js +489 -0
  426. package/dist/src/posteffect/ssr.js.map +1 -0
  427. package/dist/src/posteffect/taa.js +172 -0
  428. package/dist/src/posteffect/taa.js.map +1 -0
  429. package/dist/src/posteffect/tonemap.js +94 -0
  430. package/dist/src/posteffect/tonemap.js.map +1 -0
  431. package/dist/src/render/abuffer_oit.js +361 -0
  432. package/dist/src/render/abuffer_oit.js.map +1 -0
  433. package/dist/src/render/clipmap.js +851 -0
  434. package/dist/src/render/clipmap.js.map +1 -0
  435. package/dist/src/render/cluster_light.js +333 -0
  436. package/dist/src/render/cluster_light.js.map +1 -0
  437. package/dist/src/render/cull_visitor.js +187 -0
  438. package/dist/src/render/cull_visitor.js.map +1 -0
  439. package/dist/src/render/depthpass.js +68 -0
  440. package/dist/src/render/depthpass.js.map +1 -0
  441. package/dist/src/render/drawable_mixin.js +227 -0
  442. package/dist/src/render/drawable_mixin.js.map +1 -0
  443. package/dist/src/render/envlight.js +463 -0
  444. package/dist/src/render/envlight.js.map +1 -0
  445. package/dist/src/render/fbm_wavegenerator.js +251 -0
  446. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  447. package/dist/src/render/fft_wavegenerator.js +1006 -0
  448. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  449. package/dist/src/render/fullscreenquad.js +38 -0
  450. package/dist/src/render/fullscreenquad.js.map +1 -0
  451. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  452. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  453. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  454. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  455. package/dist/src/render/hzb.js +273 -0
  456. package/dist/src/render/hzb.js.map +1 -0
  457. package/dist/src/render/lightpass.js +172 -0
  458. package/dist/src/render/lightpass.js.map +1 -0
  459. package/dist/src/render/objectcolorpass.js +51 -0
  460. package/dist/src/render/objectcolorpass.js.map +1 -0
  461. package/dist/src/render/primitive.js +364 -0
  462. package/dist/src/render/primitive.js.map +1 -0
  463. package/dist/src/render/render_queue.js +467 -0
  464. package/dist/src/render/render_queue.js.map +1 -0
  465. package/dist/src/render/renderbundle_wrapper.js +152 -0
  466. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  467. package/dist/src/render/renderer.js +455 -0
  468. package/dist/src/render/renderer.js.map +1 -0
  469. package/dist/src/render/renderpass.js +200 -0
  470. package/dist/src/render/renderpass.js.map +1 -0
  471. package/dist/src/render/shadowmap_pass.js +56 -0
  472. package/dist/src/render/shadowmap_pass.js.map +1 -0
  473. package/dist/src/render/sky.js +1103 -0
  474. package/dist/src/render/sky.js.map +1 -0
  475. package/dist/src/render/weightedblended_oit.js +168 -0
  476. package/dist/src/render/weightedblended_oit.js.map +1 -0
  477. package/dist/src/scene/batchgroup.js +162 -0
  478. package/dist/src/scene/batchgroup.js.map +1 -0
  479. package/dist/src/scene/environment.js +209 -0
  480. package/dist/src/scene/environment.js.map +1 -0
  481. package/dist/src/scene/graph_node.js +72 -0
  482. package/dist/src/scene/graph_node.js.map +1 -0
  483. package/dist/src/scene/light.js +416 -0
  484. package/dist/src/scene/light.js.map +1 -0
  485. package/dist/src/scene/mesh.js +341 -0
  486. package/dist/src/scene/mesh.js.map +1 -0
  487. package/dist/src/scene/octree.js +649 -0
  488. package/dist/src/scene/octree.js.map +1 -0
  489. package/dist/src/scene/particlesys.js +738 -0
  490. package/dist/src/scene/particlesys.js.map +1 -0
  491. package/dist/src/scene/raycast_visitor.js +103 -0
  492. package/dist/src/scene/raycast_visitor.js.map +1 -0
  493. package/dist/src/scene/scene.js +284 -0
  494. package/dist/src/scene/scene.js.map +1 -0
  495. package/dist/src/scene/scene_node.js +732 -0
  496. package/dist/src/scene/scene_node.js.map +1 -0
  497. package/dist/src/scene/terrain/grass.js +278 -0
  498. package/dist/src/scene/terrain/grass.js.map +1 -0
  499. package/dist/src/scene/terrain/heightfield.js +475 -0
  500. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  501. package/dist/src/scene/terrain/patch.js +530 -0
  502. package/dist/src/scene/terrain/patch.js.map +1 -0
  503. package/dist/src/scene/terrain/quadtree.js +461 -0
  504. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  505. package/dist/src/scene/terrain/terrain.js +246 -0
  506. package/dist/src/scene/terrain/terrain.js.map +1 -0
  507. package/dist/src/scene/terrain-cm/grass.js +594 -0
  508. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  509. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  510. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  511. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  512. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  513. package/dist/src/scene/water.js +374 -0
  514. package/dist/src/scene/water.js.map +1 -0
  515. package/dist/src/shaders/atmosphere.js +957 -0
  516. package/dist/src/shaders/atmosphere.js.map +1 -0
  517. package/dist/src/shaders/fog.js +112 -0
  518. package/dist/src/shaders/fog.js.map +1 -0
  519. package/dist/src/shaders/misc.js +266 -0
  520. package/dist/src/shaders/misc.js.map +1 -0
  521. package/dist/src/shaders/noise.js +222 -0
  522. package/dist/src/shaders/noise.js.map +1 -0
  523. package/dist/src/shaders/pbr.js +51 -0
  524. package/dist/src/shaders/pbr.js.map +1 -0
  525. package/dist/src/shaders/shadow.js +636 -0
  526. package/dist/src/shaders/shadow.js.map +1 -0
  527. package/dist/src/shaders/ssr.js +490 -0
  528. package/dist/src/shaders/ssr.js.map +1 -0
  529. package/dist/src/shaders/temporal.js +215 -0
  530. package/dist/src/shaders/temporal.js.map +1 -0
  531. package/dist/src/shaders/water.js +756 -0
  532. package/dist/src/shaders/water.js.map +1 -0
  533. package/dist/src/shadow/esm.js +237 -0
  534. package/dist/src/shadow/esm.js.map +1 -0
  535. package/dist/src/shadow/pcf_opt.js +181 -0
  536. package/dist/src/shadow/pcf_opt.js.map +1 -0
  537. package/dist/src/shadow/pcf_pd.js +189 -0
  538. package/dist/src/shadow/pcf_pd.js.map +1 -0
  539. package/dist/src/shadow/shader.js +37 -0
  540. package/dist/src/shadow/shader.js.map +1 -0
  541. package/dist/src/shadow/shadow_impl.js +15 -0
  542. package/dist/src/shadow/shadow_impl.js.map +1 -0
  543. package/dist/src/shadow/shadowmapper.js +790 -0
  544. package/dist/src/shadow/shadowmapper.js.map +1 -0
  545. package/dist/src/shadow/ssm.js +159 -0
  546. package/dist/src/shadow/ssm.js.map +1 -0
  547. package/dist/src/shadow/vsm.js +297 -0
  548. package/dist/src/shadow/vsm.js.map +1 -0
  549. package/dist/src/shapes/box.js +386 -0
  550. package/dist/src/shapes/box.js.map +1 -0
  551. package/dist/src/shapes/cylinder.js +125 -0
  552. package/dist/src/shapes/cylinder.js.map +1 -0
  553. package/dist/src/shapes/plane.js +88 -0
  554. package/dist/src/shapes/plane.js.map +1 -0
  555. package/dist/src/shapes/shape.js +87 -0
  556. package/dist/src/shapes/shape.js.map +1 -0
  557. package/dist/src/shapes/sphere.js +114 -0
  558. package/dist/src/shapes/sphere.js.map +1 -0
  559. package/dist/src/shapes/tetrahedron.js +188 -0
  560. package/dist/src/shapes/tetrahedron.js.map +1 -0
  561. package/dist/src/shapes/torus.js +111 -0
  562. package/dist/src/shapes/torus.js.map +1 -0
  563. package/dist/src/utility/aabbtree.js +400 -0
  564. package/dist/src/utility/aabbtree.js.map +1 -0
  565. package/dist/src/utility/bounding_volume.js +29 -0
  566. package/dist/src/utility/bounding_volume.js.map +1 -0
  567. package/dist/src/utility/debug.js +28 -0
  568. package/dist/src/utility/debug.js.map +1 -0
  569. package/dist/src/utility/draco/decoder.js +116 -0
  570. package/dist/src/utility/draco/decoder.js.map +1 -0
  571. package/dist/src/utility/misc.js +105 -0
  572. package/dist/src/utility/misc.js.map +1 -0
  573. package/dist/src/utility/panorama.js +163 -0
  574. package/dist/src/utility/panorama.js.map +1 -0
  575. package/dist/src/utility/pmrem.js +354 -0
  576. package/dist/src/utility/pmrem.js.map +1 -0
  577. package/dist/src/utility/rendermipmap.js +115 -0
  578. package/dist/src/utility/rendermipmap.js.map +1 -0
  579. package/dist/src/utility/serialization/json.js +402 -0
  580. package/dist/src/utility/serialization/json.js.map +1 -0
  581. package/dist/src/utility/serialization/manager.js +623 -0
  582. package/dist/src/utility/serialization/manager.js.map +1 -0
  583. package/dist/src/utility/serialization/scene/animation.js +248 -0
  584. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  585. package/dist/src/utility/serialization/scene/batch.js +59 -0
  586. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  587. package/dist/src/utility/serialization/scene/camera.js +790 -0
  588. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  589. package/dist/src/utility/serialization/scene/common.js +222 -0
  590. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  591. package/dist/src/utility/serialization/scene/light.js +575 -0
  592. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  593. package/dist/src/utility/serialization/scene/material.js +1111 -0
  594. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  595. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  596. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  597. package/dist/src/utility/serialization/scene/misc.js +39 -0
  598. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  599. package/dist/src/utility/serialization/scene/node.js +451 -0
  600. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  601. package/dist/src/utility/serialization/scene/particle.js +425 -0
  602. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  603. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  604. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  605. package/dist/src/utility/serialization/scene/scene.js +704 -0
  606. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  607. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  608. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  609. package/dist/src/utility/serialization/scene/water.js +465 -0
  610. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  611. package/dist/src/utility/shprojector.js +297 -0
  612. package/dist/src/utility/shprojector.js.map +1 -0
  613. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  614. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  615. package/dist/src/utility/textures/gradientnoise.js +62 -0
  616. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  617. package/dist/src/utility/textures/randomnoise.js +41 -0
  618. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  619. package/dist/src/values.js +162 -0
  620. package/dist/src/values.js.map +1 -0
  621. package/dist/utility/aabbtree.js +15 -5
  622. package/dist/utility/aabbtree.js.map +1 -1
  623. package/dist/utility/blueprint/common/constants.js +851 -0
  624. package/dist/utility/blueprint/common/constants.js.map +1 -0
  625. package/dist/utility/blueprint/common/math.js +2045 -0
  626. package/dist/utility/blueprint/common/math.js.map +1 -0
  627. package/dist/utility/blueprint/common.js +7 -0
  628. package/dist/utility/blueprint/common.js.map +1 -0
  629. package/dist/utility/blueprint/material/common.js +7 -0
  630. package/dist/utility/blueprint/material/common.js.map +1 -0
  631. package/dist/utility/blueprint/material/func.js +521 -0
  632. package/dist/utility/blueprint/material/func.js.map +1 -0
  633. package/dist/utility/blueprint/material/inputs.js +1659 -0
  634. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  635. package/dist/utility/blueprint/material/ir.js +1311 -0
  636. package/dist/utility/blueprint/material/ir.js.map +1 -0
  637. package/dist/utility/blueprint/material/pbr.js +362 -0
  638. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  639. package/dist/utility/blueprint/material/texture.js +1099 -0
  640. package/dist/utility/blueprint/material/texture.js.map +1 -0
  641. package/dist/utility/blueprint/node.js +187 -0
  642. package/dist/utility/blueprint/node.js.map +1 -0
  643. package/dist/utility/bounding_volume.js +0 -1
  644. package/dist/utility/bounding_volume.js.map +1 -1
  645. package/dist/utility/debug.js +26 -0
  646. package/dist/utility/debug.js.map +1 -0
  647. package/dist/utility/draco/decoder.js +1 -1
  648. package/dist/utility/draco/decoder.js.map +1 -1
  649. package/dist/utility/misc.js +18 -6
  650. package/dist/utility/misc.js.map +1 -1
  651. package/dist/utility/panorama.js +8 -6
  652. package/dist/utility/panorama.js.map +1 -1
  653. package/dist/utility/pmrem.js +30 -18
  654. package/dist/utility/pmrem.js.map +1 -1
  655. package/dist/utility/rendermipmap.js +116 -0
  656. package/dist/utility/rendermipmap.js.map +1 -0
  657. package/dist/utility/serialization/blueprint/constants.js +255 -0
  658. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  659. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  660. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  661. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  662. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  663. package/dist/utility/serialization/json.js +402 -0
  664. package/dist/utility/serialization/json.js.map +1 -0
  665. package/dist/utility/serialization/manager.js +1176 -0
  666. package/dist/utility/serialization/manager.js.map +1 -0
  667. package/dist/utility/serialization/scene/animation.js +699 -0
  668. package/dist/utility/serialization/scene/animation.js.map +1 -0
  669. package/dist/utility/serialization/scene/batch.js +53 -0
  670. package/dist/utility/serialization/scene/batch.js.map +1 -0
  671. package/dist/utility/serialization/scene/camera.js +808 -0
  672. package/dist/utility/serialization/scene/camera.js.map +1 -0
  673. package/dist/utility/serialization/scene/common.js +224 -0
  674. package/dist/utility/serialization/scene/common.js.map +1 -0
  675. package/dist/utility/serialization/scene/light.js +589 -0
  676. package/dist/utility/serialization/scene/light.js.map +1 -0
  677. package/dist/utility/serialization/scene/material.js +942 -0
  678. package/dist/utility/serialization/scene/material.js.map +1 -0
  679. package/dist/utility/serialization/scene/mesh.js +374 -0
  680. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  681. package/dist/utility/serialization/scene/misc.js +39 -0
  682. package/dist/utility/serialization/scene/misc.js.map +1 -0
  683. package/dist/utility/serialization/scene/node.js +391 -0
  684. package/dist/utility/serialization/scene/node.js.map +1 -0
  685. package/dist/utility/serialization/scene/particle.js +425 -0
  686. package/dist/utility/serialization/scene/particle.js.map +1 -0
  687. package/dist/utility/serialization/scene/primitive.js +582 -0
  688. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  689. package/dist/utility/serialization/scene/scene.js +763 -0
  690. package/dist/utility/serialization/scene/scene.js.map +1 -0
  691. package/dist/utility/serialization/scene/terrain.js +495 -0
  692. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  693. package/dist/utility/serialization/scene/water.js +465 -0
  694. package/dist/utility/serialization/scene/water.js.map +1 -0
  695. package/dist/utility/shprojector.js +313 -0
  696. package/dist/utility/shprojector.js.map +1 -0
  697. package/dist/utility/textures/ggxlut.js +4 -5
  698. package/dist/utility/textures/ggxlut.js.map +1 -1
  699. package/dist/utility/textures/gradientnoise.js +2 -1
  700. package/dist/utility/textures/gradientnoise.js.map +1 -1
  701. package/dist/utility/textures/randomnoise.js +1 -0
  702. package/dist/utility/textures/randomnoise.js.map +1 -1
  703. package/dist/values.js +91 -4
  704. package/dist/values.js.map +1 -1
  705. package/package.json +29 -15
  706. package/dist/app.js.map +0 -1
  707. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  708. package/dist/input/inputmgr.js.map +0 -1
  709. package/dist/material/mixins/ggxlut.js.map +0 -1
  710. package/dist/posteffect/water.js +0 -508
  711. package/dist/posteffect/water.js.map +0 -1
  712. package/dist/render/oit.js +0 -16
  713. package/dist/render/oit.js.map +0 -1
  714. package/dist/render/scatteringlut.js +0 -634
  715. package/dist/render/scatteringlut.js.map +0 -1
  716. package/dist/render/watermesh.js +0 -193
  717. package/dist/render/watermesh.js.map +0 -1
  718. package/dist/render/wavegenerator.js +0 -8
  719. package/dist/render/wavegenerator.js.map +0 -1
  720. package/dist/scene/xform.js +0 -247
  721. package/dist/scene/xform.js.map +0 -1
  722. package/dist/utility/shprojection.js +0 -442
  723. package/dist/utility/shprojection.js.map +0 -1
@@ -1,13 +1,13 @@
1
- import { Matrix4x4, Frustum, Vector3, Vector4, CubeFace, AABB } from '@zephyr3d/base';
1
+ import { Matrix4x4, Frustum, Vector3, AABB, Vector4, retainObject, CubeFace } from '@zephyr3d/base';
2
2
  import { Camera } from '../camera/camera.js';
3
3
  import { SSM } from './ssm.js';
4
4
  import { ESM } from './esm.js';
5
5
  import { VSM } from './vsm.js';
6
6
  import { PCFPD } from './pcf_pd.js';
7
7
  import { PCFOPT } from './pcf_opt.js';
8
- import { Application } from '../app.js';
9
8
  import { LIGHT_TYPE_NONE, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT } from '../values.js';
10
9
  import { ShaderHelper } from '../material/shader/helper.js';
10
+ import { getDevice } from '../app/api.js';
11
11
 
12
12
  const tmpMatrix = new Matrix4x4();
13
13
  const tmpFrustum = new Frustum(Matrix4x4.identity());
@@ -71,6 +71,27 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
71
71
  this._shadowRegion = null;
72
72
  this.applyMode(this._shadowMode);
73
73
  }
74
+ copyFrom(other) {
75
+ this.shadowMapSize = other.shadowMapSize;
76
+ this.shadowRegion = other.shadowRegion ? new AABB(other.shadowRegion) : null;
77
+ this.shadowDistance = other.shadowDistance;
78
+ this.numShadowCascades = other.numShadowCascades;
79
+ this.splitLambda = other.splitLambda;
80
+ this.depthBias = other.depthBias;
81
+ this.normalBias = other.normalBias;
82
+ this.nearClip = other.nearClip;
83
+ this.mode = other.mode;
84
+ this.pdSampleCount = other.pdSampleCount;
85
+ this.pdSampleRadius = other.pdSampleRadius;
86
+ this.pcfKernelSize = other.pcfKernelSize;
87
+ this.vsmBlurKernelSize = other.vsmBlurKernelSize;
88
+ this.vsmBlurRadius = other.vsmBlurRadius;
89
+ this.vsmDarkness = other.vsmDarkness;
90
+ this.esmBlur = other.esmBlur;
91
+ this.esmBlurKernelSize = other.esmBlurKernelSize;
92
+ this.esmBlurRadius = other.esmBlurRadius;
93
+ this.esmDepthScale = other.esmDepthScale;
94
+ }
74
95
  /** The light that is used to generate shadow map */ get light() {
75
96
  return this._light;
76
97
  }
@@ -162,7 +183,7 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
162
183
  return this._impl.getShadowMapSampler(this);
163
184
  }
164
185
  */ /** @internal */ getShaderHash(shadowMapParams) {
165
- return `${shadowMapParams.impl.constructor.name}_${shadowMapParams.impl.getShaderHash()}_${shadowMapParams.lightType}_${shadowMapParams.shadowMap.target}_${Number(shadowMapParams.numShadowCascades > 1)}_${Number(Application.instance.device.getDeviceCaps().textureCaps.getTextureFormatInfo(shadowMapParams.shadowMap.format).filterable)}`;
186
+ return `${shadowMapParams.impl.constructor.name}_${shadowMapParams.impl.getShaderHash()}_${shadowMapParams.lightType}_${shadowMapParams.shadowMap.target}_${Number(shadowMapParams.numShadowCascades > 1)}_${Number(getDevice().getDeviceCaps().textureCaps.getTextureFormatInfo(shadowMapParams.shadowMap.format).filterable)}`;
166
187
  }
167
188
  /** Sample count for poisson disc PCF */ get pdSampleCount() {
168
189
  return this._pdSampleCount;
@@ -171,7 +192,10 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
171
192
  val = Math.min(Math.max(1, Number(val) >> 0), 64);
172
193
  if (val !== this._pdSampleCount) {
173
194
  this._pdSampleCount = val;
174
- this.asPCFPD() && (this.asPCFPD().tapCount = this._pdSampleCount);
195
+ const pcfpd = this.asPCFPD();
196
+ if (pcfpd) {
197
+ pcfpd.tapCount = this._pdSampleCount;
198
+ }
175
199
  }
176
200
  }
177
201
  /** Radius for poisson disc PCF */ get pdSampleRadius() {
@@ -191,7 +215,10 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
191
215
  val = val !== 3 && val !== 5 && val !== 7 ? 5 : val;
192
216
  if (val !== this._pcfKernelSize) {
193
217
  this._pcfKernelSize = val;
194
- this.asPCFOPT() && (this.asPCFOPT().kernelSize = this._pcfKernelSize);
218
+ const pcfopt = this.asPCFOPT();
219
+ if (pcfopt) {
220
+ pcfopt.kernelSize = this._pcfKernelSize;
221
+ }
195
222
  }
196
223
  }
197
224
  /** Kernel size of VSM */ get vsmBlurKernelSize() {
@@ -201,7 +228,10 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
201
228
  val = Math.max(3, Number(val) >> 0) | 1;
202
229
  if (val !== this._vsmBlurKernelSize) {
203
230
  this._vsmBlurKernelSize = val;
204
- this.asVSM() && (this.asVSM().kernelSize = this._vsmBlurKernelSize);
231
+ const vsm = this.asVSM();
232
+ if (vsm) {
233
+ vsm.kernelSize = this._vsmBlurKernelSize;
234
+ }
205
235
  }
206
236
  }
207
237
  /** Blur radius for VSM */ get vsmBlurRadius() {
@@ -211,7 +241,10 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
211
241
  val = Math.max(0, Number(val) || 0);
212
242
  if (val !== this._vsmBlurRadius) {
213
243
  this._vsmBlurRadius = val;
214
- this.asVSM() && (this.asVSM().blurSize = this._vsmBlurRadius);
244
+ const vsm = this.asVSM();
245
+ if (vsm) {
246
+ vsm.blurSize = this._vsmBlurRadius;
247
+ }
215
248
  }
216
249
  }
217
250
  /** Darkness for VSM */ get vsmDarkness() {
@@ -230,7 +263,10 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
230
263
  set esmBlur(val) {
231
264
  if (!!val !== this.esmBlur) {
232
265
  this._esmBlur = !!val;
233
- this.asESM() && (this.asESM().blur = this._esmBlur);
266
+ const esm = this.asESM();
267
+ if (esm) {
268
+ esm.blur = this._esmBlur;
269
+ }
234
270
  }
235
271
  }
236
272
  /** Kernel size for ESM */ get esmBlurKernelSize() {
@@ -240,7 +276,10 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
240
276
  val = Math.max(3, Number(val) >> 0) | 1;
241
277
  if (val !== this._esmBlurKernelSize) {
242
278
  this._esmBlurKernelSize = val;
243
- this.asESM() && (this.asESM().kernelSize = this._esmBlurKernelSize);
279
+ const esm = this.asESM();
280
+ if (esm) {
281
+ esm.kernelSize = this._esmBlurKernelSize;
282
+ }
244
283
  }
245
284
  }
246
285
  /** Blur radius for ESM */ get esmBlurRadius() {
@@ -250,7 +289,10 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
250
289
  val = Math.max(0, Number(val) || 0);
251
290
  if (val !== this._esmBlurRadius) {
252
291
  this._esmBlurRadius = val;
253
- this.asESM() && (this.asESM().blurSize = this._esmBlurRadius);
292
+ const esm = this.asESM();
293
+ if (esm) {
294
+ esm.blurSize = this._esmBlurRadius;
295
+ }
254
296
  }
255
297
  }
256
298
  /** Depth scale for ESM */ get esmDepthScale() {
@@ -273,8 +315,7 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
273
315
  if (ctx.shadowMapInfo) {
274
316
  for (const k of ctx.shadowMapInfo.keys()){
275
317
  const shadowMapParams = ctx.shadowMapInfo.get(k);
276
- ctx.device.pool.releaseFrameBuffer(shadowMapParams.shadowMapFramebuffer);
277
- shadowMapParams.impl.releaseTemporalResources(shadowMapParams);
318
+ //ctx.device.pool.releaseFrameBuffer(shadowMapParams.shadowMapFramebuffer);
278
319
  shadowMapParams.lightType = LIGHT_TYPE_NONE;
279
320
  shadowMapParams.depthClampEnabled = false;
280
321
  shadowMapParams.shaderHash = '';
@@ -312,11 +353,9 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
312
353
  return texture && (texture.target !== target || texture.format !== format || texture.width !== width || texture.height !== height || texture.depth !== this.numShadowCascades);
313
354
  }
314
355
  /** @internal */ createTexture(target, format, width, height, depth) {
315
- const device = Application.instance.device;
356
+ const device = getDevice();
316
357
  const options = {
317
- samplerOptions: {
318
- mipFilter: 'none'
319
- }
358
+ mipmapping: false
320
359
  };
321
360
  switch(target){
322
361
  case '2d':
@@ -330,7 +369,7 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
330
369
  }
331
370
  }
332
371
  /** @internal */ static fetchTemporalFramebuffer(autoRelease, lightType, numCascades, width, height, colorFormat, depthFormat, mipmapping) {
333
- const device = Application.instance.device;
372
+ const device = getDevice();
334
373
  const useTextureArray = numCascades > 1 && device.type !== 'webgl';
335
374
  const colorAttachments = colorFormat ? useTextureArray ? [
336
375
  device.pool.fetchTemporalTexture2DArray(false, colorFormat, width, height, numCascades, mipmapping)
@@ -350,7 +389,7 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
350
389
  return fb;
351
390
  }
352
391
  /** @internal */ updateResources(shadowMapParams) {
353
- const device = Application.instance.device;
392
+ const device = getDevice();
354
393
  const colorFormat = shadowMapParams.impl.getShadowMapColorFormat(shadowMapParams);
355
394
  const depthFormat = shadowMapParams.impl.getShadowMapDepthFormat(shadowMapParams);
356
395
  const numCascades = shadowMapParams.numShadowCascades;
@@ -379,13 +418,13 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
379
418
  if (depthAttachment) {
380
419
  device.pool.releaseTexture(depthAttachment);
381
420
  }
382
- */ shadowMapParams.shadowMapFramebuffer = ShadowMapper.fetchTemporalFramebuffer(false, this._light.lightType, numCascades, shadowMapWidth, shadowMapHeight, colorFormat, depthFormat);
421
+ */ shadowMapParams.shadowMapFramebuffer = ShadowMapper.fetchTemporalFramebuffer(true, this._light.lightType, numCascades, shadowMapWidth, shadowMapHeight, colorFormat, depthFormat);
383
422
  shadowMapParams.impl = this._impl;
384
423
  this._impl.updateResources(shadowMapParams);
385
424
  }
386
425
  /** @internal */ createLightCameraPoint(lightCamera) {
387
426
  //lightCamera.reparent(this._light);
388
- lightCamera.reparent(lightCamera.scene.rootNode);
427
+ lightCamera.parent = lightCamera.scene.rootNode;
389
428
  lightCamera.position.setXYZ(0, 0, 0);
390
429
  lightCamera.rotation.identity();
391
430
  lightCamera.scale.setXYZ(1, 1, 1);
@@ -393,11 +432,11 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
393
432
  lightCamera.position.set(this._light.positionAndRange.xyz());
394
433
  }
395
434
  /** @internal */ createLightCameraSpot(lightCamera) {
396
- lightCamera.reparent(this._light);
435
+ lightCamera.parent = this._light;
397
436
  lightCamera.position.setXYZ(0, 0, 0);
398
437
  lightCamera.rotation.identity();
399
438
  lightCamera.scale.setXYZ(1, 1, 1);
400
- lightCamera.setPerspective(2 * this._light.cutoff, 1, this._config.nearClip, Math.min((this._shadowDistance, this._light).range));
439
+ lightCamera.setPerspective(2 * Math.acos(this._light.cutoff), 1, this._config.nearClip, Math.min((this._shadowDistance, this._light).range));
401
440
  }
402
441
  /** @internal */ createLightCameraDirectional(sceneAABB, sceneCamera, lightCamera, cropMatrix, border) {
403
442
  let frustum = sceneCamera.frustumViewSpace;
@@ -539,7 +578,9 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
539
578
  /** @internal */ static fetchCameraForScene(scene) {
540
579
  const cameras = this._lightCameras.get(scene);
541
580
  if (!cameras || cameras.length === 0) {
542
- return new Camera(scene);
581
+ const camera = new Camera(scene);
582
+ retainObject(camera);
583
+ return camera;
543
584
  } else {
544
585
  const camera = cameras.pop();
545
586
  camera.parent = scene.rootNode;
@@ -598,7 +639,7 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
598
639
  renderPass.light = this._light;
599
640
  this.updateResources(shadowMapParams);
600
641
  shadowMapParams.shaderHash = this.getShaderHash(shadowMapParams);
601
- const device = Application.instance.device;
642
+ const device = getDevice();
602
643
  const fb = shadowMapParams.shadowMapFramebuffer;
603
644
  shadowMapParams.depthClampEnabled = false;
604
645
  renderPass.clearColor = fb.getColorAttachments()[0] ? fb.getColorAttachments()[0].isFloatFormat() ? new Vector4(1, 1, 1, 1) : new Vector4(0, 0, 0, 1) : null;
@@ -634,8 +675,8 @@ const tmpFrustum = new Frustum(Matrix4x4.identity());
634
675
  const shadowMapRenderCamera = ShadowMapper.fetchCameraForScene(scene);
635
676
  const shadowMapCullCamera = ShadowMapper.fetchCameraForScene(scene);
636
677
  shadowMapCullCamera.clipMask = AABB.ClipLeft | AABB.ClipRight | AABB.ClipBottom | AABB.ClipTop;
637
- cascadeCamera.reparent(camera);
638
- shadowMapParams.depthClampEnabled = Application.instance.device.getDeviceCaps().shaderCaps.supportFragmentDepth;
678
+ cascadeCamera.parent = camera;
679
+ shadowMapParams.depthClampEnabled = getDevice().getDeviceCaps().shaderCaps.supportFragmentDepth;
639
680
  for(let split = 0; split < this._config.numCascades; split++){
640
681
  cascadeCamera.setPerspective(camera.getFOV(), camera.getAspect(), distances[split], distances[split + 1]);
641
682
  const snapMatrix = ShadowMapper._snapMatrix;
@@ -1 +1 @@
1
- {"version":3,"file":"shadowmapper.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"shadowmapper.js","sources":["../../src/shadow/shadowmapper.ts"],"sourcesContent":["import { retainObject, Matrix4x4, Vector3, Vector4, AABB, CubeFace, Frustum } from '@zephyr3d/base';\r\nimport type {\r\n PBShaderExp,\r\n FrameBuffer,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCube,\r\n TextureFormat,\r\n PBInsideFunctionScope,\r\n TextureSampler,\r\n TextureCreationOptions,\r\n TextureType,\r\n BaseTexture\r\n} from '@zephyr3d/device';\r\nimport { Camera } from '../camera/camera';\r\nimport { SSM } from './ssm';\r\nimport { ESM } from './esm';\r\nimport { VSM } from './vsm';\r\nimport { PCFPD } from './pcf_pd';\r\nimport { PCFOPT } from './pcf_opt';\r\nimport type { PointLight, PunctualLight, SpotLight } from '../scene/light';\r\nimport type { ShadowMapPass } from '../render/shadowmap_pass';\r\nimport type { Scene } from '../scene/scene';\r\nimport type { ShadowImpl } from './shadow_impl';\r\nimport type { DrawContext } from '../render';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT } from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { getDevice } from '../app/api';\r\n\r\nconst tmpMatrix = new Matrix4x4();\r\nconst tmpFrustum = new Frustum(Matrix4x4.identity());\r\n\r\n/**\r\n * Shadow mapping mode\r\n * @public\r\n */\r\nexport type ShadowMode = 'hard' | 'vsm' | 'esm' | 'pcf-pd' | 'pcf-opt';\r\n\r\n/** @internal */\r\nexport type ShadowMapParams = {\r\n lightType: number;\r\n shaderHash: string;\r\n numShadowCascades: number;\r\n depthClampEnabled: boolean;\r\n cascadeDistances: Vector4;\r\n depthBiasValues: Vector4[];\r\n depthBiasScales: Vector4;\r\n cameraParams: Vector4;\r\n shadowMatrices: Float32Array;\r\n shadowMapFramebuffer: FrameBuffer;\r\n shadowMap: BaseTexture;\r\n shadowMapSampler: TextureSampler;\r\n impl: ShadowImpl;\r\n implData: unknown;\r\n};\r\n\r\n/** @internal */\r\nexport type ShadowMapType = Texture2D | TextureCube | Texture2DArray;\r\n\r\n/** @internal */\r\nexport interface ShadowConfig {\r\n shadowMapSize: number;\r\n numCascades?: number;\r\n splitLambda?: number;\r\n depthBias?: number;\r\n normalBias?: number;\r\n nearClip?: number;\r\n}\r\n\r\n// const zeroPosition = Vector3.zero();\r\n/**\r\n * The shadow map generator\r\n * @public\r\n */\r\nexport class ShadowMapper {\r\n /** @internal */\r\n private static readonly _snapMatrix = new Matrix4x4();\r\n /** @internal */\r\n private static readonly _target = new Vector3();\r\n /** @internal */\r\n private static readonly _up = new Vector3();\r\n /** @internal */\r\n private static readonly _frustumMin = new Vector3();\r\n /** @internal */\r\n private static readonly _frustumMax = new Vector3();\r\n /** @internal */\r\n private static readonly _frustumCenter = new Vector3();\r\n /** @internal */\r\n private static readonly _lightCameras: WeakMap<Scene, Camera[]> = new WeakMap();\r\n /** @internal */\r\n private static readonly _shadowMapParams: ShadowMapParams[] = [];\r\n /** @internal */\r\n protected _light: PunctualLight;\r\n /** @internal */\r\n protected _config: ShadowConfig;\r\n /** @internal */\r\n protected _resourceDirty: boolean;\r\n /** @internal */\r\n protected _shadowMode: ShadowMode;\r\n /** @internal */\r\n protected _shadowDistance: number;\r\n /** @internal */\r\n protected _impl: ShadowImpl;\r\n /** @internal */\r\n protected _pdSampleCount: number;\r\n /** @internal */\r\n protected _pdSampleRadius: number;\r\n /** @internal */\r\n protected _pcfKernelSize: number;\r\n /** @internal */\r\n protected _vsmBlurKernelSize: number;\r\n /** @internal */\r\n protected _vsmBlurRadius: number;\r\n /** @internal */\r\n protected _vsmDarkness: number;\r\n /** @internal */\r\n protected _esmBlur: boolean;\r\n /** @internal */\r\n protected _esmBlurKernelSize: number;\r\n /** @internal */\r\n protected _esmBlurRadius: number;\r\n /** @internal */\r\n protected _esmDepthScale: number;\r\n /** @internal */\r\n protected _shadowRegion: AABB;\r\n /**\r\n * Creates an instance of ShadowMapper\r\n * @param light - The light that is used to generate shadow map\r\n */\r\n constructor(light: PunctualLight) {\r\n this._light = light;\r\n this._config = {\r\n shadowMapSize: 1024,\r\n numCascades: 1,\r\n splitLambda: 0.5,\r\n depthBias: 0.5,\r\n normalBias: 0.2,\r\n nearClip: 1\r\n };\r\n this._resourceDirty = true;\r\n this._shadowMode = 'hard';\r\n this._shadowDistance = 2000;\r\n this._impl = null;\r\n this._pdSampleCount = 12;\r\n this._pdSampleRadius = 4;\r\n this._pcfKernelSize = 5;\r\n this._vsmBlurKernelSize = 5;\r\n this._vsmBlurRadius = 4;\r\n this._vsmDarkness = 0.3;\r\n this._esmBlur = true;\r\n this._esmBlurKernelSize = 5;\r\n this._esmBlurRadius = 4;\r\n this._esmDepthScale = 200;\r\n this._shadowRegion = null;\r\n this.applyMode(this._shadowMode);\r\n }\r\n copyFrom(other: ShadowMapper) {\r\n this.shadowMapSize = other.shadowMapSize;\r\n this.shadowRegion = other.shadowRegion ? new AABB(other.shadowRegion) : null;\r\n this.shadowDistance = other.shadowDistance;\r\n this.numShadowCascades = other.numShadowCascades;\r\n this.splitLambda = other.splitLambda;\r\n this.depthBias = other.depthBias;\r\n this.normalBias = other.normalBias;\r\n this.nearClip = other.nearClip;\r\n this.mode = other.mode;\r\n this.pdSampleCount = other.pdSampleCount;\r\n this.pdSampleRadius = other.pdSampleRadius;\r\n this.pcfKernelSize = other.pcfKernelSize;\r\n this.vsmBlurKernelSize = other.vsmBlurKernelSize;\r\n this.vsmBlurRadius = other.vsmBlurRadius;\r\n this.vsmDarkness = other.vsmDarkness;\r\n this.esmBlur = other.esmBlur;\r\n this.esmBlurKernelSize = other.esmBlurKernelSize;\r\n this.esmBlurRadius = other.esmBlurRadius;\r\n this.esmDepthScale = other.esmDepthScale;\r\n }\r\n /** The light that is used to generate shadow map */\r\n get light(): PunctualLight {\r\n return this._light;\r\n }\r\n /** Size of the shadow map */\r\n get shadowMapSize(): number {\r\n return this._config.shadowMapSize;\r\n }\r\n set shadowMapSize(num: number) {\r\n if (!Number.isInteger(num) || num < 1) {\r\n console.error(`invalid shadow map size: ${num}`);\r\n return;\r\n }\r\n if (this._config.shadowMapSize !== num) {\r\n this._config.shadowMapSize = num;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n /** Shadow region for directional light */\r\n get shadowRegion(): AABB {\r\n return this._shadowRegion;\r\n }\r\n set shadowRegion(region: AABB) {\r\n this._shadowRegion = region;\r\n }\r\n /** Maximum distance from the camera, shadow will not be rendered beyond this range */\r\n get shadowDistance(): number {\r\n return this._shadowDistance;\r\n }\r\n set shadowDistance(val: number) {\r\n this._shadowDistance = Math.max(0, val);\r\n }\r\n /** Count of the cascades, The maximum value is 4 */\r\n get numShadowCascades(): number {\r\n return this._config.numCascades;\r\n }\r\n set numShadowCascades(num: number) {\r\n if (num !== 1 && num !== 2 && num !== 3 && num !== 4) {\r\n console.error(`invalid shadow cascade number: ${num}`);\r\n return;\r\n }\r\n if (!this._light.isDirectionLight() && num > 1) {\r\n console.error(`only directional light can have more than one shadow cascades`);\r\n return;\r\n }\r\n if (num !== this._config.numCascades) {\r\n this._config.numCascades = num;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n /** The split lambda for cascaded shadow mapping */\r\n get splitLambda(): number {\r\n return this._config.splitLambda;\r\n }\r\n set splitLambda(val: number) {\r\n if (this._config.splitLambda !== val) {\r\n this._config.splitLambda = val;\r\n }\r\n }\r\n /** Depth bias for the shadow map */\r\n get depthBias(): number {\r\n return this._config.depthBias;\r\n }\r\n set depthBias(val: number) {\r\n this._config.depthBias = val;\r\n }\r\n /** Normal bias for the shadow map */\r\n get normalBias(): number {\r\n return this._config.normalBias;\r\n }\r\n set normalBias(val: number) {\r\n this._config.normalBias = val;\r\n }\r\n /** Near clip plane */\r\n get nearClip(): number {\r\n return this._config.nearClip;\r\n }\r\n set nearClip(val: number) {\r\n if (this._config.nearClip !== val) {\r\n this._config.nearClip = val;\r\n }\r\n }\r\n /** Shadow map mode */\r\n get mode(): ShadowMode {\r\n return this._shadowMode;\r\n }\r\n set mode(mode: ShadowMode) {\r\n if (mode !== this._shadowMode) {\r\n this._shadowMode = mode;\r\n this.applyMode(this._shadowMode);\r\n }\r\n }\r\n /** Generated shadow map */\r\n /*\r\n get shadowMap(): ShadowMapType {\r\n return (this._impl.getShadowMap(this) ?? this._framebuffer?.getColorAttachments()[0] ?? null) as ShadowMapType;\r\n }\r\n */\r\n /** Sampler of the shadow map */\r\n /*\r\n get shadowMapSampler(): TextureSampler {\r\n return this._impl.getShadowMapSampler(this);\r\n }\r\n */\r\n /** @internal */\r\n getShaderHash(shadowMapParams: ShadowMapParams): string {\r\n return `${shadowMapParams.impl.constructor.name}_${shadowMapParams.impl.getShaderHash()}_${\r\n shadowMapParams.lightType\r\n }_${shadowMapParams.shadowMap.target}_${Number(shadowMapParams.numShadowCascades > 1)}_${Number(\r\n getDevice().getDeviceCaps().textureCaps.getTextureFormatInfo(shadowMapParams.shadowMap.format)\r\n .filterable\r\n )}`;\r\n }\r\n /** Sample count for poisson disc PCF */\r\n get pdSampleCount(): number {\r\n return this._pdSampleCount;\r\n }\r\n set pdSampleCount(val: number) {\r\n val = Math.min(Math.max(1, Number(val) >> 0), 64);\r\n if (val !== this._pdSampleCount) {\r\n this._pdSampleCount = val;\r\n const pcfpd = this.asPCFPD();\r\n if (pcfpd) {\r\n pcfpd.tapCount = this._pdSampleCount;\r\n }\r\n }\r\n }\r\n /** Radius for poisson disc PCF */\r\n get pdSampleRadius(): number {\r\n return this._pdSampleRadius;\r\n }\r\n set pdSampleRadius(val: number) {\r\n val = Math.max(0, Number(val) >> 0);\r\n if (val !== this._pdSampleRadius) {\r\n this._pdSampleRadius = val;\r\n this.asPCFPD()?.setDepthScale(this._pdSampleRadius);\r\n }\r\n }\r\n /** Kernel size for optimized PCF */\r\n get pcfKernelSize(): number {\r\n return this._pcfKernelSize;\r\n }\r\n set pcfKernelSize(val: number) {\r\n val = val !== 3 && val !== 5 && val !== 7 ? 5 : val;\r\n if (val !== this._pcfKernelSize) {\r\n this._pcfKernelSize = val;\r\n const pcfopt = this.asPCFOPT();\r\n if (pcfopt) {\r\n pcfopt.kernelSize = this._pcfKernelSize;\r\n }\r\n }\r\n }\r\n /** Kernel size of VSM */\r\n get vsmBlurKernelSize(): number {\r\n return this._vsmBlurKernelSize;\r\n }\r\n set vsmBlurKernelSize(val: number) {\r\n val = Math.max(3, Number(val) >> 0) | 1;\r\n if (val !== this._vsmBlurKernelSize) {\r\n this._vsmBlurKernelSize = val;\r\n const vsm = this.asVSM();\r\n if (vsm) {\r\n vsm.kernelSize = this._vsmBlurKernelSize;\r\n }\r\n }\r\n }\r\n /** Blur radius for VSM */\r\n get vsmBlurRadius(): number {\r\n return this._vsmBlurRadius;\r\n }\r\n set vsmBlurRadius(val: number) {\r\n val = Math.max(0, Number(val) || 0);\r\n if (val !== this._vsmBlurRadius) {\r\n this._vsmBlurRadius = val;\r\n const vsm = this.asVSM();\r\n if (vsm) {\r\n vsm.blurSize = this._vsmBlurRadius;\r\n }\r\n }\r\n }\r\n /** Darkness for VSM */\r\n get vsmDarkness(): number {\r\n return this._vsmDarkness;\r\n }\r\n set vsmDarkness(val: number) {\r\n val = Math.min(0.999, Math.max(0, Number(val) || 0));\r\n if (val !== this._vsmDarkness) {\r\n this._vsmDarkness = val;\r\n this.asVSM()?.setDepthScale(this._vsmDarkness);\r\n }\r\n }\r\n /** Whether to enable ESM blur */\r\n get esmBlur(): boolean {\r\n return this._esmBlur;\r\n }\r\n set esmBlur(val: boolean) {\r\n if (!!val !== this.esmBlur) {\r\n this._esmBlur = !!val;\r\n const esm = this.asESM();\r\n if (esm) {\r\n esm.blur = this._esmBlur;\r\n }\r\n }\r\n }\r\n /** Kernel size for ESM */\r\n get esmBlurKernelSize(): number {\r\n return this._esmBlurKernelSize;\r\n }\r\n set esmBlurKernelSize(val: number) {\r\n val = Math.max(3, Number(val) >> 0) | 1;\r\n if (val !== this._esmBlurKernelSize) {\r\n this._esmBlurKernelSize = val;\r\n const esm = this.asESM();\r\n if (esm) {\r\n esm.kernelSize = this._esmBlurKernelSize;\r\n }\r\n }\r\n }\r\n /** Blur radius for ESM */\r\n get esmBlurRadius(): number {\r\n return this._esmBlurRadius;\r\n }\r\n set esmBlurRadius(val: number) {\r\n val = Math.max(0, Number(val) || 0);\r\n if (val !== this._esmBlurRadius) {\r\n this._esmBlurRadius = val;\r\n const esm = this.asESM();\r\n if (esm) {\r\n esm.blurSize = this._esmBlurRadius;\r\n }\r\n }\r\n }\r\n /** Depth scale for ESM */\r\n get esmDepthScale(): number {\r\n return this._esmDepthScale;\r\n }\r\n set esmDepthScale(val: number) {\r\n val = Math.max(0, Number(val) || 0);\r\n if (val !== this._esmDepthScale) {\r\n this._esmDepthScale = val;\r\n this.asESM()?.setDepthScale(this._esmDepthScale);\r\n }\r\n }\r\n /** @internal */\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ): PBShaderExp {\r\n return this._impl.computeShadow(shadowMapParams, scope, shadowVertex, NdotL);\r\n }\r\n /** @internal */\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ): PBShaderExp {\r\n return this._impl.computeShadowCSM(shadowMapParams, scope, shadowVertex, NdotL, split);\r\n }\r\n /** @internal */\r\n static releaseTemporalResources(ctx: DrawContext) {\r\n if (ctx.shadowMapInfo) {\r\n for (const k of ctx.shadowMapInfo.keys()) {\r\n const shadowMapParams = ctx.shadowMapInfo.get(k);\r\n //ctx.device.pool.releaseFrameBuffer(shadowMapParams.shadowMapFramebuffer);\r\n shadowMapParams.lightType = LIGHT_TYPE_NONE;\r\n shadowMapParams.depthClampEnabled = false;\r\n shadowMapParams.shaderHash = '';\r\n shadowMapParams.numShadowCascades = 1;\r\n shadowMapParams.shadowMapFramebuffer = null;\r\n shadowMapParams.impl = null;\r\n shadowMapParams.shadowMap = null;\r\n shadowMapParams.shadowMapSampler = null;\r\n shadowMapParams.implData = null;\r\n this._shadowMapParams.push(shadowMapParams);\r\n }\r\n ctx.shadowMapInfo = null;\r\n }\r\n }\r\n /** @internal */\r\n static computeShadowBias(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n z: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n linear: boolean\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const depthBiasParam = ShaderHelper.getDepthBiasValues(scope);\r\n if (shadowMapParams.lightType === LIGHT_TYPE_DIRECTIONAL) {\r\n return pb.dot(pb.mul(depthBiasParam.xy, pb.vec2(1, pb.sub(1, NdotL))), pb.vec2(1, 1));\r\n } else {\r\n const nearFar = ShaderHelper.getShadowCameraParams(scope).xy;\r\n const linearDepth = linear ? z : ShaderHelper.nonLinearDepthToLinearNormalized(scope, z, nearFar);\r\n const biasScaleFactor = pb.mix(1, depthBiasParam.w, linearDepth);\r\n return pb.dot(pb.mul(depthBiasParam.xy, pb.vec2(1, pb.sub(1, NdotL)), biasScaleFactor), pb.vec2(1, 1));\r\n }\r\n }\r\n /** @internal */\r\n static computeShadowBiasCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const depthBiasParam = ShaderHelper.getDepthBiasValues(scope);\r\n const splitFlags = pb.vec4(\r\n pb.float(pb.equal(split, 0)),\r\n pb.float(pb.equal(split, 1)),\r\n pb.float(pb.equal(split, 2)),\r\n pb.float(pb.equal(split, 3))\r\n );\r\n const depthBiasScale = pb.dot(ShaderHelper.getDepthBiasScales(scope), splitFlags);\r\n return pb.dot(pb.mul(depthBiasParam.xy, pb.vec2(1, pb.sub(1, NdotL)), depthBiasScale), pb.vec2(1, 1));\r\n }\r\n /** @internal */\r\n protected isTextureInvalid(\r\n texture: Texture2D | TextureCube | Texture2DArray,\r\n target: TextureType,\r\n format: TextureFormat,\r\n width: number,\r\n height: number\r\n ): boolean {\r\n return (\r\n texture &&\r\n (texture.target !== target ||\r\n texture.format !== format ||\r\n texture.width !== width ||\r\n texture.height !== height ||\r\n texture.depth !== this.numShadowCascades)\r\n );\r\n }\r\n /** @internal */\r\n protected createTexture(\r\n target: TextureType,\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ): Texture2D | TextureCube | Texture2DArray {\r\n const device = getDevice();\r\n const options: TextureCreationOptions = {\r\n mipmapping: false\r\n };\r\n switch (target) {\r\n case '2d':\r\n return device.createTexture2D(format, width, height, options);\r\n case 'cube':\r\n return device.createCubeTexture(format, width, options);\r\n case '2darray':\r\n return device.createTexture2DArray(format, width, height, depth, options);\r\n default:\r\n return null;\r\n }\r\n }\r\n /** @internal */\r\n static fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: TextureFormat,\r\n mipmapping?: boolean\r\n ) {\r\n const device = getDevice();\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n /** @internal */\r\n protected updateResources(shadowMapParams: ShadowMapParams) {\r\n const device = getDevice();\r\n const colorFormat = shadowMapParams.impl.getShadowMapColorFormat(shadowMapParams);\r\n const depthFormat = shadowMapParams.impl.getShadowMapDepthFormat(shadowMapParams);\r\n const numCascades = shadowMapParams.numShadowCascades;\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const shadowMapWidth =\r\n numCascades > 1 && !useTextureArray ? 2 * this._config.shadowMapSize : this._config.shadowMapSize;\r\n const shadowMapHeight =\r\n numCascades > 2 && !useTextureArray ? 2 * this._config.shadowMapSize : this._config.shadowMapSize;\r\n /*\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [device.pool.fetchTemporalTexture2DArray(false, colorFormat, shadowMapWidth, shadowMapHeight, numCascades, false)]\r\n : this._light.isPointLight()\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, shadowMapWidth, false)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, shadowMapWidth, shadowMapHeight, false)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, shadowMapWidth, shadowMapHeight, numCascades, false)\r\n : device.type !== 'webgl' && this._light.isPointLight()\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, shadowMapWidth, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, shadowMapWidth, shadowMapHeight, false)\r\n : null;\r\n shadowMapParams.shadowMapFramebuffer = device.pool.createTemporalFramebuffer(false, colorAttachments, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n */\r\n shadowMapParams.shadowMapFramebuffer = ShadowMapper.fetchTemporalFramebuffer(\r\n true,\r\n this._light.lightType,\r\n numCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n depthFormat\r\n );\r\n shadowMapParams.impl = this._impl;\r\n this._impl.updateResources(shadowMapParams);\r\n }\r\n /** @internal */\r\n protected createLightCameraPoint(lightCamera: Camera): void {\r\n //lightCamera.reparent(this._light);\r\n lightCamera.parent = lightCamera.scene.rootNode;\r\n lightCamera.position.setXYZ(0, 0, 0);\r\n lightCamera.rotation.identity();\r\n lightCamera.scale.setXYZ(1, 1, 1);\r\n lightCamera.setPerspective(\r\n Math.PI / 2,\r\n 1,\r\n this._config.nearClip,\r\n Math.min(this._shadowDistance, (this._light as PointLight).range)\r\n );\r\n lightCamera.position.set(this._light.positionAndRange.xyz());\r\n }\r\n /** @internal */\r\n protected createLightCameraSpot(lightCamera: Camera): void {\r\n lightCamera.parent = this._light;\r\n lightCamera.position.setXYZ(0, 0, 0);\r\n lightCamera.rotation.identity();\r\n lightCamera.scale.setXYZ(1, 1, 1);\r\n lightCamera.setPerspective(\r\n 2 * Math.acos((this._light as SpotLight).cutoff),\r\n 1,\r\n this._config.nearClip,\r\n Math.min((this._shadowDistance, this._light as SpotLight).range)\r\n );\r\n }\r\n /** @internal */\r\n protected createLightCameraDirectional(\r\n sceneAABB: AABB,\r\n sceneCamera: Camera,\r\n lightCamera: Camera,\r\n cropMatrix?: Matrix4x4,\r\n border?: number\r\n ) {\r\n let frustum = sceneCamera.frustumViewSpace;\r\n if (this._shadowDistance < sceneCamera.getFarPlane()) {\r\n tmpMatrix.set(sceneCamera.getProjectionMatrix());\r\n tmpMatrix.setNearFar(tmpMatrix.getNearPlane(), this._shadowDistance);\r\n //tmpMatrix.multiplyRight(sceneCamera.viewMatrix);\r\n tmpFrustum.initWithMatrix(tmpMatrix);\r\n frustum = tmpFrustum;\r\n }\r\n border = border || 0;\r\n const expand = (this.shadowMapSize - 2 * border) / this.shadowMapSize;\r\n //const frustum = sceneCamera.frustum;\r\n const frustumMin = ShadowMapper._frustumMin;\r\n const frustumMax = ShadowMapper._frustumMax;\r\n const frustumCenter = ShadowMapper._frustumCenter;\r\n const target = ShadowMapper._target;\r\n const up = ShadowMapper._up;\r\n // const frustum = new Frustum(sceneCamera.viewProjectionMatrix);\r\n frustumMin.setXYZ(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n frustumMax.setXYZ(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n frustum.corners.forEach((p) => {\r\n frustumMin.inplaceMin(p);\r\n frustumMax.inplaceMax(p);\r\n });\r\n let radius = Vector3.distance(frustumMin, frustumMax) * 0.5 * expand;\r\n const center = sceneCamera.thisToWorld(\r\n Vector3.add(frustumMin, frustumMax, frustumCenter).scaleBy(0.5),\r\n frustumCenter\r\n );\r\n // Bounding sphere of the shadow camera should not be larger than bounding sphere of the scene.\r\n const sceneRadius = sceneAABB.diagonalLength * 0.5 * expand;\r\n if (sceneRadius < radius) {\r\n radius = sceneRadius;\r\n Vector3.add(sceneAABB.minPoint, sceneAABB.maxPoint, center).scaleBy(0.5);\r\n }\r\n target.setXYZ(\r\n center.x + this._light.directionAndCutoff.x,\r\n center.y + this._light.directionAndCutoff.y,\r\n center.z + this._light.directionAndCutoff.z\r\n );\r\n up.setXYZ(0, 1, 0);\r\n lightCamera.lookAt(center, target, up);\r\n lightCamera.position.set(center);\r\n lightCamera.setOrtho(\r\n -radius,\r\n radius,\r\n -radius,\r\n radius,\r\n -radius,\r\n Math.max(Vector3.distance(center, sceneCamera.getWorldPosition()), sceneCamera.getFarPlane())\r\n );\r\n center.setXYZ(0, 0, 0);\r\n lightCamera.viewProjectionMatrix.transformPointP(center, center);\r\n if (cropMatrix) {\r\n const tx = center.x * this.shadowMapSize * 0.5;\r\n const ty = center.y * this.shadowMapSize * 0.5;\r\n const rx = Math.round(tx);\r\n const ry = Math.round(ty);\r\n center.setXYZ(((rx - tx) * 2) / this.shadowMapSize, ((ry - ty) * 2) / this.shadowMapSize, 0);\r\n cropMatrix.translation(center);\r\n }\r\n\r\n /*\r\n const minx = frustumMin.x;\r\n const maxx = frustumMax.x;\r\n const miny = frustumMin.y;\r\n const maxy = frustumMax.y;\r\n const minz = frustumMin.z;\r\n const maxz = frustumMax.z;\r\n const texelSizeW = (maxx - minx) / this.shadowMapSize;\r\n const texelSizeH = (maxy - miny) / this.shadowMapSize;\r\n const cx = Math.floor((minx + maxx) / 2 / texelSizeW) * texelSizeW;\r\n const cy = Math.floor((miny + maxy) / 2 / texelSizeH) * texelSizeH;\r\n const cz = (minz + maxz) / 2;\r\n const hx = Math.floor(((maxx - minx) * (expand + 0.5)) / texelSizeW) * texelSizeW;\r\n const hy = Math.floor(((maxy - miny) * (expand + 0.5)) / texelSizeH) * texelSizeH;\r\n lightCamera.position.setXYZ(cx, cy, cz);\r\n lightCamera.setOrtho(\r\n -hx,\r\n hx,\r\n -hy,\r\n hy,\r\n sceneMax.z - maxz,\r\n sceneMax.z - minz + 1\r\n );\r\n if (cropMatrix) {\r\n // compute crop matrix\r\n let clipMaxX = 0,\r\n clipMaxY = 0;\r\n let clipMinX = Number.MAX_VALUE,\r\n clipMinY = Number.MAX_VALUE;\r\n frustum.corners.forEach((p) => {\r\n const clipPos = lightCamera.viewProjectionMatrix.transformPoint(p);\r\n clipPos.x = Math.min(1, Math.max(-1, clipPos.x / clipPos.w));\r\n clipPos.y = Math.min(1, Math.max(-1, clipPos.y / clipPos.w));\r\n if (clipPos.x > clipMaxX) {\r\n clipMaxX = clipPos.x;\r\n }\r\n if (clipPos.x < clipMinX) {\r\n clipMinX = clipPos.x;\r\n }\r\n if (clipPos.y > clipMaxY) {\r\n clipMaxY = clipPos.y;\r\n }\r\n if (clipPos.y < clipMinY) {\r\n clipMinY = clipPos.y;\r\n }\r\n });\r\n const clipW = clipMaxX - clipMinX;\r\n const clipH = clipMaxY - clipMinY;\r\n clipMinX -= expand * clipW;\r\n clipMinY -= expand * clipH;\r\n clipMaxX += expand * clipW;\r\n clipMaxY += expand * clipH;\r\n const scaleX = 2 / (clipMaxX - clipMinX);\r\n const scaleY = 2 / (clipMaxY - clipMinY);\r\n const offsetX = -0.5 * (clipMaxX + clipMinX) * scaleX;\r\n const offsetY = -0.5 * (clipMaxY + clipMinY) * scaleY;\r\n cropMatrix.identity();\r\n cropMatrix.m00 = scaleX;\r\n cropMatrix.m11 = scaleY;\r\n cropMatrix.m03 = offsetX;\r\n cropMatrix.m13 = offsetY;\r\n }\r\n */\r\n }\r\n /** @internal */\r\n private static fetchShadowMapParams(): ShadowMapParams {\r\n if (this._shadowMapParams.length > 0) {\r\n return this._shadowMapParams.pop();\r\n } else {\r\n return {\r\n lightType: LIGHT_TYPE_NONE,\r\n depthClampEnabled: false,\r\n shaderHash: '',\r\n cameraParams: new Vector4(),\r\n cascadeDistances: new Vector4(),\r\n depthBiasScales: new Vector4(),\r\n depthBiasValues: [new Vector4(), new Vector4(), new Vector4(), new Vector4()],\r\n numShadowCascades: 1,\r\n shadowMatrices: new Float32Array(16 * 4),\r\n shadowMap: null,\r\n shadowMapSampler: null,\r\n shadowMapFramebuffer: null,\r\n impl: null,\r\n implData: null\r\n };\r\n }\r\n }\r\n /** @internal */\r\n private static fetchCameraForScene(scene: Scene) {\r\n const cameras = this._lightCameras.get(scene);\r\n if (!cameras || cameras.length === 0) {\r\n const camera = new Camera(scene);\r\n retainObject(camera);\r\n return camera;\r\n } else {\r\n const camera = cameras.pop();\r\n camera.parent = scene.rootNode;\r\n camera.position.setXYZ(0, 0, 0);\r\n camera.rotation.identity();\r\n camera.scale.setXYZ(1, 1, 1);\r\n camera.clipMask = 0;\r\n return camera;\r\n }\r\n }\r\n /** @internal */\r\n private static releaseCamera(camera: Camera) {\r\n let cameras = this._lightCameras.get(camera.scene);\r\n if (!cameras) {\r\n cameras = [];\r\n this._lightCameras.set(camera.scene, cameras);\r\n }\r\n camera.remove();\r\n cameras.push(camera);\r\n }\r\n /** @internal */\r\n calcSplitDistances(nearPlane: number, farPlane: number, numCascades: number): number[] {\r\n const result: number[] = [0, 0, 0, 0, 0];\r\n for (let i = 0; i <= numCascades; ++i) {\r\n const fIDM = i / numCascades;\r\n const fLog = nearPlane * Math.pow(farPlane / nearPlane, fIDM);\r\n const fUniform = nearPlane + (farPlane - nearPlane) * fIDM;\r\n result[i] = fLog * this._config.splitLambda + fUniform * (1 - this._config.splitLambda);\r\n }\r\n return result;\r\n }\r\n /** @internal */\r\n protected calcDepthBiasParams(\r\n camera: Camera,\r\n shadowMapSize: number,\r\n depthBias: number,\r\n normalBias: number,\r\n depthScale: number,\r\n result: Vector4\r\n ): void {\r\n const sizeNear = Math.min(\r\n camera.getProjectionMatrix().getNearPlaneWidth(),\r\n camera.getProjectionMatrix().getNearPlaneHeight()\r\n );\r\n const sizeFar = Math.min(\r\n camera.getProjectionMatrix().getFarPlaneWidth(),\r\n camera.getProjectionMatrix().getFarPlaneHeight()\r\n );\r\n const scaleFactor = (sizeNear / shadowMapSize) * 2;\r\n result.setXYZW(depthBias * scaleFactor, normalBias * 0.0001, depthScale, sizeFar / sizeNear);\r\n }\r\n /** @internal */\r\n protected postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n this._impl.postRenderShadowMap(shadowMapParams);\r\n }\r\n /** @internal */\r\n render(ctx: DrawContext, renderPass: ShadowMapPass) {\r\n if (!ctx.shadowMapInfo) {\r\n ctx.shadowMapInfo = new Map();\r\n }\r\n const shadowMapParams = ShadowMapper.fetchShadowMapParams();\r\n shadowMapParams.impl = this._impl;\r\n shadowMapParams.lightType = this.light.lightType;\r\n shadowMapParams.numShadowCascades =\r\n shadowMapParams.lightType === LIGHT_TYPE_DIRECTIONAL ? this._config.numCascades : 1;\r\n ctx.shadowMapInfo.set(this.light, shadowMapParams);\r\n const scene = ctx.scene;\r\n const camera = ctx.camera;\r\n renderPass.light = this._light;\r\n this.updateResources(shadowMapParams);\r\n shadowMapParams.shaderHash = this.getShaderHash(shadowMapParams);\r\n const device = getDevice();\r\n const fb = shadowMapParams.shadowMapFramebuffer;\r\n shadowMapParams.depthClampEnabled = false;\r\n renderPass.clearColor = fb.getColorAttachments()[0]\r\n ? fb.getColorAttachments()[0].isFloatFormat()\r\n ? new Vector4(1, 1, 1, 1)\r\n : new Vector4(0, 0, 0, 1)\r\n : null;\r\n const depthScale = this._impl.getDepthScale();\r\n const shadowRegion =\r\n this._light.isDirectionLight() && this._shadowRegion && this._shadowRegion.isValid()\r\n ? this._shadowRegion\r\n : scene.boundingBox;\r\n if (this._light.isPointLight()) {\r\n const shadowMapRenderCamera = ShadowMapper.fetchCameraForScene(scene);\r\n this.createLightCameraPoint(shadowMapRenderCamera);\r\n this.calcDepthBiasParams(\r\n camera,\r\n this._config.shadowMapSize,\r\n this._config.depthBias,\r\n this._config.normalBias,\r\n depthScale,\r\n shadowMapParams.depthBiasValues[0]\r\n );\r\n shadowMapParams.cameraParams.setXYZW(\r\n shadowMapRenderCamera.getNearPlane(),\r\n shadowMapRenderCamera.getFarPlane(),\r\n this._config.shadowMapSize,\r\n this._shadowDistance\r\n );\r\n device.setFramebuffer(fb);\r\n shadowMapParams.shadowMatrices.set(Matrix4x4.transpose(shadowMapRenderCamera.viewMatrix));\r\n for (const face of [CubeFace.PX, CubeFace.NX, CubeFace.PY, CubeFace.NY, CubeFace.PZ, CubeFace.NZ]) {\r\n shadowMapRenderCamera.lookAtCubeFace(face);\r\n fb.setColorAttachmentCubeFace(0, face);\r\n fb.setDepthAttachmentCubeFace(face);\r\n ctx.camera = shadowMapRenderCamera;\r\n renderPass.render(ctx);\r\n }\r\n shadowMapParams.shadowMatrices.set(Matrix4x4.identity());\r\n ShadowMapper.releaseCamera(shadowMapRenderCamera);\r\n } else {\r\n if (this._config.numCascades > 1) {\r\n const distances = this.calcSplitDistances(\r\n camera.getNearPlane(),\r\n Math.min(this._shadowDistance, camera.getFarPlane()),\r\n this._config.numCascades\r\n );\r\n const cascadeCamera = ShadowMapper.fetchCameraForScene(scene);\r\n const shadowMapRenderCamera = ShadowMapper.fetchCameraForScene(scene);\r\n const shadowMapCullCamera = ShadowMapper.fetchCameraForScene(scene);\r\n shadowMapCullCamera.clipMask = AABB.ClipLeft | AABB.ClipRight | AABB.ClipBottom | AABB.ClipTop;\r\n cascadeCamera.parent = camera;\r\n shadowMapParams.depthClampEnabled = getDevice().getDeviceCaps().shaderCaps.supportFragmentDepth;\r\n for (let split = 0; split < this._config.numCascades; split++) {\r\n cascadeCamera.setPerspective(\r\n camera.getFOV(),\r\n camera.getAspect(),\r\n distances[split],\r\n distances[split + 1]\r\n );\r\n const snapMatrix = ShadowMapper._snapMatrix;\r\n const border = shadowMapParams.impl.getShadowMapBorder(shadowMapParams); //20 / this._config.shadowMapSize;\r\n this.createLightCameraDirectional(\r\n shadowRegion,\r\n cascadeCamera,\r\n shadowMapRenderCamera,\r\n snapMatrix,\r\n border\r\n );\r\n this.createLightCameraDirectional(shadowRegion, cascadeCamera, shadowMapCullCamera, null, border);\r\n this.calcDepthBiasParams(\r\n camera,\r\n this._config.shadowMapSize,\r\n this._config.depthBias,\r\n this._config.normalBias,\r\n depthScale,\r\n shadowMapParams.depthBiasValues[split]\r\n );\r\n shadowMapParams.depthBiasScales[split] = 1;\r\n // Incorrect calculation\r\n // shadowMapParams.depthBiasScales[split] = shadowMapParams.depthBiasValues[0].x !== 0 ? shadowMapParams.depthBiasValues[split].x / shadowMapParams.depthBiasValues[0].x : 1;\r\n shadowMapParams.cameraParams.setXYZW(\r\n shadowMapRenderCamera.getNearPlane(),\r\n shadowMapRenderCamera.getFarPlane(),\r\n this._config.shadowMapSize,\r\n this._shadowDistance\r\n );\r\n let scissor: number[] = null;\r\n if (\r\n fb.getColorAttachments()[0]?.isTexture2DArray() ||\r\n fb.getDepthAttachment()?.isTexture2DArray()\r\n ) {\r\n shadowMapRenderCamera.setProjectionMatrix(\r\n Matrix4x4.multiply(snapMatrix, shadowMapRenderCamera.getProjectionMatrix())\r\n );\r\n fb.setColorAttachmentLayer(0, split);\r\n fb.setDepthAttachmentLayer(split);\r\n } else {\r\n const numRows = this._config.numCascades > 2 ? 2 : 1;\r\n const numCols = this._config.numCascades > 1 ? 2 : 1;\r\n const adjMatrix = new Matrix4x4();\r\n const col = split % 2;\r\n const row = split >> 1;\r\n adjMatrix.setRowXYZW(0, 1.5 - 0.5 * numCols, 0, 0, 0);\r\n adjMatrix.setRowXYZW(1, 0, 1.5 - 0.5 * numRows, 0, 0);\r\n adjMatrix.setRowXYZW(2, 0, 0, 1, 0);\r\n adjMatrix.setRowXYZW(3, col - 0.5 * numCols + 0.5, row - 0.5 * numRows + 0.5, 0, 1);\r\n shadowMapRenderCamera.setProjectionMatrix(\r\n Matrix4x4.multiply(\r\n adjMatrix,\r\n Matrix4x4.multiply(snapMatrix, shadowMapRenderCamera.getProjectionMatrix())\r\n )\r\n );\r\n if (device.type === 'webgpu') {\r\n scissor = [\r\n col * this._config.shadowMapSize,\r\n (numRows - 1 - row) * this._config.shadowMapSize,\r\n this._config.shadowMapSize,\r\n this._config.shadowMapSize\r\n ];\r\n } else {\r\n scissor = [\r\n col * this._config.shadowMapSize,\r\n row * this._config.shadowMapSize,\r\n this._config.shadowMapSize,\r\n this._config.shadowMapSize\r\n ];\r\n }\r\n }\r\n device.setFramebuffer(fb);\r\n device.setScissor(scissor);\r\n ctx.camera = shadowMapRenderCamera;\r\n renderPass.render(ctx, shadowMapCullCamera);\r\n shadowMapParams.shadowMatrices.set(\r\n Matrix4x4.transpose(shadowMapRenderCamera.viewProjectionMatrix),\r\n split * 16\r\n );\r\n shadowMapParams.cascadeDistances[split] = distances[split + 1];\r\n }\r\n ShadowMapper.releaseCamera(cascadeCamera);\r\n ShadowMapper.releaseCamera(shadowMapRenderCamera);\r\n ShadowMapper.releaseCamera(shadowMapCullCamera);\r\n } else {\r\n const shadowMapRenderCamera = ShadowMapper.fetchCameraForScene(scene);\r\n const snapMatrix = ShadowMapper._snapMatrix;\r\n shadowMapRenderCamera.clipMask = AABB.ClipLeft | AABB.ClipRight | AABB.ClipBottom | AABB.ClipTop;\r\n if (this._light.isDirectionLight()) {\r\n this.createLightCameraDirectional(\r\n shadowRegion,\r\n camera,\r\n shadowMapRenderCamera,\r\n snapMatrix,\r\n shadowMapParams.impl.getShadowMapBorder(shadowMapParams)\r\n );\r\n } else {\r\n this.createLightCameraSpot(shadowMapRenderCamera);\r\n }\r\n this.calcDepthBiasParams(\r\n camera,\r\n this._config.shadowMapSize,\r\n this._config.depthBias,\r\n this._config.normalBias,\r\n depthScale,\r\n shadowMapParams.depthBiasValues[0]\r\n );\r\n shadowMapParams.cameraParams.setXYZW(\r\n shadowMapRenderCamera.getNearPlane(),\r\n shadowMapRenderCamera.getFarPlane(),\r\n this._config.shadowMapSize,\r\n this._shadowDistance\r\n );\r\n device.setFramebuffer(fb);\r\n shadowMapRenderCamera.setProjectionMatrix(\r\n Matrix4x4.multiply(snapMatrix, shadowMapRenderCamera.getProjectionMatrix())\r\n );\r\n ctx.camera = shadowMapRenderCamera;\r\n renderPass.render(ctx);\r\n shadowMapParams.shadowMatrices.set(Matrix4x4.transpose(shadowMapRenderCamera.viewProjectionMatrix));\r\n ShadowMapper.releaseCamera(shadowMapRenderCamera);\r\n }\r\n }\r\n ctx.camera = camera;\r\n this.postRenderShadowMap(shadowMapParams);\r\n }\r\n /** @internal */\r\n private applyMode(mode: ShadowMode) {\r\n if (mode !== 'hard' && mode !== 'vsm' && mode !== 'esm' && mode !== 'pcf-pd' && mode !== 'pcf-opt') {\r\n console.error(`ShadowMapper.setShadowMode() failed: invalid mode: ${mode}`);\r\n return;\r\n }\r\n this._impl = null;\r\n if (mode === 'hard') {\r\n this._impl = new SSM();\r\n } else if (mode === 'vsm') {\r\n this._impl = new VSM(this._vsmBlurKernelSize, this._vsmBlurRadius, this._vsmDarkness);\r\n } else if (mode === 'esm') {\r\n this._impl = new ESM(this._esmBlurKernelSize, this._esmBlurRadius, this._esmDepthScale);\r\n } else if (mode === 'pcf-pd') {\r\n this._impl = new PCFPD(this._pdSampleCount, this._pdSampleRadius);\r\n } else if (mode === 'pcf-opt') {\r\n this._impl = new PCFOPT(this._pcfKernelSize);\r\n }\r\n }\r\n /** @internal */\r\n private asVSM(): VSM {\r\n return this._impl?.getType() === 'vsm' ? (this._impl as VSM) : null;\r\n }\r\n /** @internal */\r\n private asESM(): ESM {\r\n return this._impl?.getType() === 'esm' ? (this._impl as ESM) : null;\r\n }\r\n /** @internal */\r\n private asPCFPD(): PCFPD {\r\n return this._impl?.getType() === 'pcf-pd' ? (this._impl as PCFPD) : null;\r\n }\r\n /** @internal */\r\n private asPCFOPT(): PCFOPT {\r\n return this._impl?.getType() === 'pcf-opt' ? (this._impl as PCFOPT) : null;\r\n }\r\n}\r\n"],"names":["tmpMatrix","Matrix4x4","tmpFrustum","Frustum","identity","ShadowMapper","_snapMatrix","_target","Vector3","_up","_frustumMin","_frustumMax","_frustumCenter","_lightCameras","WeakMap","_shadowMapParams","light","_light","_config","shadowMapSize","numCascades","splitLambda","depthBias","normalBias","nearClip","_resourceDirty","_shadowMode","_shadowDistance","_impl","_pdSampleCount","_pdSampleRadius","_pcfKernelSize","_vsmBlurKernelSize","_vsmBlurRadius","_vsmDarkness","_esmBlur","_esmBlurKernelSize","_esmBlurRadius","_esmDepthScale","_shadowRegion","applyMode","copyFrom","other","shadowRegion","AABB","shadowDistance","numShadowCascades","mode","pdSampleCount","pdSampleRadius","pcfKernelSize","vsmBlurKernelSize","vsmBlurRadius","vsmDarkness","esmBlur","esmBlurKernelSize","esmBlurRadius","esmDepthScale","num","Number","isInteger","console","error","region","val","Math","max","isDirectionLight","getShaderHash","shadowMapParams","impl","name","lightType","shadowMap","target","getDevice","getDeviceCaps","textureCaps","getTextureFormatInfo","format","filterable","min","pcfpd","asPCFPD","tapCount","setDepthScale","pcfopt","asPCFOPT","kernelSize","vsm","asVSM","blurSize","esm","asESM","blur","computeShadow","scope","shadowVertex","NdotL","computeShadowCSM","split","releaseTemporalResources","ctx","shadowMapInfo","k","keys","get","LIGHT_TYPE_NONE","depthClampEnabled","shaderHash","shadowMapFramebuffer","shadowMapSampler","implData","push","computeShadowBias","z","linear","pb","$builder","depthBiasParam","ShaderHelper","getDepthBiasValues","LIGHT_TYPE_DIRECTIONAL","dot","mul","xy","vec2","sub","nearFar","getShadowCameraParams","linearDepth","nonLinearDepthToLinearNormalized","biasScaleFactor","mix","w","computeShadowBiasCSM","splitFlags","vec4","float","equal","depthBiasScale","getDepthBiasScales","isTextureInvalid","texture","width","height","depth","createTexture","device","options","mipmapping","createTexture2D","createCubeTexture","createTexture2DArray","fetchTemporalFramebuffer","autoRelease","colorFormat","depthFormat","useTextureArray","type","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","updateResources","getShadowMapColorFormat","getShadowMapDepthFormat","shadowMapWidth","shadowMapHeight","createLightCameraPoint","lightCamera","parent","scene","rootNode","position","setXYZ","rotation","scale","setPerspective","PI","range","set","positionAndRange","xyz","createLightCameraSpot","acos","cutoff","createLightCameraDirectional","sceneAABB","sceneCamera","cropMatrix","border","frustum","frustumViewSpace","getFarPlane","getProjectionMatrix","setNearFar","getNearPlane","initWithMatrix","expand","frustumMin","frustumMax","frustumCenter","up","MAX_VALUE","corners","forEach","p","inplaceMin","inplaceMax","radius","distance","center","thisToWorld","add","scaleBy","sceneRadius","diagonalLength","minPoint","maxPoint","x","directionAndCutoff","y","lookAt","setOrtho","getWorldPosition","viewProjectionMatrix","transformPointP","tx","ty","rx","round","ry","translation","fetchShadowMapParams","length","pop","cameraParams","Vector4","cascadeDistances","depthBiasScales","depthBiasValues","shadowMatrices","Float32Array","fetchCameraForScene","cameras","camera","Camera","retainObject","clipMask","releaseCamera","remove","calcSplitDistances","nearPlane","farPlane","result","i","fIDM","fLog","pow","fUniform","calcDepthBiasParams","depthScale","sizeNear","getNearPlaneWidth","getNearPlaneHeight","sizeFar","getFarPlaneWidth","getFarPlaneHeight","scaleFactor","setXYZW","postRenderShadowMap","render","renderPass","Map","clearColor","getColorAttachments","isFloatFormat","getDepthScale","isValid","boundingBox","isPointLight","shadowMapRenderCamera","setFramebuffer","transpose","viewMatrix","face","CubeFace","PX","NX","PY","NY","PZ","NZ","lookAtCubeFace","setColorAttachmentCubeFace","setDepthAttachmentCubeFace","distances","cascadeCamera","shadowMapCullCamera","ClipLeft","ClipRight","ClipBottom","ClipTop","shaderCaps","supportFragmentDepth","getFOV","getAspect","snapMatrix","getShadowMapBorder","scissor","isTexture2DArray","getDepthAttachment","setProjectionMatrix","multiply","setColorAttachmentLayer","setDepthAttachmentLayer","numRows","numCols","adjMatrix","col","row","setRowXYZW","setScissor","SSM","VSM","ESM","PCFPD","PCFOPT","getType"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { ShadowImpl } from './shadow_impl.js';
2
2
  import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
3
- import { ShadowMapper } from './shadowmapper.js';
4
- import { Application } from '../app.js';
5
3
  import { LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT } from '../values.js';
6
4
  import { computeShadowMapDepth } from '../shaders/shadow.js';
7
5
  import { ShaderHelper } from '../material/shader/helper.js';
6
+ import { computeShadowBiasCSM, computeShadowBias } from './shader.js';
7
+ import { getDevice } from '../app/api.js';
8
8
 
9
9
  /** @internal */ class SSM extends ShadowImpl {
10
10
  static instance = new SSM();
@@ -17,7 +17,7 @@ import { ShaderHelper } from '../material/shader/helper.js';
17
17
  getType() {
18
18
  return 'hard';
19
19
  }
20
- getShadowMapBorder(shadowMapParams) {
20
+ getShadowMapBorder(_shadowMapParams) {
21
21
  return 0;
22
22
  }
23
23
  getShadowMap(shadowMapParams) {
@@ -28,11 +28,10 @@ import { ShaderHelper } from '../material/shader/helper.js';
28
28
  shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(this.useNativeShadowMap(shadowMapParams)) || null;
29
29
  }
30
30
  postRenderShadowMap() {}
31
- releaseTemporalResources(shadowMapParams) {}
32
31
  getDepthScale() {
33
32
  return 1;
34
33
  }
35
- setDepthScale(val) {}
34
+ setDepthScale(_val) {}
36
35
  getShaderHash() {
37
36
  return '';
38
37
  }
@@ -40,7 +39,7 @@ import { ShaderHelper } from '../material/shader/helper.js';
40
39
  if (this.useNativeShadowMap(shadowMapParams)) {
41
40
  return null;
42
41
  } else {
43
- const device = Application.instance.device;
42
+ const device = getDevice();
44
43
  if (device.type === 'webgl') {
45
44
  return device.getDeviceCaps().textureCaps.supportFloatColorBuffer ? 'rgba32f' : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer ? 'rgba16f' : 'rgba8unorm';
46
45
  } else {
@@ -48,8 +47,8 @@ import { ShaderHelper } from '../material/shader/helper.js';
48
47
  }
49
48
  }
50
49
  }
51
- getShadowMapDepthFormat(shadowMapParams) {
52
- return Application.instance.device.type === 'webgl' ? 'd24s8' : 'd32f';
50
+ getShadowMapDepthFormat(_shadowMapParams) {
51
+ return getDevice().type === 'webgl' ? 'd24s8' : 'd32f';
53
52
  }
54
53
  computeShadowMapDepth(shadowMapParams, scope, worldPos) {
55
54
  return computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap.format);
@@ -69,7 +68,7 @@ import { ShaderHelper } from '../material/shader/helper.js';
69
68
  this.$l.inShadow = pb.all(pb.bvec2(pb.all(pb.bvec4(pb.greaterThanEqual(this.shadowCoord.x, 0), pb.lessThanEqual(this.shadowCoord.x, 1), pb.greaterThanEqual(this.shadowCoord.y, 0), pb.lessThanEqual(this.shadowCoord.y, 1))), pb.lessThanEqual(this.shadowCoord.z, 1)));
70
69
  this.$l.shadow = pb.float(1);
71
70
  this.$if(this.inShadow, function() {
72
- this.$l.shadowBias = ShadowMapper.computeShadowBiasCSM(shadowMapParams, this, this.NdotL, this.split);
71
+ this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);
73
72
  this.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);
74
73
  if (that.useNativeShadowMap(shadowMapParams)) {
75
74
  if (shadowMapParams.shadowMap.isTexture2DArray()) {
@@ -108,11 +107,11 @@ import { ShaderHelper } from '../material/shader/helper.js';
108
107
  this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;
109
108
  this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));
110
109
  this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);
111
- this.$l.shadowBias = ShadowMapper.computeShadowBias(shadowMapParams, this, pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w), this.NdotL, true);
110
+ this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w), this.NdotL, true);
112
111
  this.$return(pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.dir, pb.sub(this.distance, this.shadowBias)));
113
112
  } else {
114
113
  this.$l.distance = pb.div(pb.length(this.dir), ShaderHelper.getLightPositionAndRangeForShadow(this).w);
115
- this.$l.shadowBias = ShadowMapper.computeShadowBias(shadowMapParams, this, this.distance, this.NdotL, true);
114
+ this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, this.distance, this.NdotL, true);
116
115
  this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.dir, 0);
117
116
  if (!floatDepthTexture) {
118
117
  this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);
@@ -127,16 +126,16 @@ import { ShaderHelper } from '../material/shader/helper.js';
127
126
  this.$l.shadow = pb.float(1);
128
127
  this.$if(this.inShadow, function() {
129
128
  if (that.useNativeShadowMap(shadowMapParams)) {
130
- this.$l.shadowBias = ShadowMapper.computeShadowBias(shadowMapParams, this, this.shadowCoord.z, this.NdotL, false);
129
+ this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, this.shadowCoord.z, this.NdotL, false);
131
130
  this.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);
132
131
  this.shadow = pb.textureSampleCompareLevel(ShaderHelper.getShadowMap(this), this.shadowCoord.xy, this.shadowCoord.z);
133
132
  } else {
134
133
  if (shadowMapParams.lightType === LIGHT_TYPE_SPOT) {
135
134
  this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;
136
135
  this.shadowCoord.z = ShaderHelper.nonLinearDepthToLinearNormalized(this, this.shadowCoord.z, this.nearFar);
137
- this.$l.shadowBias = ShadowMapper.computeShadowBias(shadowMapParams, this, this.shadowCoord.z, this.NdotL, true);
136
+ this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, this.shadowCoord.z, this.NdotL, true);
138
137
  } else {
139
- this.$l.shadowBias = ShadowMapper.computeShadowBias(shadowMapParams, this, this.shadowCoord.z, this.NdotL, false);
138
+ this.$l.shadowBias = computeShadowBias(shadowMapParams.lightType, this, this.shadowCoord.z, this.NdotL, false);
140
139
  }
141
140
  this.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);
142
141
  this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.shadowCoord.xy, 0);
@@ -151,8 +150,8 @@ import { ShaderHelper } from '../material/shader/helper.js';
151
150
  });
152
151
  return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL);
153
152
  }
154
- useNativeShadowMap(shadowMapParams) {
155
- return Application.instance.device.type !== 'webgl';
153
+ useNativeShadowMap(_shadowMapParams) {
154
+ return getDevice().type !== 'webgl';
156
155
  }
157
156
  }
158
157
 
@@ -1 +1 @@
1
- {"version":3,"file":"ssm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ssm.js","sources":["../../src/shadow/ssm.ts"],"sourcesContent":["import type { TextureFormat, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport type { ShadowMapParams, ShadowMapType, ShadowMode } from './shadowmapper';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT } from '../values';\r\nimport { computeShadowMapDepth } from '../shaders/shadow';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { computeShadowBias, computeShadowBiasCSM } from './shader';\r\nimport { getDevice } from '../app/api';\r\n\r\n/** @internal */\r\nexport class SSM extends ShadowImpl {\r\n static instance = new SSM();\r\n constructor() {\r\n super();\r\n }\r\n resourceDirty(): boolean {\r\n return false;\r\n }\r\n getType(): ShadowMode {\r\n return 'hard';\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams): number {\r\n return 0;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams): ShadowMapType {\r\n return (\r\n this.useNativeShadowMap(shadowMapParams)\r\n ? shadowMapParams.shadowMapFramebuffer.getDepthAttachment()\r\n : shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler =\r\n shadowMapParams.shadowMap?.getDefaultSampler(this.useNativeShadowMap(shadowMapParams)) || null;\r\n }\r\n postRenderShadowMap() {}\r\n getDepthScale(): number {\r\n return 1;\r\n }\r\n setDepthScale(_val: number) {}\r\n getShaderHash(): string {\r\n return '';\r\n }\r\n getShadowMapColorFormat(shadowMapParams: ShadowMapParams): TextureFormat {\r\n if (this.useNativeShadowMap(shadowMapParams)) {\r\n return null;\r\n } else {\r\n const device = getDevice();\r\n if (device.type === 'webgl') {\r\n return device.getDeviceCaps().textureCaps.supportFloatColorBuffer\r\n ? 'rgba32f'\r\n : device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\r\n ? 'rgba16f'\r\n : 'rgba8unorm';\r\n } else {\r\n return 'r32f';\r\n }\r\n }\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n return getDevice().type === 'webgl' ? 'd24s8' : 'd32f';\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ): PBShaderExp {\r\n return computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap.format);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ): PBShaderExp {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n const floatDepthTexture = shadowMapParams.shadowMap.format !== 'rgba8unorm';\r\n this.$l.shadowCoord = pb.div(this.shadowVertex.xyz, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord.xyz, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.$l.shadowBias = computeShadowBiasCSM(this, this.NdotL, this.split);\r\n this.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n if (that.useNativeShadowMap(shadowMapParams)) {\r\n if (shadowMapParams.shadowMap.isTexture2DArray()) {\r\n this.shadow = pb.textureArraySampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowCoord.xy,\r\n this.split,\r\n this.shadowCoord.z\r\n );\r\n } else {\r\n this.shadow = pb.textureSampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowCoord.xy,\r\n this.shadowCoord.z\r\n );\r\n }\r\n } else {\r\n if (shadowMapParams.shadowMap.isTexture2DArray()) {\r\n this.$l.shadowTex = pb.textureArraySampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowCoord.xy,\r\n this.split,\r\n 0\r\n );\r\n } else {\r\n this.$l.shadowTex = pb.textureSampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowCoord.xy,\r\n 0\r\n );\r\n }\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.shadow = pb.step(this.shadowCoord.z, this.shadowTex.x);\r\n }\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split);\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ): PBShaderExp {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n const floatDepthTexture = shadowMapParams.shadowMap.format !== 'rgba8unorm';\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.$l.maxZ = pb.max(pb.max(pb.abs(this.dir.x), pb.abs(this.dir.y)), pb.abs(this.dir.z));\r\n this.$l.distance = ShaderHelper.linearDepthToNonLinear(this, this.maxZ, this.nearFar);\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n pb.div(this.maxZ, ShaderHelper.getLightPositionAndRangeForShadow(this).w),\r\n this.NdotL,\r\n true\r\n );\r\n this.$return(\r\n pb.textureSampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.dir,\r\n pb.sub(this.distance, this.shadowBias)\r\n )\r\n );\r\n } else {\r\n this.$l.distance = pb.div(\r\n pb.length(this.dir),\r\n ShaderHelper.getLightPositionAndRangeForShadow(this).w\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.distance,\r\n this.NdotL,\r\n true\r\n );\r\n this.$l.shadowTex = pb.textureSampleLevel(ShaderHelper.getShadowMap(this), this.dir, 0);\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.distance = pb.sub(this.distance, this.shadowBias);\r\n this.$return(pb.step(this.distance, this.shadowTex.x));\r\n }\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex.xyz, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord.xyz, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n if (that.useNativeShadowMap(shadowMapParams)) {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n this.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.shadow = pb.textureSampleCompareLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowCoord.xy,\r\n this.shadowCoord.z\r\n );\r\n } else {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_SPOT) {\r\n this.$l.nearFar = ShaderHelper.getShadowCameraParams(this).xy;\r\n this.shadowCoord.z = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.shadowCoord.z,\r\n this.nearFar\r\n );\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n true\r\n );\r\n } else {\r\n this.$l.shadowBias = computeShadowBias(\r\n shadowMapParams.lightType,\r\n this,\r\n this.shadowCoord.z,\r\n this.NdotL,\r\n false\r\n );\r\n }\r\n this.shadowCoord.z = pb.sub(this.shadowCoord.z, this.shadowBias);\r\n this.$l.shadowTex = pb.textureSampleLevel(\r\n ShaderHelper.getShadowMap(this),\r\n this.shadowCoord.xy,\r\n 0\r\n );\r\n if (!floatDepthTexture) {\r\n this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);\r\n }\r\n this.shadow = pb.step(this.shadowCoord.z, this.shadowTex.x);\r\n }\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL);\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams): boolean {\r\n return getDevice().type !== 'webgl';\r\n }\r\n}\r\n"],"names":["SSM","ShadowImpl","instance","resourceDirty","getType","getShadowMapBorder","_shadowMapParams","getShadowMap","shadowMapParams","useNativeShadowMap","shadowMapFramebuffer","getDepthAttachment","getColorAttachments","doUpdateResources","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","getDepthScale","setDepthScale","_val","getShaderHash","getShadowMapColorFormat","device","getDevice","type","getDeviceCaps","textureCaps","supportFloatColorBuffer","supportHalfFloatColorBuffer","getShadowMapDepthFormat","computeShadowMapDepth","scope","worldPos","format","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","pb","$builder","that","func","vec4","float","int","floatDepthTexture","$l","shadowCoord","div","xyz","w","add","mul","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","z","shadow","$if","shadowBias","computeShadowBiasCSM","sub","isTexture2DArray","textureArraySampleCompareLevel","ShaderHelper","xy","textureSampleCompareLevel","shadowTex","textureArraySampleLevel","textureSampleLevel","decodeNormalizedFloatFromRGBA","step","$return","getGlobalScope","computeShadow","funcNameComputeShadow","lightType","LIGHT_TYPE_POINT","dir","getLightPositionAndRangeForShadow","nearFar","getShadowCameraParams","maxZ","max","abs","distance","linearDepthToNonLinear","computeShadowBias","length","LIGHT_TYPE_SPOT","nonLinearDepthToLinearNormalized"],"mappings":"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"}