@zephyr3d/scene 0.9.26 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -27
- package/dist/animation/animation_bank.js +634 -0
- package/dist/animation/animation_bank.js.map +1 -0
- package/dist/animation/animation_bank_gpu.js +256 -0
- package/dist/animation/animation_bank_gpu.js.map +1 -0
- package/dist/animation/animationset.js +146 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_component.js +406 -0
- package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
- package/dist/animation/cloth/gpu_cloth_system.js +332 -202
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/gpu_animation_driver.js +289 -0
- package/dist/animation/gpu_animation_driver.js.map +1 -0
- package/dist/animation/joint_dynamics/collision.js +112 -1
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +6 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +50 -12
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/skeleton.js +300 -56
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skin_palette_atlas.js +252 -0
- package/dist/animation/skin_palette_atlas.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +298 -38
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +2 -0
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +159 -21
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_solver.js +173 -0
- package/dist/animation/spring/spring_solver.js.map +1 -0
- package/dist/animation/spring/spring_system.js +249 -24
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +32 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/app.js +26 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +86 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/gamepad.js +191 -0
- package/dist/app/gamepad.js.map +1 -0
- package/dist/app/inputactions.js +271 -0
- package/dist/app/inputactions.js.map +1 -0
- package/dist/app/inputmgr.js +331 -22
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/loading.js +138 -0
- package/dist/app/loading.js.map +1 -0
- package/dist/app/pipelinecache.js +209 -0
- package/dist/app/pipelinecache.js.map +1 -0
- package/dist/app/runtimescript.js +25 -0
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/scriptingsystem.js +54 -0
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +7 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/asset_manifest.js +59 -0
- package/dist/asset/asset_manifest.js.map +1 -0
- package/dist/asset/asset_preload.js +258 -0
- package/dist/asset/asset_preload.js.map +1 -0
- package/dist/asset/assetmanager.js +117 -65
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/dist/asset/loaders/ktx2/basis_location.js +17 -0
- package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
- package/dist/asset/mesh_lod_builder.js +104 -0
- package/dist/asset/mesh_lod_builder.js.map +1 -0
- package/dist/asset/mesh_settings.js +111 -0
- package/dist/asset/mesh_settings.js.map +1 -0
- package/dist/asset/meshopt_decoder.js +18 -0
- package/dist/asset/meshopt_decoder.js.map +1 -0
- package/dist/asset/meshopt_simplifier.js +26 -0
- package/dist/asset/meshopt_simplifier.js.map +1 -0
- package/dist/asset/model.js +177 -3
- package/dist/asset/model.js.map +1 -1
- package/dist/asset/texture_settings.js +231 -0
- package/dist/asset/texture_settings.js.map +1 -0
- package/dist/asset/zmsh_binary.js +131 -0
- package/dist/asset/zmsh_binary.js.map +1 -0
- package/dist/asset/zsdf_binary.js +111 -0
- package/dist/asset/zsdf_binary.js.map +1 -0
- package/dist/blitter/bilateralblur.js +1 -2
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/gaussianblur.js +1 -6
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +31 -10
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +178 -200
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/follow.js +342 -0
- package/dist/camera/follow.js.map +1 -0
- package/dist/camera/fps.js +9 -7
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +46 -19
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +30475 -19865
- package/dist/index.js +67 -12
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +3 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/eye.js +1 -1
- package/dist/material/eye.js.map +1 -1
- package/dist/material/hair.js +2 -3
- package/dist/material/hair.js.map +1 -1
- package/dist/material/hairstrand.js +235 -235
- package/dist/material/hairstrand.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +362 -300
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +118 -45
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +223 -83
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +31 -206
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +1 -1
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrmr.js +3 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +3 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/sdf_debug.js +78 -0
- package/dist/material/sdf_debug.js.map +1 -0
- package/dist/material/shader/helper.js +733 -190
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +204 -43
- package/dist/material/shader/terrain_blend.js.map +1 -1
- package/dist/material/skin.js +331 -297
- package/dist/material/skin.js.map +1 -1
- package/dist/material/skinprofile.js +1058 -0
- package/dist/material/skinprofile.js.map +1 -0
- package/dist/material/sss.js +353 -0
- package/dist/material/sss.js.map +1 -0
- package/dist/material/sss_kernel.js +265 -0
- package/dist/material/sss_kernel.js.map +1 -0
- package/dist/material/sssprofile.js +879 -0
- package/dist/material/sssprofile.js.map +1 -0
- package/dist/material/subsurfaceprofile.js +4 -8
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/terrain-cm.js +464 -188
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js +3 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +2009 -201
- package/dist/material/water.js.map +1 -1
- package/dist/node_modules/meshoptimizer/LICENSE +21 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
- package/dist/physics/character.js +226 -0
- package/dist/physics/character.js.map +1 -0
- package/dist/physics/collider.js +209 -0
- package/dist/physics/collider.js.map +1 -0
- package/dist/physics/events.js +79 -0
- package/dist/physics/events.js.map +1 -0
- package/dist/physics/joint.js +272 -0
- package/dist/physics/joint.js.map +1 -0
- package/dist/physics/node_physics.js +234 -0
- package/dist/physics/node_physics.js.map +1 -0
- package/dist/physics/part.js +91 -0
- package/dist/physics/part.js.map +1 -0
- package/dist/physics/rigid_body.js +379 -0
- package/dist/physics/rigid_body.js.map +1 -0
- package/dist/physics/vehicle.js +335 -0
- package/dist/physics/vehicle.js.map +1 -0
- package/dist/physics/world.js +25 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/posteffect/bloom.js +49 -14
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/motionblur.js +668 -63
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +48 -50
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +605 -355
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +91 -162
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -11
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +34 -15
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +1 -0
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +40 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +328 -62
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +958 -224
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +26 -5
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/debug_views.js +37 -0
- package/dist/render/debug_views.js.map +1 -0
- package/dist/render/depthpass.js +5 -1
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +53 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +53 -53
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +196 -113
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +8 -13
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +268 -136
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +113 -28
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/gi/probe_volume.js +1334 -0
- package/dist/render/gi/probe_volume.js.map +1 -0
- package/dist/render/gi/scene_gi.js +282 -0
- package/dist/render/gi/scene_gi.js.map +1 -0
- package/dist/render/gi/voxel_atlas.js +198 -0
- package/dist/render/gi/voxel_atlas.js.map +1 -0
- package/dist/render/gi/voxel_lighting.js +652 -0
- package/dist/render/gi/voxel_lighting.js.map +1 -0
- package/dist/render/gi/voxel_scene.js +642 -0
- package/dist/render/gi/voxel_scene.js.map +1 -0
- package/dist/render/gi/voxelize_pass.js +223 -0
- package/dist/render/gi/voxelize_pass.js.map +1 -0
- package/dist/render/globalbindgroup_allocator.js +3 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/gpu_picking.js +9 -36
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +23 -9
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/lod.js +46 -0
- package/dist/render/lod.js.map +1 -0
- package/dist/render/oit.js +11 -11
- package/dist/render/oit.js.map +1 -1
- package/dist/render/primitive.js +301 -9
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/primitive_readback.js +209 -0
- package/dist/render/primitive_readback.js.map +1 -0
- package/dist/render/render_queue.js +198 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +14 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +15 -1
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/executor.js +136 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +585 -59
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/scene_render_context.js +31 -2
- package/dist/render/rendergraph/scene_render_context.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +28 -5
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sdf/box_allocator.js +98 -0
- package/dist/render/sdf/box_allocator.js.map +1 -0
- package/dist/render/sdf/global_sdf.js +865 -0
- package/dist/render/sdf/global_sdf.js.map +1 -0
- package/dist/render/sdf/scene_sdf.js +562 -0
- package/dist/render/sdf/scene_sdf.js.map +1 -0
- package/dist/render/sdf/sdf_atlas.js +227 -0
- package/dist/render/sdf/sdf_atlas.js.map +1 -0
- package/dist/render/sdf/sdf_programs.js +42 -0
- package/dist/render/sdf/sdf_programs.js.map +1 -0
- package/dist/render/sdf/sdf_view.js +199 -0
- package/dist/render/sdf/sdf_view.js.map +1 -0
- package/dist/render/sdf/waterline.js +610 -0
- package/dist/render/sdf/waterline.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +142 -25
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/shore_wave_generator.js +1193 -0
- package/dist/render/shore_wave_generator.js.map +1 -0
- package/dist/render/sky.js +516 -86
- package/dist/render/sky.js.map +1 -1
- package/dist/render/transmission_thickness_pass.js +477 -0
- package/dist/render/transmission_thickness_pass.js.map +1 -0
- package/dist/render/underwater.js +524 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/virtualtexture/virtual_texture.js +1214 -0
- package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_common.js +472 -0
- package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
- package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
- package/dist/render/volumetric_cloud/debug_view.js +131 -0
- package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
- package/dist/render/volumetric_cloud/resources.js +380 -0
- package/dist/render/volumetric_cloud/resources.js.map +1 -0
- package/dist/render/volumetric_cloud/sky_cache.js +380 -0
- package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
- package/dist/render/water_caustics.js +1195 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/water_foam.js +627 -0
- package/dist/render/water_foam.js.map +1 -0
- package/dist/render/water_interaction.js +1795 -0
- package/dist/render/water_interaction.js.map +1 -0
- package/dist/render/weightedblended_oit.js +36 -36
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +9 -4
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +108 -12
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +28 -7
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/foliage.js +1020 -0
- package/dist/scene/foliage.js.map +1 -0
- package/dist/scene/foliage_buckets.js +147 -0
- package/dist/scene/foliage_buckets.js.map +1 -0
- package/dist/scene/foliage_mask.js +358 -0
- package/dist/scene/foliage_mask.js.map +1 -0
- package/dist/scene/hair.js +15 -4
- package/dist/scene/hair.js.map +1 -1
- package/dist/scene/light.js +179 -13
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +327 -45
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +9 -3
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +9 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +8 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/physics_settings.js +157 -0
- package/dist/scene/physics_settings.js.map +1 -0
- package/dist/scene/scene.js +190 -44
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +147 -6
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
- package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +881 -42
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grass_gpu.js +929 -0
- package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +180 -9
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +465 -36
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
- package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
- package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
- package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
- package/dist/scene/update_queue.js +54 -0
- package/dist/scene/update_queue.js.map +1 -0
- package/dist/scene/water.js +997 -96
- package/dist/scene/water.js.map +1 -1
- package/dist/scene/water_surface_sampler.js +324 -0
- package/dist/scene/water_surface_sampler.js.map +1 -0
- package/dist/scene/wind.js +317 -0
- package/dist/scene/wind.js.map +1 -0
- package/dist/shaders/atmosphere.js +388 -166
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +100 -32
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/gi.js +365 -0
- package/dist/shaders/gi.js.map +1 -0
- package/dist/shaders/ltc_rect.js +202 -0
- package/dist/shaders/ltc_rect.js.map +1 -0
- package/dist/shaders/misc.js +1 -10
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +5 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/probes.js +309 -0
- package/dist/shaders/probes.js.map +1 -0
- package/dist/shaders/sdf.js +537 -0
- package/dist/shaders/sdf.js.map +1 -0
- package/dist/shaders/shadow.js +104 -70
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/skin_brdf.js +243 -0
- package/dist/shaders/skin_brdf.js.map +1 -0
- package/dist/shaders/ssr.js +6 -159
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +38 -27
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +40 -87
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +42 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +110 -19
- package/dist/shadow/dom.js.map +1 -1
- package/dist/shadow/esm.js +3 -3
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -48
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -53
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +34 -9
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +3 -8
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +87 -49
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +93 -53
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +18 -72
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -3
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/shape.js +44 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/utility/buoyancy.js +287 -0
- package/dist/utility/buoyancy.js.map +1 -0
- package/dist/utility/physical.js +10 -1
- package/dist/utility/physical.js.map +1 -1
- package/dist/utility/pmrem.js +17 -43
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/sdf/bake.js +435 -0
- package/dist/utility/sdf/bake.js.map +1 -0
- package/dist/utility/sdf/bvh.js +576 -0
- package/dist/utility/sdf/bvh.js.map +1 -0
- package/dist/utility/serialization/manager.js +36 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +77 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +11 -4
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +140 -279
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth.js +25 -0
- package/dist/utility/serialization/scene/cloth.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +14 -6
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/foliage.js +821 -0
- package/dist/utility/serialization/scene/foliage.js.map +1 -0
- package/dist/utility/serialization/scene/hair.js +11 -4
- package/dist/utility/serialization/scene/hair.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +115 -7
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +388 -220
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +69 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +140 -5
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/node_physics.js +1318 -0
- package/dist/utility/serialization/scene/node_physics.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +11 -4
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/physics.js +120 -0
- package/dist/utility/serialization/scene/physics.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +124 -10
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +1687 -51
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +11 -4
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +163 -33
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +11 -4
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +2473 -114
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +97 -109
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/foam.js +170 -0
- package/dist/utility/textures/foam.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +17 -43
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +4 -4
- package/dist/utility/textures/ltcdata.js.map +1 -1
- package/dist/utility/textures/ltclut.js +16 -6
- package/dist/utility/textures/ltclut.js.map +1 -1
- package/dist/utility/unsupported.js +24 -0
- package/dist/utility/unsupported.js.map +1 -0
- package/dist/values.js +13 -1
- package/dist/values.js.map +1 -1
- package/package.json +25 -12
- package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/src/asset/meshoptimizer/LICENSE +21 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meshmaterial.js","sources":["../../src/material/meshmaterial.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n FaceMode,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport { ProgramBuilder } from '@zephyr3d/device';\r\nimport {\r\n MaterialVaryingFlags,\r\n QUEUE_OPAQUE,\r\n QUEUE_TRANSPARENT,\r\n RENDER_PASS_TYPE_DEPTH,\r\n RENDER_PASS_TYPE_LIGHT,\r\n RENDER_PASS_TYPE_OBJECT_COLOR,\r\n RENDER_PASS_TYPE_SHADOWMAP\r\n} from '../values';\r\nimport { Material } from './material';\r\nimport type { DepthPass } from '../render';\r\nimport { type DrawContext, type ShadowMapPass } from '../render';\r\nimport { encodeNormalizedFloatToRGBA } from '../shaders/misc';\r\nimport { interleavedGradientNoise } from '../shaders/noise';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Clonable, Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Vector2, Vector3, Vector4, applyMixins, DRef } from '@zephyr3d/base';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport { getDevice, getEngine } from '../app/api';\r\n\r\n/**\r\n * Blending mode for mesh materials.\r\n *\r\n * - `none`: No blending (opaque).\r\n * - `blend`: Standard alpha blending (srcAlpha, 1 - srcAlpha).\r\n * - `additive`: Additive blending (1, 1), commonly for glow/FX.\r\n *\r\n * May be combined with alpha-to-coverage and alpha test.\r\n * @public\r\n */\r\nexport type BlendMode = 'none' | 'blend' | 'additive';\r\n\r\n/**\r\n * Extracts the return type of a mixin function.\r\n * @public\r\n */\r\nexport type ExtractMixinReturnType<M> = M extends (target: infer A) => infer R ? R : never;\r\n\r\n/**\r\n * Produces the intersection type of multiple mixins’ return types.\r\n * @public\r\n */\r\nexport type ExtractMixinType<M> = M extends [infer First]\r\n ? ExtractMixinReturnType<First>\r\n : M extends [infer First, ...infer Rest]\r\n ? ExtractMixinReturnType<First> & ExtractMixinType<[...Rest]>\r\n : never;\r\n\r\n/**\r\n * Apply material mixins to a target material class.\r\n *\r\n * Useful for composing optional capabilities (e.g., base color, normal map, PBR terms).\r\n *\r\n * @param target - The material class (constructor or prototype).\r\n * @param mixins - One or more mixin functions.\r\n * @returns The target class augmented with the mixins (intersection type).\r\n *\r\n * @example\r\n * class MyMaterial extends MeshMaterial \\{\\}\r\n * const Mixed = applyMaterialMixins(MyMaterial, WithBaseColor, WithNormalMap);\r\n * const m = new Mixed();\r\n * @public\r\n */\r\nexport function applyMaterialMixins<M extends ((target: any) => any)[], T>(target: T, ...mixins: M) {\r\n return applyMixins(target, ...mixins);\r\n}\r\n\r\nlet FEATURE_ALPHATEST = 0;\r\nlet FEATURE_ALPHABLEND = 0;\r\nlet FEATURE_CULLMODE = 0;\r\nlet FEATURE_ALPHATOCOVERAGE = 0;\r\nlet FEATURE_ALPHADITHER = 0;\r\nlet FEATURE_DISABLE_TAA = 0;\r\nlet FEATURE_TRANSPARENT_MOTION_VECTOR = 0;\r\n\r\n/**\r\n * Instance uniform data type\r\n * @public\r\n */\r\nexport type InstanceUniformType = 'float' | 'vec2' | 'vec3' | 'vec4' | 'rgb' | 'rgba';\r\n\r\n/**\r\n * Base class for mesh materials.\r\n *\r\n * Key responsibilities:\r\n * - Defines feature-based shader variants (alpha test, blending, alpha-to-coverage, TAA toggle, etc.).\r\n * - Provides a material instancing mechanism (per-instance uniforms via a shared core material).\r\n * - Implements the base shader scaffolding for multiple render passes (LIGHT, DEPTH, OBJECT_COLOR, SHADOWMAP).\r\n * - Updates render states depending on pass and features (blending, depth, culling).\r\n * - Submits material uniforms and cooperates with OIT/TAA/SSR/motion vectors.\r\n *\r\n * Variant system:\r\n * - Features are stored in `_featureStates` and hashed into `_createHash()`.\r\n * - Changing features calls `useFeature(...)` which triggers `optionChanged(true)` to rebuild programs.\r\n *\r\n * Instancing:\r\n * - `defineInstanceUniform` registers per-instance fields with packed layout.\r\n * - `createInstance()` returns a lightweight instance that shares the core’s GPU programs and updates\r\n * instance uniform buffer only. This improves batching/instancing support.\r\n *\r\n * Shader hooks:\r\n * - `vertexShader(scope)` and `fragmentShader(scope)` provide per-pass hook points to implement the\r\n * material’s vertex/fragment logic. The base class wires up common I/O (skin, morph, instancing).\r\n * - `outputFragmentColor(...)` centralizes final color output across passes, handling OIT and alpha ops.\r\n *\r\n * Render states and queues:\r\n * - `updateRenderStates(...)` sets depth/blend/cull states based on blending, alpha-to-coverage,\r\n * depth equality optimizations, pass type, and optional OIT overrides.\r\n * - `getQueueType()` chooses between opaque and transparent queues.\r\n *\r\n * Extending:\r\n * - Override `vertexShader`, `fragmentShader`, and optionally `outputFragmentColor`.\r\n * - Override `supportLighting`, `isTransparentPass`, `needFragmentColor`, etc., as needed.\r\n * - Use `uniformChanged()` when changing uniform-only values that do not alter shader variants.\r\n * - Use `useFeature()` when toggling options that affect shader variants.\r\n *\r\n * @public\r\n */\r\nexport class MeshMaterial extends Material implements Clonable<MeshMaterial> {\r\n private static readonly SHADER_VERSION = 3;\r\n /**\r\n * Registered instance uniforms for this material class.\r\n *\r\n * Each entry defines property name, type, and packed offset (float-aligned).\r\n * @internal\r\n */\r\n static INSTANCE_UNIFORMS: { prop: string; type: InstanceUniformType; offset: number; name: string }[] = [];\r\n /**\r\n * Next free feature index for subclasses to define their own feature toggles.\r\n * @internal\r\n */\r\n static NEXT_FEATURE_INDEX = 3;\r\n /**\r\n * Built-in per-instance uniform: object color (rgba), used for GPU picking/object-ID pass.\r\n * @internal\r\n */\r\n static OBJECT_COLOR_UNIFORM = this.defineInstanceUniform('objectColor', 'rgba');\r\n /**\r\n * Built-in per-instance uniform: opacity (float), used in transparent passes.\r\n * @internal\r\n */\r\n static OPACITY_UNIFORM = this.defineInstanceUniform('opacity', 'float', 'Opacity');\r\n /** @internal Feature state array (indexed by feature indices). */\r\n private _featureStates: unknown[];\r\n /** @internal Alpha test cutoff in [0, 1]. */\r\n private _alphaCutoff: number;\r\n /** @internal Whether alpha-test uses temporal dither coverage. */\r\n private _alphaDither: boolean;\r\n /** @internal Blending mode. */\r\n private _blendMode: BlendMode;\r\n /** @internal Whether transparent materials cast shadow through a masked shadow-only path. */\r\n private _transparentShadowCaster: boolean;\r\n /** @internal Alpha cutoff used by the shadow-only masked caster path. */\r\n private _shadowAlphaCutoff: number;\r\n /** @internal Face culling mode. */\r\n private _cullMode: FaceMode;\r\n /** @internal Opacity in [0, 1]. */\r\n private _opacity: number;\r\n /**\r\n * @internal TAA strength in [0, 1], where higher value typically means stronger accumulation\r\n * (here used inversely when mapping to motion vector output).\r\n */\r\n private _taaStrength: number;\r\n /** @internal Per-object color for object picking pass. */\r\n private _objectColor: Immutable<Vector4>;\r\n /** @internal Last draw context used for shader creation. */\r\n private _ctx: Nullable<DrawContext>;\r\n /** @internal Current material pass index during program building. */\r\n private _materialPass: number;\r\n /**\r\n * Create a MeshMaterial with default opaque settings.\r\n *\r\n * Defaults:\r\n * - `blendMode = 'none'`\r\n * - `cullMode = 'back'`\r\n * - `opacity = 1`\r\n * - `alphaCutoff = 0`\r\n * - `taaStrength = 1 - 1/16`\r\n */\r\n constructor() {\r\n super();\r\n this._featureStates = [];\r\n this._alphaCutoff = 0;\r\n this._alphaDither = false;\r\n this._blendMode = 'none';\r\n this._transparentShadowCaster = false;\r\n this._shadowAlphaCutoff = 0.5;\r\n this._cullMode = 'back';\r\n this._opacity = 1;\r\n this._taaStrength = 1 - 1 / 16;\r\n this._objectColor = Vector4.one();\r\n this._ctx = null;\r\n this._materialPass = -1;\r\n this.useFeature(FEATURE_ALPHABLEND, this._blendMode);\r\n this.useFeature(FEATURE_ALPHADITHER, this._alphaDither);\r\n this.useFeature(FEATURE_CULLMODE, this._cullMode);\r\n }\r\n /**\r\n * Create a shallow clone of this material.\r\n * Subclasses should override to copy custom fields.\r\n */\r\n clone() {\r\n const other = new MeshMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n /**\r\n * Copy common MeshMaterial properties from another material.\r\n * Call `super.copyFrom(other)` first when overriding in subclasses.\r\n *\r\n * @param other - Source material.\r\n */\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.alphaCutoff = other.alphaCutoff;\r\n this.alphaDither = other.alphaDither;\r\n this.blendMode = other.blendMode;\r\n this.transparentShadowCaster = other.transparentShadowCaster;\r\n this.shadowAlphaCutoff = other.shadowAlphaCutoff;\r\n this.cullMode = other.cullMode;\r\n this.opacity = other.opacity;\r\n this.objectColor = other.objectColor;\r\n }\r\n /**\r\n * Capture the active draw context for both cached and freshly-built program paths.\r\n *\r\n * The shader-building hooks access `this.drawContext`, but uniform application may also\r\n * consult it on subsequent frames when the GPU program is reused from cache. Updating it\r\n * here keeps material mixins in sync even when `createProgram()` is skipped.\r\n *\r\n * @param ctx - Current draw context.\r\n * @returns Whether material preparation succeeded.\r\n */\r\n apply(ctx: DrawContext) {\r\n this._ctx = ctx;\r\n this._materialPass = -1;\r\n return super.apply(ctx);\r\n }\r\n /**\r\n * Mark uniform-only changes so uniforms are re-uploaded on next apply, without\r\n * rebuilding shader programs.\r\n */\r\n uniformChanged() {\r\n this.optionChanged(false);\r\n }\r\n /**\r\n * Define a new feature bit/index for shader variants.\r\n * Subclasses may use this to add their own switches.\r\n */\r\n static defineFeature() {\r\n const val = this.NEXT_FEATURE_INDEX;\r\n this.NEXT_FEATURE_INDEX++;\r\n return val;\r\n }\r\n /** @internal Helper: get number of scalar components for a given instance uniform type. */\r\n private static getNumComponents(type: InstanceUniformType) {\r\n if (type === 'float') {\r\n return 1;\r\n }\r\n if (type === 'vec2') {\r\n return 2;\r\n }\r\n if (type === 'rgb' || type === 'vec3') {\r\n return 3;\r\n }\r\n if (type === 'rgba' || type === 'vec4') {\r\n return 4;\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Define a per-instance uniform for this class.\r\n *\r\n * Returns a compact index encoding the vector index and component offset, which can be\r\n * used in shader code via `getInstancedUniform(...)`.\r\n *\r\n * @param prop - Property name exposed on instances.\r\n * @param type - Uniform data type.\r\n * @returns Encoded index for use in `getInstancedUniform`.\r\n *\r\n * @throws If the property is already defined or type is invalid.\r\n */\r\n static defineInstanceUniform(prop: string, type: InstanceUniformType, name = '') {\r\n if (this.INSTANCE_UNIFORMS.findIndex((val) => val.prop === prop) >= 0) {\r\n throw new Error(`${this.name}.defineInstanceUniform(): ${prop} was already defined`);\r\n }\r\n const numComponents = this.getNumComponents(type);\r\n if (numComponents === 0) {\r\n throw new Error(`${this.name}.defineInstanceUniform(): invalid uniform type ${type}`);\r\n }\r\n let index = this.INSTANCE_UNIFORMS.length;\r\n let offset = 0;\r\n if (this.INSTANCE_UNIFORMS.length > 0) {\r\n const lastUniform = this.INSTANCE_UNIFORMS[this.INSTANCE_UNIFORMS.length - 1];\r\n const finalOffset = (lastUniform.offset + 4) & ~3;\r\n offset = finalOffset;\r\n for (let i = 0; i < this.INSTANCE_UNIFORMS.length; i++) {\r\n const offset1 = this.INSTANCE_UNIFORMS[i].offset;\r\n const numComps1 = this.getNumComponents(this.INSTANCE_UNIFORMS[i].type);\r\n const offset2 =\r\n i === this.INSTANCE_UNIFORMS.length - 1 ? finalOffset : this.INSTANCE_UNIFORMS[i + 1].offset;\r\n if (offset1 + numComps1 + numComponents <= offset2) {\r\n index = i + 1;\r\n offset = offset1 + numComps1;\r\n if (offset + numComponents === offset2) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.INSTANCE_UNIFORMS = this.INSTANCE_UNIFORMS.slice();\r\n this.INSTANCE_UNIFORMS.splice(index, 0, { prop, offset, type, name });\r\n return (offset << 2) | (numComponents - 1);\r\n }\r\n /**\r\n * Read an encoded per-instance uniform in shader code.\r\n *\r\n * Encoded index packs: vector index, component offset, and component count.\r\n *\r\n * @param scope - Inside-function shader scope.\r\n * @param uniformIndex - Encoded index from `defineInstanceUniform`.\r\n * @returns The shader expression reading the selected components.\r\n */\r\n getInstancedUniform(scope: PBInsideFunctionScope, uniformIndex: number) {\r\n const pb = scope.$builder;\r\n const instanceID = scope.$builtins.instanceIndex;\r\n const uniformName = ShaderHelper.getInstanceDataUniformName();\r\n const strideName = ShaderHelper.getInstanceDataStrideUniformName();\r\n const offsetName = ShaderHelper.getInstanceDataOffsetUniformName();\r\n const numComponents = (uniformIndex & 3) + 1;\r\n const vecIndex = uniformIndex >> 4;\r\n const vecOffset = (uniformIndex >> 2) & 3;\r\n const u = scope[uniformName].at(\r\n pb.add(\r\n pb.mul(scope[strideName], instanceID),\r\n ShaderHelper.MATERIAL_INSTANCE_DATA_OFFSET + vecIndex,\r\n scope[offsetName]\r\n )\r\n );\r\n const m = ['x', 'y', 'z', 'w'].slice(vecOffset, vecOffset + numComponents).join('');\r\n return u[m] as PBShaderExp;\r\n }\r\n /**\r\n * Get the list of per-instance uniforms for this material class.\r\n */\r\n getInstancedUniforms() {\r\n return (this.constructor as typeof MeshMaterial).INSTANCE_UNIFORMS;\r\n }\r\n /**\r\n * Create a material instance (preferred for GPU instancing).\r\n *\r\n * - On WebGL1 (or when instancing unsupported), falls back to cloning.\r\n * - Otherwise, returns a proxy instance that shares GPU programs and\r\n * stores per-instance uniforms in a compact Float32Array.\r\n *\r\n * The returned instance:\r\n * - Exposes properties defined by `defineInstanceUniform` with getter/setter\r\n * that read/write the packed buffer and notify `RenderBundleWrapper`.\r\n * - Delegates methods to the core material via prototype chain.\r\n */\r\n createInstance(): this {\r\n if (this.$isInstance) {\r\n return this.coreMaterial.createInstance() as this;\r\n }\r\n const isWebGL1 = getDevice().type === 'webgl';\r\n if (isWebGL1 || !this.supportInstancing()) {\r\n return this.clone() as this;\r\n }\r\n const instanceUniforms = this.getInstancedUniforms();\r\n const uniformsHolder =\r\n instanceUniforms.length > 0\r\n ? new Float32Array((instanceUniforms[instanceUniforms.length - 1].offset + 4) & ~3)\r\n : null;\r\n const instance = {} as any;\r\n const that = this;\r\n const coreMaterial = new DRef(that);\r\n let disposed = false;\r\n instance.isBatchable = () => true; //!isWebGL1 && that.supportInstancing();\r\n instance.dispose = () => {\r\n if (!disposed) {\r\n disposed = true;\r\n coreMaterial.dispose();\r\n }\r\n };\r\n instance.$instanceUniforms = uniformsHolder;\r\n instance.$isInstance = true;\r\n Object.defineProperty(instance, 'coreMaterial', {\r\n get: function () {\r\n return coreMaterial.get();\r\n }\r\n });\r\n\r\n // Copy original uniform values\r\n for (let i = 0; i < instanceUniforms.length; i++) {\r\n const { prop, offset, type } = instanceUniforms[i];\r\n const value = that[prop as keyof typeof that];\r\n switch (type) {\r\n case 'float': {\r\n uniformsHolder![offset] = Number(value);\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return uniformsHolder![offset];\r\n },\r\n set(value) {\r\n uniformsHolder![offset] = value;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n case 'vec2': {\r\n if (!(value instanceof Vector2)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector2`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return new Vector2(uniformsHolder![offset], uniformsHolder![offset + 1]);\r\n },\r\n set(value) {\r\n if (!(value instanceof Vector2)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector2`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n case 'vec3':\r\n case 'rgb': {\r\n if (!(value instanceof Vector3)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector3`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n uniformsHolder![offset + 2] = value.z;\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return new Vector3(\r\n uniformsHolder![offset],\r\n uniformsHolder![offset + 1],\r\n uniformsHolder![offset + 2]\r\n );\r\n },\r\n set(value) {\r\n if (!(value instanceof Vector3)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector3`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n uniformsHolder![offset + 2] = value.z;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n case 'vec4':\r\n case 'rgba': {\r\n if (!(value instanceof Vector4)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector4`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n uniformsHolder![offset + 2] = value.z;\r\n uniformsHolder![offset + 3] = value.w;\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return new Vector4(\r\n uniformsHolder![offset],\r\n uniformsHolder![offset + 1],\r\n uniformsHolder![offset + 2],\r\n uniformsHolder![offset + 3]\r\n );\r\n },\r\n set(value) {\r\n if (!(value instanceof Vector4)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector4`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n uniformsHolder![offset + 2] = value.z;\r\n uniformsHolder![offset + 3] = value.w;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n Object.setPrototypeOf(instance, that);\r\n getEngine().resourceManager.trackMaterialReference(\r\n instance as this,\r\n getEngine().resourceManager.getAssetId(that.coreMaterial)\r\n );\r\n return instance as this;\r\n }\r\n /**\r\n * Draw context captured during program creation, available inside shader hooks.\r\n *\r\n * @returns The last `DrawContext` used to build or apply this material.\r\n */\r\n get drawContext() {\r\n return this._ctx!;\r\n }\r\n /**\r\n * Current material pass index during program building.\r\n * Typically used inside shader hooks to select per-pass logic.\r\n *\r\n * @returns The active pass index while building the program, or -1 when idle.\r\n */\r\n get pass() {\r\n return this._materialPass;\r\n }\r\n /**\r\n * Alpha test cutoff in [0, 1].\r\n * - 0 disables alpha testing.\r\n * - \\> 0 discards fragments with alpha \\< cutoff.\r\n * Changing this marks uniforms dirty (no shader rebuild).\r\n */\r\n get alphaCutoff() {\r\n return this._alphaCutoff;\r\n }\r\n set alphaCutoff(val) {\r\n if (this._alphaCutoff !== val) {\r\n this.useFeature(FEATURE_ALPHATEST, val > 0);\r\n this._alphaCutoff = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Whether alpha clipping uses frame-varying dither coverage.\r\n * - Effective only when alpha cutoff is enabled.\r\n * - Intended for masked materials (blendMode='none') to emulate soft transparency with TAA.\r\n */\r\n get alphaDither() {\r\n return this._alphaDither;\r\n }\r\n set alphaDither(val) {\r\n if (this._alphaDither !== !!val) {\r\n this._alphaDither = !!val;\r\n this.useFeature(FEATURE_ALPHADITHER, this._alphaDither);\r\n }\r\n }\r\n /**\r\n * Whether TAA is disabled for this material.\r\n * - When true, motion vectors encode a large sentinel to skip TAA accumulation.\r\n * - Managed via an internal feature toggle.\r\n */\r\n get TAADisabled() {\r\n return !!this.featureUsed(FEATURE_DISABLE_TAA);\r\n }\r\n set TAADisabled(val) {\r\n this.useFeature(FEATURE_DISABLE_TAA, !!val);\r\n }\r\n /**\r\n * Whether a blended material contributes motion vectors.\r\n *\r\n * @remarks\r\n * Off by default, and only meaningful with `blendMode !== 'none'`: blended\r\n * geometry is normally absent from the prepass, so it writes no velocity and a\r\n * temporal filter reprojects it with whatever is behind it. Turning this on\r\n * adds it to a motion-vector-only pass over the transparent queue.\r\n *\r\n * Right for geometry that is dense enough to own its pixels - hair, foliage\r\n * cards - where one velocity per pixel is a fair summary. Wrong for genuinely\r\n * see-through surfaces such as glass, where the background's own velocity is\r\n * the one that should survive, which is why this is opt-in.\r\n */\r\n get transparentMotionVector() {\r\n return !!this.featureUsed(FEATURE_TRANSPARENT_MOTION_VECTOR);\r\n }\r\n set transparentMotionVector(val) {\r\n this.useFeature(FEATURE_TRANSPARENT_MOTION_VECTOR, !!val);\r\n }\r\n /**\r\n * TAA strength in [0, 1].\r\n * - Higher values generally imply stronger accumulation.\r\n * - The value is mapped when writing motion-vector outputs during depth pass.\r\n */\r\n get TAAStrength() {\r\n return this._taaStrength;\r\n }\r\n set TAAStrength(val) {\r\n val = val > 1 ? 1 : val < 0 ? 0 : val;\r\n if (this._taaStrength !== val) {\r\n this._taaStrength = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Alpha-to-coverage toggle.\r\n * - Useful to approximate transparency for MSAA targets.\r\n * - Managed as a shader feature; toggling rebuilds variants.\r\n */\r\n get alphaToCoverage() {\r\n return !!this.featureUsed(FEATURE_ALPHATOCOVERAGE);\r\n }\r\n set alphaToCoverage(val) {\r\n this.useFeature(FEATURE_ALPHATOCOVERAGE, !!val);\r\n }\r\n /**\r\n * Blending mode of this material.\r\n * - 'none' for opaque, 'blend' for standard alpha, 'additive' for emissive FX.\r\n * - Changing the mode toggles an internal feature and rebuilds variants.\r\n */\r\n get blendMode() {\r\n return this._blendMode;\r\n }\r\n set blendMode(val) {\r\n if (this._blendMode !== val) {\r\n this._blendMode = val;\r\n this.useFeature(FEATURE_ALPHABLEND, this._blendMode);\r\n }\r\n }\r\n /**\r\n * Whether transparent visible materials cast shadow through a masked shadow-only path.\r\n * - Visible rendering stays blended.\r\n * - Shadow-map rendering is treated like a cutout material using `shadowAlphaCutoff`.\r\n */\r\n get transparentShadowCaster() {\r\n return this._transparentShadowCaster;\r\n }\r\n set transparentShadowCaster(val) {\r\n if (this._transparentShadowCaster !== !!val) {\r\n this._transparentShadowCaster = !!val;\r\n this.optionChanged(true);\r\n }\r\n }\r\n /**\r\n * Alpha cutoff used by the shadow-only masked caster path.\r\n */\r\n get shadowAlphaCutoff() {\r\n return this._shadowAlphaCutoff;\r\n }\r\n set shadowAlphaCutoff(val) {\r\n val = val > 1 ? 1 : val < 0 ? 0 : val;\r\n if (this._shadowAlphaCutoff !== val) {\r\n this._shadowAlphaCutoff = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Face culling mode: 'none' | 'front' | 'back'.\r\n * - Does not force shader rebuild; affects rasterizer state.\r\n */\r\n get cullMode() {\r\n return this._cullMode;\r\n }\r\n set cullMode(val) {\r\n if (this._cullMode !== val) {\r\n this._cullMode = val;\r\n this.useFeature(FEATURE_CULLMODE, this._cullMode);\r\n }\r\n }\r\n /**\r\n * Material opacity in [0, 1].\r\n * - Used in transparent passes. Changing marks uniforms dirty only.\r\n */\r\n get opacity() {\r\n return this._opacity;\r\n }\r\n set opacity(val) {\r\n val = val < 0 ? 0 : val > 1 ? 1 : val;\r\n if (this._opacity !== val) {\r\n this._opacity = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Per-object color used for GPU picking/object-ID pass.\r\n * - Changing marks uniforms dirty only.\r\n */\r\n get objectColor(): Immutable<Vector4> {\r\n return this._objectColor;\r\n }\r\n set objectColor(val: Immutable<Vector4>) {\r\n if (val !== this._objectColor) {\r\n this._objectColor = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Whether this material responds to scene lighting.\r\n * Override to return false for unlit materials.\r\n *\r\n * @returns True if lighting affects this material; otherwise false.\r\n */\r\n supportLighting(): boolean {\r\n return false;\r\n }\r\n /**\r\n * Returns the effective blend mode for the current pass.\r\n * Transparent-shadow-caster materials stay blended in visible passes, but become masked in shadow passes.\r\n */\r\n protected getEffectiveBlendMode(pass: number, ctx?: DrawContext): BlendMode {\r\n if (\r\n ctx &&\r\n this.useTransparentShadowCasterForPass(ctx.renderPass?.type) &&\r\n this.featureUsed<BlendMode>(FEATURE_ALPHABLEND) !== 'none'\r\n ) {\r\n return 'none';\r\n }\r\n // The prepass records depth and velocity, neither of which is a quantity\r\n // that blends. Blended geometry only reaches it through the motion vector\r\n // pass, and there the nearest fragment should replace what is under it\r\n // rather than tint it.\r\n if (ctx && ctx.renderPass?.type === RENDER_PASS_TYPE_DEPTH) {\r\n return 'none';\r\n }\r\n return this.featureUsed<BlendMode>(FEATURE_ALPHABLEND);\r\n }\r\n /**\r\n * Whether this draw is the motion-vector-only pass over the transparent queue.\r\n * @internal\r\n */\r\n protected isMotionVectorOnlyPass(ctx: DrawContext) {\r\n return (\r\n ctx.renderPass?.type === RENDER_PASS_TYPE_DEPTH && !!(ctx.renderPass as DepthPass).motionVectorOnly\r\n );\r\n }\r\n /**\r\n * Returns the alpha cutoff that should be used for the current pass.\r\n */\r\n protected getActiveAlphaCutoff(ctx?: DrawContext, pass = this.pass) {\r\n return ctx && this.useTransparentShadowCaster(ctx, pass) ? this._shadowAlphaCutoff : this._alphaCutoff;\r\n }\r\n /**\r\n * Whether the current pass should use the shadow-only masked caster path.\r\n */\r\n useTransparentShadowCaster(ctx?: DrawContext, _pass = this.pass) {\r\n return !!ctx && this.useTransparentShadowCasterForPass(ctx.renderPass?.type);\r\n }\r\n /**\r\n * Whether the specified render pass type should reinterpret this transparent material as a masked shadow caster.\r\n */\r\n useTransparentShadowCasterForPass(renderPassType?: number) {\r\n return (\r\n !!this._transparentShadowCaster &&\r\n renderPassType === RENDER_PASS_TYPE_SHADOWMAP &&\r\n this.featureUsed<BlendMode>(FEATURE_ALPHABLEND) !== 'none'\r\n );\r\n }\r\n /**\r\n * Whether this pass needs an alpha-cutoff uniform bound.\r\n */\r\n protected usesAlphaCutoff(ctx: DrawContext, pass: number) {\r\n return this._alphaCutoff > 0 || (!!ctx && this.useTransparentShadowCaster(ctx, pass));\r\n }\r\n /**\r\n * Whether this pass needs fragment color inputs.\r\n * This stays aligned with the historical meaning of `needFragmentColor`,\r\n * but also allows shadow-only transparent casters to fetch alpha sources.\r\n */\r\n needFragmentColorInput(ctx?: DrawContext) {\r\n const drawContext = ctx ?? this.drawContext;\r\n return this.needFragmentColor(drawContext) || this.useTransparentShadowCaster(drawContext, this.pass);\r\n }\r\n /**\r\n * Update render states per pass and draw context.\r\n * Sets blending, alpha-to-coverage, depth test/write, cull mode, color mask, and cooperates with OIT.\r\n *\r\n * @param pass - Current material pass index.\r\n * @param stateSet - Render state set to update.\r\n * @param ctx - Current draw context.\r\n * @returns void\r\n */\r\n protected updateRenderStates(pass: number, stateSet: RenderStateSet, ctx: DrawContext) {\r\n const isObjectColorPass = ctx.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR;\r\n const blendMode = this.getEffectiveBlendMode(pass, ctx);\r\n const blending = !isObjectColorPass && (blendMode !== 'none' || ctx.lightBlending);\r\n const a2c =\r\n !isObjectColorPass &&\r\n this.featureUsed<boolean>(FEATURE_ALPHATOCOVERAGE) &&\r\n !this.useTransparentShadowCaster(ctx, pass);\r\n const ztestEq =\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n ctx.queue === QUEUE_OPAQUE &&\r\n !!ctx.depthPrepassAttachment &&\r\n !ctx.sceneColorTexture;\r\n if (this.isMotionVectorOnlyPass(ctx)) {\r\n // Tested against the opaque depth, so anything behind the scene is\r\n // rejected, but never written: the prepass depth is what the light pass\r\n // and every screen-space effect read, and blended geometry does not\r\n // belong in it.\r\n stateSet.defaultBlendingState();\r\n stateSet.useDepthState().enableTest(true).enableWrite(false);\r\n if (ctx.forceCullMode || this._cullMode !== 'back') {\r\n stateSet.useRasterizerState().cullMode = ctx.forceCullMode || this._cullMode;\r\n } else {\r\n stateSet.defaultRasterizerState();\r\n }\r\n stateSet.defaultColorState();\r\n stateSet.defaultStencilState();\r\n return;\r\n }\r\n if (blending || a2c) {\r\n const blendingState = stateSet.useBlendingState();\r\n if (blending) {\r\n blendingState.enable(true);\r\n blendingState.setBlendFuncAlpha('zero', 'one');\r\n blendingState.setBlendEquation('add', 'add');\r\n if (blendMode === 'additive' || ctx.lightBlending) {\r\n blendingState.setBlendFuncRGB('one', 'one');\r\n } else {\r\n blendingState.setBlendFuncRGB('one', 'inv-src-alpha');\r\n }\r\n } else {\r\n blendingState.enable(false);\r\n }\r\n blendingState.enableAlphaToCoverage(a2c);\r\n if (ztestEq) {\r\n stateSet.useDepthState().setCompareFunc('eq').enableTest(true).enableWrite(false);\r\n } else if (blendingState.enabled) {\r\n stateSet.useDepthState().enableTest(true).enableWrite(false);\r\n } else {\r\n stateSet.defaultDepthState();\r\n }\r\n } else {\r\n stateSet.defaultBlendingState();\r\n if (ztestEq) {\r\n stateSet.useDepthState().setCompareFunc('eq').enableTest(true).enableWrite(false);\r\n } else {\r\n stateSet.defaultDepthState();\r\n }\r\n }\r\n if (ctx.forceCullMode || this._cullMode !== 'back') {\r\n stateSet.useRasterizerState().cullMode = ctx.forceCullMode || this._cullMode;\r\n } else if (ctx.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n stateSet.useRasterizerState().cullMode = 'none';\r\n } else {\r\n stateSet.defaultRasterizerState();\r\n }\r\n if (ctx.forceColorState) {\r\n stateSet.useColorState(ctx.forceColorState);\r\n } else {\r\n stateSet.defaultColorState();\r\n }\r\n stateSet.defaultStencilState();\r\n if (ctx.oit) {\r\n ctx.oit.setRenderStates(stateSet);\r\n }\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n // Gives the shadow implementation the last say, the same way OIT gets it on\r\n // the transparent pass. Single-pass techniques leave the states alone; an\r\n // accumulating one (deep opacity maps) needs blending on and depth write\r\n // off, which the branches above would otherwise never produce for a caster.\r\n const shadowMapParams = ctx.shadowMapInfo?.get((ctx.renderPass as ShadowMapPass).light!);\r\n shadowMapParams?.impl?.setCasterRenderStates(shadowMapParams, stateSet);\r\n }\r\n }\r\n /**\r\n * Submit material uniforms/resources to the material bind group (set 2).\r\n * Handles alpha cutoff, opacity (non-instanced transparent), OIT, object color, and TAA strength.\r\n *\r\n * @param bindGroup - The material bind group to write into.\r\n * @param ctx - Current draw context.\r\n * @param pass - Current material pass index.\r\n * @returns void\r\n */\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n if (this.usesAlphaCutoff(ctx, pass)) {\r\n bindGroup.setValue('zAlphaCutoff', this.getActiveAlphaCutoff(ctx, pass));\r\n }\r\n if (\r\n this.isTransparentPass(pass, ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n bindGroup.setValue('zOpacity', this._opacity);\r\n }\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH && ctx.motionVectors) {\r\n bindGroup.setValue('zTAAStrength', (1 - this._taaStrength) * 50000);\r\n }\r\n }\r\n /**\r\n * Determine the render queue for this material.\r\n * Transparent materials are queued as `QUEUE_TRANSPARENT`, otherwise `QUEUE_OPAQUE`.\r\n *\r\n * @returns The queue type constant.\r\n */\r\n getQueueType(): number {\r\n return this.isTransparentPass(0) ? QUEUE_TRANSPARENT : QUEUE_OPAQUE;\r\n }\r\n /**\r\n * Whether the given pass is transparent.\r\n * Default returns true when `blendMode !== 'none'`.\r\n *\r\n * @param pass - Material pass index.\r\n * @returns True if the pass is transparent; otherwise false.\r\n */\r\n isTransparentPass(pass: number, ctx?: DrawContext) {\r\n return this.getEffectiveBlendMode(pass, ctx) !== 'none';\r\n }\r\n /**\r\n * Create the GPU program for a given pass and draw context.\r\n * Enables depth-clamp emulation for shadow map passes when required by the light, then delegates to `_createProgram`.\r\n *\r\n * @param ctx - Current draw context.\r\n * @param pass - Material pass index.\r\n * @returns The created `GPUProgram`.\r\n * @internal\r\n */\r\n protected createProgram(ctx: DrawContext, pass: number) {\r\n const pb = new ProgramBuilder(ctx.device);\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n const shadowMapParams = ctx.shadowMapInfo!.get((ctx.renderPass as ShadowMapPass).light!)!;\r\n pb.emulateDepthClamp = !!shadowMapParams.depthClampEnabled;\r\n }\r\n return this._createProgram(pb, ctx, pass);\r\n }\r\n /**\r\n * Query a feature flag’s current value.\r\n *\r\n * @typeParam T - Expected value type.\r\n * @param feature - The feature index.\r\n * @returns The current value for the feature, typed as `T`.\r\n */\r\n featureUsed<T = unknown>(feature: number): T {\r\n return this._featureStates[feature] as T;\r\n }\r\n /**\r\n * Enable or disable a feature and trigger variant rebuild when changed.\r\n * Calls `optionChanged(true)` internally on change.\r\n *\r\n * @param feature - The feature index to set.\r\n * @param use - The new feature value (typed by convention).\r\n * @returns void\r\n */\r\n useFeature(feature: number, use: unknown) {\r\n if (this._featureStates[feature] !== use) {\r\n this._featureStates[feature] = use;\r\n this.optionChanged(true);\r\n }\r\n }\r\n /**\r\n * Create the material-specific hash fragment from feature state.\r\n * Contributes to program variant hashing.\r\n *\r\n * @returns The hash fragment string.\r\n * @internal\r\n */\r\n protected _createHash() {\r\n return `${MeshMaterial.SHADER_VERSION}|${this._featureStates\r\n .map((val) => (val === undefined ? '' : val))\r\n .join('|')}|${Number(this._transparentShadowCaster)}`;\r\n }\r\n /**\r\n * Apply material uniforms to the bind group (set 2).\r\n * Default implementation delegates to `applyUniformValues`.\r\n *\r\n * @param bindGroup - The material bind group to update.\r\n * @param ctx - Current draw context.\r\n * @param pass - Current material pass index.\r\n * @returns void\r\n * @internal\r\n */\r\n protected _applyUniforms(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n this.applyUniformValues(bindGroup, ctx, pass);\r\n }\r\n protected isMaterialTextureEnabled(_name: string) {\r\n return true;\r\n }\r\n /**\r\n * Whether the fragment shader needs to compute color.\r\n * Returns true for LIGHT pass, or when alpha test or alpha-to-coverage is enabled.\r\n * Override if the material writes color in other passes.\r\n *\r\n * @param ctx - Optional draw context; defaults to the last captured `drawContext`.\r\n * @returns True if fragment color computation is needed; otherwise false.\r\n */\r\n needFragmentColor(ctx?: DrawContext) {\r\n const drawContext = ctx ?? this.drawContext;\r\n if (!drawContext?.renderPass) {\r\n return this._alphaCutoff > 0 || this.alphaToCoverage;\r\n }\r\n return (\r\n drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT || this._alphaCutoff > 0 || this.alphaToCoverage\r\n );\r\n }\r\n /**\r\n * Vertex shader hook.\r\n * Prepares common inputs (skin/morph/instancing), varyings, and pass-dependent outputs.\r\n * Override to implement per-vertex logic; use `ShaderHelper` as needed.\r\n *\r\n * @param scope - Vertex shader function scope.\r\n * @returns void\r\n */\r\n vertexShader(scope: PBFunctionScope) {\r\n const pb = scope.$builder;\r\n ShaderHelper.prepareVertexShader(pb, this.drawContext);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SKIN_ANIMATION) {\r\n scope.$inputs.zBlendIndices = pb.vec4().attrib('blendIndices');\r\n scope.$inputs.zBlendWeights = pb.vec4().attrib('blendWeights');\r\n ShaderHelper.prepareSkinAnimation(scope);\r\n }\r\n if (\r\n this.drawContext.device.type === 'webgl' &&\r\n this.drawContext.materialFlags &\r\n (MaterialVaryingFlags.SKIN_ANIMATION | MaterialVaryingFlags.MORPH_ANIMATION)\r\n ) {\r\n scope.$inputs.zFakeVertexID = pb.float().attrib('texCoord7');\r\n }\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n scope.$outputs.zObjectColor = this.getInstancedUniform(scope, MeshMaterial.OBJECT_COLOR_UNIFORM);\r\n }\r\n if (this.isTransparentPass(this.pass, this.drawContext)) {\r\n scope.$outputs.zOpacity = this.getInstancedUniform(scope, MeshMaterial.OPACITY_UNIFORM);\r\n }\r\n } else {\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n scope.$outputs.zObjectColor = scope[ShaderHelper.getObjectColorUniformName()];\r\n }\r\n }\r\n }\r\n /**\r\n * Fragment shader hook.\r\n * Declares pass-dependent uniforms (e.g., opacity, objectColor, alphaCutoff).\r\n * Override to implement per-fragment logic, and call `outputFragmentColor` to finalize writes.\r\n *\r\n * @param scope - Fragment shader function scope.\r\n * @returns void\r\n */\r\n fragmentShader(scope: PBFunctionScope) {\r\n const pb = scope.$builder;\r\n ShaderHelper.prepareFragmentShader(pb, this.drawContext);\r\n if (this.usesAlphaCutoff(this.drawContext, this.pass)) {\r\n scope.zAlphaCutoff = pb.float().uniform(2);\r\n }\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n if (\r\n this.isTransparentPass(this.pass, this.drawContext) &&\r\n !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n scope.zOpacity = pb.float().uniform(2);\r\n }\r\n }\r\n }\r\n /**\r\n * Build and return the GPU program for this pass.\r\n * Wires `vertexShader` and `fragmentShader`; sets up pass-dependent outputs (OIT, SSR, motion vectors, distance/object color).\r\n *\r\n * @param pb - Program builder.\r\n * @param ctx - Current draw context.\r\n * @param pass - Material pass index.\r\n * @returns The created `GPUProgram`.\r\n * @internal\r\n */\r\n protected _createProgram(pb: ProgramBuilder, ctx: DrawContext, pass: number) {\r\n const that = this;\r\n this._ctx = ctx;\r\n this._materialPass = pass;\r\n const program = pb.buildRenderProgram({\r\n vertex(pb) {\r\n pb.main(function () {\r\n that.vertexShader(this);\r\n });\r\n },\r\n fragment(pb) {\r\n if (that.drawContext.oit) {\r\n that.drawContext.oit.setupFragmentOutput(this);\r\n } else if (that.isMotionVectorOnlyPass(ctx)) {\r\n // One attachment, so the motion vector has to be the first output\r\n // declared rather than the second - the framebuffer this pass runs\r\n // against carries no linear depth target to write.\r\n this.$outputs.zMotionVector = pb.vec4();\r\n this.zTAAStrength = pb.float().uniform(2);\r\n } else {\r\n this.$outputs.zFragmentOutput = pb.vec4();\r\n if (ctx.materialFlags & MaterialVaryingFlags.SCENE_STORE_ROUGHNESS) {\r\n this.$outputs.zSSRRoughness = pb.vec4();\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SCENE_STORE_NORMAL) {\r\n this.$outputs.zSSRNormal = pb.vec4();\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE) {\r\n this.$outputs.zSSSProfile = pb.vec4();\r\n this.$outputs.zSSSParams = pb.vec4();\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE) {\r\n this.$outputs.zSSSDiffuse = pb.vec4();\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION) {\r\n this.$outputs.zSSSTransmission = pb.vec4();\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SKIN_SSS_STORE) {\r\n this.$outputs.zSkinSSS = pb.vec4();\r\n }\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH && ctx.motionVectors) {\r\n this.$outputs.zMotionVector = pb.vec4();\r\n this.zTAAStrength = pb.float().uniform(2);\r\n }\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n this.$outputs.zDistance = pb.vec4();\r\n }\r\n }\r\n pb.main(function () {\r\n that.fragmentShader(this);\r\n });\r\n }\r\n });\r\n return program;\r\n }\r\n /**\r\n * Centralized final color write and per-pass output composition.\r\n *\r\n * Behavior by pass:\r\n * - LIGHT: clipping, alpha handling, optional OIT integration, fog application, color output encoding.\r\n * - DEPTH: encoded depth; optional motion vectors (TAA enabled/disabled handling).\r\n * - OBJECT_COLOR: object color and distance output (linear depth or world-pos + distance).\r\n * - SHADOWMAP: writes shadow depth via light’s shadow implementation.\r\n *\r\n * Also writes SSR roughness/normal buffers when requested via material flags.\r\n *\r\n * @param scope - Inside-function shader scope.\r\n * @param worldPos - Fragment world-space position expression.\r\n * @param color - Lit fragment color expression; may be undefined for depth-only paths.\r\n * @param ssrRoughness - Optional SSR roughness output expression.\r\n * @param ssrNormal - Optional SSR normal output expression.\r\n * @param sssProfile - Optional SSS profile output expression.\r\n * @param sssParams - Optional SSS packed params output expression.\r\n * @param sssProfileEnabled - True only when this material should write SSS profile data.\r\n * @param sssDiffuse - Optional diffuse-only lighting color for SSS composition.\r\n * @param sssTransmission - Optional thin-shell transmission lighting color for SSS composition.\r\n * @returns void\r\n */\r\n outputFragmentColor(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n color: Nullable<PBShaderExp>,\r\n ssrRoughness?: PBShaderExp,\r\n ssrNormal?: PBShaderExp,\r\n sssProfile?: PBShaderExp,\r\n sssParams?: PBShaderExp,\r\n sssDiffuse?: PBShaderExp,\r\n sssTransmission?: PBShaderExp,\r\n sssProfileEnabled = false,\r\n skinSSS?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_outputFragmentColor';\r\n const alphaClipFuncName = 'Z_shouldDiscardAlpha';\r\n pb.func(alphaClipFuncName, [pb.float('alpha'), pb.float('cutoff')], function () {\r\n const shadowMaskedCaster = that.useTransparentShadowCaster(that.drawContext, that.pass);\r\n const shadowAlphaClip =\r\n pb.getDevice().type !== 'webgl' &&\r\n that.drawContext.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP &&\r\n (shadowMaskedCaster || !that.isTransparentPass(that.pass, that.drawContext));\r\n if (shadowAlphaClip) {\r\n if (!pb.getGlobalScope().Z_shadowDither4x4) {\r\n pb.getGlobalScope().Z_shadowDither4x4 = [\r\n pb.float(0 / 16),\r\n pb.float(8 / 16),\r\n pb.float(2 / 16),\r\n pb.float(10 / 16),\r\n pb.float(12 / 16),\r\n pb.float(4 / 16),\r\n pb.float(14 / 16),\r\n pb.float(6 / 16),\r\n pb.float(3 / 16),\r\n pb.float(11 / 16),\r\n pb.float(1 / 16),\r\n pb.float(9 / 16),\r\n pb.float(15 / 16),\r\n pb.float(7 / 16),\r\n pb.float(13 / 16),\r\n pb.float(5 / 16)\r\n ];\r\n }\r\n this.$l.alphaWidth = pb.max(pb.fwidth(this.alpha), 1e-4);\r\n this.$l.shadowCutoff = pb.max(pb.sub(this.cutoff, pb.min(0.18, pb.mul(this.alphaWidth, 2))), 0);\r\n this.$l.coverage = pb.clamp(\r\n pb.add(pb.div(pb.sub(this.alpha, this.shadowCutoff), this.alphaWidth), 0.5),\r\n 0,\r\n 1\r\n );\r\n this.$l.pixel = pb.mod(pb.floor(this.$builtins.fragCoord.xy), pb.vec2(4));\r\n // Scramble the ordered dither with shadow depth so overlapping masked layers\r\n // at the same texel do not all discard the exact same coverage bits.\r\n this.$l.layerJitter = pb.floor(pb.mul(pb.fract(pb.mul(this.$builtins.fragCoord.z, 131.37)), 16));\r\n this.$l.ditherIndex = pb.mod(\r\n pb.add(pb.add(pb.mul(this.pixel.y, 4), this.pixel.x), this.layerJitter),\r\n 16\r\n );\r\n this.$l.noise = this.Z_shadowDither4x4.at(pb.uint(this.ditherIndex));\r\n this.$return(pb.lessThan(this.coverage, this.noise));\r\n } else if (\r\n that.featureUsed<boolean>(FEATURE_ALPHADITHER) &&\r\n !that.isTransparentPass(that.pass, that.drawContext)\r\n ) {\r\n // Interleaved gradient noise rather than the fract(sin(dot(...)))\r\n // hash it replaced. That hash feeds its dot product straight into\r\n // sin(), and at 1080p the fragCoord term alone reaches ~1e5 - past\r\n // the range where GPU sin() stays accurate - so it degraded into a\r\n // fixed hatch pattern that TAA then faithfully preserved instead of\r\n // averaging away. IGN wraps its accumulator in fract() before the\r\n // magnifying multiply, so it stays well conditioned at any\r\n // resolution, and it is what UE5 uses for exactly this job.\r\n //\r\n // The frame index is wrapped for the same reason: it is unbounded\r\n // (device.frameInfo.frameCounter), and left raw it would walk the\r\n // noise input back out of that well-conditioned range within a\r\n // minute. 64 matches the wrap the eye material already applies.\r\n this.$l.frameId = pb.mod(pb.float(ShaderHelper.getFramestamp(this)), 64);\r\n // Decorrelate overlapping layers by depth, for the same reason the\r\n // shadow dither above does it: the noise is a function of the pixel,\r\n // so without this every fragment stacked on one texel draws the same\r\n // value and they all pass or all fail together. That collapses the\r\n // visible coverage of N layers from 1-(1-a)^N down to a - on dense\r\n // hair seen from far enough that each strand is thin, an order of\r\n // magnitude too dark. The 131.37 scale matches the shadow path.\r\n this.$l.layerJitter = pb.fract(pb.mul(this.$builtins.fragCoord.z, 131.37));\r\n this.$l.phase = pb.add(\r\n this.$builtins.fragCoord.xy,\r\n pb.add(pb.mul(pb.vec2(47, 17), 0.695, this.frameId), pb.mul(pb.vec2(13.7, 29.3), this.layerJitter))\r\n );\r\n this.$l.noise = interleavedGradientNoise(this, this.phase);\r\n this.$l.coverage = pb.clamp(\r\n pb.div(pb.sub(this.alpha, this.cutoff), pb.max(pb.sub(1, this.cutoff), 1e-4)),\r\n 0,\r\n 1\r\n );\r\n this.$return(pb.lessThan(this.coverage, this.noise));\r\n } else {\r\n this.$return(pb.lessThan(this.alpha, this.cutoff));\r\n }\r\n });\r\n pb.func(funcName, color ? [pb.vec3('worldPos'), pb.vec4('color')] : [pb.vec3('worldPos')], function () {\r\n this.$l.outColor = color ? this.color : pb.vec4();\r\n if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n let output = true;\r\n if (!that.isTransparentPass(that.pass, that.drawContext) && !that.alphaToCoverage) {\r\n this.outColor.a = 1;\r\n } else if (that.isTransparentPass(that.pass, that.drawContext)) {\r\n const opacity =\r\n that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? this.$inputs.zOpacity\r\n : this.zOpacity;\r\n this.outColor.a = pb.mul(this.outColor.a, opacity);\r\n }\r\n if (that.isTransparentPass(that.pass, that.drawContext)) {\r\n if (this.zAlphaCutoff) {\r\n this.$if(pb.getGlobalScope()[alphaClipFuncName](this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n if (\r\n that.drawContext.oit &&\r\n that.drawContext.lightBlending &&\r\n !(that.drawContext.oit.wantsAdditiveLightPassAlpha?.() ?? false)\r\n ) {\r\n // For OIT with multi-light decomposition, keep additive light passes\r\n // color-only to avoid duplicating per-fragment transmittance.\r\n this.outColor = pb.vec4(this.outColor.rgb, 0);\r\n } else if (!that.drawContext.oit || that.drawContext.oit.wantsPremultipliedAlpha()) {\r\n this.outColor = pb.vec4(\r\n pb.mul(this.outColor.rgb, this.outColor.a),\r\n that.featureUsed<BlendMode>(FEATURE_ALPHABLEND) === 'additive' ? 0 : this.outColor.a\r\n );\r\n }\r\n output =\r\n !that.drawContext.oit ||\r\n !that.drawContext.oit.outputFragmentColor(this, this.outColor, that.drawContext);\r\n }\r\n if (output) {\r\n ShaderHelper.applyFog(this, this.worldPos, this.outColor, that.drawContext);\r\n this.$outputs.zFragmentOutput = ShaderHelper.encodeColorOutput(this, this.outColor);\r\n }\r\n } else if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_DEPTH) {\r\n if (color) {\r\n if (this.zAlphaCutoff) {\r\n this.$if(pb.getGlobalScope()[alphaClipFuncName](this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n }\r\n const depthPass = that.drawContext.renderPass! as DepthPass;\r\n if (depthPass.motionVectorOnly) {\r\n // The whole transparent queue is submitted to this pass; a material\r\n // that has not opted in leaves the velocity underneath it alone,\r\n // which for a see-through surface is the right answer.\r\n if (!that.featureUsed(FEATURE_TRANSPARENT_MOTION_VECTOR)) {\r\n pb.discard();\r\n }\r\n } else {\r\n this.$l.depth = ShaderHelper.nonLinearDepthToLinearNormalized(this, this.$builtins.fragCoord.z);\r\n if (depthPass.encodeDepth) {\r\n this.$outputs.zFragmentOutput = encodeNormalizedFloatToRGBA(this, this.depth);\r\n } else if (depthPass.renderBackface) {\r\n this.$outputs.zFragmentOutput = pb.vec4(0, this.depth, 0, 1);\r\n } else {\r\n this.$outputs.zFragmentOutput = pb.vec4(this.depth, 0, 0, 1);\r\n }\r\n }\r\n if (that.drawContext.motionVectors) {\r\n if (that.featureUsed(FEATURE_DISABLE_TAA)) {\r\n this.$outputs.zMotionVector = pb.vec4(6e4, 6e4, 1, 1);\r\n } else {\r\n if (this.$inputs.zMotionVectorPosCurrent && this.$inputs.zMotionVectorPosPrev) {\r\n this.$outputs.zMotionVector = pb.vec4(\r\n pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.zMotionVectorPosCurrent.xy, this.$inputs.zMotionVectorPosCurrent.w),\r\n pb.div(this.$inputs.zMotionVectorPosPrev.xy, this.$inputs.zMotionVectorPosPrev.w)\r\n ),\r\n 0.5\r\n ),\r\n this.zTAAStrength,\r\n 1\r\n );\r\n } else {\r\n this.$outputs.zMotionVector = pb.vec4(0, 0, 1, 1);\r\n }\r\n }\r\n }\r\n } else if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n if (color) {\r\n this.$if(pb.getGlobalScope()[alphaClipFuncName](this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n this.$outputs.zFragmentOutput = scope.$inputs.zObjectColor;\r\n if (that.drawContext.device.type === 'webgl') {\r\n this.$l.linearDepth = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.$builtins.fragCoord.z\r\n );\r\n this.$outputs.zDistance = encodeNormalizedFloatToRGBA(this, this.linearDepth);\r\n } else {\r\n this.$outputs.zDistance = pb.vec4(\r\n this.worldPos,\r\n pb.distance(ShaderHelper.getCameraPosition(this), this.worldPos)\r\n );\r\n }\r\n } /*if (that.drawContext.renderPass.type === RENDER_PASS_TYPE_SHADOWMAP)*/ else {\r\n const shadowMapParams = that.drawContext.shadowMapInfo!.get(\r\n (that.drawContext.renderPass as ShadowMapPass).light!\r\n )!;\r\n // Coverage-accumulating implementations read the alpha rather than test\r\n // it, and clipping first would consume the very quantity they integrate.\r\n if (color && shadowMapParams.impl!.clipsCasterAlpha(shadowMapParams)) {\r\n this.$if(pb.getGlobalScope()[alphaClipFuncName](this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n this.$outputs.zFragmentOutput = shadowMapParams.impl!.computeShadowMapDepth(\r\n shadowMapParams,\r\n this,\r\n this.worldPos,\r\n // Null, not a zero alpha, when no colour was computed: `outColor` is a\r\n // zero vector in that case, and a technique that reads alpha as coverage\r\n // would take it for a fully transparent fragment.\r\n color ? this.outColor.a : null\r\n );\r\n }\r\n });\r\n if (color) {\r\n pb.getGlobalScope()[funcName](worldPos, color);\r\n } else {\r\n pb.getGlobalScope()[funcName](worldPos);\r\n }\r\n const writeSceneRoughness = !!(\r\n that.drawContext.materialFlags & MaterialVaryingFlags.SCENE_STORE_ROUGHNESS\r\n );\r\n const writeSceneNormal = !!(that.drawContext.materialFlags & MaterialVaryingFlags.SCENE_STORE_NORMAL);\r\n if (writeSceneRoughness || writeSceneNormal) {\r\n // Transparent/blended passes (and materials that depend on scene color like transmission)\r\n // do not have a stable depth match for SSR, so force-disable SSR contribution on those pixels.\r\n const disableSSR =\r\n that.isTransparentPass(that.pass, that.drawContext) &&\r\n that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT;\r\n const disableSceneColorSSR =\r\n that.needSceneColor() && that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT;\r\n if (disableSSR || disableSceneColorSSR) {\r\n if (writeSceneRoughness) {\r\n scope.$outputs.zSSRRoughness = pb.vec4(0, 0, 0, 1);\r\n }\r\n if (writeSceneNormal) {\r\n scope.$outputs.zSSRNormal = pb.vec4(0);\r\n }\r\n } else {\r\n if (writeSceneRoughness) {\r\n scope.$outputs.zSSRRoughness = ssrRoughness ?? pb.vec4(1, 1, 0, 1);\r\n }\r\n if (writeSceneNormal) {\r\n scope.$outputs.zSSRNormal = ssrNormal\r\n ? ssrNormal\r\n : scope.$inputs.wNorm\r\n ? pb.vec4(pb.add(pb.mul(pb.normalize(scope.$inputs.wNorm), 0.5), pb.vec3(0.5)), 1)\r\n : pb.vec4(0.5, 0.5, 1, 1);\r\n }\r\n }\r\n }\r\n if (that.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE) {\r\n const disableSSS =\r\n that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n ((that.isTransparentPass(that.pass, that.drawContext) && !that.alphaToCoverage) ||\r\n that.needSceneColor());\r\n const writeSSSProfile = sssProfileEnabled && !disableSSS;\r\n scope.$outputs.zSSSProfile = writeSSSProfile ? (sssProfile ?? pb.vec4(0)) : pb.vec4(0);\r\n scope.$outputs.zSSSParams = writeSSSProfile ? (sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n }\r\n if (that.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE) {\r\n const disableSSS =\r\n that.drawContext.renderPass!.type !== RENDER_PASS_TYPE_LIGHT ||\r\n (that.isTransparentPass(that.pass, that.drawContext) && !that.alphaToCoverage) ||\r\n that.needSceneColor();\r\n scope.$outputs.zSSSDiffuse = disableSSS ? pb.vec4(0) : (sssDiffuse ?? pb.vec4(0));\r\n }\r\n if (that.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION) {\r\n const disableSSS =\r\n that.drawContext.renderPass!.type !== RENDER_PASS_TYPE_LIGHT ||\r\n (that.isTransparentPass(that.pass, that.drawContext) && !that.alphaToCoverage) ||\r\n that.needSceneColor();\r\n scope.$outputs.zSSSTransmission = disableSSS ? pb.vec4(0) : (sssTransmission ?? pb.vec4(0));\r\n }\r\n if (that.drawContext.materialFlags & MaterialVaryingFlags.SKIN_SSS_STORE) {\r\n const disableSkinSSS =\r\n that.drawContext.renderPass!.type !== RENDER_PASS_TYPE_LIGHT ||\r\n (that.isTransparentPass(that.pass, that.drawContext) && !that.alphaToCoverage) ||\r\n that.needSceneColor();\r\n scope.$outputs.zSkinSSS = disableSkinSSS ? pb.vec4(0) : (skinSSS ?? pb.vec4(0));\r\n }\r\n }\r\n}\r\nFEATURE_ALPHATEST = MeshMaterial.defineFeature();\r\nFEATURE_ALPHABLEND = MeshMaterial.defineFeature();\r\nFEATURE_CULLMODE = MeshMaterial.defineFeature();\r\nFEATURE_ALPHATOCOVERAGE = MeshMaterial.defineFeature();\r\nFEATURE_ALPHADITHER = MeshMaterial.defineFeature();\r\nFEATURE_DISABLE_TAA = MeshMaterial.defineFeature();\r\nFEATURE_TRANSPARENT_MOTION_VECTOR = MeshMaterial.defineFeature();\r\n"],"names":["applyMaterialMixins","target","mixins","applyMixins","FEATURE_ALPHATEST","FEATURE_ALPHABLEND","FEATURE_CULLMODE","FEATURE_ALPHATOCOVERAGE","FEATURE_ALPHADITHER","FEATURE_DISABLE_TAA","FEATURE_TRANSPARENT_MOTION_VECTOR","MeshMaterial","Material","SHADER_VERSION","INSTANCE_UNIFORMS","NEXT_FEATURE_INDEX","OBJECT_COLOR_UNIFORM","defineInstanceUniform","OPACITY_UNIFORM","_featureStates","_alphaCutoff","_alphaDither","_blendMode","_transparentShadowCaster","_shadowAlphaCutoff","_cullMode","_opacity","_taaStrength","_objectColor","Vector4","one","_ctx","_materialPass","useFeature","clone","other","copyFrom","alphaCutoff","alphaDither","blendMode","transparentShadowCaster","shadowAlphaCutoff","cullMode","opacity","objectColor","apply","ctx","uniformChanged","optionChanged","defineFeature","val","getNumComponents","type","prop","name","findIndex","Error","numComponents","index","length","offset","lastUniform","finalOffset","i","offset1","numComps1","offset2","slice","splice","getInstancedUniform","scope","uniformIndex","pb","$builder","instanceID","$builtins","instanceIndex","uniformName","ShaderHelper","getInstanceDataUniformName","strideName","getInstanceDataStrideUniformName","offsetName","getInstanceDataOffsetUniformName","vecIndex","vecOffset","u","at","add","mul","MATERIAL_INSTANCE_DATA_OFFSET","m","join","getInstancedUniforms","createInstance","$isInstance","coreMaterial","isWebGL1","getDevice","supportInstancing","instanceUniforms","uniformsHolder","Float32Array","instance","that","DRef","disposed","isBatchable","dispose","$instanceUniforms","Object","defineProperty","get","value","Number","set","RenderBundleWrapper","materialUniformsChanged","Vector2","x","y","Vector3","z","w","setPrototypeOf","getEngine","resourceManager","trackMaterialReference","getAssetId","drawContext","pass","TAADisabled","featureUsed","transparentMotionVector","TAAStrength","alphaToCoverage","supportLighting","getEffectiveBlendMode","useTransparentShadowCasterForPass","renderPass","RENDER_PASS_TYPE_DEPTH","isMotionVectorOnlyPass","motionVectorOnly","getActiveAlphaCutoff","useTransparentShadowCaster","_pass","renderPassType","RENDER_PASS_TYPE_SHADOWMAP","usesAlphaCutoff","needFragmentColorInput","needFragmentColor","stateSet","isObjectColorPass","RENDER_PASS_TYPE_OBJECT_COLOR","blending","lightBlending","a2c","ztestEq","RENDER_PASS_TYPE_LIGHT","queue","QUEUE_OPAQUE","depthPrepassAttachment","sceneColorTexture","defaultBlendingState","useDepthState","enableTest","enableWrite","forceCullMode","useRasterizerState","defaultRasterizerState","defaultColorState","defaultStencilState","blendingState","useBlendingState","enable","setBlendFuncAlpha","setBlendEquation","setBlendFuncRGB","enableAlphaToCoverage","setCompareFunc","enabled","defaultDepthState","forceColorState","useColorState","oit","setRenderStates","shadowMapParams","shadowMapInfo","light","impl","setCasterRenderStates","applyUniformValues","bindGroup","setValue","isTransparentPass","materialFlags","MaterialVaryingFlags","INSTANCING","motionVectors","getQueueType","QUEUE_TRANSPARENT","createProgram","ProgramBuilder","device","emulateDepthClamp","depthClampEnabled","_createProgram","feature","use","map","undefined","isMaterialTextureEnabled","_name","vertexShader","prepareVertexShader","SKIN_ANIMATION","$inputs","zBlendIndices","vec4","attrib","zBlendWeights","prepareSkinAnimation","MORPH_ANIMATION","zFakeVertexID","float","$outputs","zObjectColor","zOpacity","getObjectColorUniformName","fragmentShader","prepareFragmentShader","zAlphaCutoff","uniform","program","buildRenderProgram","vertex","main","fragment","setupFragmentOutput","zMotionVector","zTAAStrength","zFragmentOutput","SCENE_STORE_ROUGHNESS","zSSRRoughness","SCENE_STORE_NORMAL","zSSRNormal","SSS_STORE_PROFILE","zSSSProfile","zSSSParams","SSS_STORE_DIFFUSE","zSSSDiffuse","SSS_STORE_TRANSMISSION","zSSSTransmission","SKIN_SSS_STORE","zSkinSSS","zDistance","outputFragmentColor","worldPos","color","ssrRoughness","ssrNormal","sssProfile","sssParams","sssDiffuse","sssTransmission","sssProfileEnabled","skinSSS","funcName","alphaClipFuncName","func","shadowMaskedCaster","shadowAlphaClip","getGlobalScope","Z_shadowDither4x4","$l","alphaWidth","max","fwidth","alpha","shadowCutoff","sub","cutoff","min","coverage","clamp","div","pixel","mod","floor","fragCoord","xy","vec2","layerJitter","fract","ditherIndex","noise","uint","$return","lessThan","frameId","getFramestamp","phase","interleavedGradientNoise","vec3","outColor","output","a","$if","discard","wantsAdditiveLightPassAlpha","rgb","wantsPremultipliedAlpha","applyFog","encodeColorOutput","depthPass","depth","nonLinearDepthToLinearNormalized","encodeDepth","encodeNormalizedFloatToRGBA","renderBackface","zMotionVectorPosCurrent","zMotionVectorPosPrev","linearDepth","distance","getCameraPosition","clipsCasterAlpha","computeShadowMapDepth","writeSceneRoughness","writeSceneNormal","disableSSR","disableSceneColorSSR","needSceneColor","wNorm","normalize","disableSSS","writeSSSProfile","disableSkinSSS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"meshmaterial.js","sources":["../../src/material/meshmaterial.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n FaceMode,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport { ProgramBuilder } from '@zephyr3d/device';\r\nimport {\r\n MaterialVaryingFlags,\r\n QUEUE_OPAQUE,\r\n QUEUE_TRANSPARENT,\r\n RENDER_PASS_TYPE_DEPTH,\r\n RENDER_PASS_TYPE_LIGHT,\r\n RENDER_PASS_TYPE_OBJECT_COLOR,\r\n RENDER_PASS_TYPE_SHADOWMAP,\r\n RENDER_PASS_TYPE_VOXELIZE\r\n} from '../values';\r\nimport { Material } from './material';\r\nimport type { DepthPass } from '../render';\r\nimport { type DrawContext, type ShadowMapPass } from '../render';\r\nimport { encodeNormalizedFloatToRGBA } from '../shaders/misc';\r\nimport { interleavedGradientNoise } from '../shaders/noise';\r\nimport { storeVoxelMaterial } from '../shaders/gi';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Clonable, Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Vector2, Vector3, Vector4, applyMixins, DRef } from '@zephyr3d/base';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport { getEngine } from '../app/api';\r\n\r\n/**\r\n * Blending mode for mesh materials.\r\n *\r\n * - `none`: No blending (opaque).\r\n * - `blend`: Standard alpha blending (srcAlpha, 1 - srcAlpha).\r\n * - `additive`: Additive blending (1, 1), commonly for glow/FX.\r\n *\r\n * May be combined with alpha-to-coverage and alpha test.\r\n * @public\r\n */\r\nexport type BlendMode = 'none' | 'blend' | 'additive';\r\n\r\n/**\r\n * Extracts the return type of a mixin function.\r\n * @public\r\n */\r\nexport type ExtractMixinReturnType<M> = M extends (target: infer A) => infer R ? R : never;\r\n\r\n/**\r\n * Produces the intersection type of multiple mixins’ return types.\r\n * @public\r\n */\r\nexport type ExtractMixinType<M> = M extends [infer First]\r\n ? ExtractMixinReturnType<First>\r\n : M extends [infer First, ...infer Rest]\r\n ? ExtractMixinReturnType<First> & ExtractMixinType<[...Rest]>\r\n : never;\r\n\r\n/**\r\n * Apply material mixins to a target material class.\r\n *\r\n * Useful for composing optional capabilities (e.g., base color, normal map, PBR terms).\r\n *\r\n * @param target - The material class (constructor or prototype).\r\n * @param mixins - One or more mixin functions.\r\n * @returns The target class augmented with the mixins (intersection type).\r\n *\r\n * @example\r\n * class MyMaterial extends MeshMaterial \\{\\}\r\n * const Mixed = applyMaterialMixins(MyMaterial, WithBaseColor, WithNormalMap);\r\n * const m = new Mixed();\r\n * @public\r\n */\r\nexport function applyMaterialMixins<M extends ((target: any) => any)[], T>(target: T, ...mixins: M) {\r\n return applyMixins(target, ...mixins);\r\n}\r\n\r\nlet FEATURE_ALPHATEST = 0;\r\nlet FEATURE_ALPHABLEND = 0;\r\nlet FEATURE_CULLMODE = 0;\r\nlet FEATURE_ALPHATOCOVERAGE = 0;\r\nlet FEATURE_ALPHADITHER = 0;\r\nlet FEATURE_DISABLE_TAA = 0;\r\nlet FEATURE_TRANSPARENT_MOTION_VECTOR = 0;\r\n\r\n/**\r\n * Instance uniform data type\r\n * @public\r\n */\r\nexport type InstanceUniformType = 'float' | 'vec2' | 'vec3' | 'vec4' | 'rgb' | 'rgba';\r\n\r\n/**\r\n * Base class for mesh materials.\r\n *\r\n * Key responsibilities:\r\n * - Defines feature-based shader variants (alpha test, blending, alpha-to-coverage, TAA toggle, etc.).\r\n * - Provides a material instancing mechanism (per-instance uniforms via a shared core material).\r\n * - Implements the base shader scaffolding for multiple render passes (LIGHT, DEPTH, OBJECT_COLOR, SHADOWMAP).\r\n * - Updates render states depending on pass and features (blending, depth, culling).\r\n * - Submits material uniforms and cooperates with OIT/TAA/SSR/motion vectors.\r\n *\r\n * Variant system:\r\n * - Features are stored in `_featureStates` and hashed into `_createHash()`.\r\n * - Changing features calls `useFeature(...)` which triggers `optionChanged(true)` to rebuild programs.\r\n *\r\n * Instancing:\r\n * - `defineInstanceUniform` registers per-instance fields with packed layout.\r\n * - `createInstance()` returns a lightweight instance that shares the core’s GPU programs and updates\r\n * instance uniform buffer only. This improves batching/instancing support.\r\n *\r\n * Shader hooks:\r\n * - `vertexShader(scope)` and `fragmentShader(scope)` provide per-pass hook points to implement the\r\n * material’s vertex/fragment logic. The base class wires up common I/O (skin, morph, instancing).\r\n * - `outputFragmentColor(...)` centralizes final color output across passes, handling OIT and alpha ops.\r\n *\r\n * Render states and queues:\r\n * - `updateRenderStates(...)` sets depth/blend/cull states based on blending, alpha-to-coverage,\r\n * depth equality optimizations, pass type, and optional OIT overrides.\r\n * - `getQueueType()` chooses between opaque and transparent queues.\r\n *\r\n * Extending:\r\n * - Override `vertexShader`, `fragmentShader`, and optionally `outputFragmentColor`.\r\n * - Override `supportLighting`, `isTransparentPass`, `needFragmentColor`, etc., as needed.\r\n * - Use `uniformChanged()` when changing uniform-only values that do not alter shader variants.\r\n * - Use `useFeature()` when toggling options that affect shader variants.\r\n *\r\n * @public\r\n */\r\nexport class MeshMaterial extends Material implements Clonable<MeshMaterial> {\r\n private static readonly SHADER_VERSION = 3;\r\n /**\r\n * Registered instance uniforms for this material class.\r\n *\r\n * Each entry defines property name, type, and packed offset (float-aligned).\r\n * @internal\r\n */\r\n static INSTANCE_UNIFORMS: { prop: string; type: InstanceUniformType; offset: number; name: string }[] = [];\r\n /**\r\n * Next free feature index for subclasses to define their own feature toggles.\r\n * @internal\r\n */\r\n static NEXT_FEATURE_INDEX = 3;\r\n /**\r\n * Built-in per-instance uniform: object color (rgba), used for GPU picking/object-ID pass.\r\n * @internal\r\n */\r\n static OBJECT_COLOR_UNIFORM = this.defineInstanceUniform('objectColor', 'rgba');\r\n /**\r\n * Built-in per-instance uniform: opacity (float), used in transparent passes.\r\n * @internal\r\n */\r\n static OPACITY_UNIFORM = this.defineInstanceUniform('opacity', 'float', 'Opacity');\r\n /** @internal Feature state array (indexed by feature indices). */\r\n private _featureStates: unknown[];\r\n /** @internal Alpha test cutoff in [0, 1]. */\r\n private _alphaCutoff: number;\r\n /** @internal Whether alpha-test uses temporal dither coverage. */\r\n private _alphaDither: boolean;\r\n /** @internal Blending mode. */\r\n private _blendMode: BlendMode;\r\n /** @internal Whether transparent materials cast shadow through a masked shadow-only path. */\r\n private _transparentShadowCaster: boolean;\r\n /** @internal Alpha cutoff used by the shadow-only masked caster path. */\r\n private _shadowAlphaCutoff: number;\r\n /** @internal Face culling mode. */\r\n private _cullMode: FaceMode;\r\n /** @internal Opacity in [0, 1]. */\r\n private _opacity: number;\r\n /**\r\n * @internal TAA strength in [0, 1], where higher value typically means stronger accumulation\r\n * (here used inversely when mapping to motion vector output).\r\n */\r\n private _taaStrength: number;\r\n /** @internal Per-object color for object picking pass. */\r\n private _objectColor: Immutable<Vector4>;\r\n /** @internal Last draw context used for shader creation. */\r\n private _ctx: Nullable<DrawContext>;\r\n /** @internal Current material pass index during program building. */\r\n private _materialPass: number;\r\n /**\r\n * Create a MeshMaterial with default opaque settings.\r\n *\r\n * Defaults:\r\n * - `blendMode = 'none'`\r\n * - `cullMode = 'back'`\r\n * - `opacity = 1`\r\n * - `alphaCutoff = 0`\r\n * - `taaStrength = 1 - 1/16`\r\n */\r\n constructor() {\r\n super();\r\n this._featureStates = [];\r\n this._alphaCutoff = 0;\r\n this._alphaDither = false;\r\n this._blendMode = 'none';\r\n this._transparentShadowCaster = false;\r\n this._shadowAlphaCutoff = 0.5;\r\n this._cullMode = 'back';\r\n this._opacity = 1;\r\n this._taaStrength = 1 - 1 / 16;\r\n this._objectColor = Vector4.one();\r\n this._ctx = null;\r\n this._materialPass = -1;\r\n this.useFeature(FEATURE_ALPHABLEND, this._blendMode);\r\n this.useFeature(FEATURE_ALPHADITHER, this._alphaDither);\r\n this.useFeature(FEATURE_CULLMODE, this._cullMode);\r\n }\r\n /**\r\n * Create a shallow clone of this material.\r\n * Subclasses should override to copy custom fields.\r\n */\r\n clone() {\r\n const other = new MeshMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n /**\r\n * Copy common MeshMaterial properties from another material.\r\n * Call `super.copyFrom(other)` first when overriding in subclasses.\r\n *\r\n * @param other - Source material.\r\n */\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n this.alphaCutoff = other.alphaCutoff;\r\n this.alphaDither = other.alphaDither;\r\n this.blendMode = other.blendMode;\r\n this.transparentShadowCaster = other.transparentShadowCaster;\r\n this.shadowAlphaCutoff = other.shadowAlphaCutoff;\r\n this.cullMode = other.cullMode;\r\n this.opacity = other.opacity;\r\n this.objectColor = other.objectColor;\r\n }\r\n /**\r\n * Capture the active draw context for both cached and freshly-built program paths.\r\n *\r\n * The shader-building hooks access `this.drawContext`, but uniform application may also\r\n * consult it on subsequent frames when the GPU program is reused from cache. Updating it\r\n * here keeps material mixins in sync even when `createProgram()` is skipped.\r\n *\r\n * @param ctx - Current draw context.\r\n * @returns Whether material preparation succeeded.\r\n */\r\n apply(ctx: DrawContext) {\r\n this._ctx = ctx;\r\n this._materialPass = -1;\r\n return super.apply(ctx);\r\n }\r\n /**\r\n * Mark uniform-only changes so uniforms are re-uploaded on next apply, without\r\n * rebuilding shader programs.\r\n */\r\n uniformChanged() {\r\n this.optionChanged(false);\r\n }\r\n /**\r\n * Define a new feature bit/index for shader variants.\r\n * Subclasses may use this to add their own switches.\r\n */\r\n static defineFeature() {\r\n const val = this.NEXT_FEATURE_INDEX;\r\n this.NEXT_FEATURE_INDEX++;\r\n return val;\r\n }\r\n /** @internal Helper: get number of scalar components for a given instance uniform type. */\r\n private static getNumComponents(type: InstanceUniformType) {\r\n if (type === 'float') {\r\n return 1;\r\n }\r\n if (type === 'vec2') {\r\n return 2;\r\n }\r\n if (type === 'rgb' || type === 'vec3') {\r\n return 3;\r\n }\r\n if (type === 'rgba' || type === 'vec4') {\r\n return 4;\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Define a per-instance uniform for this class.\r\n *\r\n * Returns a compact index encoding the vector index and component offset, which can be\r\n * used in shader code via `getInstancedUniform(...)`.\r\n *\r\n * @param prop - Property name exposed on instances.\r\n * @param type - Uniform data type.\r\n * @returns Encoded index for use in `getInstancedUniform`.\r\n *\r\n * @throws If the property is already defined or type is invalid.\r\n */\r\n static defineInstanceUniform(prop: string, type: InstanceUniformType, name = '') {\r\n if (this.INSTANCE_UNIFORMS.findIndex((val) => val.prop === prop) >= 0) {\r\n throw new Error(`${this.name}.defineInstanceUniform(): ${prop} was already defined`);\r\n }\r\n const numComponents = this.getNumComponents(type);\r\n if (numComponents === 0) {\r\n throw new Error(`${this.name}.defineInstanceUniform(): invalid uniform type ${type}`);\r\n }\r\n let index = this.INSTANCE_UNIFORMS.length;\r\n let offset = 0;\r\n if (this.INSTANCE_UNIFORMS.length > 0) {\r\n const lastUniform = this.INSTANCE_UNIFORMS[this.INSTANCE_UNIFORMS.length - 1];\r\n const finalOffset = (lastUniform.offset + 4) & ~3;\r\n offset = finalOffset;\r\n for (let i = 0; i < this.INSTANCE_UNIFORMS.length; i++) {\r\n const offset1 = this.INSTANCE_UNIFORMS[i].offset;\r\n const numComps1 = this.getNumComponents(this.INSTANCE_UNIFORMS[i].type);\r\n const offset2 =\r\n i === this.INSTANCE_UNIFORMS.length - 1 ? finalOffset : this.INSTANCE_UNIFORMS[i + 1].offset;\r\n if (offset1 + numComps1 + numComponents <= offset2) {\r\n index = i + 1;\r\n offset = offset1 + numComps1;\r\n if (offset + numComponents === offset2) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.INSTANCE_UNIFORMS = this.INSTANCE_UNIFORMS.slice();\r\n this.INSTANCE_UNIFORMS.splice(index, 0, { prop, offset, type, name });\r\n return (offset << 2) | (numComponents - 1);\r\n }\r\n /**\r\n * Fragment-stage hook for materials that know their own ambient occlusion without a texture,\r\n * such as procedural grass darkening toward the root.\r\n *\r\n * Lit materials multiply it into the occlusion of the indirect (environment) lighting, on top of\r\n * the occlusion texture when there is one. Called inside the lighting functions of the fragment\r\n * shader, where varyings are readable.\r\n *\r\n * @param _scope - Current fragment shader scope\r\n * @returns Occlusion factor in [0, 1] (float), or null for none\r\n */\r\n getAmbientOcclusionFactor(_scope: PBInsideFunctionScope): Nullable<PBShaderExp> {\r\n return null;\r\n }\r\n /**\r\n * Fragment-stage hook for thin two-sided surfaces lit through from behind, such as leaves and\r\n * grass blades.\r\n *\r\n * @param _scope - Current fragment shader scope\r\n * @returns Subsurface color (vec3), or null for a surface that lets no light through\r\n */\r\n getSubsurfaceColor(_scope: PBInsideFunctionScope): Nullable<PBShaderExp> {\r\n return null;\r\n }\r\n /**\r\n * Read an encoded per-instance uniform in shader code.\r\n *\r\n * Encoded index packs: vector index, component offset, and component count.\r\n *\r\n * @param scope - Inside-function shader scope.\r\n * @param uniformIndex - Encoded index from `defineInstanceUniform`.\r\n * @returns The shader expression reading the selected components.\r\n */\r\n getInstancedUniform(scope: PBInsideFunctionScope, uniformIndex: number) {\r\n const pb = scope.$builder;\r\n const instanceID = scope.$builtins.instanceIndex;\r\n const uniformName = ShaderHelper.getInstanceDataUniformName();\r\n const strideName = ShaderHelper.getInstanceDataStrideUniformName();\r\n const offsetName = ShaderHelper.getInstanceDataOffsetUniformName();\r\n const numComponents = (uniformIndex & 3) + 1;\r\n const vecIndex = uniformIndex >> 4;\r\n const vecOffset = (uniformIndex >> 2) & 3;\r\n const u = scope[uniformName].at(\r\n pb.add(\r\n pb.mul(scope[strideName], instanceID),\r\n ShaderHelper.MATERIAL_INSTANCE_DATA_OFFSET + vecIndex,\r\n scope[offsetName]\r\n )\r\n );\r\n const m = ['x', 'y', 'z', 'w'].slice(vecOffset, vecOffset + numComponents).join('');\r\n return u[m] as PBShaderExp;\r\n }\r\n /**\r\n * Get the list of per-instance uniforms for this material class.\r\n */\r\n getInstancedUniforms() {\r\n return (this.constructor as typeof MeshMaterial).INSTANCE_UNIFORMS;\r\n }\r\n /**\r\n * Create a material instance (preferred for GPU instancing).\r\n *\r\n * - When instancing is unsupported, falls back to cloning.\r\n * - Otherwise, returns a proxy instance that shares GPU programs and\r\n * stores per-instance uniforms in a compact Float32Array.\r\n *\r\n * The returned instance:\r\n * - Exposes properties defined by `defineInstanceUniform` with getter/setter\r\n * that read/write the packed buffer and notify `RenderBundleWrapper`.\r\n * - Delegates methods to the core material via prototype chain.\r\n */\r\n createInstance(): this {\r\n if (this.$isInstance) {\r\n return this.coreMaterial.createInstance() as this;\r\n }\r\n if (!this.supportInstancing()) {\r\n return this.clone() as this;\r\n }\r\n const instanceUniforms = this.getInstancedUniforms();\r\n const uniformsHolder =\r\n instanceUniforms.length > 0\r\n ? new Float32Array((instanceUniforms[instanceUniforms.length - 1].offset + 4) & ~3)\r\n : null;\r\n const instance = {} as any;\r\n const that = this;\r\n const coreMaterial = new DRef(that);\r\n let disposed = false;\r\n instance.isBatchable = () => true;\r\n instance.dispose = () => {\r\n if (!disposed) {\r\n disposed = true;\r\n coreMaterial.dispose();\r\n }\r\n };\r\n instance.$instanceUniforms = uniformsHolder;\r\n instance.$isInstance = true;\r\n Object.defineProperty(instance, 'coreMaterial', {\r\n get: function () {\r\n return coreMaterial.get();\r\n }\r\n });\r\n\r\n // Copy original uniform values\r\n for (let i = 0; i < instanceUniforms.length; i++) {\r\n const { prop, offset, type } = instanceUniforms[i];\r\n const value = that[prop as keyof typeof that];\r\n switch (type) {\r\n case 'float': {\r\n uniformsHolder![offset] = Number(value);\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return uniformsHolder![offset];\r\n },\r\n set(value) {\r\n uniformsHolder![offset] = value;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n case 'vec2': {\r\n if (!(value instanceof Vector2)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector2`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return new Vector2(uniformsHolder![offset], uniformsHolder![offset + 1]);\r\n },\r\n set(value) {\r\n if (!(value instanceof Vector2)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector2`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n case 'vec3':\r\n case 'rgb': {\r\n if (!(value instanceof Vector3)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector3`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n uniformsHolder![offset + 2] = value.z;\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return new Vector3(\r\n uniformsHolder![offset],\r\n uniformsHolder![offset + 1],\r\n uniformsHolder![offset + 2]\r\n );\r\n },\r\n set(value) {\r\n if (!(value instanceof Vector3)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector3`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n uniformsHolder![offset + 2] = value.z;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n case 'vec4':\r\n case 'rgba': {\r\n if (!(value instanceof Vector4)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector4`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n uniformsHolder![offset + 2] = value.z;\r\n uniformsHolder![offset + 3] = value.w;\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return new Vector4(\r\n uniformsHolder![offset],\r\n uniformsHolder![offset + 1],\r\n uniformsHolder![offset + 2],\r\n uniformsHolder![offset + 3]\r\n );\r\n },\r\n set(value) {\r\n if (!(value instanceof Vector4)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector4`);\r\n }\r\n uniformsHolder![offset] = value.x;\r\n uniformsHolder![offset + 1] = value.y;\r\n uniformsHolder![offset + 2] = value.z;\r\n uniformsHolder![offset + 3] = value.w;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n Object.setPrototypeOf(instance, that);\r\n getEngine().resourceManager.trackMaterialReference(\r\n instance as this,\r\n getEngine().resourceManager.getAssetId(that.coreMaterial)\r\n );\r\n return instance as this;\r\n }\r\n /**\r\n * Draw context captured during program creation, available inside shader hooks.\r\n *\r\n * @returns The last `DrawContext` used to build or apply this material.\r\n */\r\n get drawContext() {\r\n return this._ctx!;\r\n }\r\n /**\r\n * Current material pass index during program building.\r\n * Typically used inside shader hooks to select per-pass logic.\r\n *\r\n * @returns The active pass index while building the program, or -1 when idle.\r\n */\r\n get pass() {\r\n return this._materialPass;\r\n }\r\n /**\r\n * Alpha test cutoff in [0, 1].\r\n * - 0 disables alpha testing.\r\n * - \\> 0 discards fragments with alpha \\< cutoff.\r\n * Changing this marks uniforms dirty (no shader rebuild).\r\n */\r\n get alphaCutoff() {\r\n return this._alphaCutoff;\r\n }\r\n set alphaCutoff(val) {\r\n if (this._alphaCutoff !== val) {\r\n this.useFeature(FEATURE_ALPHATEST, val > 0);\r\n this._alphaCutoff = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Whether alpha clipping uses frame-varying dither coverage.\r\n * - Effective only when alpha cutoff is enabled.\r\n * - Intended for masked materials (blendMode='none') to emulate soft transparency with TAA.\r\n */\r\n get alphaDither() {\r\n return this._alphaDither;\r\n }\r\n set alphaDither(val) {\r\n if (this._alphaDither !== !!val) {\r\n this._alphaDither = !!val;\r\n this.useFeature(FEATURE_ALPHADITHER, this._alphaDither);\r\n }\r\n }\r\n /**\r\n * Whether TAA is disabled for this material.\r\n * - When true, motion vectors encode a large sentinel to skip TAA accumulation.\r\n * - Managed via an internal feature toggle.\r\n */\r\n get TAADisabled() {\r\n return !!this.featureUsed(FEATURE_DISABLE_TAA);\r\n }\r\n set TAADisabled(val) {\r\n this.useFeature(FEATURE_DISABLE_TAA, !!val);\r\n }\r\n /**\r\n * Whether a blended material contributes motion vectors.\r\n *\r\n * @remarks\r\n * Off by default, and only meaningful with `blendMode !== 'none'`: blended\r\n * geometry is normally absent from the prepass, so it writes no velocity and a\r\n * temporal filter reprojects it with whatever is behind it. Turning this on\r\n * adds it to a motion-vector-only pass over the transparent queue.\r\n *\r\n * Right for geometry that is dense enough to own its pixels - hair, foliage\r\n * cards - where one velocity per pixel is a fair summary. Wrong for genuinely\r\n * see-through surfaces such as glass, where the background's own velocity is\r\n * the one that should survive, which is why this is opt-in.\r\n */\r\n get transparentMotionVector() {\r\n return !!this.featureUsed(FEATURE_TRANSPARENT_MOTION_VECTOR);\r\n }\r\n set transparentMotionVector(val) {\r\n this.useFeature(FEATURE_TRANSPARENT_MOTION_VECTOR, !!val);\r\n }\r\n /**\r\n * TAA strength in [0, 1].\r\n * - Higher values generally imply stronger accumulation.\r\n * - The value is mapped when writing motion-vector outputs during depth pass.\r\n */\r\n get TAAStrength() {\r\n return this._taaStrength;\r\n }\r\n set TAAStrength(val) {\r\n val = val > 1 ? 1 : val < 0 ? 0 : val;\r\n if (this._taaStrength !== val) {\r\n this._taaStrength = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Alpha-to-coverage toggle.\r\n * - Useful to approximate transparency for MSAA targets.\r\n * - Managed as a shader feature; toggling rebuilds variants.\r\n */\r\n get alphaToCoverage() {\r\n return !!this.featureUsed(FEATURE_ALPHATOCOVERAGE);\r\n }\r\n set alphaToCoverage(val) {\r\n this.useFeature(FEATURE_ALPHATOCOVERAGE, !!val);\r\n }\r\n /**\r\n * Blending mode of this material.\r\n * - 'none' for opaque, 'blend' for standard alpha, 'additive' for emissive FX.\r\n * - Changing the mode toggles an internal feature and rebuilds variants.\r\n */\r\n get blendMode() {\r\n return this._blendMode;\r\n }\r\n set blendMode(val) {\r\n if (this._blendMode !== val) {\r\n this._blendMode = val;\r\n this.useFeature(FEATURE_ALPHABLEND, this._blendMode);\r\n }\r\n }\r\n /**\r\n * Whether transparent visible materials cast shadow through a masked shadow-only path.\r\n * - Visible rendering stays blended.\r\n * - Shadow-map rendering is treated like a cutout material using `shadowAlphaCutoff`.\r\n */\r\n get transparentShadowCaster() {\r\n return this._transparentShadowCaster;\r\n }\r\n set transparentShadowCaster(val) {\r\n if (this._transparentShadowCaster !== !!val) {\r\n this._transparentShadowCaster = !!val;\r\n this.optionChanged(true);\r\n }\r\n }\r\n /**\r\n * Alpha cutoff used by the shadow-only masked caster path.\r\n */\r\n get shadowAlphaCutoff() {\r\n return this._shadowAlphaCutoff;\r\n }\r\n set shadowAlphaCutoff(val) {\r\n val = val > 1 ? 1 : val < 0 ? 0 : val;\r\n if (this._shadowAlphaCutoff !== val) {\r\n this._shadowAlphaCutoff = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Face culling mode: 'none' | 'front' | 'back'.\r\n * - Does not force shader rebuild; affects rasterizer state.\r\n */\r\n get cullMode() {\r\n return this._cullMode;\r\n }\r\n set cullMode(val) {\r\n if (this._cullMode !== val) {\r\n this._cullMode = val;\r\n this.useFeature(FEATURE_CULLMODE, this._cullMode);\r\n }\r\n }\r\n /**\r\n * Material opacity in [0, 1].\r\n * - Used in transparent passes. Changing marks uniforms dirty only.\r\n */\r\n get opacity() {\r\n return this._opacity;\r\n }\r\n set opacity(val) {\r\n val = val < 0 ? 0 : val > 1 ? 1 : val;\r\n if (this._opacity !== val) {\r\n this._opacity = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /**\r\n * Per-object color used for GPU picking/object-ID pass.\r\n * - Changing marks uniforms dirty only.\r\n */\r\n get objectColor(): Immutable<Vector4> {\r\n return this._objectColor;\r\n }\r\n set objectColor(val: Immutable<Vector4>) {\r\n if (val !== this._objectColor) {\r\n this._objectColor = val;\r\n // Uniforms only: the look is unchanged, so voxelized material caches stay valid\r\n this.optionChanged(false, false);\r\n }\r\n }\r\n /**\r\n * Whether this material responds to scene lighting.\r\n * Override to return false for unlit materials.\r\n *\r\n * @returns True if lighting affects this material; otherwise false.\r\n */\r\n supportLighting(): boolean {\r\n return false;\r\n }\r\n /**\r\n * Returns the effective blend mode for the current pass.\r\n * Transparent-shadow-caster materials stay blended in visible passes, but become masked in shadow passes.\r\n */\r\n protected getEffectiveBlendMode(pass: number, ctx?: DrawContext): BlendMode {\r\n if (\r\n ctx &&\r\n this.useTransparentShadowCasterForPass(ctx.renderPass?.type) &&\r\n this.featureUsed<BlendMode>(FEATURE_ALPHABLEND) !== 'none'\r\n ) {\r\n return 'none';\r\n }\r\n // The prepass records depth and velocity, neither of which is a quantity\r\n // that blends. Blended geometry only reaches it through the motion vector\r\n // pass, and there the nearest fragment should replace what is under it\r\n // rather than tint it.\r\n if (ctx && ctx.renderPass?.type === RENDER_PASS_TYPE_DEPTH) {\r\n return 'none';\r\n }\r\n return this.featureUsed<BlendMode>(FEATURE_ALPHABLEND);\r\n }\r\n /**\r\n * Whether this draw is the motion-vector-only pass over the transparent queue.\r\n * @internal\r\n */\r\n protected isMotionVectorOnlyPass(ctx: DrawContext) {\r\n return (\r\n ctx.renderPass?.type === RENDER_PASS_TYPE_DEPTH && !!(ctx.renderPass as DepthPass).motionVectorOnly\r\n );\r\n }\r\n /**\r\n * Returns the alpha cutoff that should be used for the current pass.\r\n */\r\n protected getActiveAlphaCutoff(ctx?: DrawContext, pass = this.pass) {\r\n return ctx && this.useTransparentShadowCaster(ctx, pass) ? this._shadowAlphaCutoff : this._alphaCutoff;\r\n }\r\n /**\r\n * Whether the current pass should use the shadow-only masked caster path.\r\n */\r\n useTransparentShadowCaster(ctx?: DrawContext, _pass = this.pass) {\r\n return !!ctx && this.useTransparentShadowCasterForPass(ctx.renderPass?.type);\r\n }\r\n /**\r\n * Whether the specified render pass type should reinterpret this transparent material as a masked shadow caster.\r\n */\r\n useTransparentShadowCasterForPass(renderPassType?: number) {\r\n return (\r\n !!this._transparentShadowCaster &&\r\n renderPassType === RENDER_PASS_TYPE_SHADOWMAP &&\r\n this.featureUsed<BlendMode>(FEATURE_ALPHABLEND) !== 'none'\r\n );\r\n }\r\n /**\r\n * Whether this pass needs an alpha-cutoff uniform bound.\r\n */\r\n protected usesAlphaCutoff(ctx: DrawContext, pass: number) {\r\n return this._alphaCutoff > 0 || (!!ctx && this.useTransparentShadowCaster(ctx, pass));\r\n }\r\n /**\r\n * Whether this pass needs fragment color inputs.\r\n * This stays aligned with the historical meaning of `needFragmentColor`,\r\n * but also allows shadow-only transparent casters to fetch alpha sources.\r\n */\r\n needFragmentColorInput(ctx?: DrawContext) {\r\n const drawContext = ctx ?? this.drawContext;\r\n return this.needFragmentColor(drawContext) || this.useTransparentShadowCaster(drawContext, this.pass);\r\n }\r\n /**\r\n * Update render states per pass and draw context.\r\n * Sets blending, alpha-to-coverage, depth test/write, cull mode, color mask, and cooperates with OIT.\r\n *\r\n * @param pass - Current material pass index.\r\n * @param stateSet - Render state set to update.\r\n * @param ctx - Current draw context.\r\n * @returns void\r\n */\r\n protected updateRenderStates(pass: number, stateSet: RenderStateSet, ctx: DrawContext) {\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_VOXELIZE) {\r\n // Every fragment of every face stores its voxel; the colour attachment is scratch\r\n stateSet.defaultBlendingState();\r\n stateSet.useDepthState().enableTest(false).enableWrite(false);\r\n stateSet.useRasterizerState().setCullMode('none');\r\n stateSet.useColorState().setColorMask(false, false, false, false);\r\n stateSet.defaultStencilState();\r\n return;\r\n }\r\n const isObjectColorPass = ctx.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR;\r\n const blendMode = this.getEffectiveBlendMode(pass, ctx);\r\n const blending = !isObjectColorPass && (blendMode !== 'none' || ctx.lightBlending);\r\n const a2c =\r\n !isObjectColorPass &&\r\n this.featureUsed<boolean>(FEATURE_ALPHATOCOVERAGE) &&\r\n !this.useTransparentShadowCaster(ctx, pass);\r\n const ztestEq =\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n ctx.queue === QUEUE_OPAQUE &&\r\n !!ctx.depthPrepassAttachment &&\r\n !ctx.sceneColorTexture;\r\n if (this.isMotionVectorOnlyPass(ctx)) {\r\n // Tested against the opaque depth, so anything behind the scene is\r\n // rejected, but never written: the prepass depth is what the light pass\r\n // and every screen-space effect read, and blended geometry does not\r\n // belong in it.\r\n stateSet.defaultBlendingState();\r\n stateSet.useDepthState().enableTest(true).enableWrite(false);\r\n if (ctx.forceCullMode || this._cullMode !== 'back') {\r\n stateSet.useRasterizerState().cullMode = ctx.forceCullMode || this._cullMode;\r\n } else {\r\n stateSet.defaultRasterizerState();\r\n }\r\n stateSet.defaultColorState();\r\n stateSet.defaultStencilState();\r\n return;\r\n }\r\n if (blending || a2c) {\r\n const blendingState = stateSet.useBlendingState();\r\n if (blending) {\r\n blendingState.enable(true);\r\n blendingState.setBlendFuncAlpha('zero', 'one');\r\n blendingState.setBlendEquation('add', 'add');\r\n if (blendMode === 'additive' || ctx.lightBlending) {\r\n blendingState.setBlendFuncRGB('one', 'one');\r\n } else {\r\n blendingState.setBlendFuncRGB('one', 'inv-src-alpha');\r\n }\r\n } else {\r\n blendingState.enable(false);\r\n }\r\n blendingState.enableAlphaToCoverage(a2c);\r\n if (ztestEq) {\r\n stateSet.useDepthState().setCompareFunc('eq').enableTest(true).enableWrite(false);\r\n } else if (blendingState.enabled) {\r\n stateSet.useDepthState().enableTest(true).enableWrite(false);\r\n } else {\r\n stateSet.defaultDepthState();\r\n }\r\n } else {\r\n stateSet.defaultBlendingState();\r\n if (ztestEq) {\r\n stateSet.useDepthState().setCompareFunc('eq').enableTest(true).enableWrite(false);\r\n } else {\r\n stateSet.defaultDepthState();\r\n }\r\n }\r\n if (ctx.forceCullMode || this._cullMode !== 'back') {\r\n stateSet.useRasterizerState().cullMode = ctx.forceCullMode || this._cullMode;\r\n } else if (ctx.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n stateSet.useRasterizerState().cullMode = 'none';\r\n } else {\r\n stateSet.defaultRasterizerState();\r\n }\r\n if (ctx.forceColorState) {\r\n stateSet.useColorState(ctx.forceColorState);\r\n } else {\r\n stateSet.defaultColorState();\r\n }\r\n stateSet.defaultStencilState();\r\n if (ctx.oit) {\r\n ctx.oit.setRenderStates(stateSet);\r\n }\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n // Gives the shadow implementation the last say, the same way OIT gets it on\r\n // the transparent pass. Single-pass techniques leave the states alone; an\r\n // accumulating one (deep opacity maps) needs blending on and depth write\r\n // off, which the branches above would otherwise never produce for a caster.\r\n const shadowMapParams = ctx.shadowMapInfo?.get((ctx.renderPass as ShadowMapPass).light!);\r\n shadowMapParams?.impl?.setCasterRenderStates(shadowMapParams, stateSet);\r\n }\r\n }\r\n /**\r\n * Submit material uniforms/resources to the material bind group (set 2).\r\n * Handles alpha cutoff, opacity (non-instanced transparent), OIT, object color, and TAA strength.\r\n *\r\n * @param bindGroup - The material bind group to write into.\r\n * @param ctx - Current draw context.\r\n * @param pass - Current material pass index.\r\n * @returns void\r\n */\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n if (this.usesAlphaCutoff(ctx, pass)) {\r\n bindGroup.setValue('zAlphaCutoff', this.getActiveAlphaCutoff(ctx, pass));\r\n }\r\n if (\r\n this.isTransparentPass(pass, ctx) &&\r\n ctx.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n bindGroup.setValue('zOpacity', this._opacity);\r\n }\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH && ctx.motionVectors) {\r\n bindGroup.setValue('zTAAStrength', (1 - this._taaStrength) * 50000);\r\n }\r\n }\r\n /**\r\n * Determine the render queue for this material.\r\n * Transparent materials are queued as `QUEUE_TRANSPARENT`, otherwise `QUEUE_OPAQUE`.\r\n *\r\n * @returns The queue type constant.\r\n */\r\n getQueueType(): number {\r\n return this.isTransparentPass(0) ? QUEUE_TRANSPARENT : QUEUE_OPAQUE;\r\n }\r\n /**\r\n * Whether the given pass is transparent.\r\n * Default returns true when `blendMode !== 'none'`.\r\n *\r\n * @param pass - Material pass index.\r\n * @returns True if the pass is transparent; otherwise false.\r\n */\r\n /**\r\n * Whether an opaque light pass keeps the alpha this material computed.\r\n *\r\n * @remarks\r\n * Opaque geometry normally forces `SceneColor.a` to 1, since nothing reads it.\r\n * A material that encodes data there for a later screen-space pass — as\r\n * {@link SSSMaterial} does with its diffuse luminance — overrides this to opt\r\n * out. Only affects opaque passes; transparent alpha handling is unchanged.\r\n *\r\n * @param ctx - The current draw context.\r\n * @returns `true` to keep the computed alpha. Defaults to `false`.\r\n */\r\n protected preservesOpaqueAlpha(ctx: DrawContext): boolean {\r\n void ctx;\r\n return false;\r\n }\r\n\r\n isTransparentPass(pass: number, ctx?: DrawContext) {\r\n return this.getEffectiveBlendMode(pass, ctx) !== 'none';\r\n }\r\n /**\r\n * Create the GPU program for a given pass and draw context.\r\n * Enables depth-clamp emulation for shadow map passes when required by the light, then delegates to `_createProgram`.\r\n *\r\n * @param ctx - Current draw context.\r\n * @param pass - Material pass index.\r\n * @returns The created `GPUProgram`.\r\n * @internal\r\n */\r\n protected createProgram(ctx: DrawContext, pass: number) {\r\n const pb = new ProgramBuilder(ctx.device);\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n const shadowMapParams = ctx.shadowMapInfo!.get((ctx.renderPass as ShadowMapPass).light!)!;\r\n pb.emulateDepthClamp = !!shadowMapParams.depthClampEnabled;\r\n }\r\n return this._createProgram(pb, ctx, pass);\r\n }\r\n /**\r\n * Query a feature flag’s current value.\r\n *\r\n * @typeParam T - Expected value type.\r\n * @param feature - The feature index.\r\n * @returns The current value for the feature, typed as `T`.\r\n */\r\n featureUsed<T = unknown>(feature: number): T {\r\n return this._featureStates[feature] as T;\r\n }\r\n /**\r\n * Enable or disable a feature and trigger variant rebuild when changed.\r\n * Calls `optionChanged(true)` internally on change.\r\n *\r\n * @param feature - The feature index to set.\r\n * @param use - The new feature value (typed by convention).\r\n * @returns void\r\n */\r\n useFeature(feature: number, use: unknown) {\r\n if (this._featureStates[feature] !== use) {\r\n this._featureStates[feature] = use;\r\n this.optionChanged(true);\r\n }\r\n }\r\n /**\r\n * Create the material-specific hash fragment from feature state.\r\n * Contributes to program variant hashing.\r\n *\r\n * @returns The hash fragment string.\r\n * @internal\r\n */\r\n protected _createHash() {\r\n return `${MeshMaterial.SHADER_VERSION}|${this._featureStates\r\n .map((val) => (val === undefined ? '' : val))\r\n .join('|')}|${Number(this._transparentShadowCaster)}`;\r\n }\r\n /**\r\n * Apply material uniforms to the bind group (set 2).\r\n * Default implementation delegates to `applyUniformValues`.\r\n *\r\n * @param bindGroup - The material bind group to update.\r\n * @param ctx - Current draw context.\r\n * @param pass - Current material pass index.\r\n * @returns void\r\n * @internal\r\n */\r\n protected _applyUniforms(bindGroup: BindGroup, ctx: DrawContext, pass: number) {\r\n this.applyUniformValues(bindGroup, ctx, pass);\r\n }\r\n protected isMaterialTextureEnabled(_name: string) {\r\n return true;\r\n }\r\n /**\r\n * Whether the fragment shader needs to compute color.\r\n * Returns true for LIGHT pass, or when alpha test or alpha-to-coverage is enabled.\r\n * Override if the material writes color in other passes.\r\n *\r\n * @param ctx - Optional draw context; defaults to the last captured `drawContext`.\r\n * @returns True if fragment color computation is needed; otherwise false.\r\n */\r\n needFragmentColor(ctx?: DrawContext) {\r\n const drawContext = ctx ?? this.drawContext;\r\n if (!drawContext?.renderPass) {\r\n return this._alphaCutoff > 0 || this.alphaToCoverage;\r\n }\r\n return (\r\n drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT ||\r\n drawContext.renderPass!.type === RENDER_PASS_TYPE_VOXELIZE ||\r\n this._alphaCutoff > 0 ||\r\n this.alphaToCoverage\r\n );\r\n }\r\n /**\r\n * Whether the material can be voxelized for global illumination: in the voxelize\r\n * pass its fragment shader must hand {@link MeshMaterial.outputFragmentColor} its\r\n * albedo (and alpha) as the colour. False by default.\r\n */\r\n supportsVoxelization(): boolean {\r\n return false;\r\n }\r\n /**\r\n * Vertex shader hook.\r\n * Prepares common inputs (skin/morph/instancing), varyings, and pass-dependent outputs.\r\n * Override to implement per-vertex logic; use `ShaderHelper` as needed.\r\n *\r\n * @param scope - Vertex shader function scope.\r\n * @returns void\r\n */\r\n vertexShader(scope: PBFunctionScope) {\r\n const pb = scope.$builder;\r\n ShaderHelper.prepareVertexShader(pb, this.drawContext);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SKIN_ANIMATION) {\r\n scope.$inputs.zBlendIndices = pb.vec4().attrib('blendIndices');\r\n scope.$inputs.zBlendWeights = pb.vec4().attrib('blendWeights');\r\n ShaderHelper.prepareSkinAnimation(scope);\r\n }\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n scope.$outputs.zObjectColor = this.getInstancedUniform(scope, MeshMaterial.OBJECT_COLOR_UNIFORM);\r\n }\r\n if (this.isTransparentPass(this.pass, this.drawContext)) {\r\n scope.$outputs.zOpacity = this.getInstancedUniform(scope, MeshMaterial.OPACITY_UNIFORM);\r\n }\r\n } else {\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n scope.$outputs.zObjectColor = scope[ShaderHelper.getObjectColorUniformName()];\r\n }\r\n }\r\n }\r\n /**\r\n * Fragment shader hook.\r\n * Declares pass-dependent uniforms (e.g., opacity, objectColor, alphaCutoff).\r\n * Override to implement per-fragment logic, and call `outputFragmentColor` to finalize writes.\r\n *\r\n * @param scope - Fragment shader function scope.\r\n * @returns void\r\n */\r\n fragmentShader(scope: PBFunctionScope) {\r\n const pb = scope.$builder;\r\n ShaderHelper.prepareFragmentShader(pb, this.drawContext);\r\n if (this.usesAlphaCutoff(this.drawContext, this.pass)) {\r\n scope.zAlphaCutoff = pb.float().uniform(2);\r\n }\r\n if (this.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n if (\r\n this.isTransparentPass(this.pass, this.drawContext) &&\r\n !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n scope.zOpacity = pb.float().uniform(2);\r\n }\r\n }\r\n }\r\n /**\r\n * Build and return the GPU program for this pass.\r\n * Wires `vertexShader` and `fragmentShader`; sets up pass-dependent outputs (OIT, SSR, motion vectors, distance/object color).\r\n *\r\n * @param pb - Program builder.\r\n * @param ctx - Current draw context.\r\n * @param pass - Material pass index.\r\n * @returns The created `GPUProgram`.\r\n * @internal\r\n */\r\n protected _createProgram(pb: ProgramBuilder, ctx: DrawContext, pass: number) {\r\n const that = this;\r\n this._ctx = ctx;\r\n this._materialPass = pass;\r\n const program = pb.buildRenderProgram({\r\n vertex(pb) {\r\n pb.main(function () {\r\n that.vertexShader(this);\r\n });\r\n },\r\n fragment(pb) {\r\n if (that.drawContext.oit) {\r\n that.drawContext.oit.setupFragmentOutput(this);\r\n } else if (that.isMotionVectorOnlyPass(ctx)) {\r\n // One attachment, so the motion vector has to be the first output\r\n // declared rather than the second - the framebuffer this pass runs\r\n // against carries no linear depth target to write.\r\n this.$outputs.zMotionVector = pb.vec4();\r\n this.zTAAStrength = pb.float().uniform(2);\r\n } else {\r\n this.$outputs.zFragmentOutput = pb.vec4();\r\n if (ctx.materialFlags & MaterialVaryingFlags.SCENE_STORE_ROUGHNESS) {\r\n this.$outputs.zSSRRoughness = pb.vec4();\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SCENE_STORE_NORMAL) {\r\n this.$outputs.zSSRNormal = pb.vec4();\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE) {\r\n this.$outputs.zSSSProfile = pb.vec4();\r\n this.$outputs.zSSSParams = pb.vec4();\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE) {\r\n this.$outputs.zSSSDiffuse = pb.vec4();\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION) {\r\n this.$outputs.zSSSTransmission = pb.vec4();\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SKIN_SSS_STORE) {\r\n this.$outputs.zPostSSS = pb.vec4();\r\n }\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH && ctx.motionVectors) {\r\n this.$outputs.zMotionVector = pb.vec4();\r\n this.zTAAStrength = pb.float().uniform(2);\r\n }\r\n // Declared after the motion vector, because the declaration order is\r\n // the MRT order and the prepass framebuffer appends this attachment\r\n // last (render/rendergraph/forward_plus_builder.ts, DepthPrepassModule).\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_DEPTH && ctx.sssProfileId) {\r\n this.$outputs.zSSSProfileId = pb.vec4();\r\n }\r\n if (ctx.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n this.$outputs.zDistance = pb.vec4();\r\n }\r\n }\r\n pb.main(function () {\r\n that.fragmentShader(this);\r\n });\r\n }\r\n });\r\n return program;\r\n }\r\n /**\r\n * Per-pixel subsurface profile id this material contributes to the depth prepass.\r\n *\r\n * @remarks\r\n * `null` (the default) means \"not skin\", which is what every material other than\r\n * {@link SSSMaterial} wants; otherwise the normalized `SSSProfile.encodedId`.\r\n *\r\n * It lives on the prepass rather than the light pass because the transmission\r\n * thickness pass needs it and runs earlier, and because that frees the skin mask\r\n * buffer's alpha to carry the subsurface opacity.\r\n *\r\n * @param scope - Inside-function shader scope.\r\n * @returns Normalized profile id expression, or `null` for non-skin materials.\r\n */\r\n protected getDepthPassProfileId(scope: PBInsideFunctionScope): Nullable<PBShaderExp> {\r\n void scope;\r\n return null;\r\n }\r\n /**\r\n * Centralized final color write and per-pass output composition.\r\n *\r\n * Behavior by pass:\r\n * - LIGHT: clipping, alpha handling, optional OIT integration, fog application, color output encoding.\r\n * - DEPTH: encoded depth; optional motion vectors (TAA enabled/disabled handling).\r\n * - OBJECT_COLOR: object color and distance output (linear depth or world-pos + distance).\r\n * - SHADOWMAP: writes shadow depth via light’s shadow implementation.\r\n *\r\n * Also writes SSR roughness/normal buffers when requested via material flags.\r\n *\r\n * @param scope - Inside-function shader scope.\r\n * @param worldPos - Fragment world-space position expression.\r\n * @param color - Lit fragment color expression; may be undefined for depth-only paths.\r\n * @param ssrRoughness - Optional SSR roughness output expression.\r\n * @param ssrNormal - Optional SSR normal output expression.\r\n * @param sssProfile - Optional SSS profile output expression.\r\n * @param sssParams - Optional SSS packed params output expression.\r\n * @param sssProfileEnabled - True only when this material should write SSS profile data.\r\n * @param sssDiffuse - Optional diffuse-only lighting color for SSS composition.\r\n * @param sssTransmission - Optional thin-shell transmission lighting color for SSS composition.\r\n * @returns void\r\n */\r\n outputFragmentColor(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n color: Nullable<PBShaderExp>,\r\n ssrRoughness?: PBShaderExp,\r\n ssrNormal?: PBShaderExp,\r\n sssProfile?: PBShaderExp,\r\n sssParams?: PBShaderExp,\r\n sssDiffuse?: PBShaderExp,\r\n sssTransmission?: PBShaderExp,\r\n sssProfileEnabled = false,\r\n postSSS?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_outputFragmentColor';\r\n const alphaClipFuncName = 'Z_shouldDiscardAlpha';\r\n pb.func(alphaClipFuncName, [pb.float('alpha'), pb.float('cutoff')], function () {\r\n const shadowMaskedCaster = that.useTransparentShadowCaster(that.drawContext, that.pass);\r\n const shadowAlphaClip =\r\n that.drawContext.renderPass!.type === RENDER_PASS_TYPE_SHADOWMAP &&\r\n (shadowMaskedCaster || !that.isTransparentPass(that.pass, that.drawContext));\r\n if (shadowAlphaClip) {\r\n if (!pb.getGlobalScope().Z_shadowDither4x4) {\r\n pb.getGlobalScope().Z_shadowDither4x4 = [\r\n pb.float(0 / 16),\r\n pb.float(8 / 16),\r\n pb.float(2 / 16),\r\n pb.float(10 / 16),\r\n pb.float(12 / 16),\r\n pb.float(4 / 16),\r\n pb.float(14 / 16),\r\n pb.float(6 / 16),\r\n pb.float(3 / 16),\r\n pb.float(11 / 16),\r\n pb.float(1 / 16),\r\n pb.float(9 / 16),\r\n pb.float(15 / 16),\r\n pb.float(7 / 16),\r\n pb.float(13 / 16),\r\n pb.float(5 / 16)\r\n ];\r\n }\r\n this.$l.alphaWidth = pb.max(pb.fwidth(this.alpha), 1e-4);\r\n this.$l.shadowCutoff = pb.max(pb.sub(this.cutoff, pb.min(0.18, pb.mul(this.alphaWidth, 2))), 0);\r\n this.$l.coverage = pb.clamp(\r\n pb.add(pb.div(pb.sub(this.alpha, this.shadowCutoff), this.alphaWidth), 0.5),\r\n 0,\r\n 1\r\n );\r\n this.$l.pixel = pb.mod(pb.floor(this.$builtins.fragCoord.xy), pb.vec2(4));\r\n // Scramble the ordered dither with shadow depth so overlapping masked layers\r\n // at the same texel do not all discard the exact same coverage bits.\r\n this.$l.layerJitter = pb.floor(pb.mul(pb.fract(pb.mul(this.$builtins.fragCoord.z, 131.37)), 16));\r\n this.$l.ditherIndex = pb.mod(\r\n pb.add(pb.add(pb.mul(this.pixel.y, 4), this.pixel.x), this.layerJitter),\r\n 16\r\n );\r\n this.$l.noise = this.Z_shadowDither4x4.at(pb.uint(this.ditherIndex));\r\n this.$return(pb.lessThan(this.coverage, this.noise));\r\n } else if (\r\n that.featureUsed<boolean>(FEATURE_ALPHADITHER) &&\r\n !that.isTransparentPass(that.pass, that.drawContext)\r\n ) {\r\n this.$l.frameId = pb.mod(pb.float(ShaderHelper.getFramestamp(this)), 64);\r\n this.$l.layerJitter = pb.fract(pb.mul(this.$builtins.fragCoord.z, 131.37));\r\n this.$l.phase = pb.add(\r\n this.$builtins.fragCoord.xy,\r\n pb.add(pb.mul(pb.vec2(47, 17), 0.695, this.frameId), pb.mul(pb.vec2(13.7, 29.3), this.layerJitter))\r\n );\r\n this.$l.noise = interleavedGradientNoise(this, this.phase);\r\n this.$l.coverage = pb.clamp(\r\n pb.div(pb.sub(this.alpha, this.cutoff), pb.max(pb.sub(1, this.cutoff), 1e-4)),\r\n 0,\r\n 1\r\n );\r\n this.$return(pb.lessThan(this.coverage, this.noise));\r\n } else {\r\n this.$return(pb.lessThan(this.alpha, this.cutoff));\r\n }\r\n });\r\n pb.func(funcName, color ? [pb.vec3('worldPos'), pb.vec4('color')] : [pb.vec3('worldPos')], function () {\r\n this.$l.outColor = color ? this.color : pb.vec4();\r\n if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT) {\r\n let output = true;\r\n if (\r\n !that.isTransparentPass(that.pass, that.drawContext) &&\r\n !that.alphaToCoverage &&\r\n !that.preservesOpaqueAlpha(that.drawContext)\r\n ) {\r\n this.outColor.a = 1;\r\n } else if (that.isTransparentPass(that.pass, that.drawContext)) {\r\n const opacity =\r\n that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? this.$inputs.zOpacity\r\n : this.zOpacity;\r\n this.outColor.a = pb.mul(this.outColor.a, opacity);\r\n }\r\n // Whether outColor.rgb is premultiplied by coverage when fog is applied.\r\n let premultiplied = true;\r\n if (that.isTransparentPass(that.pass, that.drawContext)) {\r\n if (this.zAlphaCutoff) {\r\n this.$if(pb.getGlobalScope()[alphaClipFuncName](this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n if (\r\n that.drawContext.oit &&\r\n that.drawContext.lightBlending &&\r\n !(that.drawContext.oit.wantsAdditiveLightPassAlpha?.() ?? false)\r\n ) {\r\n // For OIT with multi-light decomposition, keep additive light passes\r\n // color-only to avoid duplicating per-fragment transmittance.\r\n this.outColor = pb.vec4(this.outColor.rgb, 0);\r\n } else if (!that.drawContext.oit || that.drawContext.oit.wantsPremultipliedAlpha()) {\r\n this.outColor = pb.vec4(\r\n pb.mul(this.outColor.rgb, this.outColor.a),\r\n that.featureUsed<BlendMode>(FEATURE_ALPHABLEND) === 'additive' ? 0 : this.outColor.a\r\n );\r\n } else {\r\n premultiplied = false;\r\n }\r\n // Fog before handing the fragment to OIT, which otherwise consumes it unfogged.\r\n ShaderHelper.applyFog(this, this.worldPos, this.outColor, that.drawContext, premultiplied);\r\n output =\r\n !that.drawContext.oit ||\r\n !that.drawContext.oit.outputFragmentColor(this, this.outColor, that.drawContext);\r\n } else {\r\n ShaderHelper.applyFog(this, this.worldPos, this.outColor, that.drawContext);\r\n }\r\n if (output) {\r\n this.$outputs.zFragmentOutput = ShaderHelper.encodeColorOutput(this, this.outColor);\r\n }\r\n } else if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_DEPTH) {\r\n if (color) {\r\n if (this.zAlphaCutoff) {\r\n this.$if(pb.getGlobalScope()[alphaClipFuncName](this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n }\r\n const depthPass = that.drawContext.renderPass! as DepthPass;\r\n if (depthPass.motionVectorOnly) {\r\n // The whole transparent queue is submitted to this pass; a material\r\n // that has not opted in leaves the velocity underneath it alone,\r\n // which for a see-through surface is the right answer.\r\n if (!that.featureUsed(FEATURE_TRANSPARENT_MOTION_VECTOR)) {\r\n pb.discard();\r\n }\r\n } else {\r\n this.$l.depth = ShaderHelper.nonLinearDepthToLinearNormalized(this, this.$builtins.fragCoord.z);\r\n if (depthPass.encodeDepth) {\r\n this.$outputs.zFragmentOutput = encodeNormalizedFloatToRGBA(this, this.depth);\r\n } else if (depthPass.renderBackface) {\r\n this.$outputs.zFragmentOutput = pb.vec4(0, this.depth, 0, 1);\r\n } else {\r\n this.$outputs.zFragmentOutput = pb.vec4(this.depth, 0, 0, 1);\r\n }\r\n }\r\n if (that.drawContext.motionVectors) {\r\n if (that.featureUsed(FEATURE_DISABLE_TAA)) {\r\n this.$outputs.zMotionVector = pb.vec4(6e4, 6e4, 1, 1);\r\n } else {\r\n if (this.$inputs.zMotionVectorPosCurrent && this.$inputs.zMotionVectorPosPrev) {\r\n this.$outputs.zMotionVector = pb.vec4(\r\n pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.zMotionVectorPosCurrent.xy, this.$inputs.zMotionVectorPosCurrent.w),\r\n pb.div(this.$inputs.zMotionVectorPosPrev.xy, this.$inputs.zMotionVectorPosPrev.w)\r\n ),\r\n 0.5\r\n ),\r\n this.zTAAStrength,\r\n 1\r\n );\r\n } else {\r\n this.$outputs.zMotionVector = pb.vec4(0, 0, 1, 1);\r\n }\r\n }\r\n }\r\n // Not in the motion-vector-only pass, whose framebuffer carries a single\r\n // attachment: assigning to `$outputs` declares the output implicitly, so\r\n // writing here regardless would give that pass one the framebuffer has no\r\n // target for. It is also right on its own terms - the profile id is a\r\n // prepass product and the prepass draws only opaque geometry.\r\n if (that.drawContext.sssProfileId && !depthPass.motionVectorOnly) {\r\n // Every material in the prepass writes this attachment, so non-skin ones\r\n // must write the \"no profile\" id: the target is shared, and a stale texel\r\n // would be read as a real profile row.\r\n const profileId = that.getDepthPassProfileId(this);\r\n this.$outputs.zSSSProfileId = pb.vec4(profileId ?? pb.float(0));\r\n }\r\n } else if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_VOXELIZE) {\r\n // No alpha test: the distance field ignores masking, so rays hit the whole\r\n // card and need material everywhere. The colour handed in is the albedo (see supportsVoxelization)\r\n const emissiveMaterial = that as unknown as {\r\n calculateEmissiveColor?: (scope: PBInsideFunctionScope) => PBShaderExp;\r\n };\r\n const emissive = emissiveMaterial.calculateEmissiveColor?.(this) ?? pb.vec3(0);\r\n storeVoxelMaterial(this, this.worldPos, color ? this.outColor.rgb : pb.vec3(0.5), emissive);\r\n this.$outputs.zFragmentOutput = pb.vec4(0);\r\n } else if (that.drawContext.renderPass!.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n if (color) {\r\n this.$if(pb.getGlobalScope()[alphaClipFuncName](this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n this.$outputs.zFragmentOutput = scope.$inputs.zObjectColor;\r\n this.$outputs.zDistance = pb.vec4(\r\n this.worldPos,\r\n pb.distance(ShaderHelper.getCameraPosition(this), this.worldPos)\r\n );\r\n } /*if (that.drawContext.renderPass.type === RENDER_PASS_TYPE_SHADOWMAP)*/ else {\r\n const shadowMapParams = that.drawContext.shadowMapInfo!.get(\r\n (that.drawContext.renderPass as ShadowMapPass).light!\r\n )!;\r\n // Coverage-accumulating implementations read the alpha rather than test\r\n // it, and clipping first would consume the very quantity they integrate.\r\n if (color && shadowMapParams.impl!.clipsCasterAlpha(shadowMapParams)) {\r\n this.$if(pb.getGlobalScope()[alphaClipFuncName](this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n this.$outputs.zFragmentOutput = shadowMapParams.impl!.computeShadowMapDepth(\r\n shadowMapParams,\r\n this,\r\n this.worldPos,\r\n // Null, not a zero alpha, when no colour was computed: `outColor` is a\r\n // zero vector in that case, and a technique that reads alpha as coverage\r\n // would take it for a fully transparent fragment.\r\n color ? this.outColor.a : null\r\n );\r\n }\r\n });\r\n if (color) {\r\n pb.getGlobalScope()[funcName](worldPos, color);\r\n } else {\r\n pb.getGlobalScope()[funcName](worldPos);\r\n }\r\n const writeSceneRoughness = !!(\r\n that.drawContext.materialFlags & MaterialVaryingFlags.SCENE_STORE_ROUGHNESS\r\n );\r\n const writeSceneNormal = !!(that.drawContext.materialFlags & MaterialVaryingFlags.SCENE_STORE_NORMAL);\r\n if (writeSceneRoughness || writeSceneNormal) {\r\n // Transparent/blended passes (and materials that depend on scene color like transmission)\r\n // do not have a stable depth match for SSR, so force-disable SSR contribution on those pixels.\r\n const disableSSR =\r\n that.isTransparentPass(that.pass, that.drawContext) &&\r\n that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT;\r\n const disableSceneColorSSR =\r\n that.needSceneColor() && that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT;\r\n if (disableSSR || disableSceneColorSSR) {\r\n if (writeSceneRoughness) {\r\n scope.$outputs.zSSRRoughness = pb.vec4(0, 0, 0, 1);\r\n }\r\n if (writeSceneNormal) {\r\n scope.$outputs.zSSRNormal = pb.vec4(0);\r\n }\r\n } else {\r\n if (writeSceneRoughness) {\r\n scope.$outputs.zSSRRoughness = ssrRoughness ?? pb.vec4(1, 1, 0, 1);\r\n }\r\n if (writeSceneNormal) {\r\n scope.$outputs.zSSRNormal = ssrNormal\r\n ? ssrNormal\r\n : scope.$inputs.wNorm\r\n ? pb.vec4(pb.add(pb.mul(pb.normalize(scope.$inputs.wNorm), 0.5), pb.vec3(0.5)), 1)\r\n : pb.vec4(0.5, 0.5, 1, 1);\r\n }\r\n }\r\n }\r\n if (that.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE) {\r\n const disableSSS =\r\n that.drawContext.renderPass!.type === RENDER_PASS_TYPE_LIGHT &&\r\n ((that.isTransparentPass(that.pass, that.drawContext) && !that.alphaToCoverage) ||\r\n that.needSceneColor());\r\n const writeSSSProfile = sssProfileEnabled && !disableSSS;\r\n scope.$outputs.zSSSProfile = writeSSSProfile ? (sssProfile ?? pb.vec4(0)) : pb.vec4(0);\r\n scope.$outputs.zSSSParams = writeSSSProfile ? (sssParams ?? pb.vec4(0)) : pb.vec4(0);\r\n }\r\n if (that.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE) {\r\n const disableSSS =\r\n that.drawContext.renderPass!.type !== RENDER_PASS_TYPE_LIGHT ||\r\n (that.isTransparentPass(that.pass, that.drawContext) && !that.alphaToCoverage) ||\r\n that.needSceneColor();\r\n scope.$outputs.zSSSDiffuse = disableSSS ? pb.vec4(0) : (sssDiffuse ?? pb.vec4(0));\r\n }\r\n if (that.drawContext.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION) {\r\n const disableSSS =\r\n that.drawContext.renderPass!.type !== RENDER_PASS_TYPE_LIGHT ||\r\n (that.isTransparentPass(that.pass, that.drawContext) && !that.alphaToCoverage) ||\r\n that.needSceneColor();\r\n scope.$outputs.zSSSTransmission = disableSSS ? pb.vec4(0) : (sssTransmission ?? pb.vec4(0));\r\n }\r\n if (that.drawContext.materialFlags & MaterialVaryingFlags.SKIN_SSS_STORE) {\r\n const disablePostSSS =\r\n that.drawContext.renderPass!.type !== RENDER_PASS_TYPE_LIGHT ||\r\n (that.isTransparentPass(that.pass, that.drawContext) && !that.alphaToCoverage) ||\r\n that.needSceneColor();\r\n scope.$outputs.zPostSSS = disablePostSSS ? pb.vec4(0) : (postSSS ?? pb.vec4(0));\r\n }\r\n }\r\n}\r\nFEATURE_ALPHATEST = MeshMaterial.defineFeature();\r\nFEATURE_ALPHABLEND = MeshMaterial.defineFeature();\r\nFEATURE_CULLMODE = MeshMaterial.defineFeature();\r\nFEATURE_ALPHATOCOVERAGE = MeshMaterial.defineFeature();\r\nFEATURE_ALPHADITHER = MeshMaterial.defineFeature();\r\nFEATURE_DISABLE_TAA = MeshMaterial.defineFeature();\r\nFEATURE_TRANSPARENT_MOTION_VECTOR = MeshMaterial.defineFeature();\r\n"],"names":["applyMaterialMixins","target","mixins","applyMixins","FEATURE_ALPHATEST","FEATURE_ALPHABLEND","FEATURE_CULLMODE","FEATURE_ALPHATOCOVERAGE","FEATURE_ALPHADITHER","FEATURE_DISABLE_TAA","FEATURE_TRANSPARENT_MOTION_VECTOR","MeshMaterial","Material","SHADER_VERSION","INSTANCE_UNIFORMS","NEXT_FEATURE_INDEX","OBJECT_COLOR_UNIFORM","defineInstanceUniform","OPACITY_UNIFORM","_featureStates","_alphaCutoff","_alphaDither","_blendMode","_transparentShadowCaster","_shadowAlphaCutoff","_cullMode","_opacity","_taaStrength","_objectColor","Vector4","one","_ctx","_materialPass","useFeature","clone","other","copyFrom","alphaCutoff","alphaDither","blendMode","transparentShadowCaster","shadowAlphaCutoff","cullMode","opacity","objectColor","apply","ctx","uniformChanged","optionChanged","defineFeature","val","getNumComponents","type","prop","name","findIndex","Error","numComponents","index","length","offset","lastUniform","finalOffset","i","offset1","numComps1","offset2","slice","splice","getAmbientOcclusionFactor","_scope","getSubsurfaceColor","getInstancedUniform","scope","uniformIndex","pb","$builder","instanceID","$builtins","instanceIndex","uniformName","ShaderHelper","getInstanceDataUniformName","strideName","getInstanceDataStrideUniformName","offsetName","getInstanceDataOffsetUniformName","vecIndex","vecOffset","u","at","add","mul","MATERIAL_INSTANCE_DATA_OFFSET","m","join","getInstancedUniforms","createInstance","$isInstance","coreMaterial","supportInstancing","instanceUniforms","uniformsHolder","Float32Array","instance","that","DRef","disposed","isBatchable","dispose","$instanceUniforms","Object","defineProperty","get","value","Number","set","RenderBundleWrapper","materialUniformsChanged","Vector2","x","y","Vector3","z","w","setPrototypeOf","getEngine","resourceManager","trackMaterialReference","getAssetId","drawContext","pass","TAADisabled","featureUsed","transparentMotionVector","TAAStrength","alphaToCoverage","supportLighting","getEffectiveBlendMode","useTransparentShadowCasterForPass","renderPass","RENDER_PASS_TYPE_DEPTH","isMotionVectorOnlyPass","motionVectorOnly","getActiveAlphaCutoff","useTransparentShadowCaster","_pass","renderPassType","RENDER_PASS_TYPE_SHADOWMAP","usesAlphaCutoff","needFragmentColorInput","needFragmentColor","stateSet","RENDER_PASS_TYPE_VOXELIZE","defaultBlendingState","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","useColorState","setColorMask","defaultStencilState","isObjectColorPass","RENDER_PASS_TYPE_OBJECT_COLOR","blending","lightBlending","a2c","ztestEq","RENDER_PASS_TYPE_LIGHT","queue","QUEUE_OPAQUE","depthPrepassAttachment","sceneColorTexture","forceCullMode","defaultRasterizerState","defaultColorState","blendingState","useBlendingState","enable","setBlendFuncAlpha","setBlendEquation","setBlendFuncRGB","enableAlphaToCoverage","setCompareFunc","enabled","defaultDepthState","forceColorState","oit","setRenderStates","shadowMapParams","shadowMapInfo","light","impl","setCasterRenderStates","applyUniformValues","bindGroup","setValue","isTransparentPass","materialFlags","MaterialVaryingFlags","INSTANCING","motionVectors","getQueueType","QUEUE_TRANSPARENT","preservesOpaqueAlpha","createProgram","ProgramBuilder","device","emulateDepthClamp","depthClampEnabled","_createProgram","feature","use","map","undefined","isMaterialTextureEnabled","_name","supportsVoxelization","vertexShader","prepareVertexShader","SKIN_ANIMATION","$inputs","zBlendIndices","vec4","attrib","zBlendWeights","prepareSkinAnimation","$outputs","zObjectColor","zOpacity","getObjectColorUniformName","fragmentShader","prepareFragmentShader","zAlphaCutoff","float","uniform","program","buildRenderProgram","vertex","main","fragment","setupFragmentOutput","zMotionVector","zTAAStrength","zFragmentOutput","SCENE_STORE_ROUGHNESS","zSSRRoughness","SCENE_STORE_NORMAL","zSSRNormal","SSS_STORE_PROFILE","zSSSProfile","zSSSParams","SSS_STORE_DIFFUSE","zSSSDiffuse","SSS_STORE_TRANSMISSION","zSSSTransmission","SKIN_SSS_STORE","zPostSSS","sssProfileId","zSSSProfileId","zDistance","getDepthPassProfileId","outputFragmentColor","worldPos","color","ssrRoughness","ssrNormal","sssProfile","sssParams","sssDiffuse","sssTransmission","sssProfileEnabled","postSSS","funcName","alphaClipFuncName","func","shadowMaskedCaster","shadowAlphaClip","getGlobalScope","Z_shadowDither4x4","$l","alphaWidth","max","fwidth","alpha","shadowCutoff","sub","cutoff","min","coverage","clamp","div","pixel","mod","floor","fragCoord","xy","vec2","layerJitter","fract","ditherIndex","noise","uint","$return","lessThan","frameId","getFramestamp","phase","interleavedGradientNoise","vec3","outColor","output","a","premultiplied","$if","discard","wantsAdditiveLightPassAlpha","rgb","wantsPremultipliedAlpha","applyFog","encodeColorOutput","depthPass","depth","nonLinearDepthToLinearNormalized","encodeDepth","encodeNormalizedFloatToRGBA","renderBackface","zMotionVectorPosCurrent","zMotionVectorPosPrev","profileId","emissiveMaterial","emissive","calculateEmissiveColor","storeVoxelMaterial","distance","getCameraPosition","clipsCasterAlpha","computeShadowMapDepth","writeSceneRoughness","writeSceneNormal","disableSSR","disableSceneColorSSR","needSceneColor","wNorm","normalize","disableSSS","writeSSSProfile","disablePostSSS"],"mappings":"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"}
|
|
@@ -138,7 +138,7 @@ import { Vector4 } from '@zephyr3d/base';
|
|
|
138
138
|
this.sourceRadiusFactor = pb.div(extra.z, pb.max(pb.distance(posRange.xyz, this.worldPos), 0.0001));
|
|
139
139
|
});
|
|
140
140
|
this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff, extra);
|
|
141
|
-
this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);
|
|
141
|
+
this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff, extra);
|
|
142
142
|
this.$l.NoL = pb.dot(this.normal, this.lightDir);
|
|
143
143
|
this.$l.halfVec = pb.normalize(pb.add(this.viewVec, this.lightDir));
|
|
144
144
|
this.$l.NoH = pb.clamp(pb.dot(this.normal, this.halfVec), 0, 1);
|