@meimu/mutracer 0.1.1 → 0.1.2
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/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +522 -520
- package/docs/materials.md +27 -7
- package/docs/threejs.md +13 -2
- package/docs/viewer.md +53 -0
- package/lib/oidn.d.ts +1 -1
- package/lib/oidnBundledWeights.cdn.d.ts +2 -2
- package/lib/renderer/MaterialTable.d.ts +1 -0
- package/lib/renderer/MaterialTable.js +2 -1
- package/lib/renderer/MaterialTable.js.map +1 -1
- package/lib/renderer/WGPUBloomPass.js +8 -8
- package/lib/renderer/WGPUJNLMDenoiser.js +2 -2
- package/lib/renderer/WGPURayTraceOutput.js +5 -5
- package/lib/renderer/WGPURayTracePass.js +1 -1
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.js +4 -4
- package/lib/renderer/WebGLJNLMDenoiser.js +2 -2
- package/lib/renderer/WebGLRayTracePass.js +3 -1
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/glsl/chunks/envMap.glsl.js +5 -5
- package/lib/renderer/glsl/chunks/intersect.glsl.js +32 -32
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +9 -9
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +30 -30
- package/lib/renderer/glsl/chunks/rand.glsl.js +2 -2
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +4 -4
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +4 -4
- package/lib/renderer/glsl/chunks/sampling.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/sobol.glsl.js +3 -3
- package/lib/renderer/glsl/rayTrace.frag.js +3 -3
- package/lib/renderer/glsl/webglPipeline.frag.js +2 -2
- package/lib/renderer/materialComparison.generated.js +5 -0
- package/lib/renderer/materialComparison.generated.js.map +1 -1
- package/lib/renderer/materialLayout.js +2 -1
- package/lib/renderer/materialLayout.js.map +1 -1
- package/lib/renderer/prepareMeshBVH.d.ts +4 -2
- package/lib/renderer/prepareMeshBVH.js +44 -20
- package/lib/renderer/prepareMeshBVH.js.map +1 -1
- package/lib/renderer/wgsl/chunks/common.wgsl.js +2 -2
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +14 -14
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +85 -88
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +34 -34
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +51 -46
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +2 -2
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +3 -3
- package/lib/renderer/wgsl/compose.frag.wgsl.js +2 -2
- package/lib/renderer/wgsl/customDenoise.wgsl.js +4 -4
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +10 -10
- package/lib/renderer/wgsl/rayTrace.compute.js +7 -7
- package/lib/scene/OpenPBRMaterial.d.ts +4 -2
- package/lib/scene/OpenPBRMaterial.js +4 -2
- package/lib/scene/OpenPBRMaterial.js.map +1 -1
- package/lib/scene/openPbrSchema.d.ts +7 -2
- package/lib/scene/openPbrSchema.js +2 -1
- package/lib/scene/openPbrSchema.js.map +1 -1
- package/lib/util/fromTHREE.d.ts +1 -0
- package/lib/util/fromTHREE.js +24 -6
- package/lib/util/fromTHREE.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -51,7 +51,7 @@ return alpha >= alphaCutoff ? 1.0 : 0.0;
|
|
|
51
51
|
return alpha;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
float
|
|
54
|
+
float vP(int idx) {
|
|
55
55
|
return fetchMatData(idx * MAT_DATA_SIZE + MAT_ROW_COLOR).w;
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -135,8 +135,8 @@ vec4 nh = fetchMatData(i + MAT_ROW_ALPHA_FILM);
|
|
|
135
135
|
vec4 lF = fetchMatData(i + MAT_ROW_BASE_CONTROLS);
|
|
136
136
|
vec4 oM = fetchMatData(i + MAT_ROW_SPECULAR_FUZZ);
|
|
137
137
|
vec4 subsurface = fetchMatData(i + MAT_ROW_SUBSURFACE);
|
|
138
|
-
vec4
|
|
139
|
-
vec4
|
|
138
|
+
vec4 wd = fetchMatData(i + MAT_ROW_FUZZ);
|
|
139
|
+
vec4 vy = fetchMatData(i + MAT_ROW_COAT);
|
|
140
140
|
vec4 lG = fetchMatData(i + MAT_ROW_COAT_CONTROLS);
|
|
141
141
|
vec4 mK = fetchMatData(i + MAT_ROW_FILM_DISPERSION);
|
|
142
142
|
vec4 ng = fetchMatData(i + MAT_ROW_STANDALONE_MAPS);
|
|
@@ -173,10 +173,10 @@ mat.specularColor = max(oM.rgb, vec3(0.0));
|
|
|
173
173
|
mat.fuzzWeight = clamp(oM.w, 0.0, 1.0);
|
|
174
174
|
mat.subsurfaceColor = max(subsurface.rgb, vec3(0.0));
|
|
175
175
|
mat.transmissionColor = max(fetchMatData(i + MAT_ROW_TRANSMISSION_COLOR).rgb, vec3(0.0));
|
|
176
|
-
mat.fuzzColor = max(
|
|
177
|
-
mat.fuzzRoughness = clamp(
|
|
178
|
-
mat.coatColor = max(
|
|
179
|
-
mat.coatWeight = clamp(
|
|
176
|
+
mat.fuzzColor = max(wd.rgb, vec3(0.0));
|
|
177
|
+
mat.fuzzRoughness = clamp(wd.w, 0.0, 1.0);
|
|
178
|
+
mat.coatColor = max(vy.rgb, vec3(0.0));
|
|
179
|
+
mat.coatWeight = clamp(vy.w, 0.0, 1.0);
|
|
180
180
|
mat.coatRoughness = clamp(lG.x, ROUGHNESS_MIN, 1.0);
|
|
181
181
|
mat.coatAnisotropy = clamp(lG.y, 0.0, 1.0);
|
|
182
182
|
mat.coatIor = max(lG.z, 1.0);
|
|
@@ -253,10 +253,10 @@ mat.emission *= decodeMapColor(emissiveMapIndex, emissive);
|
|
|
253
253
|
#ifdef NUM_COAT_WEIGHT_MAPS
|
|
254
254
|
int hN = int(fetchMatData(i + MAT_ROW_LAYER_MAPS).x);
|
|
255
255
|
if (hN >= 0 && mat.materialType == 0) {
|
|
256
|
-
float qk = clamp(
|
|
256
|
+
float qk = clamp(vy.w, 0.0, 1.0) * sampleMap(
|
|
257
257
|
hN, getMapUvSet(hN, uv, uv1)
|
|
258
258
|
).r;
|
|
259
|
-
mat.emission *= mix(vec3(1.0), sqrt(max(
|
|
259
|
+
mat.emission *= mix(vec3(1.0), sqrt(max(vy.rgb, vec3(0.0))), qk);
|
|
260
260
|
}
|
|
261
261
|
#endif
|
|
262
262
|
|
|
@@ -122,18 +122,18 @@ float cp = bA - float(dP);
|
|
|
122
122
|
float cy = aG - float(aM);
|
|
123
123
|
float ku = bt - float(cI);
|
|
124
124
|
|
|
125
|
-
float
|
|
126
|
-
float
|
|
127
|
-
float
|
|
128
|
-
float
|
|
129
|
-
float
|
|
130
|
-
float
|
|
131
|
-
float
|
|
132
|
-
float
|
|
133
|
-
float v00 = mix(
|
|
134
|
-
float v01 = mix(
|
|
135
|
-
float v10 = mix(
|
|
136
|
-
float v11 = mix(
|
|
125
|
+
float ul = F(cI, dP * 32 + aM);
|
|
126
|
+
float um = F(eO, dP * 32 + aM);
|
|
127
|
+
float un = F(cI, dP * 32 + cn);
|
|
128
|
+
float uo = F(eO, dP * 32 + cn);
|
|
129
|
+
float uq = F(cI, hB * 32 + aM);
|
|
130
|
+
float ur = F(eO, hB * 32 + aM);
|
|
131
|
+
float us = F(cI, hB * 32 + cn);
|
|
132
|
+
float ut = F(eO, hB * 32 + cn);
|
|
133
|
+
float v00 = mix(ul, uq, cp);
|
|
134
|
+
float v01 = mix(um, ur, cp);
|
|
135
|
+
float v10 = mix(un, us, cp);
|
|
136
|
+
float v11 = mix(uo, ut, cp);
|
|
137
137
|
return mix(
|
|
138
138
|
mix(v00, v10, cy),
|
|
139
139
|
mix(v01, v11, cy),
|
|
@@ -181,18 +181,18 @@ float cp = bA - float(dP);
|
|
|
181
181
|
float cy = aG - float(aM);
|
|
182
182
|
float ku = bt - float(cI);
|
|
183
183
|
|
|
184
|
-
float
|
|
185
|
-
float
|
|
186
|
-
float
|
|
187
|
-
float
|
|
188
|
-
float
|
|
189
|
-
float
|
|
190
|
-
float
|
|
191
|
-
float
|
|
192
|
-
float v00 = mix(
|
|
193
|
-
float v01 = mix(
|
|
194
|
-
float v10 = mix(
|
|
195
|
-
float v11 = mix(
|
|
184
|
+
float ul = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aM);
|
|
185
|
+
float um = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + aM);
|
|
186
|
+
float un = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + cn);
|
|
187
|
+
float uo = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + dP * 32 + cn);
|
|
188
|
+
float uq = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + aM);
|
|
189
|
+
float ur = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + aM);
|
|
190
|
+
float us = F(cI, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + cn);
|
|
191
|
+
float ut = F(eO, ${OPENPBR_DIELECTRIC_ENERGY_LUT_ROW} + hB * 32 + cn);
|
|
192
|
+
float v00 = mix(ul, uq, cp);
|
|
193
|
+
float v01 = mix(um, ur, cp);
|
|
194
|
+
float v10 = mix(un, us, cp);
|
|
195
|
+
float v11 = mix(uo, ut, cp);
|
|
196
196
|
return mix(
|
|
197
197
|
mix(v00, v10, cy),
|
|
198
198
|
mix(v01, v11, cy),
|
|
@@ -906,17 +906,17 @@ J material = prepared.material;
|
|
|
906
906
|
float dielectric = 1.0 - material.baseMetalness;
|
|
907
907
|
float opaque = dielectric * (1.0 - material.transmissionWeight) * (1.0 - material.subsurfaceWeight);
|
|
908
908
|
float sss = dielectric * (1.0 - material.transmissionWeight) * material.subsurfaceWeight;
|
|
909
|
-
float
|
|
909
|
+
float tU = dielectric * material.transmissionWeight;
|
|
910
910
|
float fL = bM(prepared.specularEtaTOverEtaI);
|
|
911
911
|
float kI = bM(1.0 / prepared.transmissionReflectionIor);
|
|
912
|
-
float pw = clamp(opaque * fL + (sss +
|
|
912
|
+
float pw = clamp(opaque * fL + (sss + tU) * kI + material.baseMetalness, 0.0, 1.0);
|
|
913
913
|
float ji = mix(1.0, material.specularRoughness, pw);
|
|
914
914
|
float ks = bM(material.coatIor);
|
|
915
915
|
float kr = 1.0 - (1.0 - ks) / (material.coatIor * material.coatIor);
|
|
916
916
|
float k = mix(ks, kr, ji);
|
|
917
917
|
vec3 eb = material.baseMetalness * material.specularWeight * bP(material.baseWeight * material.baseColor, material.specularColor)
|
|
918
918
|
+ opaque * mix(material.baseWeight * material.baseColor, vec3(1.0), fL)
|
|
919
|
-
+ sss * material.subsurfaceColor + vec3(
|
|
919
|
+
+ sss * material.subsurfaceColor + vec3(tU);
|
|
920
920
|
vec3 qH = vec3(1.0 - k) / max(vec3(1.0) - eb * k, vec3(1e-6));
|
|
921
921
|
return mix(vec3(1.0), qH, material.coatWeight * material.coatDarkening);
|
|
922
922
|
}
|
|
@@ -1545,7 +1545,7 @@ normal
|
|
|
1545
1545
|
return bI(prepared, lightDirection, pdf);
|
|
1546
1546
|
}
|
|
1547
1547
|
|
|
1548
|
-
float
|
|
1548
|
+
float vK(
|
|
1549
1549
|
vec3 tangent,
|
|
1550
1550
|
J material,
|
|
1551
1551
|
vec3 bF,
|
|
@@ -1662,8 +1662,8 @@ else if (bm < cdf[OPENPBR_LOBE_TRANSMISSION]) {
|
|
|
1662
1662
|
isTransmissionEvent = true;
|
|
1663
1663
|
|
|
1664
1664
|
|
|
1665
|
-
float
|
|
1666
|
-
if (prepared.dielectricMsProbability > 0.0 &&
|
|
1665
|
+
float uf = (bm - cdf[OPENPBR_LOBE_SPECULAR]) / max(prepared.probabilities[OPENPBR_LOBE_TRANSMISSION], 1e-12);
|
|
1666
|
+
if (prepared.dielectricMsProbability > 0.0 && uf < prepared.dielectricMsProbability) {
|
|
1667
1667
|
float iU = prepared.dielectricMsReflectionRatio;
|
|
1668
1668
|
bool lM = cx < iU;
|
|
1669
1669
|
float z;
|
|
@@ -11,7 +11,7 @@ s0 = uvec4(p, uint(frame), uint(p.x) + uint(p.y));
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
void
|
|
14
|
+
void vj(inout uvec4 v) {
|
|
15
15
|
v = v * 1664525u + 1013904223u;
|
|
16
16
|
v.x += v.y*v.w; v.y += v.z*v.x; v.z += v.x*v.y; v.w += v.y*v.z;
|
|
17
17
|
v = v ^ (v>>16u);
|
|
@@ -19,7 +19,7 @@ v.x += v.y*v.w; v.y += v.z*v.x; v.z += v.x*v.y; v.w += v.y*v.z;
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
float rand() {
|
|
22
|
-
|
|
22
|
+
vj(s0); return float(s0.x)/float(0xffffffffu);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
`;
|
|
@@ -23,7 +23,7 @@ export default createShaderMixin({
|
|
|
23
23
|
main: glsl `
|
|
24
24
|
|
|
25
25
|
const vec3 luminance = vec3(0.2126, 0.7152, 0.0722);
|
|
26
|
-
const int
|
|
26
|
+
const int vp = 8;
|
|
27
27
|
|
|
28
28
|
#define RAY_MAX_DISTANCE 9999.0
|
|
29
29
|
|
|
@@ -276,10 +276,10 @@ float tD = light.v.y > 1e-6
|
|
|
276
276
|
? smoothstep(light.v.x, light.v.x + light.v.y, cc)
|
|
277
277
|
: step(light.v.x, cc);
|
|
278
278
|
if (tD <= 0.0 || light.textureIndex < 0) return tD;
|
|
279
|
-
vec3
|
|
280
|
-
vec3
|
|
279
|
+
vec3 tX = light.iesReference;
|
|
280
|
+
vec3 vo = cross(axis, tX);
|
|
281
281
|
float vertical = acos(clamp(cc, -1.0, 1.0));
|
|
282
|
-
float horizontal = atan(dot(dJ,
|
|
282
|
+
float horizontal = atan(dot(dJ, vo), dot(dJ, tX));
|
|
283
283
|
return tD * kF(light.textureIndex, vec2(vertical / PI, horizontal / TWOPI + 0.5));
|
|
284
284
|
}
|
|
285
285
|
`
|
|
@@ -60,9 +60,9 @@ result.pdf = 1.0 / max(TWOPI * (1.0 - rJ), 1e-8);
|
|
|
60
60
|
float iZ = dot(direction, nE);
|
|
61
61
|
float ej = iZ * iZ
|
|
62
62
|
- dot(nE, nE) + radius * radius;
|
|
63
|
-
float
|
|
64
|
-
float cN = iZ -
|
|
65
|
-
float cB = iZ +
|
|
63
|
+
float wu = sqrt(max(0.0, ej));
|
|
64
|
+
float cN = iZ - wu;
|
|
65
|
+
float cB = iZ + wu;
|
|
66
66
|
result.dist = cN > 1e-6 ? cN : cB;
|
|
67
67
|
result.direction = direction;
|
|
68
68
|
vec3 surfacePoint = shadingPoint + direction * result.dist;
|
|
@@ -93,14 +93,14 @@ return eW > 0.0
|
|
|
93
93
|
#ifdef NUM_COAT_NORMAL_MAPS
|
|
94
94
|
vec3 fB(vec3 pk, vec3 tc, vec3 view) {
|
|
95
95
|
bool qL = dot(tc, view) >= 0.0;
|
|
96
|
-
vec3
|
|
96
|
+
vec3 uc = qL ? tc : -tc;
|
|
97
97
|
vec3 qK = qL ? pk : -pk;
|
|
98
|
-
if (dot(pk, tc) <= 0.0 || dot(qK, view) <= 1e-6) { return
|
|
98
|
+
if (dot(pk, tc) <= 0.0 || dot(qK, view) <= 1e-6) { return uc; }
|
|
99
99
|
return qK;
|
|
100
100
|
}
|
|
101
101
|
#endif
|
|
102
102
|
void lO(inout ad si, J mat, inout Path aa) {
|
|
103
|
-
vec3
|
|
103
|
+
vec3 ue = vec3(fk(cv(BSDF_DIRECTION)), dz(cv(BSDF_LOBE)));
|
|
104
104
|
#ifdef NUM_COAT_NORMAL_MAPS
|
|
105
105
|
vec3 bC = si.faceNormal;
|
|
106
106
|
vec3 mr = si.normal;
|
|
@@ -219,7 +219,7 @@ aa.li += mG(si, mat, prepared, aa, ffnormal, true) * aa.beta;
|
|
|
219
219
|
bool isNextRefraction;
|
|
220
220
|
vec3 f = dv(
|
|
221
221
|
prepared,
|
|
222
|
-
|
|
222
|
+
ue,
|
|
223
223
|
cF,
|
|
224
224
|
scatteringPdf,
|
|
225
225
|
isNextRefraction
|
|
@@ -7,11 +7,11 @@ export default glsl `
|
|
|
7
7
|
vec3 aQ(vec3 view, vec2 alpha, vec2 samplePoint) {
|
|
8
8
|
vec3 qY = vec3(alpha, 1.0);
|
|
9
9
|
vec3 ge = normalize(qY * view);
|
|
10
|
-
float
|
|
11
|
-
float qD = 1.0 +
|
|
10
|
+
float tV = min(ge.z, 1.0);
|
|
11
|
+
float qD = 1.0 + tV;
|
|
12
12
|
float qT = (1.0 - samplePoint.y) * qD;
|
|
13
13
|
float rE = samplePoint.y * qD;
|
|
14
|
-
float st = qT + (1.0 -
|
|
14
|
+
float st = qT + (1.0 - tV);
|
|
15
15
|
float fi = sqrt(max(0.0, st * rE));
|
|
16
16
|
float br = TWOPI * samplePoint.x;
|
|
17
17
|
vec3 lt = vec3(
|
|
@@ -52,7 +52,7 @@ uint r = reverseBits(ki);
|
|
|
52
52
|
${sobolD1Steps.map(([shift, mask]) => `r ^= (r << ${shift}u) & 0x${mask.toString(16)}u;`).join("\n ")}
|
|
53
53
|
return r;
|
|
54
54
|
}
|
|
55
|
-
vec2
|
|
55
|
+
vec2 vD(uint index, uint ie) {
|
|
56
56
|
uint i = sv(index, aq(ie, 0u));
|
|
57
57
|
uint x = reverseBits(iA(i, aq(ie, 1u)));
|
|
58
58
|
uint y = sv(qX(i), aq(ie, 2u));
|
|
@@ -74,9 +74,9 @@ return (word >> ((tm & 3u) * 8u)) & 255u;
|
|
|
74
74
|
}
|
|
75
75
|
uint pK(uint kB, uint dim, uint logSPP) {
|
|
76
76
|
uint odd = logSPP & 1u;
|
|
77
|
-
uint
|
|
77
|
+
uint ua = 8u + ((logSPP + 1u) >> 1u);
|
|
78
78
|
uint result = 0u;
|
|
79
|
-
for (int digit = int(
|
|
79
|
+
for (int digit = int(ua) - 1; digit >= int(odd); digit--) {
|
|
80
80
|
uint shift = 2u*uint(digit) - odd;
|
|
81
81
|
|
|
82
82
|
uint sd = 0u;
|
|
@@ -32,7 +32,7 @@ return;
|
|
|
32
32
|
// So here the code are injected separately.
|
|
33
33
|
const bounceCodeOnIntelMac = glsl `
|
|
34
34
|
|
|
35
|
-
for(int
|
|
35
|
+
for(int vI = 0; vI < BOUNCES; vI++) {{
|
|
36
36
|
if (aa.abort) {
|
|
37
37
|
return vec4(aa.li, aa.alpha);
|
|
38
38
|
}
|
|
@@ -40,10 +40,10 @@ bounce(aa, depth, si, mat, outAux);
|
|
|
40
40
|
}}
|
|
41
41
|
`;
|
|
42
42
|
const bounceCodeOnOther = glsl `
|
|
43
|
-
bool
|
|
43
|
+
bool uT = !si.isTransparency;
|
|
44
44
|
int qB = min(BOUNCES, bounceLimit);
|
|
45
45
|
for(int idx = 0; idx < min(BOUNCES * 3, ${MAX_PATH_EVENTS}); idx++) {
|
|
46
|
-
if (
|
|
46
|
+
if (uT && idx > qB) {
|
|
47
47
|
aa.abort = true;
|
|
48
48
|
}
|
|
49
49
|
if (aa.abort) {
|
|
@@ -7,7 +7,7 @@ export const brightFragment = new FragmentShader({
|
|
|
7
7
|
scale: Shader.uniform('float', 1)
|
|
8
8
|
},
|
|
9
9
|
main: glsl `
|
|
10
|
-
const vec3
|
|
10
|
+
const vec3 uE = vec3(0.2125, 0.7154, 0.0721);
|
|
11
11
|
vec4 sm(vec4 a, vec4 b, vec4 c) {
|
|
12
12
|
return a + b + c - min(min(a, b), c) - max(max(a, b), c);
|
|
13
13
|
}
|
|
@@ -19,7 +19,7 @@ vec4 s2 = sample_colorTex(v_Texcoord + vec2(d.x, 0.0));
|
|
|
19
19
|
vec4 s3 = sample_colorTex(v_Texcoord - vec2(0.0, d.y));
|
|
20
20
|
vec4 s4 = sample_colorTex(v_Texcoord + vec2(0.0, d.y));
|
|
21
21
|
iW = sm(sm(iW, s1, s2), s3, s4);
|
|
22
|
-
float lum = dot(iW.rgb,
|
|
22
|
+
float lum = dot(iW.rgb, uE);
|
|
23
23
|
out_color = lum > threshold && iW.a > 0.0
|
|
24
24
|
? vec4(iW.rgb * scale, iW.a)
|
|
25
25
|
: vec4(0.0, 0.0, 0.0, iW.a);
|
|
@@ -393,6 +393,11 @@ export function materialParametersEqual(material, values) {
|
|
|
393
393
|
else if (!Object.is(value, previous))
|
|
394
394
|
return false;
|
|
395
395
|
}
|
|
396
|
+
{
|
|
397
|
+
const value = material.displacementBias, previous = values[57];
|
|
398
|
+
if (!Object.is(value, previous) && !arrayParametersEqual(value, previous))
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
396
401
|
return true;
|
|
397
402
|
}
|
|
398
403
|
/** Mirrors captureMaterialTextures, including numeric texture-category scalars. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialComparison.generated.js","sourceRoot":"","sources":["../../src/renderer/materialComparison.generated.ts"],"names":[],"mappings":"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","sourcesContent":["// Generated by scripts/generate-material-comparison.mjs from openPbrSchema.ts.\n// Do not edit; run npm run generate:material-comparison after changing the schema.\nimport type OpenPBRMaterial from '../scene/OpenPBRMaterial.js';\n\n// Retain the generic array behavior for unusual scalar values supplied from JS.\nfunction arrayParametersEqual(value: unknown, previous: unknown): boolean {\n if (!Array.isArray(value) && !ArrayBuffer.isView(value)) return false;\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n return true;\n}\n\n/** Static field accesses keep the unchanged-material path free of dynamic key lookups. */\nexport function materialParametersEqual(material: OpenPBRMaterial, values: readonly unknown[]): boolean {\n {\n const value = material.baseWeight, previous = values[0];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.baseColor, previous = values[1];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.baseDiffuseRoughness, previous = values[2];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.baseMetalness, previous = values[3];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularWeight, previous = values[4];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularColor, previous = values[5];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.specularRoughness, previous = values[6];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularIor, previous = values[7];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularAnisotropy, previous = values[8];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.transmissionWeight, previous = values[9];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.transmissionColor, previous = values[10];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.transmissionDepth, previous = values[11];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.transmissionScatter, previous = values[12];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.transmissionScatterAnisotropy, previous = values[13];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.transmissionDispersionScale, previous = values[14];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.transmissionDispersionAbbeNumber, previous = values[15];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.subsurfaceWeight, previous = values[16];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.subsurfaceColor, previous = values[17];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.subsurfaceRadius, previous = values[18];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.subsurfaceRadiusScale, previous = values[19];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.subsurfaceAnisotropy, previous = values[20];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.fuzzWeight, previous = values[21];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.fuzzColor, previous = values[22];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.fuzzRoughness, previous = values[23];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatWeight, previous = values[24];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatColor, previous = values[25];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.coatRoughness, previous = values[26];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatAnisotropy, previous = values[27];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatIor, previous = values[28];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatDarkening, previous = values[29];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinFilmWeight, previous = values[30];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinFilmThickness, previous = values[31];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinFilmIor, previous = values[32];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.emissionColor, previous = values[33];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.emissionLuminance, previous = values[34];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.opacity, previous = values[35];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinWalled, previous = values[36];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.doubleSided, previous = values[37];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.alphaMode, previous = values[38];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.alphaCutoff, previous = values[39];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.normalScale, previous = values[40];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.shadowCatcher, previous = values[41];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.unlit, previous = values[42];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.bevelSize, previous = values[43];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.mapAlphaUsage, previous = values[44];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.uvProjection, previous = values[45];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.uvProjectionScale, previous = values[46];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.displacementUvProjection, previous = values[47];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.displacementUvProjectionScale, previous = values[48];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.displacementScale, previous = values[49];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.displacementStepSize, previous = values[50];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinFilmThicknessMinimum, previous = values[51];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinFilmMapChannel, previous = values[52];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularAnisotropyRotation, previous = values[53];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatAnisotropyRotation, previous = values[54];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularAnisotropyModel, previous = values[55];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatNormalScale, previous = values[56];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n return true;\n}\n\n/** Mirrors captureMaterialTextures, including numeric texture-category scalars. */\nexport function materialTexturesChanged(material: OpenPBRMaterial, previous: readonly unknown[]): boolean {\n let i = 0;\n {\n const texture = material.map;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.alphaMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.emissiveMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.normalMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.metallicRoughnessMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.roughnessMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.metalnessMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.transmissionMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.thinFilmMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.displacementMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.coatWeightMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.coatRoughnessMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.fuzzColorMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.fuzzRoughnessMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.specularWeightMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.specularColorMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.anisotropyMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.coatNormalMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n return i !== previous.length;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"materialComparison.generated.js","sourceRoot":"","sources":["../../src/renderer/materialComparison.generated.ts"],"names":[],"mappings":"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","sourcesContent":["// Generated by scripts/generate-material-comparison.mjs from openPbrSchema.ts.\n// Do not edit; run npm run generate:material-comparison after changing the schema.\nimport type OpenPBRMaterial from '../scene/OpenPBRMaterial.js';\n\n// Retain the generic array behavior for unusual scalar values supplied from JS.\nfunction arrayParametersEqual(value: unknown, previous: unknown): boolean {\n if (!Array.isArray(value) && !ArrayBuffer.isView(value)) return false;\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n return true;\n}\n\n/** Static field accesses keep the unchanged-material path free of dynamic key lookups. */\nexport function materialParametersEqual(material: OpenPBRMaterial, values: readonly unknown[]): boolean {\n {\n const value = material.baseWeight, previous = values[0];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.baseColor, previous = values[1];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.baseDiffuseRoughness, previous = values[2];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.baseMetalness, previous = values[3];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularWeight, previous = values[4];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularColor, previous = values[5];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.specularRoughness, previous = values[6];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularIor, previous = values[7];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularAnisotropy, previous = values[8];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.transmissionWeight, previous = values[9];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.transmissionColor, previous = values[10];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.transmissionDepth, previous = values[11];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.transmissionScatter, previous = values[12];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.transmissionScatterAnisotropy, previous = values[13];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.transmissionDispersionScale, previous = values[14];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.transmissionDispersionAbbeNumber, previous = values[15];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.subsurfaceWeight, previous = values[16];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.subsurfaceColor, previous = values[17];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.subsurfaceRadius, previous = values[18];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.subsurfaceRadiusScale, previous = values[19];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.subsurfaceAnisotropy, previous = values[20];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.fuzzWeight, previous = values[21];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.fuzzColor, previous = values[22];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.fuzzRoughness, previous = values[23];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatWeight, previous = values[24];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatColor, previous = values[25];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.coatRoughness, previous = values[26];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatAnisotropy, previous = values[27];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatIor, previous = values[28];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatDarkening, previous = values[29];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinFilmWeight, previous = values[30];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinFilmThickness, previous = values[31];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinFilmIor, previous = values[32];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.emissionColor, previous = values[33];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.emissionLuminance, previous = values[34];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.opacity, previous = values[35];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinWalled, previous = values[36];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.doubleSided, previous = values[37];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.alphaMode, previous = values[38];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.alphaCutoff, previous = values[39];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.normalScale, previous = values[40];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.shadowCatcher, previous = values[41];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.unlit, previous = values[42];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.bevelSize, previous = values[43];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.mapAlphaUsage, previous = values[44];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.uvProjection, previous = values[45];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.uvProjectionScale, previous = values[46];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.displacementUvProjection, previous = values[47];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.displacementUvProjectionScale, previous = values[48];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.displacementScale, previous = values[49];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.displacementStepSize, previous = values[50];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinFilmThicknessMinimum, previous = values[51];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.thinFilmMapChannel, previous = values[52];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularAnisotropyRotation, previous = values[53];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatAnisotropyRotation, previous = values[54];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.specularAnisotropyModel, previous = values[55];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n {\n const value = material.coatNormalScale, previous = values[56];\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const array = value as ArrayLike<number>;\n if (!Array.isArray(previous) || array.length !== previous.length) return false;\n for (let i = 0; i < array.length; i++) if (!Object.is(array[i], previous[i])) return false;\n } else if (!Object.is(value, previous)) return false;\n }\n {\n const value = material.displacementBias, previous = values[57];\n if (!Object.is(value, previous) && !arrayParametersEqual(value, previous)) return false;\n }\n return true;\n}\n\n/** Mirrors captureMaterialTextures, including numeric texture-category scalars. */\nexport function materialTexturesChanged(material: OpenPBRMaterial, previous: readonly unknown[]): boolean {\n let i = 0;\n {\n const texture = material.map;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.alphaMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.emissiveMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.normalMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.metallicRoughnessMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.roughnessMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.metalnessMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.transmissionMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.thinFilmMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.displacementMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.coatWeightMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.coatRoughnessMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.fuzzColorMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.fuzzRoughnessMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.specularWeightMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.specularColorMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.anisotropyMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n {\n const texture = material.coatNormalMap;\n if (typeof texture !== 'number') {\n if (!texture) { if (previous[i++] !== undefined) return true; }\n else if (previous[i++] !== texture || previous[i++] !== texture.version ||\n previous[i++] !== texture.image || previous[i++] !== texture.flipY ||\n previous[i++] !== texture.uvScale || previous[i++] !== texture.uvOffset ||\n previous[i++] !== texture.uvChannel) return true;\n }\n }\n return i !== previous.length;\n}\n"]}
|
|
@@ -46,7 +46,8 @@ export const MATERIAL_LAYOUT = [
|
|
|
46
46
|
] },
|
|
47
47
|
{ name: 'DISPLACEMENT', fields: [
|
|
48
48
|
field('displacementStepSize', 'displacementStepSize', 'f32'),
|
|
49
|
-
|
|
49
|
+
// Reuses zero padding: default bias preserves historical bytes and stride.
|
|
50
|
+
field('displacementBias', 'displacementBias', 'f32'),
|
|
50
51
|
field('displacementUvProjection', 'displacementUvProjection', 'f32'),
|
|
51
52
|
field('displacementUvProjectionScale', 'displacementUvProjectionScale', 'f32')
|
|
52
53
|
] },
|