@zephyr3d/scene 0.9.26 → 0.10.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 (506) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +146 -30
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +300 -56
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +177 -3
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +178 -200
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +30475 -19865
  109. package/dist/index.js +67 -12
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/hairstrand.js +235 -235
  118. package/dist/material/hairstrand.js.map +1 -1
  119. package/dist/material/lambert.js +4 -1
  120. package/dist/material/lambert.js.map +1 -1
  121. package/dist/material/material.js +362 -300
  122. package/dist/material/material.js.map +1 -1
  123. package/dist/material/meshmaterial.js +118 -45
  124. package/dist/material/meshmaterial.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  126. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  128. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  130. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  132. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  133. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  134. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  135. package/dist/material/mixins/lit.js +223 -83
  136. package/dist/material/mixins/lit.js.map +1 -1
  137. package/dist/material/mixins/pbr/common.js +31 -206
  138. package/dist/material/mixins/pbr/common.js.map +1 -1
  139. package/dist/material/mtoon.js +1 -1
  140. package/dist/material/mtoon.js.map +1 -1
  141. package/dist/material/pbrmr.js +3 -0
  142. package/dist/material/pbrmr.js.map +1 -1
  143. package/dist/material/pbrsg.js +3 -0
  144. package/dist/material/pbrsg.js.map +1 -1
  145. package/dist/material/sdf_debug.js +78 -0
  146. package/dist/material/sdf_debug.js.map +1 -0
  147. package/dist/material/shader/helper.js +733 -190
  148. package/dist/material/shader/helper.js.map +1 -1
  149. package/dist/material/shader/terrain_blend.js +204 -43
  150. package/dist/material/shader/terrain_blend.js.map +1 -1
  151. package/dist/material/skin.js +331 -297
  152. package/dist/material/skin.js.map +1 -1
  153. package/dist/material/skinprofile.js +1058 -0
  154. package/dist/material/skinprofile.js.map +1 -0
  155. package/dist/material/sss.js +353 -0
  156. package/dist/material/sss.js.map +1 -0
  157. package/dist/material/sss_kernel.js +265 -0
  158. package/dist/material/sss_kernel.js.map +1 -0
  159. package/dist/material/sssprofile.js +879 -0
  160. package/dist/material/sssprofile.js.map +1 -0
  161. package/dist/material/subsurfaceprofile.js +4 -8
  162. package/dist/material/subsurfaceprofile.js.map +1 -1
  163. package/dist/material/terrain-cm.js +464 -188
  164. package/dist/material/terrain-cm.js.map +1 -1
  165. package/dist/material/unlit.js +3 -0
  166. package/dist/material/unlit.js.map +1 -1
  167. package/dist/material/water.js +2009 -201
  168. package/dist/material/water.js.map +1 -1
  169. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  172. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  173. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  174. package/dist/physics/character.js +226 -0
  175. package/dist/physics/character.js.map +1 -0
  176. package/dist/physics/collider.js +209 -0
  177. package/dist/physics/collider.js.map +1 -0
  178. package/dist/physics/events.js +79 -0
  179. package/dist/physics/events.js.map +1 -0
  180. package/dist/physics/joint.js +272 -0
  181. package/dist/physics/joint.js.map +1 -0
  182. package/dist/physics/node_physics.js +234 -0
  183. package/dist/physics/node_physics.js.map +1 -0
  184. package/dist/physics/part.js +91 -0
  185. package/dist/physics/part.js.map +1 -0
  186. package/dist/physics/rigid_body.js +379 -0
  187. package/dist/physics/rigid_body.js.map +1 -0
  188. package/dist/physics/vehicle.js +335 -0
  189. package/dist/physics/vehicle.js.map +1 -0
  190. package/dist/physics/world.js +25 -0
  191. package/dist/physics/world.js.map +1 -0
  192. package/dist/posteffect/bloom.js +49 -14
  193. package/dist/posteffect/bloom.js.map +1 -1
  194. package/dist/posteffect/motionblur.js +668 -63
  195. package/dist/posteffect/motionblur.js.map +1 -1
  196. package/dist/posteffect/posteffect.js +12 -1
  197. package/dist/posteffect/posteffect.js.map +1 -1
  198. package/dist/posteffect/postsss.js +572 -0
  199. package/dist/posteffect/postsss.js.map +1 -0
  200. package/dist/posteffect/sao.js +48 -50
  201. package/dist/posteffect/sao.js.map +1 -1
  202. package/dist/posteffect/skinsss.js +605 -355
  203. package/dist/posteffect/skinsss.js.map +1 -1
  204. package/dist/posteffect/ssgi.js +91 -162
  205. package/dist/posteffect/ssgi.js.map +1 -1
  206. package/dist/posteffect/ssr.js +3 -11
  207. package/dist/posteffect/ssr.js.map +1 -1
  208. package/dist/posteffect/sss.js +34 -15
  209. package/dist/posteffect/sss.js.map +1 -1
  210. package/dist/posteffect/taa.js +1 -0
  211. package/dist/posteffect/taa.js.map +1 -1
  212. package/dist/render/abuffer_oit.js +40 -39
  213. package/dist/render/abuffer_oit.js.map +1 -1
  214. package/dist/render/clipmap.js +328 -62
  215. package/dist/render/clipmap.js.map +1 -1
  216. package/dist/render/cluster_light.js +958 -224
  217. package/dist/render/cluster_light.js.map +1 -1
  218. package/dist/render/cull_visitor.js +26 -5
  219. package/dist/render/cull_visitor.js.map +1 -1
  220. package/dist/render/debug_views.js +37 -0
  221. package/dist/render/debug_views.js.map +1 -0
  222. package/dist/render/depthpass.js +5 -1
  223. package/dist/render/depthpass.js.map +1 -1
  224. package/dist/render/drawable_mixin.js +53 -6
  225. package/dist/render/drawable_mixin.js.map +1 -1
  226. package/dist/render/dualdepthpeeling_oit.js +53 -53
  227. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  228. package/dist/render/envlight.js +196 -113
  229. package/dist/render/envlight.js.map +1 -1
  230. package/dist/render/fbm_wavegenerator.js +8 -13
  231. package/dist/render/fbm_wavegenerator.js.map +1 -1
  232. package/dist/render/fft_wavegenerator.js +268 -136
  233. package/dist/render/fft_wavegenerator.js.map +1 -1
  234. package/dist/render/gerstner_wavegenerator.js +113 -28
  235. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  236. package/dist/render/gi/probe_volume.js +1334 -0
  237. package/dist/render/gi/probe_volume.js.map +1 -0
  238. package/dist/render/gi/scene_gi.js +282 -0
  239. package/dist/render/gi/scene_gi.js.map +1 -0
  240. package/dist/render/gi/voxel_atlas.js +198 -0
  241. package/dist/render/gi/voxel_atlas.js.map +1 -0
  242. package/dist/render/gi/voxel_lighting.js +652 -0
  243. package/dist/render/gi/voxel_lighting.js.map +1 -0
  244. package/dist/render/gi/voxel_scene.js +642 -0
  245. package/dist/render/gi/voxel_scene.js.map +1 -0
  246. package/dist/render/gi/voxelize_pass.js +223 -0
  247. package/dist/render/gi/voxelize_pass.js.map +1 -0
  248. package/dist/render/globalbindgroup_allocator.js +3 -2
  249. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  250. package/dist/render/gpu_picking.js +9 -36
  251. package/dist/render/gpu_picking.js.map +1 -1
  252. package/dist/render/hzb.js +80 -22
  253. package/dist/render/hzb.js.map +1 -1
  254. package/dist/render/instance_culling.js +499 -0
  255. package/dist/render/instance_culling.js.map +1 -0
  256. package/dist/render/lightpass.js +23 -9
  257. package/dist/render/lightpass.js.map +1 -1
  258. package/dist/render/lod.js +46 -0
  259. package/dist/render/lod.js.map +1 -0
  260. package/dist/render/oit.js +11 -11
  261. package/dist/render/oit.js.map +1 -1
  262. package/dist/render/primitive.js +301 -9
  263. package/dist/render/primitive.js.map +1 -1
  264. package/dist/render/primitive_readback.js +209 -0
  265. package/dist/render/primitive_readback.js.map +1 -0
  266. package/dist/render/render_queue.js +198 -11
  267. package/dist/render/render_queue.js.map +1 -1
  268. package/dist/render/renderer.js +14 -7
  269. package/dist/render/renderer.js.map +1 -1
  270. package/dist/render/rendergraph/blackboard.js +15 -1
  271. package/dist/render/rendergraph/blackboard.js.map +1 -1
  272. package/dist/render/rendergraph/executor.js +136 -0
  273. package/dist/render/rendergraph/executor.js.map +1 -1
  274. package/dist/render/rendergraph/forward_plus_builder.js +585 -59
  275. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  276. package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
  277. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
  278. package/dist/render/rendergraph/history_resources.js +8 -1
  279. package/dist/render/rendergraph/history_resources.js.map +1 -1
  280. package/dist/render/rendergraph/scene_render_context.js +31 -2
  281. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  282. package/dist/render/rendergraph/types.js.map +1 -1
  283. package/dist/render/renderpass.js +28 -5
  284. package/dist/render/renderpass.js.map +1 -1
  285. package/dist/render/sdf/box_allocator.js +98 -0
  286. package/dist/render/sdf/box_allocator.js.map +1 -0
  287. package/dist/render/sdf/global_sdf.js +865 -0
  288. package/dist/render/sdf/global_sdf.js.map +1 -0
  289. package/dist/render/sdf/scene_sdf.js +562 -0
  290. package/dist/render/sdf/scene_sdf.js.map +1 -0
  291. package/dist/render/sdf/sdf_atlas.js +227 -0
  292. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  293. package/dist/render/sdf/sdf_programs.js +42 -0
  294. package/dist/render/sdf/sdf_programs.js.map +1 -0
  295. package/dist/render/sdf/sdf_view.js +199 -0
  296. package/dist/render/sdf/sdf_view.js.map +1 -0
  297. package/dist/render/sdf/waterline.js +610 -0
  298. package/dist/render/sdf/waterline.js.map +1 -0
  299. package/dist/render/shadow_mask_pass.js +142 -25
  300. package/dist/render/shadow_mask_pass.js.map +1 -1
  301. package/dist/render/shore_wave_generator.js +1193 -0
  302. package/dist/render/shore_wave_generator.js.map +1 -0
  303. package/dist/render/sky.js +516 -86
  304. package/dist/render/sky.js.map +1 -1
  305. package/dist/render/transmission_thickness_pass.js +477 -0
  306. package/dist/render/transmission_thickness_pass.js.map +1 -0
  307. package/dist/render/underwater.js +524 -0
  308. package/dist/render/underwater.js.map +1 -0
  309. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  310. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  311. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  312. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  313. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  314. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  315. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  316. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  317. package/dist/render/volumetric_cloud/resources.js +380 -0
  318. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  319. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  320. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  321. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  322. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  323. package/dist/render/water_caustics.js +1195 -0
  324. package/dist/render/water_caustics.js.map +1 -0
  325. package/dist/render/water_foam.js +627 -0
  326. package/dist/render/water_foam.js.map +1 -0
  327. package/dist/render/water_interaction.js +1795 -0
  328. package/dist/render/water_interaction.js.map +1 -0
  329. package/dist/render/weightedblended_oit.js +36 -36
  330. package/dist/render/weightedblended_oit.js.map +1 -1
  331. package/dist/scene/basesprite.js +9 -4
  332. package/dist/scene/basesprite.js.map +1 -1
  333. package/dist/scene/batchgroup.js +108 -12
  334. package/dist/scene/batchgroup.js.map +1 -1
  335. package/dist/scene/environment.js +28 -7
  336. package/dist/scene/environment.js.map +1 -1
  337. package/dist/scene/foliage.js +1020 -0
  338. package/dist/scene/foliage.js.map +1 -0
  339. package/dist/scene/foliage_buckets.js +147 -0
  340. package/dist/scene/foliage_buckets.js.map +1 -0
  341. package/dist/scene/foliage_mask.js +358 -0
  342. package/dist/scene/foliage_mask.js.map +1 -0
  343. package/dist/scene/hair.js +15 -4
  344. package/dist/scene/hair.js.map +1 -1
  345. package/dist/scene/light.js +179 -13
  346. package/dist/scene/light.js.map +1 -1
  347. package/dist/scene/mesh.js +327 -45
  348. package/dist/scene/mesh.js.map +1 -1
  349. package/dist/scene/meshdrawable.js +6 -0
  350. package/dist/scene/meshdrawable.js.map +1 -1
  351. package/dist/scene/msdftext.js +9 -3
  352. package/dist/scene/msdftext.js.map +1 -1
  353. package/dist/scene/msdftextsprite.js +9 -3
  354. package/dist/scene/msdftextsprite.js.map +1 -1
  355. package/dist/scene/particlesys.js +8 -2
  356. package/dist/scene/particlesys.js.map +1 -1
  357. package/dist/scene/physics_settings.js +157 -0
  358. package/dist/scene/physics_settings.js.map +1 -0
  359. package/dist/scene/scene.js +190 -44
  360. package/dist/scene/scene.js.map +1 -1
  361. package/dist/scene/scene_node.js +147 -6
  362. package/dist/scene/scene_node.js.map +1 -1
  363. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  364. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  365. package/dist/scene/terrain-cm/grass.js +881 -42
  366. package/dist/scene/terrain-cm/grass.js.map +1 -1
  367. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  368. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  369. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  370. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  371. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  372. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  373. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  374. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  375. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  376. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  377. package/dist/scene/update_queue.js +54 -0
  378. package/dist/scene/update_queue.js.map +1 -0
  379. package/dist/scene/water.js +997 -96
  380. package/dist/scene/water.js.map +1 -1
  381. package/dist/scene/water_surface_sampler.js +324 -0
  382. package/dist/scene/water_surface_sampler.js.map +1 -0
  383. package/dist/scene/wind.js +317 -0
  384. package/dist/scene/wind.js.map +1 -0
  385. package/dist/shaders/atmosphere.js +388 -166
  386. package/dist/shaders/atmosphere.js.map +1 -1
  387. package/dist/shaders/fog.js +100 -32
  388. package/dist/shaders/fog.js.map +1 -1
  389. package/dist/shaders/gi.js +365 -0
  390. package/dist/shaders/gi.js.map +1 -0
  391. package/dist/shaders/ltc_rect.js +202 -0
  392. package/dist/shaders/ltc_rect.js.map +1 -0
  393. package/dist/shaders/misc.js +1 -10
  394. package/dist/shaders/misc.js.map +1 -1
  395. package/dist/shaders/noise.js +5 -1
  396. package/dist/shaders/noise.js.map +1 -1
  397. package/dist/shaders/probes.js +309 -0
  398. package/dist/shaders/probes.js.map +1 -0
  399. package/dist/shaders/sdf.js +537 -0
  400. package/dist/shaders/sdf.js.map +1 -0
  401. package/dist/shaders/shadow.js +104 -70
  402. package/dist/shaders/shadow.js.map +1 -1
  403. package/dist/shaders/skin_brdf.js +243 -0
  404. package/dist/shaders/skin_brdf.js.map +1 -0
  405. package/dist/shaders/ssr.js +6 -159
  406. package/dist/shaders/ssr.js.map +1 -1
  407. package/dist/shaders/temporal.js +38 -27
  408. package/dist/shaders/temporal.js.map +1 -1
  409. package/dist/shaders/water.js +40 -87
  410. package/dist/shaders/water.js.map +1 -1
  411. package/dist/shaders/water_medium.js +42 -0
  412. package/dist/shaders/water_medium.js.map +1 -0
  413. package/dist/shadow/dom.js +110 -19
  414. package/dist/shadow/dom.js.map +1 -1
  415. package/dist/shadow/esm.js +3 -3
  416. package/dist/shadow/esm.js.map +1 -1
  417. package/dist/shadow/pcf_opt.js +15 -48
  418. package/dist/shadow/pcf_opt.js.map +1 -1
  419. package/dist/shadow/pcf_pd.js +15 -53
  420. package/dist/shadow/pcf_pd.js.map +1 -1
  421. package/dist/shadow/pcss.js +34 -9
  422. package/dist/shadow/pcss.js.map +1 -1
  423. package/dist/shadow/shadow_impl.js +3 -8
  424. package/dist/shadow/shadow_impl.js.map +1 -1
  425. package/dist/shadow/shadow_region.js +87 -49
  426. package/dist/shadow/shadow_region.js.map +1 -1
  427. package/dist/shadow/shadowmapper.js +93 -53
  428. package/dist/shadow/shadowmapper.js.map +1 -1
  429. package/dist/shadow/ssm.js +18 -72
  430. package/dist/shadow/ssm.js.map +1 -1
  431. package/dist/shadow/vsm.js +3 -3
  432. package/dist/shadow/vsm.js.map +1 -1
  433. package/dist/shapes/shape.js +44 -1
  434. package/dist/shapes/shape.js.map +1 -1
  435. package/dist/utility/buoyancy.js +287 -0
  436. package/dist/utility/buoyancy.js.map +1 -0
  437. package/dist/utility/physical.js +10 -1
  438. package/dist/utility/physical.js.map +1 -1
  439. package/dist/utility/pmrem.js +17 -43
  440. package/dist/utility/pmrem.js.map +1 -1
  441. package/dist/utility/sdf/bake.js +435 -0
  442. package/dist/utility/sdf/bake.js.map +1 -0
  443. package/dist/utility/sdf/bvh.js +576 -0
  444. package/dist/utility/sdf/bvh.js.map +1 -0
  445. package/dist/utility/serialization/manager.js +36 -6
  446. package/dist/utility/serialization/manager.js.map +1 -1
  447. package/dist/utility/serialization/scene/animation.js +77 -7
  448. package/dist/utility/serialization/scene/animation.js.map +1 -1
  449. package/dist/utility/serialization/scene/batch.js +11 -4
  450. package/dist/utility/serialization/scene/batch.js.map +1 -1
  451. package/dist/utility/serialization/scene/camera.js +140 -279
  452. package/dist/utility/serialization/scene/camera.js.map +1 -1
  453. package/dist/utility/serialization/scene/cloth.js +25 -0
  454. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  455. package/dist/utility/serialization/scene/common.js +14 -6
  456. package/dist/utility/serialization/scene/common.js.map +1 -1
  457. package/dist/utility/serialization/scene/foliage.js +821 -0
  458. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  459. package/dist/utility/serialization/scene/hair.js +11 -4
  460. package/dist/utility/serialization/scene/hair.js.map +1 -1
  461. package/dist/utility/serialization/scene/light.js +115 -7
  462. package/dist/utility/serialization/scene/light.js.map +1 -1
  463. package/dist/utility/serialization/scene/material.js +388 -220
  464. package/dist/utility/serialization/scene/material.js.map +1 -1
  465. package/dist/utility/serialization/scene/mesh.js +69 -4
  466. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  467. package/dist/utility/serialization/scene/node.js +140 -5
  468. package/dist/utility/serialization/scene/node.js.map +1 -1
  469. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  470. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  471. package/dist/utility/serialization/scene/particle.js +11 -4
  472. package/dist/utility/serialization/scene/particle.js.map +1 -1
  473. package/dist/utility/serialization/scene/physics.js +120 -0
  474. package/dist/utility/serialization/scene/physics.js.map +1 -0
  475. package/dist/utility/serialization/scene/primitive.js +124 -10
  476. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  477. package/dist/utility/serialization/scene/scene.js +1687 -51
  478. package/dist/utility/serialization/scene/scene.js.map +1 -1
  479. package/dist/utility/serialization/scene/sprite.js +11 -4
  480. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  481. package/dist/utility/serialization/scene/terrain.js +163 -33
  482. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  483. package/dist/utility/serialization/scene/text.js +11 -4
  484. package/dist/utility/serialization/scene/text.js.map +1 -1
  485. package/dist/utility/serialization/scene/water.js +2473 -114
  486. package/dist/utility/serialization/scene/water.js.map +1 -1
  487. package/dist/utility/serialization/types.js.map +1 -1
  488. package/dist/utility/shprojector.js +97 -109
  489. package/dist/utility/shprojector.js.map +1 -1
  490. package/dist/utility/textures/foam.js +170 -0
  491. package/dist/utility/textures/foam.js.map +1 -0
  492. package/dist/utility/textures/ggxlut.js +17 -43
  493. package/dist/utility/textures/ggxlut.js.map +1 -1
  494. package/dist/utility/textures/ltcdata.js +4 -4
  495. package/dist/utility/textures/ltcdata.js.map +1 -1
  496. package/dist/utility/textures/ltclut.js +16 -6
  497. package/dist/utility/textures/ltclut.js.map +1 -1
  498. package/dist/utility/unsupported.js +24 -0
  499. package/dist/utility/unsupported.js.map +1 -0
  500. package/dist/values.js +13 -1
  501. package/dist/values.js.map +1 -1
  502. package/package.json +25 -12
  503. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  504. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  505. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  506. package/src/asset/meshoptimizer/LICENSE +21 -0
