@meimu/mutracer 0.1.3 → 0.1.4
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 +4114 -4015
- package/docs/api.md +11 -9
- package/docs/threejs.md +30 -4
- package/lib/Engine.js +18 -1
- package/lib/Engine.js.map +1 -1
- package/lib/main.d.ts +1 -1
- package/lib/main.js.map +1 -1
- 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 +10 -4
- package/lib/renderer/MaterialTable.js.map +1 -1
- package/lib/renderer/WGPUBloomPass.js +18 -18
- package/lib/renderer/WGPUFullQuadPass.js +6 -6
- package/lib/renderer/WGPUJNLMDenoiser.js +69 -69
- package/lib/renderer/WGPURayTraceOutput.js +14 -14
- package/lib/renderer/WGPURayTracePass.d.ts +2 -0
- package/lib/renderer/WGPURayTracePass.js +12 -6
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.js +15 -15
- package/lib/renderer/WebGLJNLMDenoiser.js +69 -69
- package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
- package/lib/renderer/WebGLRayTracePass.d.ts +1 -0
- package/lib/renderer/WebGLRayTracePass.js +7 -1
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/envMapCreation.d.ts +5 -1
- package/lib/renderer/envMapCreation.js +42 -5
- package/lib/renderer/envMapCreation.js.map +1 -1
- package/lib/renderer/geometryUpdates.js +1 -1
- package/lib/renderer/geometryUpdates.js.map +1 -1
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/envMap.glsl.js +66 -54
- package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/intersect.glsl.js +316 -310
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +151 -119
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +414 -414
- package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/random.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +40 -39
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +69 -69
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +78 -78
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/sampling.glsl.js +75 -75
- package/lib/renderer/glsl/chunks/sobol.glsl.js +61 -61
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
- package/lib/renderer/glsl/depthQuery.frag.js +5 -5
- package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
- package/lib/renderer/glsl/rayTrace.frag.js +133 -133
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/shadowCatcher.frag.js +9 -9
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +52 -52
- package/lib/renderer/lightsUtil.js +6 -4
- package/lib/renderer/lightsUtil.js.map +1 -1
- package/lib/renderer/materialChanges.js +1 -1
- package/lib/renderer/materialChanges.js.map +1 -1
- package/lib/renderer/materialComparison.generated.js +36 -18
- package/lib/renderer/materialComparison.generated.js.map +1 -1
- package/lib/renderer/prepareMeshBVH.js +2 -2
- package/lib/renderer/prepareMeshBVH.js.map +1 -1
- package/lib/renderer/sceneChangeDetector.js +4 -1
- package/lib/renderer/sceneChangeDetector.js.map +1 -1
- package/lib/renderer/sceneLightChanges.js +3 -2
- package/lib/renderer/sceneLightChanges.js.map +1 -1
- package/lib/renderer/scratchSampling.js +18 -18
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +39 -31
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +475 -469
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +8 -8
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +93 -59
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +469 -469
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +117 -120
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +25 -22
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +127 -127
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +136 -136
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +6 -6
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +73 -73
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +62 -62
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
- package/lib/renderer/wgsl/compose.frag.wgsl.js +105 -105
- package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
- package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/depthQuery.wgsl.js +5 -5
- package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
- package/lib/renderer/wgsl/rayTrace.compute.js +251 -248
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/EnvironmentLight.d.ts +9 -3
- package/lib/scene/EnvironmentLight.js +9 -2
- package/lib/scene/EnvironmentLight.js.map +1 -1
- package/lib/scene/Scene.d.ts +4 -0
- package/lib/scene/Scene.js.map +1 -1
- package/lib/scene/SpotLight.d.ts +2 -2
- package/lib/scene/SpotLight.js +1 -1
- package/lib/scene/SpotLight.js.map +1 -1
- package/lib/scene/Texture.d.ts +17 -6
- package/lib/scene/Texture.js +13 -4
- package/lib/scene/Texture.js.map +1 -1
- package/lib/util/fromTHREE.js +151 -29
- 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
|
@@ -28,8 +28,8 @@ uvec2 bc;
|
|
|
28
28
|
uint bd;
|
|
29
29
|
uint cF = 0u;
|
|
30
30
|
uint em = 0u;
|
|
31
|
-
uint eg(uint
|
|
32
|
-
uint x =
|
|
31
|
+
uint eg(uint kt) {
|
|
32
|
+
uint x = kt;
|
|
33
33
|
x ^= x >> 16u; x *= 0x7feb352du;
|
|
34
34
|
x ^= x >> 15u; x *= 0x846ca68bu;
|
|
35
35
|
return x ^ (x >> 16u);
|
|
@@ -37,28 +37,28 @@ return x ^ (x >> 16u);
|
|
|
37
37
|
uint aq(uint a, uint b) {
|
|
38
38
|
return eg(a ^ eg(b + 0x9e3779b9u));
|
|
39
39
|
}
|
|
40
|
-
uint
|
|
41
|
-
uint x =
|
|
40
|
+
uint iE(uint kt, uint ij) {
|
|
41
|
+
uint x = kt + ij;
|
|
42
42
|
x ^= x * 0x6c50b47cu; x ^= x * 0xb82f1e52u;
|
|
43
43
|
x ^= x * 0xc7afe638u; x ^= x * 0x8d22f6e6u;
|
|
44
44
|
return x;
|
|
45
45
|
}
|
|
46
|
-
uint
|
|
47
|
-
return reverseBits(
|
|
46
|
+
uint sK(uint x, uint ij) {
|
|
47
|
+
return reverseBits(iE(reverseBits(x), ij));
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
uint
|
|
51
|
-
uint r = reverseBits(
|
|
50
|
+
uint rl(uint kt) {
|
|
51
|
+
uint r = reverseBits(kt);
|
|
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
|
|
56
|
-
uint i =
|
|
57
|
-
uint x = reverseBits(
|
|
58
|
-
uint y =
|
|
55
|
+
vec2 vP(uint index, uint ij) {
|
|
56
|
+
uint i = sK(index, aq(ij, 0u));
|
|
57
|
+
uint x = reverseBits(iE(i, aq(ij, 1u)));
|
|
58
|
+
uint y = sK(rl(i), aq(ij, 2u));
|
|
59
59
|
return vec2(float(x >> 8u), float(y >> 8u)) * (1.0 / 16777216.0);
|
|
60
60
|
}
|
|
61
|
-
uint
|
|
61
|
+
uint tB(uvec2 p) {
|
|
62
62
|
uvec2 v = p & uvec2(255u);
|
|
63
63
|
v = (v | (v << uvec2(4u))) & uvec2(0x0f0fu);
|
|
64
64
|
v = (v | (v << uvec2(2u))) & uvec2(0x3333u);
|
|
@@ -66,27 +66,27 @@ v = (v | (v << uvec2(1u))) & uvec2(0x5555u);
|
|
|
66
66
|
return v.x | (v.y << 1u);
|
|
67
67
|
}
|
|
68
68
|
${zSobolPackedPermutations.map((v, i) => `const uint Z_PERM_${i} = ${v}u;`).join("\n")}
|
|
69
|
-
uint
|
|
70
|
-
uint group =
|
|
69
|
+
uint kw(uint tE) {
|
|
70
|
+
uint group = tE >> 2u;
|
|
71
71
|
uint word = Z_PERM_5;
|
|
72
72
|
${[0, 1, 2, 3, 4].map(i => `word = group == ${i}u ? Z_PERM_${i} : word;`).join("\n ")}
|
|
73
|
-
return (word >> ((
|
|
73
|
+
return (word >> ((tE & 3u) * 8u)) & 255u;
|
|
74
74
|
}
|
|
75
|
-
uint
|
|
75
|
+
uint pW(uint kN, uint dim, uint logSPP) {
|
|
76
76
|
uint odd = logSPP & 1u;
|
|
77
|
-
uint
|
|
77
|
+
uint um = 8u + ((logSPP + 1u) >> 1u);
|
|
78
78
|
uint result = 0u;
|
|
79
|
-
for (int digit = int(
|
|
79
|
+
for (int digit = int(um) - 1; digit >= int(odd); digit--) {
|
|
80
80
|
uint shift = 2u*uint(digit) - odd;
|
|
81
81
|
|
|
82
|
-
uint
|
|
83
|
-
if (shift < 30u) {
|
|
84
|
-
uint
|
|
85
|
-
uint d = (
|
|
86
|
-
result |= ((
|
|
82
|
+
uint st = 0u;
|
|
83
|
+
if (shift < 30u) { st = kN >> (shift + 2u); }
|
|
84
|
+
uint tE = (eg(st ^ (0x55555555u * dim)) >> 24u) % 24u;
|
|
85
|
+
uint d = (kN >> shift) & 3u;
|
|
86
|
+
result |= ((kw(tE) >> (2u*d)) & 3u) << shift;
|
|
87
87
|
}
|
|
88
88
|
if (odd != 0u) {
|
|
89
|
-
result |= (
|
|
89
|
+
result |= (kN & 1u) ^ (eg((kN >> 1u) ^ (0x55555555u * dim)) & 1u);
|
|
90
90
|
}
|
|
91
91
|
return result;
|
|
92
92
|
}
|
|
@@ -97,62 +97,62 @@ uint cw(uint slot) {
|
|
|
97
97
|
return CAMERA_BEVEL_BASE + uint(BEVEL_SAMPLES) + cF * BOUNCE_STRIDE + slot;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
uvec4
|
|
101
|
-
uint
|
|
102
|
-
bool
|
|
103
|
-
bool
|
|
104
|
-
uint
|
|
105
|
-
uint
|
|
106
|
-
vec2
|
|
100
|
+
uvec4 hl;
|
|
101
|
+
uint hm;
|
|
102
|
+
bool fB = false;
|
|
103
|
+
bool dg = false;
|
|
104
|
+
uint dF;
|
|
105
|
+
uint gu;
|
|
106
|
+
vec2 eQ;
|
|
107
107
|
void dw(uint dim) {
|
|
108
108
|
|
|
109
|
-
uint
|
|
110
|
-
uvec4 key = uvec4(dim, bd,
|
|
111
|
-
if (
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
uint
|
|
109
|
+
uint kd = bc.x + bc.y * uint(round(1.0 / pixelSize.x));
|
|
110
|
+
uvec4 key = uvec4(dim, bd, kd, uint(sequenceSeed));
|
|
111
|
+
if (fB && all(equal(hl, key)) && hm == uint(zSobolLogSPP)) { return; }
|
|
112
|
+
hl = key; hm = uint(zSobolLogSPP);
|
|
113
|
+
fB = true; dg = false;
|
|
114
|
+
uint ij = aq(aq(kd, dim), uint(sequenceSeed));
|
|
115
115
|
uint index = bd;
|
|
116
116
|
if (samplingPattern == 1) {
|
|
117
117
|
uint logSPP = uint(zSobolLogSPP);
|
|
118
118
|
if (index == 0u) { logSPP = 0u; }
|
|
119
119
|
else { index -= 1u; }
|
|
120
120
|
|
|
121
|
-
uint
|
|
121
|
+
uint jb = index >> logSPP;
|
|
122
122
|
uint mask = (1u << logSPP) - 1u;
|
|
123
|
-
uint
|
|
124
|
-
index =
|
|
123
|
+
uint kN = (tB(bc) << logSPP) | (index & mask);
|
|
124
|
+
index = pW(kN, dim, logSPP);
|
|
125
125
|
uvec2 tile = bc >> uvec2(8u);
|
|
126
|
-
|
|
126
|
+
ij = aq(aq(dim, uint(sequenceSeed)), aq(tile.x, tile.y));
|
|
127
127
|
|
|
128
|
-
if (bd != 0u) {
|
|
129
|
-
|
|
128
|
+
if (bd != 0u) { jb += 1u; }
|
|
129
|
+
ij = aq(ij, jb);
|
|
130
130
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
uint x = reverseBits(
|
|
134
|
-
|
|
131
|
+
dF = sK(index, aq(ij, 0u));
|
|
132
|
+
gu = ij;
|
|
133
|
+
uint x = reverseBits(iE(dF, aq(ij, 1u)));
|
|
134
|
+
eQ.x = float(x >> 8u) * (1.0 / 16777216.0);
|
|
135
135
|
}
|
|
136
|
-
vec2
|
|
136
|
+
vec2 kS(uint dim) {
|
|
137
137
|
dw(dim);
|
|
138
|
-
if (!
|
|
139
|
-
uint y =
|
|
140
|
-
|
|
141
|
-
|
|
138
|
+
if (!dg) {
|
|
139
|
+
uint y = sK(rl(dF), aq(gu, 2u));
|
|
140
|
+
eQ.y = float(y >> 8u) * (1.0 / 16777216.0);
|
|
141
|
+
dg = true;
|
|
142
142
|
}
|
|
143
|
-
return EPS + (1.0 - 2.0*EPS) *
|
|
143
|
+
return EPS + (1.0 - 2.0*EPS) * eQ;
|
|
144
144
|
}
|
|
145
145
|
float dz(uint dim) {
|
|
146
146
|
if (samplingPattern == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
|
|
147
147
|
dw(dim);
|
|
148
|
-
return EPS + (1.0 - 2.0*EPS) *
|
|
148
|
+
return EPS + (1.0 - 2.0*EPS) * eQ.x;
|
|
149
149
|
}
|
|
150
|
-
vec2
|
|
150
|
+
vec2 fo(uint dim) {
|
|
151
151
|
if (samplingPattern == 2) {
|
|
152
152
|
float x = dz(dim); float y = dz(dim);
|
|
153
153
|
return vec2(x,y);
|
|
154
154
|
}
|
|
155
|
-
return
|
|
155
|
+
return kS(dim);
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
float eo(uint slot) {
|
|
@@ -160,10 +160,10 @@ uint dim = aq(aq(cF, slot), em) | 0x80000000u;
|
|
|
160
160
|
em += 1u;
|
|
161
161
|
if (samplingPattern == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
|
|
162
162
|
|
|
163
|
-
uint
|
|
164
|
-
uint
|
|
165
|
-
uint i =
|
|
166
|
-
uint x = reverseBits(
|
|
163
|
+
uint kd = bc.x + bc.y * uint(round(1.0 / pixelSize.x));
|
|
164
|
+
uint ij = aq(aq(kd, dim), uint(sequenceSeed));
|
|
165
|
+
uint i = sK(bd, aq(ij, 0u));
|
|
166
|
+
uint x = reverseBits(iE(i, aq(ij, 1u)));
|
|
167
167
|
return EPS + (1.0 - 2.0*EPS) * (float(x >> 8u) * (1.0 / 16777216.0));
|
|
168
168
|
}
|
|
169
169
|
`;
|
|
@@ -9,16 +9,16 @@ vec4 textureLinear(sampler2D map, vec2 uv) {
|
|
|
9
9
|
return texture(map, uv);
|
|
10
10
|
#else
|
|
11
11
|
vec2 size = vec2(textureSize(map, 0));
|
|
12
|
-
vec2
|
|
12
|
+
vec2 qa = 1.0 / size;
|
|
13
13
|
|
|
14
14
|
uv = uv * size - 0.5;
|
|
15
15
|
vec2 f = fract(uv);
|
|
16
16
|
uv = floor(uv) + 0.5;
|
|
17
17
|
|
|
18
|
-
vec4 s1 = texture(map, (uv + vec2(0, 0)) *
|
|
19
|
-
vec4 s2 = texture(map, (uv + vec2(1, 0)) *
|
|
20
|
-
vec4 s3 = texture(map, (uv + vec2(0, 1)) *
|
|
21
|
-
vec4 s4 = texture(map, (uv + vec2(1, 1)) *
|
|
18
|
+
vec4 s1 = texture(map, (uv + vec2(0, 0)) * qa);
|
|
19
|
+
vec4 s2 = texture(map, (uv + vec2(1, 0)) * qa);
|
|
20
|
+
vec4 s3 = texture(map, (uv + vec2(0, 1)) * qa);
|
|
21
|
+
vec4 s4 = texture(map, (uv + vec2(1, 1)) * qa);
|
|
22
22
|
|
|
23
23
|
return mix(mix(s1, s2, f.x), mix(s3, s4, f.x), f.y);
|
|
24
24
|
#endif
|
|
@@ -8,12 +8,12 @@ float phi = acos(n.y) / PI;
|
|
|
8
8
|
return vec2(theta, 1.0 - phi);
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
vec2
|
|
12
|
-
vec3
|
|
11
|
+
vec2 iR(vec3 pos, vec3 normal, vec2 uvScale) {
|
|
12
|
+
vec3 dn = abs(normal);
|
|
13
13
|
vec2 uv = vec2(0.0);
|
|
14
|
-
if (
|
|
14
|
+
if (dn.x > dn.y && dn.x > dn.z) {
|
|
15
15
|
uv = pos.yz;
|
|
16
|
-
} else if (
|
|
16
|
+
} else if (dn.y > dn.x && dn.y > dn.z) {
|
|
17
17
|
uv = pos.xz;
|
|
18
18
|
} else {
|
|
19
19
|
uv = pos.xy;
|
|
@@ -53,18 +53,18 @@ return fract(uv * uvScale);
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
vec2
|
|
56
|
+
vec2 hD(vec3 pos, vec3 normal) {
|
|
57
57
|
float theta = atan(pos.z, pos.x) / (2.0 * PI) + 0.5;
|
|
58
58
|
return vec2(theta, pos.y);
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
vec2
|
|
62
|
-
if (
|
|
63
|
-
return
|
|
64
|
-
} else if (
|
|
61
|
+
vec2 gH(int fk, vec3 pos, vec3 normal, vec2 uvScale) {
|
|
62
|
+
if (fk == ${uvProjectionConstants.triplanar + ''}) {
|
|
63
|
+
return iR(pos, normal, uvScale);
|
|
64
|
+
} else if (fk == ${uvProjectionConstants.spherical + ''}) {
|
|
65
65
|
return sphericalProjection(pos) * uvScale;
|
|
66
|
-
} else if (
|
|
67
|
-
return
|
|
66
|
+
} else if (fk == ${uvProjectionConstants.cylindrical + ''}) {
|
|
67
|
+
return hD(pos, normal) * uvScale;
|
|
68
68
|
}
|
|
69
69
|
return vec2(0.0);
|
|
70
70
|
}
|
|
@@ -33,18 +33,18 @@ if (any(lessThan(uv, vec2(0.0))) || any(greaterThan(uv, vec2(1.0)))) return;
|
|
|
33
33
|
vec4 origin = viewProjectionInv * vec4(uv * 2.0 - 1.0, -1.0, 1.0);
|
|
34
34
|
vec4 target = viewProjectionInv * vec4(uv * 2.0 - 1.0, 1.0, 1.0);
|
|
35
35
|
Ray ray;
|
|
36
|
-
|
|
36
|
+
iC(ray, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * target.w));
|
|
37
37
|
vec3 eye = viewInv[3].xyz;
|
|
38
|
-
vec3
|
|
38
|
+
vec3 ol = -normalize(viewInv[2].xyz);
|
|
39
39
|
ad si;
|
|
40
40
|
si.triangleIndex = -1;
|
|
41
41
|
for (int layer = 0; layer < 32; layer++) {
|
|
42
|
-
|
|
42
|
+
cZ(ray, si, false);
|
|
43
43
|
if (!si.hit) return;
|
|
44
44
|
J material;
|
|
45
|
-
|
|
45
|
+
eX(material, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
|
|
46
46
|
if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {
|
|
47
|
-
out_depth.r = max(dot(si.position - eye,
|
|
47
|
+
out_depth.r = max(dot(si.position - eye, ol), 0.0);
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
50
|
ray.o = si.position + ray.d * (EPS * 0.02);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depthQuery.frag.js","sourceRoot":"","sources":["../../../src/renderer/glsl/depthQuery.frag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,IAAI,MAAM,+BAA+B,CAAC;AACjD,OAAO,SAAS,MAAM,iCAAiC,CAAC;AACxD,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAEzC,eAAe,IAAI,cAAc,CAAC;IAChC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IAC9C,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACjC,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KAChC;IACD,IAAI,EAAE,UAAU,CAAC;EACjB,MAAM;EACN,IAAI;EACJ,MAAM,CAAC,IAAI;EACX,IAAI,CAAC,IAAI;EACT,YAAY;EACZ,SAAS,CAAC,IAAI;EACd,SAAS,CAAC,IAAI;;;yCAG2B,iBAAiB,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwB/D;CACA,CAAC,CAAC","sourcesContent":["import { FragmentShader, Shader } from '../shader.js';\nimport { DEPTH_SAMPLE_GRID } from '../depthQuery.js';\nimport common from './chunks/common.glsl.js';\nimport core from './chunks/rayTraceCore.glsl.js';\nimport materials from './chunks/materialBuffer.glsl.js';\nimport intersect from './chunks/intersect.glsl.js';\nimport uvProjection from './chunks/uvProjection.glsl.js';\nimport random from './chunks/random.glsl.js';\nimport rand from './chunks/rand.glsl.js';\n\nexport default new FragmentShader({\n name: 'depthQuery', outputs: ['depth'],\n defines: { DEPTH_QUERY_MODE: true },\n includes: [core, materials, intersect, random],\n uniforms: {\n depthArea: Shader.uniform('vec4'),\n viewProjectionInv: Shader.uniform('mat4'),\n viewInv: Shader.uniform('mat4')\n },\n main: /* glsl */ `\n${common}\n${rand}\n${random.main}\n${core.main}\n${uvProjection}\n${materials.main}\n${intersect.main}\n\nvoid main() {\n vec2 offset = floor(gl_FragCoord.xy) / ${DEPTH_SAMPLE_GRID - 1}.0 * 2.0 - 1.0;\n vec2 uv = depthArea.xy + depthArea.zw * offset * vec2(1.0, -1.0);\n out_depth = vec4(0.0);\n if (any(lessThan(uv, vec2(0.0))) || any(greaterThan(uv, vec2(1.0)))) return;\n vec4 origin = viewProjectionInv * vec4(uv * 2.0 - 1.0, -1.0, 1.0);\n vec4 target = viewProjectionInv * vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n Ray ray;\n initRay(ray, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * target.w));\n vec3 eye = viewInv[3].xyz;\n vec3 forward = -normalize(viewInv[2].xyz);\n SurfaceInteraction si;\n si.triangleIndex = -1;\n for (int layer = 0; layer < 32; layer++) {\n intersectScene(ray, si, false);\n if (!si.hit) return;\n OpenPbrResolvedMaterial material;\n getMaterial(material, si.materialIndex, si.uv, si.uv1, si.instanceIndex);\n if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {\n out_depth.r = max(dot(si.position - eye, forward), 0.0);\n return;\n }\n ray.o = si.position + ray.d * (EPS * 0.02);\n }\n}\n`\n});\n"]}
|
|
1
|
+
{"version":3,"file":"depthQuery.frag.js","sourceRoot":"","sources":["../../../src/renderer/glsl/depthQuery.frag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,IAAI,MAAM,+BAA+B,CAAC;AACjD,OAAO,SAAS,MAAM,iCAAiC,CAAC;AACxD,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAEzC,eAAe,IAAI,cAAc,CAAC;IAChC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IAC9C,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACjC,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KAChC;IACD,IAAI,EAAE,UAAU,CAAC;EACjB,MAAM;EACN,IAAI;EACJ,MAAM,CAAC,IAAI;EACX,IAAI,CAAC,IAAI;EACT,YAAY;EACZ,SAAS,CAAC,IAAI;EACd,SAAS,CAAC,IAAI;;;yCAG2B,iBAAiB,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwB/D;CACA,CAAC,CAAC","sourcesContent":["import { FragmentShader, Shader } from '../shader.js';\nimport { DEPTH_SAMPLE_GRID } from '../depthQuery.js';\nimport common from './chunks/common.glsl.js';\nimport core from './chunks/rayTraceCore.glsl.js';\nimport materials from './chunks/materialBuffer.glsl.js';\nimport intersect from './chunks/intersect.glsl.js';\nimport uvProjection from './chunks/uvProjection.glsl.js';\nimport random from './chunks/random.glsl.js';\nimport rand from './chunks/rand.glsl.js';\n\nexport default new FragmentShader({\n name: 'depthQuery', outputs: ['depth'],\n defines: { DEPTH_QUERY_MODE: true },\n includes: [core, materials, intersect, random],\n uniforms: {\n depthArea: Shader.uniform('vec4'),\n viewProjectionInv: Shader.uniform('mat4'),\n viewInv: Shader.uniform('mat4')\n },\n main: /* glsl */ `\n${common}\n${rand}\n${random.main}\n${core.main}\n${uvProjection}\n${materials.main}\n${intersect.main}\n\nvoid main() {\n vec2 offset = floor(gl_FragCoord.xy) / ${DEPTH_SAMPLE_GRID - 1}.0 * 2.0 - 1.0;\n vec2 uv = depthArea.xy + depthArea.zw * offset * vec2(1.0, -1.0);\n out_depth = vec4(0.0);\n if (any(lessThan(uv, vec2(0.0))) || any(greaterThan(uv, vec2(1.0)))) return;\n vec4 origin = viewProjectionInv * vec4(uv * 2.0 - 1.0, -1.0, 1.0);\n vec4 target = viewProjectionInv * vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n Ray ray;\n initRay(ray, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * target.w));\n vec3 eye = viewInv[3].xyz;\n vec3 forward = -normalize(viewInv[2].xyz);\n SurfaceInteraction si;\n si.triangleIndex = -1;\n for (int layer = 0; layer < 32; layer++) {\n intersectScene(ray, si, false);\n if (!si.hit) return;\n OpenPbrResolvedMaterial material;\n getMaterial(material, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);\n if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {\n out_depth.r = max(dot(si.position - eye, forward), 0.0);\n return;\n }\n ray.o = si.position + ray.d * (EPS * 0.02);\n }\n}\n`\n});\n"]}
|
|
@@ -16,22 +16,22 @@ const normalizeRayTraceOutput = new FragmentShader({
|
|
|
16
16
|
main: glsl `
|
|
17
17
|
void main() {
|
|
18
18
|
vec2 uv = lightScale * v_Texcoord;
|
|
19
|
-
vec4
|
|
20
|
-
float hit =
|
|
21
|
-
vec4
|
|
19
|
+
vec4 rV = sample_albedoTex(uv);
|
|
20
|
+
float hit = rV.a;
|
|
21
|
+
vec4 rZ = sample_normalTex(uv);
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
float
|
|
26
|
-
vec3 albedo =
|
|
27
|
-
vec3 normal =
|
|
25
|
+
float sr = max(rZ.a, 1.0);
|
|
26
|
+
vec3 albedo = rV.rgb / sr;
|
|
27
|
+
vec3 normal = rZ.rgb / sr;
|
|
28
28
|
vec4 shadowCatcher= sample_shadowCatcherTex(uv) / sampleCount;
|
|
29
|
-
vec4
|
|
29
|
+
vec4 sB = sample_colorTex(uv);
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
vec4 light = vec4(
|
|
34
|
+
vec4 light = vec4(sB.rgb / (hit > 0.0 ? hit : sampleCount), sB.a / sampleCount);
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
|