@meimu/mutracer 0.1.2 → 0.1.3
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 +3429 -3390
- package/lib/oidn.d.ts +1 -1
- package/lib/oidnBundledWeights.cdn.d.ts +2 -2
- package/lib/renderer/WGPUBloomPass.js +18 -18
- package/lib/renderer/WGPUFullQuadPass.js +3 -3
- package/lib/renderer/WGPUJNLMDenoiser.js +62 -62
- package/lib/renderer/WGPURayTraceOutput.js +14 -12
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
- package/lib/renderer/WGPURayTracePass.js +1 -1
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.js +20 -18
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.js +61 -61
- package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -9
- package/lib/renderer/glsl/chunks/envMap.glsl.js +45 -45
- package/lib/renderer/glsl/chunks/intersect.glsl.js +262 -262
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +111 -111
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +436 -436
- 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 +32 -32
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +54 -54
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +71 -71
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/sampling.glsl.js +64 -64
- package/lib/renderer/glsl/chunks/sobol.glsl.js +49 -49
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +5 -5
- package/lib/renderer/glsl/depthQuery.frag.js +2 -2
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
- package/lib/renderer/glsl/rayTrace.frag.js +128 -128
- package/lib/renderer/glsl/shadowCatcher.frag.js +12 -12
- package/lib/renderer/glsl/webglPipeline.frag.js +49 -49
- package/lib/renderer/lightsUtil.js +1 -1
- package/lib/renderer/lightsUtil.js.map +1 -1
- package/lib/renderer/scratchSampling.js +6 -6
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +29 -29
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +368 -368
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +5 -5
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +51 -51
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +453 -453
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +116 -116
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +13 -13
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +94 -94
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +119 -119
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +5 -5
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +62 -62
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +3 -3
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +2 -2
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +53 -53
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +5 -5
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -2
- package/lib/renderer/wgsl/compose.frag.wgsl.js +120 -92
- package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
- package/lib/renderer/wgsl/depthQuery.wgsl.js +3 -3
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
- package/lib/renderer/wgsl/rayTrace.compute.js +220 -211
- package/lib/renderer/wgsl/rayTrace.compute.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 +5 -4
|
@@ -1,56 +1,56 @@
|
|
|
1
1
|
const displacementCommon = /*wgsl*/ `
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
struct
|
|
4
|
+
struct jx {
|
|
5
5
|
barycentric: vec3f,
|
|
6
6
|
t: f32,
|
|
7
7
|
normal: vec3f,
|
|
8
8
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
fn
|
|
11
|
+
fn uQ(
|
|
12
12
|
uu: f32,
|
|
13
|
-
|
|
13
|
+
tQ: vec3f, tR: vec3f,
|
|
14
14
|
eAC: vec3f, eBD: vec3f,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
iJ: vec3f,
|
|
16
|
+
pP: f32,
|
|
17
|
+
pR: ptr<function, f32>
|
|
18
18
|
) -> bool {
|
|
19
19
|
if (uu >= 0.0 && uu <= 1.0) {
|
|
20
|
-
let pAB = mix(
|
|
20
|
+
let pAB = mix(tQ, tR, uu);
|
|
21
21
|
let pCD = mix(eAC, eBD, uu);
|
|
22
|
-
var n = cross(
|
|
23
|
-
let
|
|
22
|
+
var n = cross(iJ, pCD);
|
|
23
|
+
let vq = 1.0 / dot(n, n);
|
|
24
24
|
n = cross(n, pAB);
|
|
25
|
-
let tt = dot(n, pCD) *
|
|
26
|
-
let vv = dot(n,
|
|
27
|
-
if (vv >= 0.0 && vv <= 1.0 && tt >
|
|
28
|
-
*
|
|
25
|
+
let tt = dot(n, pCD) * vq;
|
|
26
|
+
let vv = dot(n, iJ) * vq;
|
|
27
|
+
if (vv >= 0.0 && vv <= 1.0 && tt > pP && tt < *pR) {
|
|
28
|
+
*pR = tt;
|
|
29
29
|
return true;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
return false;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
fn
|
|
36
|
-
|
|
35
|
+
fn he(
|
|
36
|
+
pH: vec3f, iJ: vec3f, pP: f32, tf: f32,
|
|
37
37
|
pA: vec3f, pB: vec3f, pC: vec3f, pD: vec3f,
|
|
38
|
-
|
|
38
|
+
pR: ptr<function, f32>
|
|
39
39
|
) -> bool {
|
|
40
40
|
let eAB = pB - pA;
|
|
41
41
|
let eAC = pC - pA;
|
|
42
42
|
let eBD = pD - pB;
|
|
43
43
|
let eCD = pD - pC;
|
|
44
|
-
let
|
|
45
|
-
let
|
|
44
|
+
let tQ = pA - pH;
|
|
45
|
+
let tR = pB - pH;
|
|
46
46
|
|
|
47
47
|
var u1: f32;
|
|
48
48
|
var u2: f32;
|
|
49
49
|
{
|
|
50
50
|
let qN = cross(eAB, -eCD);
|
|
51
|
-
let a = dot(qN,
|
|
52
|
-
var b = dot(cross(
|
|
53
|
-
let c = dot(cross(
|
|
51
|
+
let a = dot(qN, iJ);
|
|
52
|
+
var b = dot(cross(tR, iJ), eBD);
|
|
53
|
+
let c = dot(cross(tQ, iJ), eAC);
|
|
54
54
|
b -= a + c;
|
|
55
55
|
|
|
56
56
|
let det = b * b - 4.0 * a * c;
|
|
@@ -62,19 +62,19 @@ if (a == 0.0) {
|
|
|
62
62
|
u1 = -c / b;
|
|
63
63
|
u2 = -1.0;
|
|
64
64
|
} else {
|
|
65
|
-
let
|
|
66
|
-
let
|
|
67
|
-
u1 =
|
|
68
|
-
u2 = c /
|
|
65
|
+
let vJ = sqrt(det);
|
|
66
|
+
let wC = -0.5 * (b + sign(b) * vJ);
|
|
67
|
+
u1 = wC / a;
|
|
68
|
+
u2 = c / wC;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
*
|
|
72
|
+
*pR = tf;
|
|
73
73
|
|
|
74
74
|
var hit = false;
|
|
75
75
|
|
|
76
|
-
hit =
|
|
77
|
-
|
|
76
|
+
hit = uQ(u1, tQ, tR, eAC, eBD, iJ, pP, pR) ||
|
|
77
|
+
uQ(u2, tQ, tR, eAC, eBD, iJ, pP, pR);
|
|
78
78
|
if (!hit) {
|
|
79
79
|
return false;
|
|
80
80
|
}
|
|
@@ -82,8 +82,8 @@ return false;
|
|
|
82
82
|
return true;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
fn
|
|
86
|
-
|
|
85
|
+
fn sl(
|
|
86
|
+
pH: vec3f, iJ: vec3f, pP: f32, tf: f32,
|
|
87
87
|
pA: vec3f, pB: vec3f, pC: vec3f,
|
|
88
88
|
pD: vec3f, pE: vec3f, pF: vec3f,
|
|
89
89
|
|
|
@@ -93,50 +93,50 @@ bS: ptr<function, f32>
|
|
|
93
93
|
*bT = INF;
|
|
94
94
|
*bS = -INF;
|
|
95
95
|
|
|
96
|
-
let
|
|
97
|
-
let
|
|
96
|
+
let vW = maxDimension(abs(iJ));
|
|
97
|
+
let gL = mj(iJ, vW);
|
|
98
98
|
var tt: f32;
|
|
99
99
|
|
|
100
100
|
tt = fI(
|
|
101
|
-
|
|
102
|
-
fu(pC, pB, pA),
|
|
101
|
+
pH, iJ,
|
|
102
|
+
fu(pC, pB, pA), vW, gL, INF
|
|
103
103
|
).t;
|
|
104
104
|
if (tt > 0.0) {
|
|
105
105
|
*bT = min(*bT, tt);
|
|
106
106
|
*bS = max(*bS, tt);
|
|
107
107
|
}
|
|
108
108
|
tt = fI(
|
|
109
|
-
|
|
110
|
-
fu(pD, pE, pF),
|
|
109
|
+
pH, iJ,
|
|
110
|
+
fu(pD, pE, pF), vW, gL, INF
|
|
111
111
|
).t;
|
|
112
112
|
if (tt > 0.0) {
|
|
113
113
|
*bT = min(*bT, tt);
|
|
114
114
|
*bS = max(*bS, tt);
|
|
115
115
|
}
|
|
116
|
-
if (
|
|
117
|
-
|
|
116
|
+
if (he(
|
|
117
|
+
pH, iJ, -INF, INF,
|
|
118
118
|
pA, pB, pD, pE,
|
|
119
119
|
&tt)) {
|
|
120
120
|
*bT = min(*bT, tt);
|
|
121
121
|
*bS = max(*bS, tt);
|
|
122
122
|
}
|
|
123
|
-
if (
|
|
124
|
-
|
|
123
|
+
if (he(
|
|
124
|
+
pH, iJ, -INF, INF,
|
|
125
125
|
pB, pC, pE, pF,
|
|
126
126
|
&tt)) {
|
|
127
127
|
*bT = min(*bT, tt);
|
|
128
128
|
*bS = max(*bS, tt);
|
|
129
129
|
}
|
|
130
|
-
if (
|
|
131
|
-
|
|
130
|
+
if (he(
|
|
131
|
+
pH, iJ, -INF, INF,
|
|
132
132
|
pC, pA, pF, pD,
|
|
133
133
|
&tt)) {
|
|
134
134
|
*bT = min(*bT, tt);
|
|
135
135
|
*bS = max(*bS, tt);
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
*bT = max(*bT,
|
|
139
|
-
*bS = min(*bS,
|
|
138
|
+
*bT = max(*bT, pP);
|
|
139
|
+
*bS = min(*bS, tf);
|
|
140
140
|
|
|
141
141
|
return *bT <= *bS && *bS > 0.0;
|
|
142
142
|
}
|
|
@@ -145,7 +145,7 @@ export default /* wgsl */ `
|
|
|
145
145
|
|
|
146
146
|
${displacementCommon}
|
|
147
147
|
|
|
148
|
-
fn
|
|
148
|
+
fn lG(p: vec3f, p0: vec3f, p1: vec3f, p2: vec3f) -> vec3f {
|
|
149
149
|
let v0 = p1 - p0;
|
|
150
150
|
let v1 = p2 - p0;
|
|
151
151
|
let v2 = p - p0;
|
|
@@ -156,72 +156,72 @@ let d11 = dot(v1, v1);
|
|
|
156
156
|
let d20 = dot(v2, v0);
|
|
157
157
|
let d21 = dot(v2, v1);
|
|
158
158
|
|
|
159
|
-
let
|
|
160
|
-
let v = clamp((d11 * d20 - d01 * d21) *
|
|
161
|
-
let w = clamp((d00 * d21 - d01 * d20) *
|
|
159
|
+
let tM = 1.0 / (d00 * d11 - d01 * d01);
|
|
160
|
+
let v = clamp((d11 * d20 - d01 * d21) * tM, 0.0, 1.0);
|
|
161
|
+
let w = clamp((d00 * d21 - d01 * d20) * tM, 0.0, 1.0);
|
|
162
162
|
let u = 1.0 - v - w;
|
|
163
163
|
|
|
164
164
|
return vec3f(u, v, w);
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
fn
|
|
167
|
+
fn sO(uv: vec2f) -> vec2f {
|
|
168
168
|
return (uv % 1.0 + 1.0) % 1.0;
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
|
|
172
|
-
fn
|
|
173
|
-
|
|
172
|
+
fn oT(
|
|
173
|
+
qj: vec3f, qE: vec3f, wJ: f32,
|
|
174
174
|
_pA: vec3f, _pB: vec3f, _pC: vec3f,
|
|
175
175
|
_nA: vec3f, _nB: vec3f, _nC: vec3f,
|
|
176
|
-
|
|
176
|
+
vy: vec2f, vA: vec2f, vB: vec2f,
|
|
177
177
|
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
jJ: i32,
|
|
179
|
+
vx: vec2f,
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
wc: f32, wb: f32,
|
|
182
182
|
hScale: f32,
|
|
183
|
-
|
|
184
|
-
|
|
183
|
+
uC: f32,
|
|
184
|
+
tY: f32,
|
|
185
185
|
uvProjection: i32,
|
|
186
186
|
uvScale: vec2f,
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
) ->
|
|
187
|
+
vO: bool,
|
|
188
|
+
qU: bool
|
|
189
|
+
) -> jx {
|
|
190
190
|
|
|
191
191
|
|
|
192
192
|
|
|
193
|
-
let DT = select(max(abs(hScale) / 32.0, 1e-12),
|
|
194
|
-
let dt = DT / length(
|
|
193
|
+
let DT = select(max(abs(hScale) / 32.0, 1e-12), tY, tY > 0.0);
|
|
194
|
+
let dt = DT / length(qE);
|
|
195
195
|
let dbx = 0.001;
|
|
196
196
|
let dby = 0.001;
|
|
197
197
|
|
|
198
|
-
var result:
|
|
198
|
+
var result: jx;
|
|
199
199
|
result.t = INF;
|
|
200
200
|
|
|
201
201
|
var bT = INF;
|
|
202
202
|
var bS = -INF;
|
|
203
203
|
|
|
204
|
-
let
|
|
205
|
-
let
|
|
204
|
+
let qS = sign(hScale);
|
|
205
|
+
let uI = abs(hScale);
|
|
206
206
|
|
|
207
|
-
let
|
|
207
|
+
let sX = qS * normalize(cross(_pB - _pA, _pC - _pA));
|
|
208
208
|
|
|
209
209
|
|
|
210
|
-
let dA = dot(_nA,
|
|
211
|
-
let dB = dot(_nB,
|
|
212
|
-
let dC = dot(_nC,
|
|
210
|
+
let dA = dot(_nA, sX);
|
|
211
|
+
let dB = dot(_nB, sX);
|
|
212
|
+
let dC = dot(_nC, sX);
|
|
213
213
|
|
|
214
|
-
var minH =
|
|
215
|
-
var maxH =
|
|
214
|
+
var minH = wc * hScale * min(min(dA, dB), dC);
|
|
215
|
+
var maxH = wb * hScale * max(max(dA, dB), dC);
|
|
216
216
|
|
|
217
217
|
|
|
218
218
|
|
|
219
219
|
|
|
220
|
-
let
|
|
220
|
+
let tS = abs(maxH) - abs(minH);
|
|
221
221
|
|
|
222
222
|
|
|
223
223
|
minH = sign(minH) * max(abs(minH) - DT * 2.0, 0.0);
|
|
224
|
-
if (
|
|
224
|
+
if (tS < DT * 2.0) {
|
|
225
225
|
maxH = sign(maxH) * min(abs(maxH) + DT * 2.0, abs(hScale));
|
|
226
226
|
}
|
|
227
227
|
|
|
@@ -233,8 +233,8 @@ let pD = _pA + _nA * maxH / dA;
|
|
|
233
233
|
let pE = _pB + _nB * maxH / dB;
|
|
234
234
|
let pF = _pC + _nC * maxH / dC;
|
|
235
235
|
|
|
236
|
-
if (!
|
|
237
|
-
|
|
236
|
+
if (!sl(
|
|
237
|
+
qj, qE, 0.0, INF,
|
|
238
238
|
pA, pB, pC,
|
|
239
239
|
pD, pE, pF,
|
|
240
240
|
|
|
@@ -243,59 +243,59 @@ pD, pE, pF,
|
|
|
243
243
|
return result;
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
-
var
|
|
246
|
+
var wE = false;
|
|
247
247
|
|
|
248
248
|
if (bS == bT) {
|
|
249
249
|
bT = 0.0;
|
|
250
250
|
}
|
|
251
251
|
|
|
252
252
|
var t = bT + dt * eo(2u);
|
|
253
|
-
var s =
|
|
254
|
-
var
|
|
255
|
-
var
|
|
253
|
+
var s = qj + qE * t;
|
|
254
|
+
var tL = dot(s - _pA, sX);
|
|
255
|
+
var uW = select(0.0, INF, qS < 0.0);
|
|
256
256
|
|
|
257
|
-
var c0 = _pA + _nA *
|
|
258
|
-
var c1 = _pB + _nB *
|
|
259
|
-
var c2 = _pC + _nC *
|
|
257
|
+
var c0 = _pA + _nA * tL / dA;
|
|
258
|
+
var c1 = _pB + _nB * tL / dB;
|
|
259
|
+
var c2 = _pC + _nC * tL / dC;
|
|
260
260
|
|
|
261
|
-
var
|
|
261
|
+
var tv: vec3f;
|
|
262
262
|
|
|
263
|
-
|
|
263
|
+
tL = abs(tL);
|
|
264
264
|
|
|
265
|
-
var
|
|
266
|
-
var
|
|
265
|
+
var qR = tL - uW;
|
|
266
|
+
var pQ = qR;
|
|
267
267
|
var step = 0;
|
|
268
268
|
|
|
269
269
|
while (true) {
|
|
270
270
|
|
|
271
|
-
let b =
|
|
271
|
+
let b = lG(s, c0, c1, c2);
|
|
272
272
|
|
|
273
|
-
|
|
273
|
+
tv = _pA * b.x + _pB * b.y + _pC * b.z;
|
|
274
274
|
|
|
275
|
-
|
|
275
|
+
tL = distance(tv, s);
|
|
276
276
|
|
|
277
277
|
var uv: vec2f;
|
|
278
278
|
if (uvProjection > 0) {
|
|
279
279
|
let n = normalize(_nA * b.x + _nB * b.y + _nC * b.z);
|
|
280
|
-
uv =
|
|
280
|
+
uv = sO(gC(uvProjection, tv - (_nA * b.x + _nB * b.y + _nC * b.z) * uC, n) * uvScale);
|
|
281
281
|
}
|
|
282
282
|
else {
|
|
283
|
-
uv =
|
|
283
|
+
uv = sO(vy * b.x + vA * b.y + vB * b.z);
|
|
284
284
|
}
|
|
285
|
-
let h = sampleMap(
|
|
285
|
+
let h = sampleMap(jJ, uv).x;
|
|
286
286
|
|
|
287
|
-
|
|
287
|
+
uW = max(uI * h, DT);
|
|
288
288
|
|
|
289
289
|
|
|
290
|
-
let dh = dot(
|
|
290
|
+
let dh = dot(sX, s - c0);
|
|
291
291
|
c0 = c0 + _nA * dh / dA;
|
|
292
292
|
c1 = c1 + _nB * dh / dB;
|
|
293
293
|
c2 = c2 + _nC * dh / dC;
|
|
294
294
|
|
|
295
|
-
|
|
296
|
-
|
|
295
|
+
pQ = qR;
|
|
296
|
+
qR = tL - uW;
|
|
297
297
|
|
|
298
|
-
if (!(select(
|
|
298
|
+
if (!(select(qR * qS, qR * pQ, qU) > 0.0
|
|
299
299
|
&& t < bS + dt)
|
|
300
300
|
|
|
301
301
|
&& step > 0) {
|
|
@@ -304,15 +304,15 @@ break;
|
|
|
304
304
|
|
|
305
305
|
step++;
|
|
306
306
|
t = t + dt;
|
|
307
|
-
s = s +
|
|
307
|
+
s = s + qE * dt;
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
-
if (select(
|
|
311
|
-
let dtt = dt * (abs(
|
|
310
|
+
if (select(qR * qS, qR * pQ, qU) <= 0.0) {
|
|
311
|
+
let dtt = dt * (abs(qR) / (abs(pQ) + abs(qR) + EPS));
|
|
312
312
|
t = t - dtt;
|
|
313
313
|
|
|
314
|
-
let
|
|
315
|
-
let b =
|
|
314
|
+
let wG = qj + qE * t;
|
|
315
|
+
let b = lG(wG, c0, c1, c2);
|
|
316
316
|
|
|
317
317
|
let N = normalize(_nA * b.x + _nB * b.y + _nC * b.z);
|
|
318
318
|
|
|
@@ -320,33 +320,33 @@ let p_a = _pA * b.x + _pB * b.y + _pC * b.z;
|
|
|
320
320
|
let p_b = _pA * (b.x + dbx) + _pB * b.y + _pC * (b.z - dbx);
|
|
321
321
|
let p_c = _pA * b.x + _pB * (b.y + dby) + _pC * (b.z - dby);
|
|
322
322
|
|
|
323
|
-
var
|
|
324
|
-
var
|
|
325
|
-
var
|
|
323
|
+
var vY: vec2f;
|
|
324
|
+
var vZ: vec2f;
|
|
325
|
+
var wa: vec2f;
|
|
326
326
|
|
|
327
327
|
if (uvProjection > 0) {
|
|
328
328
|
let NA = normalize(_nA * b.x + _nB * b.y + _nC * b.z);
|
|
329
329
|
let NB = normalize(_nA * (b.x + dbx) + _nB * b.y + _nC * (b.z - dbx));
|
|
330
330
|
let NC = normalize(_nA * b.x + _nB * (b.y + dby) + _nC * (b.z - dby));
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
331
|
+
vY = gC(uvProjection, p_a - (_nA * b.x + _nB * b.y + _nC * b.z) * uC, NA) * uvScale;
|
|
332
|
+
vZ = gC(uvProjection, p_b - (_nA * (b.x + dbx) + _nB * b.y + _nC * (b.z - dbx)) * uC, NB) * uvScale;
|
|
333
|
+
wa = gC(uvProjection, p_c - (_nA * b.x + _nB * (b.y + dby) + _nC * (b.z - dby)) * uC, NC) * uvScale;
|
|
334
334
|
}
|
|
335
335
|
else {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
336
|
+
vY = vy * b.x + vA * b.y + vB * b.z;
|
|
337
|
+
vZ = vy * (b.x + dbx) + vA * b.y + vB * (b.z - dbx);
|
|
338
|
+
wa = vy * b.x + vA * (b.y + dby) + vB * (b.z - dby);
|
|
339
339
|
}
|
|
340
340
|
|
|
341
|
-
let s_a = p_a +
|
|
342
|
-
let s_b = p_b +
|
|
343
|
-
let s_c = p_c +
|
|
341
|
+
let s_a = p_a + qS * N * sampleMap(jJ, sO(vY)).x * hScale;
|
|
342
|
+
let s_b = p_b + qS * N * sampleMap(jJ, sO(vZ)).x * hScale;
|
|
343
|
+
let s_c = p_c + qS * N * sampleMap(jJ, sO(wa)).x * hScale;
|
|
344
344
|
|
|
345
|
-
let N_s = -
|
|
345
|
+
let N_s = -qS * normalize(cross(s_c - s_a, s_b - s_a));
|
|
346
346
|
|
|
347
347
|
result.t = t;
|
|
348
348
|
result.barycentric = b;
|
|
349
|
-
result.normal = normalize(N_s -
|
|
349
|
+
result.normal = normalize(N_s - sX + qS * N);
|
|
350
350
|
}
|
|
351
351
|
|
|
352
352
|
return result;
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
export default /* wgsl */ `
|
|
5
5
|
var<private> s0: vec4u;
|
|
6
6
|
|
|
7
|
-
fn
|
|
7
|
+
fn ka(p: vec2u, frame: i32) {
|
|
8
8
|
|
|
9
9
|
s0 = vec4u(p, u32(frame), u32(p.x) + u32(p.y));
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
fn
|
|
13
|
+
fn vo() {
|
|
14
14
|
s0 = s0 * 1664525u + 1013904223u;
|
|
15
15
|
s0.x += s0.y*s0.w; s0.y += s0.z*s0.x; s0.z += s0.x*s0.y; s0.w += s0.y*s0.z;
|
|
16
16
|
s0 = s0 ^ (s0>>vec4(16u));
|
|
@@ -18,7 +18,7 @@ s0.x += s0.y*s0.w; s0.y += s0.z*s0.x; s0.z += s0.x*s0.y; s0.w += s0.y*s0.z;
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
fn rand() -> f32 {
|
|
21
|
-
|
|
21
|
+
vo(); return f32(s0.x)/f32(0xffffffffu);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
`;
|
|
@@ -202,7 +202,7 @@ secondaryUv1: vec2f,
|
|
|
202
202
|
secondaryUv2: vec2f,
|
|
203
203
|
};
|
|
204
204
|
|
|
205
|
-
struct
|
|
205
|
+
struct oV {
|
|
206
206
|
probability: f32,
|
|
207
207
|
aliasIndex: i32,
|
|
208
208
|
sourceType: i32,
|
|
@@ -270,14 +270,14 @@ sampleSequenceOffset: u32,
|
|
|
270
270
|
@group(1) @binding(9) var openPbrEnergyLut: texture_2d<f32>;
|
|
271
271
|
@group(1) @binding(10) var adaptiveSampleTargets: texture_2d<f32>;
|
|
272
272
|
|
|
273
|
-
fn cL(dV: i32,
|
|
274
|
-
let
|
|
273
|
+
fn cL(dV: i32, lh: i32) -> f32 {
|
|
274
|
+
let ih = dV + lh / 4;
|
|
275
275
|
let width = rtUniform.lightSamplingTextureWidth;
|
|
276
|
-
let packed = textureLoad(lightSamplingData, vec2i(
|
|
277
|
-
return packed[
|
|
276
|
+
let packed = textureLoad(lightSamplingData, vec2i(ih % width, ih / width), 0);
|
|
277
|
+
return packed[lh % 4];
|
|
278
278
|
}
|
|
279
279
|
|
|
280
|
-
fn
|
|
280
|
+
fn kI(dV: i32, uv: vec2f) -> f32 {
|
|
281
281
|
if (dV < 0) { return 1.0; }
|
|
282
282
|
let fM = fract(uv) * 128.0 - vec2f(0.5);
|
|
283
283
|
let x0 = i32(floor(fM.x));
|
|
@@ -298,16 +298,16 @@ return mix(mix(a, b, fx), mix(c, d, fx), fy);
|
|
|
298
298
|
fn bL(light: Light, dJ: vec3f) -> f32 {
|
|
299
299
|
let axis = normalize(light.u);
|
|
300
300
|
let cc = dot(axis, dJ);
|
|
301
|
-
var
|
|
301
|
+
var tI = select(0.0, 1.0, cc >= light.v.x);
|
|
302
302
|
if (light.v.y > 1e-6) {
|
|
303
|
-
|
|
303
|
+
tI = smoothstep(light.v.x, light.v.x + light.v.y, cc);
|
|
304
304
|
}
|
|
305
|
-
if (
|
|
306
|
-
let
|
|
307
|
-
let
|
|
305
|
+
if (tI <= 0.0 || light.textureIndex < 0.0) { return tI; }
|
|
306
|
+
let uc = light.iesReference;
|
|
307
|
+
let vu = cross(axis, uc);
|
|
308
308
|
let vertical = acos(clamp(cc, -1.0, 1.0));
|
|
309
|
-
let horizontal = atan2(dot(dJ,
|
|
310
|
-
return
|
|
309
|
+
let horizontal = atan2(dot(dJ, vu), dot(dJ, uc));
|
|
310
|
+
return tI * kI(i32(light.textureIndex), vec2f(vertical / PI, horizontal / TWOPI + 0.5));
|
|
311
311
|
}
|
|
312
312
|
|
|
313
313
|
|