@zephyr3d/scene 0.9.1 → 0.9.3
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/dist/animation/animationset.js +2 -0
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +9 -1
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +5 -1
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/geometry_cache_utils.js +20 -4
- package/dist/animation/geometry_cache_utils.js.map +1 -1
- package/dist/animation/ik/ik_angle_constraint.js +2 -6
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
- package/dist/animation/ik/ik_chain_builder.js +68 -0
- package/dist/animation/ik/ik_chain_builder.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +2 -7
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +2 -6
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +60 -12
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +20 -4
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +94 -46
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/math.js +16 -0
- package/dist/animation/joint_dynamics/math.js.map +1 -0
- package/dist/animation/joint_dynamics/solver.js +21 -11
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +15 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +5 -1
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/skeleton.js +2 -2
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +2 -6
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +4 -4
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +13 -40
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/constraints.js.map +1 -1
- package/dist/animation/spring2/controller.js +64 -64
- package/dist/animation/spring2/controller.js.map +1 -1
- package/dist/animation/spring2/math.js.map +1 -1
- package/dist/animation/spring2/spring_system.js +8 -8
- package/dist/animation/spring2/spring_system.js.map +1 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +1 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/app/screen.js +4 -4
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +24 -1
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +22 -1
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -2
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +60 -60
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +1 -1
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +795 -266
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +3 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/shader/helper.js +281 -278
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +6 -6
- package/dist/material/sprite.js.map +1 -1
- package/dist/material/terrain-cm.js +2 -2
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/posteffect/taa.js +31 -39
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/cluster_light.js +3 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +5 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +29 -3
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +283 -33
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +338 -108
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +195 -115
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +10 -0
- package/dist/render/rendergraph/history_resources.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +162 -35
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +25 -5
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/rendertarget.js +5 -1
- package/dist/render/rendertarget.js.map +1 -1
- package/dist/render/screenrendertarget.js +5 -1
- package/dist/render/screenrendertarget.js.map +1 -1
- package/dist/render/sky.js +4 -4
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +2 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/graph_node.js +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +81 -97
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +1 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene_node.js +228 -228
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +15 -3
- package/dist/scene/script_attachment.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +3 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +1 -1
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +0 -3
- package/dist/shapes/capsule.js.map +1 -1
- package/dist/shapes/cylinder.js +0 -3
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +0 -3
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +3 -9
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +94 -66
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/src/app/app.js +129 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/inputmgr.js +267 -0
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/src/blitter/bilateralblur.js +221 -0
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/src/utility/textures/ggxlut.js +213 -0
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +3 -3
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +4 -4
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/manager.js +299 -268
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +45 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +10 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +30 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +63 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +11 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +2 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +19 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +22 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +33 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +39 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +2 -0
- package/dist/utility/serialization/scene/script.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +9 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +21 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +5 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +49 -53
- package/dist/values.js.map +1 -1
- package/package.json +2 -2
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone.js +0 -240
- package/dist/animation/spring/spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone_collider.js +0 -198
- package/dist/animation/spring/spring_bone_collider.js.map +0 -1
- package/dist/animation/spring/spring_bone_constraint.js +0 -170
- package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
- package/dist/animation/spring/spring_bone_system.js +0 -328
- package/dist/animation/spring/spring_bone_system.js.map +0 -1
- package/dist/render/sky_motion_vector.js +0 -85
- package/dist/render/sky_motion_vector.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meshmaterial.js","sources":["../../../src/material/meshmaterial.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n FaceMode,\r\n GPUProgram,\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 { Application } from '../app';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Clonable } from '@zephyr3d/base';\r\nimport { Vector2, Vector3, Vector4, applyMixins, DRef, DWeakRef } from '@zephyr3d/base';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\n\r\n/**\r\n * Blending mode for mesh material\r\n * @public\r\n */\r\nexport type BlendMode = 'none' | 'blend' | 'additive';\r\n\r\n/**\r\n * Extract mixin return type\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 * Extract mixin type\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 specific material class\r\n * @param target - Material class\r\n * @param mixins - mixins\r\n * @returns Mixed mesh material class\r\n *\r\n * @public\r\n */\r\nexport function applyMaterialMixins<M extends ((target: any) => any)[], T>(\r\n target: T,\r\n ...mixins: M\r\n): ExtractMixinType<M> & T {\r\n return applyMixins(target, ...mixins);\r\n}\r\n\r\nlet FEATURE_ALPHATEST = 0;\r\nlet FEATURE_ALPHABLEND = 0;\r\nlet FEATURE_ALPHATOCOVERAGE = 0;\r\nlet FEATURE_DISABLE_TAA = 0;\r\n\r\n/** @internal */\r\nexport type InstanceUniformType = 'float' | 'vec2' | 'vec3' | 'vec4' | 'rgb' | 'rgba';\r\n\r\n/**\r\n * Base class for any kind of mesh materials\r\n *\r\n * @public\r\n */\r\nexport class MeshMaterial extends Material implements Clonable<MeshMaterial> {\r\n /** @internal */\r\n static INSTANCE_UNIFORMS: { prop: string; type: InstanceUniformType; offset: number }[] = [];\r\n /** @internal */\r\n static NEXT_FEATURE_INDEX = 3;\r\n /** @internal */\r\n static OBJECT_COLOR_UNIFORM = this.defineInstanceUniform('objectColor', 'rgba');\r\n /** @internal */\r\n static OPACITY_UNIFORM = this.defineInstanceUniform('opacity', 'float');\r\n /** @internal */\r\n private _featureStates: unknown[];\r\n /** @internal */\r\n private _alphaCutoff: number;\r\n /** @internal */\r\n private _blendMode: BlendMode;\r\n /** @internal */\r\n private _cullMode: FaceMode;\r\n /** @internal */\r\n private _opacity: number;\r\n /** @internal */\r\n private _taaStrength: number;\r\n /** @internal */\r\n private readonly _objectColor: Vector4;\r\n /** @internal */\r\n private _ctx: DrawContext;\r\n /** @internal */\r\n private _materialPass: number;\r\n /**\r\n * Creates an instance of MeshMaterial class\r\n * @param args - constructor arguments\r\n */\r\n constructor() {\r\n super();\r\n this._featureStates = [];\r\n this._alphaCutoff = 0;\r\n this._blendMode = 'none';\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 }\r\n clone(): MeshMaterial {\r\n const other = new MeshMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this): void {\r\n super.copyFrom(other);\r\n this.alphaCutoff = other.alphaCutoff;\r\n this.blendMode = other.blendMode;\r\n this.cullMode = other.cullMode;\r\n this.opacity = other.opacity;\r\n this.objectColor = other.objectColor;\r\n }\r\n /** Indicate that the uniform has changed and needs to be resubmitted. */\r\n uniformChanged() {\r\n this.optionChanged(false);\r\n }\r\n /** Define feature index */\r\n static defineFeature(): number {\r\n const val = this.NEXT_FEATURE_INDEX;\r\n this.NEXT_FEATURE_INDEX++;\r\n return val;\r\n }\r\n /** @internal */\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 /** Define instance uniform index */\r\n static defineInstanceUniform(prop: string, type: InstanceUniformType): number {\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 });\r\n return (offset << 2) | (numComponents - 1);\r\n }\r\n getInstancedUniform(scope: PBInsideFunctionScope, uniformIndex: number): PBShaderExp {\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];\r\n }\r\n /** Get instanced material property list */\r\n getInstancedUniforms() {\r\n return (this.constructor as typeof MeshMaterial).INSTANCE_UNIFORMS;\r\n }\r\n /** Create material instance */\r\n createInstance(): this {\r\n if (this.$isInstance) {\r\n return this.coreMaterial.createInstance();\r\n }\r\n const isWebGL1 = Application.instance.device.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 let persistentId = crypto.randomUUID();\r\n Material._registry.set(persistentId, new DWeakRef(instance));\r\n Object.defineProperty(instance, 'coreMaterial', {\r\n get: function () {\r\n return coreMaterial.get();\r\n }\r\n });\r\n Object.defineProperty(instance, 'persistentId', {\r\n get: function () {\r\n return persistentId;\r\n },\r\n set: function (val) {\r\n if (val !== persistentId) {\r\n const m = Material._registry.get(persistentId);\r\n if (!m || m.get() !== instance) {\r\n throw new Error('Registry material mismatch');\r\n }\r\n Material._registry.delete(persistentId);\r\n persistentId = val;\r\n Material._registry.set(persistentId, m);\r\n }\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];\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 return instance;\r\n }\r\n /** Draw context for shader creation */\r\n get drawContext(): DrawContext {\r\n return this._ctx;\r\n }\r\n /**\r\n * Current material pass\r\n * @internal\r\n **/\r\n get pass(): number {\r\n return this._materialPass;\r\n }\r\n /** A value between 0 and 1, presents the cutoff for alpha testing */\r\n get alphaCutoff(): number {\r\n return this._alphaCutoff;\r\n }\r\n set alphaCutoff(val: number) {\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 /** Whether TAA should be disabled on this material */\r\n get TAADisabled(): boolean {\r\n return !!this.featureUsed(FEATURE_DISABLE_TAA);\r\n }\r\n set TAADisabled(val: boolean) {\r\n this.useFeature(FEATURE_DISABLE_TAA, !!val);\r\n }\r\n /** TAA strength */\r\n get TAAStrength(): number {\r\n return this._taaStrength;\r\n }\r\n set TAAStrength(val: number) {\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 get alphaToCoverage(): boolean {\r\n return this.featureUsed(FEATURE_ALPHATOCOVERAGE);\r\n }\r\n set alphaToCoverage(val: boolean) {\r\n this.useFeature(FEATURE_ALPHATOCOVERAGE, !!val);\r\n }\r\n /** Blending mode */\r\n get blendMode(): BlendMode {\r\n return this._blendMode;\r\n }\r\n set blendMode(val: BlendMode) {\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 /** Cull mode */\r\n get cullMode(): FaceMode {\r\n return this._cullMode;\r\n }\r\n set cullMode(val: FaceMode) {\r\n this._cullMode = val;\r\n }\r\n /** A value between 0 and 1, presents the opacity */\r\n get opacity(): number {\r\n return this._opacity;\r\n }\r\n set opacity(val: number) {\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 /** Object color used for GPU picking */\r\n get objectColor(): Vector4 {\r\n return this._objectColor;\r\n }\r\n set objectColor(val: Vector4) {\r\n if (val !== this._objectColor) {\r\n this._objectColor.set(val ?? Vector4.one());\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Returns true if shading of the material will be affected by lights */\r\n supportLighting(): boolean {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc Material.updateRenderStates}\r\n */\r\n protected updateRenderStates(pass: number, stateSet: RenderStateSet, ctx: DrawContext): void {\r\n const isObjectColorPass = ctx.renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR;\r\n const blending =\r\n !isObjectColorPass && (this.featureUsed<BlendMode>(FEATURE_ALPHABLEND) !== 'none' || ctx.lightBlending);\r\n const a2c = !isObjectColorPass && this.featureUsed<boolean>(FEATURE_ALPHATOCOVERAGE);\r\n const ztestEq = ctx.queue === QUEUE_OPAQUE && !!ctx.depthTexture && !ctx.sceneColorTexture;\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 (this._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 }\r\n /**\r\n * Submit Uniform values before rendering with this material.\r\n *\r\n * @param bindGroup - Bind group for this material\r\n * @param ctx - Draw context\r\n * @param pass - Current pass of the material\r\n */\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n if (this.featureUsed(FEATURE_ALPHATEST)) {\r\n bindGroup.setValue('zAlphaCutoff', this._alphaCutoff);\r\n }\r\n if (\r\n this.isTransparentPass(pass) &&\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.oit) {\r\n ctx.oit.applyUniforms(ctx, bindGroup);\r\n }\r\n if (\r\n !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING) &&\r\n ctx.renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR\r\n ) {\r\n bindGroup.setValue('zObjectColor', this._objectColor);\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 which queue should be used to render this material.\r\n * @returns QUEUE_TRANSPARENT or QUEUE_OPAQUE\r\n */\r\n getQueueType(): number {\r\n return this.isTransparentPass(0) ? QUEUE_TRANSPARENT : QUEUE_OPAQUE;\r\n }\r\n /**\r\n * Determine if a certain pass of this material is translucent.\r\n * @param pass - Pass of the material\r\n * @returns True if it is translucent, otherwise false.\r\n */\r\n isTransparentPass(_pass: number): boolean {\r\n return this.featureUsed<BlendMode>(FEATURE_ALPHABLEND) !== 'none';\r\n }\r\n /** @internal */\r\n protected createProgram(ctx: DrawContext, pass: number): GPUProgram {\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 * Check if a feature is in use for given render pass type.\r\n *\r\n * @param feature - The feature index\r\n * @returns true if the feature is in use, otherwise false.\r\n */\r\n featureUsed<T = unknown>(feature: number): T {\r\n return this._featureStates[feature] as T;\r\n }\r\n /**\r\n * Use or unuse a feature of the material, this will cause the shader to be rebuild.\r\n *\r\n * @param feature - Which feature will be used or unused\r\n * @param use - true if use the feature, otherwise false\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 * {@inheritDoc Material._createHash}\r\n * @override\r\n *\r\n * @internal\r\n */\r\n protected _createHash(): string {\r\n return this._featureStates.map((val) => (val === undefined ? '' : val)).join('|');\r\n }\r\n /**\r\n * {@inheritDoc Material._applyUniforms}\r\n * @override\r\n *\r\n * @internal\r\n */\r\n protected _applyUniforms(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n this.applyUniformValues(bindGroup, ctx, pass);\r\n }\r\n /**\r\n * Check if the color should be computed in fragment shader, this is required for forward render pass or alpha test is in use or alpha to coverage is in use.\r\n *\r\n * @returns - true if the color should be computed in fragment shader, otherwise false.\r\n */\r\n needFragmentColor(ctx?: DrawContext): boolean {\r\n return (\r\n (ctx ?? this.drawContext).renderPass.type === RENDER_PASS_TYPE_LIGHT ||\r\n this._alphaCutoff > 0 ||\r\n this.alphaToCoverage\r\n );\r\n }\r\n /**\r\n * Vertex shader implementation of this material\r\n * @param scope - Shader scope\r\n */\r\n vertexShader(scope: PBFunctionScope): void {\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.materialFlags & MaterialVaryingFlags.MORPH_ANIMATION &&\r\n this.drawContext.device.type === 'webgl'\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)) {\r\n scope.$outputs.zOpacity = this.getInstancedUniform(scope, MeshMaterial.OPACITY_UNIFORM);\r\n }\r\n }\r\n }\r\n /**\r\n * Fragment shader implementation of this material\r\n * @param scope - Shader scope\r\n */\r\n fragmentShader(scope: PBFunctionScope): void {\r\n const pb = scope.$builder;\r\n ShaderHelper.prepareFragmentShader(pb, this.drawContext);\r\n if (this._alphaCutoff > 0) {\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) &&\r\n !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n scope.zOpacity = pb.float().uniform(2);\r\n }\r\n } else if (\r\n this.drawContext.renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR &&\r\n !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n scope.zObjectColor = pb.vec4().uniform(2);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Material._createProgram}\r\n * @override\r\n *\r\n * @internal\r\n */\r\n protected _createProgram(pb: ProgramBuilder, ctx: DrawContext, pass: number): GPUProgram {\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 {\r\n this.$outputs.zFragmentOutput = pb.vec4();\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n this.$outputs.zSSRRoughness = pb.vec4();\r\n this.$outputs.zSSRNormal = 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 * Calculate final fragment color for output.\r\n *\r\n * @param scope - Shader scope\r\n * @param color - Lit fragment color\r\n *\r\n * @returns The final fragment color\r\n */\r\n outputFragmentColor(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n color: PBShaderExp,\r\n ssrRoughness?: PBShaderExp,\r\n ssrNormal?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_outputFragmentColor';\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 ShaderHelper.discardIfClipped(this, this.worldPos);\r\n let output = true;\r\n if (!that.isTransparentPass(that.pass) && !that.alphaToCoverage) {\r\n this.outColor.a = 1;\r\n } else if (that.isTransparentPass(that.pass)) {\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)) {\r\n if (this.zAlphaCutoff) {\r\n this.$if(pb.lessThan(this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n 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 = !that.drawContext.oit || !that.drawContext.oit.outputFragmentColor(this, this.outColor);\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.lessThan(this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n }\r\n ShaderHelper.discardIfClipped(this, this.worldPos);\r\n const depthPass = that.drawContext.renderPass as DepthPass;\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 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.lessThan(this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n ShaderHelper.discardIfClipped(this, this.worldPos);\r\n this.$outputs.zFragmentOutput =\r\n that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? scope.$inputs.zObjectColor\r\n : scope.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 if (color) {\r\n this.$if(pb.lessThan(this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n ShaderHelper.discardIfClipped(this, this.worldPos);\r\n const shadowMapParams = that.drawContext.shadowMapInfo.get(\r\n (that.drawContext.renderPass as ShadowMapPass).light\r\n );\r\n this.$outputs.zFragmentOutput = shadowMapParams.impl.computeShadowMapDepth(\r\n shadowMapParams,\r\n this,\r\n this.worldPos\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 if (that.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$outputs.zSSRRoughness = ssrRoughness ?? pb.vec4(1, 0, 0, 1);\r\n scope.$outputs.zSSRNormal = ssrNormal ?? pb.vec4(0);\r\n }\r\n }\r\n}\r\nFEATURE_ALPHATEST = MeshMaterial.defineFeature();\r\nFEATURE_ALPHABLEND = MeshMaterial.defineFeature();\r\nFEATURE_ALPHATOCOVERAGE = MeshMaterial.defineFeature();\r\nFEATURE_DISABLE_TAA = MeshMaterial.defineFeature();\r\n"],"names":["applyMaterialMixins","target","mixins","applyMixins","FEATURE_ALPHATEST","FEATURE_ALPHABLEND","FEATURE_ALPHATOCOVERAGE","FEATURE_DISABLE_TAA","MeshMaterial","Material","INSTANCE_UNIFORMS","NEXT_FEATURE_INDEX","OBJECT_COLOR_UNIFORM","defineInstanceUniform","OPACITY_UNIFORM","_featureStates","_alphaCutoff","_blendMode","_cullMode","_opacity","_taaStrength","_objectColor","Vector4","one","_ctx","_materialPass","useFeature","clone","other","copyFrom","alphaCutoff","blendMode","cullMode","opacity","objectColor","uniformChanged","optionChanged","defineFeature","val","getNumComponents","type","prop","findIndex","Error","name","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","Application","instance","device","supportInstancing","instanceUniforms","uniformsHolder","Float32Array","that","DRef","disposed","isBatchable","dispose","$instanceUniforms","persistentId","crypto","randomUUID","_registry","set","DWeakRef","Object","defineProperty","get","delete","value","Number","RenderBundleWrapper","materialUniformsChanged","Vector2","x","y","Vector3","z","w","setPrototypeOf","drawContext","pass","TAADisabled","featureUsed","TAAStrength","alphaToCoverage","supportLighting","stateSet","ctx","isObjectColorPass","renderPass","RENDER_PASS_TYPE_OBJECT_COLOR","blending","lightBlending","a2c","ztestEq","queue","QUEUE_OPAQUE","depthTexture","sceneColorTexture","blendingState","useBlendingState","enable","setBlendFuncAlpha","setBlendEquation","setBlendFuncRGB","enableAlphaToCoverage","useDepthState","setCompareFunc","enableTest","enableWrite","enabled","defaultDepthState","defaultBlendingState","forceCullMode","useRasterizerState","RENDER_PASS_TYPE_SHADOWMAP","defaultRasterizerState","forceColorState","useColorState","defaultColorState","defaultStencilState","oit","setRenderStates","applyUniformValues","bindGroup","setValue","isTransparentPass","RENDER_PASS_TYPE_LIGHT","materialFlags","MaterialVaryingFlags","INSTANCING","applyUniforms","RENDER_PASS_TYPE_DEPTH","motionVectors","getQueueType","QUEUE_TRANSPARENT","_pass","createProgram","ProgramBuilder","shadowMapParams","shadowMapInfo","light","emulateDepthClamp","depthClampEnabled","_createProgram","feature","use","map","undefined","needFragmentColor","vertexShader","prepareVertexShader","SKIN_ANIMATION","$inputs","zBlendIndices","vec4","attrib","zBlendWeights","prepareSkinAnimation","MORPH_ANIMATION","zFakeVertexID","float","$outputs","zObjectColor","zOpacity","fragmentShader","prepareFragmentShader","zAlphaCutoff","uniform","program","buildRenderProgram","vertex","main","fragment","setupFragmentOutput","zFragmentOutput","SSR_STORE_ROUGHNESS","zSSRRoughness","zSSRNormal","zMotionVector","zTAAStrength","zDistance","outputFragmentColor","worldPos","color","ssrRoughness","ssrNormal","funcName","func","vec3","$l","outColor","discardIfClipped","output","a","$if","lessThan","discard","wantsPremultipliedAlpha","rgb","applyFog","encodeColorOutput","depthPass","depth","nonLinearDepthToLinearNormalized","fragCoord","encodeDepth","encodeNormalizedFloatToRGBA","renderBackface","zMotionVectorPosCurrent","zMotionVectorPosPrev","sub","div","xy","linearDepth","distance","getCameraPosition","impl","computeShadowMapDepth","getGlobalScope"],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Vector4 } from '@zephyr3d/base';
|
|
2
|
+
import { applyMaterialMixins } from '../meshmaterial.js';
|
|
3
|
+
import { mixinTextureProps } from './texture.js';
|
|
4
|
+
import { MaterialVaryingFlags } from '../../values.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Albedo color mixin
|
|
8
|
+
* @param BaseCls - Class to mix in
|
|
9
|
+
* @returns Mixed class
|
|
10
|
+
*
|
|
11
|
+
* @public
|
|
12
|
+
*/ function mixinAlbedoColor(BaseCls) {
|
|
13
|
+
if (BaseCls.albedoColorMixed) {
|
|
14
|
+
return BaseCls;
|
|
15
|
+
}
|
|
16
|
+
const S = applyMaterialMixins(BaseCls, mixinTextureProps('albedo'));
|
|
17
|
+
const ALBEDO_COLOR_UNIFORM = S.defineInstanceUniform('albedoColor', 'rgba');
|
|
18
|
+
return class extends S {
|
|
19
|
+
static albedoColorMixed = true;
|
|
20
|
+
_albedoColor;
|
|
21
|
+
constructor(){
|
|
22
|
+
super();
|
|
23
|
+
this._albedoColor = Vector4.one();
|
|
24
|
+
}
|
|
25
|
+
copyFrom(other) {
|
|
26
|
+
super.copyFrom(other);
|
|
27
|
+
this.albedoColor = other.albedoColor;
|
|
28
|
+
}
|
|
29
|
+
/** Albedo color */ get albedoColor() {
|
|
30
|
+
return this._albedoColor;
|
|
31
|
+
}
|
|
32
|
+
set albedoColor(val) {
|
|
33
|
+
this._albedoColor.set(val);
|
|
34
|
+
this.uniformChanged();
|
|
35
|
+
}
|
|
36
|
+
getUniformValueAlbedoColor(scope) {
|
|
37
|
+
return this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING ? scope.$inputs.zAlbedo : scope.zAlbedo;
|
|
38
|
+
}
|
|
39
|
+
calculateAlbedoColor(scope, uv) {
|
|
40
|
+
const pb = scope.$builder;
|
|
41
|
+
if (!this.needFragmentColor()) {
|
|
42
|
+
console.warn('mixinAlbedoColor.calculateAlbedoColor(): No need to calculate albedo color, make sure needFragmentColor() returns true');
|
|
43
|
+
return pb.vec4(1);
|
|
44
|
+
}
|
|
45
|
+
let color = this.getUniformValueAlbedoColor(scope);
|
|
46
|
+
if (this.albedoTexture) {
|
|
47
|
+
color = pb.mul(color, this.sampleAlbedoTexture(scope, uv));
|
|
48
|
+
}
|
|
49
|
+
return color;
|
|
50
|
+
}
|
|
51
|
+
vertexShader(scope) {
|
|
52
|
+
super.vertexShader(scope);
|
|
53
|
+
if (this.needFragmentColor()) {
|
|
54
|
+
if (this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {
|
|
55
|
+
scope.$outputs.zAlbedo = this.getInstancedUniform(scope, ALBEDO_COLOR_UNIFORM);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
fragmentShader(scope) {
|
|
60
|
+
super.fragmentShader(scope);
|
|
61
|
+
if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {
|
|
62
|
+
const pb = scope.$builder;
|
|
63
|
+
scope.zAlbedo = pb.vec4().uniform(2);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
applyUniformValues(bindGroup, ctx, pass) {
|
|
67
|
+
super.applyUniformValues(bindGroup, ctx, pass);
|
|
68
|
+
if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {
|
|
69
|
+
bindGroup.setValue('zAlbedo', this._albedoColor);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { mixinAlbedoColor };
|
|
76
|
+
//# sourceMappingURL=albedocolor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"albedocolor.js","sources":["../../../../src/material/mixins/albedocolor.ts"],"sourcesContent":["import { Vector4 } from '@zephyr3d/base';\r\nimport type { MeshMaterial } from '../meshmaterial';\r\nimport { applyMaterialMixins } from '../meshmaterial';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../../render';\r\nimport type { TextureMixinInstanceTypes } from './texture';\r\nimport { mixinTextureProps } from './texture';\r\nimport { MaterialVaryingFlags } from '../../values';\r\n\r\n/**\r\n * Interface for albedo color mixin\r\n * @public\r\n */\r\nexport type IMixinAlbedoColor = {\r\n albedoColor: Vector4;\r\n calculateAlbedoColor(scope: PBInsideFunctionScope, uv?: PBShaderExp): PBShaderExp;\r\n} & TextureMixinInstanceTypes<['albedo']>;\r\n\r\n/**\r\n * Albedo color mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n *\r\n * @public\r\n */\r\nfunction mixinAlbedoColor<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).albedoColorMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinAlbedoColor };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinTextureProps('albedo'));\r\n const ALBEDO_COLOR_UNIFORM = S.defineInstanceUniform('albedoColor', 'rgba');\r\n return class extends S {\r\n static albedoColorMixed = true;\r\n private readonly _albedoColor: Vector4;\r\n constructor() {\r\n super();\r\n this._albedoColor = Vector4.one();\r\n }\r\n copyFrom(other: this): void {\r\n super.copyFrom(other);\r\n this.albedoColor = other.albedoColor;\r\n }\r\n /** Albedo color */\r\n get albedoColor(): Vector4 {\r\n return this._albedoColor;\r\n }\r\n set albedoColor(val: Vector4) {\r\n this._albedoColor.set(val);\r\n this.uniformChanged();\r\n }\r\n getUniformValueAlbedoColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n return this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? scope.$inputs.zAlbedo\r\n : scope.zAlbedo;\r\n }\r\n calculateAlbedoColor(scope: PBInsideFunctionScope, uv?: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!this.needFragmentColor()) {\r\n console.warn(\r\n 'mixinAlbedoColor.calculateAlbedoColor(): No need to calculate albedo color, make sure needFragmentColor() returns true'\r\n );\r\n return pb.vec4(1);\r\n }\r\n let color = this.getUniformValueAlbedoColor(scope);\r\n if (this.albedoTexture) {\r\n color = pb.mul(color, this.sampleAlbedoTexture(scope, uv));\r\n }\r\n return color;\r\n }\r\n vertexShader(scope: PBFunctionScope): void {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor()) {\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zAlbedo = this.getInstancedUniform(scope, ALBEDO_COLOR_UNIFORM);\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope): void {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n const pb = scope.$builder;\r\n scope.zAlbedo = pb.vec4().uniform(2);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zAlbedo', this._albedoColor);\r\n }\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinAlbedoColor };\r\n}\r\n\r\nexport { mixinAlbedoColor };\r\n"],"names":["mixinAlbedoColor","BaseCls","albedoColorMixed","S","applyMaterialMixins","mixinTextureProps","ALBEDO_COLOR_UNIFORM","defineInstanceUniform","_albedoColor","Vector4","one","copyFrom","other","albedoColor","val","set","uniformChanged","getUniformValueAlbedoColor","scope","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$inputs","zAlbedo","calculateAlbedoColor","uv","pb","$builder","needFragmentColor","console","warn","vec4","color","albedoTexture","mul","sampleAlbedoTexture","vertexShader","$outputs","getInstancedUniform","fragmentShader","uniform","applyUniformValues","bindGroup","ctx","pass","setValue"],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Foliage mixin
|
|
3
|
+
*
|
|
4
|
+
* @param BaseCls - Class to mix in
|
|
5
|
+
* @returns Mixed class
|
|
6
|
+
*
|
|
7
|
+
* @public
|
|
8
|
+
*/ function mixinFoliage(BaseCls) {
|
|
9
|
+
if (BaseCls.foliageMixed) {
|
|
10
|
+
return BaseCls;
|
|
11
|
+
}
|
|
12
|
+
return class extends BaseCls {
|
|
13
|
+
static foliageMixed = true;
|
|
14
|
+
constructor(){
|
|
15
|
+
super();
|
|
16
|
+
this.cullMode = 'none';
|
|
17
|
+
}
|
|
18
|
+
calculateFoliageAlbedo(scope, albedoColor, texelCoord) {
|
|
19
|
+
const pb = scope.$builder;
|
|
20
|
+
const that = this;
|
|
21
|
+
const funcNameCalcMipLevel = 'Z_CalcFoliageMipLevel';
|
|
22
|
+
pb.func(funcNameCalcMipLevel, [
|
|
23
|
+
pb.vec2('coord')
|
|
24
|
+
], function() {
|
|
25
|
+
this.$l.dx = pb.dpdx(this.coord);
|
|
26
|
+
this.$l.dy = pb.dpdy(this.coord);
|
|
27
|
+
this.$l.deltaMaxSqr = pb.max(pb.dot(this.dx, this.dx), pb.dot(this.dy, this.dy));
|
|
28
|
+
this.$return(pb.max(0, pb.mul(pb.log2(this.deltaMaxSqr), 0.5)));
|
|
29
|
+
});
|
|
30
|
+
const funcNameCalcFoliageAlbedo = 'Z_calcFoliageAlbedo';
|
|
31
|
+
pb.func(funcNameCalcFoliageAlbedo, [
|
|
32
|
+
pb.vec4('albedo'),
|
|
33
|
+
pb.vec2('coord')
|
|
34
|
+
], function() {
|
|
35
|
+
this.$l.a = pb.mul(this.albedo.a, pb.add(1, pb.mul(pb.max(0, scope[funcNameCalcMipLevel](this.coord)), 0.25)));
|
|
36
|
+
if (that.alphaToCoverage) {
|
|
37
|
+
this.a = pb.add(pb.div(pb.sub(this.a, 0.4), pb.max(pb.fwidth(this.albedo.a), 0.0001)), 0.5);
|
|
38
|
+
}
|
|
39
|
+
this.$return(pb.vec4(this.albedo.rgb, this.a));
|
|
40
|
+
});
|
|
41
|
+
return pb.getGlobalScope()[funcNameCalcFoliageAlbedo](albedoColor, texelCoord);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { mixinFoliage };
|
|
47
|
+
//# sourceMappingURL=foliage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foliage.js","sources":["../../../../src/material/mixins/foliage.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../meshmaterial';\r\n\r\n/**\r\n * Interface for foliage mixin\r\n * @public\r\n */\r\nexport interface IMixinFoliage {\r\n calculateFoliageAlbedo(\r\n scope: PBInsideFunctionScope,\r\n albedoColor: PBShaderExp,\r\n texelCoord: PBShaderExp\r\n ): PBShaderExp;\r\n}\r\n\r\n/**\r\n * Foliage mixin\r\n *\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n *\r\n * @public\r\n */\r\nfunction mixinFoliage<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).foliageMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinFoliage };\r\n }\r\n return class extends (BaseCls as typeof MeshMaterial) {\r\n static foliageMixed = true;\r\n constructor() {\r\n super();\r\n this.cullMode = 'none';\r\n }\r\n calculateFoliageAlbedo(\r\n scope: PBInsideFunctionScope,\r\n albedoColor: PBShaderExp,\r\n texelCoord: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcNameCalcMipLevel = 'Z_CalcFoliageMipLevel';\r\n pb.func(funcNameCalcMipLevel, [pb.vec2('coord')], function () {\r\n this.$l.dx = pb.dpdx(this.coord);\r\n this.$l.dy = pb.dpdy(this.coord);\r\n this.$l.deltaMaxSqr = pb.max(pb.dot(this.dx, this.dx), pb.dot(this.dy, this.dy));\r\n this.$return(pb.max(0, pb.mul(pb.log2(this.deltaMaxSqr), 0.5)));\r\n });\r\n const funcNameCalcFoliageAlbedo = 'Z_calcFoliageAlbedo';\r\n pb.func(funcNameCalcFoliageAlbedo, [pb.vec4('albedo'), pb.vec2('coord')], function () {\r\n this.$l.a = pb.mul(\r\n this.albedo.a,\r\n pb.add(1, pb.mul(pb.max(0, scope[funcNameCalcMipLevel](this.coord)), 0.25))\r\n );\r\n if (that.alphaToCoverage) {\r\n this.a = pb.add(pb.div(pb.sub(this.a, 0.4), pb.max(pb.fwidth(this.albedo.a), 0.0001)), 0.5);\r\n }\r\n this.$return(pb.vec4(this.albedo.rgb, this.a));\r\n });\r\n return pb.getGlobalScope()[funcNameCalcFoliageAlbedo](albedoColor, texelCoord);\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinFoliage };\r\n}\r\n\r\nexport { mixinFoliage };\r\n"],"names":["mixinFoliage","BaseCls","foliageMixed","cullMode","calculateFoliageAlbedo","scope","albedoColor","texelCoord","pb","$builder","that","funcNameCalcMipLevel","func","vec2","$l","dx","dpdx","coord","dy","dpdy","deltaMaxSqr","max","dot","$return","mul","log2","funcNameCalcFoliageAlbedo","vec4","a","albedo","add","alphaToCoverage","div","sub","fwidth","rgb","getGlobalScope"],"mappings":"AAeA;;;;;;;IAQA,SAASA,aAA4CC,OAAU,EAAA;IAC7D,IAAKA,OAAgBC,CAAAA,YAAY,EAAE;QACjC,OAAOD,OAAAA;AACT;AACA,IAAA,OAAO,cAAeA,OAAAA,CAAAA;AACpB,QAAA,OAAOC,eAAe,IAAK;QAC3B,WAAc,EAAA;YACZ,KAAK,EAAA;YACL,IAAI,CAACC,QAAQ,GAAG,MAAA;AAClB;AACAC,QAAAA,sBAAAA,CACEC,KAA4B,EAC5BC,WAAwB,EACxBC,UAAuB,EACV;YACb,MAAMC,EAAAA,GAAKH,MAAMI,QAAQ;AACzB,YAAA,MAAMC,OAAO,IAAI;AACjB,YAAA,MAAMC,oBAAuB,GAAA,uBAAA;YAC7BH,EAAGI,CAAAA,IAAI,CAACD,oBAAsB,EAAA;AAACH,gBAAAA,EAAAA,CAAGK,IAAI,CAAC,OAAA;aAAS,EAAE,WAAA;gBAChD,IAAI,CAACC,EAAE,CAACC,EAAE,GAAGP,GAAGQ,IAAI,CAAC,IAAI,CAACC,KAAK,CAAA;gBAC/B,IAAI,CAACH,EAAE,CAACI,EAAE,GAAGV,GAAGW,IAAI,CAAC,IAAI,CAACF,KAAK,CAAA;AAC/B,gBAAA,IAAI,CAACH,EAAE,CAACM,WAAW,GAAGZ,EAAAA,CAAGa,GAAG,CAACb,EAAGc,CAAAA,GAAG,CAAC,IAAI,CAACP,EAAE,EAAE,IAAI,CAACA,EAAE,CAAGP,EAAAA,EAAAA,CAAGc,GAAG,CAAC,IAAI,CAACJ,EAAE,EAAE,IAAI,CAACA,EAAE,CAAA,CAAA;AAC9E,gBAAA,IAAI,CAACK,OAAO,CAACf,EAAGa,CAAAA,GAAG,CAAC,CAAGb,EAAAA,EAAAA,CAAGgB,GAAG,CAAChB,GAAGiB,IAAI,CAAC,IAAI,CAACL,WAAW,CAAG,EAAA,GAAA,CAAA,CAAA,CAAA;AAC3D,aAAA,CAAA;AACA,YAAA,MAAMM,yBAA4B,GAAA,qBAAA;YAClClB,EAAGI,CAAAA,IAAI,CAACc,yBAA2B,EAAA;AAAClB,gBAAAA,EAAAA,CAAGmB,IAAI,CAAC,QAAA,CAAA;AAAWnB,gBAAAA,EAAAA,CAAGK,IAAI,CAAC,OAAA;aAAS,EAAE,WAAA;AACxE,gBAAA,IAAI,CAACC,EAAE,CAACc,CAAC,GAAGpB,EAAGgB,CAAAA,GAAG,CAChB,IAAI,CAACK,MAAM,CAACD,CAAC,EACbpB,EAAGsB,CAAAA,GAAG,CAAC,CAAA,EAAGtB,EAAGgB,CAAAA,GAAG,CAAChB,EAAAA,CAAGa,GAAG,CAAC,CAAA,EAAGhB,KAAK,CAACM,oBAAqB,CAAA,CAAC,IAAI,CAACM,KAAK,CAAI,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA;gBAEvE,IAAIP,IAAAA,CAAKqB,eAAe,EAAE;AACxB,oBAAA,IAAI,CAACH,CAAC,GAAGpB,EAAAA,CAAGsB,GAAG,CAACtB,EAAGwB,CAAAA,GAAG,CAACxB,EAAAA,CAAGyB,GAAG,CAAC,IAAI,CAACL,CAAC,EAAE,GAAMpB,CAAAA,EAAAA,EAAAA,CAAGa,GAAG,CAACb,EAAG0B,CAAAA,MAAM,CAAC,IAAI,CAACL,MAAM,CAACD,CAAC,GAAG,MAAU,CAAA,CAAA,EAAA,GAAA,CAAA;AACzF;AACA,gBAAA,IAAI,CAACL,OAAO,CAACf,EAAAA,CAAGmB,IAAI,CAAC,IAAI,CAACE,MAAM,CAACM,GAAG,EAAE,IAAI,CAACP,CAAC,CAAA,CAAA;AAC9C,aAAA,CAAA;AACA,YAAA,OAAOpB,GAAG4B,cAAc,EAAE,CAACV,yBAAAA,CAA0B,CAACpB,WAAaC,EAAAA,UAAAA,CAAAA;AACrE;AACF,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { applyMaterialMixins } from '../../meshmaterial.js';
|
|
2
|
+
import { mixinLight } from '../lit.js';
|
|
3
|
+
import { ShaderHelper } from '../../shader/helper.js';
|
|
4
|
+
import { MaterialVaryingFlags } from '../../../values.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Blinn-phong lighting model mixin
|
|
8
|
+
* @param BaseCls - Class to mix in
|
|
9
|
+
* @returns Mixed class
|
|
10
|
+
* @public
|
|
11
|
+
*/ function mixinBlinnPhong(BaseCls) {
|
|
12
|
+
if (BaseCls.blinnPhongMixed) {
|
|
13
|
+
return BaseCls;
|
|
14
|
+
}
|
|
15
|
+
const S = applyMaterialMixins(BaseCls, mixinLight);
|
|
16
|
+
const SHININESS_UNIFORM = S.defineInstanceUniform('shininess', 'float');
|
|
17
|
+
return class extends S {
|
|
18
|
+
static blinnPhongMixed = true;
|
|
19
|
+
_shininess;
|
|
20
|
+
constructor(){
|
|
21
|
+
super();
|
|
22
|
+
this._shininess = 32;
|
|
23
|
+
}
|
|
24
|
+
copyFrom(other) {
|
|
25
|
+
super.copyFrom(other);
|
|
26
|
+
this.shininess = other.shininess;
|
|
27
|
+
}
|
|
28
|
+
/** Shininess */ get shininess() {
|
|
29
|
+
return this._shininess;
|
|
30
|
+
}
|
|
31
|
+
set shininess(val) {
|
|
32
|
+
if (val !== this._shininess) {
|
|
33
|
+
this._shininess = val;
|
|
34
|
+
this.uniformChanged();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
vertexShader(scope) {
|
|
38
|
+
super.vertexShader(scope);
|
|
39
|
+
if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {
|
|
40
|
+
scope.$outputs.zShininess = this.getInstancedUniform(scope, SHININESS_UNIFORM);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
fragmentShader(scope) {
|
|
44
|
+
super.fragmentShader(scope);
|
|
45
|
+
const pb = scope.$builder;
|
|
46
|
+
if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {
|
|
47
|
+
scope.zShininess = pb.float().uniform(2);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
applyUniformValues(bindGroup, ctx, pass) {
|
|
51
|
+
super.applyUniformValues(bindGroup, ctx, pass);
|
|
52
|
+
if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {
|
|
53
|
+
bindGroup.setValue('zShininess', this._shininess);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
blinnPhongLight(scope, worldPos, normal, viewVec, albedo, outRoughness) {
|
|
57
|
+
const pb = scope.$builder;
|
|
58
|
+
const funcName = 'Z_blinnPhongLight';
|
|
59
|
+
const that = this;
|
|
60
|
+
pb.func(funcName, [
|
|
61
|
+
pb.vec3('worldPos'),
|
|
62
|
+
pb.vec3('normal'),
|
|
63
|
+
pb.vec3('viewVec'),
|
|
64
|
+
pb.vec4('albedo'),
|
|
65
|
+
...outRoughness ? [
|
|
66
|
+
pb.vec4('outRoughness').out()
|
|
67
|
+
] : []
|
|
68
|
+
], function() {
|
|
69
|
+
if (!that.needFragmentColor()) {
|
|
70
|
+
this.$return(this.albedo.rgb);
|
|
71
|
+
} else {
|
|
72
|
+
const shininess = that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING ? this.$inputs.zShininess : this.zShininess;
|
|
73
|
+
if (that.needCalculateEnvLight() && !outRoughness) {
|
|
74
|
+
this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);
|
|
75
|
+
} else {
|
|
76
|
+
this.$l.diffuseColor = pb.vec3(0);
|
|
77
|
+
}
|
|
78
|
+
this.$l.specularColor = pb.vec3(0);
|
|
79
|
+
that.forEachLight(this, function(type, posRange, dirCutoff, colorIntensity, shadow) {
|
|
80
|
+
this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff);
|
|
81
|
+
this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);
|
|
82
|
+
this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);
|
|
83
|
+
this.$l.halfVec = pb.normalize(pb.add(this.viewVec, this.lightDir));
|
|
84
|
+
this.$l.NoH = pb.clamp(pb.dot(this.normal, this.halfVec), 0, 1);
|
|
85
|
+
this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);
|
|
86
|
+
this.$l.diffuse = pb.mul(this.lightColor, this.NoL);
|
|
87
|
+
this.$l.specular = pb.mul(this.lightColor, pb.pow(this.NoH, shininess));
|
|
88
|
+
if (shadow) {
|
|
89
|
+
this.$if(pb.greaterThan(this.NoL, 0), function() {
|
|
90
|
+
this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));
|
|
91
|
+
this.diffuse = pb.mul(this.diffuse, this.shadow);
|
|
92
|
+
this.specular = pb.mul(this.specular, this.shadow);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);
|
|
96
|
+
this.specularColor = pb.add(this.specularColor, this.specular);
|
|
97
|
+
});
|
|
98
|
+
this.$l.litColor = pb.add(pb.mul(this.albedo.rgb, this.diffuseColor), this.specularColor);
|
|
99
|
+
if (outRoughness) {
|
|
100
|
+
this.$l.roughness = pb.sqrt(pb.div(2, pb.add(shininess, 2)));
|
|
101
|
+
this.outRoughness = pb.vec4(pb.mul(this.albedo.rgb, pb.sub(1, this.roughness)), pb.mul(this.roughness, ShaderHelper.getCameraRoughnessFactor(this)));
|
|
102
|
+
}
|
|
103
|
+
this.$return(this.litColor);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
return outRoughness ? pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo, outRoughness) : pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { mixinBlinnPhong };
|
|
112
|
+
//# sourceMappingURL=blinnphong.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blinnphong.js","sources":["../../../../../src/material/mixins/lightmodel/blinnphong.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport type { DrawContext } from '../../../render';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport { MaterialVaryingFlags } from '../../../values';\r\n\r\n/**\r\n * Interface for blinn-phong lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinBlinnPhong = {\r\n shininess: number;\r\n blinnPhongLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ): PBShaderExp;\r\n} & IMixinLight;\r\n\r\n/**\r\n * Blinn-phong lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinBlinnPhong<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).blinnPhongMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinBlinnPhong };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinLight);\r\n const SHININESS_UNIFORM = S.defineInstanceUniform('shininess', 'float');\r\n return class extends S {\r\n protected static blinnPhongMixed = true;\r\n private _shininess: number;\r\n constructor() {\r\n super();\r\n this._shininess = 32;\r\n }\r\n copyFrom(other: this): void {\r\n super.copyFrom(other);\r\n this.shininess = other.shininess;\r\n }\r\n /** Shininess */\r\n get shininess(): number {\r\n return this._shininess;\r\n }\r\n set shininess(val: number) {\r\n if (val !== this._shininess) {\r\n this._shininess = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n vertexShader(scope: PBFunctionScope): void {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zShininess = this.getInstancedUniform(scope, SHININESS_UNIFORM);\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope): void {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n scope.zShininess = pb.float().uniform(2);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zShininess', this._shininess);\r\n }\r\n }\r\n blinnPhongLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_blinnPhongLight';\r\n const that = this;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.vec3('viewVec'),\r\n pb.vec4('albedo'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : [])\r\n ],\r\n function () {\r\n if (!that.needFragmentColor()) {\r\n this.$return(this.albedo.rgb);\r\n } else {\r\n const shininess =\r\n that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? this.$inputs.zShininess\r\n : this.zShininess;\r\n if (that.needCalculateEnvLight() && !outRoughness) {\r\n this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);\r\n } else {\r\n this.$l.diffuseColor = pb.vec3(0);\r\n }\r\n this.$l.specularColor = pb.vec3(0);\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, shadow) {\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.halfVec = pb.normalize(pb.add(this.viewVec, this.lightDir));\r\n this.$l.NoH = pb.clamp(pb.dot(this.normal, this.halfVec), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\r\n this.$l.diffuse = pb.mul(this.lightColor, this.NoL);\r\n this.$l.specular = pb.mul(this.lightColor, pb.pow(this.NoH, shininess));\r\n if (shadow) {\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));\r\n this.diffuse = pb.mul(this.diffuse, this.shadow);\r\n this.specular = pb.mul(this.specular, this.shadow);\r\n });\r\n }\r\n this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);\r\n this.specularColor = pb.add(this.specularColor, this.specular);\r\n });\r\n this.$l.litColor = pb.add(pb.mul(this.albedo.rgb, this.diffuseColor), this.specularColor);\r\n if (outRoughness) {\r\n this.$l.roughness = pb.sqrt(pb.div(2, pb.add(shininess, 2)));\r\n this.outRoughness = pb.vec4(\r\n pb.mul(this.albedo.rgb, pb.sub(1, this.roughness)),\r\n pb.mul(this.roughness, ShaderHelper.getCameraRoughnessFactor(this))\r\n );\r\n }\r\n this.$return(this.litColor);\r\n }\r\n }\r\n );\r\n return outRoughness\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo, outRoughness)\r\n : pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo);\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinBlinnPhong };\r\n}\r\n"],"names":["mixinBlinnPhong","BaseCls","blinnPhongMixed","S","applyMaterialMixins","mixinLight","SHININESS_UNIFORM","defineInstanceUniform","_shininess","copyFrom","other","shininess","val","uniformChanged","vertexShader","scope","needFragmentColor","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$outputs","zShininess","getInstancedUniform","fragmentShader","pb","$builder","float","uniform","applyUniformValues","bindGroup","ctx","pass","setValue","blinnPhongLight","worldPos","normal","viewVec","albedo","outRoughness","funcName","that","func","vec3","vec4","out","$return","rgb","$inputs","needCalculateEnvLight","$l","diffuseColor","getEnvLightIrradiance","specularColor","forEachLight","type","posRange","dirCutoff","colorIntensity","shadow","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","NoL","clamp","dot","halfVec","normalize","add","NoH","lightColor","mul","a","diffuse","specular","pow","$if","greaterThan","calculateShadow","litColor","roughness","sqrt","div","sub","ShaderHelper","getCameraRoughnessFactor","getGlobalScope"],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { applyMaterialMixins } from '../../meshmaterial.js';
|
|
2
|
+
import { mixinLight } from '../lit.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Lambert lighting model mixin
|
|
6
|
+
* @param BaseCls - Class to mix in
|
|
7
|
+
* @returns Mixed class
|
|
8
|
+
* @public
|
|
9
|
+
*/ function mixinLambert(BaseCls) {
|
|
10
|
+
if (BaseCls.lambertMixed) {
|
|
11
|
+
return BaseCls;
|
|
12
|
+
}
|
|
13
|
+
const S = applyMaterialMixins(BaseCls, mixinLight);
|
|
14
|
+
return class extends S {
|
|
15
|
+
static lambertMixed = true;
|
|
16
|
+
constructor(){
|
|
17
|
+
super();
|
|
18
|
+
}
|
|
19
|
+
lambertLight(scope, worldPos, normal, albedo) {
|
|
20
|
+
const pb = scope.$builder;
|
|
21
|
+
const funcName = 'Z_lambertLight';
|
|
22
|
+
const that = this;
|
|
23
|
+
pb.func(funcName, [
|
|
24
|
+
pb.vec3('worldPos'),
|
|
25
|
+
pb.vec3('normal'),
|
|
26
|
+
pb.vec4('albedo')
|
|
27
|
+
], function() {
|
|
28
|
+
if (!that.needFragmentColor()) {
|
|
29
|
+
this.$return(this.albedo.rgb);
|
|
30
|
+
} else {
|
|
31
|
+
if (that.needCalculateEnvLight()) {
|
|
32
|
+
this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);
|
|
33
|
+
} else {
|
|
34
|
+
this.$l.diffuseColor = pb.vec3(0);
|
|
35
|
+
}
|
|
36
|
+
that.forEachLight(this, function(type, posRange, dirCutoff, colorIntensity, shadow) {
|
|
37
|
+
this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff);
|
|
38
|
+
this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);
|
|
39
|
+
this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);
|
|
40
|
+
this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);
|
|
41
|
+
this.$l.diffuse = pb.mul(this.lightColor, this.NoL);
|
|
42
|
+
if (shadow) {
|
|
43
|
+
this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));
|
|
44
|
+
this.diffuse = pb.mul(this.diffuse, this.shadow);
|
|
45
|
+
}
|
|
46
|
+
this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);
|
|
47
|
+
});
|
|
48
|
+
this.$l.litColor = pb.mul(this.albedo.rgb, this.diffuseColor);
|
|
49
|
+
this.$return(this.litColor);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
return pb.getGlobalScope()[funcName](worldPos, normal, albedo);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { mixinLambert };
|
|
58
|
+
//# sourceMappingURL=lambert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lambert.js","sources":["../../../../../src/material/mixins/lightmodel/lambert.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\n\r\n/**\r\n * Interface of lambert lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinLambert = {\r\n lambertLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n albedo: PBShaderExp\r\n ): PBShaderExp;\r\n} & IMixinLight;\r\n\r\n/**\r\n * Lambert lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinLambert<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).lambertMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinLambert };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinLight);\r\n return class extends S {\r\n protected static lambertMixed = true;\r\n constructor() {\r\n super();\r\n }\r\n lambertLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n albedo: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_lambertLight';\r\n const that = this;\r\n pb.func(funcName, [pb.vec3('worldPos'), pb.vec3('normal'), pb.vec4('albedo')], function () {\r\n if (!that.needFragmentColor()) {\r\n this.$return(this.albedo.rgb);\r\n } else {\r\n if (that.needCalculateEnvLight()) {\r\n this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);\r\n } else {\r\n this.$l.diffuseColor = pb.vec3(0);\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, shadow) {\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\r\n this.$l.diffuse = pb.mul(this.lightColor, this.NoL);\r\n if (shadow) {\r\n this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));\r\n this.diffuse = pb.mul(this.diffuse, this.shadow);\r\n }\r\n this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);\r\n });\r\n this.$l.litColor = pb.mul(this.albedo.rgb, this.diffuseColor);\r\n this.$return(this.litColor);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](worldPos, normal, albedo);\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinLambert };\r\n}\r\n"],"names":["mixinLambert","BaseCls","lambertMixed","S","applyMaterialMixins","mixinLight","lambertLight","scope","worldPos","normal","albedo","pb","$builder","funcName","that","func","vec3","vec4","needFragmentColor","$return","rgb","needCalculateEnvLight","$l","diffuseColor","getEnvLightIrradiance","forEachLight","type","posRange","dirCutoff","colorIntensity","shadow","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","NoL","clamp","dot","lightColor","mul","a","diffuse","calculateShadow","add","litColor","getGlobalScope"],"mappings":"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"}
|