@zephyr3d/scene 0.9.4 → 0.9.6

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 (517) hide show
  1. package/dist/animation/animationmask.js +224 -0
  2. package/dist/animation/animationmask.js.map +1 -0
  3. package/dist/animation/animationset.js +268 -67
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js.map +1 -1
  6. package/dist/animation/eulerrotationtrack.js +3 -0
  7. package/dist/animation/eulerrotationtrack.js.map +1 -1
  8. package/dist/animation/fixed_geometry_cache_track.js +7 -0
  9. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  10. package/dist/animation/ik_modifier.js.map +1 -1
  11. package/dist/animation/joint_dynamics/collision.js +6 -4
  12. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  13. package/dist/animation/joint_dynamics/controller.js +390 -43
  14. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  15. package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
  16. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  17. package/dist/animation/joint_dynamics/solver.js +4 -3
  18. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  19. package/dist/animation/joint_dynamics/types.js.map +1 -1
  20. package/dist/animation/joint_dynamics_modifier.js +2 -0
  21. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  22. package/dist/animation/morphtarget.js +3 -72
  23. package/dist/animation/morphtarget.js.map +1 -1
  24. package/dist/animation/morphtrack.js +3 -0
  25. package/dist/animation/morphtrack.js.map +1 -1
  26. package/dist/animation/pca_geometry_cache_track.js +3 -0
  27. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  28. package/dist/animation/proptrack.js +3 -0
  29. package/dist/animation/proptrack.js.map +1 -1
  30. package/dist/animation/rotationtrack.js +3 -0
  31. package/dist/animation/rotationtrack.js.map +1 -1
  32. package/dist/animation/scaletrack.js +3 -0
  33. package/dist/animation/scaletrack.js.map +1 -1
  34. package/dist/animation/skeleton.js +254 -79
  35. package/dist/animation/skeleton.js.map +1 -1
  36. package/dist/animation/skeleton_modifier.js.map +1 -1
  37. package/dist/animation/spring_modifier.js.map +1 -1
  38. package/dist/animation/translationtrack.js +3 -0
  39. package/dist/animation/translationtrack.js.map +1 -1
  40. package/dist/app/engine.js +171 -107
  41. package/dist/app/engine.js.map +1 -1
  42. package/dist/app/scriptregistry.js +251 -80
  43. package/dist/app/scriptregistry.js.map +1 -1
  44. package/dist/asset/assetmanager.js +344 -365
  45. package/dist/asset/assetmanager.js.map +1 -1
  46. package/dist/asset/loaders/loader.js +1 -6
  47. package/dist/asset/loaders/loader.js.map +1 -1
  48. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
  49. package/dist/asset/model.js +1000 -131
  50. package/dist/asset/model.js.map +1 -1
  51. package/dist/avatar/wardrobe.js +474 -0
  52. package/dist/avatar/wardrobe.js.map +1 -0
  53. package/dist/index.d.ts +1126 -199
  54. package/dist/index.js +3 -2
  55. package/dist/index.js.map +1 -1
  56. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
  57. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  58. package/dist/material/mixins/pbr/common.js +72 -15
  59. package/dist/material/mixins/pbr/common.js.map +1 -1
  60. package/dist/material/msdf_text.js +3 -3
  61. package/dist/material/msdf_text.js.map +1 -1
  62. package/dist/material/msdf_text_sprite.js +4 -4
  63. package/dist/material/msdf_text_sprite.js.map +1 -1
  64. package/dist/material/pbrblueprint.js +102 -102
  65. package/dist/material/pbrblueprint.js.map +1 -1
  66. package/dist/render/envlight.js +54 -1
  67. package/dist/render/envlight.js.map +1 -1
  68. package/dist/render/sky.js +9 -0
  69. package/dist/render/sky.js.map +1 -1
  70. package/dist/scene/batchgroup.js +11 -13
  71. package/dist/scene/batchgroup.js.map +1 -1
  72. package/dist/scene/environment.js +15 -2
  73. package/dist/scene/environment.js.map +1 -1
  74. package/dist/scene/mesh.js +79 -16
  75. package/dist/scene/mesh.js.map +1 -1
  76. package/dist/scene/scene.js +1 -0
  77. package/dist/scene/scene.js.map +1 -1
  78. package/dist/scene/scene_node.js +203 -2
  79. package/dist/scene/scene_node.js.map +1 -1
  80. package/dist/text/font/cff_font.js +890 -0
  81. package/dist/text/font/cff_font.js.map +1 -0
  82. package/dist/text/font/font_asset.js +17 -3
  83. package/dist/text/font/font_asset.js.map +1 -1
  84. package/dist/text/msdf/generator.js.map +1 -1
  85. package/dist/text/msdf/shape.js +4 -1
  86. package/dist/text/msdf/shape.js.map +1 -1
  87. package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
  88. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
  89. package/dist/utility/blueprint/material/inputs.js +1157 -1154
  90. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  91. package/dist/utility/bounding_volume.js.map +1 -1
  92. package/dist/utility/pmrem.js +34 -8
  93. package/dist/utility/pmrem.js.map +1 -1
  94. package/dist/utility/serialization/manager.js +22 -9
  95. package/dist/utility/serialization/manager.js.map +1 -1
  96. package/dist/utility/serialization/scene/animation.js +700 -7
  97. package/dist/utility/serialization/scene/animation.js.map +1 -1
  98. package/dist/utility/serialization/scene/mesh.js +64 -4
  99. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  100. package/dist/utility/serialization/scene/node.js +187 -8
  101. package/dist/utility/serialization/scene/node.js.map +1 -1
  102. package/dist/utility/serialization/types.js.map +1 -1
  103. package/dist/utility/textures/sheenlut.js +138 -0
  104. package/dist/utility/textures/sheenlut.js.map +1 -0
  105. package/package.json +2 -2
  106. package/dist/animation/ik/ik_chain_builder.js +0 -68
  107. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  108. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  109. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  110. package/dist/animation/ik/ik_track.js +0 -96
  111. package/dist/animation/ik/ik_track.js.map +0 -1
  112. package/dist/animation/ik_postprocessor.js +0 -71
  113. package/dist/animation/ik_postprocessor.js.map +0 -1
  114. package/dist/animation/joint_dynamics/math.js +0 -16
  115. package/dist/animation/joint_dynamics/math.js.map +0 -1
  116. package/dist/animation/manual_transform_processor.js +0 -156
  117. package/dist/animation/manual_transform_processor.js.map +0 -1
  118. package/dist/animation/skeleton_postprocessor.js +0 -50
  119. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  120. package/dist/animation/spring2/collision.js +0 -469
  121. package/dist/animation/spring2/collision.js.map +0 -1
  122. package/dist/animation/spring2/constraints.js +0 -329
  123. package/dist/animation/spring2/constraints.js.map +0 -1
  124. package/dist/animation/spring2/controller.js +0 -434
  125. package/dist/animation/spring2/controller.js.map +0 -1
  126. package/dist/animation/spring2/math.js +0 -16
  127. package/dist/animation/spring2/math.js.map +0 -1
  128. package/dist/animation/spring2/solver.js +0 -624
  129. package/dist/animation/spring2/solver.js.map +0 -1
  130. package/dist/animation/spring2/spring_system.js +0 -118
  131. package/dist/animation/spring2/spring_system.js.map +0 -1
  132. package/dist/animation/spring2/types.js +0 -19
  133. package/dist/animation/spring2/types.js.map +0 -1
  134. package/dist/animation/spring_postprocessor.js +0 -54
  135. package/dist/animation/spring_postprocessor.js.map +0 -1
  136. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1273
  137. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  138. package/dist/asset/loaders/gltf/helpers.js +0 -331
  139. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  140. package/dist/material/sprite3d.js +0 -301
  141. package/dist/material/sprite3d.js.map +0 -1
  142. package/dist/material/sprite3d_std.js +0 -116
  143. package/dist/material/sprite3d_std.js.map +0 -1
  144. package/dist/material/sprite3dblueprint.js +0 -235
  145. package/dist/material/sprite3dblueprint.js.map +0 -1
  146. package/dist/material/sprite_sdf.js +0 -106
  147. package/dist/material/sprite_sdf.js.map +0 -1
  148. package/dist/material/terrainmaterial.js +0 -368
  149. package/dist/material/terrainmaterial.js.map +0 -1
  150. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  151. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  152. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  153. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  154. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  155. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  156. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  157. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  158. package/dist/render/deferredlightpass.js +0 -510
  159. package/dist/render/deferredlightpass.js.map +0 -1
  160. package/dist/render/deferredshadowlightpass.js +0 -428
  161. package/dist/render/deferredshadowlightpass.js.map +0 -1
  162. package/dist/render/gbufferpass.js +0 -50
  163. package/dist/render/gbufferpass.js.map +0 -1
  164. package/dist/scene/sdftextsprite.js +0 -322
  165. package/dist/scene/sdftextsprite.js.map +0 -1
  166. package/dist/scene/sprite3d.js +0 -18
  167. package/dist/scene/sprite3d.js.map +0 -1
  168. package/dist/scene/terrain/grass.js +0 -280
  169. package/dist/scene/terrain/grass.js.map +0 -1
  170. package/dist/scene/terrain/heightfield.js +0 -475
  171. package/dist/scene/terrain/heightfield.js.map +0 -1
  172. package/dist/scene/terrain/patch.js +0 -532
  173. package/dist/scene/terrain/patch.js.map +0 -1
  174. package/dist/scene/terrain/quadtree.js +0 -461
  175. package/dist/scene/terrain/quadtree.js.map +0 -1
  176. package/dist/scene/terrain/terrain.js +0 -231
  177. package/dist/scene/terrain/terrain.js.map +0 -1
  178. package/dist/src/animation/animation.js +0 -127
  179. package/dist/src/animation/animation.js.map +0 -1
  180. package/dist/src/animation/animationset.js +0 -255
  181. package/dist/src/animation/animationset.js.map +0 -1
  182. package/dist/src/animation/animationtrack.js +0 -34
  183. package/dist/src/animation/animationtrack.js.map +0 -1
  184. package/dist/src/animation/eulerrotationtrack.js +0 -52
  185. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  186. package/dist/src/animation/morphtarget.js +0 -93
  187. package/dist/src/animation/morphtarget.js.map +0 -1
  188. package/dist/src/animation/morphtrack.js +0 -70
  189. package/dist/src/animation/morphtrack.js.map +0 -1
  190. package/dist/src/animation/proptrack.js +0 -161
  191. package/dist/src/animation/proptrack.js.map +0 -1
  192. package/dist/src/animation/rotationtrack.js +0 -51
  193. package/dist/src/animation/rotationtrack.js.map +0 -1
  194. package/dist/src/animation/scaletrack.js +0 -50
  195. package/dist/src/animation/scaletrack.js.map +0 -1
  196. package/dist/src/animation/skeleton.js +0 -204
  197. package/dist/src/animation/skeleton.js.map +0 -1
  198. package/dist/src/animation/translationtrack.js +0 -50
  199. package/dist/src/animation/translationtrack.js.map +0 -1
  200. package/dist/src/app/app.js +0 -129
  201. package/dist/src/app/app.js.map +0 -1
  202. package/dist/src/app/inputmgr.js +0 -267
  203. package/dist/src/app/inputmgr.js.map +0 -1
  204. package/dist/src/asset/assetmanager.js +0 -404
  205. package/dist/src/asset/assetmanager.js.map +0 -1
  206. package/dist/src/asset/builtin.js +0 -337
  207. package/dist/src/asset/builtin.js.map +0 -1
  208. package/dist/src/asset/loaders/dds/dds.js +0 -470
  209. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  210. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  211. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  212. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  213. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  214. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  215. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  216. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  217. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  218. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  219. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  220. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  221. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  222. package/dist/src/asset/loaders/loader.js +0 -45
  223. package/dist/src/asset/loaders/loader.js.map +0 -1
  224. package/dist/src/asset/model.js +0 -414
  225. package/dist/src/asset/model.js.map +0 -1
  226. package/dist/src/blitter/bilateralblur.js +0 -221
  227. package/dist/src/blitter/bilateralblur.js.map +0 -1
  228. package/dist/src/blitter/blitter.js +0 -390
  229. package/dist/src/blitter/blitter.js.map +0 -1
  230. package/dist/src/blitter/box.js +0 -118
  231. package/dist/src/blitter/box.js.map +0 -1
  232. package/dist/src/blitter/copy.js +0 -22
  233. package/dist/src/blitter/copy.js.map +0 -1
  234. package/dist/src/blitter/gaussianblur.js +0 -228
  235. package/dist/src/blitter/gaussianblur.js.map +0 -1
  236. package/dist/src/camera/base.js +0 -92
  237. package/dist/src/camera/base.js.map +0 -1
  238. package/dist/src/camera/camera.js +0 -1005
  239. package/dist/src/camera/camera.js.map +0 -1
  240. package/dist/src/camera/fps.js +0 -238
  241. package/dist/src/camera/fps.js.map +0 -1
  242. package/dist/src/camera/orbit.js +0 -245
  243. package/dist/src/camera/orbit.js.map +0 -1
  244. package/dist/src/camera/orthocamera.js +0 -167
  245. package/dist/src/camera/orthocamera.js.map +0 -1
  246. package/dist/src/camera/perspectivecamera.js +0 -141
  247. package/dist/src/camera/perspectivecamera.js.map +0 -1
  248. package/dist/src/index.js +0 -120
  249. package/dist/src/index.js.map +0 -1
  250. package/dist/src/material/blinn.js +0 -81
  251. package/dist/src/material/blinn.js.map +0 -1
  252. package/dist/src/material/grassmaterial.js +0 -113
  253. package/dist/src/material/grassmaterial.js.map +0 -1
  254. package/dist/src/material/lambert.js +0 -92
  255. package/dist/src/material/lambert.js.map +0 -1
  256. package/dist/src/material/material.js +0 -301
  257. package/dist/src/material/material.js.map +0 -1
  258. package/dist/src/material/meshmaterial.js +0 -704
  259. package/dist/src/material/meshmaterial.js.map +0 -1
  260. package/dist/src/material/mixins/albedocolor.js +0 -76
  261. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  262. package/dist/src/material/mixins/foliage.js +0 -47
  263. package/dist/src/material/mixins/foliage.js.map +0 -1
  264. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  265. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  266. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  267. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  268. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  269. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  270. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  271. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  272. package/dist/src/material/mixins/lit.js +0 -476
  273. package/dist/src/material/mixins/lit.js.map +0 -1
  274. package/dist/src/material/mixins/pbr/common.js +0 -918
  275. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  276. package/dist/src/material/mixins/texture.js +0 -172
  277. package/dist/src/material/mixins/texture.js.map +0 -1
  278. package/dist/src/material/mixins/vertexcolor.js +0 -56
  279. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  280. package/dist/src/material/particle.js +0 -178
  281. package/dist/src/material/particle.js.map +0 -1
  282. package/dist/src/material/pbrmr.js +0 -97
  283. package/dist/src/material/pbrmr.js.map +0 -1
  284. package/dist/src/material/pbrsg.js +0 -97
  285. package/dist/src/material/pbrsg.js.map +0 -1
  286. package/dist/src/material/shader/helper.js +0 -1209
  287. package/dist/src/material/shader/helper.js.map +0 -1
  288. package/dist/src/material/terrain-cm.js +0 -606
  289. package/dist/src/material/terrain-cm.js.map +0 -1
  290. package/dist/src/material/terrainmaterial.js +0 -375
  291. package/dist/src/material/terrainmaterial.js.map +0 -1
  292. package/dist/src/material/unlit.js +0 -41
  293. package/dist/src/material/unlit.js.map +0 -1
  294. package/dist/src/material/water.js +0 -417
  295. package/dist/src/material/water.js.map +0 -1
  296. package/dist/src/posteffect/bloom.js +0 -361
  297. package/dist/src/posteffect/bloom.js.map +0 -1
  298. package/dist/src/posteffect/compositor.js +0 -226
  299. package/dist/src/posteffect/compositor.js.map +0 -1
  300. package/dist/src/posteffect/fxaa.js +0 -273
  301. package/dist/src/posteffect/fxaa.js.map +0 -1
  302. package/dist/src/posteffect/grayscale.js +0 -69
  303. package/dist/src/posteffect/grayscale.js.map +0 -1
  304. package/dist/src/posteffect/motionblur.js +0 -96
  305. package/dist/src/posteffect/motionblur.js.map +0 -1
  306. package/dist/src/posteffect/posteffect.js +0 -126
  307. package/dist/src/posteffect/posteffect.js.map +0 -1
  308. package/dist/src/posteffect/sao.js +0 -324
  309. package/dist/src/posteffect/sao.js.map +0 -1
  310. package/dist/src/posteffect/ssr.js +0 -489
  311. package/dist/src/posteffect/ssr.js.map +0 -1
  312. package/dist/src/posteffect/taa.js +0 -172
  313. package/dist/src/posteffect/taa.js.map +0 -1
  314. package/dist/src/posteffect/tonemap.js +0 -94
  315. package/dist/src/posteffect/tonemap.js.map +0 -1
  316. package/dist/src/render/abuffer_oit.js +0 -361
  317. package/dist/src/render/abuffer_oit.js.map +0 -1
  318. package/dist/src/render/clipmap.js +0 -851
  319. package/dist/src/render/clipmap.js.map +0 -1
  320. package/dist/src/render/cluster_light.js +0 -333
  321. package/dist/src/render/cluster_light.js.map +0 -1
  322. package/dist/src/render/cull_visitor.js +0 -187
  323. package/dist/src/render/cull_visitor.js.map +0 -1
  324. package/dist/src/render/depthpass.js +0 -68
  325. package/dist/src/render/depthpass.js.map +0 -1
  326. package/dist/src/render/drawable_mixin.js +0 -227
  327. package/dist/src/render/drawable_mixin.js.map +0 -1
  328. package/dist/src/render/envlight.js +0 -463
  329. package/dist/src/render/envlight.js.map +0 -1
  330. package/dist/src/render/fbm_wavegenerator.js +0 -251
  331. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  332. package/dist/src/render/fft_wavegenerator.js +0 -1006
  333. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  334. package/dist/src/render/fullscreenquad.js +0 -38
  335. package/dist/src/render/fullscreenquad.js.map +0 -1
  336. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  337. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  338. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  339. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  340. package/dist/src/render/hzb.js +0 -273
  341. package/dist/src/render/hzb.js.map +0 -1
  342. package/dist/src/render/lightpass.js +0 -172
  343. package/dist/src/render/lightpass.js.map +0 -1
  344. package/dist/src/render/objectcolorpass.js +0 -51
  345. package/dist/src/render/objectcolorpass.js.map +0 -1
  346. package/dist/src/render/primitive.js +0 -364
  347. package/dist/src/render/primitive.js.map +0 -1
  348. package/dist/src/render/render_queue.js +0 -467
  349. package/dist/src/render/render_queue.js.map +0 -1
  350. package/dist/src/render/renderbundle_wrapper.js +0 -152
  351. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  352. package/dist/src/render/renderer.js +0 -455
  353. package/dist/src/render/renderer.js.map +0 -1
  354. package/dist/src/render/renderpass.js +0 -200
  355. package/dist/src/render/renderpass.js.map +0 -1
  356. package/dist/src/render/shadowmap_pass.js +0 -56
  357. package/dist/src/render/shadowmap_pass.js.map +0 -1
  358. package/dist/src/render/sky.js +0 -1103
  359. package/dist/src/render/sky.js.map +0 -1
  360. package/dist/src/render/weightedblended_oit.js +0 -168
  361. package/dist/src/render/weightedblended_oit.js.map +0 -1
  362. package/dist/src/scene/batchgroup.js +0 -162
  363. package/dist/src/scene/batchgroup.js.map +0 -1
  364. package/dist/src/scene/environment.js +0 -209
  365. package/dist/src/scene/environment.js.map +0 -1
  366. package/dist/src/scene/graph_node.js +0 -72
  367. package/dist/src/scene/graph_node.js.map +0 -1
  368. package/dist/src/scene/light.js +0 -416
  369. package/dist/src/scene/light.js.map +0 -1
  370. package/dist/src/scene/mesh.js +0 -341
  371. package/dist/src/scene/mesh.js.map +0 -1
  372. package/dist/src/scene/octree.js +0 -649
  373. package/dist/src/scene/octree.js.map +0 -1
  374. package/dist/src/scene/particlesys.js +0 -738
  375. package/dist/src/scene/particlesys.js.map +0 -1
  376. package/dist/src/scene/raycast_visitor.js +0 -103
  377. package/dist/src/scene/raycast_visitor.js.map +0 -1
  378. package/dist/src/scene/scene.js +0 -284
  379. package/dist/src/scene/scene.js.map +0 -1
  380. package/dist/src/scene/scene_node.js +0 -732
  381. package/dist/src/scene/scene_node.js.map +0 -1
  382. package/dist/src/scene/terrain/grass.js +0 -278
  383. package/dist/src/scene/terrain/grass.js.map +0 -1
  384. package/dist/src/scene/terrain/heightfield.js +0 -475
  385. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  386. package/dist/src/scene/terrain/patch.js +0 -530
  387. package/dist/src/scene/terrain/patch.js.map +0 -1
  388. package/dist/src/scene/terrain/quadtree.js +0 -461
  389. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  390. package/dist/src/scene/terrain/terrain.js +0 -246
  391. package/dist/src/scene/terrain/terrain.js.map +0 -1
  392. package/dist/src/scene/terrain-cm/grass.js +0 -594
  393. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  394. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  395. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  396. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  397. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  398. package/dist/src/scene/water.js +0 -374
  399. package/dist/src/scene/water.js.map +0 -1
  400. package/dist/src/shaders/atmosphere.js +0 -957
  401. package/dist/src/shaders/atmosphere.js.map +0 -1
  402. package/dist/src/shaders/fog.js +0 -112
  403. package/dist/src/shaders/fog.js.map +0 -1
  404. package/dist/src/shaders/misc.js +0 -266
  405. package/dist/src/shaders/misc.js.map +0 -1
  406. package/dist/src/shaders/noise.js +0 -222
  407. package/dist/src/shaders/noise.js.map +0 -1
  408. package/dist/src/shaders/pbr.js +0 -51
  409. package/dist/src/shaders/pbr.js.map +0 -1
  410. package/dist/src/shaders/shadow.js +0 -636
  411. package/dist/src/shaders/shadow.js.map +0 -1
  412. package/dist/src/shaders/ssr.js +0 -490
  413. package/dist/src/shaders/ssr.js.map +0 -1
  414. package/dist/src/shaders/temporal.js +0 -215
  415. package/dist/src/shaders/temporal.js.map +0 -1
  416. package/dist/src/shaders/water.js +0 -756
  417. package/dist/src/shaders/water.js.map +0 -1
  418. package/dist/src/shadow/esm.js +0 -237
  419. package/dist/src/shadow/esm.js.map +0 -1
  420. package/dist/src/shadow/pcf_opt.js +0 -181
  421. package/dist/src/shadow/pcf_opt.js.map +0 -1
  422. package/dist/src/shadow/pcf_pd.js +0 -189
  423. package/dist/src/shadow/pcf_pd.js.map +0 -1
  424. package/dist/src/shadow/shader.js +0 -37
  425. package/dist/src/shadow/shader.js.map +0 -1
  426. package/dist/src/shadow/shadow_impl.js +0 -15
  427. package/dist/src/shadow/shadow_impl.js.map +0 -1
  428. package/dist/src/shadow/shadowmapper.js +0 -790
  429. package/dist/src/shadow/shadowmapper.js.map +0 -1
  430. package/dist/src/shadow/ssm.js +0 -159
  431. package/dist/src/shadow/ssm.js.map +0 -1
  432. package/dist/src/shadow/vsm.js +0 -297
  433. package/dist/src/shadow/vsm.js.map +0 -1
  434. package/dist/src/shapes/box.js +0 -386
  435. package/dist/src/shapes/box.js.map +0 -1
  436. package/dist/src/shapes/cylinder.js +0 -125
  437. package/dist/src/shapes/cylinder.js.map +0 -1
  438. package/dist/src/shapes/plane.js +0 -88
  439. package/dist/src/shapes/plane.js.map +0 -1
  440. package/dist/src/shapes/shape.js +0 -87
  441. package/dist/src/shapes/shape.js.map +0 -1
  442. package/dist/src/shapes/sphere.js +0 -114
  443. package/dist/src/shapes/sphere.js.map +0 -1
  444. package/dist/src/shapes/tetrahedron.js +0 -188
  445. package/dist/src/shapes/tetrahedron.js.map +0 -1
  446. package/dist/src/shapes/torus.js +0 -111
  447. package/dist/src/shapes/torus.js.map +0 -1
  448. package/dist/src/utility/aabbtree.js +0 -400
  449. package/dist/src/utility/aabbtree.js.map +0 -1
  450. package/dist/src/utility/bounding_volume.js +0 -29
  451. package/dist/src/utility/bounding_volume.js.map +0 -1
  452. package/dist/src/utility/debug.js +0 -28
  453. package/dist/src/utility/debug.js.map +0 -1
  454. package/dist/src/utility/draco/decoder.js +0 -116
  455. package/dist/src/utility/draco/decoder.js.map +0 -1
  456. package/dist/src/utility/misc.js +0 -105
  457. package/dist/src/utility/misc.js.map +0 -1
  458. package/dist/src/utility/panorama.js +0 -163
  459. package/dist/src/utility/panorama.js.map +0 -1
  460. package/dist/src/utility/pmrem.js +0 -354
  461. package/dist/src/utility/pmrem.js.map +0 -1
  462. package/dist/src/utility/rendermipmap.js +0 -115
  463. package/dist/src/utility/rendermipmap.js.map +0 -1
  464. package/dist/src/utility/serialization/json.js +0 -402
  465. package/dist/src/utility/serialization/json.js.map +0 -1
  466. package/dist/src/utility/serialization/manager.js +0 -623
  467. package/dist/src/utility/serialization/manager.js.map +0 -1
  468. package/dist/src/utility/serialization/scene/animation.js +0 -248
  469. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  470. package/dist/src/utility/serialization/scene/batch.js +0 -59
  471. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  472. package/dist/src/utility/serialization/scene/camera.js +0 -790
  473. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  474. package/dist/src/utility/serialization/scene/common.js +0 -222
  475. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  476. package/dist/src/utility/serialization/scene/light.js +0 -575
  477. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  478. package/dist/src/utility/serialization/scene/material.js +0 -1111
  479. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  480. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  481. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  482. package/dist/src/utility/serialization/scene/misc.js +0 -39
  483. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  484. package/dist/src/utility/serialization/scene/node.js +0 -451
  485. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  486. package/dist/src/utility/serialization/scene/particle.js +0 -425
  487. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  488. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  489. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  490. package/dist/src/utility/serialization/scene/scene.js +0 -704
  491. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  492. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  493. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  494. package/dist/src/utility/serialization/scene/water.js +0 -465
  495. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  496. package/dist/src/utility/shprojector.js +0 -297
  497. package/dist/src/utility/shprojector.js.map +0 -1
  498. package/dist/src/utility/textures/ggxlut.js +0 -213
  499. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  500. package/dist/src/utility/textures/gradientnoise.js +0 -62
  501. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  502. package/dist/src/utility/textures/randomnoise.js +0 -41
  503. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  504. package/dist/src/values.js +0 -162
  505. package/dist/src/values.js.map +0 -1
  506. package/dist/utility/blueprint/material/common.js +0 -7
  507. package/dist/utility/blueprint/material/common.js.map +0 -1
  508. package/dist/utility/serialization/blueprint/constants.js +0 -255
  509. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  510. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  511. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  512. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  513. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  514. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  515. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  516. package/dist/utility/serialization/scene/spring_script.js +0 -596
  517. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"deferredlightpass.js","sources":["../../src/render/deferredlightpass.ts"],"sourcesContent":["import type { BindGroup, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getGGXLUT } from '../utility/textures/ggxlut';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { distributionGGX, fresnelSchlick, visGGX } from '../shaders/pbr';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT, MAX_CLUSTERED_LIGHTS } from '../values';\r\n\r\n/**\r\n * Deferred lighting pass scaffold.\r\n *\r\n * Stage-1 implementation simply resolves GBuffer color to the lighting target.\r\n * Follow-up will evaluate clustered lights using compact material attributes.\r\n * @internal\r\n */\r\nexport class DeferredLightPass {\r\n private static _programs: Record<string, GPUProgram> = {};\r\n private static _bindGroups: Record<string, BindGroup> = {};\r\n\r\n render(\r\n ctx: DrawContext,\r\n gbufferColor: Texture2D,\r\n gbufferRoughness: Texture2D,\r\n gbufferNormal: Texture2D,\r\n gbufferExtra: Texture2D\r\n ) {\r\n if (!ctx.clusteredLight?.lightBuffer || !ctx.clusteredLight.lightIndexTexture || !ctx.linearDepthTexture) {\r\n return;\r\n }\r\n const device = ctx.device;\r\n const hasEnvLight = !!ctx.env?.light?.envLight;\r\n const hasEnvRadiance = !!ctx.env?.light?.envLight?.hasRadiance();\r\n const hasEnvIrradiance = !!ctx.env?.light?.envLight?.hasIrradiance();\r\n const envHash = ctx.env?.light?.envLight ? ctx.env.light.getHash() : 'none';\r\n const hash = `${device.type}:${envHash}:clustered:env:${hasEnvLight ? 1 : 0}:rad:${\r\n hasEnvRadiance ? 1 : 0\r\n }:irr:${hasEnvIrradiance ? 1 : 0}`;\r\n let program = DeferredLightPass._programs[hash];\r\n if (!program) {\r\n const isWebGL = device.type === 'webgl';\r\n const builtProgram = device.buildRenderProgram({\r\n label: 'DeferredLightPass',\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.gbufferColorTex = pb.tex2D().uniform(0);\r\n this.gbufferRoughnessTex = pb.tex2D().uniform(0);\r\n this.gbufferNormalTex = pb.tex2D().uniform(0);\r\n this.gbufferExtraTex = pb.tex2D().uniform(0);\r\n this.linearDepthTex = pb.tex2D().uniform(0);\r\n this.zGGXLut = pb.tex2D().uniform(0);\r\n this.lightIndexTex = (isWebGL ? pb.tex2D() : pb.utex2D()).uniform(0);\r\n this.zLightBuffer = pb.vec4[(MAX_CLUSTERED_LIGHTS + 1) * 4]().uniformBuffer(0);\r\n this.clusterParams = pb.vec4().uniform(0);\r\n this.countParams = pb.ivec4().uniform(0);\r\n this.lightIndexTexSize = pb.ivec2().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.cameraRight = pb.vec3().uniform(0);\r\n this.cameraUp = pb.vec3().uniform(0);\r\n this.cameraForward = pb.vec3().uniform(0);\r\n this.cameraProj = pb.vec2().uniform(0); // x: tanHalfFovy, y: aspect\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.sunDir = pb.vec3().uniform(0);\r\n this.sunColorIntensity = pb.vec4().uniform(0);\r\n this.showGBuffer = pb.int().uniform(0);\r\n this.gbufferViewMode = pb.int().uniform(0);\r\n this.showCluster = pb.int().uniform(0);\r\n this.showShadowTerm = pb.int().uniform(0);\r\n this.showSpecTerm = pb.int().uniform(0);\r\n if (hasEnvLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n this.$outputs.color = pb.vec4();\r\n pb.func('zGetClusterIndex', [pb.float('linearDepth')], function () {\r\n this.$l.zTile = pb.int(\r\n pb.max(\r\n pb.add(pb.mul(pb.log2(pb.max(this.linearDepth, 1e-4)), this.clusterParams.z), this.clusterParams.w),\r\n 0\r\n )\r\n );\r\n this.zTile = pb.min(this.zTile, pb.sub(this.countParams.z, 1));\r\n this.$l.f = pb.vec2(this.$builtins.fragCoord.x, pb.sub(this.clusterParams.y, pb.add(this.$builtins.fragCoord.y, 1)));\r\n this.$l.xyTile = pb.ivec2(pb.div(this.f, pb.div(this.clusterParams.xy, pb.vec2(this.countParams.xy))));\r\n this.xyTile = pb.clamp(this.xyTile, pb.ivec2(0), pb.sub(this.countParams.xy, 1));\r\n this.$return(\r\n pb.add(\r\n this.xyTile.x,\r\n pb.mul(this.xyTile.y, this.countParams.x),\r\n pb.mul(this.zTile, this.countParams.x, this.countParams.y)\r\n )\r\n );\r\n });\r\n pb.func('zGetLinearDepth', [], function () {\r\n this.$l.depthSample = pb.textureSample(this.linearDepthTex, this.$inputs.uv);\r\n if (isWebGL) {\r\n this.$return(decodeNormalizedFloatFromRGBA(this, this.depthSample));\r\n } else {\r\n this.$return(this.depthSample.r);\r\n }\r\n });\r\n pb.func('zDecodeWebGLLightIndex', [pb.float('packed'), pb.int('slot')], function () {\r\n this.$if(pb.equal(this.slot, 0), function () {\r\n this.$return(pb.int(pb.div(this.packed, 256)));\r\n });\r\n this.$return(pb.int(pb.mod(this.packed, 256)));\r\n });\r\n pb.func('zPointAtten', [pb.float('dist'), pb.float('range')], function () {\r\n this.$l.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, pb.max(this.range, 1e-4))));\r\n this.$return(pb.mul(this.falloff, this.falloff));\r\n });\r\n pb.func(\r\n 'zSpotAtten',\r\n [pb.vec3('worldPos'), pb.vec4('posRange'), pb.vec4('dirCutoff'), pb.float('dist')],\r\n function () {\r\n this.$l.base = this.zPointAtten(this.dist, this.posRange.w);\r\n this.$l.spotFactor = pb.dot(pb.normalize(pb.sub(this.worldPos, this.posRange.xyz)), this.dirCutoff.xyz);\r\n this.spotFactor = pb.smoothStep(\r\n this.dirCutoff.w,\r\n pb.mix(this.dirCutoff.w, 1, 0.5),\r\n this.spotFactor\r\n );\r\n this.$return(pb.mul(this.base, this.spotFactor));\r\n }\r\n );\r\n pb.func(\r\n 'zAccumulatePunctualLight',\r\n [\r\n pb.vec3('baseColor'),\r\n pb.float('metallic'),\r\n pb.float('roughness'),\r\n pb.float('specularStrength'),\r\n pb.vec3('n'),\r\n pb.vec3('viewDir'),\r\n pb.float('NoV'),\r\n pb.vec3('f0'),\r\n pb.vec3('lightColor'),\r\n pb.vec3('L'),\r\n pb.float('atten'),\r\n pb.float('diffScale'),\r\n pb.float('specScale'),\r\n pb.float('sourceRadiusFactor'),\r\n pb.vec3('outDiffuse').inout(),\r\n pb.vec3('outSpecular').inout()\r\n ],\r\n function () {\r\n this.$l.pointNoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);\r\n this.$if(pb.greaterThan(this.pointNoL, 1e-5), function () {\r\n this.$l.H = pb.normalize(pb.add(this.viewDir, this.L));\r\n this.$l.NoH = pb.clamp(pb.dot(this.n, this.H), 0, 1);\r\n this.$l.VoH = pb.clamp(pb.dot(this.viewDir, this.H), 0, 1);\r\n this.$l.F = fresnelSchlick(this, this.VoH, this.f0, pb.vec3(1));\r\n this.$l.specularRoughness = pb.clamp(\r\n pb.add(this.roughness, this.sourceRadiusFactor),\r\n 0,\r\n 1\r\n );\r\n this.$l.alphaRoughness = pb.mul(this.specularRoughness, this.specularRoughness);\r\n this.$l.D = distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$l.V = visGGX(this, this.NoV, this.pointNoL, this.alphaRoughness);\r\n this.$l.punctualColor = pb.mul(this.lightColor, this.atten, this.pointNoL);\r\n this.$l.diffuseBRDF = pb.mul(\r\n pb.sub(pb.vec3(1), this.F),\r\n pb.div(pb.mul(this.baseColor, pb.sub(1, this.metallic)), Math.PI)\r\n );\r\n this.outDiffuse = pb.add(\r\n this.outDiffuse,\r\n pb.mul(this.punctualColor, pb.max(this.diffuseBRDF, pb.vec3(0)), this.diffScale)\r\n );\r\n this.outSpecular = pb.add(\r\n this.outSpecular,\r\n pb.mul(this.punctualColor, this.D, this.V, this.F, this.specScale)\r\n );\r\n });\r\n }\r\n );\r\n pb.func(\r\n 'zAccumulateRectLight',\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('baseColor'),\r\n pb.float('metallic'),\r\n pb.float('roughness'),\r\n pb.float('specularStrength'),\r\n pb.vec3('n'),\r\n pb.vec3('viewDir'),\r\n pb.float('NoV'),\r\n pb.vec3('f0'),\r\n pb.vec4('posRange'),\r\n pb.vec4('axisX'),\r\n pb.vec4('axisY'),\r\n pb.vec4('colorIntensity'),\r\n pb.vec3('outDiffuse').inout(),\r\n pb.vec3('outSpecular').inout()\r\n ],\r\n function () {\r\n this.$l.center = this.posRange.xyz;\r\n this.$l.range = this.posRange.w;\r\n this.$l.ax = this.axisX.xyz;\r\n this.$l.ay = this.axisY.xyz;\r\n this.$l.halfWidth = pb.length(this.ax);\r\n this.$l.halfHeight = pb.length(this.ay);\r\n this.$l.area = pb.mul(this.halfWidth, this.halfHeight, 4);\r\n this.$l.lightNormal = pb.neg(pb.normalize(pb.cross(this.ax, this.ay)));\r\n this.$if(pb.greaterThan(this.area, 0), function () {\r\n this.$l.baseRectColor = pb.mul(this.colorIntensity.rgb, this.colorIntensity.a, this.area, 0.25);\r\n this.$l.samplePos = pb.vec3();\r\n this.$l.Lvec = pb.vec3();\r\n this.$l.L = pb.vec3();\r\n this.$l.dist = pb.float();\r\n this.$l.invDist2 = pb.float();\r\n this.$l.NoL = pb.float();\r\n this.$l.NoL_light = pb.float();\r\n this.$l.falloff = pb.float();\r\n this.$l.lightSampleColor = pb.vec3();\r\n\r\n const sample = (u: number, v: number) => {\r\n this.samplePos = pb.add(\r\n this.center,\r\n pb.add(\r\n pb.mul(this.ax, pb.sub(pb.mul(u, 2), 1)),\r\n pb.mul(this.ay, pb.sub(pb.mul(v, 2), 1))\r\n )\r\n );\r\n this.Lvec = pb.sub(this.samplePos, this.worldPos);\r\n this.dist = pb.length(this.Lvec);\r\n this.invDist2 = pb.div(1, pb.max(pb.mul(this.dist, this.dist), 0.0001));\r\n this.L = pb.normalize(this.Lvec);\r\n this.NoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);\r\n this.NoL_light = pb.clamp(pb.dot(this.lightNormal, pb.neg(this.L)), 0, 1);\r\n this.$if(pb.greaterThan(pb.mul(this.NoL, this.NoL_light), 1e-5), function () {\r\n this.falloff = pb.float(1);\r\n this.$if(pb.greaterThan(this.range, 0), function () {\r\n this.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, this.range)));\r\n this.falloff = pb.mul(this.falloff, this.falloff);\r\n });\r\n this.lightSampleColor = pb.mul(this.baseRectColor, this.invDist2, this.NoL_light);\r\n this.zAccumulatePunctualLight(\r\n this.baseColor,\r\n this.metallic,\r\n this.roughness,\r\n this.specularStrength,\r\n this.n,\r\n this.viewDir,\r\n this.NoV,\r\n this.f0,\r\n this.lightSampleColor,\r\n this.L,\r\n this.falloff,\r\n 1,\r\n 1,\r\n 0,\r\n this.outDiffuse,\r\n this.outSpecular\r\n );\r\n });\r\n };\r\n\r\n sample(0.25, 0.25);\r\n sample(0.75, 0.25);\r\n sample(0.25, 0.75);\r\n sample(0.75, 0.75);\r\n });\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.base = pb.textureSample(this.gbufferColorTex, this.$inputs.uv);\r\n this.$l.rm = pb.textureSample(this.gbufferRoughnessTex, this.$inputs.uv);\r\n this.$l.extra = pb.textureSample(this.gbufferExtraTex, this.$inputs.uv);\r\n this.$l.litFlag = pb.float(pb.greaterThan(this.extra.a, 0.5));\r\n this.$l.n = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSample(this.gbufferNormalTex, this.$inputs.uv).xyz, 2), pb.vec3(1))\r\n );\r\n this.$l.metallic = pb.clamp(this.rm.r, 0, 1);\r\n this.$l.occlusion = pb.clamp(this.rm.g, 0, 1);\r\n this.$l.specularStrength = pb.clamp(this.rm.b, 0, 1);\r\n this.$l.roughness = pb.clamp(this.rm.a, 0.045, 1);\r\n this.$l.ndc = pb.sub(pb.mul(this.$inputs.uv, 2), pb.vec2(1));\r\n this.$l.xScale = pb.mul(this.cameraProj.x, this.cameraProj.y);\r\n this.$l.yScale = this.cameraProj.x;\r\n this.$l.camRayDir = pb.normalize(\r\n pb.add(\r\n this.cameraForward,\r\n pb.mul(this.cameraRight, pb.mul(this.ndc.x, this.xScale)),\r\n pb.mul(this.cameraUp, pb.mul(this.ndc.y, this.yScale))\r\n )\r\n );\r\n this.$l.linearDepthNormalized = this.zGetLinearDepth();\r\n this.$l.linearDepth = pb.mul(\r\n pb.clamp(this.linearDepthNormalized, 0, 1),\r\n this.cameraNearFar.y\r\n );\r\n this.$l.rayScale = pb.max(pb.dot(this.camRayDir, this.cameraForward), 1e-4);\r\n this.$l.worldPos = pb.add(\r\n this.cameraPos,\r\n pb.mul(this.camRayDir, pb.div(this.linearDepth, this.rayScale))\r\n );\r\n this.$l.viewDir = pb.neg(this.camRayDir);\r\n this.$l.sunL = pb.normalize(this.sunDir);\r\n this.$l.sunColor = pb.mul(this.sunColorIntensity.rgb, this.sunColorIntensity.a);\r\n this.$l.NoL = pb.clamp(pb.dot(this.n, this.sunL), 0, 1);\r\n this.$l.NoV = pb.clamp(pb.dot(this.n, this.viewDir), 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(pb.vec3(0.04), this.specularStrength), this.base.rgb, this.metallic);\r\n this.$l.fresnelNoV = pb.add(\r\n this.f0,\r\n pb.mul(pb.sub(pb.vec3(1), this.f0), pb.pow(pb.sub(1, this.NoV), 5))\r\n );\r\n this.$l.kd = pb.mul(pb.sub(pb.vec3(1), this.fresnelNoV), pb.sub(1, this.metallic));\r\n this.$l.sunDiffuse = pb.vec3(0);\r\n this.$l.sunSpecular = pb.vec3(0);\r\n this.$if(pb.greaterThan(this.NoL, 1e-5), function () {\r\n this.$l.H = pb.normalize(pb.add(this.viewDir, this.sunL));\r\n this.$l.NoH = pb.clamp(pb.dot(this.n, this.H), 0, 1);\r\n this.$l.VoH = pb.clamp(pb.dot(this.viewDir, this.H), 0, 1);\r\n this.$l.F = fresnelSchlick(this, this.VoH, this.f0, pb.vec3(1));\r\n this.$l.alphaRoughness = pb.mul(this.roughness, this.roughness);\r\n this.$l.D = distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$l.V = visGGX(this, this.NoV, this.NoL, this.alphaRoughness);\r\n this.$l.sunPunctualColor = pb.mul(this.sunColor, this.NoL);\r\n this.$l.diffuseBRDF = pb.mul(\r\n pb.sub(pb.vec3(1), this.F),\r\n pb.div(pb.mul(this.base.rgb, pb.sub(1, this.metallic)), Math.PI)\r\n );\r\n this.sunDiffuse = pb.mul(this.sunPunctualColor, pb.max(this.diffuseBRDF, pb.vec3(0)));\r\n this.sunSpecular = pb.mul(this.sunPunctualColor, this.D, this.V, this.F);\r\n });\r\n this.$l.diffuse = this.sunDiffuse;\r\n this.$l.specular = this.sunSpecular;\r\n this.$l.clusterLightCount = pb.int(0);\r\n this.$l.clusterIndex = this.zGetClusterIndex(this.linearDepth);\r\n if (isWebGL) {\r\n this.$l.texCoordX = pb.div(\r\n pb.add(pb.mod(pb.float(this.clusterIndex), pb.float(this.lightIndexTexSize.x)), 0.5),\r\n pb.float(this.lightIndexTexSize.x)\r\n );\r\n this.$l.texCoordY = pb.div(\r\n pb.add(pb.float(pb.div(this.clusterIndex, this.lightIndexTexSize.x)), 0.5),\r\n pb.float(this.lightIndexTexSize.y)\r\n );\r\n this.$l.samp = pb.textureSample(this.lightIndexTex, pb.vec2(this.texCoordX, this.texCoordY));\r\n this.$for(pb.int('i'), 0, 4, function () {\r\n this.$l.packed = this.samp.at(this.i);\r\n this.$for(pb.int('k'), 0, 2, function () {\r\n this.$l.lightIndex = this.zDecodeWebGLLightIndex(this.packed, this.k);\r\n this.$if(pb.greaterThan(this.lightIndex, 0), function () {\r\n this.clusterLightCount = pb.add(this.clusterLightCount, 1);\r\n this.$l.positionRange = this.zLightBuffer.at(pb.mul(this.lightIndex, 4));\r\n this.$l.directionCutoff = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 1));\r\n this.$l.diffuseIntensity = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 2));\r\n this.$l.extra = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 3));\r\n this.$l.lightType = pb.int(this.extra.w);\r\n this.$if(\r\n pb.or(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n pb.equal(this.lightType, LIGHT_TYPE_SPOT)\r\n ),\r\n function () {\r\n this.$l.toLight = pb.sub(this.positionRange.xyz, this.worldPos);\r\n this.$l.dist = pb.length(this.toLight);\r\n this.$l.L = pb.div(this.toLight, pb.max(this.dist, 1e-4));\r\n this.$l.atten = this.zPointAtten(this.dist, this.positionRange.w);\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_SPOT), function () {\r\n this.atten = this.zSpotAtten(\r\n this.worldPos,\r\n this.positionRange,\r\n this.directionCutoff,\r\n this.dist\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.atten, 1e-5), function () {\r\n this.$l.lightColor = pb.mul(this.diffuseIntensity.rgb, this.diffuseIntensity.a);\r\n this.$l.diffScale = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n this.extra.x,\r\n pb.float(1)\r\n );\r\n this.$l.specScale = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n this.extra.y,\r\n pb.float(1)\r\n );\r\n this.$l.sourceRadiusFactor = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n pb.div(this.extra.z, pb.max(this.dist, 1e-4)),\r\n pb.float(0)\r\n );\r\n this.zAccumulatePunctualLight(\r\n this.base.rgb,\r\n this.metallic,\r\n this.roughness,\r\n this.specularStrength,\r\n this.n,\r\n this.viewDir,\r\n this.NoV,\r\n this.f0,\r\n this.lightColor,\r\n this.L,\r\n this.atten,\r\n this.diffScale,\r\n this.specScale,\r\n this.sourceRadiusFactor,\r\n this.diffuse,\r\n this.specular\r\n );\r\n });\r\n }\r\n );\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_RECT), function () {\r\n this.zAccumulateRectLight(\r\n this.worldPos,\r\n this.base.rgb,\r\n this.metallic,\r\n this.roughness,\r\n this.specularStrength,\r\n this.n,\r\n this.viewDir,\r\n this.NoV,\r\n this.f0,\r\n this.positionRange,\r\n this.directionCutoff,\r\n this.extra,\r\n this.diffuseIntensity,\r\n this.diffuse,\r\n this.specular\r\n );\r\n });\r\n });\r\n });\r\n });\r\n } else {\r\n this.$l.texCoordX = pb.mod(this.clusterIndex, this.lightIndexTexSize.x);\r\n this.$l.texCoordY = pb.div(this.clusterIndex, this.lightIndexTexSize.x);\r\n this.$l.samp = pb.textureLoad(this.lightIndexTex, pb.ivec2(this.texCoordX, this.texCoordY), 0);\r\n this.$for(pb.uint('i'), 0, 4, function () {\r\n this.$for(pb.uint('k'), 0, 4, function () {\r\n this.$l.lightIndex = pb.compAnd(pb.sar(this.samp.at(this.i), pb.mul(this.k, 8)), 0xff);\r\n this.$if(pb.greaterThan(this.lightIndex, 0), function () {\r\n this.clusterLightCount = pb.add(this.clusterLightCount, 1);\r\n this.$l.positionRange = this.zLightBuffer.at(pb.mul(this.lightIndex, 4));\r\n this.$l.directionCutoff = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 1));\r\n this.$l.diffuseIntensity = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 2));\r\n this.$l.extra = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 3));\r\n this.$l.lightType = pb.int(this.extra.w);\r\n this.$if(\r\n pb.or(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n pb.equal(this.lightType, LIGHT_TYPE_SPOT)\r\n ),\r\n function () {\r\n this.$l.toLight = pb.sub(this.positionRange.xyz, this.worldPos);\r\n this.$l.dist = pb.length(this.toLight);\r\n this.$l.L = pb.div(this.toLight, pb.max(this.dist, 1e-4));\r\n this.$l.atten = this.zPointAtten(this.dist, this.positionRange.w);\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_SPOT), function () {\r\n this.atten = this.zSpotAtten(\r\n this.worldPos,\r\n this.positionRange,\r\n this.directionCutoff,\r\n this.dist\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.atten, 1e-5), function () {\r\n this.$l.lightColor = pb.mul(this.diffuseIntensity.rgb, this.diffuseIntensity.a);\r\n this.$l.diffScale = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n this.extra.x,\r\n pb.float(1)\r\n );\r\n this.$l.specScale = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n this.extra.y,\r\n pb.float(1)\r\n );\r\n this.$l.sourceRadiusFactor = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n pb.div(this.extra.z, pb.max(this.dist, 1e-4)),\r\n pb.float(0)\r\n );\r\n this.zAccumulatePunctualLight(\r\n this.base.rgb,\r\n this.metallic,\r\n this.roughness,\r\n this.specularStrength,\r\n this.n,\r\n this.viewDir,\r\n this.NoV,\r\n this.f0,\r\n this.lightColor,\r\n this.L,\r\n this.atten,\r\n this.diffScale,\r\n this.specScale,\r\n this.sourceRadiusFactor,\r\n this.diffuse,\r\n this.specular\r\n );\r\n });\r\n }\r\n );\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_RECT), function () {\r\n this.zAccumulateRectLight(\r\n this.worldPos,\r\n this.base.rgb,\r\n this.metallic,\r\n this.roughness,\r\n this.specularStrength,\r\n this.n,\r\n this.viewDir,\r\n this.NoV,\r\n this.f0,\r\n this.positionRange,\r\n this.directionCutoff,\r\n this.extra,\r\n this.diffuseIntensity,\r\n this.diffuse,\r\n this.specular\r\n );\r\n });\r\n });\r\n });\r\n });\r\n }\r\n this.$l.finalColor = pb.add(pb.mul(pb.add(this.diffuse, this.specular), this.litFlag), this.extra.rgb);\r\n if (hasEnvIrradiance || hasEnvRadiance) {\r\n this.$l.ggxLutSample = pb.clamp(\r\n pb.textureSampleLevel(\r\n this.zGGXLut,\r\n pb.clamp(pb.vec2(this.NoV, this.roughness), pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ),\r\n pb.vec4(0),\r\n pb.vec4(1)\r\n );\r\n this.$l.f_ab = this.ggxLutSample.rg;\r\n this.$l.FssEss = pb.add(pb.mul(this.fresnelNoV, this.f_ab.x), pb.vec3(this.f_ab.y));\r\n this.$l.Ems = pb.sub(1, pb.add(this.f_ab.x, this.f_ab.y));\r\n this.$l.F_avg = pb.add(this.f0, pb.div(pb.sub(pb.vec3(1), this.f0), 21));\r\n this.$l.FmsEms = pb.div(\r\n pb.mul(this.FssEss, this.F_avg, this.Ems),\r\n pb.max(pb.sub(pb.vec3(1), pb.mul(this.F_avg, this.Ems)), pb.vec3(1e-4))\r\n );\r\n }\r\n if (hasEnvIrradiance) {\r\n this.$l.envIrr = ctx.env!.light.envLight.getIrradiance(this, this.n).rgb;\r\n this.finalColor = pb.add(\r\n this.finalColor,\r\n pb.mul(\r\n pb.add(this.kd, this.FmsEms),\r\n this.base.rgb,\r\n this.envIrr,\r\n this.envLightStrength,\r\n this.occlusion,\r\n 1 / Math.PI\r\n )\r\n );\r\n }\r\n if (hasEnvRadiance) {\r\n this.$l.reflectVec = pb.reflect(pb.neg(this.viewDir), this.n);\r\n this.$l.envRad = ctx.env!.light.envLight.getRadiance(this, this.reflectVec, this.roughness)!.rgb;\r\n this.finalColor = pb.add(\r\n this.finalColor,\r\n pb.mul(\r\n this.envRad,\r\n this.FssEss,\r\n this.envLightStrength,\r\n this.occlusion\r\n )\r\n );\r\n }\r\n // Deferred direct shadowing is aligned in follow-up pass; keep a stable debug channel now.\r\n this.$l.shadowTerm = pb.float(1);\r\n this.$l.debugColor = pb.max(this.finalColor, pb.vec3(0));\r\n this.$if(pb.notEqual(this.showGBuffer, 0), function () {\r\n this.$if(pb.equal(this.gbufferViewMode, 1), function () {\r\n this.debugColor = pb.vec3(pb.clamp(this.linearDepthNormalized, 0, 1));\r\n }).$elseif(pb.equal(this.gbufferViewMode, 2), function () {\r\n this.debugColor = pb.vec3(this.metallic);\r\n }).$elseif(pb.equal(this.gbufferViewMode, 3), function () {\r\n this.debugColor = pb.vec3(this.roughness);\r\n }).$elseif(pb.equal(this.gbufferViewMode, 4), function () {\r\n this.$l.rawN = pb.sub(pb.mul(pb.textureSample(this.gbufferNormalTex, this.$inputs.uv).xyz, 2), pb.vec3(1));\r\n this.debugColor = pb.vec3(pb.clamp(pb.length(this.rawN), 0, 1));\r\n }).$else(function () {\r\n // composite\r\n this.$if(pb.lessThan(this.$inputs.uv.x, 0.5), function () {\r\n this.$if(pb.lessThan(this.$inputs.uv.y, 0.5), function () {\r\n this.debugColor = this.base.rgb;\r\n }).$else(function () {\r\n this.debugColor = this.rm.rgb;\r\n });\r\n }).$else(function () {\r\n this.$if(pb.lessThan(this.$inputs.uv.y, 0.5), function () {\r\n this.debugColor = pb.add(pb.mul(this.n, 0.5), pb.vec3(0.5));\r\n }).$else(function () {\r\n this.debugColor = pb.vec3(this.roughness);\r\n });\r\n });\r\n });\r\n }).$elseif(pb.notEqual(this.showCluster, 0), function () {\r\n this.$l.clusterT = pb.clamp(pb.div(pb.float(this.clusterLightCount), 16), 0, 1);\r\n this.debugColor = pb.vec3(this.clusterT, pb.mul(this.clusterT, this.clusterT), pb.sub(1, this.clusterT));\r\n }).$elseif(pb.notEqual(this.showShadowTerm, 0), function () {\r\n this.debugColor = pb.vec3(this.shadowTerm);\r\n }).$elseif(pb.notEqual(this.showSpecTerm, 0), function () {\r\n this.debugColor = pb.max(this.specular, pb.vec3(0));\r\n });\r\n this.$outputs.color = pb.vec4(this.debugColor, this.base.a);\r\n });\r\n }\r\n });\r\n if (!builtProgram) {\r\n return;\r\n }\r\n program = builtProgram;\r\n program.name = '@DeferredLightPass';\r\n DeferredLightPass._programs[hash] = program;\r\n }\r\n let bindGroup = DeferredLightPass._bindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n DeferredLightPass._bindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setTexture(\r\n 'gbufferColorTex',\r\n gbufferColor,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bindGroup.setTexture(\r\n 'gbufferRoughnessTex',\r\n gbufferRoughness,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bindGroup.setTexture(\r\n 'gbufferNormalTex',\r\n gbufferNormal,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bindGroup.setTexture('gbufferExtraTex', gbufferExtra, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('linearDepthTex', ctx.linearDepthTexture, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('zGGXLut', getGGXLUT(1024), fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('lightIndexTex', ctx.clusteredLight.lightIndexTexture);\r\n bindGroup.setBuffer('zLightBuffer', ctx.clusteredLight.lightBuffer);\r\n bindGroup.setValue('clusterParams', ctx.clusteredLight.clusterParam);\r\n bindGroup.setValue('countParams', ctx.clusteredLight.countParam);\r\n bindGroup.setValue(\r\n 'lightIndexTexSize',\r\n new Int32Array([ctx.clusteredLight.lightIndexTexture.width, ctx.clusteredLight.lightIndexTexture.height])\r\n );\r\n const sunDirSrc = ctx.sunLight ? ctx.sunLight.directionAndCutoff.xyz().scaleBy(-1) : { x: 0, y: 0, z: 1 };\r\n const sunShadowed = !!(ctx.sunLight && ctx.shadowMapInfo?.has(ctx.sunLight));\r\n const sunColorIntensitySrc = ctx.sunLight\r\n ? sunShadowed\r\n ? { x: 0, y: 0, z: 0, w: 0 }\r\n : ctx.sunLight.diffuseAndIntensity\r\n : { x: 1, y: 1, z: 1, w: 0 };\r\n const cameraRight = ctx.camera.worldMatrix.getRow(0).xyz().inplaceNormalize();\r\n const cameraUp = ctx.camera.worldMatrix.getRow(1).xyz().inplaceNormalize();\r\n const cameraForward = ctx.camera.worldMatrix.getRow(2).xyz().inplaceNormalize().scaleBy(-1);\r\n const cameraPos = ctx.camera.getWorldPosition();\r\n bindGroup.setValue('sunDir', new Float32Array([sunDirSrc.x, sunDirSrc.y, sunDirSrc.z]));\r\n bindGroup.setValue(\r\n 'sunColorIntensity',\r\n new Float32Array([\r\n sunColorIntensitySrc.x,\r\n sunColorIntensitySrc.y,\r\n sunColorIntensitySrc.z,\r\n sunColorIntensitySrc.w\r\n ])\r\n );\r\n bindGroup.setValue('cameraRight', new Float32Array([cameraRight.x, cameraRight.y, cameraRight.z]));\r\n bindGroup.setValue('cameraUp', new Float32Array([cameraUp.x, cameraUp.y, cameraUp.z]));\r\n bindGroup.setValue('cameraForward', new Float32Array([cameraForward.x, cameraForward.y, cameraForward.z]));\r\n bindGroup.setValue('cameraPos', new Float32Array([cameraPos.x, cameraPos.y, cameraPos.z]));\r\n bindGroup.setValue('cameraProj', new Float32Array([ctx.camera.getTanHalfFovy(), ctx.camera.getAspect()]));\r\n bindGroup.setValue('cameraNearFar', new Float32Array([ctx.camera.getNearPlane(), ctx.camera.getFarPlane()]));\r\n let gbufferViewMode = 0;\r\n switch (ctx.camera.deferredGBufferView) {\r\n case 'depth':\r\n gbufferViewMode = 1;\r\n break;\r\n case 'metallic':\r\n gbufferViewMode = 2;\r\n break;\r\n case 'roughness':\r\n gbufferViewMode = 3;\r\n break;\r\n case 'normal-length':\r\n gbufferViewMode = 4;\r\n break;\r\n default:\r\n gbufferViewMode = 0;\r\n break;\r\n }\r\n bindGroup.setValue('showGBuffer', ctx.camera.deferredShowGBuffer ? 1 : 0);\r\n bindGroup.setValue('gbufferViewMode', gbufferViewMode);\r\n bindGroup.setValue('showCluster', ctx.camera.deferredShowCluster ? 1 : 0);\r\n bindGroup.setValue('showShadowTerm', ctx.camera.deferredShowShadowTerm ? 1 : 0);\r\n bindGroup.setValue('showSpecTerm', ctx.camera.deferredShowSpecTerm ? 1 : 0);\r\n if (ctx.env?.light?.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env.light.strength ?? 0);\r\n ctx.env.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad();\r\n }\r\n}\r\n"],"names":["DeferredLightPass","_programs","_bindGroups","render","ctx","gbufferColor","gbufferRoughness","gbufferNormal","gbufferExtra","clusteredLight","lightBuffer","lightIndexTexture","linearDepthTexture","device","hasEnvLight","env","light","envLight","hasEnvRadiance","hasRadiance","hasEnvIrradiance","hasIrradiance","envHash","getHash","hash","type","program","isWebGL","builtProgram","buildRenderProgram","label","vertex","pb","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","y","neg","fragment","gbufferColorTex","tex2D","uniform","gbufferRoughnessTex","gbufferNormalTex","gbufferExtraTex","linearDepthTex","zGGXLut","lightIndexTex","utex2D","zLightBuffer","MAX_CLUSTERED_LIGHTS","uniformBuffer","clusterParams","countParams","ivec4","lightIndexTexSize","ivec2","cameraPos","vec3","cameraRight","cameraUp","cameraForward","cameraProj","cameraNearFar","sunDir","sunColorIntensity","showGBuffer","int","gbufferViewMode","showCluster","showShadowTerm","showSpecTerm","envLightStrength","float","initShaderBindings","color","func","$l","zTile","max","log2","linearDepth","z","w","min","sub","f","fragCoord","x","xyTile","div","clamp","$return","depthSample","textureSample","decodeNormalizedFloatFromRGBA","r","$if","equal","slot","packed","mod","falloff","dist","range","base","zPointAtten","posRange","spotFactor","dot","normalize","worldPos","xyz","dirCutoff","smoothStep","mix","inout","pointNoL","n","L","greaterThan","H","viewDir","NoH","VoH","F","fresnelSchlick","f0","specularRoughness","roughness","sourceRadiusFactor","alphaRoughness","D","distributionGGX","V","visGGX","NoV","punctualColor","lightColor","atten","diffuseBRDF","baseColor","metallic","Math","PI","outDiffuse","diffScale","outSpecular","specScale","center","ax","axisX","ay","axisY","halfWidth","length","halfHeight","area","lightNormal","cross","baseRectColor","colorIntensity","rgb","a","samplePos","Lvec","invDist2","NoL","NoL_light","lightSampleColor","sample","u","v","zAccumulatePunctualLight","specularStrength","rm","extra","litFlag","occlusion","g","b","ndc","xScale","yScale","camRayDir","linearDepthNormalized","zGetLinearDepth","rayScale","sunL","sunColor","fresnelNoV","pow","kd","sunDiffuse","sunSpecular","sunPunctualColor","diffuse","specular","clusterLightCount","clusterIndex","zGetClusterIndex","texCoordX","texCoordY","samp","$for","at","i","lightIndex","zDecodeWebGLLightIndex","k","positionRange","directionCutoff","diffuseIntensity","lightType","or","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","toLight","zSpotAtten","$choice","LIGHT_TYPE_RECT","zAccumulateRectLight","textureLoad","uint","compAnd","sar","finalColor","ggxLutSample","textureSampleLevel","f_ab","rg","FssEss","Ems","F_avg","FmsEms","envIrr","getIrradiance","reflectVec","reflect","envRad","getRadiance","shadowTerm","debugColor","notEqual","$elseif","rawN","$else","lessThan","clusterT","name","bindGroup","createBindGroup","bindGroupLayouts","setTexture","fetchSampler","getGGXLUT","setBuffer","setValue","clusterParam","countParam","Int32Array","width","height","sunDirSrc","sunLight","directionAndCutoff","scaleBy","sunShadowed","shadowMapInfo","has","sunColorIntensitySrc","diffuseAndIntensity","camera","worldMatrix","getRow","inplaceNormalize","getWorldPosition","Float32Array","getTanHalfFovy","getAspect","getNearPlane","getFarPlane","deferredGBufferView","deferredShowGBuffer","deferredShowCluster","deferredShowShadowTerm","deferredShowSpecTerm","strength","updateBindGroup","setProgram","setBindGroup","drawFullscreenQuad"],"mappings":"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"}
