@zephyr3d/scene 0.9.4 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animationmask.js +224 -0
- package/dist/animation/animationmask.js.map +1 -0
- package/dist/animation/animationset.js +268 -67
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +3 -0
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +7 -0
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/ik_modifier.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +6 -4
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +390 -43
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +4 -3
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/joint_dynamics_modifier.js +2 -0
- package/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/animation/morphtarget.js +3 -72
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -0
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +3 -0
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/proptrack.js +3 -0
- package/dist/animation/proptrack.js.map +1 -1
- package/dist/animation/rotationtrack.js +3 -0
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +3 -0
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +254 -79
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/animation/translationtrack.js +3 -0
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/engine.js +171 -107
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptregistry.js +251 -80
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +344 -365
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/loader.js +1 -6
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
- package/dist/asset/model.js +1000 -131
- package/dist/asset/model.js.map +1 -1
- package/dist/avatar/wardrobe.js +474 -0
- package/dist/avatar/wardrobe.js.map +1 -0
- package/dist/index.d.ts +1126 -199
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +72 -15
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/msdf_text.js +3 -3
- package/dist/material/msdf_text.js.map +1 -1
- package/dist/material/msdf_text_sprite.js +4 -4
- package/dist/material/msdf_text_sprite.js.map +1 -1
- package/dist/material/pbrblueprint.js +102 -102
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/render/envlight.js +54 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/sky.js +9 -0
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/batchgroup.js +11 -13
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +15 -2
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/mesh.js +79 -16
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/scene.js +1 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +203 -2
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/text/font/cff_font.js +890 -0
- package/dist/text/font/cff_font.js.map +1 -0
- package/dist/text/font/font_asset.js +17 -3
- package/dist/text/font/font_asset.js.map +1 -1
- package/dist/text/msdf/generator.js.map +1 -1
- package/dist/text/msdf/shape.js +4 -1
- package/dist/text/msdf/shape.js.map +1 -1
- package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
- package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js +1157 -1154
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/pmrem.js +34 -8
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/serialization/manager.js +22 -9
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +700 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +64 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +187 -8
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/textures/sheenlut.js +138 -0
- package/dist/utility/textures/sheenlut.js.map +1 -0
- package/package.json +2 -2
- package/dist/animation/ik/ik_chain_builder.js +0 -68
- package/dist/animation/ik/ik_chain_builder.js.map +0 -1
- package/dist/animation/ik/ik_pole_constraint.js +0 -123
- package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
- package/dist/animation/ik/ik_track.js +0 -96
- package/dist/animation/ik/ik_track.js.map +0 -1
- package/dist/animation/ik_postprocessor.js +0 -71
- package/dist/animation/ik_postprocessor.js.map +0 -1
- package/dist/animation/joint_dynamics/math.js +0 -16
- package/dist/animation/joint_dynamics/math.js.map +0 -1
- package/dist/animation/manual_transform_processor.js +0 -156
- package/dist/animation/manual_transform_processor.js.map +0 -1
- package/dist/animation/skeleton_postprocessor.js +0 -50
- package/dist/animation/skeleton_postprocessor.js.map +0 -1
- package/dist/animation/spring2/collision.js +0 -469
- package/dist/animation/spring2/collision.js.map +0 -1
- package/dist/animation/spring2/constraints.js +0 -329
- package/dist/animation/spring2/constraints.js.map +0 -1
- package/dist/animation/spring2/controller.js +0 -434
- package/dist/animation/spring2/controller.js.map +0 -1
- package/dist/animation/spring2/math.js +0 -16
- package/dist/animation/spring2/math.js.map +0 -1
- package/dist/animation/spring2/solver.js +0 -624
- package/dist/animation/spring2/solver.js.map +0 -1
- package/dist/animation/spring2/spring_system.js +0 -118
- package/dist/animation/spring2/spring_system.js.map +0 -1
- package/dist/animation/spring2/types.js +0 -19
- package/dist/animation/spring2/types.js.map +0 -1
- package/dist/animation/spring_postprocessor.js +0 -54
- package/dist/animation/spring_postprocessor.js.map +0 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +0 -1273
- package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
- package/dist/asset/loaders/gltf/helpers.js +0 -331
- package/dist/asset/loaders/gltf/helpers.js.map +0 -1
- package/dist/material/sprite3d.js +0 -301
- package/dist/material/sprite3d.js.map +0 -1
- package/dist/material/sprite3d_std.js +0 -116
- package/dist/material/sprite3d_std.js.map +0 -1
- package/dist/material/sprite3dblueprint.js +0 -235
- package/dist/material/sprite3dblueprint.js.map +0 -1
- package/dist/material/sprite_sdf.js +0 -106
- package/dist/material/sprite_sdf.js.map +0 -1
- package/dist/material/terrainmaterial.js +0 -368
- package/dist/material/terrainmaterial.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
- package/dist/render/deferredlightpass.js +0 -510
- package/dist/render/deferredlightpass.js.map +0 -1
- package/dist/render/deferredshadowlightpass.js +0 -428
- package/dist/render/deferredshadowlightpass.js.map +0 -1
- package/dist/render/gbufferpass.js +0 -50
- package/dist/render/gbufferpass.js.map +0 -1
- package/dist/scene/sdftextsprite.js +0 -322
- package/dist/scene/sdftextsprite.js.map +0 -1
- package/dist/scene/sprite3d.js +0 -18
- package/dist/scene/sprite3d.js.map +0 -1
- package/dist/scene/terrain/grass.js +0 -280
- package/dist/scene/terrain/grass.js.map +0 -1
- package/dist/scene/terrain/heightfield.js +0 -475
- package/dist/scene/terrain/heightfield.js.map +0 -1
- package/dist/scene/terrain/patch.js +0 -532
- package/dist/scene/terrain/patch.js.map +0 -1
- package/dist/scene/terrain/quadtree.js +0 -461
- package/dist/scene/terrain/quadtree.js.map +0 -1
- package/dist/scene/terrain/terrain.js +0 -231
- package/dist/scene/terrain/terrain.js.map +0 -1
- package/dist/src/animation/animation.js +0 -127
- package/dist/src/animation/animation.js.map +0 -1
- package/dist/src/animation/animationset.js +0 -255
- package/dist/src/animation/animationset.js.map +0 -1
- package/dist/src/animation/animationtrack.js +0 -34
- package/dist/src/animation/animationtrack.js.map +0 -1
- package/dist/src/animation/eulerrotationtrack.js +0 -52
- package/dist/src/animation/eulerrotationtrack.js.map +0 -1
- package/dist/src/animation/morphtarget.js +0 -93
- package/dist/src/animation/morphtarget.js.map +0 -1
- package/dist/src/animation/morphtrack.js +0 -70
- package/dist/src/animation/morphtrack.js.map +0 -1
- package/dist/src/animation/proptrack.js +0 -161
- package/dist/src/animation/proptrack.js.map +0 -1
- package/dist/src/animation/rotationtrack.js +0 -51
- package/dist/src/animation/rotationtrack.js.map +0 -1
- package/dist/src/animation/scaletrack.js +0 -50
- package/dist/src/animation/scaletrack.js.map +0 -1
- package/dist/src/animation/skeleton.js +0 -204
- package/dist/src/animation/skeleton.js.map +0 -1
- package/dist/src/animation/translationtrack.js +0 -50
- package/dist/src/animation/translationtrack.js.map +0 -1
- package/dist/src/app/app.js +0 -129
- package/dist/src/app/app.js.map +0 -1
- package/dist/src/app/inputmgr.js +0 -267
- package/dist/src/app/inputmgr.js.map +0 -1
- package/dist/src/asset/assetmanager.js +0 -404
- package/dist/src/asset/assetmanager.js.map +0 -1
- package/dist/src/asset/builtin.js +0 -337
- package/dist/src/asset/builtin.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds.js +0 -470
- package/dist/src/asset/loaders/dds/dds.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
- package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/helpers.js +0 -327
- package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
- package/dist/src/asset/loaders/hdr/hdr.js +0 -180
- package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
- package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
- package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
- package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
- package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
- package/dist/src/asset/loaders/loader.js +0 -45
- package/dist/src/asset/loaders/loader.js.map +0 -1
- package/dist/src/asset/model.js +0 -414
- package/dist/src/asset/model.js.map +0 -1
- package/dist/src/blitter/bilateralblur.js +0 -221
- package/dist/src/blitter/bilateralblur.js.map +0 -1
- package/dist/src/blitter/blitter.js +0 -390
- package/dist/src/blitter/blitter.js.map +0 -1
- package/dist/src/blitter/box.js +0 -118
- package/dist/src/blitter/box.js.map +0 -1
- package/dist/src/blitter/copy.js +0 -22
- package/dist/src/blitter/copy.js.map +0 -1
- package/dist/src/blitter/gaussianblur.js +0 -228
- package/dist/src/blitter/gaussianblur.js.map +0 -1
- package/dist/src/camera/base.js +0 -92
- package/dist/src/camera/base.js.map +0 -1
- package/dist/src/camera/camera.js +0 -1005
- package/dist/src/camera/camera.js.map +0 -1
- package/dist/src/camera/fps.js +0 -238
- package/dist/src/camera/fps.js.map +0 -1
- package/dist/src/camera/orbit.js +0 -245
- package/dist/src/camera/orbit.js.map +0 -1
- package/dist/src/camera/orthocamera.js +0 -167
- package/dist/src/camera/orthocamera.js.map +0 -1
- package/dist/src/camera/perspectivecamera.js +0 -141
- package/dist/src/camera/perspectivecamera.js.map +0 -1
- package/dist/src/index.js +0 -120
- package/dist/src/index.js.map +0 -1
- package/dist/src/material/blinn.js +0 -81
- package/dist/src/material/blinn.js.map +0 -1
- package/dist/src/material/grassmaterial.js +0 -113
- package/dist/src/material/grassmaterial.js.map +0 -1
- package/dist/src/material/lambert.js +0 -92
- package/dist/src/material/lambert.js.map +0 -1
- package/dist/src/material/material.js +0 -301
- package/dist/src/material/material.js.map +0 -1
- package/dist/src/material/meshmaterial.js +0 -704
- package/dist/src/material/meshmaterial.js.map +0 -1
- package/dist/src/material/mixins/albedocolor.js +0 -76
- package/dist/src/material/mixins/albedocolor.js.map +0 -1
- package/dist/src/material/mixins/foliage.js +0 -47
- package/dist/src/material/mixins/foliage.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
- package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
- package/dist/src/material/mixins/lit.js +0 -476
- package/dist/src/material/mixins/lit.js.map +0 -1
- package/dist/src/material/mixins/pbr/common.js +0 -918
- package/dist/src/material/mixins/pbr/common.js.map +0 -1
- package/dist/src/material/mixins/texture.js +0 -172
- package/dist/src/material/mixins/texture.js.map +0 -1
- package/dist/src/material/mixins/vertexcolor.js +0 -56
- package/dist/src/material/mixins/vertexcolor.js.map +0 -1
- package/dist/src/material/particle.js +0 -178
- package/dist/src/material/particle.js.map +0 -1
- package/dist/src/material/pbrmr.js +0 -97
- package/dist/src/material/pbrmr.js.map +0 -1
- package/dist/src/material/pbrsg.js +0 -97
- package/dist/src/material/pbrsg.js.map +0 -1
- package/dist/src/material/shader/helper.js +0 -1209
- package/dist/src/material/shader/helper.js.map +0 -1
- package/dist/src/material/terrain-cm.js +0 -606
- package/dist/src/material/terrain-cm.js.map +0 -1
- package/dist/src/material/terrainmaterial.js +0 -375
- package/dist/src/material/terrainmaterial.js.map +0 -1
- package/dist/src/material/unlit.js +0 -41
- package/dist/src/material/unlit.js.map +0 -1
- package/dist/src/material/water.js +0 -417
- package/dist/src/material/water.js.map +0 -1
- package/dist/src/posteffect/bloom.js +0 -361
- package/dist/src/posteffect/bloom.js.map +0 -1
- package/dist/src/posteffect/compositor.js +0 -226
- package/dist/src/posteffect/compositor.js.map +0 -1
- package/dist/src/posteffect/fxaa.js +0 -273
- package/dist/src/posteffect/fxaa.js.map +0 -1
- package/dist/src/posteffect/grayscale.js +0 -69
- package/dist/src/posteffect/grayscale.js.map +0 -1
- package/dist/src/posteffect/motionblur.js +0 -96
- package/dist/src/posteffect/motionblur.js.map +0 -1
- package/dist/src/posteffect/posteffect.js +0 -126
- package/dist/src/posteffect/posteffect.js.map +0 -1
- package/dist/src/posteffect/sao.js +0 -324
- package/dist/src/posteffect/sao.js.map +0 -1
- package/dist/src/posteffect/ssr.js +0 -489
- package/dist/src/posteffect/ssr.js.map +0 -1
- package/dist/src/posteffect/taa.js +0 -172
- package/dist/src/posteffect/taa.js.map +0 -1
- package/dist/src/posteffect/tonemap.js +0 -94
- package/dist/src/posteffect/tonemap.js.map +0 -1
- package/dist/src/render/abuffer_oit.js +0 -361
- package/dist/src/render/abuffer_oit.js.map +0 -1
- package/dist/src/render/clipmap.js +0 -851
- package/dist/src/render/clipmap.js.map +0 -1
- package/dist/src/render/cluster_light.js +0 -333
- package/dist/src/render/cluster_light.js.map +0 -1
- package/dist/src/render/cull_visitor.js +0 -187
- package/dist/src/render/cull_visitor.js.map +0 -1
- package/dist/src/render/depthpass.js +0 -68
- package/dist/src/render/depthpass.js.map +0 -1
- package/dist/src/render/drawable_mixin.js +0 -227
- package/dist/src/render/drawable_mixin.js.map +0 -1
- package/dist/src/render/envlight.js +0 -463
- package/dist/src/render/envlight.js.map +0 -1
- package/dist/src/render/fbm_wavegenerator.js +0 -251
- package/dist/src/render/fbm_wavegenerator.js.map +0 -1
- package/dist/src/render/fft_wavegenerator.js +0 -1006
- package/dist/src/render/fft_wavegenerator.js.map +0 -1
- package/dist/src/render/fullscreenquad.js +0 -38
- package/dist/src/render/fullscreenquad.js.map +0 -1
- package/dist/src/render/gerstner_wavegenerator.js +0 -314
- package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
- package/dist/src/render/globalbindgroup_allocator.js +0 -60
- package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
- package/dist/src/render/hzb.js +0 -273
- package/dist/src/render/hzb.js.map +0 -1
- package/dist/src/render/lightpass.js +0 -172
- package/dist/src/render/lightpass.js.map +0 -1
- package/dist/src/render/objectcolorpass.js +0 -51
- package/dist/src/render/objectcolorpass.js.map +0 -1
- package/dist/src/render/primitive.js +0 -364
- package/dist/src/render/primitive.js.map +0 -1
- package/dist/src/render/render_queue.js +0 -467
- package/dist/src/render/render_queue.js.map +0 -1
- package/dist/src/render/renderbundle_wrapper.js +0 -152
- package/dist/src/render/renderbundle_wrapper.js.map +0 -1
- package/dist/src/render/renderer.js +0 -455
- package/dist/src/render/renderer.js.map +0 -1
- package/dist/src/render/renderpass.js +0 -200
- package/dist/src/render/renderpass.js.map +0 -1
- package/dist/src/render/shadowmap_pass.js +0 -56
- package/dist/src/render/shadowmap_pass.js.map +0 -1
- package/dist/src/render/sky.js +0 -1103
- package/dist/src/render/sky.js.map +0 -1
- package/dist/src/render/weightedblended_oit.js +0 -168
- package/dist/src/render/weightedblended_oit.js.map +0 -1
- package/dist/src/scene/batchgroup.js +0 -162
- package/dist/src/scene/batchgroup.js.map +0 -1
- package/dist/src/scene/environment.js +0 -209
- package/dist/src/scene/environment.js.map +0 -1
- package/dist/src/scene/graph_node.js +0 -72
- package/dist/src/scene/graph_node.js.map +0 -1
- package/dist/src/scene/light.js +0 -416
- package/dist/src/scene/light.js.map +0 -1
- package/dist/src/scene/mesh.js +0 -341
- package/dist/src/scene/mesh.js.map +0 -1
- package/dist/src/scene/octree.js +0 -649
- package/dist/src/scene/octree.js.map +0 -1
- package/dist/src/scene/particlesys.js +0 -738
- package/dist/src/scene/particlesys.js.map +0 -1
- package/dist/src/scene/raycast_visitor.js +0 -103
- package/dist/src/scene/raycast_visitor.js.map +0 -1
- package/dist/src/scene/scene.js +0 -284
- package/dist/src/scene/scene.js.map +0 -1
- package/dist/src/scene/scene_node.js +0 -732
- package/dist/src/scene/scene_node.js.map +0 -1
- package/dist/src/scene/terrain/grass.js +0 -278
- package/dist/src/scene/terrain/grass.js.map +0 -1
- package/dist/src/scene/terrain/heightfield.js +0 -475
- package/dist/src/scene/terrain/heightfield.js.map +0 -1
- package/dist/src/scene/terrain/patch.js +0 -530
- package/dist/src/scene/terrain/patch.js.map +0 -1
- package/dist/src/scene/terrain/quadtree.js +0 -461
- package/dist/src/scene/terrain/quadtree.js.map +0 -1
- package/dist/src/scene/terrain/terrain.js +0 -246
- package/dist/src/scene/terrain/terrain.js.map +0 -1
- package/dist/src/scene/terrain-cm/grass.js +0 -594
- package/dist/src/scene/terrain-cm/grass.js.map +0 -1
- package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
- package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
- package/dist/src/scene/water.js +0 -374
- package/dist/src/scene/water.js.map +0 -1
- package/dist/src/shaders/atmosphere.js +0 -957
- package/dist/src/shaders/atmosphere.js.map +0 -1
- package/dist/src/shaders/fog.js +0 -112
- package/dist/src/shaders/fog.js.map +0 -1
- package/dist/src/shaders/misc.js +0 -266
- package/dist/src/shaders/misc.js.map +0 -1
- package/dist/src/shaders/noise.js +0 -222
- package/dist/src/shaders/noise.js.map +0 -1
- package/dist/src/shaders/pbr.js +0 -51
- package/dist/src/shaders/pbr.js.map +0 -1
- package/dist/src/shaders/shadow.js +0 -636
- package/dist/src/shaders/shadow.js.map +0 -1
- package/dist/src/shaders/ssr.js +0 -490
- package/dist/src/shaders/ssr.js.map +0 -1
- package/dist/src/shaders/temporal.js +0 -215
- package/dist/src/shaders/temporal.js.map +0 -1
- package/dist/src/shaders/water.js +0 -756
- package/dist/src/shaders/water.js.map +0 -1
- package/dist/src/shadow/esm.js +0 -237
- package/dist/src/shadow/esm.js.map +0 -1
- package/dist/src/shadow/pcf_opt.js +0 -181
- package/dist/src/shadow/pcf_opt.js.map +0 -1
- package/dist/src/shadow/pcf_pd.js +0 -189
- package/dist/src/shadow/pcf_pd.js.map +0 -1
- package/dist/src/shadow/shader.js +0 -37
- package/dist/src/shadow/shader.js.map +0 -1
- package/dist/src/shadow/shadow_impl.js +0 -15
- package/dist/src/shadow/shadow_impl.js.map +0 -1
- package/dist/src/shadow/shadowmapper.js +0 -790
- package/dist/src/shadow/shadowmapper.js.map +0 -1
- package/dist/src/shadow/ssm.js +0 -159
- package/dist/src/shadow/ssm.js.map +0 -1
- package/dist/src/shadow/vsm.js +0 -297
- package/dist/src/shadow/vsm.js.map +0 -1
- package/dist/src/shapes/box.js +0 -386
- package/dist/src/shapes/box.js.map +0 -1
- package/dist/src/shapes/cylinder.js +0 -125
- package/dist/src/shapes/cylinder.js.map +0 -1
- package/dist/src/shapes/plane.js +0 -88
- package/dist/src/shapes/plane.js.map +0 -1
- package/dist/src/shapes/shape.js +0 -87
- package/dist/src/shapes/shape.js.map +0 -1
- package/dist/src/shapes/sphere.js +0 -114
- package/dist/src/shapes/sphere.js.map +0 -1
- package/dist/src/shapes/tetrahedron.js +0 -188
- package/dist/src/shapes/tetrahedron.js.map +0 -1
- package/dist/src/shapes/torus.js +0 -111
- package/dist/src/shapes/torus.js.map +0 -1
- package/dist/src/utility/aabbtree.js +0 -400
- package/dist/src/utility/aabbtree.js.map +0 -1
- package/dist/src/utility/bounding_volume.js +0 -29
- package/dist/src/utility/bounding_volume.js.map +0 -1
- package/dist/src/utility/debug.js +0 -28
- package/dist/src/utility/debug.js.map +0 -1
- package/dist/src/utility/draco/decoder.js +0 -116
- package/dist/src/utility/draco/decoder.js.map +0 -1
- package/dist/src/utility/misc.js +0 -105
- package/dist/src/utility/misc.js.map +0 -1
- package/dist/src/utility/panorama.js +0 -163
- package/dist/src/utility/panorama.js.map +0 -1
- package/dist/src/utility/pmrem.js +0 -354
- package/dist/src/utility/pmrem.js.map +0 -1
- package/dist/src/utility/rendermipmap.js +0 -115
- package/dist/src/utility/rendermipmap.js.map +0 -1
- package/dist/src/utility/serialization/json.js +0 -402
- package/dist/src/utility/serialization/json.js.map +0 -1
- package/dist/src/utility/serialization/manager.js +0 -623
- package/dist/src/utility/serialization/manager.js.map +0 -1
- package/dist/src/utility/serialization/scene/animation.js +0 -248
- package/dist/src/utility/serialization/scene/animation.js.map +0 -1
- package/dist/src/utility/serialization/scene/batch.js +0 -59
- package/dist/src/utility/serialization/scene/batch.js.map +0 -1
- package/dist/src/utility/serialization/scene/camera.js +0 -790
- package/dist/src/utility/serialization/scene/camera.js.map +0 -1
- package/dist/src/utility/serialization/scene/common.js +0 -222
- package/dist/src/utility/serialization/scene/common.js.map +0 -1
- package/dist/src/utility/serialization/scene/light.js +0 -575
- package/dist/src/utility/serialization/scene/light.js.map +0 -1
- package/dist/src/utility/serialization/scene/material.js +0 -1111
- package/dist/src/utility/serialization/scene/material.js.map +0 -1
- package/dist/src/utility/serialization/scene/mesh.js +0 -148
- package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
- package/dist/src/utility/serialization/scene/misc.js +0 -39
- package/dist/src/utility/serialization/scene/misc.js.map +0 -1
- package/dist/src/utility/serialization/scene/node.js +0 -451
- package/dist/src/utility/serialization/scene/node.js.map +0 -1
- package/dist/src/utility/serialization/scene/particle.js +0 -425
- package/dist/src/utility/serialization/scene/particle.js.map +0 -1
- package/dist/src/utility/serialization/scene/primitive.js +0 -692
- package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
- package/dist/src/utility/serialization/scene/scene.js +0 -704
- package/dist/src/utility/serialization/scene/scene.js.map +0 -1
- package/dist/src/utility/serialization/scene/terrain.js +0 -488
- package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
- package/dist/src/utility/serialization/scene/water.js +0 -465
- package/dist/src/utility/serialization/scene/water.js.map +0 -1
- package/dist/src/utility/shprojector.js +0 -297
- package/dist/src/utility/shprojector.js.map +0 -1
- package/dist/src/utility/textures/ggxlut.js +0 -213
- package/dist/src/utility/textures/ggxlut.js.map +0 -1
- package/dist/src/utility/textures/gradientnoise.js +0 -62
- package/dist/src/utility/textures/gradientnoise.js.map +0 -1
- package/dist/src/utility/textures/randomnoise.js +0 -41
- package/dist/src/utility/textures/randomnoise.js.map +0 -1
- package/dist/src/values.js +0 -162
- package/dist/src/values.js.map +0 -1
- package/dist/utility/blueprint/material/common.js +0 -7
- package/dist/utility/blueprint/material/common.js.map +0 -1
- package/dist/utility/serialization/blueprint/constants.js +0 -255
- package/dist/utility/serialization/blueprint/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/constants.js +0 -203
- package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/texture.js +0 -165
- package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
- package/dist/utility/serialization/scene/cloth_script.js +0 -834
- package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
- package/dist/utility/serialization/scene/spring_script.js +0 -596
- package/dist/utility/serialization/scene/spring_script.js.map +0 -1
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
import { Vector3, Vector2 } from '@zephyr3d/base';
|
|
2
|
-
import { Application } from '../app/app.js';
|
|
3
|
-
|
|
4
|
-
let vertexLayout = null;
|
|
5
|
-
let renderStates = null;
|
|
6
|
-
const programs = {};
|
|
7
|
-
const faceDirections = [
|
|
8
|
-
[
|
|
9
|
-
new Vector3(0, 0, -1),
|
|
10
|
-
new Vector3(0, -1, 0),
|
|
11
|
-
new Vector3(1, 0, 0)
|
|
12
|
-
],
|
|
13
|
-
[
|
|
14
|
-
new Vector3(0, 0, 1),
|
|
15
|
-
new Vector3(0, -1, 0),
|
|
16
|
-
new Vector3(-1, 0, 0)
|
|
17
|
-
],
|
|
18
|
-
[
|
|
19
|
-
new Vector3(1, 0, 0),
|
|
20
|
-
new Vector3(0, 0, 1),
|
|
21
|
-
new Vector3(0, 1, 0)
|
|
22
|
-
],
|
|
23
|
-
[
|
|
24
|
-
new Vector3(1, 0, 0),
|
|
25
|
-
new Vector3(0, 0, -1),
|
|
26
|
-
new Vector3(0, -1, 0)
|
|
27
|
-
],
|
|
28
|
-
[
|
|
29
|
-
new Vector3(1, 0, 0),
|
|
30
|
-
new Vector3(0, -1, 0),
|
|
31
|
-
new Vector3(0, 0, 1)
|
|
32
|
-
],
|
|
33
|
-
[
|
|
34
|
-
new Vector3(-1, 0, 0),
|
|
35
|
-
new Vector3(0, -1, 0),
|
|
36
|
-
new Vector3(0, 0, -1)
|
|
37
|
-
]
|
|
38
|
-
];
|
|
39
|
-
function init() {
|
|
40
|
-
const device = Application.instance.device;
|
|
41
|
-
const vertices = new Float32Array([
|
|
42
|
-
1,
|
|
43
|
-
1,
|
|
44
|
-
-1,
|
|
45
|
-
1,
|
|
46
|
-
-1,
|
|
47
|
-
-1,
|
|
48
|
-
1,
|
|
49
|
-
-1
|
|
50
|
-
]);
|
|
51
|
-
const indices = new Uint16Array([
|
|
52
|
-
0,
|
|
53
|
-
1,
|
|
54
|
-
2,
|
|
55
|
-
0,
|
|
56
|
-
2,
|
|
57
|
-
3
|
|
58
|
-
]);
|
|
59
|
-
vertexLayout = device.createVertexLayout({
|
|
60
|
-
vertexBuffers: [
|
|
61
|
-
{
|
|
62
|
-
buffer: device.createVertexBuffer('position_f32x2', vertices)
|
|
63
|
-
}
|
|
64
|
-
],
|
|
65
|
-
indexBuffer: device.createIndexBuffer(indices)
|
|
66
|
-
});
|
|
67
|
-
renderStates = device.createRenderStateSet();
|
|
68
|
-
renderStates.useRasterizerState().setCullMode('none');
|
|
69
|
-
renderStates.useDepthState().enableTest(false).enableWrite(false);
|
|
70
|
-
}
|
|
71
|
-
function getProgramInfo(type, numSamples) {
|
|
72
|
-
const device = Application.instance.device;
|
|
73
|
-
const hash = `${type}:${numSamples}`;
|
|
74
|
-
let ret = programs[hash];
|
|
75
|
-
if (!ret) {
|
|
76
|
-
const program = createPMREMProgram(type, numSamples);
|
|
77
|
-
const bindgroup = device.createBindGroup(program.bindGroupLayouts[0]);
|
|
78
|
-
programs[hash] = ret = {
|
|
79
|
-
program,
|
|
80
|
-
bindgroup
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
return ret;
|
|
84
|
-
}
|
|
85
|
-
function createPMREMProgram(type, numSamples) {
|
|
86
|
-
const device = Application.instance.device;
|
|
87
|
-
const pb = device;
|
|
88
|
-
return pb.buildRenderProgram({
|
|
89
|
-
vertex (pb) {
|
|
90
|
-
this.$inputs.pos = pb.vec2().attrib('position');
|
|
91
|
-
this.up = pb.vec3().uniform(0);
|
|
92
|
-
this.right = pb.vec3().uniform(0);
|
|
93
|
-
this.front = pb.vec3().uniform(0);
|
|
94
|
-
pb.main(function() {
|
|
95
|
-
this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);
|
|
96
|
-
this.$outputs.direction = pb.mul(pb.mat3(this.up, this.right, this.front), pb.vec3(this.$inputs.pos, 1));
|
|
97
|
-
if (device.type === 'webgpu') {
|
|
98
|
-
this.$builtins.position.y = pb.neg(this.$builtins.position.y);
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
},
|
|
102
|
-
fragment (pb) {
|
|
103
|
-
if (type === 'ggx') {
|
|
104
|
-
this.alphaG = pb.float().uniform(0);
|
|
105
|
-
}
|
|
106
|
-
this.vFilteringInfo = pb.vec2().uniform(0);
|
|
107
|
-
this.hdrScale = pb.float().uniform(0);
|
|
108
|
-
this.inputTexture = pb.texCube().uniform(0);
|
|
109
|
-
this.NUM_SAMPLES_FLOAT = pb.float(numSamples);
|
|
110
|
-
this.NUM_SAMPLES_FLOAT_INVERSED = pb.float(1 / numSamples);
|
|
111
|
-
this.K = pb.float(4);
|
|
112
|
-
this.$outputs.outcolor = pb.vec4();
|
|
113
|
-
if (device.type === 'webgl') {
|
|
114
|
-
pb.func('radicalInverse_VdC', [
|
|
115
|
-
pb.int('bits')
|
|
116
|
-
], function() {
|
|
117
|
-
this.$l.rand = pb.float(0);
|
|
118
|
-
this.$l.denom = pb.float(1);
|
|
119
|
-
this.$l.invBase = pb.float(0.5);
|
|
120
|
-
this.$l.n = this.bits;
|
|
121
|
-
this.$for(pb.int('i'), 0, 32, function() {
|
|
122
|
-
this.denom = pb.mul(this.denom, 2);
|
|
123
|
-
this.rand = pb.add(this.rand, pb.div(pb.mod(pb.float(this.n), 2), this.denom));
|
|
124
|
-
this.n = pb.div(this.n, 2);
|
|
125
|
-
this.$if(pb.equal(this.n, 0), function() {
|
|
126
|
-
this.$break();
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
this.$return(this.rand);
|
|
130
|
-
});
|
|
131
|
-
pb.func('hammersley2d', [
|
|
132
|
-
pb.int('i'),
|
|
133
|
-
pb.int('N')
|
|
134
|
-
], function() {
|
|
135
|
-
this.$return(pb.vec2(pb.div(pb.float(this.i), pb.float(this.N)), this.radicalInverse_VdC(this.i)));
|
|
136
|
-
});
|
|
137
|
-
} else {
|
|
138
|
-
pb.func('radicalInverse_VdC', [
|
|
139
|
-
pb.uint('bits')
|
|
140
|
-
], function() {
|
|
141
|
-
this.$l.n = this.bits;
|
|
142
|
-
this.n = pb.compOr(pb.sal(this.n, 16), pb.sar(this.n, 16));
|
|
143
|
-
this.n = pb.compOr(pb.sal(pb.compAnd(this.n, 0x55555555), 1), pb.sar(pb.compAnd(this.n, 0xaaaaaaaa), 1));
|
|
144
|
-
this.n = pb.compOr(pb.sal(pb.compAnd(this.n, 0x33333333), 2), pb.sar(pb.compAnd(this.n, 0xcccccccc), 2));
|
|
145
|
-
this.n = pb.compOr(pb.sal(pb.compAnd(this.n, 0x0f0f0f0f), 4), pb.sar(pb.compAnd(this.n, 0xf0f0f0f0), 4));
|
|
146
|
-
this.n = pb.compOr(pb.sal(pb.compAnd(this.n, 0x00ff00ff), 8), pb.sar(pb.compAnd(this.n, 0xff00ff00), 8));
|
|
147
|
-
this.$return(pb.mul(pb.float(this.n), 2.3283064365386963e-10));
|
|
148
|
-
});
|
|
149
|
-
pb.func('hammersley2d', [
|
|
150
|
-
pb.int('i'),
|
|
151
|
-
pb.int('N')
|
|
152
|
-
], function() {
|
|
153
|
-
this.$return(pb.vec2(pb.div(pb.float(this.i), pb.float(this.N)), this.radicalInverse_VdC(pb.uint(this.i))));
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
pb.func('log4', [
|
|
157
|
-
pb.float('x')
|
|
158
|
-
], function() {
|
|
159
|
-
this.$return(pb.mul(pb.log2(this.x), 0.5));
|
|
160
|
-
});
|
|
161
|
-
if (type === 'lambertian') {
|
|
162
|
-
pb.func('hemisphereCosSample', [
|
|
163
|
-
pb.vec2('u')
|
|
164
|
-
], function() {
|
|
165
|
-
this.$l.phi = pb.mul(this.u.x, 2 * Math.PI);
|
|
166
|
-
this.$l.cosTheta2 = pb.sub(1, this.u.y);
|
|
167
|
-
this.$l.cosTheta = pb.sqrt(this.cosTheta2);
|
|
168
|
-
this.$l.sinTheta = pb.sqrt(pb.sub(1, this.cosTheta2));
|
|
169
|
-
this.$return(pb.vec3(pb.mul(this.sinTheta, pb.cos(this.phi)), pb.mul(this.sinTheta, pb.sin(this.phi)), this.cosTheta));
|
|
170
|
-
});
|
|
171
|
-
pb.func('irradiance', [
|
|
172
|
-
pb.vec3('direction'),
|
|
173
|
-
pb.vec2('vFilteringInfo')
|
|
174
|
-
], function() {
|
|
175
|
-
this.$l.n = pb.normalize(this.direction);
|
|
176
|
-
this.$l.result = pb.vec3(0);
|
|
177
|
-
this.$l.tangent = pb.vec3();
|
|
178
|
-
this.$if(pb.lessThan(pb.abs(this.n.z), 0.999), function() {
|
|
179
|
-
this.tangent = pb.vec3(0, 0, 1);
|
|
180
|
-
}).$else(function() {
|
|
181
|
-
this.tangent = pb.vec3(1, 0, 0);
|
|
182
|
-
});
|
|
183
|
-
this.tangent = pb.normalize(pb.cross(this.tangent, this.n));
|
|
184
|
-
this.$l.bitangent = pb.cross(this.n, this.tangent);
|
|
185
|
-
this.$l.tbn = pb.mat3(this.tangent, this.bitangent, this.n);
|
|
186
|
-
this.$l.maxLevel = this.vFilteringInfo.y;
|
|
187
|
-
this.$l.dim0 = this.vFilteringInfo.x;
|
|
188
|
-
this.$l.omegaP = pb.div(4 * Math.PI, pb.mul(this.dim0, this.dim0, 6));
|
|
189
|
-
this.$for(pb.int('i'), 0, numSamples, function() {
|
|
190
|
-
this.$l.Xi = this.hammersley2d(this.i, numSamples);
|
|
191
|
-
this.$l.Ls = pb.normalize(this.hemisphereCosSample(this.Xi));
|
|
192
|
-
this.$l.Ns = pb.vec3(0, 0, 1);
|
|
193
|
-
this.$l.NoL = pb.dot(this.Ns, this.Ls);
|
|
194
|
-
this.$if(pb.greaterThan(this.NoL, 0), function() {
|
|
195
|
-
this.$l.pdf_inversed = pb.div(Math.PI, this.NoL);
|
|
196
|
-
this.$l.omegaS = pb.mul(this.pdf_inversed, this.NUM_SAMPLES_FLOAT_INVERSED);
|
|
197
|
-
this.$l.l = pb.add(pb.sub(this.log4(this.omegaS), this.log4(this.omegaP)), this.log4(this.K));
|
|
198
|
-
this.$l.mipLevel = pb.clamp(this.l, 0, this.maxLevel);
|
|
199
|
-
this.$l.c = pb.textureSampleLevel(this.inputTexture, pb.mul(this.tbn, this.Ls), this.mipLevel).rgb;
|
|
200
|
-
this.result = pb.add(this.result, this.c);
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
this.result = pb.mul(this.result, this.NUM_SAMPLES_FLOAT_INVERSED);
|
|
204
|
-
this.$return(this.result);
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
if (type === 'ggx') {
|
|
208
|
-
pb.func('hemisphereImportanceSampleDggx', [
|
|
209
|
-
pb.vec2('u'),
|
|
210
|
-
pb.float('a')
|
|
211
|
-
], function() {
|
|
212
|
-
this.$l.phi = pb.mul(this.u.x, 2 * Math.PI);
|
|
213
|
-
this.$l.cosTheta2 = pb.div(pb.sub(1, this.u.y), pb.add(pb.mul(pb.add(this.a, 1), pb.sub(this.a, 1), this.u.y), 1));
|
|
214
|
-
this.$l.cosTheta = pb.sqrt(this.cosTheta2);
|
|
215
|
-
this.$l.sinTheta = pb.sqrt(pb.sub(1, this.cosTheta2));
|
|
216
|
-
this.$return(pb.vec3(pb.mul(pb.cos(this.phi), this.sinTheta), pb.mul(pb.sin(this.phi), this.sinTheta), this.cosTheta));
|
|
217
|
-
});
|
|
218
|
-
pb.func('normalDistributionFunction_TrowbridgeReitzGGX', [
|
|
219
|
-
pb.float('NoH'),
|
|
220
|
-
pb.float('alphaG')
|
|
221
|
-
], function() {
|
|
222
|
-
this.$l.a2 = pb.mul(this.alphaG, this.alphaG);
|
|
223
|
-
this.$l.d = pb.add(pb.mul(this.NoH, this.NoH, pb.sub(this.a2, 1)), 1);
|
|
224
|
-
this.$return(pb.div(this.a2, pb.mul(this.d, this.d, Math.PI)));
|
|
225
|
-
});
|
|
226
|
-
pb.func('radiance', [
|
|
227
|
-
pb.float('alphaG'),
|
|
228
|
-
pb.vec3('direction'),
|
|
229
|
-
pb.vec2('vFilteringInfo')
|
|
230
|
-
], function() {
|
|
231
|
-
this.$l.n = pb.normalize(this.direction);
|
|
232
|
-
this.$if(pb.equal(this.alphaG, 0), function() {
|
|
233
|
-
this.$l.c = pb.textureSampleLevel(this.inputTexture, this.n, 0).rgb;
|
|
234
|
-
this.$return(this.c);
|
|
235
|
-
}).$else(function() {
|
|
236
|
-
this.$l.result = pb.vec3(0);
|
|
237
|
-
this.$l.tangent = pb.vec3();
|
|
238
|
-
this.$if(pb.lessThan(pb.abs(this.n.z), 0.999), function() {
|
|
239
|
-
this.tangent = pb.vec3(0, 0, 1);
|
|
240
|
-
}).$else(function() {
|
|
241
|
-
this.tangent = pb.vec3(1, 0, 0);
|
|
242
|
-
});
|
|
243
|
-
this.tangent = pb.normalize(pb.cross(this.tangent, this.n));
|
|
244
|
-
this.$l.bitangent = pb.cross(this.n, this.tangent);
|
|
245
|
-
this.$l.tbn = pb.mat3(this.tangent, this.bitangent, this.n);
|
|
246
|
-
this.$l.maxLevel = this.vFilteringInfo.y;
|
|
247
|
-
this.$l.dim0 = this.vFilteringInfo.x;
|
|
248
|
-
this.$l.omegaP = pb.div(4 * Math.PI, pb.mul(this.dim0, this.dim0, 6));
|
|
249
|
-
this.$l.weight = pb.float(0);
|
|
250
|
-
this.$for(pb.int('i'), 0, numSamples, function() {
|
|
251
|
-
this.$l.Xi = this.hammersley2d(this.i, numSamples);
|
|
252
|
-
this.$l.H = this.hemisphereImportanceSampleDggx(this.Xi, this.alphaG);
|
|
253
|
-
this.$l.NoV = pb.float(1);
|
|
254
|
-
this.$l.NoH = this.H.z;
|
|
255
|
-
this.$l.NoH2 = pb.mul(this.H.z, this.H.z);
|
|
256
|
-
this.$l.NoL = pb.sub(pb.mul(this.NoH2, 2), 1);
|
|
257
|
-
this.$l.L = pb.normalize(pb.vec3(pb.mul(this.NoH, this.H.x, 2), pb.mul(this.NoH, this.H.y, 2), this.NoL));
|
|
258
|
-
this.$if(pb.greaterThan(this.NoL, 0), function() {
|
|
259
|
-
this.$l.pdf_inversed = pb.div(4, this.normalDistributionFunction_TrowbridgeReitzGGX(this.NoH, this.alphaG));
|
|
260
|
-
this.$l.omegaS = pb.mul(this.pdf_inversed, this.NUM_SAMPLES_FLOAT_INVERSED);
|
|
261
|
-
this.$l.l = pb.add(pb.sub(this.log4(this.omegaS), this.log4(this.omegaP)), this.log4(this.K));
|
|
262
|
-
this.$l.mipLevel = pb.clamp(this.l, 0, this.maxLevel);
|
|
263
|
-
this.weight = pb.add(this.weight, this.NoL);
|
|
264
|
-
this.$l.c = pb.textureSampleLevel(this.inputTexture, pb.mul(this.tbn, this.L), this.mipLevel).rgb;
|
|
265
|
-
this.result = pb.add(this.result, pb.mul(this.c, this.NoL));
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
this.result = pb.div(this.result, this.weight);
|
|
269
|
-
this.$return(this.result);
|
|
270
|
-
});
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
pb.main(function() {
|
|
274
|
-
if (type === 'ggx') {
|
|
275
|
-
this.$l.color = this.radiance(this.alphaG, this.$inputs.direction, this.vFilteringInfo);
|
|
276
|
-
}
|
|
277
|
-
if (type === 'lambertian') {
|
|
278
|
-
this.$l.color = this.irradiance(this.$inputs.direction, this.vFilteringInfo);
|
|
279
|
-
}
|
|
280
|
-
this.$outputs.outcolor = pb.vec4(pb.mul(this.color, this.hdrScale), 1);
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
function doPrefilterCubemap(type, roughness, miplevel, srcTexture, dstFramebuffer, filteringInfo, numSamples) {
|
|
286
|
-
const device = Application.instance.device;
|
|
287
|
-
const framebuffer = dstFramebuffer;
|
|
288
|
-
framebuffer.setColorAttachmentMipLevel(0, miplevel);
|
|
289
|
-
framebuffer.setColorAttachmentGenerateMipmaps(0, false);
|
|
290
|
-
const { program, bindgroup } = getProgramInfo(type, numSamples);
|
|
291
|
-
bindgroup.setValue('vFilteringInfo', filteringInfo);
|
|
292
|
-
bindgroup.setValue('hdrScale', 1);
|
|
293
|
-
bindgroup.setTexture('inputTexture', srcTexture);
|
|
294
|
-
if (type === 'ggx') {
|
|
295
|
-
bindgroup.setValue('alphaG', roughness);
|
|
296
|
-
}
|
|
297
|
-
device.setProgram(program);
|
|
298
|
-
device.setBindGroup(0, bindgroup);
|
|
299
|
-
device.setFramebuffer(framebuffer);
|
|
300
|
-
for(let i = 0; i < 6; i++){
|
|
301
|
-
framebuffer.setColorAttachmentCubeFace(0, i);
|
|
302
|
-
device.setVertexLayout(vertexLayout);
|
|
303
|
-
device.setRenderStates(renderStates);
|
|
304
|
-
bindgroup.setValue('up', faceDirections[i][0]);
|
|
305
|
-
bindgroup.setValue('right', faceDirections[i][1]);
|
|
306
|
-
bindgroup.setValue('front', faceDirections[i][2]);
|
|
307
|
-
device.draw('triangle-list', 0, 6);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Prefilters an environment cubemap
|
|
312
|
-
*
|
|
313
|
-
* @param tex - The environment cubemap
|
|
314
|
-
* @param type - The prefilter type
|
|
315
|
-
* @param destTex - The output cubemap
|
|
316
|
-
*
|
|
317
|
-
* @public
|
|
318
|
-
*/ function prefilterCubemap(tex, type, destTexture, numSamples) {
|
|
319
|
-
if (!tex || !tex.isTextureCube()) {
|
|
320
|
-
console.error('prefilterCubemap(): source texture must be cube texture');
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
const device = Application.instance.device;
|
|
324
|
-
if (!vertexLayout) {
|
|
325
|
-
init();
|
|
326
|
-
}
|
|
327
|
-
device.pushDeviceStates();
|
|
328
|
-
const rs = device.getRenderStates();
|
|
329
|
-
const srcTex = tex;
|
|
330
|
-
const width = tex.width;
|
|
331
|
-
const mipmapsCount = tex.mipLevelCount;
|
|
332
|
-
const filteringInfo = new Vector2(width, mipmapsCount);
|
|
333
|
-
const fb = destTexture.isFramebuffer() ? destTexture : device.createFrameBuffer([
|
|
334
|
-
destTexture
|
|
335
|
-
], null);
|
|
336
|
-
const attachMiplevel = fb.getColorAttachmentMipLevel(0);
|
|
337
|
-
const generateMipmap = fb.getColorAttachmentGenerateMipmaps(0);
|
|
338
|
-
const destTex = fb.getColorAttachments()[0];
|
|
339
|
-
const mips = type === 'ggx' ? destTex.mipLevelCount : 1;
|
|
340
|
-
for(let i = 0; i < mips; i++){
|
|
341
|
-
const alpha = i === 0 ? 0 : Math.pow(2, i) / width;
|
|
342
|
-
doPrefilterCubemap(type, alpha, i, srcTex, fb, filteringInfo, numSamples ?? 64);
|
|
343
|
-
}
|
|
344
|
-
device.popDeviceStates();
|
|
345
|
-
device.setRenderStates(rs);
|
|
346
|
-
fb.setColorAttachmentMipLevel(0, attachMiplevel);
|
|
347
|
-
fb.setColorAttachmentGenerateMipmaps(0, generateMipmap);
|
|
348
|
-
if (!destTexture.isFramebuffer()) {
|
|
349
|
-
fb.dispose();
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
export { prefilterCubemap };
|
|
354
|
-
//# sourceMappingURL=pmrem.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pmrem.js","sources":["../../../src/utility/pmrem.ts"],"sourcesContent":["import { Vector2, Vector3 } from '@zephyr3d/base';\r\nimport type {\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n RenderStateSet,\r\n TextureCube,\r\n VertexLayout\r\n} from '@zephyr3d/device';\r\nimport { Application } from '../app';\r\n\r\n// reference: https://placeholderart.wordpress.com/2015/07/28/implementation-notes-runtime-environment-map-filtering-for-image-based-lighting/\r\n\r\ntype DistributionType = 'lambertian' | 'ggx';\r\n\r\nlet vertexLayout: VertexLayout = null;\r\nlet renderStates: RenderStateSet = null;\r\nconst programs: Record<\r\n string,\r\n {\r\n program: GPUProgram;\r\n bindgroup: BindGroup;\r\n }\r\n> = {};\r\n\r\nconst faceDirections = [\r\n [new Vector3(0, 0, -1), new Vector3(0, -1, 0), new Vector3(1, 0, 0)],\r\n [new Vector3(0, 0, 1), new Vector3(0, -1, 0), new Vector3(-1, 0, 0)],\r\n [new Vector3(1, 0, 0), new Vector3(0, 0, 1), new Vector3(0, 1, 0)],\r\n [new Vector3(1, 0, 0), new Vector3(0, 0, -1), new Vector3(0, -1, 0)],\r\n [new Vector3(1, 0, 0), new Vector3(0, -1, 0), new Vector3(0, 0, 1)],\r\n [new Vector3(-1, 0, 0), new Vector3(0, -1, 0), new Vector3(0, 0, -1)]\r\n];\r\n\r\nfunction init() {\r\n const device = Application.instance.device;\r\n const vertices = new Float32Array([1, 1, -1, 1, -1, -1, 1, -1]);\r\n const indices = new Uint16Array([0, 1, 2, 0, 2, 3]);\r\n vertexLayout = device.createVertexLayout({\r\n vertexBuffers: [\r\n {\r\n buffer: device.createVertexBuffer('position_f32x2', vertices)\r\n }\r\n ],\r\n indexBuffer: device.createIndexBuffer(indices)\r\n });\r\n renderStates = device.createRenderStateSet();\r\n renderStates.useRasterizerState().setCullMode('none');\r\n renderStates.useDepthState().enableTest(false).enableWrite(false);\r\n}\r\n\r\nfunction getProgramInfo(type: DistributionType, numSamples: number) {\r\n const device = Application.instance.device;\r\n const hash = `${type}:${numSamples}`;\r\n let ret = programs[hash];\r\n if (!ret) {\r\n const program = createPMREMProgram(type, numSamples);\r\n const bindgroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n programs[hash] = ret = { program, bindgroup };\r\n }\r\n return ret;\r\n}\r\n\r\nfunction createPMREMProgram(type: DistributionType, numSamples: number): GPUProgram {\r\n const device = Application.instance.device;\r\n const pb = device;\r\n return pb.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.up = pb.vec3().uniform(0);\r\n this.right = pb.vec3().uniform(0);\r\n this.front = pb.vec3().uniform(0);\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.direction = pb.mul(\r\n pb.mat3(this.up, this.right, this.front),\r\n pb.vec3(this.$inputs.pos, 1)\r\n );\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n if (type === 'ggx') {\r\n this.alphaG = pb.float().uniform(0);\r\n }\r\n this.vFilteringInfo = pb.vec2().uniform(0);\r\n this.hdrScale = pb.float().uniform(0);\r\n this.inputTexture = pb.texCube().uniform(0);\r\n this.NUM_SAMPLES_FLOAT = pb.float(numSamples);\r\n this.NUM_SAMPLES_FLOAT_INVERSED = pb.float(1 / numSamples);\r\n this.K = pb.float(4);\r\n this.$outputs.outcolor = pb.vec4();\r\n if (device.type === 'webgl') {\r\n pb.func('radicalInverse_VdC', [pb.int('bits')], function () {\r\n this.$l.rand = pb.float(0);\r\n this.$l.denom = pb.float(1);\r\n this.$l.invBase = pb.float(0.5);\r\n this.$l.n = this.bits;\r\n this.$for(pb.int('i'), 0, 32, function () {\r\n this.denom = pb.mul(this.denom, 2);\r\n this.rand = pb.add(this.rand, pb.div(pb.mod(pb.float(this.n), 2), this.denom));\r\n this.n = pb.div(this.n, 2);\r\n this.$if(pb.equal(this.n, 0), function () {\r\n this.$break();\r\n });\r\n });\r\n this.$return(this.rand);\r\n });\r\n pb.func('hammersley2d', [pb.int('i'), pb.int('N')], function () {\r\n this.$return(pb.vec2(pb.div(pb.float(this.i), pb.float(this.N)), this.radicalInverse_VdC(this.i)));\r\n });\r\n } else {\r\n pb.func('radicalInverse_VdC', [pb.uint('bits')], function () {\r\n this.$l.n = this.bits;\r\n this.n = pb.compOr(pb.sal(this.n, 16), pb.sar(this.n, 16));\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x55555555), 1),\r\n pb.sar(pb.compAnd(this.n, 0xaaaaaaaa), 1)\r\n );\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x33333333), 2),\r\n pb.sar(pb.compAnd(this.n, 0xcccccccc), 2)\r\n );\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x0f0f0f0f), 4),\r\n pb.sar(pb.compAnd(this.n, 0xf0f0f0f0), 4)\r\n );\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x00ff00ff), 8),\r\n pb.sar(pb.compAnd(this.n, 0xff00ff00), 8)\r\n );\r\n this.$return(pb.mul(pb.float(this.n), 2.3283064365386963e-10));\r\n });\r\n pb.func('hammersley2d', [pb.int('i'), pb.int('N')], function () {\r\n this.$return(\r\n pb.vec2(pb.div(pb.float(this.i), pb.float(this.N)), this.radicalInverse_VdC(pb.uint(this.i)))\r\n );\r\n });\r\n }\r\n pb.func('log4', [pb.float('x')], function () {\r\n this.$return(pb.mul(pb.log2(this.x), 0.5));\r\n });\r\n if (type === 'lambertian') {\r\n pb.func('hemisphereCosSample', [pb.vec2('u')], function () {\r\n this.$l.phi = pb.mul(this.u.x, 2 * Math.PI);\r\n this.$l.cosTheta2 = pb.sub(1, this.u.y);\r\n this.$l.cosTheta = pb.sqrt(this.cosTheta2);\r\n this.$l.sinTheta = pb.sqrt(pb.sub(1, this.cosTheta2));\r\n this.$return(\r\n pb.vec3(\r\n pb.mul(this.sinTheta, pb.cos(this.phi)),\r\n pb.mul(this.sinTheta, pb.sin(this.phi)),\r\n this.cosTheta\r\n )\r\n );\r\n });\r\n pb.func('irradiance', [pb.vec3('direction'), pb.vec2('vFilteringInfo')], function () {\r\n this.$l.n = pb.normalize(this.direction);\r\n this.$l.result = pb.vec3(0);\r\n this.$l.tangent = pb.vec3();\r\n this.$if(pb.lessThan(pb.abs(this.n.z), 0.999), function () {\r\n this.tangent = pb.vec3(0, 0, 1);\r\n }).$else(function () {\r\n this.tangent = pb.vec3(1, 0, 0);\r\n });\r\n this.tangent = pb.normalize(pb.cross(this.tangent, this.n));\r\n this.$l.bitangent = pb.cross(this.n, this.tangent);\r\n this.$l.tbn = pb.mat3(this.tangent, this.bitangent, this.n);\r\n this.$l.maxLevel = this.vFilteringInfo.y;\r\n this.$l.dim0 = this.vFilteringInfo.x;\r\n this.$l.omegaP = pb.div(4 * Math.PI, pb.mul(this.dim0, this.dim0, 6));\r\n this.$for(pb.int('i'), 0, numSamples, function () {\r\n this.$l.Xi = this.hammersley2d(this.i, numSamples);\r\n this.$l.Ls = pb.normalize(this.hemisphereCosSample(this.Xi));\r\n this.$l.Ns = pb.vec3(0, 0, 1);\r\n this.$l.NoL = pb.dot(this.Ns, this.Ls);\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.pdf_inversed = pb.div(Math.PI, this.NoL);\r\n this.$l.omegaS = pb.mul(this.pdf_inversed, this.NUM_SAMPLES_FLOAT_INVERSED);\r\n this.$l.l = pb.add(pb.sub(this.log4(this.omegaS), this.log4(this.omegaP)), this.log4(this.K));\r\n this.$l.mipLevel = pb.clamp(this.l, 0, this.maxLevel);\r\n this.$l.c = pb.textureSampleLevel(\r\n this.inputTexture,\r\n pb.mul(this.tbn, this.Ls),\r\n this.mipLevel\r\n ).rgb;\r\n this.result = pb.add(this.result, this.c);\r\n });\r\n });\r\n this.result = pb.mul(this.result, this.NUM_SAMPLES_FLOAT_INVERSED);\r\n this.$return(this.result);\r\n });\r\n }\r\n if (type === 'ggx') {\r\n pb.func('hemisphereImportanceSampleDggx', [pb.vec2('u'), pb.float('a')], function () {\r\n this.$l.phi = pb.mul(this.u.x, 2 * Math.PI);\r\n this.$l.cosTheta2 = pb.div(\r\n pb.sub(1, this.u.y),\r\n pb.add(pb.mul(pb.add(this.a, 1), pb.sub(this.a, 1), this.u.y), 1)\r\n );\r\n this.$l.cosTheta = pb.sqrt(this.cosTheta2);\r\n this.$l.sinTheta = pb.sqrt(pb.sub(1, this.cosTheta2));\r\n this.$return(\r\n pb.vec3(\r\n pb.mul(pb.cos(this.phi), this.sinTheta),\r\n pb.mul(pb.sin(this.phi), this.sinTheta),\r\n this.cosTheta\r\n )\r\n );\r\n });\r\n pb.func(\r\n 'normalDistributionFunction_TrowbridgeReitzGGX',\r\n [pb.float('NoH'), pb.float('alphaG')],\r\n function () {\r\n this.$l.a2 = pb.mul(this.alphaG, this.alphaG);\r\n this.$l.d = pb.add(pb.mul(this.NoH, this.NoH, pb.sub(this.a2, 1)), 1);\r\n this.$return(pb.div(this.a2, pb.mul(this.d, this.d, Math.PI)));\r\n }\r\n );\r\n pb.func(\r\n 'radiance',\r\n [pb.float('alphaG'), pb.vec3('direction'), pb.vec2('vFilteringInfo')],\r\n function () {\r\n this.$l.n = pb.normalize(this.direction);\r\n this.$if(pb.equal(this.alphaG, 0), function () {\r\n this.$l.c = pb.textureSampleLevel(this.inputTexture, this.n, 0).rgb;\r\n this.$return(this.c);\r\n }).$else(function () {\r\n this.$l.result = pb.vec3(0);\r\n this.$l.tangent = pb.vec3();\r\n this.$if(pb.lessThan(pb.abs(this.n.z), 0.999), function () {\r\n this.tangent = pb.vec3(0, 0, 1);\r\n }).$else(function () {\r\n this.tangent = pb.vec3(1, 0, 0);\r\n });\r\n this.tangent = pb.normalize(pb.cross(this.tangent, this.n));\r\n this.$l.bitangent = pb.cross(this.n, this.tangent);\r\n this.$l.tbn = pb.mat3(this.tangent, this.bitangent, this.n);\r\n this.$l.maxLevel = this.vFilteringInfo.y;\r\n this.$l.dim0 = this.vFilteringInfo.x;\r\n this.$l.omegaP = pb.div(4 * Math.PI, pb.mul(this.dim0, this.dim0, 6));\r\n this.$l.weight = pb.float(0);\r\n this.$for(pb.int('i'), 0, numSamples, function () {\r\n this.$l.Xi = this.hammersley2d(this.i, numSamples);\r\n this.$l.H = this.hemisphereImportanceSampleDggx(this.Xi, this.alphaG);\r\n this.$l.NoV = pb.float(1);\r\n this.$l.NoH = this.H.z;\r\n this.$l.NoH2 = pb.mul(this.H.z, this.H.z);\r\n this.$l.NoL = pb.sub(pb.mul(this.NoH2, 2), 1);\r\n this.$l.L = pb.normalize(\r\n pb.vec3(pb.mul(this.NoH, this.H.x, 2), pb.mul(this.NoH, this.H.y, 2), this.NoL)\r\n );\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.pdf_inversed = pb.div(\r\n 4,\r\n this.normalDistributionFunction_TrowbridgeReitzGGX(this.NoH, this.alphaG)\r\n );\r\n this.$l.omegaS = pb.mul(this.pdf_inversed, this.NUM_SAMPLES_FLOAT_INVERSED);\r\n this.$l.l = pb.add(\r\n pb.sub(this.log4(this.omegaS), this.log4(this.omegaP)),\r\n this.log4(this.K)\r\n );\r\n this.$l.mipLevel = pb.clamp(this.l, 0, this.maxLevel);\r\n this.weight = pb.add(this.weight, this.NoL);\r\n this.$l.c = pb.textureSampleLevel(\r\n this.inputTexture,\r\n pb.mul(this.tbn, this.L),\r\n this.mipLevel\r\n ).rgb;\r\n this.result = pb.add(this.result, pb.mul(this.c, this.NoL));\r\n });\r\n });\r\n this.result = pb.div(this.result, this.weight);\r\n this.$return(this.result);\r\n });\r\n }\r\n );\r\n }\r\n pb.main(function () {\r\n if (type === 'ggx') {\r\n this.$l.color = this.radiance(this.alphaG, this.$inputs.direction, this.vFilteringInfo);\r\n }\r\n if (type === 'lambertian') {\r\n this.$l.color = this.irradiance(this.$inputs.direction, this.vFilteringInfo);\r\n }\r\n this.$outputs.outcolor = pb.vec4(pb.mul(this.color, this.hdrScale), 1);\r\n });\r\n }\r\n });\r\n}\r\nfunction doPrefilterCubemap(\r\n type: DistributionType,\r\n roughness: number,\r\n miplevel: number,\r\n srcTexture: TextureCube,\r\n dstFramebuffer: FrameBuffer,\r\n filteringInfo: Vector2,\r\n numSamples: number\r\n): void {\r\n const device = Application.instance.device;\r\n const framebuffer = dstFramebuffer;\r\n framebuffer.setColorAttachmentMipLevel(0, miplevel);\r\n framebuffer.setColorAttachmentGenerateMipmaps(0, false);\r\n const { program, bindgroup } = getProgramInfo(type, numSamples);\r\n bindgroup.setValue('vFilteringInfo', filteringInfo);\r\n bindgroup.setValue('hdrScale', 1);\r\n bindgroup.setTexture('inputTexture', srcTexture);\r\n if (type === 'ggx') {\r\n bindgroup.setValue('alphaG', roughness);\r\n }\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindgroup);\r\n device.setFramebuffer(framebuffer);\r\n for (let i = 0; i < 6; i++) {\r\n framebuffer.setColorAttachmentCubeFace(0, i);\r\n device.setVertexLayout(vertexLayout);\r\n device.setRenderStates(renderStates);\r\n bindgroup.setValue('up', faceDirections[i][0]);\r\n bindgroup.setValue('right', faceDirections[i][1]);\r\n bindgroup.setValue('front', faceDirections[i][2]);\r\n device.draw('triangle-list', 0, 6);\r\n }\r\n}\r\n\r\n/**\r\n * Prefilters an environment cubemap\r\n *\r\n * @param tex - The environment cubemap\r\n * @param type - The prefilter type\r\n * @param destTex - The output cubemap\r\n *\r\n * @public\r\n */\r\nexport function prefilterCubemap(\r\n tex: TextureCube,\r\n type: DistributionType,\r\n destTexture: TextureCube | FrameBuffer,\r\n numSamples?: number\r\n): void {\r\n if (!tex || !tex.isTextureCube()) {\r\n console.error('prefilterCubemap(): source texture must be cube texture');\r\n return;\r\n }\r\n const device = Application.instance.device;\r\n if (!vertexLayout) {\r\n init();\r\n }\r\n device.pushDeviceStates();\r\n const rs = device.getRenderStates();\r\n const srcTex = tex;\r\n const width = tex.width;\r\n const mipmapsCount = tex.mipLevelCount;\r\n const filteringInfo = new Vector2(width, mipmapsCount);\r\n const fb = destTexture.isFramebuffer() ? destTexture : device.createFrameBuffer([destTexture], null);\r\n const attachMiplevel = fb.getColorAttachmentMipLevel(0);\r\n const generateMipmap = fb.getColorAttachmentGenerateMipmaps(0);\r\n const destTex = fb.getColorAttachments()[0];\r\n const mips = type === 'ggx' ? destTex.mipLevelCount : 1;\r\n for (let i = 0; i < mips; i++) {\r\n const alpha = i === 0 ? 0 : Math.pow(2, i) / width;\r\n doPrefilterCubemap(type, alpha, i, srcTex, fb, filteringInfo, numSamples ?? 64);\r\n }\r\n device.popDeviceStates();\r\n device.setRenderStates(rs);\r\n fb.setColorAttachmentMipLevel(0, attachMiplevel);\r\n fb.setColorAttachmentGenerateMipmaps(0, generateMipmap);\r\n if (!destTexture.isFramebuffer()) {\r\n fb.dispose();\r\n }\r\n}\r\n"],"names":["vertexLayout","renderStates","programs","faceDirections","Vector3","init","device","Application","instance","vertices","Float32Array","indices","Uint16Array","createVertexLayout","vertexBuffers","buffer","createVertexBuffer","indexBuffer","createIndexBuffer","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","getProgramInfo","type","numSamples","hash","ret","program","createPMREMProgram","bindgroup","createBindGroup","bindGroupLayouts","pb","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","up","vec3","uniform","right","front","main","$builtins","position","vec4","$outputs","direction","mul","mat3","y","neg","fragment","alphaG","float","vFilteringInfo","hdrScale","inputTexture","texCube","NUM_SAMPLES_FLOAT","NUM_SAMPLES_FLOAT_INVERSED","K","outcolor","func","int","$l","rand","denom","invBase","n","bits","$for","add","div","mod","$if","equal","$break","$return","i","N","radicalInverse_VdC","uint","compOr","sal","sar","compAnd","log2","x","phi","u","Math","PI","cosTheta2","sub","cosTheta","sqrt","sinTheta","cos","sin","normalize","result","tangent","lessThan","abs","z","$else","cross","bitangent","tbn","maxLevel","dim0","omegaP","Xi","hammersley2d","Ls","hemisphereCosSample","Ns","NoL","dot","greaterThan","pdf_inversed","omegaS","l","log4","mipLevel","clamp","c","textureSampleLevel","rgb","a","a2","d","NoH","weight","H","hemisphereImportanceSampleDggx","NoV","NoH2","L","normalDistributionFunction_TrowbridgeReitzGGX","color","radiance","irradiance","doPrefilterCubemap","roughness","miplevel","srcTexture","dstFramebuffer","filteringInfo","framebuffer","setColorAttachmentMipLevel","setColorAttachmentGenerateMipmaps","setValue","setTexture","setProgram","setBindGroup","setFramebuffer","setColorAttachmentCubeFace","setVertexLayout","setRenderStates","draw","prefilterCubemap","tex","destTexture","isTextureCube","console","error","pushDeviceStates","rs","getRenderStates","srcTex","width","mipmapsCount","mipLevelCount","Vector2","fb","isFramebuffer","createFrameBuffer","attachMiplevel","getColorAttachmentMipLevel","generateMipmap","getColorAttachmentGenerateMipmaps","destTex","getColorAttachments","mips","alpha","pow","popDeviceStates","dispose"],"mappings":"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"}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { Application } from '../app/app.js';
|
|
2
|
-
import { fetchSampler } from './misc.js';
|
|
3
|
-
import { drawFullscreenQuad } from '../render/fullscreenquad.js';
|
|
4
|
-
import { DRef } from '@zephyr3d/base';
|
|
5
|
-
|
|
6
|
-
class RenderMipmap {
|
|
7
|
-
_program;
|
|
8
|
-
_bindGroup;
|
|
9
|
-
_srcSize;
|
|
10
|
-
_dstSize;
|
|
11
|
-
setupUniforms(_scope) {}
|
|
12
|
-
applyUniformValues(_bindGroup) {}
|
|
13
|
-
constructor(){
|
|
14
|
-
this._program = new DRef();
|
|
15
|
-
this._bindGroup = new DRef();
|
|
16
|
-
this._srcSize = new Float32Array(2);
|
|
17
|
-
this._dstSize = new Float32Array(2);
|
|
18
|
-
}
|
|
19
|
-
render(srcTex) {
|
|
20
|
-
const device = Application.instance.device;
|
|
21
|
-
this.prepare(device);
|
|
22
|
-
device.pushDeviceStates();
|
|
23
|
-
if (device.type === 'webgpu') {
|
|
24
|
-
for(let i = 0; i < srcTex.mipLevelCount - 1; i++){
|
|
25
|
-
this.renderLevel(device, i, srcTex, srcTex);
|
|
26
|
-
}
|
|
27
|
-
} else {
|
|
28
|
-
const tmpTexture = device.createTexture2D(srcTex.format, srcTex.width, srcTex.height);
|
|
29
|
-
const tmpFramebuffer = device.createFrameBuffer([
|
|
30
|
-
tmpTexture
|
|
31
|
-
], null);
|
|
32
|
-
const dstTex = tmpFramebuffer.getColorAttachments()[0];
|
|
33
|
-
for(let i = 0; i < srcTex.mipLevelCount - 1; i++){
|
|
34
|
-
this.renderLevel(device, i, srcTex, dstTex);
|
|
35
|
-
}
|
|
36
|
-
tmpFramebuffer.dispose();
|
|
37
|
-
tmpTexture.dispose();
|
|
38
|
-
}
|
|
39
|
-
device.popDeviceStates();
|
|
40
|
-
}
|
|
41
|
-
renderLevel(device, miplevel, srcTexture, dstTexture) {
|
|
42
|
-
const sampler = fetchSampler('clamp_nearest');
|
|
43
|
-
const framebuffer = device.createFrameBuffer([
|
|
44
|
-
dstTexture
|
|
45
|
-
], null);
|
|
46
|
-
framebuffer.setColorAttachmentMipLevel(0, miplevel + 1);
|
|
47
|
-
const bindGroup = this._bindGroup.get();
|
|
48
|
-
framebuffer.setColorAttachmentGenerateMipmaps(0, false);
|
|
49
|
-
this._srcSize[0] = Math.max(srcTexture.width >> miplevel, 1);
|
|
50
|
-
this._srcSize[1] = Math.max(srcTexture.height >> miplevel, 1);
|
|
51
|
-
this._dstSize[0] = Math.max(this._srcSize[0] >> 1, 1);
|
|
52
|
-
this._dstSize[1] = Math.max(this._srcSize[1] >> 1, 1);
|
|
53
|
-
bindGroup.setValue('srcSize', this._srcSize);
|
|
54
|
-
bindGroup.setValue('dstSize', this._dstSize);
|
|
55
|
-
if (device.type === 'webgpu') {
|
|
56
|
-
bindGroup.setTextureView('srcTex', srcTexture, miplevel, 0, 1, sampler);
|
|
57
|
-
} else {
|
|
58
|
-
bindGroup.setTexture('srcTex', srcTexture, sampler);
|
|
59
|
-
bindGroup.setValue('srcMipLevel', miplevel);
|
|
60
|
-
}
|
|
61
|
-
this.applyUniformValues(bindGroup);
|
|
62
|
-
device.setProgram(this._program.get());
|
|
63
|
-
device.setBindGroup(0, this._bindGroup.get());
|
|
64
|
-
device.setFramebuffer(framebuffer);
|
|
65
|
-
drawFullscreenQuad();
|
|
66
|
-
if (srcTexture !== dstTexture) {
|
|
67
|
-
device.copyFramebufferToTexture2D(framebuffer, 0, srcTexture, miplevel + 1);
|
|
68
|
-
}
|
|
69
|
-
framebuffer.dispose();
|
|
70
|
-
}
|
|
71
|
-
prepare(device) {
|
|
72
|
-
if (!this._program.get()) {
|
|
73
|
-
const that = this;
|
|
74
|
-
const program = device.buildRenderProgram({
|
|
75
|
-
vertex (pb) {
|
|
76
|
-
this.$inputs.pos = pb.vec2().attrib('position');
|
|
77
|
-
this.$outputs.uv = pb.vec2();
|
|
78
|
-
that.setupUniforms(this);
|
|
79
|
-
pb.main(function() {
|
|
80
|
-
this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);
|
|
81
|
-
this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));
|
|
82
|
-
if (device.type === 'webgpu') {
|
|
83
|
-
this.$builtins.position.y = pb.neg(this.$builtins.position.y);
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
},
|
|
87
|
-
fragment (pb) {
|
|
88
|
-
this.$outputs.color = pb.vec4();
|
|
89
|
-
this.srcTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);
|
|
90
|
-
this.srcSize = pb.vec2().uniform(0);
|
|
91
|
-
this.dstSize = pb.vec2().uniform(0);
|
|
92
|
-
that.setupUniforms(this);
|
|
93
|
-
if (device.type !== 'webgpu') {
|
|
94
|
-
this.srcMipLevel = pb.float().uniform(0);
|
|
95
|
-
}
|
|
96
|
-
pb.main(function() {
|
|
97
|
-
const miplevel = device.type === 'webgpu' ? 0 : this.srcMipLevel;
|
|
98
|
-
this.$l.invSize = pb.div(pb.vec2(1), this.srcSize);
|
|
99
|
-
this.$l.uv = pb.div(this.$builtins.fragCoord.xy, this.dstSize);
|
|
100
|
-
this.$l.d0 = pb.textureSampleLevel(this.srcTex, pb.add(this.uv, pb.mul(pb.vec2(-0.5, -0.5), this.invSize)), miplevel);
|
|
101
|
-
this.$l.d1 = pb.textureSampleLevel(this.srcTex, pb.add(this.uv, pb.mul(pb.vec2(0.5, -0.5), this.invSize)), miplevel);
|
|
102
|
-
this.$l.d2 = pb.textureSampleLevel(this.srcTex, pb.add(this.uv, pb.mul(pb.vec2(-0.5, 0.5), this.invSize)), miplevel);
|
|
103
|
-
this.$l.d3 = pb.textureSampleLevel(this.srcTex, pb.add(this.uv, pb.mul(pb.vec2(0.5, 0.5), this.invSize)), miplevel);
|
|
104
|
-
this.$outputs.color = that.renderPixel(this, this.d0, this.d1, this.d2, this.d3, this.uv);
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
this._program.set(program);
|
|
109
|
-
this._bindGroup.set(device.createBindGroup(program.bindGroupLayouts[0]));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export { RenderMipmap };
|
|
115
|
-
//# sourceMappingURL=rendermipmap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rendermipmap.js","sources":["../../../src/utility/rendermipmap.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport { Application } from '../app';\r\nimport { fetchSampler } from './misc';\r\nimport { drawFullscreenQuad } from '../render/fullscreenquad';\r\nimport { DRef } from '@zephyr3d/base';\r\n\r\nexport abstract class RenderMipmap {\r\n private readonly _program: DRef<GPUProgram>;\r\n private readonly _bindGroup: DRef<BindGroup>;\r\n private _srcSize: Float32Array<ArrayBuffer>;\r\n private _dstSize: Float32Array<ArrayBuffer>;\r\n abstract renderPixel(\r\n scope: PBInsideFunctionScope,\r\n leftTop: PBShaderExp,\r\n rightTop: PBShaderExp,\r\n leftBottom: PBShaderExp,\r\n rightBottom: PBShaderExp,\r\n uv: PBShaderExp\r\n ): PBShaderExp;\r\n setupUniforms(_scope: PBGlobalScope): void {}\r\n applyUniformValues(_bindGroup: BindGroup): void {}\r\n constructor() {\r\n this._program = new DRef();\r\n this._bindGroup = new DRef();\r\n this._srcSize = new Float32Array(2);\r\n this._dstSize = new Float32Array(2);\r\n }\r\n render(srcTex: Texture2D) {\r\n const device = Application.instance.device;\r\n this.prepare(device);\r\n device.pushDeviceStates();\r\n if (device.type === 'webgpu') {\r\n for (let i = 0; i < srcTex.mipLevelCount - 1; i++) {\r\n this.renderLevel(device, i, srcTex, srcTex);\r\n }\r\n } else {\r\n const tmpTexture = device.createTexture2D(srcTex.format, srcTex.width, srcTex.height);\r\n const tmpFramebuffer = device.createFrameBuffer([tmpTexture], null);\r\n const dstTex = tmpFramebuffer.getColorAttachments()[0] as Texture2D;\r\n for (let i = 0; i < srcTex.mipLevelCount - 1; i++) {\r\n this.renderLevel(device, i, srcTex, dstTex);\r\n }\r\n tmpFramebuffer.dispose();\r\n tmpTexture.dispose();\r\n }\r\n device.popDeviceStates();\r\n }\r\n private renderLevel(\r\n device: AbstractDevice,\r\n miplevel: number,\r\n srcTexture: Texture2D,\r\n dstTexture: Texture2D\r\n ): void {\r\n const sampler = fetchSampler('clamp_nearest');\r\n const framebuffer = device.createFrameBuffer([dstTexture], null);\r\n framebuffer.setColorAttachmentMipLevel(0, miplevel + 1);\r\n const bindGroup = this._bindGroup.get();\r\n framebuffer.setColorAttachmentGenerateMipmaps(0, false);\r\n this._srcSize[0] = Math.max(srcTexture.width >> miplevel, 1);\r\n this._srcSize[1] = Math.max(srcTexture.height >> miplevel, 1);\r\n this._dstSize[0] = Math.max(this._srcSize[0] >> 1, 1);\r\n this._dstSize[1] = Math.max(this._srcSize[1] >> 1, 1);\r\n bindGroup.setValue('srcSize', this._srcSize);\r\n bindGroup.setValue('dstSize', this._dstSize);\r\n if (device.type === 'webgpu') {\r\n bindGroup.setTextureView('srcTex', srcTexture, miplevel, 0, 1, sampler);\r\n } else {\r\n bindGroup.setTexture('srcTex', srcTexture, sampler);\r\n bindGroup.setValue('srcMipLevel', miplevel);\r\n }\r\n this.applyUniformValues(bindGroup);\r\n device.setProgram(this._program.get());\r\n device.setBindGroup(0, this._bindGroup.get());\r\n device.setFramebuffer(framebuffer);\r\n drawFullscreenQuad();\r\n if (srcTexture !== dstTexture) {\r\n device.copyFramebufferToTexture2D(framebuffer, 0, srcTexture, miplevel + 1);\r\n }\r\n framebuffer.dispose();\r\n }\r\n private prepare(device: AbstractDevice) {\r\n if (!this._program.get()) {\r\n const that = this;\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n that.setupUniforms(this);\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n this.srcTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.srcSize = pb.vec2().uniform(0);\r\n this.dstSize = pb.vec2().uniform(0);\r\n that.setupUniforms(this);\r\n if (device.type !== 'webgpu') {\r\n this.srcMipLevel = pb.float().uniform(0);\r\n }\r\n pb.main(function () {\r\n const miplevel = device.type === 'webgpu' ? 0 : this.srcMipLevel;\r\n this.$l.invSize = pb.div(pb.vec2(1), this.srcSize);\r\n this.$l.uv = pb.div(this.$builtins.fragCoord.xy, this.dstSize);\r\n this.$l.d0 = pb.textureSampleLevel(\r\n this.srcTex,\r\n pb.add(this.uv, pb.mul(pb.vec2(-0.5, -0.5), this.invSize)),\r\n miplevel\r\n );\r\n this.$l.d1 = pb.textureSampleLevel(\r\n this.srcTex,\r\n pb.add(this.uv, pb.mul(pb.vec2(0.5, -0.5), this.invSize)),\r\n miplevel\r\n );\r\n this.$l.d2 = pb.textureSampleLevel(\r\n this.srcTex,\r\n pb.add(this.uv, pb.mul(pb.vec2(-0.5, 0.5), this.invSize)),\r\n miplevel\r\n );\r\n this.$l.d3 = pb.textureSampleLevel(\r\n this.srcTex,\r\n pb.add(this.uv, pb.mul(pb.vec2(0.5, 0.5), this.invSize)),\r\n miplevel\r\n );\r\n this.$outputs.color = that.renderPixel(this, this.d0, this.d1, this.d2, this.d3, this.uv);\r\n });\r\n }\r\n });\r\n this._program.set(program);\r\n this._bindGroup.set(device.createBindGroup(program.bindGroupLayouts[0]));\r\n }\r\n }\r\n}\r\n"],"names":["RenderMipmap","_program","_bindGroup","_srcSize","_dstSize","setupUniforms","_scope","applyUniformValues","DRef","Float32Array","render","srcTex","device","Application","instance","prepare","pushDeviceStates","type","i","mipLevelCount","renderLevel","tmpTexture","createTexture2D","format","width","height","tmpFramebuffer","createFrameBuffer","dstTex","getColorAttachments","dispose","popDeviceStates","miplevel","srcTexture","dstTexture","sampler","fetchSampler","framebuffer","setColorAttachmentMipLevel","bindGroup","get","setColorAttachmentGenerateMipmaps","Math","max","setValue","setTextureView","setTexture","setProgram","setBindGroup","setFramebuffer","drawFullscreenQuad","copyFramebufferToTexture2D","that","program","buildRenderProgram","vertex","pb","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","y","neg","fragment","color","tex2D","sampleType","uniform","srcSize","dstSize","srcMipLevel","float","$l","invSize","div","fragCoord","d0","textureSampleLevel","d1","d2","d3","renderPixel","set","createBindGroup","bindGroupLayouts"],"mappings":"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"}
|