@zephyr3d/scene 0.9.27 → 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 (502) 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 +54 -0
  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 +279 -55
  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 +171 -1
  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 +104 -178
  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 +25436 -15990
  109. package/dist/index.js +65 -11
  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/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -425,7 +425,7 @@ const ToonMaterialBase = applyMaterialMixins(MeshMaterial, mixinAlbedoColor, mix
425
425
  this.$l.directColor = pb.vec3(0);
426
426
  that.forEachLight(this, function(type, posRange, dirCutoff, colorIntensity, extra, shadow) {
427
427
  this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff, extra);
428
- this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);
428
+ this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff, extra);
429
429
  this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);
430
430
  this.$l.NoL = pb.dot(this.normal, this.lightDir);
431
431
  this.$l.shiftedShading = pb.add(this.NoL, this.shadingShift);
@@ -1 +1 @@
1
- {"version":3,"file":"mtoon.js","sources":["../../src/material/mtoon.ts"],"sourcesContent":["import type { Immutable } from '@zephyr3d/base';\r\nimport { DEPTH_COMPARE_CLOSER, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport type { DrawContext, Primitive } from '../render';\r\nimport { applyMaterialMixins, MeshMaterial } from './meshmaterial';\r\nimport { mixinAlbedoColor } from './mixins/albedocolor';\r\nimport { mixinLambert } from './mixins/lightmodel/lambert';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport { ShaderHelper } from './shader/helper';\r\n\r\n/**\r\n * MToonMaterial outline width mode.\r\n *\r\n * @public\r\n */\r\nexport type MToonOutlineWidthMode = 'none' | 'worldCoordinates' | 'screenCoordinates';\r\n\r\ntype RuntimeMaterialPassMethods = {\r\n bind(device: DrawContext['device'], pass: number): boolean;\r\n draw(primitive: Primitive, ctx: DrawContext, numInstances?: number): void;\r\n};\r\n\r\nconst ToonMaterialBase = applyMaterialMixins(\r\n MeshMaterial,\r\n mixinAlbedoColor,\r\n mixinLambert,\r\n mixinTextureProps('shadeMultiply'),\r\n mixinTextureProps('shadingShift'),\r\n mixinTextureProps('matcap'),\r\n mixinTextureProps('rimMultiply'),\r\n mixinTextureProps('outlineWidthMultiply'),\r\n mixinTextureProps('uvAnimationMask'),\r\n mixinTextureProps('emissive')\r\n);\r\n\r\n/**\r\n * MToonMaterial is a material that implements the MToon shader, which is a stylized shader commonly used for rendering anime-style characters. It supports features such as rim lighting, matcap, and outline rendering.\r\n *\r\n * @public\r\n */\r\nexport class MToonMaterial extends ToonMaterialBase {\r\n private static readonly FEATURE_OUTLINE_WIDTH_MODE = this.defineFeature();\r\n private static readonly FEATURE_OUTLINE_TANGENT_NORMALS = this.defineFeature();\r\n private readonly _shadeColorFactor: Vector3;\r\n private readonly _matcapFactor: Vector3;\r\n private readonly _parametricRimColorFactor: Vector3;\r\n private readonly _outlineColorFactor: Vector3;\r\n private readonly _uvAnimationScroll: Vector2;\r\n private readonly _emissiveColor: Vector3;\r\n private _shadingShiftFactor: number;\r\n private _shadingShiftTextureScale: number;\r\n private _shadingToonyFactor: number;\r\n private _giEqualizationFactor: number;\r\n private _parametricRimFresnelPowerFactor: number;\r\n private _parametricRimLiftFactor: number;\r\n private _rimLightingMixFactor: number;\r\n private _outlineWidthFactor: number;\r\n private _outlineLightingMixFactor: number;\r\n private _uvAnimationRotationSpeedFactor: number;\r\n private _emissiveStrength: number;\r\n private _transparentWithZWrite: boolean;\r\n private _renderQueueOffsetNumber: number;\r\n constructor() {\r\n super();\r\n this._shadeColorFactor = new Vector3(0, 0, 0);\r\n this._matcapFactor = new Vector3(1, 1, 1);\r\n this._parametricRimColorFactor = new Vector3(0, 0, 0);\r\n this._outlineColorFactor = new Vector3(0, 0, 0);\r\n this._uvAnimationScroll = new Vector2(0, 0);\r\n this._emissiveColor = new Vector3(0, 0, 0);\r\n this._shadingShiftFactor = 0;\r\n this._shadingShiftTextureScale = 1;\r\n this._shadingToonyFactor = 0.9;\r\n this._giEqualizationFactor = 0.9;\r\n this._parametricRimFresnelPowerFactor = 5;\r\n this._parametricRimLiftFactor = 0;\r\n this._rimLightingMixFactor = 1;\r\n this._outlineWidthFactor = 0;\r\n this._outlineLightingMixFactor = 1;\r\n this._uvAnimationRotationSpeedFactor = 0;\r\n this._emissiveStrength = 1;\r\n this._transparentWithZWrite = false;\r\n this._renderQueueOffsetNumber = 0;\r\n this.outlineWidthMode = 'none';\r\n this.outlineUsesTangentNormals = false;\r\n }\r\n get shadeColorFactor(): Immutable<Vector3> {\r\n return this._shadeColorFactor;\r\n }\r\n set shadeColorFactor(val: Immutable<Vector3>) {\r\n this._shadeColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get shadingShiftFactor(): number {\r\n return this._shadingShiftFactor;\r\n }\r\n set shadingShiftFactor(val: number) {\r\n if (val !== this._shadingShiftFactor) {\r\n this._shadingShiftFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get shadingShiftTextureScale(): number {\r\n return this._shadingShiftTextureScale;\r\n }\r\n set shadingShiftTextureScale(val: number) {\r\n if (val !== this._shadingShiftTextureScale) {\r\n this._shadingShiftTextureScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get shadingToonyFactor(): number {\r\n return this._shadingToonyFactor;\r\n }\r\n set shadingToonyFactor(val: number) {\r\n const toony = Math.min(Math.max(val, 0), 0.99);\r\n if (toony !== this._shadingToonyFactor) {\r\n this._shadingToonyFactor = toony;\r\n this.uniformChanged();\r\n }\r\n }\r\n get giEqualizationFactor(): number {\r\n return this._giEqualizationFactor;\r\n }\r\n set giEqualizationFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._giEqualizationFactor) {\r\n this._giEqualizationFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get matcapFactor(): Immutable<Vector3> {\r\n return this._matcapFactor;\r\n }\r\n set matcapFactor(val: Immutable<Vector3>) {\r\n this._matcapFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get parametricRimColorFactor(): Immutable<Vector3> {\r\n return this._parametricRimColorFactor;\r\n }\r\n set parametricRimColorFactor(val: Immutable<Vector3>) {\r\n this._parametricRimColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get parametricRimFresnelPowerFactor(): number {\r\n return this._parametricRimFresnelPowerFactor;\r\n }\r\n set parametricRimFresnelPowerFactor(val: number) {\r\n if (val !== this._parametricRimFresnelPowerFactor) {\r\n this._parametricRimFresnelPowerFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get parametricRimLiftFactor(): number {\r\n return this._parametricRimLiftFactor;\r\n }\r\n set parametricRimLiftFactor(val: number) {\r\n if (val !== this._parametricRimLiftFactor) {\r\n this._parametricRimLiftFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get rimLightingMixFactor(): number {\r\n return this._rimLightingMixFactor;\r\n }\r\n set rimLightingMixFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._rimLightingMixFactor) {\r\n this._rimLightingMixFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineWidthMode(): MToonOutlineWidthMode {\r\n return this.featureUsed<MToonOutlineWidthMode>(MToonMaterial.FEATURE_OUTLINE_WIDTH_MODE);\r\n }\r\n set outlineWidthMode(val: MToonOutlineWidthMode) {\r\n if (val !== 'none' && this.numPasses < 2) {\r\n this.numPasses = 2;\r\n }\r\n this.useFeature(MToonMaterial.FEATURE_OUTLINE_WIDTH_MODE, val);\r\n this.numPasses = val === 'none' ? 1 : 2;\r\n }\r\n get outlineWidthFactor(): number {\r\n return this._outlineWidthFactor;\r\n }\r\n set outlineWidthFactor(val: number) {\r\n const width = Math.max(val, 0);\r\n if (width !== this._outlineWidthFactor) {\r\n this._outlineWidthFactor = width;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineColorFactor(): Immutable<Vector3> {\r\n return this._outlineColorFactor;\r\n }\r\n set outlineColorFactor(val: Immutable<Vector3>) {\r\n this._outlineColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get outlineLightingMixFactor(): number {\r\n return this._outlineLightingMixFactor;\r\n }\r\n set outlineLightingMixFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._outlineLightingMixFactor) {\r\n this._outlineLightingMixFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineUsesTangentNormals(): boolean {\r\n return !!this.featureUsed<boolean>(MToonMaterial.FEATURE_OUTLINE_TANGENT_NORMALS);\r\n }\r\n set outlineUsesTangentNormals(val: boolean) {\r\n this.useFeature(MToonMaterial.FEATURE_OUTLINE_TANGENT_NORMALS, !!val);\r\n }\r\n get transparentWithZWrite(): boolean {\r\n return this._transparentWithZWrite;\r\n }\r\n set transparentWithZWrite(val: boolean) {\r\n if (!!val !== this._transparentWithZWrite) {\r\n this._transparentWithZWrite = !!val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get renderQueueOffsetNumber(): number {\r\n return this._renderQueueOffsetNumber;\r\n }\r\n set renderQueueOffsetNumber(val: number) {\r\n const offset = Math.trunc(val);\r\n if (offset !== this._renderQueueOffsetNumber) {\r\n this._renderQueueOffsetNumber = offset;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationScrollXSpeedFactor(): number {\r\n return this._uvAnimationScroll.x;\r\n }\r\n set uvAnimationScrollXSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationScroll.x) {\r\n this._uvAnimationScroll.x = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationScrollYSpeedFactor(): number {\r\n return this._uvAnimationScroll.y;\r\n }\r\n set uvAnimationScrollYSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationScroll.y) {\r\n this._uvAnimationScroll.y = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationRotationSpeedFactor(): number {\r\n return this._uvAnimationRotationSpeedFactor;\r\n }\r\n set uvAnimationRotationSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationRotationSpeedFactor) {\r\n this._uvAnimationRotationSpeedFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get emissiveColor(): Immutable<Vector3> {\r\n return this._emissiveColor;\r\n }\r\n set emissiveColor(val: Immutable<Vector3>) {\r\n this._emissiveColor.set(val);\r\n this.uniformChanged();\r\n }\r\n get emissiveStrength(): number {\r\n return this._emissiveStrength;\r\n }\r\n set emissiveStrength(val: number) {\r\n if (val !== this._emissiveStrength) {\r\n this._emissiveStrength = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n clone(): MToonMaterial {\r\n const other = new MToonMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.shadeColorFactor = other.shadeColorFactor;\r\n this.shadingShiftFactor = other.shadingShiftFactor;\r\n this.shadingShiftTextureScale = other.shadingShiftTextureScale;\r\n this.shadingToonyFactor = other.shadingToonyFactor;\r\n this.giEqualizationFactor = other.giEqualizationFactor;\r\n this.matcapFactor = other.matcapFactor;\r\n this.parametricRimColorFactor = other.parametricRimColorFactor;\r\n this.parametricRimFresnelPowerFactor = other.parametricRimFresnelPowerFactor;\r\n this.parametricRimLiftFactor = other.parametricRimLiftFactor;\r\n this.rimLightingMixFactor = other.rimLightingMixFactor;\r\n this.outlineWidthMode = other.outlineWidthMode;\r\n this.outlineWidthFactor = other.outlineWidthFactor;\r\n this.outlineColorFactor = other.outlineColorFactor;\r\n this.outlineLightingMixFactor = other.outlineLightingMixFactor;\r\n this.outlineUsesTangentNormals = other.outlineUsesTangentNormals;\r\n this.transparentWithZWrite = other.transparentWithZWrite;\r\n this.renderQueueOffsetNumber = other.renderQueueOffsetNumber;\r\n this.uvAnimationScrollXSpeedFactor = other.uvAnimationScrollXSpeedFactor;\r\n this.uvAnimationScrollYSpeedFactor = other.uvAnimationScrollYSpeedFactor;\r\n this.uvAnimationRotationSpeedFactor = other.uvAnimationRotationSpeedFactor;\r\n this.emissiveColor = other.emissiveColor;\r\n this.emissiveStrength = other.emissiveStrength;\r\n }\r\n getQueueType() {\r\n return this.isTransparentPass(0) ? QUEUE_TRANSPARENT : QUEUE_OPAQUE;\r\n }\r\n passToHash(pass: number): string {\r\n return super.passToHash(pass > 0 ? 1 : 0);\r\n }\r\n isTransparentPass(pass: number, ctx?: DrawContext): boolean {\r\n return pass === 0 && super.isTransparentPass(pass, ctx);\r\n }\r\n protected updateRenderStates(pass: number, stateSet: RenderStateSet, ctx: DrawContext): void {\r\n super.updateRenderStates(pass, stateSet, ctx);\r\n if (pass > 0) {\r\n stateSet.useRasterizerState().cullMode = 'front';\r\n stateSet.defaultBlendingState();\r\n stateSet.useDepthState().enableTest(true).enableWrite(true).setCompareFunc(DEPTH_COMPARE_CLOSER);\r\n } else if (this._transparentWithZWrite && this.isTransparentPass(pass, ctx)) {\r\n stateSet.useDepthState().enableTest(true).enableWrite(true);\r\n }\r\n }\r\n draw(primitive: Primitive, ctx: DrawContext, numInstances = 0): void {\r\n const material = this as unknown as RuntimeMaterialPassMethods;\r\n if (this.numPasses > 1 && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT && !ctx.lightBlending) {\r\n // Draw the inflated hull first so the regular pass hides interior outline fragments.\r\n material.bind(ctx.device, 1);\r\n this.drawPrimitive(1, primitive, ctx, numInstances);\r\n material.bind(ctx.device, 0);\r\n this.drawPrimitive(0, primitive, ctx, numInstances);\r\n } else {\r\n (MeshMaterial.prototype as unknown as RuntimeMaterialPassMethods).draw.call(\r\n this,\r\n primitive,\r\n ctx,\r\n numInstances\r\n );\r\n }\r\n }\r\n drawPrimitive(pass: number, primitive: Primitive, ctx: DrawContext, numInstances: number): void {\r\n if (pass > 0 && (ctx.renderPass!.type !== RENDER_PASS_TYPE_LIGHT || ctx.lightBlending)) {\r\n return;\r\n }\r\n super.drawPrimitive(pass, primitive, ctx, numInstances);\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColorInput(ctx)) {\r\n bindGroup.setValue('shadeColorFactor', this._shadeColorFactor);\r\n bindGroup.setValue('shadingShiftFactor', this._shadingShiftFactor);\r\n bindGroup.setValue('shadingShiftTextureScale', this._shadingShiftTextureScale);\r\n bindGroup.setValue('shadingToonyFactor', this._shadingToonyFactor);\r\n bindGroup.setValue('giEqualizationFactor', this._giEqualizationFactor);\r\n bindGroup.setValue('matcapFactor', this._matcapFactor);\r\n bindGroup.setValue('parametricRimColorFactor', this._parametricRimColorFactor);\r\n bindGroup.setValue('parametricRimFresnelPowerFactor', this._parametricRimFresnelPowerFactor);\r\n bindGroup.setValue('parametricRimLiftFactor', this._parametricRimLiftFactor);\r\n bindGroup.setValue('rimLightingMixFactor', this._rimLightingMixFactor);\r\n bindGroup.setValue('uvAnimationScroll', this._uvAnimationScroll);\r\n bindGroup.setValue('uvAnimationRotationSpeedFactor', this._uvAnimationRotationSpeedFactor);\r\n bindGroup.setValue('emissiveColor', this._emissiveColor);\r\n bindGroup.setValue('emissiveStrength', this._emissiveStrength);\r\n } else if (pass > 0 && this.outlineWidthMultiplyTexture && this.usesAnimatedUV()) {\r\n bindGroup.setValue('uvAnimationScroll', this._uvAnimationScroll);\r\n bindGroup.setValue('uvAnimationRotationSpeedFactor', this._uvAnimationRotationSpeedFactor);\r\n }\r\n if (pass > 0) {\r\n bindGroup.setValue('outlineWidthFactor', this._outlineWidthFactor);\r\n if (this.outlineWidthMultiplyTexture) {\r\n bindGroup.setTexture(\r\n 'outlineWidthTex',\r\n this.outlineWidthMultiplyTexture,\r\n this.outlineWidthMultiplyTextureSampler\r\n );\r\n if (this.uvAnimationMaskTexture && this.usesAnimatedUV()) {\r\n bindGroup.setTexture(\r\n 'uvAnimationMaskTex',\r\n this.uvAnimationMaskTexture,\r\n this.uvAnimationMaskTextureSampler\r\n );\r\n }\r\n if (this.outlineWidthMultiplyTexCoordMatrix) {\r\n bindGroup.setValue('outlineWidthTextureMatrix', this.outlineWidthMultiplyTexCoordMatrix);\r\n }\r\n }\r\n }\r\n if (pass > 0 && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n bindGroup.setValue('outlineColorFactor', this._outlineColorFactor);\r\n bindGroup.setValue('outlineLightingMixFactor', this._outlineLightingMixFactor);\r\n }\r\n }\r\n private usesAnimatedUV(): boolean {\r\n return (\r\n this._uvAnimationScroll.x !== 0 ||\r\n this._uvAnimationScroll.y !== 0 ||\r\n this._uvAnimationRotationSpeedFactor !== 0\r\n );\r\n }\r\n private applyUVAnimation(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n if (!this.usesAnimatedUV()) {\r\n return uv;\r\n }\r\n const pb = scope.$builder;\r\n const funcName = 'Z_mtoonUVAnimation';\r\n const that = this;\r\n if (!scope.uvAnimationScroll) {\r\n scope.uvAnimationScroll = pb.vec2().uniform(2);\r\n }\r\n if (!scope.uvAnimationRotationSpeedFactor) {\r\n scope.uvAnimationRotationSpeedFactor = pb.float().uniform(2);\r\n }\r\n if (that.uvAnimationMaskTexture && pb.shaderKind !== 'fragment' && !scope.uvAnimationMaskTex) {\r\n scope.uvAnimationMaskTex = pb.tex2D().uniform(2);\r\n }\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.mask = that.uvAnimationMaskTexture\r\n ? pb.shaderKind === 'fragment'\r\n ? pb.textureSample(that.getUvAnimationMaskTextureUniform(this), this.uv).b\r\n : pb.textureSampleLevel(this.uvAnimationMaskTex, this.uv, 0).b\r\n : pb.float(1);\r\n this.$l.time = ShaderHelper.getElapsedTime(this);\r\n this.$l.rotation = pb.mul(this.time, this.uvAnimationRotationSpeedFactor, this.mask);\r\n this.$l.c = pb.cos(this.rotation);\r\n this.$l.s = pb.sin(this.rotation);\r\n this.$l.centeredUv = pb.sub(this.uv, pb.vec2(0.5));\r\n this.$l.rotatedUv = pb.add(\r\n pb.vec2(\r\n pb.add(pb.mul(this.c, this.centeredUv.x), pb.mul(this.s, this.centeredUv.y)),\r\n pb.add(pb.mul(pb.neg(this.s), this.centeredUv.x), pb.mul(this.c, this.centeredUv.y))\r\n ),\r\n pb.vec2(0.5)\r\n );\r\n this.$return(pb.add(this.rotatedUv, pb.mul(this.uvAnimationScroll, this.time, this.mask)));\r\n });\r\n return pb.getGlobalScope()[funcName](uv);\r\n }\r\n private getMToonBaseUV(scope: PBInsideFunctionScope): PBShaderExp {\r\n return this.albedoTexture\r\n ? this.applyUVAnimation(scope, this.getAlbedoTexCoord(scope))\r\n : scope.$builder.vec2(0);\r\n }\r\n private getMToonNormalUV(scope: PBInsideFunctionScope): PBShaderExp {\r\n return this.normalTexture\r\n ? this.applyUVAnimation(scope, this.getNormalTexCoord(scope))\r\n : scope.$builder.vec2(0);\r\n }\r\n private sampleAlbedo(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n return this.calculateAlbedoColor(scope, uv);\r\n }\r\n private sampleShadeColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return this.shadeMultiplyTexture\r\n ? pb.mul(\r\n scope.shadeColorFactor,\r\n this.sampleShadeMultiplyTexture(\r\n scope,\r\n this.applyUVAnimation(scope, this.getShadeMultiplyTexCoord(scope))\r\n ).rgb\r\n )\r\n : scope.shadeColorFactor;\r\n }\r\n private sampleNormal(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!this.normalTexture) {\r\n return pb.normalize(scope.$inputs.wNorm);\r\n }\r\n scope.$l.TBN = this.calculateTBN(scope, scope.$inputs.worldPos, scope.$inputs.wNorm);\r\n scope.$l.normalTex = pb.sub(pb.mul(this.sampleNormalTexture(scope, uv).rgb, 2), pb.vec3(1));\r\n scope.normalTex = pb.mul(scope.normalTex, pb.vec3(pb.vec3(this.getUniformNormalScale(scope)).xx, 1));\r\n return pb.normalize(pb.mul(scope.TBN, scope.normalTex));\r\n }\r\n private calculateMToonDirectLighting(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n baseColor: PBShaderExp,\r\n shadeColor: PBShaderExp,\r\n shadingShift: PBShaderExp,\r\n geometricNormal: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_mtoonDirectLighting';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.vec3('baseColor'),\r\n pb.vec3('shadeColor'),\r\n pb.float('shadingShift'),\r\n pb.vec3('geometricNormal')\r\n ],\r\n function () {\r\n this.$l.directColor = pb.vec3(0);\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\r\n this.$l.NoL = pb.dot(this.normal, this.lightDir);\r\n this.$l.shiftedShading = pb.add(this.NoL, this.shadingShift);\r\n this.$l.shading = pb.clamp(\r\n pb.div(\r\n pb.sub(this.shiftedShading, pb.add(-1, this.shadingToonyFactor)),\r\n pb.max(pb.sub(2, pb.mul(this.shadingToonyFactor, 2)), 0.00001)\r\n ),\r\n 0,\r\n 1\r\n );\r\n this.$l.lightDiffuse = pb.mix(this.shadeColor, this.baseColor, this.shading);\r\n if (shadow) {\r\n this.$l.shadowValue = that.calculateShadow(\r\n this,\r\n this.worldPos,\r\n this.geometricNormal,\r\n pb.clamp(this.NoL, 0, 1)\r\n );\r\n this.lightDiffuse = pb.mix(this.shadeColor, this.lightDiffuse, this.shadowValue);\r\n }\r\n this.directColor = pb.add(this.directColor, pb.mul(this.lightDiffuse, this.lightColor));\r\n });\r\n this.$return(this.directColor);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, baseColor, shadeColor, shadingShift, geometricNormal);\r\n }\r\n private calculateMToonGI(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n baseColor: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!this.needCalculateEnvLight()) {\r\n return pb.vec3(0);\r\n }\r\n scope.$l.rawGi = this.getEnvLightIrradiance(scope, normal);\r\n scope.$l.uniformGi = pb.mul(\r\n pb.add(\r\n this.getEnvLightIrradiance(scope, pb.vec3(0, 1, 0)),\r\n this.getEnvLightIrradiance(scope, pb.vec3(0, -1, 0))\r\n ),\r\n 0.5\r\n );\r\n scope.$l.gi = pb.mix(scope.rawGi, scope.uniformGi, scope.giEqualizationFactor);\r\n return pb.mul(scope.gi, baseColor);\r\n }\r\n private calculateMToonRim(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n uv: PBShaderExp,\r\n lighting: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n scope.$l.rim = pb.vec3(0);\r\n if (this.matcapTexture) {\r\n scope.$l.worldViewX = pb.normalize(pb.vec3(viewVec.z, 0, pb.neg(viewVec.x)));\r\n scope.$l.worldViewY = pb.normalize(pb.cross(viewVec, scope.worldViewX));\r\n scope.$l.matcapUv = pb.add(\r\n pb.mul(pb.vec2(pb.dot(scope.worldViewX, normal), pb.dot(scope.worldViewY, normal)), 0.495),\r\n pb.vec2(0.5)\r\n );\r\n scope.rim = pb.add(\r\n scope.rim,\r\n pb.mul(scope.matcapFactor, this.sampleMatcapTexture(scope, scope.matcapUv).rgb)\r\n );\r\n }\r\n scope.$l.NoV = pb.clamp(pb.dot(normal, viewVec), 0, 1);\r\n scope.$l.parametricRim = pb.pow(\r\n pb.clamp(pb.add(pb.sub(1, scope.NoV), scope.parametricRimLiftFactor), 0, 1),\r\n pb.max(scope.parametricRimFresnelPowerFactor, 0.00001)\r\n );\r\n scope.rim = pb.add(scope.rim, pb.mul(scope.parametricRimColorFactor, scope.parametricRim));\r\n if (this.rimMultiplyTexture) {\r\n scope.rim = pb.mul(\r\n scope.rim,\r\n this.sampleRimMultiplyTexture(scope, this.applyUVAnimation(scope, this.getRimMultiplyTexCoord(scope)))\r\n .rgb\r\n );\r\n }\r\n return pb.mul(scope.rim, pb.mix(pb.vec3(1), lighting, scope.rimLightingMixFactor));\r\n }\r\n private calculateMToonEmission(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n const emission = this.emissiveTexture\r\n ? pb.mul(\r\n scope.emissiveColor,\r\n scope.emissiveStrength,\r\n this.sampleEmissiveTexture(scope, this.applyUVAnimation(scope, this.getEmissiveTexCoord(scope))).rgb\r\n )\r\n : pb.mul(scope.emissiveColor, scope.emissiveStrength);\r\n // Material-authored emitters are not covered by the CPU-side light pre-exposure, so a physical\r\n // scene exposes them here. The factor is 1 in legacy.\r\n return pb.mul(emission, ShaderHelper.getPreExposureUniform(scope)) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope): void {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n if (this.pass > 0 && this.outlineUsesTangentNormals) {\r\n scope.$l.oOutlineNorm = ShaderHelper.resolveVertexTangent(scope).xyz;\r\n }\r\n scope.$l.worldNormal = pb.normalize(\r\n pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz\r\n );\r\n scope.$l.worldOutlineNormal =\r\n this.pass > 0 && this.outlineUsesTangentNormals\r\n ? pb.normalize(pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oOutlineNorm, 0)).xyz)\r\n : scope.worldNormal;\r\n scope.$l.worldPos = pb.mul(ShaderHelper.getWorldMatrix(scope), pb.vec4(scope.oPos, 1)).xyz;\r\n if (this.pass > 0) {\r\n scope.outlineWidthFactor = pb.float().uniform(2);\r\n scope.$l.width = scope.outlineWidthFactor;\r\n if (this.outlineWidthMultiplyTexture) {\r\n scope.outlineWidthTex = pb.tex2D().uniform(2);\r\n const uvIndex = this.outlineWidthMultiplyTexCoordIndex;\r\n const semantic = `texCoord${uvIndex}` as any;\r\n if (!scope.$getVertexAttrib(semantic)) {\r\n scope.$inputs[semantic] = pb.vec2().attrib(semantic);\r\n }\r\n if (this.outlineWidthMultiplyTexCoordMatrix) {\r\n scope.outlineWidthTextureMatrix = pb.mat4().uniform(2);\r\n scope.$l.outlineUv = pb.mul(\r\n scope.outlineWidthTextureMatrix,\r\n pb.vec4(this.applyUVAnimation(scope, scope.$inputs[semantic]), 0, 1)\r\n ).xy;\r\n } else {\r\n scope.$l.outlineUv = this.applyUVAnimation(scope, scope.$inputs[semantic]);\r\n }\r\n scope.width = pb.mul(scope.width, pb.textureSampleLevel(scope.outlineWidthTex, scope.outlineUv, 0).g);\r\n }\r\n scope.width = pb.max(scope.width, 0);\r\n scope.$l.hasOutlineWidth = pb.float(pb.greaterThan(scope.width, 0));\r\n if (this.outlineWidthMode === 'worldCoordinates') {\r\n scope.$l.baseClipPos = pb.mul(\r\n ShaderHelper.getViewProjectionMatrix(scope),\r\n pb.vec4(scope.worldPos, 1)\r\n );\r\n scope.worldPos = pb.add(scope.worldPos, pb.mul(scope.worldOutlineNormal, scope.width));\r\n scope.$l.clipPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.worldPos, 1));\r\n scope.$l.baseNdc = pb.div(scope.baseClipPos.xy, pb.max(scope.baseClipPos.w, 0.00001));\r\n scope.$l.inflatedNdc = pb.div(scope.clipPos.xy, pb.max(scope.clipPos.w, 0.00001));\r\n scope.$l.outlineNdcDelta = pb.sub(scope.inflatedNdc, scope.baseNdc);\r\n scope.$l.outlinePixelWidth = pb.length(\r\n pb.mul(scope.outlineNdcDelta, ShaderHelper.getRenderSize(scope), 0.5)\r\n );\r\n scope.$l.outlinePixelScale = pb.mix(\r\n 1,\r\n pb.div(pb.max(scope.outlinePixelWidth, 1), pb.max(scope.outlinePixelWidth, 0.00001)),\r\n scope.hasOutlineWidth\r\n );\r\n scope.$l.adjustedNdc = pb.add(scope.baseNdc, pb.mul(scope.outlineNdcDelta, scope.outlinePixelScale));\r\n scope.clipPos = pb.vec4(pb.mul(scope.adjustedNdc, scope.clipPos.w), scope.clipPos.zw);\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = scope.worldOutlineNormal;\r\n ShaderHelper.setClipSpacePosition(scope, scope.clipPos);\r\n return;\r\n } else if (this.outlineWidthMode === 'screenCoordinates') {\r\n scope.$l.clipNormalPos = pb.mul(\r\n ShaderHelper.getViewProjectionMatrix(scope),\r\n pb.vec4(pb.add(scope.worldPos, scope.worldOutlineNormal), 1)\r\n );\r\n scope.$l.clipPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.worldPos, 1));\r\n scope.$l.screenNormal = pb.sub(\r\n pb.div(scope.clipNormalPos.xy, pb.max(scope.clipNormalPos.w, 0.00001)),\r\n pb.div(scope.clipPos.xy, pb.max(scope.clipPos.w, 0.00001))\r\n );\r\n scope.screenNormal = pb.normalize(\r\n pb.mul(\r\n scope.screenNormal,\r\n pb.vec2(1, pb.div(ShaderHelper.getRenderSize(scope).x, ShaderHelper.getRenderSize(scope).y))\r\n )\r\n );\r\n scope.$l.screenUnitPixels = pb.length(\r\n pb.mul(scope.screenNormal, ShaderHelper.getRenderSize(scope), 0.5)\r\n );\r\n scope.width = pb.mul(\r\n pb.max(scope.width, pb.div(1, pb.max(scope.screenUnitPixels, 0.00001))),\r\n scope.hasOutlineWidth\r\n );\r\n\r\n //scope.clipPos.xy = pb.add(scope.clipPos.xy, pb.mul(scope.screenNormal, scope.width, scope.clipPos.w));\r\n scope.clipPos = pb.vec4(\r\n pb.add(scope.clipPos.xy, pb.mul(scope.screenNormal, scope.width, scope.clipPos.w)),\r\n scope.clipPos.zw\r\n );\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = scope.worldOutlineNormal;\r\n ShaderHelper.setClipSpacePosition(scope, scope.clipPos);\r\n return;\r\n }\r\n }\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = this.pass > 0 ? scope.worldOutlineNormal : scope.worldNormal;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n }\r\n fragmentShader(scope: PBFunctionScope): void {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColorInput()) {\r\n scope.shadeColorFactor = pb.vec3().uniform(2);\r\n scope.shadingShiftFactor = pb.float().uniform(2);\r\n scope.shadingShiftTextureScale = pb.float().uniform(2);\r\n scope.shadingToonyFactor = pb.float().uniform(2);\r\n scope.giEqualizationFactor = pb.float().uniform(2);\r\n scope.matcapFactor = pb.vec3().uniform(2);\r\n scope.parametricRimColorFactor = pb.vec3().uniform(2);\r\n scope.parametricRimFresnelPowerFactor = pb.float().uniform(2);\r\n scope.parametricRimLiftFactor = pb.float().uniform(2);\r\n scope.rimLightingMixFactor = pb.float().uniform(2);\r\n scope.uvAnimationScroll = pb.vec2().uniform(2);\r\n scope.uvAnimationRotationSpeedFactor = pb.float().uniform(2);\r\n scope.emissiveColor = pb.vec3().uniform(2);\r\n scope.emissiveStrength = pb.float().uniform(2);\r\n if (this.pass > 0) {\r\n scope.outlineColorFactor = pb.vec3().uniform(2);\r\n scope.outlineLightingMixFactor = pb.float().uniform(2);\r\n scope.$l.albedo = this.sampleAlbedo(scope, this.getMToonBaseUV(scope));\r\n scope.$l.outlineLighting = pb.mix(pb.vec3(1), scope.albedo.rgb, scope.outlineLightingMixFactor);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(pb.mul(scope.outlineColorFactor, scope.outlineLighting), scope.albedo.a)\r\n );\r\n } else {\r\n scope.$l.uv = this.getMToonBaseUV(scope);\r\n scope.$l.albedo = this.sampleAlbedo(scope, scope.uv);\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normal = this.sampleNormal(scope, this.getMToonNormalUV(scope));\r\n scope.$l.shadingShift = scope.shadingShiftFactor;\r\n if (this.shadingShiftTexture) {\r\n scope.shadingShift = pb.add(\r\n scope.shadingShift,\r\n pb.mul(\r\n this.sampleShadingShiftTexture(\r\n scope,\r\n this.applyUVAnimation(scope, this.getShadingShiftTexCoord(scope))\r\n ).r,\r\n scope.shadingShiftTextureScale\r\n )\r\n );\r\n }\r\n scope.$l.shadeColor = this.sampleShadeColor(scope);\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n scope.$l.directLighting = this.calculateMToonDirectLighting(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normal,\r\n scope.albedo.rgb,\r\n scope.shadeColor,\r\n scope.shadingShift,\r\n pb.normalize(scope.$inputs.wNorm)\r\n );\r\n scope.$l.giLighting = this.calculateMToonGI(scope, scope.normal, scope.albedo.rgb);\r\n scope.$l.lighting = pb.max(scope.directLighting, scope.giLighting);\r\n scope.$l.rim = this.calculateMToonRim(scope, scope.normal, scope.viewVec, scope.uv, scope.lighting);\r\n scope.$l.emission = this.calculateMToonEmission(scope);\r\n scope.$l.outColor = pb.vec4(\r\n pb.add(scope.directLighting, scope.giLighting, scope.rim, scope.emission),\r\n scope.albedo.a\r\n );\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.outColor,\r\n pb.vec4(1, 1, 0, 1),\r\n pb.vec4(pb.add(pb.mul(scope.normal, 0.5), pb.vec3(0.5)), 1)\r\n );\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n}\r\n"],"names":["ToonMaterialBase","applyMaterialMixins","MeshMaterial","mixinAlbedoColor","mixinLambert","mixinTextureProps","MToonMaterial","FEATURE_OUTLINE_WIDTH_MODE","defineFeature","FEATURE_OUTLINE_TANGENT_NORMALS","_shadeColorFactor","_matcapFactor","_parametricRimColorFactor","_outlineColorFactor","_uvAnimationScroll","_emissiveColor","_shadingShiftFactor","_shadingShiftTextureScale","_shadingToonyFactor","_giEqualizationFactor","_parametricRimFresnelPowerFactor","_parametricRimLiftFactor","_rimLightingMixFactor","_outlineWidthFactor","_outlineLightingMixFactor","_uvAnimationRotationSpeedFactor","_emissiveStrength","_transparentWithZWrite","_renderQueueOffsetNumber","Vector3","Vector2","outlineWidthMode","outlineUsesTangentNormals","shadeColorFactor","val","set","uniformChanged","shadingShiftFactor","shadingShiftTextureScale","shadingToonyFactor","toony","Math","min","max","giEqualizationFactor","factor","matcapFactor","parametricRimColorFactor","parametricRimFresnelPowerFactor","parametricRimLiftFactor","rimLightingMixFactor","featureUsed","numPasses","useFeature","outlineWidthFactor","width","outlineColorFactor","outlineLightingMixFactor","transparentWithZWrite","renderQueueOffsetNumber","offset","trunc","uvAnimationScrollXSpeedFactor","x","uvAnimationScrollYSpeedFactor","y","uvAnimationRotationSpeedFactor","emissiveColor","emissiveStrength","clone","other","copyFrom","getQueueType","isTransparentPass","QUEUE_TRANSPARENT","QUEUE_OPAQUE","passToHash","pass","ctx","updateRenderStates","stateSet","useRasterizerState","cullMode","defaultBlendingState","useDepthState","enableTest","enableWrite","setCompareFunc","DEPTH_COMPARE_CLOSER","draw","primitive","numInstances","material","renderPass","type","RENDER_PASS_TYPE_LIGHT","lightBlending","bind","device","drawPrimitive","prototype","call","applyUniformValues","bindGroup","needFragmentColorInput","setValue","outlineWidthMultiplyTexture","usesAnimatedUV","setTexture","outlineWidthMultiplyTextureSampler","uvAnimationMaskTexture","uvAnimationMaskTextureSampler","outlineWidthMultiplyTexCoordMatrix","applyUVAnimation","scope","uv","pb","$builder","funcName","that","uvAnimationScroll","vec2","uniform","float","shaderKind","uvAnimationMaskTex","tex2D","func","$l","mask","textureSample","getUvAnimationMaskTextureUniform","b","textureSampleLevel","time","ShaderHelper","getElapsedTime","rotation","mul","c","cos","s","sin","centeredUv","sub","rotatedUv","add","neg","$return","getGlobalScope","getMToonBaseUV","albedoTexture","getAlbedoTexCoord","getMToonNormalUV","normalTexture","getNormalTexCoord","sampleAlbedo","calculateAlbedoColor","sampleShadeColor","shadeMultiplyTexture","sampleShadeMultiplyTexture","getShadeMultiplyTexCoord","rgb","sampleNormal","normalize","$inputs","wNorm","TBN","calculateTBN","worldPos","normalTex","sampleNormalTexture","vec3","getUniformNormalScale","xx","calculateMToonDirectLighting","normal","baseColor","shadeColor","shadingShift","geometricNormal","directColor","forEachLight","posRange","dirCutoff","colorIntensity","extra","shadow","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","lightColor","a","NoL","dot","shiftedShading","shading","clamp","div","lightDiffuse","mix","shadowValue","calculateShadow","calculateMToonGI","needCalculateEnvLight","rawGi","getEnvLightIrradiance","uniformGi","gi","calculateMToonRim","viewVec","lighting","rim","matcapTexture","worldViewX","z","worldViewY","cross","matcapUv","sampleMatcapTexture","NoV","parametricRim","pow","rimMultiplyTexture","sampleRimMultiplyTexture","getRimMultiplyTexCoord","calculateMToonEmission","emission","emissiveTexture","sampleEmissiveTexture","getEmissiveTexCoord","getPreExposureUniform","vertexShader","oPos","resolveVertexPosition","oNorm","resolveVertexNormal","oOutlineNorm","resolveVertexTangent","xyz","worldNormal","getNormalMatrix","vec4","worldOutlineNormal","getWorldMatrix","outlineWidthTex","uvIndex","outlineWidthMultiplyTexCoordIndex","semantic","$getVertexAttrib","attrib","outlineWidthTextureMatrix","mat4","outlineUv","xy","g","hasOutlineWidth","greaterThan","baseClipPos","getViewProjectionMatrix","clipPos","baseNdc","w","inflatedNdc","outlineNdcDelta","outlinePixelWidth","length","getRenderSize","outlinePixelScale","adjustedNdc","zw","$outputs","setClipSpacePosition","clipNormalPos","screenNormal","screenUnitPixels","fragmentShader","albedo","outlineLighting","outputFragmentColor","drawContext","shadingShiftTexture","sampleShadingShiftTexture","getShadingShiftTexCoord","r","calculateViewVector","directLighting","giLighting","outColor"],"mappings":"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"}
1
+ {"version":3,"file":"mtoon.js","sources":["../../src/material/mtoon.ts"],"sourcesContent":["import type { Immutable } from '@zephyr3d/base';\r\nimport { DEPTH_COMPARE_CLOSER, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport type { DrawContext, Primitive } from '../render';\r\nimport { applyMaterialMixins, MeshMaterial } from './meshmaterial';\r\nimport { mixinAlbedoColor } from './mixins/albedocolor';\r\nimport { mixinLambert } from './mixins/lightmodel/lambert';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport { ShaderHelper } from './shader/helper';\r\n\r\n/**\r\n * MToonMaterial outline width mode.\r\n *\r\n * @public\r\n */\r\nexport type MToonOutlineWidthMode = 'none' | 'worldCoordinates' | 'screenCoordinates';\r\n\r\ntype RuntimeMaterialPassMethods = {\r\n bind(device: DrawContext['device'], pass: number): boolean;\r\n draw(primitive: Primitive, ctx: DrawContext, numInstances?: number): void;\r\n};\r\n\r\nconst ToonMaterialBase = applyMaterialMixins(\r\n MeshMaterial,\r\n mixinAlbedoColor,\r\n mixinLambert,\r\n mixinTextureProps('shadeMultiply'),\r\n mixinTextureProps('shadingShift'),\r\n mixinTextureProps('matcap'),\r\n mixinTextureProps('rimMultiply'),\r\n mixinTextureProps('outlineWidthMultiply'),\r\n mixinTextureProps('uvAnimationMask'),\r\n mixinTextureProps('emissive')\r\n);\r\n\r\n/**\r\n * MToonMaterial is a material that implements the MToon shader, which is a stylized shader commonly used for rendering anime-style characters. It supports features such as rim lighting, matcap, and outline rendering.\r\n *\r\n * @public\r\n */\r\nexport class MToonMaterial extends ToonMaterialBase {\r\n private static readonly FEATURE_OUTLINE_WIDTH_MODE = this.defineFeature();\r\n private static readonly FEATURE_OUTLINE_TANGENT_NORMALS = this.defineFeature();\r\n private readonly _shadeColorFactor: Vector3;\r\n private readonly _matcapFactor: Vector3;\r\n private readonly _parametricRimColorFactor: Vector3;\r\n private readonly _outlineColorFactor: Vector3;\r\n private readonly _uvAnimationScroll: Vector2;\r\n private readonly _emissiveColor: Vector3;\r\n private _shadingShiftFactor: number;\r\n private _shadingShiftTextureScale: number;\r\n private _shadingToonyFactor: number;\r\n private _giEqualizationFactor: number;\r\n private _parametricRimFresnelPowerFactor: number;\r\n private _parametricRimLiftFactor: number;\r\n private _rimLightingMixFactor: number;\r\n private _outlineWidthFactor: number;\r\n private _outlineLightingMixFactor: number;\r\n private _uvAnimationRotationSpeedFactor: number;\r\n private _emissiveStrength: number;\r\n private _transparentWithZWrite: boolean;\r\n private _renderQueueOffsetNumber: number;\r\n constructor() {\r\n super();\r\n this._shadeColorFactor = new Vector3(0, 0, 0);\r\n this._matcapFactor = new Vector3(1, 1, 1);\r\n this._parametricRimColorFactor = new Vector3(0, 0, 0);\r\n this._outlineColorFactor = new Vector3(0, 0, 0);\r\n this._uvAnimationScroll = new Vector2(0, 0);\r\n this._emissiveColor = new Vector3(0, 0, 0);\r\n this._shadingShiftFactor = 0;\r\n this._shadingShiftTextureScale = 1;\r\n this._shadingToonyFactor = 0.9;\r\n this._giEqualizationFactor = 0.9;\r\n this._parametricRimFresnelPowerFactor = 5;\r\n this._parametricRimLiftFactor = 0;\r\n this._rimLightingMixFactor = 1;\r\n this._outlineWidthFactor = 0;\r\n this._outlineLightingMixFactor = 1;\r\n this._uvAnimationRotationSpeedFactor = 0;\r\n this._emissiveStrength = 1;\r\n this._transparentWithZWrite = false;\r\n this._renderQueueOffsetNumber = 0;\r\n this.outlineWidthMode = 'none';\r\n this.outlineUsesTangentNormals = false;\r\n }\r\n get shadeColorFactor(): Immutable<Vector3> {\r\n return this._shadeColorFactor;\r\n }\r\n set shadeColorFactor(val: Immutable<Vector3>) {\r\n this._shadeColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get shadingShiftFactor(): number {\r\n return this._shadingShiftFactor;\r\n }\r\n set shadingShiftFactor(val: number) {\r\n if (val !== this._shadingShiftFactor) {\r\n this._shadingShiftFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get shadingShiftTextureScale(): number {\r\n return this._shadingShiftTextureScale;\r\n }\r\n set shadingShiftTextureScale(val: number) {\r\n if (val !== this._shadingShiftTextureScale) {\r\n this._shadingShiftTextureScale = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get shadingToonyFactor(): number {\r\n return this._shadingToonyFactor;\r\n }\r\n set shadingToonyFactor(val: number) {\r\n const toony = Math.min(Math.max(val, 0), 0.99);\r\n if (toony !== this._shadingToonyFactor) {\r\n this._shadingToonyFactor = toony;\r\n this.uniformChanged();\r\n }\r\n }\r\n get giEqualizationFactor(): number {\r\n return this._giEqualizationFactor;\r\n }\r\n set giEqualizationFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._giEqualizationFactor) {\r\n this._giEqualizationFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get matcapFactor(): Immutable<Vector3> {\r\n return this._matcapFactor;\r\n }\r\n set matcapFactor(val: Immutable<Vector3>) {\r\n this._matcapFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get parametricRimColorFactor(): Immutable<Vector3> {\r\n return this._parametricRimColorFactor;\r\n }\r\n set parametricRimColorFactor(val: Immutable<Vector3>) {\r\n this._parametricRimColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get parametricRimFresnelPowerFactor(): number {\r\n return this._parametricRimFresnelPowerFactor;\r\n }\r\n set parametricRimFresnelPowerFactor(val: number) {\r\n if (val !== this._parametricRimFresnelPowerFactor) {\r\n this._parametricRimFresnelPowerFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get parametricRimLiftFactor(): number {\r\n return this._parametricRimLiftFactor;\r\n }\r\n set parametricRimLiftFactor(val: number) {\r\n if (val !== this._parametricRimLiftFactor) {\r\n this._parametricRimLiftFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get rimLightingMixFactor(): number {\r\n return this._rimLightingMixFactor;\r\n }\r\n set rimLightingMixFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._rimLightingMixFactor) {\r\n this._rimLightingMixFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineWidthMode(): MToonOutlineWidthMode {\r\n return this.featureUsed<MToonOutlineWidthMode>(MToonMaterial.FEATURE_OUTLINE_WIDTH_MODE);\r\n }\r\n set outlineWidthMode(val: MToonOutlineWidthMode) {\r\n if (val !== 'none' && this.numPasses < 2) {\r\n this.numPasses = 2;\r\n }\r\n this.useFeature(MToonMaterial.FEATURE_OUTLINE_WIDTH_MODE, val);\r\n this.numPasses = val === 'none' ? 1 : 2;\r\n }\r\n get outlineWidthFactor(): number {\r\n return this._outlineWidthFactor;\r\n }\r\n set outlineWidthFactor(val: number) {\r\n const width = Math.max(val, 0);\r\n if (width !== this._outlineWidthFactor) {\r\n this._outlineWidthFactor = width;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineColorFactor(): Immutable<Vector3> {\r\n return this._outlineColorFactor;\r\n }\r\n set outlineColorFactor(val: Immutable<Vector3>) {\r\n this._outlineColorFactor.set(val);\r\n this.uniformChanged();\r\n }\r\n get outlineLightingMixFactor(): number {\r\n return this._outlineLightingMixFactor;\r\n }\r\n set outlineLightingMixFactor(val: number) {\r\n const factor = Math.min(Math.max(val, 0), 1);\r\n if (factor !== this._outlineLightingMixFactor) {\r\n this._outlineLightingMixFactor = factor;\r\n this.uniformChanged();\r\n }\r\n }\r\n get outlineUsesTangentNormals(): boolean {\r\n return !!this.featureUsed<boolean>(MToonMaterial.FEATURE_OUTLINE_TANGENT_NORMALS);\r\n }\r\n set outlineUsesTangentNormals(val: boolean) {\r\n this.useFeature(MToonMaterial.FEATURE_OUTLINE_TANGENT_NORMALS, !!val);\r\n }\r\n get transparentWithZWrite(): boolean {\r\n return this._transparentWithZWrite;\r\n }\r\n set transparentWithZWrite(val: boolean) {\r\n if (!!val !== this._transparentWithZWrite) {\r\n this._transparentWithZWrite = !!val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get renderQueueOffsetNumber(): number {\r\n return this._renderQueueOffsetNumber;\r\n }\r\n set renderQueueOffsetNumber(val: number) {\r\n const offset = Math.trunc(val);\r\n if (offset !== this._renderQueueOffsetNumber) {\r\n this._renderQueueOffsetNumber = offset;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationScrollXSpeedFactor(): number {\r\n return this._uvAnimationScroll.x;\r\n }\r\n set uvAnimationScrollXSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationScroll.x) {\r\n this._uvAnimationScroll.x = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationScrollYSpeedFactor(): number {\r\n return this._uvAnimationScroll.y;\r\n }\r\n set uvAnimationScrollYSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationScroll.y) {\r\n this._uvAnimationScroll.y = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get uvAnimationRotationSpeedFactor(): number {\r\n return this._uvAnimationRotationSpeedFactor;\r\n }\r\n set uvAnimationRotationSpeedFactor(val: number) {\r\n if (val !== this._uvAnimationRotationSpeedFactor) {\r\n this._uvAnimationRotationSpeedFactor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get emissiveColor(): Immutable<Vector3> {\r\n return this._emissiveColor;\r\n }\r\n set emissiveColor(val: Immutable<Vector3>) {\r\n this._emissiveColor.set(val);\r\n this.uniformChanged();\r\n }\r\n get emissiveStrength(): number {\r\n return this._emissiveStrength;\r\n }\r\n set emissiveStrength(val: number) {\r\n if (val !== this._emissiveStrength) {\r\n this._emissiveStrength = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n clone(): MToonMaterial {\r\n const other = new MToonMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.shadeColorFactor = other.shadeColorFactor;\r\n this.shadingShiftFactor = other.shadingShiftFactor;\r\n this.shadingShiftTextureScale = other.shadingShiftTextureScale;\r\n this.shadingToonyFactor = other.shadingToonyFactor;\r\n this.giEqualizationFactor = other.giEqualizationFactor;\r\n this.matcapFactor = other.matcapFactor;\r\n this.parametricRimColorFactor = other.parametricRimColorFactor;\r\n this.parametricRimFresnelPowerFactor = other.parametricRimFresnelPowerFactor;\r\n this.parametricRimLiftFactor = other.parametricRimLiftFactor;\r\n this.rimLightingMixFactor = other.rimLightingMixFactor;\r\n this.outlineWidthMode = other.outlineWidthMode;\r\n this.outlineWidthFactor = other.outlineWidthFactor;\r\n this.outlineColorFactor = other.outlineColorFactor;\r\n this.outlineLightingMixFactor = other.outlineLightingMixFactor;\r\n this.outlineUsesTangentNormals = other.outlineUsesTangentNormals;\r\n this.transparentWithZWrite = other.transparentWithZWrite;\r\n this.renderQueueOffsetNumber = other.renderQueueOffsetNumber;\r\n this.uvAnimationScrollXSpeedFactor = other.uvAnimationScrollXSpeedFactor;\r\n this.uvAnimationScrollYSpeedFactor = other.uvAnimationScrollYSpeedFactor;\r\n this.uvAnimationRotationSpeedFactor = other.uvAnimationRotationSpeedFactor;\r\n this.emissiveColor = other.emissiveColor;\r\n this.emissiveStrength = other.emissiveStrength;\r\n }\r\n getQueueType() {\r\n return this.isTransparentPass(0) ? QUEUE_TRANSPARENT : QUEUE_OPAQUE;\r\n }\r\n passToHash(pass: number): string {\r\n return super.passToHash(pass > 0 ? 1 : 0);\r\n }\r\n isTransparentPass(pass: number, ctx?: DrawContext): boolean {\r\n return pass === 0 && super.isTransparentPass(pass, ctx);\r\n }\r\n protected updateRenderStates(pass: number, stateSet: RenderStateSet, ctx: DrawContext): void {\r\n super.updateRenderStates(pass, stateSet, ctx);\r\n if (pass > 0) {\r\n stateSet.useRasterizerState().cullMode = 'front';\r\n stateSet.defaultBlendingState();\r\n stateSet.useDepthState().enableTest(true).enableWrite(true).setCompareFunc(DEPTH_COMPARE_CLOSER);\r\n } else if (this._transparentWithZWrite && this.isTransparentPass(pass, ctx)) {\r\n stateSet.useDepthState().enableTest(true).enableWrite(true);\r\n }\r\n }\r\n draw(primitive: Primitive, ctx: DrawContext, numInstances = 0): void {\r\n const material = this as unknown as RuntimeMaterialPassMethods;\r\n if (this.numPasses > 1 && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT && !ctx.lightBlending) {\r\n // Draw the inflated hull first so the regular pass hides interior outline fragments.\r\n material.bind(ctx.device, 1);\r\n this.drawPrimitive(1, primitive, ctx, numInstances);\r\n material.bind(ctx.device, 0);\r\n this.drawPrimitive(0, primitive, ctx, numInstances);\r\n } else {\r\n (MeshMaterial.prototype as unknown as RuntimeMaterialPassMethods).draw.call(\r\n this,\r\n primitive,\r\n ctx,\r\n numInstances\r\n );\r\n }\r\n }\r\n drawPrimitive(pass: number, primitive: Primitive, ctx: DrawContext, numInstances: number): void {\r\n if (pass > 0 && (ctx.renderPass!.type !== RENDER_PASS_TYPE_LIGHT || ctx.lightBlending)) {\r\n return;\r\n }\r\n super.drawPrimitive(pass, primitive, ctx, numInstances);\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColorInput(ctx)) {\r\n bindGroup.setValue('shadeColorFactor', this._shadeColorFactor);\r\n bindGroup.setValue('shadingShiftFactor', this._shadingShiftFactor);\r\n bindGroup.setValue('shadingShiftTextureScale', this._shadingShiftTextureScale);\r\n bindGroup.setValue('shadingToonyFactor', this._shadingToonyFactor);\r\n bindGroup.setValue('giEqualizationFactor', this._giEqualizationFactor);\r\n bindGroup.setValue('matcapFactor', this._matcapFactor);\r\n bindGroup.setValue('parametricRimColorFactor', this._parametricRimColorFactor);\r\n bindGroup.setValue('parametricRimFresnelPowerFactor', this._parametricRimFresnelPowerFactor);\r\n bindGroup.setValue('parametricRimLiftFactor', this._parametricRimLiftFactor);\r\n bindGroup.setValue('rimLightingMixFactor', this._rimLightingMixFactor);\r\n bindGroup.setValue('uvAnimationScroll', this._uvAnimationScroll);\r\n bindGroup.setValue('uvAnimationRotationSpeedFactor', this._uvAnimationRotationSpeedFactor);\r\n bindGroup.setValue('emissiveColor', this._emissiveColor);\r\n bindGroup.setValue('emissiveStrength', this._emissiveStrength);\r\n } else if (pass > 0 && this.outlineWidthMultiplyTexture && this.usesAnimatedUV()) {\r\n bindGroup.setValue('uvAnimationScroll', this._uvAnimationScroll);\r\n bindGroup.setValue('uvAnimationRotationSpeedFactor', this._uvAnimationRotationSpeedFactor);\r\n }\r\n if (pass > 0) {\r\n bindGroup.setValue('outlineWidthFactor', this._outlineWidthFactor);\r\n if (this.outlineWidthMultiplyTexture) {\r\n bindGroup.setTexture(\r\n 'outlineWidthTex',\r\n this.outlineWidthMultiplyTexture,\r\n this.outlineWidthMultiplyTextureSampler\r\n );\r\n if (this.uvAnimationMaskTexture && this.usesAnimatedUV()) {\r\n bindGroup.setTexture(\r\n 'uvAnimationMaskTex',\r\n this.uvAnimationMaskTexture,\r\n this.uvAnimationMaskTextureSampler\r\n );\r\n }\r\n if (this.outlineWidthMultiplyTexCoordMatrix) {\r\n bindGroup.setValue('outlineWidthTextureMatrix', this.outlineWidthMultiplyTexCoordMatrix);\r\n }\r\n }\r\n }\r\n if (pass > 0 && ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n bindGroup.setValue('outlineColorFactor', this._outlineColorFactor);\r\n bindGroup.setValue('outlineLightingMixFactor', this._outlineLightingMixFactor);\r\n }\r\n }\r\n private usesAnimatedUV(): boolean {\r\n return (\r\n this._uvAnimationScroll.x !== 0 ||\r\n this._uvAnimationScroll.y !== 0 ||\r\n this._uvAnimationRotationSpeedFactor !== 0\r\n );\r\n }\r\n private applyUVAnimation(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n if (!this.usesAnimatedUV()) {\r\n return uv;\r\n }\r\n const pb = scope.$builder;\r\n const funcName = 'Z_mtoonUVAnimation';\r\n const that = this;\r\n if (!scope.uvAnimationScroll) {\r\n scope.uvAnimationScroll = pb.vec2().uniform(2);\r\n }\r\n if (!scope.uvAnimationRotationSpeedFactor) {\r\n scope.uvAnimationRotationSpeedFactor = pb.float().uniform(2);\r\n }\r\n if (that.uvAnimationMaskTexture && pb.shaderKind !== 'fragment' && !scope.uvAnimationMaskTex) {\r\n scope.uvAnimationMaskTex = pb.tex2D().uniform(2);\r\n }\r\n pb.func(funcName, [pb.vec2('uv')], function () {\r\n this.$l.mask = that.uvAnimationMaskTexture\r\n ? pb.shaderKind === 'fragment'\r\n ? pb.textureSample(that.getUvAnimationMaskTextureUniform(this), this.uv).b\r\n : pb.textureSampleLevel(this.uvAnimationMaskTex, this.uv, 0).b\r\n : pb.float(1);\r\n this.$l.time = ShaderHelper.getElapsedTime(this);\r\n this.$l.rotation = pb.mul(this.time, this.uvAnimationRotationSpeedFactor, this.mask);\r\n this.$l.c = pb.cos(this.rotation);\r\n this.$l.s = pb.sin(this.rotation);\r\n this.$l.centeredUv = pb.sub(this.uv, pb.vec2(0.5));\r\n this.$l.rotatedUv = pb.add(\r\n pb.vec2(\r\n pb.add(pb.mul(this.c, this.centeredUv.x), pb.mul(this.s, this.centeredUv.y)),\r\n pb.add(pb.mul(pb.neg(this.s), this.centeredUv.x), pb.mul(this.c, this.centeredUv.y))\r\n ),\r\n pb.vec2(0.5)\r\n );\r\n this.$return(pb.add(this.rotatedUv, pb.mul(this.uvAnimationScroll, this.time, this.mask)));\r\n });\r\n return pb.getGlobalScope()[funcName](uv);\r\n }\r\n private getMToonBaseUV(scope: PBInsideFunctionScope): PBShaderExp {\r\n return this.albedoTexture\r\n ? this.applyUVAnimation(scope, this.getAlbedoTexCoord(scope))\r\n : scope.$builder.vec2(0);\r\n }\r\n private getMToonNormalUV(scope: PBInsideFunctionScope): PBShaderExp {\r\n return this.normalTexture\r\n ? this.applyUVAnimation(scope, this.getNormalTexCoord(scope))\r\n : scope.$builder.vec2(0);\r\n }\r\n private sampleAlbedo(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n return this.calculateAlbedoColor(scope, uv);\r\n }\r\n private sampleShadeColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n return this.shadeMultiplyTexture\r\n ? pb.mul(\r\n scope.shadeColorFactor,\r\n this.sampleShadeMultiplyTexture(\r\n scope,\r\n this.applyUVAnimation(scope, this.getShadeMultiplyTexCoord(scope))\r\n ).rgb\r\n )\r\n : scope.shadeColorFactor;\r\n }\r\n private sampleNormal(scope: PBInsideFunctionScope, uv: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!this.normalTexture) {\r\n return pb.normalize(scope.$inputs.wNorm);\r\n }\r\n scope.$l.TBN = this.calculateTBN(scope, scope.$inputs.worldPos, scope.$inputs.wNorm);\r\n scope.$l.normalTex = pb.sub(pb.mul(this.sampleNormalTexture(scope, uv).rgb, 2), pb.vec3(1));\r\n scope.normalTex = pb.mul(scope.normalTex, pb.vec3(pb.vec3(this.getUniformNormalScale(scope)).xx, 1));\r\n return pb.normalize(pb.mul(scope.TBN, scope.normalTex));\r\n }\r\n private calculateMToonDirectLighting(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n baseColor: PBShaderExp,\r\n shadeColor: PBShaderExp,\r\n shadingShift: PBShaderExp,\r\n geometricNormal: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_mtoonDirectLighting';\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.vec3('baseColor'),\r\n pb.vec3('shadeColor'),\r\n pb.float('shadingShift'),\r\n pb.vec3('geometricNormal')\r\n ],\r\n function () {\r\n this.$l.directColor = pb.vec3(0);\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, extra, shadow) {\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff,\r\n extra\r\n );\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\r\n this.$l.NoL = pb.dot(this.normal, this.lightDir);\r\n this.$l.shiftedShading = pb.add(this.NoL, this.shadingShift);\r\n this.$l.shading = pb.clamp(\r\n pb.div(\r\n pb.sub(this.shiftedShading, pb.add(-1, this.shadingToonyFactor)),\r\n pb.max(pb.sub(2, pb.mul(this.shadingToonyFactor, 2)), 0.00001)\r\n ),\r\n 0,\r\n 1\r\n );\r\n this.$l.lightDiffuse = pb.mix(this.shadeColor, this.baseColor, this.shading);\r\n if (shadow) {\r\n this.$l.shadowValue = that.calculateShadow(\r\n this,\r\n this.worldPos,\r\n this.geometricNormal,\r\n pb.clamp(this.NoL, 0, 1)\r\n );\r\n this.lightDiffuse = pb.mix(this.shadeColor, this.lightDiffuse, this.shadowValue);\r\n }\r\n this.directColor = pb.add(this.directColor, pb.mul(this.lightDiffuse, this.lightColor));\r\n });\r\n this.$return(this.directColor);\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n [funcName](worldPos, normal, baseColor, shadeColor, shadingShift, geometricNormal);\r\n }\r\n private calculateMToonGI(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n baseColor: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!this.needCalculateEnvLight()) {\r\n return pb.vec3(0);\r\n }\r\n scope.$l.rawGi = this.getEnvLightIrradiance(scope, normal);\r\n scope.$l.uniformGi = pb.mul(\r\n pb.add(\r\n this.getEnvLightIrradiance(scope, pb.vec3(0, 1, 0)),\r\n this.getEnvLightIrradiance(scope, pb.vec3(0, -1, 0))\r\n ),\r\n 0.5\r\n );\r\n scope.$l.gi = pb.mix(scope.rawGi, scope.uniformGi, scope.giEqualizationFactor);\r\n return pb.mul(scope.gi, baseColor);\r\n }\r\n private calculateMToonRim(\r\n scope: PBInsideFunctionScope,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n uv: PBShaderExp,\r\n lighting: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n scope.$l.rim = pb.vec3(0);\r\n if (this.matcapTexture) {\r\n scope.$l.worldViewX = pb.normalize(pb.vec3(viewVec.z, 0, pb.neg(viewVec.x)));\r\n scope.$l.worldViewY = pb.normalize(pb.cross(viewVec, scope.worldViewX));\r\n scope.$l.matcapUv = pb.add(\r\n pb.mul(pb.vec2(pb.dot(scope.worldViewX, normal), pb.dot(scope.worldViewY, normal)), 0.495),\r\n pb.vec2(0.5)\r\n );\r\n scope.rim = pb.add(\r\n scope.rim,\r\n pb.mul(scope.matcapFactor, this.sampleMatcapTexture(scope, scope.matcapUv).rgb)\r\n );\r\n }\r\n scope.$l.NoV = pb.clamp(pb.dot(normal, viewVec), 0, 1);\r\n scope.$l.parametricRim = pb.pow(\r\n pb.clamp(pb.add(pb.sub(1, scope.NoV), scope.parametricRimLiftFactor), 0, 1),\r\n pb.max(scope.parametricRimFresnelPowerFactor, 0.00001)\r\n );\r\n scope.rim = pb.add(scope.rim, pb.mul(scope.parametricRimColorFactor, scope.parametricRim));\r\n if (this.rimMultiplyTexture) {\r\n scope.rim = pb.mul(\r\n scope.rim,\r\n this.sampleRimMultiplyTexture(scope, this.applyUVAnimation(scope, this.getRimMultiplyTexCoord(scope)))\r\n .rgb\r\n );\r\n }\r\n return pb.mul(scope.rim, pb.mix(pb.vec3(1), lighting, scope.rimLightingMixFactor));\r\n }\r\n private calculateMToonEmission(scope: PBInsideFunctionScope): PBShaderExp {\r\n const pb = scope.$builder;\r\n const emission = this.emissiveTexture\r\n ? pb.mul(\r\n scope.emissiveColor,\r\n scope.emissiveStrength,\r\n this.sampleEmissiveTexture(scope, this.applyUVAnimation(scope, this.getEmissiveTexCoord(scope))).rgb\r\n )\r\n : pb.mul(scope.emissiveColor, scope.emissiveStrength);\r\n // Material-authored emitters are not covered by the CPU-side light pre-exposure, so a physical\r\n // scene exposes them here. The factor is 1 in legacy.\r\n return pb.mul(emission, ShaderHelper.getPreExposureUniform(scope)) as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope): void {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n if (this.pass > 0 && this.outlineUsesTangentNormals) {\r\n scope.$l.oOutlineNorm = ShaderHelper.resolveVertexTangent(scope).xyz;\r\n }\r\n scope.$l.worldNormal = pb.normalize(\r\n pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz\r\n );\r\n scope.$l.worldOutlineNormal =\r\n this.pass > 0 && this.outlineUsesTangentNormals\r\n ? pb.normalize(pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oOutlineNorm, 0)).xyz)\r\n : scope.worldNormal;\r\n scope.$l.worldPos = pb.mul(ShaderHelper.getWorldMatrix(scope), pb.vec4(scope.oPos, 1)).xyz;\r\n if (this.pass > 0) {\r\n scope.outlineWidthFactor = pb.float().uniform(2);\r\n scope.$l.width = scope.outlineWidthFactor;\r\n if (this.outlineWidthMultiplyTexture) {\r\n scope.outlineWidthTex = pb.tex2D().uniform(2);\r\n const uvIndex = this.outlineWidthMultiplyTexCoordIndex;\r\n const semantic = `texCoord${uvIndex}` as any;\r\n if (!scope.$getVertexAttrib(semantic)) {\r\n scope.$inputs[semantic] = pb.vec2().attrib(semantic);\r\n }\r\n if (this.outlineWidthMultiplyTexCoordMatrix) {\r\n scope.outlineWidthTextureMatrix = pb.mat4().uniform(2);\r\n scope.$l.outlineUv = pb.mul(\r\n scope.outlineWidthTextureMatrix,\r\n pb.vec4(this.applyUVAnimation(scope, scope.$inputs[semantic]), 0, 1)\r\n ).xy;\r\n } else {\r\n scope.$l.outlineUv = this.applyUVAnimation(scope, scope.$inputs[semantic]);\r\n }\r\n scope.width = pb.mul(scope.width, pb.textureSampleLevel(scope.outlineWidthTex, scope.outlineUv, 0).g);\r\n }\r\n scope.width = pb.max(scope.width, 0);\r\n scope.$l.hasOutlineWidth = pb.float(pb.greaterThan(scope.width, 0));\r\n if (this.outlineWidthMode === 'worldCoordinates') {\r\n scope.$l.baseClipPos = pb.mul(\r\n ShaderHelper.getViewProjectionMatrix(scope),\r\n pb.vec4(scope.worldPos, 1)\r\n );\r\n scope.worldPos = pb.add(scope.worldPos, pb.mul(scope.worldOutlineNormal, scope.width));\r\n scope.$l.clipPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.worldPos, 1));\r\n scope.$l.baseNdc = pb.div(scope.baseClipPos.xy, pb.max(scope.baseClipPos.w, 0.00001));\r\n scope.$l.inflatedNdc = pb.div(scope.clipPos.xy, pb.max(scope.clipPos.w, 0.00001));\r\n scope.$l.outlineNdcDelta = pb.sub(scope.inflatedNdc, scope.baseNdc);\r\n scope.$l.outlinePixelWidth = pb.length(\r\n pb.mul(scope.outlineNdcDelta, ShaderHelper.getRenderSize(scope), 0.5)\r\n );\r\n scope.$l.outlinePixelScale = pb.mix(\r\n 1,\r\n pb.div(pb.max(scope.outlinePixelWidth, 1), pb.max(scope.outlinePixelWidth, 0.00001)),\r\n scope.hasOutlineWidth\r\n );\r\n scope.$l.adjustedNdc = pb.add(scope.baseNdc, pb.mul(scope.outlineNdcDelta, scope.outlinePixelScale));\r\n scope.clipPos = pb.vec4(pb.mul(scope.adjustedNdc, scope.clipPos.w), scope.clipPos.zw);\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = scope.worldOutlineNormal;\r\n ShaderHelper.setClipSpacePosition(scope, scope.clipPos);\r\n return;\r\n } else if (this.outlineWidthMode === 'screenCoordinates') {\r\n scope.$l.clipNormalPos = pb.mul(\r\n ShaderHelper.getViewProjectionMatrix(scope),\r\n pb.vec4(pb.add(scope.worldPos, scope.worldOutlineNormal), 1)\r\n );\r\n scope.$l.clipPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.worldPos, 1));\r\n scope.$l.screenNormal = pb.sub(\r\n pb.div(scope.clipNormalPos.xy, pb.max(scope.clipNormalPos.w, 0.00001)),\r\n pb.div(scope.clipPos.xy, pb.max(scope.clipPos.w, 0.00001))\r\n );\r\n scope.screenNormal = pb.normalize(\r\n pb.mul(\r\n scope.screenNormal,\r\n pb.vec2(1, pb.div(ShaderHelper.getRenderSize(scope).x, ShaderHelper.getRenderSize(scope).y))\r\n )\r\n );\r\n scope.$l.screenUnitPixels = pb.length(\r\n pb.mul(scope.screenNormal, ShaderHelper.getRenderSize(scope), 0.5)\r\n );\r\n scope.width = pb.mul(\r\n pb.max(scope.width, pb.div(1, pb.max(scope.screenUnitPixels, 0.00001))),\r\n scope.hasOutlineWidth\r\n );\r\n\r\n //scope.clipPos.xy = pb.add(scope.clipPos.xy, pb.mul(scope.screenNormal, scope.width, scope.clipPos.w));\r\n scope.clipPos = pb.vec4(\r\n pb.add(scope.clipPos.xy, pb.mul(scope.screenNormal, scope.width, scope.clipPos.w)),\r\n scope.clipPos.zw\r\n );\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = scope.worldOutlineNormal;\r\n ShaderHelper.setClipSpacePosition(scope, scope.clipPos);\r\n return;\r\n }\r\n }\r\n scope.$outputs.worldPos = scope.worldPos;\r\n scope.$outputs.wNorm = this.pass > 0 ? scope.worldOutlineNormal : scope.worldNormal;\r\n ShaderHelper.setClipSpacePosition(\r\n scope,\r\n pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1))\r\n );\r\n }\r\n fragmentShader(scope: PBFunctionScope): void {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColorInput()) {\r\n scope.shadeColorFactor = pb.vec3().uniform(2);\r\n scope.shadingShiftFactor = pb.float().uniform(2);\r\n scope.shadingShiftTextureScale = pb.float().uniform(2);\r\n scope.shadingToonyFactor = pb.float().uniform(2);\r\n scope.giEqualizationFactor = pb.float().uniform(2);\r\n scope.matcapFactor = pb.vec3().uniform(2);\r\n scope.parametricRimColorFactor = pb.vec3().uniform(2);\r\n scope.parametricRimFresnelPowerFactor = pb.float().uniform(2);\r\n scope.parametricRimLiftFactor = pb.float().uniform(2);\r\n scope.rimLightingMixFactor = pb.float().uniform(2);\r\n scope.uvAnimationScroll = pb.vec2().uniform(2);\r\n scope.uvAnimationRotationSpeedFactor = pb.float().uniform(2);\r\n scope.emissiveColor = pb.vec3().uniform(2);\r\n scope.emissiveStrength = pb.float().uniform(2);\r\n if (this.pass > 0) {\r\n scope.outlineColorFactor = pb.vec3().uniform(2);\r\n scope.outlineLightingMixFactor = pb.float().uniform(2);\r\n scope.$l.albedo = this.sampleAlbedo(scope, this.getMToonBaseUV(scope));\r\n scope.$l.outlineLighting = pb.mix(pb.vec3(1), scope.albedo.rgb, scope.outlineLightingMixFactor);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(pb.mul(scope.outlineColorFactor, scope.outlineLighting), scope.albedo.a)\r\n );\r\n } else {\r\n scope.$l.uv = this.getMToonBaseUV(scope);\r\n scope.$l.albedo = this.sampleAlbedo(scope, scope.uv);\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normal = this.sampleNormal(scope, this.getMToonNormalUV(scope));\r\n scope.$l.shadingShift = scope.shadingShiftFactor;\r\n if (this.shadingShiftTexture) {\r\n scope.shadingShift = pb.add(\r\n scope.shadingShift,\r\n pb.mul(\r\n this.sampleShadingShiftTexture(\r\n scope,\r\n this.applyUVAnimation(scope, this.getShadingShiftTexCoord(scope))\r\n ).r,\r\n scope.shadingShiftTextureScale\r\n )\r\n );\r\n }\r\n scope.$l.shadeColor = this.sampleShadeColor(scope);\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n scope.$l.directLighting = this.calculateMToonDirectLighting(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normal,\r\n scope.albedo.rgb,\r\n scope.shadeColor,\r\n scope.shadingShift,\r\n pb.normalize(scope.$inputs.wNorm)\r\n );\r\n scope.$l.giLighting = this.calculateMToonGI(scope, scope.normal, scope.albedo.rgb);\r\n scope.$l.lighting = pb.max(scope.directLighting, scope.giLighting);\r\n scope.$l.rim = this.calculateMToonRim(scope, scope.normal, scope.viewVec, scope.uv, scope.lighting);\r\n scope.$l.emission = this.calculateMToonEmission(scope);\r\n scope.$l.outColor = pb.vec4(\r\n pb.add(scope.directLighting, scope.giLighting, scope.rim, scope.emission),\r\n scope.albedo.a\r\n );\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.outColor,\r\n pb.vec4(1, 1, 0, 1),\r\n pb.vec4(pb.add(pb.mul(scope.normal, 0.5), pb.vec3(0.5)), 1)\r\n );\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n}\r\n"],"names":["ToonMaterialBase","applyMaterialMixins","MeshMaterial","mixinAlbedoColor","mixinLambert","mixinTextureProps","MToonMaterial","FEATURE_OUTLINE_WIDTH_MODE","defineFeature","FEATURE_OUTLINE_TANGENT_NORMALS","_shadeColorFactor","_matcapFactor","_parametricRimColorFactor","_outlineColorFactor","_uvAnimationScroll","_emissiveColor","_shadingShiftFactor","_shadingShiftTextureScale","_shadingToonyFactor","_giEqualizationFactor","_parametricRimFresnelPowerFactor","_parametricRimLiftFactor","_rimLightingMixFactor","_outlineWidthFactor","_outlineLightingMixFactor","_uvAnimationRotationSpeedFactor","_emissiveStrength","_transparentWithZWrite","_renderQueueOffsetNumber","Vector3","Vector2","outlineWidthMode","outlineUsesTangentNormals","shadeColorFactor","val","set","uniformChanged","shadingShiftFactor","shadingShiftTextureScale","shadingToonyFactor","toony","Math","min","max","giEqualizationFactor","factor","matcapFactor","parametricRimColorFactor","parametricRimFresnelPowerFactor","parametricRimLiftFactor","rimLightingMixFactor","featureUsed","numPasses","useFeature","outlineWidthFactor","width","outlineColorFactor","outlineLightingMixFactor","transparentWithZWrite","renderQueueOffsetNumber","offset","trunc","uvAnimationScrollXSpeedFactor","x","uvAnimationScrollYSpeedFactor","y","uvAnimationRotationSpeedFactor","emissiveColor","emissiveStrength","clone","other","copyFrom","getQueueType","isTransparentPass","QUEUE_TRANSPARENT","QUEUE_OPAQUE","passToHash","pass","ctx","updateRenderStates","stateSet","useRasterizerState","cullMode","defaultBlendingState","useDepthState","enableTest","enableWrite","setCompareFunc","DEPTH_COMPARE_CLOSER","draw","primitive","numInstances","material","renderPass","type","RENDER_PASS_TYPE_LIGHT","lightBlending","bind","device","drawPrimitive","prototype","call","applyUniformValues","bindGroup","needFragmentColorInput","setValue","outlineWidthMultiplyTexture","usesAnimatedUV","setTexture","outlineWidthMultiplyTextureSampler","uvAnimationMaskTexture","uvAnimationMaskTextureSampler","outlineWidthMultiplyTexCoordMatrix","applyUVAnimation","scope","uv","pb","$builder","funcName","that","uvAnimationScroll","vec2","uniform","float","shaderKind","uvAnimationMaskTex","tex2D","func","$l","mask","textureSample","getUvAnimationMaskTextureUniform","b","textureSampleLevel","time","ShaderHelper","getElapsedTime","rotation","mul","c","cos","s","sin","centeredUv","sub","rotatedUv","add","neg","$return","getGlobalScope","getMToonBaseUV","albedoTexture","getAlbedoTexCoord","getMToonNormalUV","normalTexture","getNormalTexCoord","sampleAlbedo","calculateAlbedoColor","sampleShadeColor","shadeMultiplyTexture","sampleShadeMultiplyTexture","getShadeMultiplyTexCoord","rgb","sampleNormal","normalize","$inputs","wNorm","TBN","calculateTBN","worldPos","normalTex","sampleNormalTexture","vec3","getUniformNormalScale","xx","calculateMToonDirectLighting","normal","baseColor","shadeColor","shadingShift","geometricNormal","directColor","forEachLight","posRange","dirCutoff","colorIntensity","extra","shadow","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","lightColor","a","NoL","dot","shiftedShading","shading","clamp","div","lightDiffuse","mix","shadowValue","calculateShadow","calculateMToonGI","needCalculateEnvLight","rawGi","getEnvLightIrradiance","uniformGi","gi","calculateMToonRim","viewVec","lighting","rim","matcapTexture","worldViewX","z","worldViewY","cross","matcapUv","sampleMatcapTexture","NoV","parametricRim","pow","rimMultiplyTexture","sampleRimMultiplyTexture","getRimMultiplyTexCoord","calculateMToonEmission","emission","emissiveTexture","sampleEmissiveTexture","getEmissiveTexCoord","getPreExposureUniform","vertexShader","oPos","resolveVertexPosition","oNorm","resolveVertexNormal","oOutlineNorm","resolveVertexTangent","xyz","worldNormal","getNormalMatrix","vec4","worldOutlineNormal","getWorldMatrix","outlineWidthTex","uvIndex","outlineWidthMultiplyTexCoordIndex","semantic","$getVertexAttrib","attrib","outlineWidthTextureMatrix","mat4","outlineUv","xy","g","hasOutlineWidth","greaterThan","baseClipPos","getViewProjectionMatrix","clipPos","baseNdc","w","inflatedNdc","outlineNdcDelta","outlinePixelWidth","length","getRenderSize","outlinePixelScale","adjustedNdc","zw","$outputs","setClipSpacePosition","clipNormalPos","screenNormal","screenUnitPixels","fragmentShader","albedo","outlineLighting","outputFragmentColor","drawContext","shadingShiftTexture","sampleShadingShiftTexture","getShadingShiftTexCoord","r","calculateViewVector","directLighting","giLighting","outColor"],"mappings":"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"}
@@ -32,6 +32,9 @@ import { Vector3 } from '@zephyr3d/base';
32
32
  other.copyFrom(this);