@@ -1,428 +0,0 @@
1
- import { Vector2, Vector4 } from '@zephyr3d/base';
2
- import { drawFullscreenQuad } from './fullscreenquad.js';
3
- import { fetchSampler } from '../utility/misc.js';
4
- import { ShaderHelper } from '../material/shader/helper.js';
5
- import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
6
- import { fresnelSchlick, distributionGGX, visGGX } from '../shaders/pbr.js';
7
- import { RENDER_PASS_TYPE_LIGHT, LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT, LIGHT_TYPE_RECT } from '../values.js';
8
-
9
- /**
10
- * Deferred single shadowed-light accumulation pass.
11
- *
12
- * Renders one fullscreen additive pass per shadow-casting light and reuses the
13
- * existing shadow map sampling pipeline via ShaderHelper/ShadowMapper.
14
- * @internal
15
- */ class DeferredShadowLightPass {
16
- static _programs = {};
17
- static _bindGroups = {};
18
- static _additiveRenderStates = null;
19
- static _multiplyRenderStates = null;
20
- static getProgramHash(deviceType, shaderHash, debugShadowTermOnly, hasSceneColor, hasHiZ, hasLinearDepth) {
21
- return `${deviceType}:${shaderHash}:deferred-shadow:${debugShadowTermOnly ? 1 : 0}:scene:${hasSceneColor ? 1 : 0}:hiz:${hasHiZ ? 1 : 0}:depth:${hasLinearDepth ? 1 : 0}`;
22
- }
23
- static hasTextureUniform(bindGroup, program, name) {
24
- const bindGroupLayout = bindGroup.getLayout?.() ?? program.bindGroupLayouts[0];
25
- return !!bindGroupLayout?.entries?.some((entry)=>entry.name === name && (entry.texture || entry.storageTexture || entry.externalTexture));
26
- }
27
- static bindOptionalSceneTextures(bindGroup, program, ctx) {
28
- if (ctx.linearDepthTexture && this.hasTextureUniform(bindGroup, program, 'Z_UniformLinearDepth')) {
29
- bindGroup.setTexture('Z_UniformLinearDepth', ctx.linearDepthTexture, fetchSampler('clamp_nearest_nomip'));
30
- bindGroup.setValue('Z_UniformLinearDepthSize', new Vector2(ctx.linearDepthTexture.width, ctx.linearDepthTexture.height));
31
- }
32
- if (ctx.sceneColorTexture && this.hasTextureUniform(bindGroup, program, 'Z_UniformSceneColor')) {
33
- bindGroup.setTexture('Z_UniformSceneColor', ctx.sceneColorTexture, fetchSampler('clamp_nearest_nomip'));
34
- bindGroup.setValue('Z_UniformSceneColorSize', new Vector2(ctx.sceneColorTexture.width, ctx.sceneColorTexture.height));
35
- }
36
- if (ctx.HiZTexture && this.hasTextureUniform(bindGroup, program, 'Z_UniformHiZDepth')) {
37
- bindGroup.setTexture('Z_UniformHiZDepth', ctx.HiZTexture, fetchSampler('clamp_nearest'));
38
- bindGroup.setValue('Z_UniformHiZDepthInfo', new Vector4(ctx.HiZTexture.width, ctx.HiZTexture.height, ctx.HiZTexture.mipLevelCount, 0));
39
- }
40
- }
41
- static getCameraUniforms(ctx) {
42
- const cameraPos = ctx.camera.getWorldPosition();
43
- return {
44
- position: new Vector4(cameraPos.x, cameraPos.y, cameraPos.z, 0),
45
- renderSize: new Vector2(ctx.renderWidth, ctx.renderHeight),
46
- viewProjectionMatrix: ctx.camera.viewProjectionMatrix,
47
- unjitteredVPMatrix: ctx.camera.viewProjectionMatrix,
48
- jitteredInvVPMatrix: ctx.camera.invViewProjectionMatrix,
49
- jitterValue: ctx.camera.jitterValue,
50
- invViewProjectionMatrix: ctx.camera.invViewProjectionMatrix,
51
- projectionMatrix: ctx.camera.getProjectionMatrix(),
52
- invProjectionMatrix: ctx.camera.getInvProjectionMatrix(),
53
- viewMatrix: ctx.camera.viewMatrix,
54
- worldMatrix: ctx.camera.worldMatrix,
55
- params: new Vector4(ctx.camera.getNearPlane(), ctx.camera.getFarPlane(), ctx.flip ? -1 : 1, 0),
56
- roughnessFactor: ctx.camera.SSR ? ctx.camera.ssrRoughnessFactor : 1,
57
- shadowDebugCascades: ctx.camera.shadowDebugCascades ? 1 : 0,
58
- frameDeltaTime: ctx.device.frameInfo.elapsedFrame * 0.001,
59
- elapsedTime: ctx.device.frameInfo.elapsedOverall * 0.001,
60
- framestamp: ctx.device.frameInfo.frameCounter
61
- };
62
- }
63
- render(ctx, light, gbufferColor, gbufferRoughness, gbufferNormal, gbufferExtra, debugShadowTermOnly = false) {
64
- if (!ctx.shadowMapInfo?.has(light) || !ctx.linearDepthTexture) {
65
- return;
66
- }
67
- const shadowMapParams = ctx.shadowMapInfo.get(light);
68
- const device = ctx.device;
69
- const prevLight = ctx.currentShadowLight ?? null;
70
- const prevRenderPass = ctx.renderPass;
71
- ctx.currentShadowLight = light;
72
- ctx.renderPass = {
73
- type: RENDER_PASS_TYPE_LIGHT
74
- };
75
- const hash = DeferredShadowLightPass.getProgramHash(device.type, shadowMapParams.shaderHash, debugShadowTermOnly, !!ctx.sceneColorTexture, !!ctx.HiZTexture, !!ctx.linearDepthTexture);
76
- let program = DeferredShadowLightPass._programs[hash];
77
- if (!program) {
78
- const isWebGL = device.type === 'webgl';
79
- const builtProgram = device.buildRenderProgram({
80
- label: 'DeferredShadowLightPass',
81
- vertex (pb) {
82
- this.$inputs.pos = pb.vec2().attrib('position');
83
- pb.main(function() {
84
- this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);
85
- if (device.type === 'webgpu') {
86
- this.$builtins.position.y = pb.neg(this.$builtins.position.y);
87
- }
88
- });
89
- },
90
- fragment (pb) {
91
- ShaderHelper.prepareFragmentShader(pb, ctx);
92
- this.gbufferColorTex = pb.tex2D().uniform(0);
93
- this.gbufferRoughnessTex = pb.tex2D().uniform(0);
94
- this.gbufferNormalTex = pb.tex2D().uniform(0);
95
- this.gbufferExtraTex = pb.tex2D().uniform(0);
96
- this.linearDepthTex = pb.tex2D().uniform(0);
97
- this.cameraPos = pb.vec3().uniform(0);
98
- this.cameraRight = pb.vec3().uniform(0);
99
- this.cameraUp = pb.vec3().uniform(0);
100
- this.cameraForward = pb.vec3().uniform(0);
101
- this.cameraViewProjection = pb.mat4().uniform(0);
102
- this.cameraProj = pb.vec2().uniform(0); // x: tanHalfFovy, y: aspect
103
- this.cameraNearFar = pb.vec2().uniform(0);
104
- this.debugShadowTermOnly = pb.int().uniform(0);
105
- this.$outputs.color = pb.vec4();
106
- pb.func('zGetLinearDepth', [], function() {
107
- this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), ShaderHelper.getRenderSize(this));
108
- this.$l.depthSample = pb.textureSample(this.linearDepthTex, this.uv);
109
- if (isWebGL) {
110
- this.$return(decodeNormalizedFloatFromRGBA(this, this.depthSample));
111
- } else {
112
- this.$return(this.depthSample.r);
113
- }
114
- });
115
- pb.func('zPointAtten', [
116
- pb.float('dist'),
117
- pb.float('range')
118
- ], function() {
119
- this.$l.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, pb.max(this.range, 1e-4))));
120
- this.$return(pb.mul(this.falloff, this.falloff));
121
- });
122
- pb.func('zSpotAtten', [
123
- pb.vec3('worldPos'),
124
- pb.vec4('posRange'),
125
- pb.vec4('dirCutoff'),
126
- pb.float('dist')
127
- ], function() {
128
- this.$l.base = this.zPointAtten(this.dist, this.posRange.w);
129
- this.$l.spotFactor = pb.dot(pb.normalize(pb.sub(this.worldPos, this.posRange.xyz)), this.dirCutoff.xyz);
130
- this.spotFactor = pb.smoothStep(this.dirCutoff.w, pb.mix(this.dirCutoff.w, 1, 0.5), this.spotFactor);
131
- this.$return(pb.mul(this.base, this.spotFactor));
132
- });
133
- pb.func('zAccumulatePunctualShadowedLight', [
134
- pb.vec3('baseColor'),
135
- pb.float('metallic'),
136
- pb.float('roughness'),
137
- pb.float('specularStrength'),
138
- pb.vec3('n'),
139
- pb.vec3('viewDir'),
140
- pb.float('NoV'),
141
- pb.vec3('f0'),
142
- pb.vec3('lightColor'),
143
- pb.vec3('L'),
144
- pb.float('atten'),
145
- pb.float('shadow'),
146
- pb.float('litMask'),
147
- pb.float('diffScale'),
148
- pb.float('specScale'),
149
- pb.vec3('outLight').inout(),
150
- pb.float('outShadow').inout()
151
- ], function() {
152
- this.$l.NoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);
153
- this.$if(pb.greaterThan(this.NoL, 1e-5), function() {
154
- this.$l.H = pb.normalize(pb.add(this.viewDir, this.L));
155
- this.$l.NoH = pb.clamp(pb.dot(this.n, this.H), 0, 1);
156
- this.$l.VoH = pb.clamp(pb.dot(this.viewDir, this.H), 0, 1);
157
- this.$l.F = fresnelSchlick(this, this.VoH, this.f0, pb.vec3(1));
158
- this.$l.alphaRoughness = pb.mul(this.roughness, this.roughness);
159
- this.$l.D = distributionGGX(this, this.NoH, this.alphaRoughness);
160
- this.$l.V = visGGX(this, this.NoV, this.NoL, this.alphaRoughness);
161
- this.$l.diffuseBRDF = pb.mul(pb.sub(pb.vec3(1), this.F), pb.div(pb.mul(this.baseColor, pb.sub(1, this.metallic)), Math.PI));
162
- this.$l.unshadowedColor = pb.mul(this.lightColor, this.atten, this.NoL);
163
- this.$l.punctualColor = pb.mul(this.unshadowedColor, this.shadow, this.litMask);
164
- this.$l.diffuse = pb.mul(this.punctualColor, pb.max(this.diffuseBRDF, pb.vec3(0)), this.diffScale);
165
- this.$l.specular = pb.mul(this.punctualColor, this.D, this.V, this.F, this.specScale);
166
- this.outLight = pb.add(this.outLight, pb.max(pb.add(this.diffuse, this.specular), pb.vec3(0)));
167
- this.outShadow = pb.add(this.outShadow, pb.mul(this.shadow, this.litMask));
168
- });
169
- });
170
- pb.func('zSampleLinearDepthAtUV', [
171
- pb.vec2('uv')
172
- ], function() {
173
- if (isWebGL) {
174
- this.$l.depthSample = pb.textureSample(this.linearDepthTex, this.uv);
175
- this.$return(decodeNormalizedFloatFromRGBA(this, this.depthSample));
176
- } else {
177
- this.$l.texSize = pb.ivec2(ShaderHelper.getRenderSize(this));
178
- this.$l.pixelCoord = pb.clamp(pb.ivec2(pb.mul(this.uv, pb.vec2(this.texSize))), pb.ivec2(0), pb.sub(this.texSize, pb.ivec2(1)));
179
- this.$l.depthSample = pb.textureLoad(this.linearDepthTex, this.pixelCoord, 0);
180
- this.$return(this.depthSample.r);
181
- }
182
- });
183
- pb.func('zContactShadow', [
184
- pb.vec3('worldPos'),
185
- pb.vec3('L'),
186
- pb.int('lightType'),
187
- pb.vec4('posRange')
188
- ], function() {
189
- this.$l.steps = pb.int(8);
190
- this.$l.maxDistance = this.$choice(pb.equal(this.lightType, LIGHT_TYPE_POINT), pb.clamp(pb.mul(this.posRange.w, 0.2), 0.2, 3), this.$choice(pb.equal(this.lightType, LIGHT_TYPE_SPOT), pb.clamp(pb.mul(this.posRange.w, 0.25), 0.25, 3.5), pb.float(1.5)));
191
- this.$l.stepLen = pb.div(this.maxDistance, pb.float(this.steps));
192
- this.$l.occlusion = pb.float(0);
193
- this.$for(pb.int('i'), 1, pb.add(this.steps, 1), function() {
194
- this.$l.samplePos = pb.add(this.worldPos, pb.mul(this.L, pb.mul(pb.float(this.i), this.stepLen)));
195
- this.$l.clip = pb.mul(this.cameraViewProjection, pb.vec4(this.samplePos, 1));
196
- this.$if(pb.lessThanEqual(this.clip.w, 1e-6), function() {
197
- this.$continue();
198
- });
199
- this.$l.ndc = pb.div(this.clip.xy, this.clip.w);
200
- this.$l.uv = pb.add(pb.mul(this.ndc, 0.5), pb.vec2(0.5));
201
- this.$if(pb.or(pb.lessThan(this.uv.x, 0), pb.greaterThan(this.uv.x, 1), pb.lessThan(this.uv.y, 0), pb.greaterThan(this.uv.y, 1)), function() {
202
- this.$continue();
203
- });
204
- this.$l.sceneDepth = pb.mul(this.zSampleLinearDepthAtUV(this.uv), this.cameraNearFar.y);
205
- this.$l.sampleDepth = pb.dot(pb.sub(this.samplePos, this.cameraPos), this.cameraForward);
206
- this.$if(pb.greaterThan(pb.sub(this.sampleDepth, this.sceneDepth), 0.02), function() {
207
- this.occlusion = pb.add(this.occlusion, 1);
208
- });
209
- });
210
- this.$l.visibility = pb.sub(1, pb.mul(pb.div(this.occlusion, pb.float(this.steps)), 0.65));
211
- this.$return(pb.clamp(this.visibility, 0, 1));
212
- });
213
- pb.func('zAccumulateRectShadowedLight', [
214
- pb.vec3('worldPos'),
215
- pb.vec3('baseColor'),
216
- pb.float('metallic'),
217
- pb.float('roughness'),
218
- pb.float('specularStrength'),
219
- pb.vec3('n'),
220
- pb.vec3('viewDir'),
221
- pb.float('NoV'),
222
- pb.vec3('f0'),
223
- pb.vec4('posRange'),
224
- pb.vec4('axisX'),
225
- pb.vec4('axisY'),
226
- pb.vec4('colorIntensity'),
227
- pb.float('validMask'),
228
- pb.vec3('outLight').inout(),
229
- pb.float('outShadow').inout()
230
- ], function() {
231
- this.$l.center = this.posRange.xyz;
232
- this.$l.range = this.posRange.w;
233
- this.$l.ax = this.axisX.xyz;
234
- this.$l.ay = this.axisY.xyz;
235
- this.$l.halfWidth = pb.length(this.ax);
236
- this.$l.halfHeight = pb.length(this.ay);
237
- this.$l.area = pb.mul(this.halfWidth, this.halfHeight, 4);
238
- this.$l.lightNormal = pb.neg(pb.normalize(pb.cross(this.ax, this.ay)));
239
- this.$if(pb.greaterThan(this.area, 0), function() {
240
- this.$l.baseRectColor = pb.mul(this.colorIntensity.rgb, this.colorIntensity.a, this.area, 0.25);
241
- this.$l.samplePos = pb.vec3();
242
- this.$l.Lvec = pb.vec3();
243
- this.$l.L = pb.vec3();
244
- this.$l.dist = pb.float();
245
- this.$l.invDist2 = pb.float();
246
- this.$l.NoL_light = pb.float();
247
- this.$l.falloff = pb.float();
248
- this.$l.lightSampleColor = pb.vec3();
249
- this.$l.sampleShadow = pb.float();
250
- this.$l.contactShadow = pb.float();
251
- this.$l.sampleLitMask = pb.float();
252
- this.$l.sampleNoL = pb.float();
253
- const sample = (u, v)=>{
254
- this.samplePos = pb.add(this.center, pb.add(pb.mul(this.ax, pb.sub(pb.mul(u, 2), 1)), pb.mul(this.ay, pb.sub(pb.mul(v, 2), 1))));
255
- this.Lvec = pb.sub(this.samplePos, this.worldPos);
256
- this.dist = pb.length(this.Lvec);
257
- this.invDist2 = pb.div(1, pb.max(pb.mul(this.dist, this.dist), 0.0001));
258
- this.L = pb.normalize(this.Lvec);
259
- this.sampleNoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);
260
- this.NoL_light = pb.clamp(pb.dot(this.lightNormal, pb.neg(this.L)), 0, 1);
261
- // Keep PCF/PCF-PD shadow sampling in uniform control flow.
262
- this.sampleShadow = ShaderHelper.calculateShadow(this, this.worldPos, pb.max(this.sampleNoL, 1e-5), ctx);
263
- this.sampleShadow = pb.mix(1, this.sampleShadow, this.validMask);
264
- this.contactShadow = this.zContactShadow(this.worldPos, this.L, LIGHT_TYPE_RECT, this.posRange);
265
- this.sampleShadow = pb.mul(this.sampleShadow, this.contactShadow);
266
- this.$if(pb.greaterThan(this.NoL_light, 1e-5), function() {
267
- this.falloff = pb.float(1);
268
- this.$if(pb.greaterThan(this.range, 0), function() {
269
- this.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, this.range)));
270
- this.falloff = pb.mul(this.falloff, this.falloff);
271
- });
272
- this.lightSampleColor = pb.mul(this.baseRectColor, this.invDist2, this.NoL_light);
273
- this.sampleLitMask = this.validMask;
274
- this.zAccumulatePunctualShadowedLight(this.baseColor, this.metallic, this.roughness, this.specularStrength, this.n, this.viewDir, this.NoV, this.f0, this.lightSampleColor, this.L, this.falloff, this.sampleShadow, this.sampleLitMask, 1, 1, this.outLight, this.outShadow);
275
- });
276
- };
277
- sample(0.25, 0.25);
278
- sample(0.75, 0.25);
279
- sample(0.25, 0.75);
280
- sample(0.75, 0.75);
281
- this.outShadow = pb.mul(this.outShadow, 0.25);
282
- });
283
- });
284
- pb.main(function() {
285
- this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), ShaderHelper.getRenderSize(this));
286
- this.$l.base = pb.textureSample(this.gbufferColorTex, this.uv);
287
- this.$l.rm = pb.textureSample(this.gbufferRoughnessTex, this.uv);
288
- this.$l.extraData = pb.textureSample(this.gbufferExtraTex, this.uv);
289
- this.$l.litFlag = pb.float(pb.greaterThan(this.extraData.a, 0.5));
290
- this.$l.n = pb.normalize(pb.sub(pb.mul(pb.textureSample(this.gbufferNormalTex, this.uv).xyz, 2), pb.vec3(1)));
291
- this.$l.metallic = pb.clamp(this.rm.r, 0, 1);
292
- this.$l.specularStrength = pb.clamp(this.rm.b, 0, 1);
293
- this.$l.roughness = pb.clamp(this.rm.a, 0.045, 1);
294
- this.$l.ndc = pb.sub(pb.mul(this.uv, 2), pb.vec2(1));
295
- this.$l.xScale = pb.mul(this.cameraProj.x, this.cameraProj.y);
296
- this.$l.yScale = this.cameraProj.x;
297
- this.$l.camRayDir = pb.normalize(pb.add(this.cameraForward, pb.mul(this.cameraRight, pb.mul(this.ndc.x, this.xScale)), pb.mul(this.cameraUp, pb.mul(this.ndc.y, this.yScale))));
298
- this.$l.linearDepthNormalized = this.zGetLinearDepth();
299
- this.$l.linearDepth = pb.mul(pb.clamp(this.linearDepthNormalized, 0, 1), this.cameraNearFar.y);
300
- this.$l.validMask = pb.float(pb.lessThan(this.linearDepthNormalized, 1));
301
- this.$l.rayScale = pb.max(pb.dot(this.camRayDir, this.cameraForward), 1e-4);
302
- this.$l.worldPos = pb.add(this.cameraPos, pb.mul(this.camRayDir, pb.div(this.linearDepth, this.rayScale)));
303
- this.$l.viewDir = pb.neg(this.camRayDir);
304
- this.$l.lightType = pb.int(this.light.extraParams.w);
305
- this.$l.posRange = this.light.positionAndRange;
306
- this.$l.dirCutoff = this.light.directionAndCutoff;
307
- this.$l.lightColor = pb.mul(this.light.diffuseAndIntensity.rgb, this.light.diffuseAndIntensity.a);
308
- this.$l.extra = this.light.extraParams;
309
- this.$l.L = pb.vec3(0, 0, 1);
310
- this.$l.atten = pb.float(1);
311
- this.$l.outLight = pb.vec3(0);
312
- this.$l.shadowTerm = pb.float(1);
313
- this.$if(pb.or(pb.equal(this.lightType, LIGHT_TYPE_POINT), pb.equal(this.lightType, LIGHT_TYPE_SPOT)), function() {
314
- this.$l.toLight = pb.sub(this.posRange.xyz, this.worldPos);
315
- this.$l.dist = pb.length(this.toLight);
316
- this.L = pb.div(this.toLight, pb.max(this.dist, 1e-4));
317
- this.atten = this.zPointAtten(this.dist, this.posRange.w);
318
- this.$if(pb.equal(this.lightType, LIGHT_TYPE_SPOT), function() {
319
- this.atten = this.zSpotAtten(this.worldPos, this.posRange, this.dirCutoff, this.dist);
320
- });
321
- }).$else(function() {
322
- // Directional and rect-light directional path.
323
- this.L = pb.normalize(pb.neg(this.dirCutoff.xyz));
324
- this.atten = 1;
325
- });
326
- this.$l.NoV = pb.clamp(pb.dot(this.n, this.viewDir), 0, 1);
327
- this.$l.f0 = pb.mix(pb.mul(pb.vec3(0.04), this.specularStrength), this.base.rgb, this.metallic);
328
- this.$if(pb.equal(this.lightType, LIGHT_TYPE_RECT), function() {
329
- this.shadowTerm = pb.float(0);
330
- this.zAccumulateRectShadowedLight(this.worldPos, this.base.rgb, this.metallic, this.roughness, this.specularStrength, this.n, this.viewDir, this.NoV, this.f0, this.posRange, this.dirCutoff, this.extra, this.light.diffuseAndIntensity, pb.mul(this.validMask, this.litFlag), this.outLight, this.shadowTerm);
331
- }).$else(function() {
332
- this.$l.NoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);
333
- this.$l.litMask = pb.mul(this.validMask, pb.float(pb.greaterThan(this.NoL, 1e-5)), this.litFlag);
334
- // Keep shadow sampling in uniform control flow for WebGPU derivatives (dpdx/ddy in PCF).
335
- this.$l.shadow = ShaderHelper.calculateShadow(this, this.worldPos, pb.max(this.NoL, 1e-5), ctx);
336
- this.shadow = pb.mix(1, this.shadow, this.validMask);
337
- this.$l.contactShadow = this.zContactShadow(this.worldPos, this.L, this.lightType, this.posRange);
338
- this.shadow = pb.mul(this.shadow, this.contactShadow);
339
- this.shadowTerm = pb.mul(this.shadow, this.litMask);
340
- this.zAccumulatePunctualShadowedLight(this.base.rgb, this.metallic, this.roughness, this.specularStrength, this.n, this.viewDir, this.NoV, this.f0, this.lightColor, this.L, this.atten, this.shadow, this.litMask, this.$choice(pb.equal(this.lightType, LIGHT_TYPE_POINT), this.extra.x, pb.float(1)), this.$choice(pb.equal(this.lightType, LIGHT_TYPE_POINT), this.extra.y, pb.float(1)), this.outLight, this.shadowTerm);
341
- });
342
- this.$if(pb.notEqual(this.debugShadowTermOnly, 0), function() {
343
- this.$outputs.color = pb.vec4(pb.vec3(this.shadowTerm), 1);
344
- }).$else(function() {
345
- this.$outputs.color = pb.vec4(this.outLight, 0);
346
- });
347
- });
348
- }
349
- });
350
- if (!builtProgram) {
351
- ctx.currentShadowLight = prevLight;
352
- ctx.renderPass = prevRenderPass;
353
- return;
354
- }
355
- program = builtProgram;
356
- program.name = '@DeferredShadowLightPass';
357
- DeferredShadowLightPass._programs[hash] = program;
358
- }
359
- let bindGroup = DeferredShadowLightPass._bindGroups[hash];
360
- if (!bindGroup) {
361
- bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);
362
- DeferredShadowLightPass._bindGroups[hash] = bindGroup;
363
- }
364
- bindGroup.setTexture('gbufferColorTex', gbufferColor, fetchSampler('clamp_nearest_nomip'));
365
- bindGroup.setTexture('gbufferRoughnessTex', gbufferRoughness, fetchSampler('clamp_nearest_nomip'));
366
- bindGroup.setTexture('gbufferNormalTex', gbufferNormal, fetchSampler('clamp_nearest_nomip'));
367
- bindGroup.setTexture('gbufferExtraTex', gbufferExtra, fetchSampler('clamp_nearest_nomip'));
368
- bindGroup.setTexture('linearDepthTex', ctx.linearDepthTexture, fetchSampler('clamp_nearest_nomip'));
369
- DeferredShadowLightPass.bindOptionalSceneTextures(bindGroup, program, ctx);
370
- const cameraRight = ctx.camera.worldMatrix.getRow(0).xyz().inplaceNormalize();
371
- const cameraUp = ctx.camera.worldMatrix.getRow(1).xyz().inplaceNormalize();
372
- const cameraForward = ctx.camera.worldMatrix.getRow(2).xyz().inplaceNormalize().scaleBy(-1);
373
- const cameraPos = ctx.camera.getWorldPosition();
374
- bindGroup.setValue('cameraRight', new Float32Array([
375
- cameraRight.x,
376
- cameraRight.y,
377
- cameraRight.z
378
- ]));
379
- bindGroup.setValue('cameraUp', new Float32Array([
380
- cameraUp.x,
381
- cameraUp.y,
382
- cameraUp.z
383
- ]));
384
- bindGroup.setValue('cameraForward', new Float32Array([
385
- cameraForward.x,
386
- cameraForward.y,
387
- cameraForward.z
388
- ]));
389
- bindGroup.setValue('cameraViewProjection', ctx.camera.viewProjectionMatrix);
390
- bindGroup.setValue('cameraPos', new Float32Array([
391
- cameraPos.x,
392
- cameraPos.y,
393
- cameraPos.z
394
- ]));
395
- bindGroup.setValue('cameraProj', new Float32Array([
396
- ctx.camera.getTanHalfFovy(),
397
- ctx.camera.getAspect()
398
- ]));
399
- bindGroup.setValue('cameraNearFar', new Float32Array([
400
- ctx.camera.getNearPlane(),
401
- ctx.camera.getFarPlane()
402
- ]));
403
- bindGroup.setValue('debugShadowTermOnly', debugShadowTermOnly ? 1 : 0);
404
- bindGroup.setValue('camera', DeferredShadowLightPass.getCameraUniforms(ctx));
405
- ShaderHelper.setLightUniformsShadow(bindGroup, ctx, light);
406
- if (!DeferredShadowLightPass._additiveRenderStates) {
407
- DeferredShadowLightPass._additiveRenderStates = device.createRenderStateSet();
408
- DeferredShadowLightPass._additiveRenderStates.useDepthState().enableTest(false).enableWrite(false);
409
- DeferredShadowLightPass._additiveRenderStates.useRasterizerState().setCullMode('none');
410
- DeferredShadowLightPass._additiveRenderStates.useBlendingState().enable(true).setBlendEquation('add', 'add').setBlendFuncRGB('one', 'one').setBlendFuncAlpha('zero', 'one');
411
- }
412
- if (!DeferredShadowLightPass._multiplyRenderStates) {
413
- DeferredShadowLightPass._multiplyRenderStates = device.createRenderStateSet();
414
- DeferredShadowLightPass._multiplyRenderStates.useDepthState().enableTest(false).enableWrite(false);
415
- DeferredShadowLightPass._multiplyRenderStates.useRasterizerState().setCullMode('none');
416
- DeferredShadowLightPass._multiplyRenderStates.useBlendingState().enable(true).setBlendEquation('add', 'add').setBlendFuncRGB('zero', 'src-color').setBlendFuncAlpha('zero', 'one');
417
- }
418
- const renderStates = debugShadowTermOnly ? DeferredShadowLightPass._multiplyRenderStates : DeferredShadowLightPass._additiveRenderStates;
419
- device.setProgram(program);
420
- device.setBindGroup(0, bindGroup);
421
- drawFullscreenQuad(renderStates);
422
- ctx.currentShadowLight = prevLight;
423
- ctx.renderPass = prevRenderPass;
424
- }
425
- }
426
-
427
- export { DeferredShadowLightPass };
428
- //# sourceMappingURL=deferredshadowlightpass.js.map