@@ -1 +1 @@
1
- {"version":3,"file":"lit.js","sources":["../../../src/material/mixins/lit.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport {\r\n LIGHT_TYPE_DIRECTIONAL,\r\n LIGHT_TYPE_POINT,\r\n LIGHT_TYPE_RECT,\r\n // LIGHT_TYPE_SPOT,\r\n RENDER_PASS_TYPE_LIGHT\r\n} from '../../values';\r\nimport type { DrawContext } from '../../render';\r\nimport type { MeshMaterial } from '../meshmaterial';\r\nimport { applyMaterialMixins } from '../meshmaterial';\r\nimport type { TextureMixinInstanceTypes } from './texture';\r\nimport { mixinTextureProps } from './texture';\r\nimport type { IMixinAlbedoColor } from './albedocolor';\r\nimport { mixinAlbedoColor } from './albedocolor';\r\nimport { ShaderHelper } from '../shader/helper';\r\n\r\n/**\r\n * Interface for light mixin\r\n * @public\r\n */\r\nexport type IMixinLight = {\r\n normalScale: number;\r\n normalFlipY: boolean;\r\n normalMapMode: 'tangent-space' | 'object-space';\r\n doubleSidedLighting: boolean;\r\n needCalculateEnvLight(): boolean;\r\n getUniformNormalScale(scope: PBInsideFunctionScope): PBShaderExp;\r\n getEnvLightIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp): PBShaderExp;\r\n getEnvLightRadiance(\r\n scope: PBInsideFunctionScope,\r\n reflectVec: PBShaderExp,\r\n roughness: PBShaderExp\r\n ): PBShaderExp;\r\n calculateViewVector(scope: PBInsideFunctionScope, worldPos: PBShaderExp): PBShaderExp;\r\n calculateReflectionVector(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp\r\n ): PBShaderExp;\r\n calculateTBN(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateNormal(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateNormalAndTBN(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateLightAttenuation(\r\n scope: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n extra?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateLightDirection(\r\n scope: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp\r\n ): PBShaderExp;\r\n calculateShadow(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n NoL: PBShaderExp\r\n ): PBShaderExp;\r\n forEachLight(\r\n scope: PBInsideFunctionScope,\r\n callback: (\r\n this: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n colorIntensity: PBShaderExp,\r\n extra: PBShaderExp,\r\n shadow: boolean\r\n ) => void\r\n ): void;\r\n} & TextureMixinInstanceTypes<['normal']> &\r\n IMixinAlbedoColor;\r\n\r\n/**\r\n * Light mixin\r\n * @param BaseCls - class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinLight<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).lightMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinLight };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinAlbedoColor, mixinTextureProps('normal'));\r\n let FEATURE_DOUBLE_SIDED_LIGHTING = 0;\r\n let FEATURE_OBJECT_SPACE_NORMALMAP = 0;\r\n const cls = class extends S {\r\n static readonly lightMixed = true;\r\n private _normalScale: number;\r\n private _normalFlipY: boolean;\r\n constructor() {\r\n super();\r\n this._normalScale = 1;\r\n this._normalFlipY = false;\r\n this.useFeature(FEATURE_DOUBLE_SIDED_LIGHTING, true);\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.normalScale = other.normalScale;\r\n this.normalFlipY = other.normalFlipY;\r\n this.normalMapMode = other.normalMapMode;\r\n this.doubleSidedLighting = other.doubleSidedLighting;\r\n }\r\n get normalScale() {\r\n return this._normalScale;\r\n }\r\n set normalScale(val) {\r\n if (val !== this._normalScale) {\r\n this._normalScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get normalFlipY() {\r\n return this._normalFlipY;\r\n }\r\n set normalFlipY(val) {\r\n const flip = !!val;\r\n if (flip !== this._normalFlipY) {\r\n this._normalFlipY = flip;\r\n this.uniformChanged();\r\n }\r\n }\r\n get normalMapMode() {\r\n return this.featureUsed<'tangent-space' | 'object-space'>(FEATURE_OBJECT_SPACE_NORMALMAP);\r\n }\r\n set normalMapMode(val) {\r\n this.useFeature(FEATURE_OBJECT_SPACE_NORMALMAP, val);\r\n }\r\n /** true if double sided lighting is used */\r\n get doubleSidedLighting() {\r\n return this.featureUsed<boolean>(FEATURE_DOUBLE_SIDED_LIGHTING);\r\n }\r\n set doubleSidedLighting(val) {\r\n this.useFeature(FEATURE_DOUBLE_SIDED_LIGHTING, !!val);\r\n }\r\n /**\r\n * Calculates the normalized vector from world coordinates to the viewpoint.\r\n *\r\n * @param scope - Shader scope\r\n *\r\n * @returns The view vector\r\n */\r\n calculateViewVector(scope: PBInsideFunctionScope, worldPos: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return pb.normalize(pb.sub(ShaderHelper.getCameraPosition(scope), worldPos.xyz));\r\n }\r\n /**\r\n * Calculate the reflection vector of the view vector with respect to the normal.\r\n *\r\n * @param scope - Shader scope\r\n * @param normal - Surface normal\r\n * @param viewVec - The view vector\r\n * @returns The reflection vector\r\n */\r\n calculateReflectionVector(scope: PBInsideFunctionScope, normal: PBShaderExp, viewVec: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return pb.reflect(pb.neg(viewVec), normal);\r\n }\r\n /**\r\n * Calculate the normal vector for current fragment\r\n * @param scope - The shader scope\r\n * @returns Normal vector for current fragment\r\n */\r\n calculateNormal(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const args: PBShaderExp[] = [worldPos];\r\n const params: PBShaderExp[] = [pb.vec3('worldPos')];\r\n let funcName = 'Z_calculateNormal';\r\n if (worldNormal) {\r\n params.push(pb.vec3('worldNormal'));\r\n args.push(worldNormal);\r\n funcName += '_N';\r\n if (worldTangent && worldBinormal) {\r\n params.push(pb.vec3('worldTangent'), pb.vec3('worldBinormal'));\r\n args.push(worldTangent, worldBinormal);\r\n funcName += '_T';\r\n }\r\n }\r\n pb.func(funcName, params, function () {\r\n this.$l.uv = that.hasNormalTexture()\r\n ? (that.getNormalTexCoord(this) ?? pb.vec2(0))\r\n : that.hasAlbedoTexture()\r\n ? (that.getAlbedoTexCoord(this) ?? pb.vec2(0))\r\n : pb.vec2(0);\r\n this.$l.TBN = that.calculateTBN(\r\n this,\r\n this.worldPos,\r\n this.worldNormal,\r\n this.worldTangent,\r\n this.worldBinormal\r\n );\r\n if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT && that.hasNormalTexture()) {\r\n if (that.normalMapMode === 'object-space') {\r\n const pixel = pb.sub(\r\n pb.mul(pb.textureSample(that.getNormalTextureUniform(this), this.uv).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n const normalTex = pb.mul(\r\n pixel,\r\n pb.vec3(this.zNormalScale, pb.mul(this.zNormalScale, this.zNormalYSign), 1)\r\n );\r\n this.$return(pb.normalize(normalTex));\r\n } else {\r\n const pixel = pb.sub(\r\n pb.mul(pb.textureSample(that.getNormalTextureUniform(this), this.uv).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n const normalTex = pb.mul(\r\n pixel,\r\n pb.vec3(this.zNormalScale, pb.mul(this.zNormalScale, this.zNormalYSign), 1)\r\n );\r\n this.$return(pb.normalize(pb.mul(this.TBN, normalTex)));\r\n }\r\n } else {\r\n this.$return(this.TBN[2]);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](...args) as PBShaderExp;\r\n }\r\n /**\r\n * Normal scale uniform\r\n * @return Normal scale uniform\r\n */\r\n getUniformNormalScale(scope: PBInsideFunctionScope) {\r\n return scope.zNormalScale as PBShaderExp;\r\n }\r\n /**\r\n * Calculate the normal vector for current fragment\r\n *\r\n * @param scope - The shader scope\r\n * @returns Structure that contains normal vector and TBN matrix\r\n */\r\n calculateNormalAndTBN(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const NormalStruct = pb.defineStruct([pb.mat3('TBN'), pb.vec3('normal')]);\r\n const that = this;\r\n const args: PBShaderExp[] = [worldPos.xyz];\r\n const params: PBShaderExp[] = [pb.vec3('worldPos')];\r\n let funcName = 'Z_calculateNormalAndTBN';\r\n if (worldNormal) {\r\n params.push(pb.vec3('worldNormal'));\r\n args.push(worldNormal);\r\n funcName += '_N';\r\n if (worldTangent && worldBinormal) {\r\n params.push(pb.vec3('worldTangent'), pb.vec3('worldBinormal'));\r\n args.push(worldTangent, worldBinormal);\r\n funcName += '_T';\r\n }\r\n }\r\n pb.func(funcName, params, function () {\r\n this.$l.uv = that.hasNormalTexture()\r\n ? (that.getNormalTexCoord(this) ?? pb.vec2(0))\r\n : that.hasAlbedoTexture()\r\n ? (that.getAlbedoTexCoord(this) ?? pb.vec2(0))\r\n : pb.vec2(0);\r\n this.$l.TBN = that.calculateTBN(\r\n this,\r\n this.worldPos,\r\n this.worldNormal,\r\n this.worldTangent,\r\n this.worldBinormal\r\n );\r\n if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT && that.hasNormalTexture()) {\r\n if (that.normalMapMode === 'object-space') {\r\n const pixel = pb.sub(\r\n pb.mul(pb.textureSample(that.getNormalTextureUniform(this), this.uv).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n const normalTex = pb.mul(\r\n pixel,\r\n pb.vec3(this.zNormalScale, pb.mul(this.zNormalScale, this.zNormalYSign), 1)\r\n );\r\n this.$return(NormalStruct(this.TBN, pb.normalize(normalTex)));\r\n } else {\r\n const pixel = pb.sub(\r\n pb.mul(pb.textureSample(that.getNormalTextureUniform(this), this.uv).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n const normalTex = pb.mul(\r\n pixel,\r\n pb.vec3(this.zNormalScale, pb.mul(this.zNormalScale, this.zNormalYSign), 1)\r\n );\r\n this.$return(NormalStruct(this.TBN, pb.normalize(pb.mul(this.TBN, normalTex))));\r\n }\r\n } else {\r\n this.$return(NormalStruct(this.TBN, this.TBN[2]));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](...args) as PBShaderExp;\r\n }\r\n /**\r\n * Calculate the TBN matrix\r\n *\r\n * @param scope - The shader scope\r\n * @returns TBN matrix\r\n */\r\n calculateTBN(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const args: PBShaderExp[] = [worldPos.xyz];\r\n const params: PBShaderExp[] = [pb.vec3('worldPos')];\r\n let funcName = 'Z_calculateTBN';\r\n if (worldNormal) {\r\n params.push(pb.vec3('worldNormal'));\r\n args.push(worldNormal);\r\n funcName += '_N';\r\n if (worldTangent && worldBinormal) {\r\n params.push(pb.vec3('worldTangent'), pb.vec3('worldBinormal'));\r\n args.push(worldTangent, worldBinormal);\r\n funcName += '_T';\r\n }\r\n }\r\n pb.func(funcName, params, function () {\r\n const posW = this.worldPos;\r\n this.$l.uv = that.hasNormalTexture()\r\n ? (that.getNormalTexCoord(this) ?? pb.vec2(0))\r\n : that.hasAlbedoTexture()\r\n ? (that.getAlbedoTexCoord(this) ?? pb.vec2(0))\r\n : pb.vec2(0);\r\n this.$l.TBN = pb.mat3();\r\n if (!worldNormal) {\r\n this.$l.uv_dx = pb.dpdx(pb.vec3(this.uv, 0));\r\n this.$l.uv_dy = pb.dpdy(pb.vec3(this.uv, 0));\r\n this.$if(\r\n pb.lessThanEqual(pb.add(pb.length(this.uv_dx), pb.length(this.uv_dy)), 0.000001),\r\n function () {\r\n this.uv_dx = pb.vec3(1, 0, 0);\r\n this.uv_dy = pb.vec3(0, 1, 0);\r\n }\r\n );\r\n // t is normalized below, so any positive scale on t_ is irrelevant.\r\n // Multiplying by sign(det) instead of dividing by det yields the same\r\n // direction while staying finite when the screen space UV jacobian\r\n // degenerates (silhouettes, folds, collapsed UV shells), where the\r\n // division used to produce Inf and then NaN through the subtraction.\r\n this.$l.det = pb.sub(pb.mul(this.uv_dx.x, this.uv_dy.y), pb.mul(this.uv_dx.y, this.uv_dy.x));\r\n this.$l.t_ = pb.mul(\r\n pb.sub(pb.mul(pb.dpdx(posW), this.uv_dy.y), pb.mul(pb.dpdy(posW), this.uv_dx.y)),\r\n pb.sign(this.det)\r\n );\r\n this.$l.ng = pb.normalize(pb.cross(pb.dpdx(posW), pb.dpdy(posW)));\r\n // Normalize before the gram-schmidt step so the degeneracy test below\r\n // is scale independent: the rejection length is then sin(angle) of t_\r\n // against the normal.\r\n this.$l.tn = pb.div(this.t_, pb.max(pb.length(this.t_), 1e-20));\r\n this.$l.tRaw = pb.sub(this.tn, pb.mul(this.ng, pb.dot(this.ng, this.tn)));\r\n this.$l.tAxis = pb.vec3(1, 0, 0);\r\n this.$if(pb.greaterThan(pb.abs(this.ng.x), 0.9), function () {\r\n this.tAxis = pb.vec3(0, 1, 0);\r\n });\r\n this.$if(pb.lessThan(pb.dot(this.tRaw, this.tRaw), 1e-8), function () {\r\n // t_ vanished or is parallel to the normal: no tangent can be\r\n // recovered from the derivatives, so pick an arbitrary orthogonal\r\n // one. The normal map detail is misoriented on those few pixels,\r\n // but the frame stays finite instead of turning the fragment black.\r\n this.tRaw = pb.sub(this.tAxis, pb.mul(this.ng, pb.dot(this.ng, this.tAxis)));\r\n });\r\n this.$l.t = pb.normalize(this.tRaw);\r\n this.$l.b = pb.cross(this.ng, this.t);\r\n if (that.doubleSidedLighting && that.cullMode !== 'back') {\r\n this.$if(pb.not(this.$builtins.frontFacing), function () {\r\n this.t = pb.mul(this.t, -1);\r\n this.b = pb.mul(this.b, -1);\r\n this.ng = pb.mul(this.ng, -1);\r\n });\r\n }\r\n this.TBN = pb.mat3(this.t, this.b, this.ng);\r\n } else if (!worldTangent) {\r\n this.$l.uv_dx = pb.dpdx(pb.vec3(this.uv, 0));\r\n this.$l.uv_dy = pb.dpdy(pb.vec3(this.uv, 0));\r\n this.$if(\r\n pb.lessThanEqual(pb.add(pb.length(this.uv_dx), pb.length(this.uv_dy)), 0.000001),\r\n function () {\r\n this.uv_dx = pb.vec3(1, 0, 0);\r\n this.uv_dy = pb.vec3(0, 1, 0);\r\n }\r\n );\r\n // See the comment in the branch above: sign(det) replaces the\r\n // unguarded division that produced NaN tangents on degenerate screen\r\n // space UV jacobians.\r\n this.$l.det = pb.sub(pb.mul(this.uv_dx.x, this.uv_dy.y), pb.mul(this.uv_dx.y, this.uv_dy.x));\r\n this.$l.t_ = pb.mul(\r\n pb.sub(pb.mul(pb.dpdx(posW), this.uv_dy.y), pb.mul(pb.dpdy(posW), this.uv_dx.y)),\r\n pb.sign(this.det)\r\n );\r\n this.$l.ng = pb.normalize(this.worldNormal);\r\n this.$l.tn = pb.div(this.t_, pb.max(pb.length(this.t_), 1e-20));\r\n this.$l.tRaw = pb.sub(this.tn, pb.mul(this.ng, pb.dot(this.ng, this.tn)));\r\n this.$l.tAxis = pb.vec3(1, 0, 0);\r\n this.$if(pb.greaterThan(pb.abs(this.ng.x), 0.9), function () {\r\n this.tAxis = pb.vec3(0, 1, 0);\r\n });\r\n this.$if(pb.lessThan(pb.dot(this.tRaw, this.tRaw), 1e-8), function () {\r\n this.tRaw = pb.sub(this.tAxis, pb.mul(this.ng, pb.dot(this.ng, this.tAxis)));\r\n });\r\n this.$l.t = pb.normalize(this.tRaw);\r\n this.$l.b = pb.cross(this.ng, this.t);\r\n if (that.doubleSidedLighting && that.cullMode !== 'back') {\r\n this.$if(pb.not(this.$builtins.frontFacing), function () {\r\n this.t = pb.mul(this.t, -1);\r\n this.b = pb.mul(this.b, -1);\r\n this.ng = pb.mul(this.ng, -1);\r\n });\r\n }\r\n this.TBN = pb.mat3(this.t, this.b, this.ng);\r\n } else {\r\n this.$l.ng = pb.normalize(this.worldNormal);\r\n this.$l.t = pb.normalize(this.worldTangent);\r\n this.$l.b = pb.normalize(this.worldBinormal);\r\n if (that.doubleSidedLighting && that.cullMode !== 'back') {\r\n this.$if(pb.not(this.$builtins.frontFacing), function () {\r\n this.t = pb.mul(this.t, -1);\r\n this.b = pb.mul(this.b, -1);\r\n this.ng = pb.mul(this.ng, -1);\r\n });\r\n }\r\n this.TBN = pb.mat3(this.t, this.b, this.ng);\r\n }\r\n this.$return(this.TBN);\r\n });\r\n return pb.getGlobalScope()[funcName](...args) as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc MeshMaterial.applyUniformsValues}\r\n * @override\r\n */\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n if (this.hasNormalTexture()) {\r\n bindGroup.setValue('zNormalScale', this._normalScale);\r\n bindGroup.setValue('zNormalYSign', this._normalFlipY ? -1 : 1);\r\n }\r\n }\r\n }\r\n /**\r\n * Check if the environment lighting should be calculated.\r\n *\r\n * @returns true Environment lighting should be calculated, otherwise false\r\n */\r\n needCalculateEnvLight() {\r\n return this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT && this.drawContext.drawEnvLight;\r\n }\r\n /**\r\n * Get irradiance of current environment light\r\n *\r\n * @param scope - Shader scope\r\n * @param normal - Fragment normal vector\r\n *\r\n * @returns Irradiance of current environment light of type vec3\r\n */\r\n getEnvLightIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp) {\r\n if (!this.needCalculateEnvLight()) {\r\n console.warn('getEnvLightIrradiance(): No need to calculate environment lighting');\r\n return scope.$builder.vec3(0);\r\n }\r\n return this.drawContext.env!.light.envLight.hasIrradiance()\r\n ? ((this.drawContext.SSGI &&\r\n this.drawContext.SSGIIrradianceHistoryTexture &&\r\n this.drawContext.SSGISurfaceHistoryTexture &&\r\n (this.drawContext.device.type === 'webgl' || this.drawContext.motionVectorTexture)\r\n ? this.drawContext.env!.light.envLight.getIrradiance(scope, normal, this.drawContext).rgb\r\n : scope.$builder.mul(\r\n this.drawContext.env!.light.envLight.getIrradiance(scope, normal, this.drawContext).rgb,\r\n ShaderHelper.getEnvLightStrength(scope)\r\n )) as PBShaderExp)\r\n : scope.$builder.vec3(0);\r\n }\r\n /**\r\n * Get Radiance of current environment light\r\n *\r\n * @param scope - Shader scope\r\n * @param reflectVec - The reflection vector\r\n * @param roughness - Roughness value of current fragment\r\n *\r\n * @returns Radiance of current environment light of type vec3\r\n */\r\n getEnvLightRadiance(scope: PBInsideFunctionScope, reflectVec: PBShaderExp, roughness: PBShaderExp) {\r\n if (!this.needCalculateEnvLight()) {\r\n console.warn('getEnvLightRadiance(): No need to calculate environment lighting');\r\n return scope.$builder.vec3(0);\r\n }\r\n return this.drawContext.env!.light.envLight.hasRadiance()\r\n ? (scope.$builder.mul(\r\n this.drawContext.env!.light.envLight.getRadiance(scope, reflectVec, roughness)!.rgb,\r\n ShaderHelper.getEnvLightStrength(scope),\r\n ShaderHelper.getEnvLightSpecularStrength(scope)\r\n ) as PBShaderExp)\r\n : scope.$builder.vec3(0);\r\n }\r\n /**\r\n * Checks if shadow should be computed\r\n *\r\n * @returns true if shadow should be computed, other wise false\r\n */\r\n protected needCalculateShadow() {\r\n return (\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT && !!this.drawContext.currentShadowLight\r\n );\r\n }\r\n /**\r\n * Calculates shadow of current fragment\r\n *\r\n * @param scope - Shader scope\r\n * @param worldPos - World space position of current fragment\r\n * @param worldNormal - World space normal of current fragment, used for normal\r\n * offset bias. Pass the interpolated vertex normal rather than the normal\r\n * mapped shading normal: a normal map would push the shadow lookup along\r\n * high frequency directions and reintroduce the noise the offset removes.\r\n * @param NoL - NdotL vector\r\n * @returns Shadow of current fragment, 1 means no shadow and 0 means full shadowed.\r\n */\r\n calculateShadow(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n NoL: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n if (!this.needCalculateShadow()) {\r\n console.warn('calculateShadow(): No need to calculate shadow');\r\n return pb.float(1);\r\n }\r\n return ShaderHelper.calculateShadow(scope, worldPos, worldNormal, NoL, this.drawContext);\r\n }\r\n private getClusterIndex(scope: PBInsideFunctionScope, fragCoord: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'lm_getClusterIndex';\r\n pb.func(funcName, [pb.vec3('fragCoord')], function () {\r\n const clusterParams = ShaderHelper.getClusterParams(this);\r\n const countParams = ShaderHelper.getCountParams(this);\r\n this.$l.zTile = pb.int(\r\n pb.max(\r\n pb.add(\r\n pb.mul(pb.log2(ShaderHelper.nonLinearDepthToLinear(this, this.fragCoord.z)), clusterParams.z),\r\n clusterParams.w\r\n ),\r\n 0\r\n )\r\n );\r\n this.$l.f = pb.vec2(this.fragCoord.x, pb.sub(clusterParams.y, pb.add(this.fragCoord.y, 1)));\r\n this.$l.xyTile = pb.ivec2(pb.div(this.f, pb.div(clusterParams.xy, pb.vec2(countParams.xy))));\r\n this.$return(pb.ivec3(this.xyTile, this.zTile));\r\n });\r\n return pb.getGlobalScope()[funcName](fragCoord);\r\n }\r\n protected calculatePointLightAttenuation(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_calculatePointLightAttenuation';\r\n pb.func(funcName, [pb.vec3('worldPos'), pb.vec4('posRange')], function () {\r\n this.$l.d = pb.sub(this.worldPos, this.posRange.xyz);\r\n this.$l.dist2 = pb.dot(this.d, this.d);\r\n this.$l.lightAtten = pb.div(1, pb.max(this.dist2, 0.0001));\r\n this.$l.range2 = pb.mul(this.posRange.w, this.posRange.w);\r\n this.$l.f = pb.div(this.dist2, pb.max(this.range2, 0.0001));\r\n this.$l.f2 = pb.clamp(pb.sub(1, pb.mul(this.f, this.f)), 0, 1);\r\n this.$return(pb.mul(this.lightAtten, pb.mul(this.f2, this.f2)));\r\n });\r\n return pb.getGlobalScope()[funcName](worldPos, posRange);\r\n }\r\n protected calculateSpotLightAttenuation(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n angleScaleOffset?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const physical = this.drawContext.scene.lightingMode === 'physical';\r\n // The two modes emit different falloff and cone-attenuation bodies, so they must not share a\r\n // cached function under one name.\r\n const funcName = physical\r\n ? 'Z_calculateSpotLightAttenuationPhysical'\r\n : 'Z_calculateSpotLightAttenuation';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('worldPos'), pb.vec4('posRange'), pb.vec4('dirCutoff'), pb.vec2('angleScaleOffset')],\r\n function () {\r\n this.$l.dist = pb.distance(this.posRange.xyz, this.worldPos);\r\n if (physical) {\r\n this.$l.dist2 = pb.mul(this.dist, this.dist);\r\n this.$l.lightAtten = pb.div(1, pb.max(this.dist2, 0.0001));\r\n this.$l.range2 = pb.mul(this.posRange.w, this.posRange.w);\r\n this.$l.f = pb.div(this.dist2, pb.max(this.range2, 0.0001));\r\n this.$l.f2 = pb.clamp(pb.sub(1, pb.mul(this.f, this.f)), 0, 1);\r\n this.$l.falloff = pb.mul(this.lightAtten, this.f2, this.f2);\r\n } else {\r\n this.$l.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, this.posRange.w)));\r\n this.falloff = pb.mul(this.falloff, this.falloff);\r\n }\r\n this.$l.cd = pb.dot(pb.normalize(pb.sub(this.worldPos, this.posRange.xyz)), this.dirCutoff.xyz);\r\n if (physical) {\r\n // Filament's getAngleAttenuation: saturate(cd * scale + offset) squared. The scale/offset\r\n // pair is derived CPU-side from the cone half-angles and already guards inner == outer.\r\n this.$l.spotFactor = pb.clamp(\r\n pb.add(pb.mul(this.cd, this.angleScaleOffset.x), this.angleScaleOffset.y),\r\n 0,\r\n 1\r\n );\r\n this.spotFactor = pb.mul(this.spotFactor, this.spotFactor);\r\n } else {\r\n this.$l.spotFactor = pb.smoothStep(this.dirCutoff.w, pb.mix(this.dirCutoff.w, 1, 0.5), this.cd);\r\n }\r\n this.$return(pb.mul(this.spotFactor, this.falloff));\r\n }\r\n );\r\n const resolvedScaleOffset = physical && angleScaleOffset ? angleScaleOffset : pb.vec2(0);\r\n return pb.getGlobalScope()[funcName](worldPos, posRange, dirCutoff, resolvedScaleOffset);\r\n }\r\n calculateLightAttenuation(\r\n scope: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n extra?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n return scope.$choice(\r\n pb.equal(type, LIGHT_TYPE_DIRECTIONAL),\r\n pb.float(1),\r\n scope.$choice(\r\n pb.equal(type, LIGHT_TYPE_POINT),\r\n this.calculatePointLightAttenuation(scope, worldPos.xyz, posRange),\r\n scope.$choice(\r\n pb.equal(type, LIGHT_TYPE_RECT),\r\n this.calculatePointLightAttenuation(scope, worldPos.xyz, posRange),\r\n this.calculateSpotLightAttenuation(scope, worldPos.xyz, posRange, dirCutoff, extra?.xy)\r\n )\r\n )\r\n );\r\n }\r\n calculateLightDirection(\r\n scope: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n return scope.$choice(\r\n pb.equal(type, LIGHT_TYPE_DIRECTIONAL),\r\n pb.neg(dirCutoff.xyz),\r\n pb.normalize(pb.sub(posRange.xyz, worldPos.xyz))\r\n );\r\n }\r\n forEachLight(\r\n scope: PBInsideFunctionScope,\r\n callback: (\r\n this: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n colorIntensity: PBShaderExp,\r\n extra: PBShaderExp,\r\n shadow: boolean\r\n ) => void\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n if (that.drawContext.renderPass!.type !== RENDER_PASS_TYPE_LIGHT) {\r\n console.warn('LitMaterial.forEachLight(): must be called in forward render pass');\r\n return;\r\n }\r\n if (that.drawContext.currentShadowLight) {\r\n const posRange = scope.light.positionAndRange;\r\n const dirCutoff = scope.light.directionAndCutoff;\r\n const colorIntensity = scope.light.diffuseAndIntensity;\r\n const extra = scope.light.extraParams ?? pb.vec4(0);\r\n scope.$scope(function () {\r\n const lightType = pb.int(extra.w);\r\n callback.call(this, lightType, posRange, dirCutoff, colorIntensity, extra, true);\r\n });\r\n } else {\r\n scope.$scope(function () {\r\n const countParams = ShaderHelper.getCountParams(this);\r\n this.$l.cluster = that.getClusterIndex(this, this.$builtins.fragCoord.xyz);\r\n this.$l.clusterIndex = pb.add(\r\n this.cluster.x,\r\n pb.mul(this.cluster.y, countParams.x),\r\n pb.mul(this.cluster.z, countParams.x, countParams.y)\r\n );\r\n this.$l.texSize = scope.light.lightIndexTexSize;\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.texCoordX = pb.div(\r\n pb.add(pb.mod(pb.float(this.clusterIndex), pb.float(this.texSize.x)), 0.5),\r\n pb.float(this.texSize.x)\r\n );\r\n this.$l.texCoordY = pb.div(\r\n pb.add(pb.float(pb.div(this.clusterIndex, this.texSize.x)), 0.5),\r\n pb.float(this.texSize.y)\r\n );\r\n this.$l.samp = pb.textureSample(\r\n ShaderHelper.getClusteredLightIndexTexture(this),\r\n pb.vec2(this.texCoordX, this.texCoordY)\r\n );\r\n } else {\r\n this.$l.texCoordX = pb.mod(this.clusterIndex, this.texSize.x);\r\n this.$l.texCoordY = pb.div(this.clusterIndex, this.texSize.x);\r\n this.$l.samp = pb.textureLoad(\r\n ShaderHelper.getClusteredLightIndexTexture(this),\r\n pb.ivec2(this.texCoordX, this.texCoordY),\r\n 0\r\n );\r\n }\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$for(pb.int('i'), 0, 4, function () {\r\n this.$l.k = this.samp.at(this.i);\r\n this.$l.lights = pb.int[2]();\r\n this.$l.lights[0] = pb.int(pb.mod(this.k, 256));\r\n this.$l.lights[1] = pb.int(pb.div(this.k, 256));\r\n this.$for(pb.int('k'), 0, 2, function () {\r\n this.$l.li = this.lights.at(this.k);\r\n this.$if(pb.greaterThan(this.li, 0), function () {\r\n this.$for(pb.int('j'), 1, 256, function () {\r\n this.$if(pb.equal(this.j, this.li), function () {\r\n this.$l.positionRange = ShaderHelper.getLightPositionAndRange(this, this.j);\r\n this.$l.directionCutoff = ShaderHelper.getLightDirectionAndCutoff(this, this.j);\r\n this.$l.diffuseIntensity = ShaderHelper.getLightColorAndIntensity(this, this.j);\r\n this.$l.extra = ShaderHelper.getLightExtra(this, this.j);\r\n if (that.drawContext.screenSpaceShadowMask) {\r\n this.$l.shadowMask = ShaderHelper.sampleShadowMask(this, this.j);\r\n this.diffuseIntensity = pb.vec4(\r\n pb.mul(this.diffuseIntensity.rgb, this.shadowMask),\r\n this.diffuseIntensity.w\r\n );\r\n }\r\n this.$l.lightType = pb.int(this.extra.w);\r\n this.$scope(function () {\r\n callback.call(\r\n this,\r\n this.lightType,\r\n this.positionRange,\r\n this.directionCutoff,\r\n this.diffuseIntensity,\r\n this.extra,\r\n false\r\n );\r\n });\r\n this.$break();\r\n });\r\n });\r\n });\r\n });\r\n });\r\n } else {\r\n this.$for(pb.uint('i'), 0, 4, function () {\r\n this.$for(pb.uint('k'), 0, 4, function () {\r\n this.$l.c = pb.compAnd(pb.sar(this.samp.at(this.i), pb.mul(this.k, 8)), 0xff);\r\n this.$if(pb.greaterThan(this.c, 0), function () {\r\n this.$l.positionRange = ShaderHelper.getLightPositionAndRange(this, this.c);\r\n this.$l.directionCutoff = ShaderHelper.getLightDirectionAndCutoff(this, this.c);\r\n this.$l.diffuseIntensity = ShaderHelper.getLightColorAndIntensity(this, this.c);\r\n this.$l.extra = ShaderHelper.getLightExtra(this, this.c);\r\n if (that.drawContext.screenSpaceShadowMask) {\r\n // Shadow-casting lights (buffer index <= numShadowLights) attenuate\r\n // by the pre-rendered screen-space shadow mask; others return 1.0.\r\n this.$l.shadowMask = ShaderHelper.sampleShadowMask(this, pb.int(this.c));\r\n this.diffuseIntensity = pb.vec4(\r\n pb.mul(this.diffuseIntensity.rgb, this.shadowMask),\r\n this.diffuseIntensity.w\r\n );\r\n }\r\n this.$l.lightType = pb.int(this.extra.w);\r\n this.$scope(function () {\r\n callback.call(\r\n this,\r\n this.lightType,\r\n this.positionRange,\r\n this.directionCutoff,\r\n this.diffuseIntensity,\r\n this.extra,\r\n false\r\n );\r\n });\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Fragment shader implementation\r\n *\r\n * @param scope - Shader scope\r\n * @returns Calucated fragment color\r\n */\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n if (this.hasNormalTexture()) {\r\n scope.zNormalScale = pb.float().uniform(2);\r\n scope.zNormalYSign = pb.float().uniform(2);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Material.supportLighting}\r\n * @override\r\n */\r\n supportLighting() {\r\n return true;\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinLight };\r\n FEATURE_DOUBLE_SIDED_LIGHTING = cls.defineFeature();\r\n FEATURE_OBJECT_SPACE_NORMALMAP = cls.defineFeature();\r\n return cls;\r\n}\r\n"],"names":["mixinLight","BaseCls","lightMixed","S","applyMaterialMixins","mixinAlbedoColor","mixinTextureProps","FEATURE_DOUBLE_SIDED_LIGHTING","FEATURE_OBJECT_SPACE_NORMALMAP","cls","_normalScale","_normalFlipY","useFeature","copyFrom","other","normalScale","normalFlipY","normalMapMode","doubleSidedLighting","val","uniformChanged","flip","featureUsed","calculateViewVector","scope","worldPos","pb","$builder","normalize","sub","ShaderHelper","getCameraPosition","xyz","calculateReflectionVector","normal","viewVec","reflect","neg","calculateNormal","worldNormal","worldTangent","worldBinormal","that","args","params","vec3","funcName","push","func","$l","uv","hasNormalTexture","getNormalTexCoord","vec2","hasAlbedoTexture","getAlbedoTexCoord","TBN","calculateTBN","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","pixel","mul","textureSample","getNormalTextureUniform","rgb","normalTex","zNormalScale","zNormalYSign","$return","getGlobalScope","getUniformNormalScale","calculateNormalAndTBN","NormalStruct","defineStruct","mat3","posW","uv_dx","dpdx","uv_dy","dpdy","$if","lessThanEqual","add","length","det","x","y","t_","sign","ng","cross","tn","div","max","tRaw","dot","tAxis","greaterThan","abs","lessThan","t","b","cullMode","not","$builtins","frontFacing","applyUniformValues","bindGroup","ctx","pass","setValue","needCalculateEnvLight","drawEnvLight","getEnvLightIrradiance","console","warn","env","light","envLight","hasIrradiance","SSGI","SSGIIrradianceHistoryTexture","SSGISurfaceHistoryTexture","device","motionVectorTexture","getIrradiance","getEnvLightStrength","getEnvLightRadiance","reflectVec","roughness","hasRadiance","getRadiance","getEnvLightSpecularStrength","currentShadowLight","calculateShadow","NoL","needCalculateShadow","float","getClusterIndex","fragCoord","clusterParams","getClusterParams","countParams","getCountParams","zTile","int","log2","nonLinearDepthToLinear","z","w","f","xyTile","ivec2","xy","ivec3","calculatePointLightAttenuation","posRange","vec4","d","dist2","lightAtten","range2","f2","clamp","calculateSpotLightAttenuation","dirCutoff","angleScaleOffset","physical","scene","lightingMode","dist","distance","falloff","cd","spotFactor","smoothStep","mix","resolvedScaleOffset","calculateLightAttenuation","extra","$choice","equal","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_POINT","LIGHT_TYPE_RECT","calculateLightDirection","forEachLight","callback","positionAndRange","directionAndCutoff","colorIntensity","diffuseAndIntensity","extraParams","$scope","lightType","call","cluster","clusterIndex","texSize","lightIndexTexSize","getDevice","texCoordX","mod","texCoordY","samp","getClusteredLightIndexTexture","textureLoad","$for","k","at","i","lights","li","j","positionRange","getLightPositionAndRange","directionCutoff","getLightDirectionAndCutoff","diffuseIntensity","getLightColorAndIntensity","getLightExtra","screenSpaceShadowMask","shadowMask","sampleShadowMask","$break","uint","c","compAnd","sar","fragmentShader","uniform","supportLighting","defineFeature"],"mappings":"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"}
1
+ {"version":3,"file":"lit.js","sources":["../../../src/material/mixins/lit.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { REVERSE_Z } from '@zephyr3d/base';\r\nimport {\r\n LIGHT_TYPE_DIRECTIONAL,\r\n LIGHT_TYPE_POINT,\r\n LIGHT_TYPE_RECT,\r\n MAX_GLOBAL_LIGHTS,\r\n // LIGHT_TYPE_SPOT,\r\n RENDER_PASS_TYPE_LIGHT\r\n} from '../../values';\r\nimport type { DrawContext } from '../../render';\r\nimport type { MeshMaterial } from '../meshmaterial';\r\nimport { applyMaterialMixins } from '../meshmaterial';\r\nimport type { TextureMixinInstanceTypes } from './texture';\r\nimport { mixinTextureProps } from './texture';\r\nimport type { IMixinAlbedoColor } from './albedocolor';\r\nimport { mixinAlbedoColor } from './albedocolor';\r\nimport { ShaderHelper } from '../shader/helper';\r\nimport { defineLTCEdgeFunctions } from '../../shaders/ltc_rect';\r\n\r\n/**\r\n * Interface for light mixin\r\n * @public\r\n */\r\nexport type IMixinLight = {\r\n normalScale: number;\r\n normalFlipY: boolean;\r\n normalMapMode: 'tangent-space' | 'object-space';\r\n doubleSidedLighting: boolean;\r\n receivesWaterCaustics(): boolean;\r\n needCalculateEnvLight(): boolean;\r\n getUniformNormalScale(scope: PBInsideFunctionScope): PBShaderExp;\r\n getEnvLightIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp): PBShaderExp;\r\n getEnvLightRadiance(\r\n scope: PBInsideFunctionScope,\r\n reflectVec: PBShaderExp,\r\n roughness: PBShaderExp\r\n ): PBShaderExp;\r\n calculateViewVector(scope: PBInsideFunctionScope, worldPos: PBShaderExp): PBShaderExp;\r\n calculateReflectionVector(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp\r\n ): PBShaderExp;\r\n calculateTBN(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateNormal(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateNormalAndTBN(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateLightAttenuation(\r\n scope: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n extra?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateLightDirection(\r\n scope: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n extra?: PBShaderExp\r\n ): PBShaderExp;\r\n calculateShadow(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n NoL: PBShaderExp\r\n ): PBShaderExp;\r\n forEachLight(\r\n scope: PBInsideFunctionScope,\r\n callback: (\r\n this: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n colorIntensity: PBShaderExp,\r\n extra: PBShaderExp,\r\n shadow: boolean,\r\n thickness: PBShaderExp,\r\n unshadowedColorIntensity: PBShaderExp\r\n ) => void\r\n ): void;\r\n} & TextureMixinInstanceTypes<['normal']> &\r\n IMixinAlbedoColor;\r\n\r\n/**\r\n * Light mixin\r\n * @param BaseCls - class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinLight<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).lightMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinLight };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinAlbedoColor, mixinTextureProps('normal'));\r\n let FEATURE_DOUBLE_SIDED_LIGHTING = 0;\r\n let FEATURE_OBJECT_SPACE_NORMALMAP = 0;\r\n const cls = class extends S {\r\n static readonly lightMixed = true;\r\n private _normalScale: number;\r\n private _normalFlipY: boolean;\r\n constructor() {\r\n super();\r\n this._normalScale = 1;\r\n this._normalFlipY = false;\r\n this.useFeature(FEATURE_DOUBLE_SIDED_LIGHTING, true);\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.normalScale = other.normalScale;\r\n this.normalFlipY = other.normalFlipY;\r\n this.normalMapMode = other.normalMapMode;\r\n this.doubleSidedLighting = other.doubleSidedLighting;\r\n }\r\n get normalScale() {\r\n return this._normalScale;\r\n }\r\n set normalScale(val) {\r\n if (val !== this._normalScale) {\r\n this._normalScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get normalFlipY() {\r\n return this._normalFlipY;\r\n }\r\n set normalFlipY(val) {\r\n const flip = !!val;\r\n if (flip !== this._normalFlipY) {\r\n this._normalFlipY = flip;\r\n this.uniformChanged();\r\n }\r\n }\r\n get normalMapMode() {\r\n return this.featureUsed<'tangent-space' | 'object-space'>(FEATURE_OBJECT_SPACE_NORMALMAP);\r\n }\r\n set normalMapMode(val) {\r\n this.useFeature(FEATURE_OBJECT_SPACE_NORMALMAP, val);\r\n }\r\n /** true if double sided lighting is used */\r\n get doubleSidedLighting() {\r\n return this.featureUsed<boolean>(FEATURE_DOUBLE_SIDED_LIGHTING);\r\n }\r\n set doubleSidedLighting(val) {\r\n this.useFeature(FEATURE_DOUBLE_SIDED_LIGHTING, !!val);\r\n }\r\n /**\r\n * Calculates the normalized vector from world coordinates to the viewpoint.\r\n *\r\n * @param scope - Shader scope\r\n *\r\n * @returns The view vector\r\n */\r\n calculateViewVector(scope: PBInsideFunctionScope, worldPos: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return pb.normalize(pb.sub(ShaderHelper.getCameraPosition(scope), worldPos.xyz));\r\n }\r\n /**\r\n * Calculate the reflection vector of the view vector with respect to the normal.\r\n *\r\n * @param scope - Shader scope\r\n * @param normal - Surface normal\r\n * @param viewVec - The view vector\r\n * @returns The reflection vector\r\n */\r\n calculateReflectionVector(scope: PBInsideFunctionScope, normal: PBShaderExp, viewVec: PBShaderExp) {\r\n const pb = scope.$builder;\r\n return pb.reflect(pb.neg(viewVec), normal);\r\n }\r\n /**\r\n * Calculate the normal vector for current fragment\r\n * @param scope - The shader scope\r\n * @returns Normal vector for current fragment\r\n */\r\n calculateNormal(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const args: PBShaderExp[] = [worldPos];\r\n const params: PBShaderExp[] = [pb.vec3('worldPos')];\r\n let funcName = 'Z_calculateNormal';\r\n if (worldNormal) {\r\n params.push(pb.vec3('worldNormal'));\r\n args.push(worldNormal);\r\n funcName += '_N';\r\n if (worldTangent && worldBinormal) {\r\n params.push(pb.vec3('worldTangent'), pb.vec3('worldBinormal'));\r\n args.push(worldTangent, worldBinormal);\r\n funcName += '_T';\r\n }\r\n }\r\n pb.func(funcName, params, function () {\r\n this.$l.uv = that.hasNormalTexture()\r\n ? (that.getNormalTexCoord(this) ?? pb.vec2(0))\r\n : that.hasAlbedoTexture()\r\n ? (that.getAlbedoTexCoord(this) ?? pb.vec2(0))\r\n : pb.vec2(0);\r\n this.$l.TBN = that.calculateTBN(\r\n this,\r\n this.worldPos,\r\n this.worldNormal,\r\n this.worldTangent,\r\n this.worldBinormal\r\n );\r\n if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT && that.hasNormalTexture()) {\r\n if (that.normalMapMode === 'object-space') {\r\n const pixel = pb.sub(\r\n pb.mul(pb.textureSample(that.getNormalTextureUniform(this), this.uv).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n const normalTex = pb.mul(\r\n pixel,\r\n pb.vec3(this.zNormalScale, pb.mul(this.zNormalScale, this.zNormalYSign), 1)\r\n );\r\n this.$return(pb.normalize(normalTex));\r\n } else {\r\n const pixel = pb.sub(\r\n pb.mul(pb.textureSample(that.getNormalTextureUniform(this), this.uv).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n const normalTex = pb.mul(\r\n pixel,\r\n pb.vec3(this.zNormalScale, pb.mul(this.zNormalScale, this.zNormalYSign), 1)\r\n );\r\n this.$return(pb.normalize(pb.mul(this.TBN, normalTex)));\r\n }\r\n } else {\r\n this.$return(this.TBN[2]);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](...args) as PBShaderExp;\r\n }\r\n /**\r\n * Normal scale uniform\r\n * @return Normal scale uniform\r\n */\r\n getUniformNormalScale(scope: PBInsideFunctionScope) {\r\n return scope.zNormalScale as PBShaderExp;\r\n }\r\n /**\r\n * Calculate the normal vector for current fragment\r\n *\r\n * @param scope - The shader scope\r\n * @returns Structure that contains normal vector and TBN matrix\r\n */\r\n calculateNormalAndTBN(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const NormalStruct = pb.defineStruct([pb.mat3('TBN'), pb.vec3('normal')]);\r\n const that = this;\r\n const args: PBShaderExp[] = [worldPos.xyz];\r\n const params: PBShaderExp[] = [pb.vec3('worldPos')];\r\n let funcName = 'Z_calculateNormalAndTBN';\r\n if (worldNormal) {\r\n params.push(pb.vec3('worldNormal'));\r\n args.push(worldNormal);\r\n funcName += '_N';\r\n if (worldTangent && worldBinormal) {\r\n params.push(pb.vec3('worldTangent'), pb.vec3('worldBinormal'));\r\n args.push(worldTangent, worldBinormal);\r\n funcName += '_T';\r\n }\r\n }\r\n pb.func(funcName, params, function () {\r\n this.$l.uv = that.hasNormalTexture()\r\n ? (that.getNormalTexCoord(this) ?? pb.vec2(0))\r\n : that.hasAlbedoTexture()\r\n ? (that.getAlbedoTexCoord(this) ?? pb.vec2(0))\r\n : pb.vec2(0);\r\n this.$l.TBN = that.calculateTBN(\r\n this,\r\n this.worldPos,\r\n this.worldNormal,\r\n this.worldTangent,\r\n this.worldBinormal\r\n );\r\n if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT && that.hasNormalTexture()) {\r\n if (that.normalMapMode === 'object-space') {\r\n const pixel = pb.sub(\r\n pb.mul(pb.textureSample(that.getNormalTextureUniform(this), this.uv).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n const normalTex = pb.mul(\r\n pixel,\r\n pb.vec3(this.zNormalScale, pb.mul(this.zNormalScale, this.zNormalYSign), 1)\r\n );\r\n this.$return(NormalStruct(this.TBN, pb.normalize(normalTex)));\r\n } else {\r\n const pixel = pb.sub(\r\n pb.mul(pb.textureSample(that.getNormalTextureUniform(this), this.uv).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n const normalTex = pb.mul(\r\n pixel,\r\n pb.vec3(this.zNormalScale, pb.mul(this.zNormalScale, this.zNormalYSign), 1)\r\n );\r\n this.$return(NormalStruct(this.TBN, pb.normalize(pb.mul(this.TBN, normalTex))));\r\n }\r\n } else {\r\n this.$return(NormalStruct(this.TBN, this.TBN[2]));\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](...args) as PBShaderExp;\r\n }\r\n /**\r\n * Calculate the TBN matrix\r\n *\r\n * @param scope - The shader scope\r\n * @returns TBN matrix\r\n */\r\n calculateTBN(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal?: PBShaderExp,\r\n worldTangent?: PBShaderExp,\r\n worldBinormal?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const args: PBShaderExp[] = [worldPos.xyz];\r\n const params: PBShaderExp[] = [pb.vec3('worldPos')];\r\n let funcName = 'Z_calculateTBN';\r\n if (worldNormal) {\r\n params.push(pb.vec3('worldNormal'));\r\n args.push(worldNormal);\r\n funcName += '_N';\r\n if (worldTangent && worldBinormal) {\r\n params.push(pb.vec3('worldTangent'), pb.vec3('worldBinormal'));\r\n args.push(worldTangent, worldBinormal);\r\n funcName += '_T';\r\n }\r\n }\r\n pb.func(funcName, params, function () {\r\n const posW = this.worldPos;\r\n this.$l.uv = that.hasNormalTexture()\r\n ? (that.getNormalTexCoord(this) ?? pb.vec2(0))\r\n : that.hasAlbedoTexture()\r\n ? (that.getAlbedoTexCoord(this) ?? pb.vec2(0))\r\n : pb.vec2(0);\r\n this.$l.TBN = pb.mat3();\r\n if (!worldNormal) {\r\n this.$l.uv_dx = pb.dpdx(pb.vec3(this.uv, 0));\r\n this.$l.uv_dy = pb.dpdy(pb.vec3(this.uv, 0));\r\n this.$if(\r\n pb.lessThanEqual(pb.add(pb.length(this.uv_dx), pb.length(this.uv_dy)), 0.000001),\r\n function () {\r\n this.uv_dx = pb.vec3(1, 0, 0);\r\n this.uv_dy = pb.vec3(0, 1, 0);\r\n }\r\n );\r\n // t is normalized below, so any positive scale on t_ is irrelevant.\r\n // Multiplying by sign(det) instead of dividing by det yields the same\r\n // direction while staying finite when the screen space UV jacobian\r\n // degenerates (silhouettes, folds, collapsed UV shells), where the\r\n // division used to produce Inf and then NaN through the subtraction.\r\n this.$l.det = pb.sub(pb.mul(this.uv_dx.x, this.uv_dy.y), pb.mul(this.uv_dx.y, this.uv_dy.x));\r\n this.$l.t_ = pb.mul(\r\n pb.sub(pb.mul(pb.dpdx(posW), this.uv_dy.y), pb.mul(pb.dpdy(posW), this.uv_dx.y)),\r\n pb.sign(this.det)\r\n );\r\n this.$l.ng = pb.normalize(pb.cross(pb.dpdx(posW), pb.dpdy(posW)));\r\n // Normalize before the gram-schmidt step so the degeneracy test below\r\n // is scale independent: the rejection length is then sin(angle) of t_\r\n // against the normal.\r\n this.$l.tn = pb.div(this.t_, pb.max(pb.length(this.t_), 1e-20));\r\n this.$l.tRaw = pb.sub(this.tn, pb.mul(this.ng, pb.dot(this.ng, this.tn)));\r\n this.$l.tAxis = pb.vec3(1, 0, 0);\r\n this.$if(pb.greaterThan(pb.abs(this.ng.x), 0.9), function () {\r\n this.tAxis = pb.vec3(0, 1, 0);\r\n });\r\n this.$if(pb.lessThan(pb.dot(this.tRaw, this.tRaw), 1e-8), function () {\r\n // t_ vanished or is parallel to the normal: no tangent can be\r\n // recovered from the derivatives, so pick an arbitrary orthogonal\r\n // one. The normal map detail is misoriented on those few pixels,\r\n // but the frame stays finite instead of turning the fragment black.\r\n this.tRaw = pb.sub(this.tAxis, pb.mul(this.ng, pb.dot(this.ng, this.tAxis)));\r\n });\r\n this.$l.t = pb.normalize(this.tRaw);\r\n this.$l.b = pb.cross(this.ng, this.t);\r\n if (that.doubleSidedLighting && that.cullMode !== 'back') {\r\n this.$if(pb.not(this.$builtins.frontFacing), function () {\r\n this.t = pb.mul(this.t, -1);\r\n this.b = pb.mul(this.b, -1);\r\n this.ng = pb.mul(this.ng, -1);\r\n });\r\n }\r\n this.TBN = pb.mat3(this.t, this.b, this.ng);\r\n } else if (!worldTangent) {\r\n this.$l.uv_dx = pb.dpdx(pb.vec3(this.uv, 0));\r\n this.$l.uv_dy = pb.dpdy(pb.vec3(this.uv, 0));\r\n this.$if(\r\n pb.lessThanEqual(pb.add(pb.length(this.uv_dx), pb.length(this.uv_dy)), 0.000001),\r\n function () {\r\n this.uv_dx = pb.vec3(1, 0, 0);\r\n this.uv_dy = pb.vec3(0, 1, 0);\r\n }\r\n );\r\n // See the comment in the branch above: sign(det) replaces the\r\n // unguarded division that produced NaN tangents on degenerate screen\r\n // space UV jacobians.\r\n this.$l.det = pb.sub(pb.mul(this.uv_dx.x, this.uv_dy.y), pb.mul(this.uv_dx.y, this.uv_dy.x));\r\n this.$l.t_ = pb.mul(\r\n pb.sub(pb.mul(pb.dpdx(posW), this.uv_dy.y), pb.mul(pb.dpdy(posW), this.uv_dx.y)),\r\n pb.sign(this.det)\r\n );\r\n this.$l.ng = pb.normalize(this.worldNormal);\r\n this.$l.tn = pb.div(this.t_, pb.max(pb.length(this.t_), 1e-20));\r\n this.$l.tRaw = pb.sub(this.tn, pb.mul(this.ng, pb.dot(this.ng, this.tn)));\r\n this.$l.tAxis = pb.vec3(1, 0, 0);\r\n this.$if(pb.greaterThan(pb.abs(this.ng.x), 0.9), function () {\r\n this.tAxis = pb.vec3(0, 1, 0);\r\n });\r\n this.$if(pb.lessThan(pb.dot(this.tRaw, this.tRaw), 1e-8), function () {\r\n this.tRaw = pb.sub(this.tAxis, pb.mul(this.ng, pb.dot(this.ng, this.tAxis)));\r\n });\r\n this.$l.t = pb.normalize(this.tRaw);\r\n this.$l.b = pb.cross(this.ng, this.t);\r\n if (that.doubleSidedLighting && that.cullMode !== 'back') {\r\n this.$if(pb.not(this.$builtins.frontFacing), function () {\r\n this.t = pb.mul(this.t, -1);\r\n this.b = pb.mul(this.b, -1);\r\n this.ng = pb.mul(this.ng, -1);\r\n });\r\n }\r\n this.TBN = pb.mat3(this.t, this.b, this.ng);\r\n } else {\r\n this.$l.ng = pb.normalize(this.worldNormal);\r\n this.$l.t = pb.normalize(this.worldTangent);\r\n this.$l.b = pb.normalize(this.worldBinormal);\r\n if (that.doubleSidedLighting && that.cullMode !== 'back') {\r\n this.$if(pb.not(this.$builtins.frontFacing), function () {\r\n this.t = pb.mul(this.t, -1);\r\n this.b = pb.mul(this.b, -1);\r\n this.ng = pb.mul(this.ng, -1);\r\n });\r\n }\r\n this.TBN = pb.mat3(this.t, this.b, this.ng);\r\n }\r\n this.$return(this.TBN);\r\n });\r\n return pb.getGlobalScope()[funcName](...args) as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc MeshMaterial.applyUniformsValues}\r\n * @override\r\n */\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n if (this.hasNormalTexture()) {\r\n bindGroup.setValue('zNormalScale', this._normalScale);\r\n bindGroup.setValue('zNormalYSign', this._normalFlipY ? -1 : 1);\r\n }\r\n }\r\n }\r\n /**\r\n * Check if the environment lighting should be calculated.\r\n *\r\n * @returns true Environment lighting should be calculated, otherwise false\r\n */\r\n needCalculateEnvLight() {\r\n return this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT && this.drawContext.drawEnvLight;\r\n }\r\n /**\r\n * Get irradiance of current environment light\r\n *\r\n * @param scope - Shader scope\r\n * @param normal - Fragment normal vector\r\n *\r\n * @returns Irradiance of current environment light of type vec3\r\n */\r\n getEnvLightIrradiance(scope: PBInsideFunctionScope, normal: PBShaderExp) {\r\n if (!this.needCalculateEnvLight()) {\r\n console.warn('getEnvLightIrradiance(): No need to calculate environment lighting');\r\n return scope.$builder.vec3(0);\r\n }\r\n // Already scaled by the environment strength; see EnvironmentLighting.getIrradiance\r\n return this.drawContext.env!.light.envLight.hasIrradiance()\r\n ? (this.drawContext.env!.light.envLight.getIrradiance(scope, normal, this.drawContext)\r\n .rgb as PBShaderExp)\r\n : scope.$builder.vec3(0);\r\n }\r\n /**\r\n * Get Radiance of current environment light\r\n *\r\n * @param scope - Shader scope\r\n * @param reflectVec - The reflection vector\r\n * @param roughness - Roughness value of current fragment\r\n *\r\n * @returns Radiance of current environment light of type vec3\r\n */\r\n getEnvLightRadiance(scope: PBInsideFunctionScope, reflectVec: PBShaderExp, roughness: PBShaderExp) {\r\n if (!this.needCalculateEnvLight()) {\r\n console.warn('getEnvLightRadiance(): No need to calculate environment lighting');\r\n return scope.$builder.vec3(0);\r\n }\r\n return this.drawContext.env!.light.envLight.hasRadiance()\r\n ? (scope.$builder.mul(\r\n this.drawContext.env!.light.envLight.getRadiance(scope, reflectVec, roughness)!.rgb,\r\n ShaderHelper.getEnvLightStrength(scope),\r\n ShaderHelper.getEnvLightSpecularStrength(scope)\r\n ) as PBShaderExp)\r\n : scope.$builder.vec3(0);\r\n }\r\n /**\r\n * Checks if shadow should be computed\r\n *\r\n * @returns true if shadow should be computed, other wise false\r\n */\r\n protected needCalculateShadow() {\r\n return (\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT && !!this.drawContext.currentShadowLight\r\n );\r\n }\r\n /**\r\n * Calculates shadow of current fragment\r\n *\r\n * @param scope - Shader scope\r\n * @param worldPos - World space position of current fragment\r\n * @param worldNormal - World space normal of current fragment, used for normal\r\n * offset bias. Pass the interpolated vertex normal rather than the normal\r\n * mapped shading normal: a normal map would push the shadow lookup along\r\n * high frequency directions and reintroduce the noise the offset removes.\r\n * @param NoL - NdotL vector\r\n * @returns Shadow of current fragment, 1 means no shadow and 0 means full shadowed.\r\n */\r\n calculateShadow(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n NoL: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n if (!this.needCalculateShadow()) {\r\n console.warn('calculateShadow(): No need to calculate shadow');\r\n return pb.float(1);\r\n }\r\n return ShaderHelper.calculateShadow(scope, worldPos, worldNormal, NoL, this.drawContext);\r\n }\r\n /**\r\n * Whether this material's fragments are lit through water and so pick up the\r\n * water caustics.\r\n *\r\n * True for ordinary surfaces, which may sit under a water body. A water\r\n * surface itself must override this to false: the caustic lookup decides\r\n * whether a fragment is submerged by comparing its own height against the\r\n * displaced surface height on its *sun ray*, and those are two different\r\n * points on the water unless the sun is exactly overhead. Under a tilted sun\r\n * every water fragment has some other part of the surface upstream of it, so\r\n * a fragment in a trough is read as being under the crest up-sun of it and\r\n * gets the caustic pattern - whose peaks are well above 1 - painted onto the\r\n * water as bright blotches that swim with the waves.\r\n *\r\n * Only the sampling is gated, not the uniform declarations: the caustic\r\n * uniforms live in the pass-wide global bind group, whose layout is built\r\n * once per {@link DrawContext.renderPassHash} and shared by every material\r\n * drawn in that pass, so it cannot vary per material.\r\n *\r\n * @returns True when the water caustics modulate this material's lighting.\r\n */\r\n receivesWaterCaustics(): boolean {\r\n return true;\r\n }\r\n private getClusterIndex(scope: PBInsideFunctionScope, fragCoord: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'lm_getClusterIndex';\r\n pb.func(funcName, [pb.vec3('fragCoord')], function () {\r\n const clusterParams = ShaderHelper.getClusterParams(this);\r\n const countParams = ShaderHelper.getCountParams(this);\r\n // Slice = t * scale + bias, with t = log2(view depth) for perspective (exponential\r\n // slices) and the view depth itself for orthographic (linear slices), matching the\r\n // index pass. Orthographic device depth is linear between near and far.\r\n this.$l.sliceDepth = pb.float();\r\n this.$if(pb.notEqual(ShaderHelper.getClusterOrthographic(this), 0), function () {\r\n const nearFar = ShaderHelper.getCameraParams(this);\r\n this.sliceDepth = REVERSE_Z\r\n ? pb.mix(nearFar.y, nearFar.x, this.fragCoord.z)\r\n : pb.mix(nearFar.x, nearFar.y, this.fragCoord.z);\r\n }).$else(function () {\r\n this.sliceDepth = pb.log2(ShaderHelper.nonLinearDepthToLinear(this, this.fragCoord.z));\r\n });\r\n // Depth at (or jittered past) the far plane would land in slice countParams.z, one past\r\n // the last row of the index texture, so clamp both ends. Clamped as float before the int\r\n // conversion because GLSL ES 1.0 has no integer clamp.\r\n this.$l.zTile = pb.int(\r\n pb.clamp(\r\n pb.add(pb.mul(this.sliceDepth, clusterParams.z), clusterParams.w),\r\n 0,\r\n pb.sub(pb.float(countParams.z), 1)\r\n )\r\n );\r\n // fragCoord holds pixel centers (n + 0.5); flipping to the top-down tile space of the\r\n // index pass is H - fragCoord.y, with no extra -1 that would shift tile rows by a pixel.\r\n this.$l.f = pb.vec2(this.fragCoord.x, pb.sub(clusterParams.y, this.fragCoord.y));\r\n this.$l.xyTile = pb.ivec2(\r\n pb.clamp(\r\n pb.div(this.f, pb.div(clusterParams.xy, pb.vec2(countParams.xy))),\r\n pb.vec2(0),\r\n pb.sub(pb.vec2(countParams.xy), pb.vec2(1))\r\n )\r\n );\r\n this.$return(pb.ivec3(this.xyTile, this.zTile));\r\n });\r\n return pb.getGlobalScope()[funcName](fragCoord);\r\n }\r\n protected calculatePointLightAttenuation(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_calculatePointLightAttenuation';\r\n pb.func(funcName, [pb.vec3('worldPos'), pb.vec4('posRange')], function () {\r\n this.$l.d = pb.sub(this.worldPos, this.posRange.xyz);\r\n this.$l.dist2 = pb.dot(this.d, this.d);\r\n this.$l.lightAtten = pb.div(1, pb.max(this.dist2, 0.0001));\r\n this.$l.range2 = pb.mul(this.posRange.w, this.posRange.w);\r\n this.$l.f = pb.div(this.dist2, pb.max(this.range2, 0.0001));\r\n this.$l.f2 = pb.clamp(pb.sub(1, pb.mul(this.f, this.f)), 0, 1);\r\n this.$return(pb.mul(this.lightAtten, pb.mul(this.f2, this.f2)));\r\n });\r\n return pb.getGlobalScope()[funcName](worldPos, posRange);\r\n }\r\n protected calculateSpotLightAttenuation(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n angleScaleOffset?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const physical = this.drawContext.scene.lightingMode === 'physical';\r\n // The two modes emit different cone-attenuation bodies, so they must not share a cached\r\n // function under one name.\r\n const funcName = physical\r\n ? 'Z_calculateSpotLightAttenuationPhysical'\r\n : 'Z_calculateSpotLightAttenuation';\r\n pb.func(\r\n funcName,\r\n [pb.vec3('worldPos'), pb.vec4('posRange'), pb.vec4('dirCutoff'), pb.vec2('angleScaleOffset')],\r\n function () {\r\n // The point light's distance falloff in both modes: inverse square with the windowing\r\n // to the range, so a spot and a point light of one intensity light a surface alike\r\n this.$l.falloff = that.calculatePointLightAttenuation(this, this.worldPos, this.posRange);\r\n this.$l.cd = pb.dot(pb.normalize(pb.sub(this.worldPos, this.posRange.xyz)), this.dirCutoff.xyz);\r\n if (physical) {\r\n // Filament's getAngleAttenuation: saturate(cd * scale + offset) squared. The scale/offset\r\n // pair is derived CPU-side from the cone half-angles and already guards inner == outer.\r\n this.$l.spotFactor = pb.clamp(\r\n pb.add(pb.mul(this.cd, this.angleScaleOffset.x), this.angleScaleOffset.y),\r\n 0,\r\n 1\r\n );\r\n this.spotFactor = pb.mul(this.spotFactor, this.spotFactor);\r\n } else {\r\n this.$l.spotFactor = pb.smoothStep(this.dirCutoff.w, pb.mix(this.dirCutoff.w, 1, 0.5), this.cd);\r\n }\r\n this.$return(pb.mul(this.spotFactor, this.falloff));\r\n }\r\n );\r\n const resolvedScaleOffset = physical && angleScaleOffset ? angleScaleOffset : pb.vec2(0);\r\n return pb.getGlobalScope()[funcName](worldPos, posRange, dirCutoff, resolvedScaleOffset);\r\n }\r\n /**\r\n * A rect light reduced to one direction and one magnitude, for BxDFs that\r\n * have no area-light integration of their own.\r\n *\r\n * @internal\r\n */\r\n protected calculateRectLightVectorIrradiance(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n axisX: PBShaderExp,\r\n axisY: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n defineLTCEdgeFunctions(scope);\r\n pb.func(\r\n 'Z_rectLightVectorIrradiance',\r\n [pb.vec3('worldPos'), pb.vec4('posRange'), pb.vec3('ax'), pb.vec3('ay')],\r\n function () {\r\n this.$l.toCenter = pb.sub(this.posRange.xyz, this.worldPos);\r\n this.$l.dist = pb.length(this.toCenter);\r\n this.$l.centerDir = pb.div(this.toCenter, pb.max(this.dist, 1e-6));\r\n this.$l.planeNormal = pb.cross(this.ax, this.ay);\r\n // The rect emits along -(ax x ay), so a lit point lies on that side of\r\n // it, where the vector back to the centre points along +(ax x ay).\r\n this.$if(\r\n pb.or(\r\n pb.lessThan(pb.dot(this.planeNormal, this.planeNormal), 1e-12),\r\n pb.lessThanEqual(pb.dot(this.planeNormal, this.toCenter), 0)\r\n ),\r\n function () {\r\n this.$return(pb.vec4(this.centerDir, 0));\r\n }\r\n );\r\n this.$l.v0 = pb.normalize(pb.sub(pb.sub(this.toCenter, this.ax), this.ay));\r\n this.$l.v1 = pb.normalize(pb.sub(pb.add(this.toCenter, this.ax), this.ay));\r\n this.$l.v2 = pb.normalize(pb.add(pb.add(this.toCenter, this.ax), this.ay));\r\n this.$l.v3 = pb.normalize(pb.add(pb.sub(this.toCenter, this.ax), this.ay));\r\n this.$l.F = pb.add(\r\n this.Z_LTCIntegrateEdgeVec(this.v0, this.v1),\r\n this.Z_LTCIntegrateEdgeVec(this.v1, this.v2),\r\n this.Z_LTCIntegrateEdgeVec(this.v2, this.v3),\r\n this.Z_LTCIntegrateEdgeVec(this.v3, this.v0)\r\n );\r\n this.$l.len = pb.length(this.F);\r\n this.$if(pb.lessThan(this.len, 1e-8), function () {\r\n this.$return(pb.vec4(this.centerDir, 0));\r\n });\r\n this.$l.falloff = pb.float(1);\r\n this.$if(pb.greaterThan(this.posRange.w, 0), function () {\r\n this.falloff = pb.sub(1, pb.smoothStep(pb.mul(this.posRange.w, 0.9), this.posRange.w, this.dist));\r\n });\r\n this.$return(pb.vec4(pb.div(this.F, this.len), pb.mul(this.len, this.falloff)));\r\n }\r\n );\r\n return pb.getGlobalScope().Z_rectLightVectorIrradiance(worldPos, posRange, axisX, axisY);\r\n }\r\n calculateLightAttenuation(\r\n scope: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n extra?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const physical = this.drawContext.scene.lightingMode === 'physical';\r\n // Branches rather than a $choice, which would evaluate every light type's\r\n // attenuation - the rect's vector form factor included - for every light.\r\n // Named per mode because the spot light body it calls differs by mode.\r\n const funcName = physical ? 'Z_calculateLightAttenuationPhysical' : 'Z_calculateLightAttenuation';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.int('lightType'),\r\n pb.vec3('worldPos'),\r\n pb.vec4('posRange'),\r\n pb.vec4('dirCutoff'),\r\n pb.vec4('extra')\r\n ],\r\n function () {\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_DIRECTIONAL), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_POINT), function () {\r\n this.$return(that.calculatePointLightAttenuation(this, this.worldPos, this.posRange));\r\n });\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_RECT), function () {\r\n // extra.xyz carries the rect's half-height axis; see RectLight.computeUniforms.\r\n this.$return(\r\n pb.mul(\r\n that.calculateRectLightVectorIrradiance(\r\n this,\r\n this.worldPos,\r\n this.posRange,\r\n this.dirCutoff.xyz,\r\n this.extra.xyz\r\n ).w,\r\n Math.PI\r\n )\r\n );\r\n });\r\n this.$return(\r\n that.calculateSpotLightAttenuation(\r\n this,\r\n this.worldPos,\r\n this.posRange,\r\n this.dirCutoff,\r\n this.extra.xy\r\n )\r\n );\r\n }\r\n );\r\n const attenuation = pb\r\n .getGlobalScope()\r\n [funcName](type, worldPos.xyz, posRange, dirCutoff, extra ?? pb.vec4(0)) as PBShaderExp;\r\n // Water caustics ride here rather than on calculateShadow(): every light\r\n // model already folds this value into its light colour and nothing else\r\n // reads it, so a vec3 return applies the caustic tint everywhere without\r\n // touching a single call site. It also covers both lighting paths, which\r\n // matters because a shadow-casting sun goes through the clustered path\r\n // when the screen-space shadow mask is on and through a per-light additive\r\n // pass when it is off.\r\n const caustic = this.receivesWaterCaustics()\r\n ? ShaderHelper.calculateWaterCaustic(scope, worldPos.xyz, type, dirCutoff.xyz, this.drawContext)\r\n : null;\r\n return caustic ? pb.mul(caustic, attenuation) : attenuation;\r\n }\r\n /**\r\n * Unit vector from `worldPos` towards the light.\r\n *\r\n * @remarks\r\n * For a rect light this is the direction of its vector form factor (see\r\n * {@link calculateRectLightVectorIrradiance}), which needs the rect's second\r\n * axis from `extra`. Without `extra` a rect light falls back to the direction\r\n * of its centre.\r\n */\r\n calculateLightDirection(\r\n scope: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n worldPos: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n extra?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n if (!extra) {\r\n return scope.$choice(\r\n pb.equal(type, LIGHT_TYPE_DIRECTIONAL),\r\n pb.neg(dirCutoff.xyz),\r\n pb.normalize(pb.sub(posRange.xyz, worldPos.xyz))\r\n );\r\n }\r\n const that = this;\r\n pb.func(\r\n 'Z_calculateLightDirection',\r\n [\r\n pb.int('lightType'),\r\n pb.vec3('worldPos'),\r\n pb.vec4('posRange'),\r\n pb.vec4('dirCutoff'),\r\n pb.vec4('extra')\r\n ],\r\n function () {\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_DIRECTIONAL), function () {\r\n this.$return(pb.neg(this.dirCutoff.xyz));\r\n });\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_RECT), function () {\r\n this.$return(\r\n that.calculateRectLightVectorIrradiance(\r\n this,\r\n this.worldPos,\r\n this.posRange,\r\n this.dirCutoff.xyz,\r\n this.extra.xyz\r\n ).xyz\r\n );\r\n });\r\n this.$return(pb.normalize(pb.sub(this.posRange.xyz, this.worldPos)));\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n .Z_calculateLightDirection(type, worldPos.xyz, posRange, dirCutoff, extra) as PBShaderExp;\r\n }\r\n /** Invokes `callback` once per light affecting the fragment. */\r\n forEachLight(\r\n scope: PBInsideFunctionScope,\r\n callback: (\r\n this: PBInsideFunctionScope,\r\n type: PBShaderExp,\r\n posRange: PBShaderExp,\r\n dirCutoff: PBShaderExp,\r\n colorIntensity: PBShaderExp,\r\n extra: PBShaderExp,\r\n shadow: boolean,\r\n thickness: PBShaderExp,\r\n unshadowedColorIntensity: PBShaderExp\r\n ) => void\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n if (that.drawContext.renderPass!.type !== RENDER_PASS_TYPE_LIGHT) {\r\n console.warn('LitMaterial.forEachLight(): must be called in forward render pass');\r\n return;\r\n }\r\n if (that.drawContext.currentShadowLight) {\r\n const posRange = scope.light.positionAndRange;\r\n const dirCutoff = scope.light.directionAndCutoff;\r\n const colorIntensity = scope.light.diffuseAndIntensity;\r\n const extra = scope.light.extraParams ?? pb.vec4(0);\r\n scope.$scope(function () {\r\n const lightType = pb.int(extra.w);\r\n // The per-light additive path has no thickness texture: it is produced\r\n // for the clustered queue only. 1 is the \"no data\" sentinel the\r\n // thickness pass can never write, so consumers read this as \"this\r\n // light contributes no transmission\" rather than as zero thickness —\r\n // which would be the *most* transmissive reading of the encoding.\r\n callback.call(\r\n this,\r\n lightType,\r\n posRange,\r\n dirCutoff,\r\n colorIntensity,\r\n extra,\r\n true,\r\n pb.float(1),\r\n colorIntensity\r\n );\r\n });\r\n } else {\r\n // Emits the shading of the light at buffer index `index` (an int or uint).\r\n const shadeLight = function (this: PBInsideFunctionScope, index: PBShaderExp) {\r\n this.$l.positionRange = ShaderHelper.getLightPositionAndRange(this, index);\r\n this.$l.directionCutoff = ShaderHelper.getLightDirectionAndCutoff(this, index);\r\n this.$l.diffuseIntensity = ShaderHelper.getLightColorAndIntensity(this, index);\r\n this.$l.extra = ShaderHelper.getLightExtra(this, index);\r\n this.$l.unshadowedIntensity = this.diffuseIntensity;\r\n if (that.drawContext.screenSpaceShadowMask) {\r\n // Shadow-casting lights (buffer index <= numShadowLights) attenuate\r\n // by the pre-rendered screen-space shadow mask; others return 1.0.\r\n this.$l.shadowMask = ShaderHelper.sampleShadowMask(this, pb.int(index));\r\n this.diffuseIntensity = pb.vec4(\r\n pb.mul(this.diffuseIntensity.rgb, this.shadowMask),\r\n this.diffuseIntensity.w\r\n );\r\n }\r\n this.$l.thickness = pb.float(1);\r\n if (that.drawContext.transmissionThickness) {\r\n this.thickness = ShaderHelper.sampleTransmissionThickness(this, pb.int(index));\r\n }\r\n this.$l.lightType = pb.int(this.extra.w);\r\n this.$scope(function () {\r\n callback.call(\r\n this,\r\n this.lightType,\r\n this.positionRange,\r\n this.directionCutoff,\r\n this.diffuseIntensity,\r\n this.extra,\r\n false,\r\n this.thickness,\r\n this.unshadowedIntensity\r\n );\r\n });\r\n };\r\n scope.$scope(function () {\r\n // Lights that reach every fragment (directional) are kept out of the clusters.\r\n const globalLights = ShaderHelper.getGlobalLights(this);\r\n this.$for(pb.int('g'), 0, MAX_GLOBAL_LIGHTS, function () {\r\n this.$l.gi = globalLights.at(this.g);\r\n this.$if(pb.equal(this.gi, 0), function () {\r\n this.$break();\r\n });\r\n this.$scope(function () {\r\n shadeLight.call(this, this.gi);\r\n });\r\n });\r\n const countParams = ShaderHelper.getCountParams(this);\r\n this.$l.cluster = that.getClusterIndex(this, this.$builtins.fragCoord.xyz);\r\n this.$l.clusterIndex = pb.add(\r\n this.cluster.x,\r\n pb.mul(this.cluster.y, countParams.x),\r\n pb.mul(this.cluster.z, countParams.x, countParams.y)\r\n );\r\n if (ShaderHelper.usesClusterLightLists()) {\r\n // The cluster's lights are list[offset .. offset + count), however many.\r\n const grid = ShaderHelper.getClusterGrid(this);\r\n const list = ShaderHelper.getClusterLightList(this);\r\n this.$l.cell = pb.mul(pb.uint(this.clusterIndex), 2);\r\n this.$l.listOffset = grid.at(this.cell);\r\n this.$l.listCount = grid.at(pb.add(this.cell, 1));\r\n this.$for(pb.uint('n'), 0, this.listCount, function () {\r\n this.$l.c = list.at(pb.add(this.listOffset, this.n));\r\n this.$scope(function () {\r\n shadeLight.call(this, this.c);\r\n });\r\n });\r\n return;\r\n }\r\n this.$l.texSize = scope.light.lightIndexTexSize;\r\n this.$l.texCoordX = pb.mod(this.clusterIndex, this.texSize.x);\r\n this.$l.texCoordY = pb.div(this.clusterIndex, this.texSize.x);\r\n this.$l.samp = pb.textureLoad(\r\n ShaderHelper.getClusteredLightIndexTexture(this),\r\n pb.ivec2(this.texCoordX, this.texCoordY),\r\n 0\r\n );\r\n // Slots are packed front to back (slot 0 in the top byte of .r) with a zero tail, so\r\n // walk them in that order and stop at the first empty one.\r\n this.$for(pb.uint('n'), 0, 16, function () {\r\n this.$l.c = pb.compAnd(\r\n pb.sar(this.samp.at(pb.div(this.n, 4)), pb.sub(24, pb.mul(pb.compAnd(this.n, 3), 8))),\r\n 0xff\r\n );\r\n this.$if(pb.equal(this.c, 0), function () {\r\n this.$break();\r\n });\r\n this.$scope(function () {\r\n shadeLight.call(this, this.c);\r\n });\r\n });\r\n });\r\n }\r\n }\r\n /**\r\n * Fragment shader implementation\r\n *\r\n * @param scope - Shader scope\r\n * @returns Calucated fragment color\r\n */\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n if (this.hasNormalTexture()) {\r\n scope.zNormalScale = pb.float().uniform(2);\r\n scope.zNormalYSign = pb.float().uniform(2);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Material.supportLighting}\r\n * @override\r\n */\r\n supportLighting() {\r\n return true;\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinLight };\r\n FEATURE_DOUBLE_SIDED_LIGHTING = cls.defineFeature();\r\n FEATURE_OBJECT_SPACE_NORMALMAP = cls.defineFeature();\r\n return cls;\r\n}\r\n"],"names":["mixinLight","BaseCls","lightMixed","S","applyMaterialMixins","mixinAlbedoColor","mixinTextureProps","FEATURE_DOUBLE_SIDED_LIGHTING","FEATURE_OBJECT_SPACE_NORMALMAP","cls","_normalScale","_normalFlipY","useFeature","copyFrom","other","normalScale","normalFlipY","normalMapMode","doubleSidedLighting","val","uniformChanged","flip","featureUsed","calculateViewVector","scope","worldPos","pb","$builder","normalize","sub","ShaderHelper","getCameraPosition","xyz","calculateReflectionVector","normal","viewVec","reflect","neg","calculateNormal","worldNormal","worldTangent","worldBinormal","that","args","params","vec3","funcName","push","func","$l","uv","hasNormalTexture","getNormalTexCoord","vec2","hasAlbedoTexture","getAlbedoTexCoord","TBN","calculateTBN","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","pixel","mul","textureSample","getNormalTextureUniform","rgb","normalTex","zNormalScale","zNormalYSign","$return","getGlobalScope","getUniformNormalScale","calculateNormalAndTBN","NormalStruct","defineStruct","mat3","posW","uv_dx","dpdx","uv_dy","dpdy","$if","lessThanEqual","add","length","det","x","y","t_","sign","ng","cross","tn","div","max","tRaw","dot","tAxis","greaterThan","abs","lessThan","t","b","cullMode","not","$builtins","frontFacing","applyUniformValues","bindGroup","ctx","pass","setValue","needCalculateEnvLight","drawEnvLight","getEnvLightIrradiance","console","warn","env","light","envLight","hasIrradiance","getIrradiance","getEnvLightRadiance","reflectVec","roughness","hasRadiance","getRadiance","getEnvLightStrength","getEnvLightSpecularStrength","currentShadowLight","calculateShadow","NoL","needCalculateShadow","float","receivesWaterCaustics","getClusterIndex","fragCoord","clusterParams","getClusterParams","countParams","getCountParams","sliceDepth","notEqual","getClusterOrthographic","nearFar","getCameraParams","REVERSE_Z","mix","z","$else","log2","nonLinearDepthToLinear","zTile","int","clamp","w","f","xyTile","ivec2","xy","ivec3","calculatePointLightAttenuation","posRange","vec4","d","dist2","lightAtten","range2","f2","calculateSpotLightAttenuation","dirCutoff","angleScaleOffset","physical","scene","lightingMode","falloff","cd","spotFactor","smoothStep","resolvedScaleOffset","calculateRectLightVectorIrradiance","axisX","axisY","defineLTCEdgeFunctions","toCenter","dist","centerDir","planeNormal","ax","ay","or","v0","v1","v2","v3","F","Z_LTCIntegrateEdgeVec","len","Z_rectLightVectorIrradiance","calculateLightAttenuation","extra","equal","lightType","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_POINT","LIGHT_TYPE_RECT","Math","PI","attenuation","caustic","calculateWaterCaustic","calculateLightDirection","$choice","Z_calculateLightDirection","forEachLight","callback","positionAndRange","directionAndCutoff","colorIntensity","diffuseAndIntensity","extraParams","$scope","call","shadeLight","index","positionRange","getLightPositionAndRange","directionCutoff","getLightDirectionAndCutoff","diffuseIntensity","getLightColorAndIntensity","getLightExtra","unshadowedIntensity","screenSpaceShadowMask","shadowMask","sampleShadowMask","thickness","transmissionThickness","sampleTransmissionThickness","globalLights","getGlobalLights","$for","MAX_GLOBAL_LIGHTS","gi","at","g","$break","cluster","clusterIndex","usesClusterLightLists","grid","getClusterGrid","list","getClusterLightList","cell","uint","listOffset","listCount","c","n","texSize","lightIndexTexSize","texCoordX","mod","texCoordY","samp","textureLoad","getClusteredLightIndexTexture","compAnd","sar","fragmentShader","uniform","supportLighting","defineFeature"],"mappings":"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"}