@zephyr3d/scene 0.9.25 → 0.9.26
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/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/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 +58 -24
- 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 +178 -67
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +193 -21
- 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 +4019 -1278
- package/dist/index.js +15 -5
- 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 +338 -300
- 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 +73 -18
- 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 +330 -20
- 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 +3 -1
- 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 +4 -1
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.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 +91 -34
- 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 +45 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cull_visitor.js +19 -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 +52 -51
- 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 +3 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +3 -0
- 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/oit.js +29 -0
- package/dist/render/oit.js.map +1 -0
- package/dist/render/render_queue.js +3 -0
- package/dist/render/render_queue.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 +61 -1
- package/dist/render/rendergraph/forward_plus_builder.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/weightedblended_oit.js +36 -35
- 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 +6 -0
- 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/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 +50 -50
- 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 +431 -100
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +370 -3
- 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 +133 -1
- 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 +4 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +96 -95
- 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
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
import { Vector4, DRef } from '@zephyr3d/base';
|
|
2
|
+
import { getEngine } from '../app/api.js';
|
|
3
|
+
import { PBRBluePrintMaterial } from './pbrblueprint.js';
|
|
4
|
+
import { SubsurfaceProfile } from './subsurfaceprofile.js';
|
|
5
|
+
|
|
6
|
+
function cloneUniformFinalValue(value) {
|
|
7
|
+
if (typeof value.finalValue === 'number') {
|
|
8
|
+
return value.finalValue;
|
|
9
|
+
}
|
|
10
|
+
if (value.finalValue instanceof Float32Array) {
|
|
11
|
+
return new Float32Array(value.finalValue);
|
|
12
|
+
}
|
|
13
|
+
return value.value.length === 1 ? value.value[0] : new Float32Array(value.value);
|
|
14
|
+
}
|
|
15
|
+
function cloneTextureParams(params) {
|
|
16
|
+
return params instanceof Vector4 ? params.clone() : params && typeof params === 'object' && 'x' in params && 'y' in params && 'z' in params && 'w' in params ? new Vector4(Number(params.x) || 0, Number(params.y) || 0, Number(params.z) || 0, Number(params.w) || 0) : Vector4.zero();
|
|
17
|
+
}
|
|
18
|
+
function cloneUniformValues(values) {
|
|
19
|
+
return (values ?? []).map((v)=>({
|
|
20
|
+
...v,
|
|
21
|
+
value: [
|
|
22
|
+
...v.value
|
|
23
|
+
],
|
|
24
|
+
finalValue: cloneUniformFinalValue(v)
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
function cloneUniformTextures(values) {
|
|
28
|
+
return (values ?? []).map((v)=>({
|
|
29
|
+
...v,
|
|
30
|
+
exposed: v.exposed ?? true,
|
|
31
|
+
params: cloneTextureParams(v.params),
|
|
32
|
+
finalTexture: v.finalTexture ? new DRef(v.finalTexture.get()) : undefined,
|
|
33
|
+
finalSampler: v.finalSampler
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
function mergeHydratedUniformTexture(base, runtime) {
|
|
37
|
+
if (!runtime) {
|
|
38
|
+
return base;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
...base,
|
|
42
|
+
finalTexture: runtime.finalTexture ?? base.finalTexture,
|
|
43
|
+
finalSampler: runtime.finalSampler ?? base.finalSampler,
|
|
44
|
+
params: runtime.params ?? base.params
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function inheritUniformTextureMetadata(parent, override) {
|
|
48
|
+
return {
|
|
49
|
+
...override,
|
|
50
|
+
type: parent.type,
|
|
51
|
+
exposed: parent.exposed,
|
|
52
|
+
sRGB: parent.sRGB,
|
|
53
|
+
wrapS: parent.wrapS,
|
|
54
|
+
wrapT: parent.wrapT,
|
|
55
|
+
minFilter: parent.minFilter,
|
|
56
|
+
magFilter: parent.magFilter,
|
|
57
|
+
mipFilter: parent.mipFilter,
|
|
58
|
+
inVertexShader: parent.inVertexShader,
|
|
59
|
+
inFragmentShader: parent.inFragmentShader,
|
|
60
|
+
finalSampler: parent.finalSampler
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function mergeUniformTextureOverride(parent, override, runtime) {
|
|
64
|
+
const hydratedOverride = override.finalTexture ? override : runtime?.texture === override.texture ? runtime : null;
|
|
65
|
+
return inheritUniformTextureMetadata(parent, {
|
|
66
|
+
...override,
|
|
67
|
+
finalTexture: hydratedOverride?.finalTexture ?? parent.finalTexture,
|
|
68
|
+
params: hydratedOverride?.params ?? parent.params
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function uniformValueEquals(a, b) {
|
|
72
|
+
if (a.type !== b.type || a.value.length !== b.value.length) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
for(let i = 0; i < a.value.length; i++){
|
|
76
|
+
if (a.value[i] !== b.value[i]) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
function uniformTextureEquals(a, b) {
|
|
83
|
+
return a.type === b.type && a.texture === b.texture;
|
|
84
|
+
}
|
|
85
|
+
function valuesEqual(a, b) {
|
|
86
|
+
if (a === b) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
if (a && b && typeof a === 'object' && typeof b === 'object' && 'equalsTo' in a && typeof a.equalsTo === 'function') {
|
|
90
|
+
return !!a.equalsTo(b);
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
function copyParentMaterialState(instance, parentMaterial) {
|
|
95
|
+
instance.alphaCutoff = parentMaterial.alphaCutoff;
|
|
96
|
+
instance.alphaDither = parentMaterial.alphaDither;
|
|
97
|
+
instance.alphaToCoverage = parentMaterial.alphaToCoverage;
|
|
98
|
+
instance.blendMode = parentMaterial.blendMode;
|
|
99
|
+
instance.transparentShadowCaster = parentMaterial.transparentShadowCaster;
|
|
100
|
+
instance.shadowAlphaCutoff = parentMaterial.shadowAlphaCutoff;
|
|
101
|
+
instance.cullMode = parentMaterial.cullMode;
|
|
102
|
+
instance.opacity = parentMaterial.opacity;
|
|
103
|
+
instance.objectColor = parentMaterial.objectColor;
|
|
104
|
+
instance.TAAStrength = parentMaterial.TAAStrength;
|
|
105
|
+
if (!instance.isMaterialPropertyOverridden('NormalScale')) {
|
|
106
|
+
instance.normalScale = parentMaterial.normalScale;
|
|
107
|
+
}
|
|
108
|
+
if (!instance.isMaterialPropertyOverridden('NormalFlipY')) {
|
|
109
|
+
instance.normalFlipY = parentMaterial.normalFlipY;
|
|
110
|
+
}
|
|
111
|
+
if (!instance.isMaterialPropertyOverridden('doubleSidedLighting')) {
|
|
112
|
+
instance.doubleSidedLighting = parentMaterial.doubleSidedLighting;
|
|
113
|
+
}
|
|
114
|
+
if (!instance.isMaterialPropertyOverridden('RectSpecularScale')) {
|
|
115
|
+
instance.rectSpecularScale = parentMaterial.rectSpecularScale;
|
|
116
|
+
}
|
|
117
|
+
instance.clearcoat = parentMaterial.clearcoat;
|
|
118
|
+
instance.clearcoatIntensity = parentMaterial.clearcoatIntensity;
|
|
119
|
+
instance.clearcoatRoughnessFactor = parentMaterial.clearcoatRoughnessFactor;
|
|
120
|
+
instance.clearcoatIntensityTexture = parentMaterial.clearcoatIntensityTexture;
|
|
121
|
+
instance.clearcoatIntensityTextureSampler = parentMaterial.clearcoatIntensityTextureSampler;
|
|
122
|
+
instance.clearcoatIntensityTexCoordMatrix = parentMaterial.clearcoatIntensityTexCoordMatrix;
|
|
123
|
+
instance.clearcoatIntensityTexCoordIndex = parentMaterial.clearcoatIntensityTexCoordIndex;
|
|
124
|
+
instance.clearcoatRoughnessTexture = parentMaterial.clearcoatRoughnessTexture;
|
|
125
|
+
instance.clearcoatRoughnessTextureSampler = parentMaterial.clearcoatRoughnessTextureSampler;
|
|
126
|
+
instance.clearcoatRoughnessTexCoordMatrix = parentMaterial.clearcoatRoughnessTexCoordMatrix;
|
|
127
|
+
instance.clearcoatRoughnessTexCoordIndex = parentMaterial.clearcoatRoughnessTexCoordIndex;
|
|
128
|
+
instance.clearcoatNormalTexture = parentMaterial.clearcoatNormalTexture;
|
|
129
|
+
instance.clearcoatNormalTextureSampler = parentMaterial.clearcoatNormalTextureSampler;
|
|
130
|
+
instance.clearcoatNormalTexCoordMatrix = parentMaterial.clearcoatNormalTexCoordMatrix;
|
|
131
|
+
instance.clearcoatNormalTexCoordIndex = parentMaterial.clearcoatNormalTexCoordIndex;
|
|
132
|
+
instance.syncInheritedSubsurfaceProfile(parentMaterial.subsurfaceProfile);
|
|
133
|
+
if (!instance.hasReflectionModeOverride()) {
|
|
134
|
+
instance.setBlueprintInstanceReflectionMode(parentMaterial.reflectionMode, true);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Blueprint material instance asset.
|
|
139
|
+
*
|
|
140
|
+
* Inherits graph/IR from a parent blueprint material and only stores parameter overrides.
|
|
141
|
+
* Instances are asset-level indirections, distinct from MeshMaterial runtime instancing.
|
|
142
|
+
*
|
|
143
|
+
* @public
|
|
144
|
+
*/ class PBRBluePrintMaterialInstance extends PBRBluePrintMaterial {
|
|
145
|
+
_parentMaterialId;
|
|
146
|
+
_parentMaterial;
|
|
147
|
+
_overrideUniformValues;
|
|
148
|
+
_overrideUniformTextures;
|
|
149
|
+
_reflectionModeOverridden;
|
|
150
|
+
_overrideMaterialProps;
|
|
151
|
+
_subsurfaceProfileOverride;
|
|
152
|
+
constructor(parentMaterial, parentMaterialId = ''){
|
|
153
|
+
super();
|
|
154
|
+
this._parentMaterialId = parentMaterialId;
|
|
155
|
+
this._parentMaterial = null;
|
|
156
|
+
this._overrideUniformValues = new Map();
|
|
157
|
+
this._overrideUniformTextures = new Map();
|
|
158
|
+
this._reflectionModeOverridden = false;
|
|
159
|
+
this._overrideMaterialProps = new Set();
|
|
160
|
+
this._subsurfaceProfileOverride = null;
|
|
161
|
+
if (parentMaterial) {
|
|
162
|
+
this.setParentMaterial(parentMaterial, parentMaterialId);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
copyFrom(other) {
|
|
166
|
+
super.copyFrom(other);
|
|
167
|
+
if (other instanceof PBRBluePrintMaterialInstance) {
|
|
168
|
+
const overrideUniformValues = cloneUniformValues([
|
|
169
|
+
...other._overrideUniformValues.values()
|
|
170
|
+
]);
|
|
171
|
+
const overrideUniformTextures = cloneUniformTextures([
|
|
172
|
+
...other._overrideUniformTextures.values()
|
|
173
|
+
]);
|
|
174
|
+
const subsurfaceProfileOverride = this.copySubsurfaceProfile(other._subsurfaceProfileOverride);
|
|
175
|
+
for (const uniform of this._overrideUniformTextures.values()){
|
|
176
|
+
uniform.finalTexture?.dispose();
|
|
177
|
+
}
|
|
178
|
+
this._parentMaterial = other._parentMaterial;
|
|
179
|
+
this._parentMaterialId = other._parentMaterialId;
|
|
180
|
+
this._overrideUniformValues = new Map(overrideUniformValues.map((uniform)=>[
|
|
181
|
+
uniform.name,
|
|
182
|
+
uniform
|
|
183
|
+
]));
|
|
184
|
+
this._overrideUniformTextures = new Map(overrideUniformTextures.map((uniform)=>[
|
|
185
|
+
uniform.name,
|
|
186
|
+
uniform
|
|
187
|
+
]));
|
|
188
|
+
this._reflectionModeOverridden = other._reflectionModeOverridden;
|
|
189
|
+
this._overrideMaterialProps = new Set(other._overrideMaterialProps);
|
|
190
|
+
this._subsurfaceProfileOverride?.dispose();
|
|
191
|
+
this._subsurfaceProfileOverride = subsurfaceProfileOverride;
|
|
192
|
+
this.syncInheritedUniforms();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
get parentMaterialId() {
|
|
196
|
+
return this._parentMaterialId;
|
|
197
|
+
}
|
|
198
|
+
get parentMaterial() {
|
|
199
|
+
return this._parentMaterial;
|
|
200
|
+
}
|
|
201
|
+
get isBlueprintMaterialInstance() {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
get hasSubsurfaceProfileOverride() {
|
|
205
|
+
return !!this._subsurfaceProfileOverride;
|
|
206
|
+
}
|
|
207
|
+
setMaterialPropertyOverrides(propNames) {
|
|
208
|
+
this._overrideMaterialProps = new Set(propNames);
|
|
209
|
+
}
|
|
210
|
+
getMaterialPropertyOverrides() {
|
|
211
|
+
return [
|
|
212
|
+
...this._overrideMaterialProps
|
|
213
|
+
];
|
|
214
|
+
}
|
|
215
|
+
markMaterialPropertyOverridden(propName) {
|
|
216
|
+
this._overrideMaterialProps.add(propName);
|
|
217
|
+
}
|
|
218
|
+
isMaterialPropertyOverridden(propName) {
|
|
219
|
+
return this._overrideMaterialProps.has(propName);
|
|
220
|
+
}
|
|
221
|
+
set uniformValues(val) {
|
|
222
|
+
super.uniformValues = val;
|
|
223
|
+
}
|
|
224
|
+
get uniformValues() {
|
|
225
|
+
return super.uniformValues;
|
|
226
|
+
}
|
|
227
|
+
set uniformTextures(val) {
|
|
228
|
+
super.uniformTextures = val;
|
|
229
|
+
}
|
|
230
|
+
get uniformTextures() {
|
|
231
|
+
return super.uniformTextures;
|
|
232
|
+
}
|
|
233
|
+
setOverrides(uniformValues, uniformTextures) {
|
|
234
|
+
const parentValueMap = new Map((this._parentMaterial?.uniformValues ?? []).map((v)=>[
|
|
235
|
+
v.name,
|
|
236
|
+
v
|
|
237
|
+
]));
|
|
238
|
+
const parentTextureMap = new Map((this._parentMaterial?.uniformTextures ?? []).map((v)=>[
|
|
239
|
+
v.name,
|
|
240
|
+
v
|
|
241
|
+
]));
|
|
242
|
+
this._overrideUniformValues = new Map(cloneUniformValues(uniformValues).filter((v)=>{
|
|
243
|
+
const parent = parentValueMap.get(v.name);
|
|
244
|
+
return !parent || !uniformValueEquals(v, parent);
|
|
245
|
+
}).map((v)=>[
|
|
246
|
+
v.name,
|
|
247
|
+
v
|
|
248
|
+
]));
|
|
249
|
+
this._overrideUniformTextures = new Map(cloneUniformTextures(uniformTextures).filter((v)=>{
|
|
250
|
+
const parent = parentTextureMap.get(v.name);
|
|
251
|
+
return !parent || !uniformTextureEquals(v, parent);
|
|
252
|
+
}).map((v)=>{
|
|
253
|
+
const parent = parentTextureMap.get(v.name);
|
|
254
|
+
return [
|
|
255
|
+
v.name,
|
|
256
|
+
parent ? inheritUniformTextureMetadata(parent, v) : v
|
|
257
|
+
];
|
|
258
|
+
}));
|
|
259
|
+
this.syncInheritedUniforms();
|
|
260
|
+
}
|
|
261
|
+
getOverrideUniformValues() {
|
|
262
|
+
return [
|
|
263
|
+
...this._overrideUniformValues.values()
|
|
264
|
+
].map((v)=>({
|
|
265
|
+
name: v.name,
|
|
266
|
+
type: v.type,
|
|
267
|
+
value: [
|
|
268
|
+
...v.value
|
|
269
|
+
],
|
|
270
|
+
finalValue: undefined
|
|
271
|
+
}));
|
|
272
|
+
}
|
|
273
|
+
getOverrideUniformTextures() {
|
|
274
|
+
const parentTextureMap = new Map((this._parentMaterial?.uniformTextures ?? []).map((v)=>[
|
|
275
|
+
v.name,
|
|
276
|
+
v
|
|
277
|
+
]));
|
|
278
|
+
return [
|
|
279
|
+
...this._overrideUniformTextures.values()
|
|
280
|
+
].map((v)=>{
|
|
281
|
+
const parent = parentTextureMap.get(v.name);
|
|
282
|
+
const normalized = parent ? inheritUniformTextureMetadata(parent, v) : v;
|
|
283
|
+
return {
|
|
284
|
+
...normalized,
|
|
285
|
+
params: cloneTextureParams(normalized.params),
|
|
286
|
+
finalTexture: undefined,
|
|
287
|
+
finalSampler: undefined
|
|
288
|
+
};
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
getDiscardedOverridesForParent(parentMaterial) {
|
|
292
|
+
const parentValueMap = new Map(parentMaterial.uniformValues.map((v)=>[
|
|
293
|
+
v.name,
|
|
294
|
+
v
|
|
295
|
+
]));
|
|
296
|
+
const parentTextureMap = new Map(parentMaterial.uniformTextures.map((v)=>[
|
|
297
|
+
v.name,
|
|
298
|
+
v
|
|
299
|
+
]));
|
|
300
|
+
return {
|
|
301
|
+
uniformValues: [
|
|
302
|
+
...this._overrideUniformValues.values()
|
|
303
|
+
].filter((v)=>{
|
|
304
|
+
const parent = parentValueMap.get(v.name);
|
|
305
|
+
return !parent || parent.type !== v.type || parent.value.length !== v.value.length;
|
|
306
|
+
}).map((v)=>v.name),
|
|
307
|
+
uniformTextures: [
|
|
308
|
+
...this._overrideUniformTextures.values()
|
|
309
|
+
].filter((v)=>{
|
|
310
|
+
const parent = parentTextureMap.get(v.name);
|
|
311
|
+
return !parent || parent.type !== v.type || parent.exposed === false;
|
|
312
|
+
}).map((v)=>v.name)
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
changeParentMaterial(parentMaterial, parentMaterialId) {
|
|
316
|
+
const discarded = this.getDiscardedOverridesForParent(parentMaterial);
|
|
317
|
+
const discardedValues = new Set(discarded.uniformValues);
|
|
318
|
+
const discardedTextures = new Set(discarded.uniformTextures);
|
|
319
|
+
const parentTextureMap = new Map(parentMaterial.uniformTextures.map((v)=>[
|
|
320
|
+
v.name,
|
|
321
|
+
v
|
|
322
|
+
]));
|
|
323
|
+
this._overrideUniformValues = new Map([
|
|
324
|
+
...this._overrideUniformValues.entries()
|
|
325
|
+
].filter(([name])=>!discardedValues.has(name)));
|
|
326
|
+
this._overrideUniformTextures = new Map([
|
|
327
|
+
...this._overrideUniformTextures.entries()
|
|
328
|
+
].filter(([name])=>!discardedTextures.has(name)).map(([name, override])=>{
|
|
329
|
+
const parent = parentTextureMap.get(name);
|
|
330
|
+
return [
|
|
331
|
+
name,
|
|
332
|
+
{
|
|
333
|
+
...override,
|
|
334
|
+
exposed: parent.exposed,
|
|
335
|
+
inVertexShader: parent.inVertexShader,
|
|
336
|
+
inFragmentShader: parent.inFragmentShader
|
|
337
|
+
}
|
|
338
|
+
];
|
|
339
|
+
}));
|
|
340
|
+
this.uniformTextures = this.uniformTextures.filter((v)=>!discardedTextures.has(v.name));
|
|
341
|
+
this.setParentMaterial(parentMaterial, parentMaterialId);
|
|
342
|
+
return discarded;
|
|
343
|
+
}
|
|
344
|
+
hasReflectionModeOverride() {
|
|
345
|
+
return this._reflectionModeOverridden;
|
|
346
|
+
}
|
|
347
|
+
setBlueprintInstanceReflectionMode(val, inherited = false) {
|
|
348
|
+
this._reflectionModeOverridden = !inherited && !!this._parentMaterial && val !== this._parentMaterial.reflectionMode;
|
|
349
|
+
super.reflectionMode = val;
|
|
350
|
+
}
|
|
351
|
+
copySubsurfaceProfile(source) {
|
|
352
|
+
if (!source) {
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
const profile = new SubsurfaceProfile();
|
|
356
|
+
profile.copyFrom(source);
|
|
357
|
+
return profile;
|
|
358
|
+
}
|
|
359
|
+
ensureSubsurfaceProfileOverride() {
|
|
360
|
+
if (this._subsurfaceProfileOverride) {
|
|
361
|
+
return this._subsurfaceProfileOverride;
|
|
362
|
+
}
|
|
363
|
+
const source = this.subsurfaceProfile ?? this._parentMaterial?.subsurfaceProfile ?? null;
|
|
364
|
+
const profile = this.copySubsurfaceProfile(source);
|
|
365
|
+
this._subsurfaceProfileOverride = profile;
|
|
366
|
+
super.subsurfaceProfile = profile;
|
|
367
|
+
return profile;
|
|
368
|
+
}
|
|
369
|
+
getInheritedSubsurfaceProfile() {
|
|
370
|
+
return this._parentMaterial?.subsurfaceProfile ?? null;
|
|
371
|
+
}
|
|
372
|
+
syncInheritedSubsurfaceProfile(parentProfile) {
|
|
373
|
+
if (this._subsurfaceProfileOverride) {
|
|
374
|
+
super.subsurfaceProfile = this._subsurfaceProfileOverride;
|
|
375
|
+
} else {
|
|
376
|
+
super.subsurfaceProfile = parentProfile ?? null;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
setBlueprintInstanceSubsurfacePreset(val) {
|
|
380
|
+
this.setBlueprintInstanceSubsurfaceProfileValue('SubsurfaceLookPreset', 'preset', val);
|
|
381
|
+
}
|
|
382
|
+
setBlueprintInstanceSubsurfaceStrength(val) {
|
|
383
|
+
this.setBlueprintInstanceSubsurfaceProfileValue('SubsurfaceScatterWeight', 'strength', val);
|
|
384
|
+
}
|
|
385
|
+
setBlueprintInstanceSubsurfaceScale(val) {
|
|
386
|
+
this.setBlueprintInstanceSubsurfaceProfileValue('SubsurfaceScatterScale', 'scale', val);
|
|
387
|
+
}
|
|
388
|
+
setBlueprintInstanceSubsurfaceProfileValue(propName, key, value) {
|
|
389
|
+
const inherited = this.getInheritedSubsurfaceProfile();
|
|
390
|
+
const inheritedValue = inherited ? inherited[key] : undefined;
|
|
391
|
+
if (!this._subsurfaceProfileOverride && inherited && valuesEqual(inheritedValue, value)) {
|
|
392
|
+
this._overrideMaterialProps.delete(propName);
|
|
393
|
+
super.subsurfaceProfile = inherited;
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
const profile = this.ensureSubsurfaceProfileOverride();
|
|
397
|
+
if (profile) {
|
|
398
|
+
this._overrideMaterialProps.add(propName);
|
|
399
|
+
profile[key] = value;
|
|
400
|
+
super.subsurfaceProfile = profile;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
setParentMaterial(parentMaterial, parentMaterialId) {
|
|
404
|
+
this._parentMaterial = parentMaterial;
|
|
405
|
+
this._parentMaterialId = parentMaterialId ?? (parentMaterial ? getEngine().resourceManager.getAssetId(parentMaterial.coreMaterial) ?? '' : '');
|
|
406
|
+
if (parentMaterial) {
|
|
407
|
+
this.syncInheritedUniforms(parentMaterial);
|
|
408
|
+
// Keep the asset id on the instance asset, not the parent.
|
|
409
|
+
this.clearCache();
|
|
410
|
+
this.optionChanged(true);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
syncInheritedUniforms(parentMaterial = this._parentMaterial) {
|
|
414
|
+
if (!parentMaterial) {
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
const runtimeTextureMap = new Map((this.uniformTextures ?? []).map((v)=>[
|
|
418
|
+
v.name,
|
|
419
|
+
v
|
|
420
|
+
]));
|
|
421
|
+
this.fragmentIR = parentMaterial.fragmentIR;
|
|
422
|
+
this.vertexIR = parentMaterial.vertexIR;
|
|
423
|
+
copyParentMaterialState(this, parentMaterial);
|
|
424
|
+
if (!this.isMaterialPropertyOverridden('Transmission')) {
|
|
425
|
+
this.transmission = parentMaterial.transmission;
|
|
426
|
+
}
|
|
427
|
+
if (!this.isMaterialPropertyOverridden('IOR')) {
|
|
428
|
+
this.ior = parentMaterial.ior;
|
|
429
|
+
}
|
|
430
|
+
if (!this.isMaterialPropertyOverridden('TransmissionFactor')) {
|
|
431
|
+
this.transmissionFactor = parentMaterial.transmissionFactor;
|
|
432
|
+
}
|
|
433
|
+
if (!this.isMaterialPropertyOverridden('ThicknessFactor')) {
|
|
434
|
+
this.thicknessFactor = parentMaterial.thicknessFactor;
|
|
435
|
+
}
|
|
436
|
+
if (!this.isMaterialPropertyOverridden('AttenuationColor')) {
|
|
437
|
+
this.attenuationColor = parentMaterial.attenuationColor;
|
|
438
|
+
}
|
|
439
|
+
if (!this.isMaterialPropertyOverridden('AttenuationDistance')) {
|
|
440
|
+
this.attenuationDistance = parentMaterial.attenuationDistance;
|
|
441
|
+
}
|
|
442
|
+
if (!this.isMaterialPropertyOverridden('TransmissionTexture')) {
|
|
443
|
+
this.transmissionTexture = parentMaterial.transmissionTexture;
|
|
444
|
+
}
|
|
445
|
+
if (!this.isMaterialPropertyOverridden('TransmissionTexCoordAddressU') && !this.isMaterialPropertyOverridden('TransmissionTexCoordAddressV')) {
|
|
446
|
+
this.transmissionTextureSampler = parentMaterial.transmissionTextureSampler;
|
|
447
|
+
}
|
|
448
|
+
if (!this.isMaterialPropertyOverridden('TransmissionTexCoordScale')) {
|
|
449
|
+
this.transmissionTexCoordMatrix = parentMaterial.transmissionTexCoordMatrix;
|
|
450
|
+
}
|
|
451
|
+
if (!this.isMaterialPropertyOverridden('TransmissionTexCoordIndex')) {
|
|
452
|
+
this.transmissionTexCoordIndex = parentMaterial.transmissionTexCoordIndex;
|
|
453
|
+
}
|
|
454
|
+
if (!this.isMaterialPropertyOverridden('ThicknessTexture')) {
|
|
455
|
+
this.thicknessTexture = parentMaterial.thicknessTexture;
|
|
456
|
+
}
|
|
457
|
+
if (!this.isMaterialPropertyOverridden('ThicknessTexCoordAddressU') && !this.isMaterialPropertyOverridden('ThicknessTexCoordAddressV')) {
|
|
458
|
+
this.thicknessTextureSampler = parentMaterial.thicknessTextureSampler;
|
|
459
|
+
}
|
|
460
|
+
if (!this.isMaterialPropertyOverridden('ThicknessTexCoordScale')) {
|
|
461
|
+
this.thicknessTexCoordMatrix = parentMaterial.thicknessTexCoordMatrix;
|
|
462
|
+
}
|
|
463
|
+
if (!this.isMaterialPropertyOverridden('ThicknessTexCoordIndex')) {
|
|
464
|
+
this.thicknessTexCoordIndex = parentMaterial.thicknessTexCoordIndex;
|
|
465
|
+
}
|
|
466
|
+
if (!this.isMaterialPropertyOverridden('SubsurfaceTexture')) {
|
|
467
|
+
this.subsurfaceTexture = parentMaterial.subsurfaceTexture;
|
|
468
|
+
}
|
|
469
|
+
if (!this.isMaterialPropertyOverridden('SubsurfaceTexCoordAddressU') && !this.isMaterialPropertyOverridden('SubsurfaceTexCoordAddressV')) {
|
|
470
|
+
this.subsurfaceTextureSampler = parentMaterial.subsurfaceTextureSampler;
|
|
471
|
+
}
|
|
472
|
+
if (!this.isMaterialPropertyOverridden('SubsurfaceTexCoordScale')) {
|
|
473
|
+
this.subsurfaceTexCoordMatrix = parentMaterial.subsurfaceTexCoordMatrix;
|
|
474
|
+
}
|
|
475
|
+
if (!this.isMaterialPropertyOverridden('SubsurfaceTexCoordIndex')) {
|
|
476
|
+
this.subsurfaceTexCoordIndex = parentMaterial.subsurfaceTexCoordIndex;
|
|
477
|
+
}
|
|
478
|
+
this.uniformValues = cloneUniformValues(parentMaterial.uniformValues).map((v)=>{
|
|
479
|
+
const override = this._overrideUniformValues.get(v.name);
|
|
480
|
+
return override ? {
|
|
481
|
+
...v,
|
|
482
|
+
value: [
|
|
483
|
+
...override.value
|
|
484
|
+
],
|
|
485
|
+
finalValue: cloneUniformFinalValue(override)
|
|
486
|
+
} : v;
|
|
487
|
+
});
|
|
488
|
+
this.uniformTextures = cloneUniformTextures(parentMaterial.uniformTextures).map((v)=>{
|
|
489
|
+
const override = this._overrideUniformTextures.get(v.name);
|
|
490
|
+
return override ? mergeUniformTextureOverride(v, override, runtimeTextureMap.get(v.name) ?? null) : mergeHydratedUniformTexture(v, runtimeTextureMap.get(v.name) ?? null);
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
onDispose() {
|
|
494
|
+
this._subsurfaceProfileOverride?.dispose();
|
|
495
|
+
this._subsurfaceProfileOverride = null;
|
|
496
|
+
super.onDispose();
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
export { PBRBluePrintMaterialInstance };
|
|
501
|
+
//# sourceMappingURL=pbrblueprint_instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbrblueprint_instance.js","sources":["../../src/material/pbrblueprint_instance.ts"],"sourcesContent":["import { DRef, Vector4, type Nullable } from '@zephyr3d/base';\r\nimport { getEngine } from '../app/api';\r\nimport type { BluePrintUniformTexture, BluePrintUniformValue } from '../utility/blueprint/material/ir';\r\nimport { PBRBluePrintMaterial } from './pbrblueprint';\r\nimport type { PBRReflectionMode } from './mixins/lightmodel/pbrmetallicroughness';\r\nimport { SubsurfaceProfile, type SubsurfaceProfilePreset } from './subsurfaceprofile';\r\n\r\nfunction cloneUniformFinalValue(value: BluePrintUniformValue) {\r\n if (typeof value.finalValue === 'number') {\r\n return value.finalValue;\r\n }\r\n if (value.finalValue instanceof Float32Array) {\r\n return new Float32Array(value.finalValue);\r\n }\r\n return value.value.length === 1 ? value.value[0] : new Float32Array(value.value);\r\n}\r\n\r\nfunction cloneTextureParams(params: BluePrintUniformTexture['params']) {\r\n return params instanceof Vector4\r\n ? params.clone()\r\n : params && typeof params === 'object' && 'x' in params && 'y' in params && 'z' in params && 'w' in params\r\n ? new Vector4(\r\n Number((params as { x: number }).x) || 0,\r\n Number((params as { y: number }).y) || 0,\r\n Number((params as { z: number }).z) || 0,\r\n Number((params as { w: number }).w) || 0\r\n )\r\n : Vector4.zero();\r\n}\r\n\r\nfunction cloneUniformValues(values: Nullable<BluePrintUniformValue[]>) {\r\n return (values ?? []).map((v) => ({\r\n ...v,\r\n value: [...v.value],\r\n finalValue: cloneUniformFinalValue(v)\r\n }));\r\n}\r\n\r\nfunction cloneUniformTextures(values: Nullable<BluePrintUniformTexture[]>) {\r\n return (values ?? []).map((v) => ({\r\n ...v,\r\n exposed: v.exposed ?? true,\r\n params: cloneTextureParams(v.params),\r\n finalTexture: v.finalTexture ? new DRef(v.finalTexture.get()) : undefined,\r\n finalSampler: v.finalSampler\r\n }));\r\n}\r\n\r\nfunction mergeHydratedUniformTexture(\r\n base: BluePrintUniformTexture,\r\n runtime: Nullable<BluePrintUniformTexture>\r\n) {\r\n if (!runtime) {\r\n return base;\r\n }\r\n return {\r\n ...base,\r\n finalTexture: runtime.finalTexture ?? base.finalTexture,\r\n finalSampler: runtime.finalSampler ?? base.finalSampler,\r\n params: runtime.params ?? base.params\r\n };\r\n}\r\n\r\nfunction inheritUniformTextureMetadata(parent: BluePrintUniformTexture, override: BluePrintUniformTexture) {\r\n return {\r\n ...override,\r\n type: parent.type,\r\n exposed: parent.exposed,\r\n sRGB: parent.sRGB,\r\n wrapS: parent.wrapS,\r\n wrapT: parent.wrapT,\r\n minFilter: parent.minFilter,\r\n magFilter: parent.magFilter,\r\n mipFilter: parent.mipFilter,\r\n inVertexShader: parent.inVertexShader,\r\n inFragmentShader: parent.inFragmentShader,\r\n finalSampler: parent.finalSampler\r\n };\r\n}\r\n\r\nfunction mergeUniformTextureOverride(\r\n parent: BluePrintUniformTexture,\r\n override: BluePrintUniformTexture,\r\n runtime: Nullable<BluePrintUniformTexture>\r\n) {\r\n const hydratedOverride = override.finalTexture\r\n ? override\r\n : runtime?.texture === override.texture\r\n ? runtime\r\n : null;\r\n return inheritUniformTextureMetadata(parent, {\r\n ...override,\r\n finalTexture: hydratedOverride?.finalTexture ?? parent.finalTexture,\r\n params: hydratedOverride?.params ?? parent.params\r\n });\r\n}\r\n\r\nfunction uniformValueEquals(a: BluePrintUniformValue, b: BluePrintUniformValue) {\r\n if (a.type !== b.type || a.value.length !== b.value.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < a.value.length; i++) {\r\n if (a.value[i] !== b.value[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nfunction uniformTextureEquals(a: BluePrintUniformTexture, b: BluePrintUniformTexture) {\r\n return a.type === b.type && a.texture === b.texture;\r\n}\r\n\r\nfunction valuesEqual(a: unknown, b: unknown) {\r\n if (a === b) {\r\n return true;\r\n }\r\n if (\r\n a &&\r\n b &&\r\n typeof a === 'object' &&\r\n typeof b === 'object' &&\r\n 'equalsTo' in (a as Record<string, unknown>) &&\r\n typeof (a as { equalsTo?: unknown }).equalsTo === 'function'\r\n ) {\r\n return !!(a as { equalsTo: (other: unknown) => boolean }).equalsTo(b);\r\n }\r\n return false;\r\n}\r\n\r\n/** Parameter overrides that cannot be migrated to a new blueprint material parent. */\r\nexport interface PBRBluePrintMaterialInstanceDiscardedOverrides {\r\n uniformValues: string[];\r\n uniformTextures: string[];\r\n}\r\n\r\nfunction copyParentMaterialState(\r\n instance: PBRBluePrintMaterialInstance,\r\n parentMaterial: PBRBluePrintMaterial\r\n) {\r\n instance.alphaCutoff = parentMaterial.alphaCutoff;\r\n instance.alphaDither = parentMaterial.alphaDither;\r\n instance.alphaToCoverage = parentMaterial.alphaToCoverage;\r\n instance.blendMode = parentMaterial.blendMode;\r\n instance.transparentShadowCaster = parentMaterial.transparentShadowCaster;\r\n instance.shadowAlphaCutoff = parentMaterial.shadowAlphaCutoff;\r\n instance.cullMode = parentMaterial.cullMode;\r\n instance.opacity = parentMaterial.opacity;\r\n instance.objectColor = parentMaterial.objectColor;\r\n instance.TAAStrength = parentMaterial.TAAStrength;\r\n if (!instance.isMaterialPropertyOverridden('NormalScale')) {\r\n instance.normalScale = parentMaterial.normalScale;\r\n }\r\n if (!instance.isMaterialPropertyOverridden('NormalFlipY')) {\r\n instance.normalFlipY = parentMaterial.normalFlipY;\r\n }\r\n if (!instance.isMaterialPropertyOverridden('doubleSidedLighting')) {\r\n instance.doubleSidedLighting = parentMaterial.doubleSidedLighting;\r\n }\r\n if (!instance.isMaterialPropertyOverridden('RectSpecularScale')) {\r\n instance.rectSpecularScale = parentMaterial.rectSpecularScale;\r\n }\r\n instance.clearcoat = parentMaterial.clearcoat;\r\n instance.clearcoatIntensity = parentMaterial.clearcoatIntensity;\r\n instance.clearcoatRoughnessFactor = parentMaterial.clearcoatRoughnessFactor;\r\n instance.clearcoatIntensityTexture = parentMaterial.clearcoatIntensityTexture;\r\n instance.clearcoatIntensityTextureSampler = parentMaterial.clearcoatIntensityTextureSampler;\r\n instance.clearcoatIntensityTexCoordMatrix = parentMaterial.clearcoatIntensityTexCoordMatrix;\r\n instance.clearcoatIntensityTexCoordIndex = parentMaterial.clearcoatIntensityTexCoordIndex;\r\n instance.clearcoatRoughnessTexture = parentMaterial.clearcoatRoughnessTexture;\r\n instance.clearcoatRoughnessTextureSampler = parentMaterial.clearcoatRoughnessTextureSampler;\r\n instance.clearcoatRoughnessTexCoordMatrix = parentMaterial.clearcoatRoughnessTexCoordMatrix;\r\n instance.clearcoatRoughnessTexCoordIndex = parentMaterial.clearcoatRoughnessTexCoordIndex;\r\n instance.clearcoatNormalTexture = parentMaterial.clearcoatNormalTexture;\r\n instance.clearcoatNormalTextureSampler = parentMaterial.clearcoatNormalTextureSampler;\r\n instance.clearcoatNormalTexCoordMatrix = parentMaterial.clearcoatNormalTexCoordMatrix;\r\n instance.clearcoatNormalTexCoordIndex = parentMaterial.clearcoatNormalTexCoordIndex;\r\n instance.syncInheritedSubsurfaceProfile(parentMaterial.subsurfaceProfile);\r\n if (!instance.hasReflectionModeOverride()) {\r\n instance.setBlueprintInstanceReflectionMode(parentMaterial.reflectionMode, true);\r\n }\r\n}\r\n\r\n/**\r\n * Blueprint material instance asset.\r\n *\r\n * Inherits graph/IR from a parent blueprint material and only stores parameter overrides.\r\n * Instances are asset-level indirections, distinct from MeshMaterial runtime instancing.\r\n *\r\n * @public\r\n */\r\nexport class PBRBluePrintMaterialInstance extends PBRBluePrintMaterial {\r\n private _parentMaterialId: string;\r\n private _parentMaterial: Nullable<PBRBluePrintMaterial>;\r\n private _overrideUniformValues: Map<string, BluePrintUniformValue>;\r\n private _overrideUniformTextures: Map<string, BluePrintUniformTexture>;\r\n private _reflectionModeOverridden: boolean;\r\n private _overrideMaterialProps: Set<string>;\r\n private _subsurfaceProfileOverride: SubsurfaceProfile | null;\r\n\r\n constructor(parentMaterial?: Nullable<PBRBluePrintMaterial>, parentMaterialId = '') {\r\n super();\r\n this._parentMaterialId = parentMaterialId;\r\n this._parentMaterial = null;\r\n this._overrideUniformValues = new Map();\r\n this._overrideUniformTextures = new Map();\r\n this._reflectionModeOverridden = false;\r\n this._overrideMaterialProps = new Set();\r\n this._subsurfaceProfileOverride = null;\r\n if (parentMaterial) {\r\n this.setParentMaterial(parentMaterial, parentMaterialId);\r\n }\r\n }\r\n\r\n copyFrom(other: this) {\r\n super.copyFrom(other);\r\n if (other instanceof PBRBluePrintMaterialInstance) {\r\n const overrideUniformValues = cloneUniformValues([...other._overrideUniformValues.values()]);\r\n const overrideUniformTextures = cloneUniformTextures([...other._overrideUniformTextures.values()]);\r\n const subsurfaceProfileOverride = this.copySubsurfaceProfile(other._subsurfaceProfileOverride);\r\n for (const uniform of this._overrideUniformTextures.values()) {\r\n uniform.finalTexture?.dispose();\r\n }\r\n this._parentMaterial = other._parentMaterial;\r\n this._parentMaterialId = other._parentMaterialId;\r\n this._overrideUniformValues = new Map(overrideUniformValues.map((uniform) => [uniform.name, uniform]));\r\n this._overrideUniformTextures = new Map(\r\n overrideUniformTextures.map((uniform) => [uniform.name, uniform])\r\n );\r\n this._reflectionModeOverridden = other._reflectionModeOverridden;\r\n this._overrideMaterialProps = new Set(other._overrideMaterialProps);\r\n this._subsurfaceProfileOverride?.dispose();\r\n this._subsurfaceProfileOverride = subsurfaceProfileOverride;\r\n this.syncInheritedUniforms();\r\n }\r\n }\r\n\r\n get parentMaterialId() {\r\n return this._parentMaterialId;\r\n }\r\n\r\n get parentMaterial() {\r\n return this._parentMaterial;\r\n }\r\n\r\n get isBlueprintMaterialInstance() {\r\n return true;\r\n }\r\n\r\n get hasSubsurfaceProfileOverride() {\r\n return !!this._subsurfaceProfileOverride;\r\n }\r\n\r\n setMaterialPropertyOverrides(propNames: Iterable<string>) {\r\n this._overrideMaterialProps = new Set(propNames);\r\n }\r\n\r\n getMaterialPropertyOverrides() {\r\n return [...this._overrideMaterialProps];\r\n }\r\n\r\n markMaterialPropertyOverridden(propName: string) {\r\n this._overrideMaterialProps.add(propName);\r\n }\r\n\r\n isMaterialPropertyOverridden(propName: string) {\r\n return this._overrideMaterialProps.has(propName);\r\n }\r\n\r\n set uniformValues(val: BluePrintUniformValue[]) {\r\n super.uniformValues = val;\r\n }\r\n\r\n get uniformValues() {\r\n return super.uniformValues;\r\n }\r\n\r\n set uniformTextures(val: BluePrintUniformTexture[]) {\r\n super.uniformTextures = val;\r\n }\r\n\r\n get uniformTextures() {\r\n return super.uniformTextures;\r\n }\r\n\r\n setOverrides(\r\n uniformValues: Nullable<BluePrintUniformValue[]>,\r\n uniformTextures: Nullable<BluePrintUniformTexture[]>\r\n ) {\r\n const parentValueMap = new Map((this._parentMaterial?.uniformValues ?? []).map((v) => [v.name, v]));\r\n const parentTextureMap = new Map((this._parentMaterial?.uniformTextures ?? []).map((v) => [v.name, v]));\r\n this._overrideUniformValues = new Map(\r\n cloneUniformValues(uniformValues)\r\n .filter((v) => {\r\n const parent = parentValueMap.get(v.name);\r\n return !parent || !uniformValueEquals(v, parent);\r\n })\r\n .map((v) => [v.name, v])\r\n );\r\n this._overrideUniformTextures = new Map(\r\n cloneUniformTextures(uniformTextures)\r\n .filter((v) => {\r\n const parent = parentTextureMap.get(v.name);\r\n return !parent || !uniformTextureEquals(v, parent);\r\n })\r\n .map((v) => {\r\n const parent = parentTextureMap.get(v.name);\r\n return [v.name, parent ? inheritUniformTextureMetadata(parent, v) : v] as const;\r\n })\r\n );\r\n this.syncInheritedUniforms();\r\n }\r\n\r\n getOverrideUniformValues() {\r\n return [...this._overrideUniformValues.values()].map((v) => ({\r\n name: v.name,\r\n type: v.type,\r\n value: [...v.value],\r\n finalValue: undefined\r\n }));\r\n }\r\n\r\n getOverrideUniformTextures() {\r\n const parentTextureMap = new Map((this._parentMaterial?.uniformTextures ?? []).map((v) => [v.name, v]));\r\n return [...this._overrideUniformTextures.values()].map((v) => {\r\n const parent = parentTextureMap.get(v.name);\r\n const normalized = parent ? inheritUniformTextureMetadata(parent, v) : v;\r\n return {\r\n ...normalized,\r\n params: cloneTextureParams(normalized.params),\r\n finalTexture: undefined,\r\n finalSampler: undefined\r\n };\r\n });\r\n }\r\n\r\n getDiscardedOverridesForParent(\r\n parentMaterial: PBRBluePrintMaterial\r\n ): PBRBluePrintMaterialInstanceDiscardedOverrides {\r\n const parentValueMap = new Map(parentMaterial.uniformValues.map((v) => [v.name, v]));\r\n const parentTextureMap = new Map(parentMaterial.uniformTextures.map((v) => [v.name, v]));\r\n return {\r\n uniformValues: [...this._overrideUniformValues.values()]\r\n .filter((v) => {\r\n const parent = parentValueMap.get(v.name);\r\n return !parent || parent.type !== v.type || parent.value.length !== v.value.length;\r\n })\r\n .map((v) => v.name),\r\n uniformTextures: [...this._overrideUniformTextures.values()]\r\n .filter((v) => {\r\n const parent = parentTextureMap.get(v.name);\r\n return !parent || parent.type !== v.type || parent.exposed === false;\r\n })\r\n .map((v) => v.name)\r\n };\r\n }\r\n\r\n changeParentMaterial(\r\n parentMaterial: PBRBluePrintMaterial,\r\n parentMaterialId?: string\r\n ): PBRBluePrintMaterialInstanceDiscardedOverrides {\r\n const discarded = this.getDiscardedOverridesForParent(parentMaterial);\r\n const discardedValues = new Set(discarded.uniformValues);\r\n const discardedTextures = new Set(discarded.uniformTextures);\r\n const parentTextureMap = new Map(parentMaterial.uniformTextures.map((v) => [v.name, v]));\r\n\r\n this._overrideUniformValues = new Map(\r\n [...this._overrideUniformValues.entries()].filter(([name]) => !discardedValues.has(name))\r\n );\r\n this._overrideUniformTextures = new Map(\r\n [...this._overrideUniformTextures.entries()]\r\n .filter(([name]) => !discardedTextures.has(name))\r\n .map(([name, override]) => {\r\n const parent = parentTextureMap.get(name)!;\r\n return [\r\n name,\r\n {\r\n ...override,\r\n exposed: parent.exposed,\r\n inVertexShader: parent.inVertexShader,\r\n inFragmentShader: parent.inFragmentShader\r\n }\r\n ];\r\n })\r\n );\r\n this.uniformTextures = this.uniformTextures.filter((v) => !discardedTextures.has(v.name));\r\n this.setParentMaterial(parentMaterial, parentMaterialId);\r\n return discarded;\r\n }\r\n\r\n hasReflectionModeOverride() {\r\n return this._reflectionModeOverridden;\r\n }\r\n\r\n setBlueprintInstanceReflectionMode(val: PBRReflectionMode, inherited = false) {\r\n this._reflectionModeOverridden =\r\n !inherited && !!this._parentMaterial && val !== this._parentMaterial.reflectionMode;\r\n super.reflectionMode = val;\r\n }\r\n\r\n private copySubsurfaceProfile(source: Nullable<SubsurfaceProfile>) {\r\n if (!source) {\r\n return null;\r\n }\r\n const profile = new SubsurfaceProfile();\r\n profile.copyFrom(source);\r\n return profile;\r\n }\r\n\r\n private ensureSubsurfaceProfileOverride() {\r\n if (this._subsurfaceProfileOverride) {\r\n return this._subsurfaceProfileOverride;\r\n }\r\n const source = this.subsurfaceProfile ?? this._parentMaterial?.subsurfaceProfile ?? null;\r\n const profile = this.copySubsurfaceProfile(source);\r\n this._subsurfaceProfileOverride = profile;\r\n super.subsurfaceProfile = profile;\r\n return profile;\r\n }\r\n\r\n private getInheritedSubsurfaceProfile() {\r\n return this._parentMaterial?.subsurfaceProfile ?? null;\r\n }\r\n\r\n syncInheritedSubsurfaceProfile(parentProfile: Nullable<SubsurfaceProfile>) {\r\n if (this._subsurfaceProfileOverride) {\r\n super.subsurfaceProfile = this._subsurfaceProfileOverride;\r\n } else {\r\n super.subsurfaceProfile = parentProfile ?? null;\r\n }\r\n }\r\n\r\n setBlueprintInstanceSubsurfacePreset(val: SubsurfaceProfilePreset) {\r\n this.setBlueprintInstanceSubsurfaceProfileValue('SubsurfaceLookPreset', 'preset', val);\r\n }\r\n\r\n setBlueprintInstanceSubsurfaceStrength(val: number) {\r\n this.setBlueprintInstanceSubsurfaceProfileValue('SubsurfaceScatterWeight', 'strength', val);\r\n }\r\n\r\n setBlueprintInstanceSubsurfaceScale(val: number) {\r\n this.setBlueprintInstanceSubsurfaceProfileValue('SubsurfaceScatterScale', 'scale', val);\r\n }\r\n\r\n setBlueprintInstanceSubsurfaceProfileValue<K extends keyof SubsurfaceProfile>(\r\n propName: string,\r\n key: K,\r\n value: SubsurfaceProfile[K]\r\n ) {\r\n const inherited = this.getInheritedSubsurfaceProfile();\r\n const inheritedValue = inherited ? inherited[key] : undefined;\r\n if (!this._subsurfaceProfileOverride && inherited && valuesEqual(inheritedValue, value)) {\r\n this._overrideMaterialProps.delete(propName);\r\n super.subsurfaceProfile = inherited;\r\n return;\r\n }\r\n const profile = this.ensureSubsurfaceProfileOverride();\r\n if (profile) {\r\n this._overrideMaterialProps.add(propName);\r\n (profile as unknown as Record<string, unknown>)[key as string] = value;\r\n super.subsurfaceProfile = profile;\r\n }\r\n }\r\n\r\n setParentMaterial(parentMaterial: Nullable<PBRBluePrintMaterial>, parentMaterialId?: string) {\r\n this._parentMaterial = parentMaterial;\r\n this._parentMaterialId =\r\n parentMaterialId ??\r\n (parentMaterial ? (getEngine().resourceManager.getAssetId(parentMaterial.coreMaterial) ?? '') : '');\r\n if (parentMaterial) {\r\n this.syncInheritedUniforms(parentMaterial);\r\n // Keep the asset id on the instance asset, not the parent.\r\n this.clearCache();\r\n this.optionChanged(true);\r\n }\r\n }\r\n\r\n syncInheritedUniforms(parentMaterial = this._parentMaterial) {\r\n if (!parentMaterial) {\r\n return;\r\n }\r\n const runtimeTextureMap = new Map((this.uniformTextures ?? []).map((v) => [v.name, v]));\r\n this.fragmentIR = parentMaterial.fragmentIR;\r\n this.vertexIR = parentMaterial.vertexIR;\r\n copyParentMaterialState(this, parentMaterial);\r\n if (!this.isMaterialPropertyOverridden('Transmission')) {\r\n this.transmission = parentMaterial.transmission;\r\n }\r\n if (!this.isMaterialPropertyOverridden('IOR')) {\r\n this.ior = parentMaterial.ior;\r\n }\r\n if (!this.isMaterialPropertyOverridden('TransmissionFactor')) {\r\n this.transmissionFactor = parentMaterial.transmissionFactor;\r\n }\r\n if (!this.isMaterialPropertyOverridden('ThicknessFactor')) {\r\n this.thicknessFactor = parentMaterial.thicknessFactor;\r\n }\r\n if (!this.isMaterialPropertyOverridden('AttenuationColor')) {\r\n this.attenuationColor = parentMaterial.attenuationColor;\r\n }\r\n if (!this.isMaterialPropertyOverridden('AttenuationDistance')) {\r\n this.attenuationDistance = parentMaterial.attenuationDistance;\r\n }\r\n if (!this.isMaterialPropertyOverridden('TransmissionTexture')) {\r\n this.transmissionTexture = parentMaterial.transmissionTexture;\r\n }\r\n if (\r\n !this.isMaterialPropertyOverridden('TransmissionTexCoordAddressU') &&\r\n !this.isMaterialPropertyOverridden('TransmissionTexCoordAddressV')\r\n ) {\r\n this.transmissionTextureSampler = parentMaterial.transmissionTextureSampler;\r\n }\r\n if (!this.isMaterialPropertyOverridden('TransmissionTexCoordScale')) {\r\n this.transmissionTexCoordMatrix = parentMaterial.transmissionTexCoordMatrix;\r\n }\r\n if (!this.isMaterialPropertyOverridden('TransmissionTexCoordIndex')) {\r\n this.transmissionTexCoordIndex = parentMaterial.transmissionTexCoordIndex;\r\n }\r\n if (!this.isMaterialPropertyOverridden('ThicknessTexture')) {\r\n this.thicknessTexture = parentMaterial.thicknessTexture;\r\n }\r\n if (\r\n !this.isMaterialPropertyOverridden('ThicknessTexCoordAddressU') &&\r\n !this.isMaterialPropertyOverridden('ThicknessTexCoordAddressV')\r\n ) {\r\n this.thicknessTextureSampler = parentMaterial.thicknessTextureSampler;\r\n }\r\n if (!this.isMaterialPropertyOverridden('ThicknessTexCoordScale')) {\r\n this.thicknessTexCoordMatrix = parentMaterial.thicknessTexCoordMatrix;\r\n }\r\n if (!this.isMaterialPropertyOverridden('ThicknessTexCoordIndex')) {\r\n this.thicknessTexCoordIndex = parentMaterial.thicknessTexCoordIndex;\r\n }\r\n if (!this.isMaterialPropertyOverridden('SubsurfaceTexture')) {\r\n this.subsurfaceTexture = parentMaterial.subsurfaceTexture;\r\n }\r\n if (\r\n !this.isMaterialPropertyOverridden('SubsurfaceTexCoordAddressU') &&\r\n !this.isMaterialPropertyOverridden('SubsurfaceTexCoordAddressV')\r\n ) {\r\n this.subsurfaceTextureSampler = parentMaterial.subsurfaceTextureSampler;\r\n }\r\n if (!this.isMaterialPropertyOverridden('SubsurfaceTexCoordScale')) {\r\n this.subsurfaceTexCoordMatrix = parentMaterial.subsurfaceTexCoordMatrix;\r\n }\r\n if (!this.isMaterialPropertyOverridden('SubsurfaceTexCoordIndex')) {\r\n this.subsurfaceTexCoordIndex = parentMaterial.subsurfaceTexCoordIndex;\r\n }\r\n this.uniformValues = cloneUniformValues(parentMaterial.uniformValues).map((v) => {\r\n const override = this._overrideUniformValues.get(v.name);\r\n return override\r\n ? {\r\n ...v,\r\n value: [...override.value],\r\n finalValue: cloneUniformFinalValue(override)\r\n }\r\n : v;\r\n });\r\n this.uniformTextures = cloneUniformTextures(parentMaterial.uniformTextures).map((v) => {\r\n const override = this._overrideUniformTextures.get(v.name);\r\n return override\r\n ? mergeUniformTextureOverride(v, override, runtimeTextureMap.get(v.name) ?? null)\r\n : mergeHydratedUniformTexture(v, runtimeTextureMap.get(v.name) ?? null);\r\n });\r\n }\r\n\r\n protected override onDispose() {\r\n this._subsurfaceProfileOverride?.dispose();\r\n this._subsurfaceProfileOverride = null;\r\n super.onDispose();\r\n }\r\n}\r\n"],"names":["cloneUniformFinalValue","value","finalValue","Float32Array","length","cloneTextureParams","params","Vector4","clone","Number","x","y","z","w","zero","cloneUniformValues","values","map","v","cloneUniformTextures","exposed","finalTexture","DRef","get","undefined","finalSampler","mergeHydratedUniformTexture","base","runtime","inheritUniformTextureMetadata","parent","override","type","sRGB","wrapS","wrapT","minFilter","magFilter","mipFilter","inVertexShader","inFragmentShader","mergeUniformTextureOverride","hydratedOverride","texture","uniformValueEquals","a","b","i","uniformTextureEquals","valuesEqual","equalsTo","copyParentMaterialState","instance","parentMaterial","alphaCutoff","alphaDither","alphaToCoverage","blendMode","transparentShadowCaster","shadowAlphaCutoff","cullMode","opacity","objectColor","TAAStrength","isMaterialPropertyOverridden","normalScale","normalFlipY","doubleSidedLighting","rectSpecularScale","clearcoat","clearcoatIntensity","clearcoatRoughnessFactor","clearcoatIntensityTexture","clearcoatIntensityTextureSampler","clearcoatIntensityTexCoordMatrix","clearcoatIntensityTexCoordIndex","clearcoatRoughnessTexture","clearcoatRoughnessTextureSampler","clearcoatRoughnessTexCoordMatrix","clearcoatRoughnessTexCoordIndex","clearcoatNormalTexture","clearcoatNormalTextureSampler","clearcoatNormalTexCoordMatrix","clearcoatNormalTexCoordIndex","syncInheritedSubsurfaceProfile","subsurfaceProfile","hasReflectionModeOverride","setBlueprintInstanceReflectionMode","reflectionMode","PBRBluePrintMaterialInstance","PBRBluePrintMaterial","_parentMaterialId","_parentMaterial","_overrideUniformValues","_overrideUniformTextures","_reflectionModeOverridden","_overrideMaterialProps","_subsurfaceProfileOverride","parentMaterialId","Map","Set","setParentMaterial","copyFrom","other","overrideUniformValues","overrideUniformTextures","subsurfaceProfileOverride","copySubsurfaceProfile","uniform","dispose","name","syncInheritedUniforms","isBlueprintMaterialInstance","hasSubsurfaceProfileOverride","setMaterialPropertyOverrides","propNames","getMaterialPropertyOverrides","markMaterialPropertyOverridden","propName","add","has","uniformValues","val","uniformTextures","setOverrides","parentValueMap","parentTextureMap","filter","getOverrideUniformValues","getOverrideUniformTextures","normalized","getDiscardedOverridesForParent","changeParentMaterial","discarded","discardedValues","discardedTextures","entries","inherited","source","profile","SubsurfaceProfile","ensureSubsurfaceProfileOverride","getInheritedSubsurfaceProfile","parentProfile","setBlueprintInstanceSubsurfacePreset","setBlueprintInstanceSubsurfaceProfileValue","setBlueprintInstanceSubsurfaceStrength","setBlueprintInstanceSubsurfaceScale","key","inheritedValue","delete","getEngine","resourceManager","getAssetId","coreMaterial","clearCache","optionChanged","runtimeTextureMap","fragmentIR","vertexIR","transmission","ior","transmissionFactor","thicknessFactor","attenuationColor","attenuationDistance","transmissionTexture","transmissionTextureSampler","transmissionTexCoordMatrix","transmissionTexCoordIndex","thicknessTexture","thicknessTextureSampler","thicknessTexCoordMatrix","thicknessTexCoordIndex","subsurfaceTexture","subsurfaceTextureSampler","subsurfaceTexCoordMatrix","subsurfaceTexCoordIndex","onDispose"],"mappings":"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"}
|
package/dist/material/pbrmr.js
CHANGED
|
@@ -190,33 +190,32 @@ import { Vector3 } from '@zephyr3d/base';
|
|
|
190
190
|
const hasExplicitTransmissionAuthoring = !!(this.transmissionTexture || this.thicknessTexture);
|
|
191
191
|
scope.$l.sssMask = pb.float(1);
|
|
192
192
|
scope.$l.sssScatterSoftness = pb.float(0);
|
|
193
|
-
|
|
194
|
-
scope.$l.
|
|
195
|
-
scope.$l.sssThicknessScale = pb.clamp(pb.div(scope.zThicknessFactor ?? 0, pb.add(scope.zThicknessFactor ?? 0, 1)), 0, 1);
|
|
196
|
-
scope.$l.sssThinAuthorMask = pb.sub(1, scope.sssThicknessScale);
|
|
193
|
+
// Negative alpha marks profiles that need conservative screen-space thin-region inference.
|
|
194
|
+
scope.$l.sssTransmissionMask = pb.float(hasExplicitTransmissionAuthoring ? 0 : -1);
|
|
197
195
|
if (this.subsurfaceTexture) {
|
|
198
196
|
scope.$l.sssTexel = this.sampleSubsurfaceTexture(scope);
|
|
199
197
|
scope.sssMask = pb.clamp(scope.sssTexel.r, 0, 1);
|
|
200
198
|
scope.sssScatterSoftness = pb.clamp(scope.sssTexel.g, 0, 1);
|
|
201
199
|
}
|
|
202
|
-
if (
|
|
203
|
-
scope.sssTransmissionAuthor = pb.
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
scope.sssThinAuthorMask = pb.
|
|
200
|
+
if (hasExplicitTransmissionAuthoring) {
|
|
201
|
+
scope.$l.sssTransmissionAuthor = pb.float(this.thicknessTexture ? 1 : 0);
|
|
202
|
+
if (this.transmissionTexture) {
|
|
203
|
+
scope.sssTransmissionAuthor = pb.clamp(pb.mul(this.sampleTransmissionTexture(scope).r, scope.zTransmissionFactor ?? 0), 0, 1);
|
|
204
|
+
}
|
|
205
|
+
scope.$l.sssThinAuthorMask = pb.float(this.transmissionTexture ? 1 : 0);
|
|
206
|
+
if (this.thicknessTexture) {
|
|
207
|
+
// KHR_materials_volume stores thickness in G: zero is thin and one is thick.
|
|
208
|
+
scope.$l.sssThicknessSample = pb.clamp(this.sampleThicknessTexture(scope).g, 0, 1);
|
|
209
|
+
scope.sssThinAuthorMask = pb.sub(1, scope.sssThicknessSample);
|
|
210
|
+
}
|
|
211
|
+
scope.$l.sssAuthoredTransmissionMask = pb.clamp(pb.mul(scope.sssTransmissionAuthor, scope.sssThinAuthorMask), 0, 1);
|
|
212
|
+
scope.sssTransmissionMask = scope.sssAuthoredTransmissionMask;
|
|
208
213
|
}
|
|
209
|
-
scope.$l.sssAuthoredTransmissionMask = pb.clamp(pb.mul(scope.sssTransmissionAuthor, scope.sssThinAuthorMask), 0, 1);
|
|
210
|
-
scope.sssTransmissionMask = pb.clamp(pb.max(scope.sssTransmissionMask, scope.sssAuthoredTransmissionMask), 0, 1);
|
|
211
214
|
scope.$l.sssScatterStrengthMask = pb.clamp(pb.add(pb.mul(scope.sssMask, 0.82), pb.mul(scope.sssScatterSoftness, 0.38)), 0, 1);
|
|
212
215
|
scope.$l.sssScatterWidthMask = pb.clamp(pb.max(scope.sssMask, pb.mul(scope.sssScatterSoftness, 0.9)), 0, 1);
|
|
213
216
|
scope.$l.sssStrength = pb.mul(this.getSubsurfaceProfileStrength(scope), scope.sssScatterStrengthMask);
|
|
214
217
|
scope.$l.sssWidthBase = pb.mul(this.getSubsurfaceProfileScale(scope), scope.sssScatterWidthMask);
|
|
215
218
|
scope.$l.sssWidth = pb.clamp(pb.div(scope.sssWidthBase, pb.add(scope.sssWidthBase, 1)), 0, 0.999);
|
|
216
|
-
if (!hasExplicitTransmissionAuthoring) {
|
|
217
|
-
scope.$l.sssProfileFallbackMask = pb.clamp(pb.add(pb.mul(scope.sssMask, 0.12), pb.add(pb.mul(scope.sssStrength, 0.18), pb.mul(scope.sssWidth, 0.24))), 0, 0.42);
|
|
218
|
-
scope.sssTransmissionMask = pb.max(scope.sssTransmissionMask, scope.sssProfileFallbackMask);
|
|
219
|
-
}
|
|
220
219
|
scope.$l.sssSlotEncoded = pb.div(this.getSubsurfaceProfileId(scope), 255);
|
|
221
220
|
scope.$l.sssPresetEncoded = pb.div(this.getSubsurfaceProfilePreset(scope), 255);
|
|
222
221
|
scope.$l.sssParams = pb.vec4(scope.sssSlotEncoded, scope.sssWidth, scope.sssPresetEncoded, pb.add(0.75, pb.mul(scope.sssScatterSoftness, 0.25)));
|