@meimu/mutracer 0.1.4 → 0.1.5
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 +1425 -1421
- package/docs/api.md +2 -1
- package/docs/materials.md +17 -26
- package/docs/threejs.md +5 -5
- package/docs/viewer.md +36 -3
- package/lib/oidn.d.ts +1 -1
- package/lib/oidnBundledWeights.cdn.d.ts +2 -2
- package/lib/renderer/WGPUFullQuadPass.js +3 -3
- package/lib/renderer/WGPUJNLMDenoiser.js +35 -35
- package/lib/renderer/WGPURayTraceOutput.js +4 -4
- package/lib/renderer/WGPURayTracePass.js +5 -3
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.js +7 -7
- package/lib/renderer/WebGLJNLMDenoiser.js +36 -36
- package/lib/renderer/WebGLRayTracePass.js +1 -0
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +8 -8
- package/lib/renderer/glsl/chunks/envMap.glsl.js +26 -26
- package/lib/renderer/glsl/chunks/intersect.glsl.js +141 -139
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +56 -55
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +144 -144
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/random.glsl.js +1 -1
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +14 -14
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +19 -19
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +46 -46
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +6 -6
- package/lib/renderer/glsl/chunks/sampling.glsl.js +33 -33
- package/lib/renderer/glsl/chunks/sobol.glsl.js +7 -7
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +1 -1
- package/lib/renderer/glsl/depthQuery.frag.js +2 -2
- package/lib/renderer/glsl/rayTrace.frag.js +67 -67
- package/lib/renderer/glsl/shadowCatcher.frag.js +3 -3
- package/lib/renderer/glsl/webglPipeline.frag.js +26 -26
- package/lib/renderer/scratchSampling.js +16 -16
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +14 -14
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +178 -178
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +24 -23
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +160 -160
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +12 -12
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +5 -5
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +44 -44
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +69 -69
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +33 -33
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +7 -7
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +1 -1
- package/lib/renderer/wgsl/compose.frag.wgsl.js +54 -54
- package/lib/renderer/wgsl/customDenoise.wgsl.js +6 -6
- package/lib/renderer/wgsl/depthQuery.wgsl.js +2 -2
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +5 -5
- package/lib/renderer/wgsl/rayTrace.compute.js +103 -103
- package/lib/scene/OpenPBRMaterial.d.ts +1 -1
- package/lib/scene/OpenPBRMaterial.js +1 -1
- package/lib/scene/OpenPBRMaterial.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
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.
|
|
4
4
|
// Shared primary-ray construction keeps beauty and catcher coverage aligned.
|
|
5
5
|
export default /* glsl */ `
|
|
6
|
-
Ray hC(vec2
|
|
7
|
-
vec4 origin = viewProjectionInv * vec4(
|
|
8
|
-
vec4 target = viewProjectionInv * vec4(
|
|
6
|
+
Ray hC(vec2 fH) {
|
|
7
|
+
vec4 origin = viewProjectionInv * vec4(fH * 2.0 - 1.0, -1.0, 1.0);
|
|
8
|
+
vec4 target = viewProjectionInv * vec4(fH * 2.0 - 1.0, 1.0, 1.0);
|
|
9
9
|
Ray cam;
|
|
10
10
|
iC(cam, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * target.w));
|
|
11
11
|
|
|
12
12
|
return cam;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
vec2
|
|
15
|
+
vec2 oK(vec2 p) {
|
|
16
16
|
p = 2.0 * p - 1.0;
|
|
17
17
|
bool greater = abs(p.x) > abs(p.y);
|
|
18
18
|
float r = greater ? p.x : p.y;
|
|
@@ -20,14 +20,14 @@ float theta = greater ? 0.25 * PI * p.y / p.x : PI * (0.5 - 0.25 * p.x / p.y);
|
|
|
20
20
|
return r * vec2(cos(theta), sin(theta));
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
Ray
|
|
23
|
+
Ray nM() {
|
|
24
24
|
Ray cam = hC(v_Texcoord + sa());
|
|
25
25
|
if (cameraApertureRadius > 0.0) {
|
|
26
26
|
|
|
27
27
|
vec3 eye = viewInv[3].xyz;
|
|
28
|
-
vec3
|
|
29
|
-
vec3 qy = eye + cam.d * (cameraFocusDistance / dot(cam.d,
|
|
30
|
-
vec2 rK = cameraApertureRadius *
|
|
28
|
+
vec3 oj = -normalize(viewInv[2].xyz);
|
|
29
|
+
vec3 qy = eye + cam.d * (cameraFocusDistance / dot(cam.d, oj));
|
|
30
|
+
vec2 rK = cameraApertureRadius * oK(fp(CAMERA_LENS));
|
|
31
31
|
vec3 origin = vec3(viewInv * vec4(rK, 0.0, 1.0));
|
|
32
32
|
iC(cam, origin, normalize(qy - origin));
|
|
33
33
|
}
|
|
@@ -15,14 +15,14 @@ export default createShaderMixin({
|
|
|
15
15
|
groundedBackgroundCenter: Shader.uniform('vec2')
|
|
16
16
|
},
|
|
17
17
|
main: glsl `
|
|
18
|
-
vec2 eL(vec3
|
|
19
|
-
float phi = mod(atan(-
|
|
20
|
-
float theta = acos(clamp(
|
|
18
|
+
vec2 eL(vec3 gh) {
|
|
19
|
+
float phi = mod(atan(-gh.z, -gh.x), TWOPI);
|
|
20
|
+
float theta = acos(clamp(gh.y, -1.0, 1.0));
|
|
21
21
|
return vec2(phi * 0.5 * INVPI, theta * INVPI);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
vec2 cY(vec3
|
|
25
|
-
return eL(transpose(environmentRotation) *
|
|
24
|
+
vec2 cY(vec3 mP) {
|
|
25
|
+
return eL(transpose(environmentRotation) * mP);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
float qB(float u, out int vOffset, out float pdf) {
|
|
@@ -65,25 +65,25 @@ left = mid + 1;
|
|
|
65
65
|
right = mid;
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
int
|
|
68
|
+
int oR = left - 1;
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
|
|
72
|
-
vec2 s0 = texelFetch(envMapDistribution, ivec2(1 +
|
|
73
|
-
vec2 s1 = texelFetch(envMapDistribution, ivec2(1 +
|
|
72
|
+
vec2 s0 = texelFetch(envMapDistribution, ivec2(1 + oR, vOffset), 0).xy;
|
|
73
|
+
vec2 s1 = texelFetch(envMapDistribution, ivec2(1 + oR + 1, vOffset), 0).xy;
|
|
74
74
|
|
|
75
75
|
pdf = s0.y;
|
|
76
76
|
|
|
77
|
-
return (float(
|
|
77
|
+
return (float(oR) + (u - s0.x) / (s1.x - s0.x)) / float(size.x);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
|
|
81
|
-
vec3
|
|
82
|
-
vec2
|
|
81
|
+
vec3 oL(vec2 random, out vec2 uv, out float pdf) {
|
|
82
|
+
vec2 he;
|
|
83
83
|
int vOffset;
|
|
84
84
|
|
|
85
|
-
uv.y = qB(random.x, vOffset,
|
|
86
|
-
uv.x = qA(random.y, vOffset,
|
|
85
|
+
uv.y = qB(random.x, vOffset, he.y);
|
|
86
|
+
uv.x = qA(random.y, vOffset, he.x);
|
|
87
87
|
|
|
88
88
|
float phi = uv.x * TWOPI;
|
|
89
89
|
float theta = uv.y * PI;
|
|
@@ -94,7 +94,7 @@ float uw = sin(phi);
|
|
|
94
94
|
|
|
95
95
|
vec3 dir = vec3(-sinTheta * ul, cc, -sinTheta * uw);
|
|
96
96
|
|
|
97
|
-
pdf =
|
|
97
|
+
pdf = he.x * he.y * INVPI2 / (2.0 * sinTheta);
|
|
98
98
|
|
|
99
99
|
return environmentRotation * dir;
|
|
100
100
|
}
|
|
@@ -113,24 +113,24 @@ return sL * sM * INVPI2 / (2.0 * sinTheta);
|
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
float dq(vec3 sN, float height, float radius) {
|
|
116
|
-
float
|
|
117
|
-
if (
|
|
116
|
+
float fR = length(sN);
|
|
117
|
+
if (fR < 0.00001) {
|
|
118
118
|
return -radius;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
float iG = radius * sN.y /
|
|
121
|
+
float iG = radius * sN.y / fR;
|
|
122
122
|
float iq = -1.5 * height;
|
|
123
123
|
float ev;
|
|
124
124
|
if (iG >= 0.0) {
|
|
125
125
|
ev = radius;
|
|
126
126
|
} else if (iG < iq) {
|
|
127
|
-
ev = -height *
|
|
127
|
+
ev = -height * fR / sN.y;
|
|
128
128
|
} else {
|
|
129
129
|
float dW = 1.0
|
|
130
130
|
- iG * iG / (3.0 * iq * iq);
|
|
131
131
|
ev = radius * dW;
|
|
132
132
|
}
|
|
133
|
-
return
|
|
133
|
+
return fR - ev;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
vec3 eT(vec3 origin, vec3 d) {
|
|
@@ -156,18 +156,18 @@ if (
|
|
|
156
156
|
cC > 0.0
|
|
157
157
|
&& dq(bB, height, radius) <= 0.0
|
|
158
158
|
) {
|
|
159
|
-
vec3
|
|
160
|
-
if (
|
|
161
|
-
return normalize(
|
|
159
|
+
vec3 nO = bB + bY * cC;
|
|
160
|
+
if (nO.y >= 0.0) {
|
|
161
|
+
return normalize(nO);
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
if (bY.y < -0.00001 && radius > 1.5 * height) {
|
|
165
165
|
float hT = (-height - bB.y) / bY.y;
|
|
166
|
-
vec3
|
|
167
|
-
float
|
|
166
|
+
vec3 nE = bB + bY * hT;
|
|
167
|
+
float om = (2.0 / 3.0)
|
|
168
168
|
* sqrt(radius * radius - 2.25 * height * height);
|
|
169
|
-
if (hT > 0.0 && length(
|
|
170
|
-
return normalize(
|
|
169
|
+
if (hT > 0.0 && length(nE.xz) <= om) {
|
|
170
|
+
return normalize(nE);
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
|