@zephyr3d/scene 0.9.25 → 0.9.27
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 +92 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
- package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
- package/dist/animation/joint_dynamics/controller.js +7 -5
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +320 -0
- package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -4
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/skeleton.js +79 -25
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/spring/multi_chain_spring_system.js +577 -179
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +4 -3
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
- package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
- package/dist/animation/spring/spring_particle.js +2 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +11 -3
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +10 -0
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/engine.js +53 -43
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptingsystem.js +119 -6
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +3 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +284 -67
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/zhair/zhair_format.js +288 -0
- package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
- package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
- package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
- package/dist/asset/model.js +184 -69
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +268 -44
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +3 -1
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +9044 -5139
- package/dist/index.js +17 -6
- package/dist/index.js.map +1 -1
- package/dist/material/eye.js +932 -0
- package/dist/material/eye.js.map +1 -0
- package/dist/material/hair.js +917 -0
- package/dist/material/hair.js.map +1 -0
- package/dist/material/hairstrand.js +842 -0
- package/dist/material/hairstrand.js.map +1 -0
- package/dist/material/hairstrand_data.js +162 -0
- package/dist/material/hairstrand_data.js.map +1 -0
- package/dist/material/lambert.js +5 -2
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +48 -10
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +120 -19
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +1 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +5 -4
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +106 -19
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +4 -4
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +48 -11
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mtoon.js +6 -5
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrblueprint.js +146 -28
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrblueprint_instance.js +501 -0
- package/dist/material/pbrblueprint_instance.js.map +1 -0
- package/dist/material/pbrmr.js +15 -16
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/shader/helper.js +734 -23
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +55 -0
- package/dist/material/shader/terrain_blend.js.map +1 -0
- package/dist/material/skin.js +192 -32
- package/dist/material/skin.js.map +1 -1
- package/dist/material/spriteblueprint.js +16 -1
- package/dist/material/spriteblueprint.js.map +1 -1
- package/dist/material/subsurfaceprofile.js +86 -23
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/water.js +2059 -72
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js +167 -7
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/coloradjust.js +2 -1
- package/dist/posteffect/coloradjust.js.map +1 -1
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +2 -1
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +3 -1
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +664 -56
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +46 -44
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +368 -69
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +16 -9
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -0
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +121 -36
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js +44 -1
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +8 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +156 -5
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cull_visitor.js +20 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +36 -2
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +26 -1
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +3 -2
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +1 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +6 -3
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +57 -15
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +130 -20
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +3 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +6 -3
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/oit.js +29 -0
- package/dist/render/oit.js.map +1 -0
- package/dist/render/render_queue.js +39 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +4 -0
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +1 -0
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +2 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +379 -10
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/shadow_mask_pass.js +73 -8
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/sky.js +166 -126
- package/dist/render/sky.js.map +1 -1
- package/dist/render/underwater.js +624 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/water_caustics.js +1380 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/weightedblended_oit.js +3 -2
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +8 -0
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +3 -0
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +4 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/hair.js +963 -0
- package/dist/scene/hair.js.map +1 -0
- package/dist/scene/light.js +5 -1
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +481 -47
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +3 -0
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +3 -0
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +6 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +3 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +6 -1
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +3 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +3 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +6 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/texture_cache.js +309 -0
- package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
- package/dist/scene/water.js +546 -4
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/diffusion.js +54 -0
- package/dist/shaders/diffusion.js.map +1 -0
- package/dist/shaders/shadow.js +33 -21
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/temporal.js +71 -33
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +22 -19
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +56 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +546 -0
- package/dist/shadow/dom.js.map +1 -0
- package/dist/shadow/pcf_opt.js +3 -5
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +1 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/receiver_bias.js +41 -0
- package/dist/shadow/receiver_bias.js.map +1 -0
- package/dist/shadow/shader.js +20 -60
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js +89 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +1 -1
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +150 -37
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/shape.js +11 -2
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +50 -9
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +112 -2
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/material/func.js +142 -49
- package/dist/utility/blueprint/material/func.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +490 -25
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +898 -4
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/manager.js +434 -101
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +401 -5
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +186 -26
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +26 -5
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/hair.js +1141 -0
- package/dist/utility/serialization/scene/hair.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +84 -4
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1867 -166
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +231 -14
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +141 -7
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +18 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +4 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +4 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +4 -0
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +1105 -21
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +9 -8
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/values.js +49 -2
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- package/dist/render/rendergraph/frame_graph_context.js +0 -41
- package/dist/render/rendergraph/frame_graph_context.js.map +0 -1
- package/dist/shaders/ssgi.js +0 -63
- package/dist/shaders/ssgi.js.map +0 -1
- package/dist/shaders/ssgi_reprojection.js +0 -118
- package/dist/shaders/ssgi_reprojection.js.map +0 -1
package/dist/values.js
CHANGED
|
@@ -70,9 +70,56 @@ import { Vector3 } from '@zephyr3d/base';
|
|
|
70
70
|
/** @public */ const MORPH_TARGET_TEX2 = 6;
|
|
71
71
|
/** @public */ const MORPH_TARGET_TEX3 = 7;
|
|
72
72
|
/** @public */ const MAX_MORPH_ATTRIBUTES = 8;
|
|
73
|
-
/** @public */ const
|
|
73
|
+
/** @public */ const DEFAULT_MORPH_TARGET_LIMIT = 256;
|
|
74
|
+
/** @public */ const DEFAULT_ACTIVE_MORPH_TARGET_LIMIT = 64;
|
|
75
|
+
/** @public */ const MAX_MORPH_TARGETS = 1024;
|
|
76
|
+
/** @public */ const DEFAULT_SKIN_INFLUENCE_LIMIT = 4;
|
|
77
|
+
/** @public */ const MAX_SKIN_INFLUENCES = 12;
|
|
78
|
+
/** @public */ const MAX_SKIN_EXTRA_INFLUENCE_PAIRS = Math.ceil(Math.max(0, MAX_SKIN_INFLUENCES - 4) / 2);
|
|
74
79
|
/** @public */ const MORPH_WEIGHTS_VECTOR_COUNT = MAX_MORPH_TARGETS + 3 >> 2;
|
|
75
80
|
/** @public */ const MORPH_ATTRIBUTE_VECTOR_COUNT = MAX_MORPH_ATTRIBUTES + 3 >> 2;
|
|
81
|
+
let morphTargetLimit = DEFAULT_MORPH_TARGET_LIMIT;
|
|
82
|
+
let activeMorphTargetLimit = DEFAULT_ACTIVE_MORPH_TARGET_LIMIT;
|
|
83
|
+
let skinInfluenceLimit = DEFAULT_SKIN_INFLUENCE_LIMIT;
|
|
84
|
+
/** @public */ function normalizeMorphTargetLimit(value) {
|
|
85
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
86
|
+
return DEFAULT_MORPH_TARGET_LIMIT;
|
|
87
|
+
}
|
|
88
|
+
return Math.min(MAX_MORPH_TARGETS, Math.max(1, Math.trunc(value)));
|
|
89
|
+
}
|
|
90
|
+
/** @public */ function getMorphTargetLimit() {
|
|
91
|
+
return morphTargetLimit;
|
|
92
|
+
}
|
|
93
|
+
/** @public */ function setMorphTargetLimit(value) {
|
|
94
|
+
morphTargetLimit = normalizeMorphTargetLimit(value);
|
|
95
|
+
return morphTargetLimit;
|
|
96
|
+
}
|
|
97
|
+
/** @public */ function normalizeActiveMorphTargetLimit(value) {
|
|
98
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
99
|
+
return DEFAULT_ACTIVE_MORPH_TARGET_LIMIT;
|
|
100
|
+
}
|
|
101
|
+
return Math.min(MAX_MORPH_TARGETS, Math.max(1, Math.trunc(value)));
|
|
102
|
+
}
|
|
103
|
+
/** @public */ function getActiveMorphTargetLimit() {
|
|
104
|
+
return activeMorphTargetLimit;
|
|
105
|
+
}
|
|
106
|
+
/** @public */ function setActiveMorphTargetLimit(value) {
|
|
107
|
+
activeMorphTargetLimit = normalizeActiveMorphTargetLimit(value);
|
|
108
|
+
return activeMorphTargetLimit;
|
|
109
|
+
}
|
|
110
|
+
/** @public */ function normalizeSkinInfluenceLimit(value) {
|
|
111
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
112
|
+
return DEFAULT_SKIN_INFLUENCE_LIMIT;
|
|
113
|
+
}
|
|
114
|
+
return Math.min(MAX_SKIN_INFLUENCES, Math.max(1, Math.trunc(value)));
|
|
115
|
+
}
|
|
116
|
+
/** @public */ function getSkinInfluenceLimit() {
|
|
117
|
+
return skinInfluenceLimit;
|
|
118
|
+
}
|
|
119
|
+
/** @public */ function setSkinInfluenceLimit(value) {
|
|
120
|
+
skinInfluenceLimit = normalizeSkinInfluenceLimit(value);
|
|
121
|
+
return skinInfluenceLimit;
|
|
122
|
+
}
|
|
76
123
|
/** @public */ const MAX_TERRAIN_MIPMAP_LEVELS = 64;
|
|
77
124
|
/** @public */ const MAX_GERSTNER_WAVE_COUNT = 16;
|
|
78
125
|
/**
|
|
@@ -171,5 +218,5 @@ import { Vector3 } from '@zephyr3d/base';
|
|
|
171
218
|
return Fog;
|
|
172
219
|
}({});
|
|
173
220
|
|
|
174
|
-
export { ATMOSPHERIC_FOG_BIT, BUILTIN_ASSET_TEST_CUBEMAP, BUILTIN_ASSET_TEXTURE_SHEEN_LUT, Fog, HEIGHT_FOG_BIT, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT, MAX_GERSTNER_WAVE_COUNT, MAX_MORPH_ATTRIBUTES, MAX_MORPH_TARGETS, MAX_SHADOW_MASK_LIGHTS, MAX_TERRAIN_MIPMAP_LEVELS, MORPH_ATTRIBUTE_VECTOR_COUNT, MORPH_TARGET_COLOR, MORPH_TARGET_NORMAL, MORPH_TARGET_POSITION, MORPH_TARGET_TANGENT, MORPH_TARGET_TEX0, MORPH_TARGET_TEX1, MORPH_TARGET_TEX2, MORPH_TARGET_TEX3, MORPH_WEIGHTS_VECTOR_COUNT, MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_LIGHT, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP, uniformSphereSamples };
|
|
221
|
+
export { ATMOSPHERIC_FOG_BIT, BUILTIN_ASSET_TEST_CUBEMAP, BUILTIN_ASSET_TEXTURE_SHEEN_LUT, DEFAULT_ACTIVE_MORPH_TARGET_LIMIT, DEFAULT_MORPH_TARGET_LIMIT, DEFAULT_SKIN_INFLUENCE_LIMIT, Fog, HEIGHT_FOG_BIT, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT, MAX_GERSTNER_WAVE_COUNT, MAX_MORPH_ATTRIBUTES, MAX_MORPH_TARGETS, MAX_SHADOW_MASK_LIGHTS, MAX_SKIN_EXTRA_INFLUENCE_PAIRS, MAX_SKIN_INFLUENCES, MAX_TERRAIN_MIPMAP_LEVELS, MORPH_ATTRIBUTE_VECTOR_COUNT, MORPH_TARGET_COLOR, MORPH_TARGET_NORMAL, MORPH_TARGET_POSITION, MORPH_TARGET_TANGENT, MORPH_TARGET_TEX0, MORPH_TARGET_TEX1, MORPH_TARGET_TEX2, MORPH_TARGET_TEX3, MORPH_WEIGHTS_VECTOR_COUNT, MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_LIGHT, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP, getActiveMorphTargetLimit, getMorphTargetLimit, getSkinInfluenceLimit, normalizeActiveMorphTargetLimit, normalizeMorphTargetLimit, normalizeSkinInfluenceLimit, setActiveMorphTargetLimit, setMorphTargetLimit, setSkinInfluenceLimit, uniformSphereSamples };
|
|
175
222
|
//# sourceMappingURL=values.js.map
|
package/dist/values.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"values.js","sources":["../src/values.ts"],"sourcesContent":["import { Vector3 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Forward render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_LIGHT = 0;\r\n/**\r\n * Shadow map render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_SHADOWMAP = 1;\r\n/**\r\n * Depth only render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_DEPTH = 2;\r\n/**\r\n * Object color render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_OBJECT_COLOR = 3;\r\n\r\n/**\r\n * Builtin texture name for sheen LUT\r\n * @public\r\n */\r\nexport const BUILTIN_ASSET_TEXTURE_SHEEN_LUT = 'LUT_Sheen';\r\n\r\n/**\r\n * Builtin cube texture for test\r\n * @public\r\n */\r\nexport const BUILTIN_ASSET_TEST_CUBEMAP = 'TEST_Cubemap';\r\n\r\n/**\r\n * No light\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_NONE = 0;\r\n\r\n/**\r\n * Directional light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_DIRECTIONAL = 1;\r\n\r\n/**\r\n * Point light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_POINT = 2;\r\n\r\n/**\r\n * Spot light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_SPOT = 3;\r\n/**\r\n * Rectangular area light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_RECT = 4;\r\n\r\n/**\r\n * Max number of shadow-casting lights backed by the screen-space shadow mask.\r\n *\r\n * Each mask layer packs 4 lights (one per RGBA8 channel), so this maps to\r\n * `MAX_SHADOW_MASK_LIGHTS / 4` texture array layers. Shadow-casting lights are\r\n * placed at the head of the clustered light buffer. Shadow lights beyond this\r\n * cap fall back to being lit without a mask-backed shadow.\r\n * @public\r\n */\r\nexport const MAX_SHADOW_MASK_LIGHTS = 32;\r\n\r\n/**\r\n * Opaque render queue type\r\n * @public\r\n */\r\nexport const QUEUE_OPAQUE = 1;\r\n\r\n/**\r\n * Transparent render queue type\r\n * @public\r\n */\r\nexport const QUEUE_TRANSPARENT = 2;\r\n\r\n/** @public */\r\nexport const MORPH_TARGET_POSITION = 0;\r\n/** @public */\r\nexport const MORPH_TARGET_NORMAL = 1;\r\n/** @public */\r\nexport const MORPH_TARGET_TANGENT = 2;\r\n/** @public */\r\nexport const MORPH_TARGET_COLOR = 3;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX0 = 4;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX1 = 5;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX2 = 6;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX3 = 7;\r\n/** @public */\r\nexport const MAX_MORPH_ATTRIBUTES = 8;\r\n/** @public */\r\nexport const MAX_MORPH_TARGETS = 256;\r\n/** @public */\r\nexport const MORPH_WEIGHTS_VECTOR_COUNT = (MAX_MORPH_TARGETS + 3) >> 2;\r\n/** @public */\r\nexport const MORPH_ATTRIBUTE_VECTOR_COUNT = (MAX_MORPH_ATTRIBUTES + 3) >> 2;\r\n\r\n/** @public */\r\nexport const MAX_TERRAIN_MIPMAP_LEVELS = 64;\r\n\r\n/** @public */\r\nexport const MAX_GERSTNER_WAVE_COUNT = 16;\r\n\r\n/**\r\n * Material varying flags\r\n * @public\r\n */\r\nexport const enum MaterialVaryingFlags {\r\n MORPH_ANIMATION = 1 << 0,\r\n SKIN_ANIMATION = 1 << 1,\r\n INSTANCING = 1 << 2,\r\n SCENE_STORE_ROUGHNESS = 1 << 3,\r\n APPLY_FOG = 1 << 4,\r\n SSS_STORE_PROFILE = 1 << 5,\r\n SSS_STORE_DIFFUSE = 1 << 6,\r\n SCENE_STORE_NORMAL = 1 << 7,\r\n SSS_STORE_TRANSMISSION = 1 << 8,\r\n SKIN_SSS_STORE = 1 << 9\r\n}\r\n\r\n/**\r\n * Atmospheric Fog flag\r\n * @public\r\n */\r\nexport const ATMOSPHERIC_FOG_BIT = 1 << 0;\r\n/**\r\n * Exponential Fog flag\r\n * @public\r\n */\r\nexport const HEIGHT_FOG_BIT = 1 << 1;\r\n\r\n/** @internal */\r\nexport const uniformSphereSamples = [\r\n new Vector3(-0.7838, -0.620933, 0.00996137),\r\n new Vector3(0.106751, 0.965982, 0.235549),\r\n new Vector3(-0.215177, -0.687115, -0.693954),\r\n new Vector3(0.318002, 0.0640084, -0.945927),\r\n new Vector3(0.357396, 0.555673, 0.750664),\r\n new Vector3(0.866397, -0.19756, 0.458613),\r\n new Vector3(0.130216, 0.232736, -0.963783),\r\n new Vector3(-0.00174431, 0.376657, 0.926351),\r\n new Vector3(0.663478, 0.704806, -0.251089),\r\n new Vector3(0.0327851, 0.110534, -0.993331),\r\n new Vector3(0.0561973, 0.0234288, 0.998145),\r\n new Vector3(0.0905264, -0.169771, 0.981317),\r\n new Vector3(0.26694, 0.95222, -0.148393),\r\n new Vector3(-0.812874, -0.559051, -0.163393),\r\n new Vector3(-0.323378, -0.25855, -0.910263),\r\n new Vector3(-0.1333, 0.591356, -0.795317),\r\n new Vector3(0.480876, 0.408711, 0.775702),\r\n new Vector3(-0.332263, -0.533895, -0.777533),\r\n new Vector3(-0.0392473, -0.704457, -0.708661),\r\n new Vector3(0.427015, 0.239811, 0.871865),\r\n new Vector3(-0.416624, -0.563856, 0.713085),\r\n new Vector3(0.12793, 0.334479, -0.933679),\r\n new Vector3(-0.0343373, -0.160593, -0.986423),\r\n new Vector3(0.580614, 0.0692947, 0.811225),\r\n new Vector3(-0.459187, 0.43944, 0.772036),\r\n new Vector3(0.215474, -0.539436, -0.81399),\r\n new Vector3(-0.378969, -0.31988, -0.868366),\r\n new Vector3(-0.279978, -0.0109692, 0.959944),\r\n new Vector3(0.692547, 0.690058, 0.210234),\r\n new Vector3(0.53227, -0.123044, -0.837585),\r\n new Vector3(-0.772313, -0.283334, -0.568555),\r\n new Vector3(-0.0311218, 0.995988, -0.0838977),\r\n new Vector3(-0.366931, -0.276531, -0.888196),\r\n new Vector3(0.488778, 0.367878, -0.791051),\r\n new Vector3(-0.885561, -0.453445, 0.100842),\r\n new Vector3(0.71656, 0.443635, 0.538265),\r\n new Vector3(0.645383, -0.152576, -0.748466),\r\n new Vector3(-0.171259, 0.91907, 0.354939),\r\n new Vector3(-0.0031122, 0.9457, 0.325026),\r\n new Vector3(0.731503, 0.623089, -0.276881),\r\n new Vector3(-0.91466, 0.186904, 0.358419),\r\n new Vector3(0.15595, 0.828193, -0.538309),\r\n new Vector3(0.175396, 0.584732, 0.792038),\r\n new Vector3(-0.0838381, -0.943461, 0.320707),\r\n new Vector3(0.305876, 0.727604, 0.614029),\r\n new Vector3(0.754642, -0.197903, -0.62558),\r\n new Vector3(0.217255, -0.0177771, -0.975953),\r\n new Vector3(0.140412, -0.844826, 0.516287),\r\n new Vector3(-0.549042, 0.574859, -0.606705),\r\n new Vector3(0.570057, 0.17459, 0.802841),\r\n new Vector3(-0.0330304, 0.775077, 0.631003),\r\n new Vector3(-0.938091, 0.138937, 0.317304),\r\n new Vector3(0.483197, -0.726405, -0.48873),\r\n new Vector3(0.485263, 0.52926, 0.695991),\r\n new Vector3(0.224189, 0.742282, -0.631472),\r\n new Vector3(-0.322429, 0.662214, -0.676396),\r\n new Vector3(0.625577, -0.12711, 0.769738),\r\n new Vector3(-0.714032, -0.584461, -0.385439),\r\n new Vector3(-0.0652053, -0.892579, -0.446151),\r\n new Vector3(0.408421, -0.912487, 0.0236566),\r\n new Vector3(0.0900381, 0.319983, 0.943135),\r\n new Vector3(-0.708553, 0.483646, 0.513847),\r\n new Vector3(0.803855, -0.0902273, 0.587942),\r\n new Vector3(-0.0555802, -0.374602, -0.925519)\r\n];\r\n\r\n/** @internal */\r\nexport enum Fog {\r\n FOG_TYPE_NONE = 0,\r\n FOG_TYPE_HEIGHT = 4\r\n}\r\n"],"names":["RENDER_PASS_TYPE_LIGHT","RENDER_PASS_TYPE_SHADOWMAP","RENDER_PASS_TYPE_DEPTH","RENDER_PASS_TYPE_OBJECT_COLOR","BUILTIN_ASSET_TEXTURE_SHEEN_LUT","BUILTIN_ASSET_TEST_CUBEMAP","LIGHT_TYPE_NONE","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","LIGHT_TYPE_RECT","MAX_SHADOW_MASK_LIGHTS","QUEUE_OPAQUE","QUEUE_TRANSPARENT","MORPH_TARGET_POSITION","MORPH_TARGET_NORMAL","MORPH_TARGET_TANGENT","MORPH_TARGET_COLOR","MORPH_TARGET_TEX0","MORPH_TARGET_TEX1","MORPH_TARGET_TEX2","MORPH_TARGET_TEX3","MAX_MORPH_ATTRIBUTES","MAX_MORPH_TARGETS","MORPH_WEIGHTS_VECTOR_COUNT","MORPH_ATTRIBUTE_VECTOR_COUNT","MAX_TERRAIN_MIPMAP_LEVELS","MAX_GERSTNER_WAVE_COUNT","MaterialVaryingFlags","ATMOSPHERIC_FOG_BIT","HEIGHT_FOG_BIT","uniformSphereSamples","Vector3","Fog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"values.js","sources":["../src/values.ts"],"sourcesContent":["import { Vector3 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Forward render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_LIGHT = 0;\r\n/**\r\n * Shadow map render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_SHADOWMAP = 1;\r\n/**\r\n * Depth only render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_DEPTH = 2;\r\n/**\r\n * Object color render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_OBJECT_COLOR = 3;\r\n\r\n/**\r\n * Builtin texture name for sheen LUT\r\n * @public\r\n */\r\nexport const BUILTIN_ASSET_TEXTURE_SHEEN_LUT = 'LUT_Sheen';\r\n\r\n/**\r\n * Builtin cube texture for test\r\n * @public\r\n */\r\nexport const BUILTIN_ASSET_TEST_CUBEMAP = 'TEST_Cubemap';\r\n\r\n/**\r\n * No light\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_NONE = 0;\r\n\r\n/**\r\n * Directional light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_DIRECTIONAL = 1;\r\n\r\n/**\r\n * Point light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_POINT = 2;\r\n\r\n/**\r\n * Spot light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_SPOT = 3;\r\n/**\r\n * Rectangular area light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_RECT = 4;\r\n\r\n/**\r\n * Max number of shadow-casting lights backed by the screen-space shadow mask.\r\n *\r\n * Each mask layer packs 4 lights (one per RGBA8 channel), so this maps to\r\n * `MAX_SHADOW_MASK_LIGHTS / 4` texture array layers. Shadow-casting lights are\r\n * placed at the head of the clustered light buffer. Shadow lights beyond this\r\n * cap fall back to being lit without a mask-backed shadow.\r\n * @public\r\n */\r\nexport const MAX_SHADOW_MASK_LIGHTS = 32;\r\n\r\n/**\r\n * Opaque render queue type\r\n * @public\r\n */\r\nexport const QUEUE_OPAQUE = 1;\r\n\r\n/**\r\n * Transparent render queue type\r\n * @public\r\n */\r\nexport const QUEUE_TRANSPARENT = 2;\r\n\r\n/** @public */\r\nexport const MORPH_TARGET_POSITION = 0;\r\n/** @public */\r\nexport const MORPH_TARGET_NORMAL = 1;\r\n/** @public */\r\nexport const MORPH_TARGET_TANGENT = 2;\r\n/** @public */\r\nexport const MORPH_TARGET_COLOR = 3;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX0 = 4;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX1 = 5;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX2 = 6;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX3 = 7;\r\n/** @public */\r\nexport const MAX_MORPH_ATTRIBUTES = 8;\r\n/** @public */\r\nexport const DEFAULT_MORPH_TARGET_LIMIT = 256;\r\n/** @public */\r\nexport const DEFAULT_ACTIVE_MORPH_TARGET_LIMIT = 64;\r\n/** @public */\r\nexport const MAX_MORPH_TARGETS = 1024;\r\n/** @public */\r\nexport const DEFAULT_SKIN_INFLUENCE_LIMIT = 4;\r\n/** @public */\r\nexport const MAX_SKIN_INFLUENCES = 12;\r\n/** @public */\r\nexport const MAX_SKIN_EXTRA_INFLUENCE_PAIRS = Math.ceil(Math.max(0, MAX_SKIN_INFLUENCES - 4) / 2);\r\n/** @public */\r\nexport const MORPH_WEIGHTS_VECTOR_COUNT = (MAX_MORPH_TARGETS + 3) >> 2;\r\n/** @public */\r\nexport const MORPH_ATTRIBUTE_VECTOR_COUNT = (MAX_MORPH_ATTRIBUTES + 3) >> 2;\r\n\r\nlet morphTargetLimit = DEFAULT_MORPH_TARGET_LIMIT;\r\nlet activeMorphTargetLimit = DEFAULT_ACTIVE_MORPH_TARGET_LIMIT;\r\nlet skinInfluenceLimit = DEFAULT_SKIN_INFLUENCE_LIMIT;\r\n\r\n/** @public */\r\nexport function normalizeMorphTargetLimit(value: number | null | undefined): number {\r\n if (typeof value !== 'number' || !Number.isFinite(value)) {\r\n return DEFAULT_MORPH_TARGET_LIMIT;\r\n }\r\n return Math.min(MAX_MORPH_TARGETS, Math.max(1, Math.trunc(value)));\r\n}\r\n\r\n/** @public */\r\nexport function getMorphTargetLimit(): number {\r\n return morphTargetLimit;\r\n}\r\n\r\n/** @public */\r\nexport function setMorphTargetLimit(value: number | null | undefined): number {\r\n morphTargetLimit = normalizeMorphTargetLimit(value);\r\n return morphTargetLimit;\r\n}\r\n\r\n/** @public */\r\nexport function normalizeActiveMorphTargetLimit(value: number | null | undefined): number {\r\n if (typeof value !== 'number' || !Number.isFinite(value)) {\r\n return DEFAULT_ACTIVE_MORPH_TARGET_LIMIT;\r\n }\r\n return Math.min(MAX_MORPH_TARGETS, Math.max(1, Math.trunc(value)));\r\n}\r\n\r\n/** @public */\r\nexport function getActiveMorphTargetLimit(): number {\r\n return activeMorphTargetLimit;\r\n}\r\n\r\n/** @public */\r\nexport function setActiveMorphTargetLimit(value: number | null | undefined): number {\r\n activeMorphTargetLimit = normalizeActiveMorphTargetLimit(value);\r\n return activeMorphTargetLimit;\r\n}\r\n\r\n/** @public */\r\nexport function normalizeSkinInfluenceLimit(value: number | null | undefined): number {\r\n if (typeof value !== 'number' || !Number.isFinite(value)) {\r\n return DEFAULT_SKIN_INFLUENCE_LIMIT;\r\n }\r\n return Math.min(MAX_SKIN_INFLUENCES, Math.max(1, Math.trunc(value)));\r\n}\r\n\r\n/** @public */\r\nexport function getSkinInfluenceLimit(): number {\r\n return skinInfluenceLimit;\r\n}\r\n\r\n/** @public */\r\nexport function setSkinInfluenceLimit(value: number | null | undefined): number {\r\n skinInfluenceLimit = normalizeSkinInfluenceLimit(value);\r\n return skinInfluenceLimit;\r\n}\r\n\r\n/** @public */\r\nexport const MAX_TERRAIN_MIPMAP_LEVELS = 64;\r\n\r\n/** @public */\r\nexport const MAX_GERSTNER_WAVE_COUNT = 16;\r\n\r\n/**\r\n * Material varying flags\r\n * @public\r\n */\r\nexport const enum MaterialVaryingFlags {\r\n MORPH_ANIMATION = 1 << 0,\r\n SKIN_ANIMATION = 1 << 1,\r\n INSTANCING = 1 << 2,\r\n SCENE_STORE_ROUGHNESS = 1 << 3,\r\n APPLY_FOG = 1 << 4,\r\n SSS_STORE_PROFILE = 1 << 5,\r\n SSS_STORE_DIFFUSE = 1 << 6,\r\n SCENE_STORE_NORMAL = 1 << 7,\r\n SSS_STORE_TRANSMISSION = 1 << 8,\r\n SKIN_SSS_STORE = 1 << 9\r\n}\r\n\r\n/**\r\n * Atmospheric Fog flag\r\n * @public\r\n */\r\nexport const ATMOSPHERIC_FOG_BIT = 1 << 0;\r\n/**\r\n * Exponential Fog flag\r\n * @public\r\n */\r\nexport const HEIGHT_FOG_BIT = 1 << 1;\r\n\r\n/** @internal */\r\nexport const uniformSphereSamples = [\r\n new Vector3(-0.7838, -0.620933, 0.00996137),\r\n new Vector3(0.106751, 0.965982, 0.235549),\r\n new Vector3(-0.215177, -0.687115, -0.693954),\r\n new Vector3(0.318002, 0.0640084, -0.945927),\r\n new Vector3(0.357396, 0.555673, 0.750664),\r\n new Vector3(0.866397, -0.19756, 0.458613),\r\n new Vector3(0.130216, 0.232736, -0.963783),\r\n new Vector3(-0.00174431, 0.376657, 0.926351),\r\n new Vector3(0.663478, 0.704806, -0.251089),\r\n new Vector3(0.0327851, 0.110534, -0.993331),\r\n new Vector3(0.0561973, 0.0234288, 0.998145),\r\n new Vector3(0.0905264, -0.169771, 0.981317),\r\n new Vector3(0.26694, 0.95222, -0.148393),\r\n new Vector3(-0.812874, -0.559051, -0.163393),\r\n new Vector3(-0.323378, -0.25855, -0.910263),\r\n new Vector3(-0.1333, 0.591356, -0.795317),\r\n new Vector3(0.480876, 0.408711, 0.775702),\r\n new Vector3(-0.332263, -0.533895, -0.777533),\r\n new Vector3(-0.0392473, -0.704457, -0.708661),\r\n new Vector3(0.427015, 0.239811, 0.871865),\r\n new Vector3(-0.416624, -0.563856, 0.713085),\r\n new Vector3(0.12793, 0.334479, -0.933679),\r\n new Vector3(-0.0343373, -0.160593, -0.986423),\r\n new Vector3(0.580614, 0.0692947, 0.811225),\r\n new Vector3(-0.459187, 0.43944, 0.772036),\r\n new Vector3(0.215474, -0.539436, -0.81399),\r\n new Vector3(-0.378969, -0.31988, -0.868366),\r\n new Vector3(-0.279978, -0.0109692, 0.959944),\r\n new Vector3(0.692547, 0.690058, 0.210234),\r\n new Vector3(0.53227, -0.123044, -0.837585),\r\n new Vector3(-0.772313, -0.283334, -0.568555),\r\n new Vector3(-0.0311218, 0.995988, -0.0838977),\r\n new Vector3(-0.366931, -0.276531, -0.888196),\r\n new Vector3(0.488778, 0.367878, -0.791051),\r\n new Vector3(-0.885561, -0.453445, 0.100842),\r\n new Vector3(0.71656, 0.443635, 0.538265),\r\n new Vector3(0.645383, -0.152576, -0.748466),\r\n new Vector3(-0.171259, 0.91907, 0.354939),\r\n new Vector3(-0.0031122, 0.9457, 0.325026),\r\n new Vector3(0.731503, 0.623089, -0.276881),\r\n new Vector3(-0.91466, 0.186904, 0.358419),\r\n new Vector3(0.15595, 0.828193, -0.538309),\r\n new Vector3(0.175396, 0.584732, 0.792038),\r\n new Vector3(-0.0838381, -0.943461, 0.320707),\r\n new Vector3(0.305876, 0.727604, 0.614029),\r\n new Vector3(0.754642, -0.197903, -0.62558),\r\n new Vector3(0.217255, -0.0177771, -0.975953),\r\n new Vector3(0.140412, -0.844826, 0.516287),\r\n new Vector3(-0.549042, 0.574859, -0.606705),\r\n new Vector3(0.570057, 0.17459, 0.802841),\r\n new Vector3(-0.0330304, 0.775077, 0.631003),\r\n new Vector3(-0.938091, 0.138937, 0.317304),\r\n new Vector3(0.483197, -0.726405, -0.48873),\r\n new Vector3(0.485263, 0.52926, 0.695991),\r\n new Vector3(0.224189, 0.742282, -0.631472),\r\n new Vector3(-0.322429, 0.662214, -0.676396),\r\n new Vector3(0.625577, -0.12711, 0.769738),\r\n new Vector3(-0.714032, -0.584461, -0.385439),\r\n new Vector3(-0.0652053, -0.892579, -0.446151),\r\n new Vector3(0.408421, -0.912487, 0.0236566),\r\n new Vector3(0.0900381, 0.319983, 0.943135),\r\n new Vector3(-0.708553, 0.483646, 0.513847),\r\n new Vector3(0.803855, -0.0902273, 0.587942),\r\n new Vector3(-0.0555802, -0.374602, -0.925519)\r\n];\r\n\r\n/** @internal */\r\nexport enum Fog {\r\n FOG_TYPE_NONE = 0,\r\n FOG_TYPE_HEIGHT = 4\r\n}\r\n"],"names":["RENDER_PASS_TYPE_LIGHT","RENDER_PASS_TYPE_SHADOWMAP","RENDER_PASS_TYPE_DEPTH","RENDER_PASS_TYPE_OBJECT_COLOR","BUILTIN_ASSET_TEXTURE_SHEEN_LUT","BUILTIN_ASSET_TEST_CUBEMAP","LIGHT_TYPE_NONE","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","LIGHT_TYPE_RECT","MAX_SHADOW_MASK_LIGHTS","QUEUE_OPAQUE","QUEUE_TRANSPARENT","MORPH_TARGET_POSITION","MORPH_TARGET_NORMAL","MORPH_TARGET_TANGENT","MORPH_TARGET_COLOR","MORPH_TARGET_TEX0","MORPH_TARGET_TEX1","MORPH_TARGET_TEX2","MORPH_TARGET_TEX3","MAX_MORPH_ATTRIBUTES","DEFAULT_MORPH_TARGET_LIMIT","DEFAULT_ACTIVE_MORPH_TARGET_LIMIT","MAX_MORPH_TARGETS","DEFAULT_SKIN_INFLUENCE_LIMIT","MAX_SKIN_INFLUENCES","MAX_SKIN_EXTRA_INFLUENCE_PAIRS","Math","ceil","max","MORPH_WEIGHTS_VECTOR_COUNT","MORPH_ATTRIBUTE_VECTOR_COUNT","morphTargetLimit","activeMorphTargetLimit","skinInfluenceLimit","normalizeMorphTargetLimit","value","Number","isFinite","min","trunc","getMorphTargetLimit","setMorphTargetLimit","normalizeActiveMorphTargetLimit","getActiveMorphTargetLimit","setActiveMorphTargetLimit","normalizeSkinInfluenceLimit","getSkinInfluenceLimit","setSkinInfluenceLimit","MAX_TERRAIN_MIPMAP_LEVELS","MAX_GERSTNER_WAVE_COUNT","MaterialVaryingFlags","ATMOSPHERIC_FOG_BIT","HEIGHT_FOG_BIT","uniformSphereSamples","Vector3","Fog"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zephyr3d/scene",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.27",
|
|
4
4
|
"description": "Scene API for zephyr3d",
|
|
5
5
|
"homepage": "https://github.com/gavinyork/zephyr3d#readme",
|
|
6
6
|
"type": "module",
|
|
@@ -67,8 +67,8 @@
|
|
|
67
67
|
"dependencies": {
|
|
68
68
|
"@types/draco3d": "^1.4.9",
|
|
69
69
|
"@webgpu/types": "^0.1.65",
|
|
70
|
-
"@zephyr3d/base": "^0.2.
|
|
71
|
-
"@zephyr3d/device": "^0.2.
|
|
70
|
+
"@zephyr3d/base": "^0.2.10",
|
|
71
|
+
"@zephyr3d/device": "^0.2.19",
|
|
72
72
|
"es-module-lexer": "^1.7.0"
|
|
73
73
|
},
|
|
74
74
|
"scripts": {
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ordering helper that encapsulates the side-effect "order token" chain.
|
|
3
|
-
*
|
|
4
|
-
* Side-effect passes (SkyUpdate, ClusterLights, ...) carry no data product, so
|
|
5
|
-
* they are ordered relative to one another through logical tokens rather than
|
|
6
|
-
* texture reads/writes. This scope tracks the most recently emitted token so a
|
|
7
|
-
* pass can chain after the previous one and (optionally) emit its own, without
|
|
8
|
-
* the builder threading a mutable `orderToken` local between blocks.
|
|
9
|
-
*
|
|
10
|
-
* @public
|
|
11
|
-
*/ class OrderingScope {
|
|
12
|
-
/** @internal */ _last = null;
|
|
13
|
-
/**
|
|
14
|
-
* Declare a read on the most recently emitted ordering token, if any, to
|
|
15
|
-
* order the current pass after the previous side-effect pass.
|
|
16
|
-
*
|
|
17
|
-
* @param builder - The pass builder of the current pass.
|
|
18
|
-
*/ chainInto(builder) {
|
|
19
|
-
if (this._last) {
|
|
20
|
-
builder.read(this._last);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Emit a new ordering token from the current pass and record it as the latest
|
|
25
|
-
* link in the chain.
|
|
26
|
-
*
|
|
27
|
-
* @param builder - The pass builder of the current pass.
|
|
28
|
-
* @param name - Debug label for the token.
|
|
29
|
-
* @returns The newly created token handle.
|
|
30
|
-
*/ emit(builder, name) {
|
|
31
|
-
const token = builder.createToken(name);
|
|
32
|
-
this._last = token;
|
|
33
|
-
return token;
|
|
34
|
-
}
|
|
35
|
-
/** The most recently emitted ordering token, or null. */ get last() {
|
|
36
|
-
return this._last;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export { OrderingScope };
|
|
41
|
-
//# sourceMappingURL=frame_graph_context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"frame_graph_context.js","sources":["../../../src/render/rendergraph/frame_graph_context.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\nimport type { RGHandle, RGPassBuilder } from './types';\nimport type { RenderGraph } from './rendergraph';\nimport type { RGBlackboard } from './blackboard';\nimport type { HistoryResourceManager } from './history_resource_manager';\nimport type { DrawContext } from '../drawable';\nimport type { RenderQueue } from '../render_queue';\nimport type { Texture2D, FrameBuffer } from '@zephyr3d/device';\nimport type { ForwardPlusOptions, FrameState, ForwardPlusBuildState } from './forward_plus_builder';\n\n/**\n * Ordering helper that encapsulates the side-effect \"order token\" chain.\n *\n * Side-effect passes (SkyUpdate, ClusterLights, ...) carry no data product, so\n * they are ordered relative to one another through logical tokens rather than\n * texture reads/writes. This scope tracks the most recently emitted token so a\n * pass can chain after the previous one and (optionally) emit its own, without\n * the builder threading a mutable `orderToken` local between blocks.\n *\n * @public\n */\nexport class OrderingScope {\n /** @internal */\n private _last: Nullable<RGHandle> = null;\n\n /**\n * Declare a read on the most recently emitted ordering token, if any, to\n * order the current pass after the previous side-effect pass.\n *\n * @param builder - The pass builder of the current pass.\n */\n chainInto(builder: RGPassBuilder): void {\n if (this._last) {\n builder.read(this._last);\n }\n }\n\n /**\n * Emit a new ordering token from the current pass and record it as the latest\n * link in the chain.\n *\n * @param builder - The pass builder of the current pass.\n * @param name - Debug label for the token.\n * @returns The newly created token handle.\n */\n emit(builder: RGPassBuilder, name: string): RGHandle {\n const token = builder.createToken(name);\n this._last = token;\n return token;\n }\n\n /** The most recently emitted ordering token, or null. */\n get last(): Nullable<RGHandle> {\n return this._last;\n }\n}\n\n/**\n * Build-time context threaded through the Forward+ graph assembly.\n *\n * This aggregates everything the individual pass-build blocks previously reached\n * through enclosing function locals (`orderToken`, the mutable `depthHandle`,\n * result bundles, ...). Collecting them here is the seam that lets each pass be\n * expressed as an independent unit reading its inputs from a shared context\n * rather than from closure-captured variables.\n *\n * Handles for well-known frame resources (linear depth, scene color, ...) flow\n * through {@link RenderModuleContext.blackboard} keyed by\n * {@link ./blackboard#FrameResources}; the mutable execute-time state that is\n * not a render-graph resource stays on {@link FrameGraphContext.frame}.\n *\n * @public\n */\nexport interface RenderModuleContext {\n /** The render graph being populated for this frame. */\n readonly graph: RenderGraph;\n /** Frame draw context. */\n readonly ctx: DrawContext;\n /** The culled render queue for this frame. */\n readonly renderQueue: RenderQueue;\n /** Named registry of shared frame-resource handles (see {@link ./blackboard#FrameResources}). */\n readonly blackboard: RGBlackboard;\n /** Cross-frame history resource manager, or null when unavailable. */\n readonly history: Nullable<HistoryResourceManager<Texture2D>>;\n /** Pipeline feature toggles derived from scene/camera state. */\n readonly options: ForwardPlusOptions;\n /** Ordering-token chain for side-effect passes. */\n readonly ordering: OrderingScope;\n /** The imported backbuffer handle (graph sink). */\n readonly backbuffer: RGHandle;\n}\n\n/**\n * Full build-time context threaded through the Forward+ pipeline. Extends the\n * public {@link RenderModuleContext} with the Forward+ pipeline's internal\n * mutable state, which built-in modules read/write but custom modules should\n * not depend on.\n *\n * @internal\n */\nexport interface FrameGraphContext extends RenderModuleContext {\n /** Mutable execute-time state shared between pass callbacks. */\n readonly frame: FrameState;\n /** Mutable build-state shared between modules for non-resource intermediates. */\n readonly state: ForwardPlusBuildState;\n}\n\n/** Backend framebuffer type used by the Forward+ allocator. */\nexport type ForwardPlusFramebuffer = FrameBuffer;\n"],"names":["OrderingScope","_last","chainInto","builder","read","emit","name","token","createToken","last"],"mappings":"AAUA;;;;;;;;;;AAUC,IACM,MAAMA,aAAAA,CAAAA;qBAEX,KAAQC,GAA4B,IAAK;AAEzC;;;;;MAMAC,SAAAA,CAAUC,OAAsB,EAAQ;QACtC,IAAI,IAAI,CAACF,KAAK,EAAE;AACdE,YAAAA,OAAAA,CAAQC,IAAI,CAAC,IAAI,CAACH,KAAK,CAAA;AACzB;AACF;AAEA;;;;;;;AAOC,MACDI,IAAKF,CAAAA,OAAsB,EAAEG,IAAY,EAAY;QACnD,MAAMC,KAAAA,GAAQJ,OAAQK,CAAAA,WAAW,CAACF,IAAAA,CAAAA;QAClC,IAAI,CAACL,KAAK,GAAGM,KAAAA;QACb,OAAOA,KAAAA;AACT;8DAGA,IAAIE,IAA2B,GAAA;QAC7B,OAAO,IAAI,CAACR,KAAK;AACnB;AACF;;;;"}
|
package/dist/shaders/ssgi.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Animated interleaved-gradient-noise pair used to decorrelate SSGI rays.
|
|
3
|
-
*
|
|
4
|
-
* Produces two low-discrepancy random numbers in [0, 1) for a given fragment,
|
|
5
|
-
* advanced per sample/frame through golden-ratio sequences so the temporal
|
|
6
|
-
* resolve pass converges the Monte-Carlo estimate.
|
|
7
|
-
*
|
|
8
|
-
* @param scope - The shader scope
|
|
9
|
-
* @param fragCoord - Fragment coordinate in pixels
|
|
10
|
-
* @param seed - Sequence index (frameIndex * sampleCount + sampleIndex)
|
|
11
|
-
* @returns A vec2 of pseudo random numbers in [0, 1)
|
|
12
|
-
*
|
|
13
|
-
* @internal
|
|
14
|
-
*/ function SSGI_rand2(scope, fragCoord, seed) {
|
|
15
|
-
const pb = scope.$builder;
|
|
16
|
-
pb.func('SSGI_ign', [
|
|
17
|
-
pb.vec2('p')
|
|
18
|
-
], function() {
|
|
19
|
-
this.$return(pb.fract(pb.mul(52.9829189, pb.fract(pb.add(pb.mul(0.06711056, this.p.x), pb.mul(0.00583715, this.p.y))))));
|
|
20
|
-
});
|
|
21
|
-
pb.func('SSGI_rand2', [
|
|
22
|
-
pb.vec2('fragCoord'),
|
|
23
|
-
pb.float('seed')
|
|
24
|
-
], function() {
|
|
25
|
-
this.$l.n1 = this.SSGI_ign(this.fragCoord);
|
|
26
|
-
this.$l.n2 = this.SSGI_ign(pb.add(this.fragCoord, pb.vec2(5.588238, 5.588238)));
|
|
27
|
-
// Golden-ratio (and its square) sequences advance the pair every sample
|
|
28
|
-
this.$return(pb.fract(pb.add(pb.vec2(this.n1, this.n2), pb.mul(pb.vec2(0.61803398875, 0.38196601125), this.seed))));
|
|
29
|
-
});
|
|
30
|
-
return scope.SSGI_rand2(fragCoord, seed);
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Cosine-weighted hemisphere sampling around a normal.
|
|
34
|
-
*
|
|
35
|
-
* With cosine-weighted sampling the Monte-Carlo estimator of the rendering
|
|
36
|
-
* equation's diffuse term reduces to the plain average of the sampled
|
|
37
|
-
* radiances, so the SSGI trace pass can simply accumulate hit colors.
|
|
38
|
-
*
|
|
39
|
-
* @param scope - The shader scope
|
|
40
|
-
* @param normal - Unit normal the hemisphere is oriented around
|
|
41
|
-
* @param rand - Two random numbers in [0, 1)
|
|
42
|
-
* @returns A unit direction inside the hemisphere
|
|
43
|
-
*
|
|
44
|
-
* @internal
|
|
45
|
-
*/ function SSGI_cosineSampleHemisphere(scope, normal, rand) {
|
|
46
|
-
const pb = scope.$builder;
|
|
47
|
-
pb.func('SSGI_cosineSampleHemisphere', [
|
|
48
|
-
pb.vec3('n'),
|
|
49
|
-
pb.vec2('u')
|
|
50
|
-
], function() {
|
|
51
|
-
this.$l.up = this.$choice(pb.lessThan(pb.abs(this.n.z), 0.999), pb.vec3(0, 0, 1), pb.vec3(1, 0, 0));
|
|
52
|
-
this.$l.tangent = pb.normalize(pb.cross(this.up, this.n));
|
|
53
|
-
this.$l.bitangent = pb.cross(this.n, this.tangent);
|
|
54
|
-
this.$l.r = pb.sqrt(this.u.x);
|
|
55
|
-
this.$l.phi = pb.mul(this.u.y, Math.PI * 2);
|
|
56
|
-
this.$l.dir = pb.add(pb.mul(this.tangent, pb.mul(this.r, pb.cos(this.phi))), pb.mul(this.bitangent, pb.mul(this.r, pb.sin(this.phi))), pb.mul(this.n, pb.sqrt(pb.max(0, pb.sub(1, this.u.x)))));
|
|
57
|
-
this.$return(pb.normalize(this.dir));
|
|
58
|
-
});
|
|
59
|
-
return scope.SSGI_cosineSampleHemisphere(normal, rand);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export { SSGI_cosineSampleHemisphere, SSGI_rand2 };
|
|
63
|
-
//# sourceMappingURL=ssgi.js.map
|
package/dist/shaders/ssgi.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ssgi.js","sources":["../../src/shaders/ssgi.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\n\n/**\n * Animated interleaved-gradient-noise pair used to decorrelate SSGI rays.\n *\n * Produces two low-discrepancy random numbers in [0, 1) for a given fragment,\n * advanced per sample/frame through golden-ratio sequences so the temporal\n * resolve pass converges the Monte-Carlo estimate.\n *\n * @param scope - The shader scope\n * @param fragCoord - Fragment coordinate in pixels\n * @param seed - Sequence index (frameIndex * sampleCount + sampleIndex)\n * @returns A vec2 of pseudo random numbers in [0, 1)\n *\n * @internal\n */\nexport function SSGI_rand2(scope: PBInsideFunctionScope, fragCoord: PBShaderExp, seed: PBShaderExp) {\n const pb = scope.$builder;\n pb.func('SSGI_ign', [pb.vec2('p')], function () {\n this.$return(\n pb.fract(\n pb.mul(52.9829189, pb.fract(pb.add(pb.mul(0.06711056, this.p.x), pb.mul(0.00583715, this.p.y))))\n )\n );\n });\n pb.func('SSGI_rand2', [pb.vec2('fragCoord'), pb.float('seed')], function () {\n this.$l.n1 = this.SSGI_ign(this.fragCoord);\n this.$l.n2 = this.SSGI_ign(pb.add(this.fragCoord, pb.vec2(5.588238, 5.588238)));\n // Golden-ratio (and its square) sequences advance the pair every sample\n this.$return(\n pb.fract(pb.add(pb.vec2(this.n1, this.n2), pb.mul(pb.vec2(0.61803398875, 0.38196601125), this.seed)))\n );\n });\n return scope.SSGI_rand2(fragCoord, seed);\n}\n\n/**\n * Cosine-weighted hemisphere sampling around a normal.\n *\n * With cosine-weighted sampling the Monte-Carlo estimator of the rendering\n * equation's diffuse term reduces to the plain average of the sampled\n * radiances, so the SSGI trace pass can simply accumulate hit colors.\n *\n * @param scope - The shader scope\n * @param normal - Unit normal the hemisphere is oriented around\n * @param rand - Two random numbers in [0, 1)\n * @returns A unit direction inside the hemisphere\n *\n * @internal\n */\nexport function SSGI_cosineSampleHemisphere(\n scope: PBInsideFunctionScope,\n normal: PBShaderExp,\n rand: PBShaderExp\n) {\n const pb = scope.$builder;\n pb.func('SSGI_cosineSampleHemisphere', [pb.vec3('n'), pb.vec2('u')], function () {\n this.$l.up = this.$choice(pb.lessThan(pb.abs(this.n.z), 0.999), pb.vec3(0, 0, 1), pb.vec3(1, 0, 0));\n this.$l.tangent = pb.normalize(pb.cross(this.up, this.n));\n this.$l.bitangent = pb.cross(this.n, this.tangent);\n this.$l.r = pb.sqrt(this.u.x);\n this.$l.phi = pb.mul(this.u.y, Math.PI * 2);\n this.$l.dir = pb.add(\n pb.mul(this.tangent, pb.mul(this.r, pb.cos(this.phi))),\n pb.mul(this.bitangent, pb.mul(this.r, pb.sin(this.phi))),\n pb.mul(this.n, pb.sqrt(pb.max(0, pb.sub(1, this.u.x))))\n );\n this.$return(pb.normalize(this.dir));\n });\n return scope.SSGI_cosineSampleHemisphere(normal, rand);\n}\n"],"names":["SSGI_rand2","scope","fragCoord","seed","pb","$builder","func","vec2","$return","fract","mul","add","p","x","y","float","$l","n1","SSGI_ign","n2","SSGI_cosineSampleHemisphere","normal","rand","vec3","up","$choice","lessThan","abs","n","z","tangent","normalize","cross","bitangent","r","sqrt","u","phi","Math","PI","dir","cos","sin","max","sub"],"mappings":"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"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { Matrix4x4 } from '@zephyr3d/base';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Shared helpers for validating SSGI temporal history across frames.
|
|
5
|
-
*
|
|
6
|
-
* SSGI stores the surface depth of a frame as that frame's view-space Z (the
|
|
7
|
-
* distance along the camera forward axis, in world units). Comparing such a
|
|
8
|
-
* value against the *current* frame's view-space Z is only meaningful while the
|
|
9
|
-
* camera is still: rotating the camera turns the forward axis, so a static world
|
|
10
|
-
* point changes its view-space Z by roughly
|
|
11
|
-
*
|
|
12
|
-
* dz ~ dTheta * viewZ * tan(halfFovX) * |ndc.x|
|
|
13
|
-
*
|
|
14
|
-
* which is zero at the screen center and grows with both depth and screen
|
|
15
|
-
* eccentricity. At a plain mouse-look rate that already exceeds any reasonable
|
|
16
|
-
* absolute tolerance for distant off-center pixels, so history gets rejected in
|
|
17
|
-
* screen-edge bands even though it is perfectly valid. Every consumer therefore
|
|
18
|
-
* has to convert the current depth into the *previous* frame's view space before
|
|
19
|
-
* comparing.
|
|
20
|
-
*
|
|
21
|
-
* @internal
|
|
22
|
-
*/ /**
|
|
23
|
-
* Relative share of the compared depth added to the absolute tolerance. 2% keeps
|
|
24
|
-
* a 10m surface within 0.2m, comfortably above rgba16f depth quantization while
|
|
25
|
-
* still separating surfaces that a bounce should not share.
|
|
26
|
-
* @internal
|
|
27
|
-
*/ const SSGI_DEPTH_TOLERANCE_SLOPE = 0.02;
|
|
28
|
-
/**
|
|
29
|
-
* `prevVP * inverse(currentVP)`: maps a current-frame clip position onto the
|
|
30
|
-
* previous frame's clip space, where `w` is the previous view-space Z.
|
|
31
|
-
*
|
|
32
|
-
* The current half uses the jittered inverse VP because every consumer
|
|
33
|
-
* reconstructs from a depth buffer that was rasterized with jitter applied.
|
|
34
|
-
* Jitter only shifts clip x/y, so pairing it with the unjittered `prevVPMatrix`
|
|
35
|
-
* still produces the correct `w`.
|
|
36
|
-
*
|
|
37
|
-
* Falls back to the current VP before any previous transform exists, which
|
|
38
|
-
* degenerates into comparing the current depth against itself - harmless,
|
|
39
|
-
* because the history textures are empty on that frame anyway.
|
|
40
|
-
*
|
|
41
|
-
* @param ctx - Current draw context
|
|
42
|
-
* @returns The reprojection matrix
|
|
43
|
-
* @internal
|
|
44
|
-
*/ function ssgiCurrentToPrevClipMatrix(ctx) {
|
|
45
|
-
const camera = ctx.camera;
|
|
46
|
-
const prevVP = camera.prevVPMatrix ?? camera.viewProjectionMatrix;
|
|
47
|
-
return Matrix4x4.multiply(prevVP, camera.jitteredInvVPMatrix);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Converts the current frame's linear depth at `uv` into the view-space Z it
|
|
51
|
-
* would have had in the previous frame, so it can be compared against the depth
|
|
52
|
-
* stored in the SSGI surface history.
|
|
53
|
-
*
|
|
54
|
-
* `currentToPrevClipMatrix` must be `prevViewProjection * inverse(currentViewProjection)`,
|
|
55
|
-
* mapping a current-frame clip position onto the previous frame's clip space. In
|
|
56
|
-
* a perspective projection the resulting `w` is exactly the previous view-space
|
|
57
|
-
* Z in world units, which is the quantity the surface pass wrote.
|
|
58
|
-
*
|
|
59
|
-
* @param scope - Current shader scope
|
|
60
|
-
* @param currentToPrevClipMatrix - `prevVP * invCurrentVP`, as a mat4
|
|
61
|
-
* @param uv - Screen uv of the pixel being validated
|
|
62
|
-
* @param linearDepth - Normalized linear depth (viewZ / far) at `uv`
|
|
63
|
-
* @param nearFar - Camera near and far planes
|
|
64
|
-
* @returns Previous-frame view-space Z, in world units
|
|
65
|
-
* @internal
|
|
66
|
-
*/ function ssgiPreviousViewDepth(scope, currentToPrevClipMatrix, uv, linearDepth, nearFar) {
|
|
67
|
-
const pb = scope.$builder;
|
|
68
|
-
const funcName = 'Z_ssgiPreviousViewDepth';
|
|
69
|
-
pb.func(funcName, [
|
|
70
|
-
pb.mat4('toPrevClip'),
|
|
71
|
-
pb.vec2('uv'),
|
|
72
|
-
pb.float('linearDepth'),
|
|
73
|
-
pb.vec2('nearFar')
|
|
74
|
-
], function() {
|
|
75
|
-
// Invert the perspective depth mapping. `linearDepth` is the normalized
|
|
76
|
-
// viewZ / far that the depth prepass stored, so the non-linear depth is
|
|
77
|
-
// (near / linearDepth - far) / (near - far) - identical to the
|
|
78
|
-
// reconstruction in SSGI_getPosition. Operating on the normalized value
|
|
79
|
-
// directly matters: converting to world-unit viewZ first and reusing the
|
|
80
|
-
// same expression silently drops a factor of `far`, which pins every
|
|
81
|
-
// pixel at the far plane and rejects all history.
|
|
82
|
-
this.$l.safeLinearDepth = pb.max(this.linearDepth, 1e-6);
|
|
83
|
-
this.$l.ndcZ = pb.div(pb.sub(pb.div(this.nearFar.x, this.safeLinearDepth), this.nearFar.y), pb.sub(this.nearFar.x, this.nearFar.y));
|
|
84
|
-
this.$l.clipPos = pb.vec4(pb.sub(pb.mul(this.uv, 2), pb.vec2(1)), pb.sub(pb.mul(pb.clamp(this.ndcZ, 0, 1), 2), 1), 1);
|
|
85
|
-
// clipPos is already normalized (w = 1 after the NDC divide), so the
|
|
86
|
-
// reprojected w is directly the previous view-space Z.
|
|
87
|
-
this.$return(pb.mul(this.toPrevClip, this.clipPos).w);
|
|
88
|
-
});
|
|
89
|
-
return scope[funcName](currentToPrevClipMatrix, uv, linearDepth, nearFar);
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Depth tolerance for a history comparison at a given depth.
|
|
93
|
-
*
|
|
94
|
-
* A single absolute tolerance cannot serve the whole depth range: it is far too
|
|
95
|
-
* loose next to the camera, where a few centimetres separate distinct surfaces,
|
|
96
|
-
* and too tight in the distance, where depth precision and residual reprojection
|
|
97
|
-
* error both scale with viewZ. Scaling the floor by depth keeps the test at a
|
|
98
|
-
* roughly constant relative strictness.
|
|
99
|
-
*
|
|
100
|
-
* @param scope - Current shader scope
|
|
101
|
-
* @param baseTolerance - Configured absolute tolerance, in world units
|
|
102
|
-
* @param viewDepth - View-space Z the comparison happens at, in world units
|
|
103
|
-
* @returns Effective tolerance, in world units
|
|
104
|
-
* @internal
|
|
105
|
-
*/ function ssgiDepthTolerance(scope, baseTolerance, viewDepth) {
|
|
106
|
-
const pb = scope.$builder;
|
|
107
|
-
const funcName = 'Z_ssgiDepthTolerance';
|
|
108
|
-
pb.func(funcName, [
|
|
109
|
-
pb.float('baseTolerance'),
|
|
110
|
-
pb.float('viewDepth')
|
|
111
|
-
], function() {
|
|
112
|
-
this.$return(pb.max(pb.max(this.baseTolerance, 1e-4), pb.mul(pb.abs(this.viewDepth), SSGI_DEPTH_TOLERANCE_SLOPE)));
|
|
113
|
-
});
|
|
114
|
-
return scope[funcName](baseTolerance, viewDepth);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export { SSGI_DEPTH_TOLERANCE_SLOPE, ssgiCurrentToPrevClipMatrix, ssgiDepthTolerance, ssgiPreviousViewDepth };
|
|
118
|
-
//# sourceMappingURL=ssgi_reprojection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ssgi_reprojection.js","sources":["../../src/shaders/ssgi_reprojection.ts"],"sourcesContent":["import { Matrix4x4 } from '@zephyr3d/base';\nimport type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\nimport type { DrawContext } from '../render/drawable';\n\n/**\n * Shared helpers for validating SSGI temporal history across frames.\n *\n * SSGI stores the surface depth of a frame as that frame's view-space Z (the\n * distance along the camera forward axis, in world units). Comparing such a\n * value against the *current* frame's view-space Z is only meaningful while the\n * camera is still: rotating the camera turns the forward axis, so a static world\n * point changes its view-space Z by roughly\n *\n * dz ~ dTheta * viewZ * tan(halfFovX) * |ndc.x|\n *\n * which is zero at the screen center and grows with both depth and screen\n * eccentricity. At a plain mouse-look rate that already exceeds any reasonable\n * absolute tolerance for distant off-center pixels, so history gets rejected in\n * screen-edge bands even though it is perfectly valid. Every consumer therefore\n * has to convert the current depth into the *previous* frame's view space before\n * comparing.\n *\n * @internal\n */\n\n/**\n * Relative share of the compared depth added to the absolute tolerance. 2% keeps\n * a 10m surface within 0.2m, comfortably above rgba16f depth quantization while\n * still separating surfaces that a bounce should not share.\n * @internal\n */\nexport const SSGI_DEPTH_TOLERANCE_SLOPE = 0.02;\n\n/**\n * `prevVP * inverse(currentVP)`: maps a current-frame clip position onto the\n * previous frame's clip space, where `w` is the previous view-space Z.\n *\n * The current half uses the jittered inverse VP because every consumer\n * reconstructs from a depth buffer that was rasterized with jitter applied.\n * Jitter only shifts clip x/y, so pairing it with the unjittered `prevVPMatrix`\n * still produces the correct `w`.\n *\n * Falls back to the current VP before any previous transform exists, which\n * degenerates into comparing the current depth against itself - harmless,\n * because the history textures are empty on that frame anyway.\n *\n * @param ctx - Current draw context\n * @returns The reprojection matrix\n * @internal\n */\nexport function ssgiCurrentToPrevClipMatrix(ctx: DrawContext): Matrix4x4 {\n const camera = ctx.camera;\n const prevVP = camera.prevVPMatrix ?? camera.viewProjectionMatrix;\n return Matrix4x4.multiply(prevVP, camera.jitteredInvVPMatrix);\n}\n\n/**\n * Converts the current frame's linear depth at `uv` into the view-space Z it\n * would have had in the previous frame, so it can be compared against the depth\n * stored in the SSGI surface history.\n *\n * `currentToPrevClipMatrix` must be `prevViewProjection * inverse(currentViewProjection)`,\n * mapping a current-frame clip position onto the previous frame's clip space. In\n * a perspective projection the resulting `w` is exactly the previous view-space\n * Z in world units, which is the quantity the surface pass wrote.\n *\n * @param scope - Current shader scope\n * @param currentToPrevClipMatrix - `prevVP * invCurrentVP`, as a mat4\n * @param uv - Screen uv of the pixel being validated\n * @param linearDepth - Normalized linear depth (viewZ / far) at `uv`\n * @param nearFar - Camera near and far planes\n * @returns Previous-frame view-space Z, in world units\n * @internal\n */\nexport function ssgiPreviousViewDepth(\n scope: PBInsideFunctionScope,\n currentToPrevClipMatrix: PBShaderExp,\n uv: PBShaderExp,\n linearDepth: PBShaderExp,\n nearFar: PBShaderExp\n): PBShaderExp {\n const pb = scope.$builder;\n const funcName = 'Z_ssgiPreviousViewDepth';\n pb.func(\n funcName,\n [pb.mat4('toPrevClip'), pb.vec2('uv'), pb.float('linearDepth'), pb.vec2('nearFar')],\n function () {\n // Invert the perspective depth mapping. `linearDepth` is the normalized\n // viewZ / far that the depth prepass stored, so the non-linear depth is\n // (near / linearDepth - far) / (near - far) - identical to the\n // reconstruction in SSGI_getPosition. Operating on the normalized value\n // directly matters: converting to world-unit viewZ first and reusing the\n // same expression silently drops a factor of `far`, which pins every\n // pixel at the far plane and rejects all history.\n this.$l.safeLinearDepth = pb.max(this.linearDepth, 1e-6);\n this.$l.ndcZ = pb.div(\n pb.sub(pb.div(this.nearFar.x, this.safeLinearDepth), this.nearFar.y),\n pb.sub(this.nearFar.x, this.nearFar.y)\n );\n this.$l.clipPos = pb.vec4(\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\n pb.sub(pb.mul(pb.clamp(this.ndcZ, 0, 1), 2), 1),\n 1\n );\n // clipPos is already normalized (w = 1 after the NDC divide), so the\n // reprojected w is directly the previous view-space Z.\n this.$return(pb.mul(this.toPrevClip, this.clipPos).w);\n }\n );\n return scope[funcName](currentToPrevClipMatrix, uv, linearDepth, nearFar) as PBShaderExp;\n}\n\n/**\n * Depth tolerance for a history comparison at a given depth.\n *\n * A single absolute tolerance cannot serve the whole depth range: it is far too\n * loose next to the camera, where a few centimetres separate distinct surfaces,\n * and too tight in the distance, where depth precision and residual reprojection\n * error both scale with viewZ. Scaling the floor by depth keeps the test at a\n * roughly constant relative strictness.\n *\n * @param scope - Current shader scope\n * @param baseTolerance - Configured absolute tolerance, in world units\n * @param viewDepth - View-space Z the comparison happens at, in world units\n * @returns Effective tolerance, in world units\n * @internal\n */\nexport function ssgiDepthTolerance(\n scope: PBInsideFunctionScope,\n baseTolerance: PBShaderExp,\n viewDepth: PBShaderExp\n): PBShaderExp {\n const pb = scope.$builder;\n const funcName = 'Z_ssgiDepthTolerance';\n pb.func(funcName, [pb.float('baseTolerance'), pb.float('viewDepth')], function () {\n this.$return(\n pb.max(pb.max(this.baseTolerance, 1e-4), pb.mul(pb.abs(this.viewDepth), SSGI_DEPTH_TOLERANCE_SLOPE))\n );\n });\n return scope[funcName](baseTolerance, viewDepth) as PBShaderExp;\n}\n"],"names":["SSGI_DEPTH_TOLERANCE_SLOPE","ssgiCurrentToPrevClipMatrix","ctx","camera","prevVP","prevVPMatrix","viewProjectionMatrix","Matrix4x4","multiply","jitteredInvVPMatrix","ssgiPreviousViewDepth","scope","currentToPrevClipMatrix","uv","linearDepth","nearFar","pb","$builder","funcName","func","mat4","vec2","float","$l","safeLinearDepth","max","ndcZ","div","sub","x","y","clipPos","vec4","mul","clamp","$return","toPrevClip","w","ssgiDepthTolerance","baseTolerance","viewDepth","abs"],"mappings":"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"}
|