33
33
  return other;
34
34
  }
35
+ supportsVoxelization() {
36
+ return true;
37
+ }
35
38
  copyFrom(other) {
36
39
  super.copyFrom(other);
37
40
  this.vertexNormal = other.vertexNormal;
@@ -1 +1 @@
1
- {"version":3,"file":"pbrmr.js","sources":["../../src/material/pbrmr.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\r\nimport type { SubsurfaceProfile } from './subsurfaceprofile';\r\n\r\n/**\r\n * PBRMetallicRoughnessMaterial class\r\n * @public\r\n */\r\nexport class PBRMetallicRoughnessMaterial\r\n extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinPBRMetallicRoughness,\r\n mixinVertexColor,\r\n mixinTextureProps('subsurface')\r\n )\r\n implements Clonable<PBRMetallicRoughnessMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_NORMAL = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_TANGENT = this.defineFeature();\r\n private readonly _subsurfaceProfileChanged: () => void;\r\n private _subsurfaceProfile: SubsurfaceProfile | null;\r\n /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this._subsurfaceProfileChanged = () => this.uniformChanged();\r\n this._subsurfaceProfile = null;\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n this.transmission = false;\r\n this.transmissionFactor = 0.2;\r\n this.thicknessFactor = 0.35;\r\n this.attenuationColor = new Vector3(1, 0.5, 0.4);\r\n this.attenuationDistance = 0.6;\r\n }\r\n clone() {\r\n const other = new PBRMetallicRoughnessMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.vertexNormal = other.vertexNormal;\r\n this.vertexTangent = other.vertexTangent;\r\n this.subsurfaceProfile = other.subsurfaceProfile;\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT, !!val);\r\n }\r\n /** shared profile asset driving channel radius/falloff */\r\n get subsurfaceProfile() {\r\n return this._subsurfaceProfile;\r\n }\r\n set subsurfaceProfile(val: SubsurfaceProfile | null) {\r\n if (val !== this._subsurfaceProfile) {\r\n this._subsurfaceProfile?.removeChangeListener(this._subsurfaceProfileChanged);\r\n this._subsurfaceProfile = val ?? null;\r\n this._subsurfaceProfile?.addChangeListener(this._subsurfaceProfileChanged);\r\n this.optionChanged(true);\r\n }\r\n }\r\n private getSubsurfaceProfileId(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileId as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileScale(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileScale as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileStrength(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileStrength as PBShaderExp;\r\n }\r\n private getSubsurfaceProfilePreset(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfilePreset as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n const needsVolumeTransmissionRay =\r\n this.transmission ||\r\n (!!this._subsurfaceProfile &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION));\r\n if (needsVolumeTransmissionRay) {\r\n scope.$outputs.screenUV = pb.add(pb.mul(pb.div(scope.csPos.xy, scope.csPos.w), 0.5), pb.vec2(0.5));\r\n scope.$outputs.modelScale = pb.vec3(\r\n pb.length(worldMatrix[0].xyz),\r\n pb.length(worldMatrix[1].xyz),\r\n pb.length(worldMatrix[2].xyz)\r\n );\r\n }\r\n if (this.vertexNormal) {\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n if (this.vertexTangent) {\r\n scope.$l.oTangent = ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n const renderPassType = this.drawContext.renderPass!.type;\r\n if (!!this._subsurfaceProfile && this.needFragmentColor() && renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.zSubsurfaceProfileId = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileScale = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileStrength = pb.float().uniform(2);\r\n scope.zSubsurfaceProfilePreset = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColorInput()) {\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));\r\n }\r\n if (renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.wNorm,\r\n scope.$inputs.wTangent,\r\n scope.$inputs.wBinormal\r\n );\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n if (\r\n this.drawContext.materialFlags &\r\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\r\n ) {\r\n scope.$l.outRoughness = pb.vec4();\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n /*\r\n scope.outRoughness = pb.vec4(\r\n pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)),\r\n scope.outRoughness.a\r\n );\r\n */\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1),\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n } else {\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n undefined,\r\n undefined,\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (\r\n !!this._subsurfaceProfile &&\r\n this.needFragmentColor(ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n const profile = this._subsurfaceProfile;\r\n bindGroup.setValue('zSubsurfaceProfileId', profile?.slot ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileScale', profile?.scale ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileStrength', profile?.strength ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfilePreset', profile?.presetIndex ?? 0);\r\n }\r\n }\r\n protected _createHash() {\r\n return `${super._createHash()}:${this._subsurfaceProfile ? 1 : 0}`;\r\n }\r\n private buildSubsurfaceProfile(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n const hasExplicitTransmissionAuthoring = !!(this.transmissionTexture || this.thicknessTexture);\r\n scope.$l.sssMask = pb.float(1);\r\n scope.$l.sssScatterSoftness = pb.float(0);\r\n // Negative alpha marks profiles that need conservative screen-space thin-region inference.\r\n scope.$l.sssTransmissionMask = pb.float(hasExplicitTransmissionAuthoring ? 0 : -1);\r\n if (this.subsurfaceTexture) {\r\n scope.$l.sssTexel = this.sampleSubsurfaceTexture(scope);\r\n scope.sssMask = pb.clamp(scope.sssTexel.r, 0, 1);\r\n scope.sssScatterSoftness = pb.clamp(scope.sssTexel.g, 0, 1);\r\n }\r\n if (hasExplicitTransmissionAuthoring) {\r\n scope.$l.sssTransmissionAuthor = pb.float(this.thicknessTexture ? 1 : 0);\r\n if (this.transmissionTexture) {\r\n scope.sssTransmissionAuthor = pb.clamp(\r\n pb.mul(this.sampleTransmissionTexture(scope).r, scope.zTransmissionFactor ?? 0),\r\n 0,\r\n 1\r\n );\r\n }\r\n scope.$l.sssThinAuthorMask = pb.float(this.transmissionTexture ? 1 : 0);\r\n if (this.thicknessTexture) {\r\n // KHR_materials_volume stores thickness in G: zero is thin and one is thick.\r\n scope.$l.sssThicknessSample = pb.clamp(this.sampleThicknessTexture(scope).g, 0, 1);\r\n scope.sssThinAuthorMask = pb.sub(1, scope.sssThicknessSample);\r\n }\r\n scope.$l.sssAuthoredTransmissionMask = pb.clamp(\r\n pb.mul(scope.sssTransmissionAuthor, scope.sssThinAuthorMask),\r\n 0,\r\n 1\r\n );\r\n scope.sssTransmissionMask = scope.sssAuthoredTransmissionMask;\r\n }\r\n scope.$l.sssScatterStrengthMask = pb.clamp(\r\n pb.add(pb.mul(scope.sssMask, 0.82), pb.mul(scope.sssScatterSoftness, 0.38)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssScatterWidthMask = pb.clamp(\r\n pb.max(scope.sssMask, pb.mul(scope.sssScatterSoftness, 0.9)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssStrength = pb.mul(this.getSubsurfaceProfileStrength(scope), scope.sssScatterStrengthMask);\r\n scope.$l.sssWidthBase = pb.mul(this.getSubsurfaceProfileScale(scope), scope.sssScatterWidthMask);\r\n scope.$l.sssWidth = pb.clamp(pb.div(scope.sssWidthBase, pb.add(scope.sssWidthBase, 1)), 0, 0.999);\r\n scope.$l.sssSlotEncoded = pb.div(this.getSubsurfaceProfileId(scope), 255);\r\n scope.$l.sssPresetEncoded = pb.div(this.getSubsurfaceProfilePreset(scope), 255);\r\n scope.$l.sssParams = pb.vec4(\r\n scope.sssSlotEncoded,\r\n scope.sssWidth,\r\n scope.sssPresetEncoded,\r\n pb.add(0.75, pb.mul(scope.sssScatterSoftness, 0.25))\r\n );\r\n return pb.vec4(scope.sssStrength, scope.sssStrength, scope.sssStrength, scope.sssTransmissionMask);\r\n }\r\n}\r\n"],"names":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinVertexColor","mixinTextureProps","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","_subsurfaceProfileChanged","_subsurfaceProfile","uniformChanged","useFeature","transmission","transmissionFactor","thicknessFactor","attenuationColor","Vector3","attenuationDistance","clone","other","copyFrom","vertexNormal","vertexTangent","subsurfaceProfile","featureUsed","val","removeChangeListener","addChangeListener","optionChanged","getSubsurfaceProfileId","scope","zSubsurfaceProfileId","getSubsurfaceProfileScale","zSubsurfaceProfileScale","getSubsurfaceProfileStrength","zSubsurfaceProfileStrength","getSubsurfaceProfilePreset","zSubsurfaceProfilePreset","vertexShader","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","needsVolumeTransmissionRay","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","materialFlags","MaterialVaryingFlags","SSS_STORE_TRANSMISSION","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","renderPassType","needFragmentColor","float","uniform","needFragmentColorInput","albedo","calculateAlbedoColor","vertexColor","getVertexColor","normalInfo","calculateNormalAndTBN","$inputs","viewVec","calculateViewVector","SCENE_STORE_ROUGHNESS","SCENE_STORE_NORMAL","outRoughness","writeSSSDiffuse","SSS_STORE_DIFFUSE","writeSSSTransmission","sssDiffuse","sssTransmission","litColor","PBRLight","normal","TBN","undefined","writeSSSProfile","SSS_STORE_PROFILE","sssProfile","buildSubsurfaceProfile","sssParams","outputFragmentColor","a","applyUniformValues","bindGroup","ctx","pass","profile","setValue","slot","scale","strength","presetIndex","_createHash","hasExplicitTransmissionAuthoring","transmissionTexture","thicknessTexture","sssMask","sssScatterSoftness","sssTransmissionMask","subsurfaceTexture","sssTexel","sampleSubsurfaceTexture","clamp","r","g","sssTransmissionAuthor","sampleTransmissionTexture","zTransmissionFactor","sssThinAuthorMask","sssThicknessSample","sampleThicknessTexture","sub","sssAuthoredTransmissionMask","sssScatterStrengthMask","sssScatterWidthMask","max","sssStrength","sssWidthBase","sssWidth","sssSlotEncoded","sssPresetEncoded"],"mappings":"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"}
1
+ {"version":3,"file":"pbrmr.js","sources":["../../src/material/pbrmr.ts"],"sourcesContent":["import { MeshMaterial, applyMaterialMixins } from './meshmaterial';\r\nimport { mixinVertexColor } from './mixins/vertexcolor';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport { mixinPBRMetallicRoughness } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { mixinTextureProps } from './mixins/texture';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport { MaterialVaryingFlags, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport type { Clonable } from '@zephyr3d/base';\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { DrawContext } from '../render';\r\nimport type { SubsurfaceProfile } from './subsurfaceprofile';\r\n\r\n/**\r\n * PBRMetallicRoughnessMaterial class\r\n * @public\r\n */\r\nexport class PBRMetallicRoughnessMaterial\r\n extends applyMaterialMixins(\r\n MeshMaterial,\r\n mixinPBRMetallicRoughness,\r\n mixinVertexColor,\r\n mixinTextureProps('subsurface')\r\n )\r\n implements Clonable<PBRMetallicRoughnessMaterial>\r\n{\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_NORMAL = this.defineFeature();\r\n /** @internal */\r\n private static readonly FEATURE_VERTEX_TANGENT = this.defineFeature();\r\n private readonly _subsurfaceProfileChanged: () => void;\r\n private _subsurfaceProfile: SubsurfaceProfile | null;\r\n /**\r\n * Creates an instance of PBRMetallicRoughnessMaterial class\r\n */\r\n constructor() {\r\n super();\r\n this._subsurfaceProfileChanged = () => this.uniformChanged();\r\n this._subsurfaceProfile = null;\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, true);\r\n this.transmission = false;\r\n this.transmissionFactor = 0.2;\r\n this.thicknessFactor = 0.35;\r\n this.attenuationColor = new Vector3(1, 0.5, 0.4);\r\n this.attenuationDistance = 0.6;\r\n }\r\n clone() {\r\n const other = new PBRMetallicRoughnessMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n supportsVoxelization() {\r\n return true;\r\n }\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.vertexNormal = other.vertexNormal;\r\n this.vertexTangent = other.vertexTangent;\r\n this.subsurfaceProfile = other.subsurfaceProfile;\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexNormal() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL);\r\n }\r\n set vertexNormal(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_NORMAL, !!val);\r\n }\r\n /** true if vertex normal attribute presents */\r\n get vertexTangent() {\r\n return this.featureUsed<boolean>(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT);\r\n }\r\n set vertexTangent(val) {\r\n this.useFeature(PBRMetallicRoughnessMaterial.FEATURE_VERTEX_TANGENT, !!val);\r\n }\r\n /** shared profile asset driving channel radius/falloff */\r\n get subsurfaceProfile() {\r\n return this._subsurfaceProfile;\r\n }\r\n set subsurfaceProfile(val: SubsurfaceProfile | null) {\r\n if (val !== this._subsurfaceProfile) {\r\n this._subsurfaceProfile?.removeChangeListener(this._subsurfaceProfileChanged);\r\n this._subsurfaceProfile = val ?? null;\r\n this._subsurfaceProfile?.addChangeListener(this._subsurfaceProfileChanged);\r\n this.optionChanged(true);\r\n }\r\n }\r\n private getSubsurfaceProfileId(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileId as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileScale(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileScale as PBShaderExp;\r\n }\r\n private getSubsurfaceProfileStrength(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfileStrength as PBShaderExp;\r\n }\r\n private getSubsurfaceProfilePreset(scope: PBInsideFunctionScope): PBShaderExp {\r\n return scope.zSubsurfaceProfilePreset as PBShaderExp;\r\n }\r\n vertexShader(scope: PBFunctionScope) {\r\n super.vertexShader(scope);\r\n const pb = scope.$builder;\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n scope.$l.oPos = ShaderHelper.resolveVertexPosition(scope);\r\n scope.$outputs.worldPos = pb.mul(worldMatrix, pb.vec4(scope.oPos, 1)).xyz;\r\n scope.$l.csPos = pb.mul(ShaderHelper.getViewProjectionMatrix(scope), pb.vec4(scope.$outputs.worldPos, 1));\r\n ShaderHelper.setClipSpacePosition(scope, scope.csPos);\r\n const needsVolumeTransmissionRay =\r\n this.transmission ||\r\n (!!this._subsurfaceProfile &&\r\n this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION));\r\n if (needsVolumeTransmissionRay) {\r\n scope.$outputs.screenUV = pb.add(pb.mul(pb.div(scope.csPos.xy, scope.csPos.w), 0.5), pb.vec2(0.5));\r\n scope.$outputs.modelScale = pb.vec3(\r\n pb.length(worldMatrix[0].xyz),\r\n pb.length(worldMatrix[1].xyz),\r\n pb.length(worldMatrix[2].xyz)\r\n );\r\n }\r\n if (this.vertexNormal) {\r\n scope.$l.oNorm = ShaderHelper.resolveVertexNormal(scope);\r\n scope.$outputs.wNorm = pb.mul(ShaderHelper.getNormalMatrix(scope), pb.vec4(scope.oNorm, 0)).xyz;\r\n if (this.vertexTangent) {\r\n scope.$l.oTangent = ShaderHelper.resolveVertexTangent(scope);\r\n scope.$outputs.wTangent = pb.mul(\r\n ShaderHelper.getNormalMatrix(scope),\r\n pb.vec4(scope.oTangent.xyz, 0)\r\n ).xyz;\r\n scope.$outputs.wBinormal = pb.mul(\r\n pb.cross(scope.$outputs.wNorm, scope.$outputs.wTangent),\r\n scope.oTangent.w\r\n );\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope) {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n const renderPassType = this.drawContext.renderPass!.type;\r\n if (!!this._subsurfaceProfile && this.needFragmentColor() && renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.zSubsurfaceProfileId = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileScale = pb.float().uniform(2);\r\n scope.zSubsurfaceProfileStrength = pb.float().uniform(2);\r\n scope.zSubsurfaceProfilePreset = pb.float().uniform(2);\r\n }\r\n if (this.needFragmentColorInput()) {\r\n scope.$l.albedo = this.calculateAlbedoColor(scope);\r\n if (this.vertexColor) {\r\n scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope));\r\n }\r\n if (renderPassType === RENDER_PASS_TYPE_LIGHT) {\r\n scope.$l.normalInfo = this.calculateNormalAndTBN(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.$inputs.wNorm,\r\n scope.$inputs.wTangent,\r\n scope.$inputs.wBinormal\r\n );\r\n scope.$l.viewVec = this.calculateViewVector(scope, scope.$inputs.worldPos);\r\n if (\r\n this.drawContext.materialFlags &\r\n (MaterialVaryingFlags.SCENE_STORE_ROUGHNESS | MaterialVaryingFlags.SCENE_STORE_NORMAL)\r\n ) {\r\n scope.$l.outRoughness = pb.vec4();\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n scope.outRoughness\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n /*\r\n scope.outRoughness = pb.vec4(\r\n pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)),\r\n scope.outRoughness.a\r\n );\r\n */\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n scope.outRoughness,\r\n pb.vec4(pb.add(pb.mul(scope.normalInfo.normal, 0.5), pb.vec3(0.5)), 1),\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n } else {\r\n const writeSSSDiffuse =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE);\r\n const writeSSSTransmission =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION);\r\n if (writeSSSDiffuse) {\r\n scope.$l.sssDiffuse = pb.vec4();\r\n }\r\n if (writeSSSTransmission) {\r\n scope.$l.sssTransmission = pb.vec4();\r\n }\r\n if (writeSSSDiffuse && writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse,\r\n scope.sssTransmission\r\n );\r\n } else if (writeSSSDiffuse) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n scope.sssDiffuse\r\n );\r\n } else if (writeSSSTransmission) {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN,\r\n undefined,\r\n undefined,\r\n scope.sssTransmission\r\n );\r\n } else {\r\n scope.$l.litColor = this.PBRLight(\r\n scope,\r\n scope.$inputs.worldPos,\r\n scope.normalInfo.normal,\r\n scope.viewVec,\r\n scope.albedo,\r\n scope.normalInfo.TBN\r\n );\r\n }\r\n const writeSSSProfile =\r\n !!this._subsurfaceProfile &&\r\n !!(this.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE);\r\n scope.$l.sssProfile = writeSSSProfile ? this.buildSubsurfaceProfile(scope) : pb.vec4(0);\r\n scope.$l.sssParams = writeSSSProfile ? (scope.sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n this.outputFragmentColor(\r\n scope,\r\n scope.$inputs.worldPos,\r\n pb.vec4(scope.litColor, scope.albedo.a),\r\n undefined,\r\n undefined,\r\n scope.sssProfile,\r\n scope.sssParams,\r\n writeSSSDiffuse ? scope.sssDiffuse : undefined,\r\n writeSSSTransmission ? scope.sssTransmission : undefined,\r\n writeSSSProfile\r\n );\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, scope.albedo);\r\n }\r\n } else {\r\n this.outputFragmentColor(scope, scope.$inputs.worldPos, null);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (\r\n !!this._subsurfaceProfile &&\r\n this.needFragmentColor(ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT\r\n ) {\r\n const profile = this._subsurfaceProfile;\r\n bindGroup.setValue('zSubsurfaceProfileId', profile?.slot ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileScale', profile?.scale ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfileStrength', profile?.strength ?? 0);\r\n bindGroup.setValue('zSubsurfaceProfilePreset', profile?.presetIndex ?? 0);\r\n }\r\n }\r\n protected _createHash() {\r\n return `${super._createHash()}:${this._subsurfaceProfile ? 1 : 0}`;\r\n }\r\n private buildSubsurfaceProfile(scope: PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n const hasExplicitTransmissionAuthoring = !!(this.transmissionTexture || this.thicknessTexture);\r\n scope.$l.sssMask = pb.float(1);\r\n scope.$l.sssScatterSoftness = pb.float(0);\r\n // Negative alpha marks profiles that need conservative screen-space thin-region inference.\r\n scope.$l.sssTransmissionMask = pb.float(hasExplicitTransmissionAuthoring ? 0 : -1);\r\n if (this.subsurfaceTexture) {\r\n scope.$l.sssTexel = this.sampleSubsurfaceTexture(scope);\r\n scope.sssMask = pb.clamp(scope.sssTexel.r, 0, 1);\r\n scope.sssScatterSoftness = pb.clamp(scope.sssTexel.g, 0, 1);\r\n }\r\n if (hasExplicitTransmissionAuthoring) {\r\n scope.$l.sssTransmissionAuthor = pb.float(this.thicknessTexture ? 1 : 0);\r\n if (this.transmissionTexture) {\r\n scope.sssTransmissionAuthor = pb.clamp(\r\n pb.mul(this.sampleTransmissionTexture(scope).r, scope.zTransmissionFactor ?? 0),\r\n 0,\r\n 1\r\n );\r\n }\r\n scope.$l.sssThinAuthorMask = pb.float(this.transmissionTexture ? 1 : 0);\r\n if (this.thicknessTexture) {\r\n // KHR_materials_volume stores thickness in G: zero is thin and one is thick.\r\n scope.$l.sssThicknessSample = pb.clamp(this.sampleThicknessTexture(scope).g, 0, 1);\r\n scope.sssThinAuthorMask = pb.sub(1, scope.sssThicknessSample);\r\n }\r\n scope.$l.sssAuthoredTransmissionMask = pb.clamp(\r\n pb.mul(scope.sssTransmissionAuthor, scope.sssThinAuthorMask),\r\n 0,\r\n 1\r\n );\r\n scope.sssTransmissionMask = scope.sssAuthoredTransmissionMask;\r\n }\r\n scope.$l.sssScatterStrengthMask = pb.clamp(\r\n pb.add(pb.mul(scope.sssMask, 0.82), pb.mul(scope.sssScatterSoftness, 0.38)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssScatterWidthMask = pb.clamp(\r\n pb.max(scope.sssMask, pb.mul(scope.sssScatterSoftness, 0.9)),\r\n 0,\r\n 1\r\n );\r\n scope.$l.sssStrength = pb.mul(this.getSubsurfaceProfileStrength(scope), scope.sssScatterStrengthMask);\r\n scope.$l.sssWidthBase = pb.mul(this.getSubsurfaceProfileScale(scope), scope.sssScatterWidthMask);\r\n scope.$l.sssWidth = pb.clamp(pb.div(scope.sssWidthBase, pb.add(scope.sssWidthBase, 1)), 0, 0.999);\r\n scope.$l.sssSlotEncoded = pb.div(this.getSubsurfaceProfileId(scope), 255);\r\n scope.$l.sssPresetEncoded = pb.div(this.getSubsurfaceProfilePreset(scope), 255);\r\n scope.$l.sssParams = pb.vec4(\r\n scope.sssSlotEncoded,\r\n scope.sssWidth,\r\n scope.sssPresetEncoded,\r\n pb.add(0.75, pb.mul(scope.sssScatterSoftness, 0.25))\r\n );\r\n return pb.vec4(scope.sssStrength, scope.sssStrength, scope.sssStrength, scope.sssTransmissionMask);\r\n }\r\n}\r\n"],"names":["PBRMetallicRoughnessMaterial","applyMaterialMixins","MeshMaterial","mixinPBRMetallicRoughness","mixinVertexColor","mixinTextureProps","FEATURE_VERTEX_NORMAL","defineFeature","FEATURE_VERTEX_TANGENT","_subsurfaceProfileChanged","_subsurfaceProfile","uniformChanged","useFeature","transmission","transmissionFactor","thicknessFactor","attenuationColor","Vector3","attenuationDistance","clone","other","copyFrom","supportsVoxelization","vertexNormal","vertexTangent","subsurfaceProfile","featureUsed","val","removeChangeListener","addChangeListener","optionChanged","getSubsurfaceProfileId","scope","zSubsurfaceProfileId","getSubsurfaceProfileScale","zSubsurfaceProfileScale","getSubsurfaceProfileStrength","zSubsurfaceProfileStrength","getSubsurfaceProfilePreset","zSubsurfaceProfilePreset","vertexShader","pb","$builder","worldMatrix","ShaderHelper","getWorldMatrix","$l","oPos","resolveVertexPosition","$outputs","worldPos","mul","vec4","xyz","csPos","getViewProjectionMatrix","setClipSpacePosition","needsVolumeTransmissionRay","drawContext","renderPass","type","RENDER_PASS_TYPE_LIGHT","materialFlags","MaterialVaryingFlags","SSS_STORE_TRANSMISSION","screenUV","add","div","xy","w","vec2","modelScale","vec3","length","oNorm","resolveVertexNormal","wNorm","getNormalMatrix","oTangent","resolveVertexTangent","wTangent","wBinormal","cross","fragmentShader","renderPassType","needFragmentColor","float","uniform","needFragmentColorInput","albedo","calculateAlbedoColor","vertexColor","getVertexColor","normalInfo","calculateNormalAndTBN","$inputs","viewVec","calculateViewVector","SCENE_STORE_ROUGHNESS","SCENE_STORE_NORMAL","outRoughness","writeSSSDiffuse","SSS_STORE_DIFFUSE","writeSSSTransmission","sssDiffuse","sssTransmission","litColor","PBRLight","normal","TBN","undefined","writeSSSProfile","SSS_STORE_PROFILE","sssProfile","buildSubsurfaceProfile","sssParams","outputFragmentColor","a","applyUniformValues","bindGroup","ctx","pass","profile","setValue","slot","scale","strength","presetIndex","_createHash","hasExplicitTransmissionAuthoring","transmissionTexture","thicknessTexture","sssMask","sssScatterSoftness","sssTransmissionMask","subsurfaceTexture","sssTexel","sampleSubsurfaceTexture","clamp","r","g","sssTransmissionAuthor","sampleTransmissionTexture","zTransmissionFactor","sssThinAuthorMask","sssThicknessSample","sampleThicknessTexture","sub","sssAuthoredTransmissionMask","sssScatterStrengthMask","sssScatterWidthMask","max","sssStrength","sssWidthBase","sssWidth","sssSlotEncoded","sssPresetEncoded"],"mappings":"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"}
@@ -21,6 +21,9 @@ import { RENDER_PASS_TYPE_LIGHT, MaterialVaryingFlags } from '../values.js';
21
21
  other.copyFrom(this);
22
22
  return other;
23
23
  }
24
+ supportsVoxelization() {
25
+ return true;
26
+ }
24
27
  copyFrom(other) {
25
28
  super.copyFrom(other);
26
29
  this.vertexNormal = other.vertexNormal;