@meimu/mutracer 0.2.0 → 0.3.0
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/README.md +3 -0
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +8949 -7915
- package/docs/api.md +42 -21
- package/docs/caustics.md +80 -0
- package/docs/materials.md +5 -4
- package/docs/progressive-rendering.md +50 -9
- package/docs/technical/continuous-spectrum.md +93 -0
- package/docs/updates.md +3 -1
- package/docs/viewer-checklist.md +65 -0
- package/docs/viewer.md +7 -5
- package/lib/Display.js +1 -1
- package/lib/Display.js.map +1 -1
- package/lib/Engine.d.ts +2 -0
- package/lib/Engine.js +47 -12
- package/lib/Engine.js.map +1 -1
- package/lib/Render.d.ts +61 -13
- package/lib/Render.js +169 -19
- package/lib/Render.js.map +1 -1
- package/lib/RenderLoop.d.ts +7 -3
- package/lib/RenderLoop.js +68 -44
- package/lib/RenderLoop.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/GPUTraceQueue.d.ts +2 -1
- package/lib/renderer/GPUTraceQueue.js +3 -1
- package/lib/renderer/GPUTraceQueue.js.map +1 -1
- package/lib/renderer/RenderingPipeline.d.ts +4 -0
- package/lib/renderer/RenderingPipeline.js.map +1 -1
- package/lib/renderer/WGPUCausticLightPass.d.ts +48 -0
- package/lib/renderer/WGPUCausticLightPass.js +217 -0
- package/lib/renderer/WGPUCausticLightPass.js.map +1 -0
- package/lib/renderer/WGPUEnvMapDistribution.js +18 -18
- package/lib/renderer/WGPUFullQuadPass.js +3 -3
- package/lib/renderer/WGPUPhotonMap.d.ts +37 -0
- package/lib/renderer/WGPUPhotonMap.js +191 -0
- package/lib/renderer/WGPUPhotonMap.js.map +1 -0
- package/lib/renderer/WGPURayTraceOutput.d.ts +13 -1
- package/lib/renderer/WGPURayTraceOutput.js +122 -28
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
- package/lib/renderer/WGPURayTracePass.d.ts +48 -17
- package/lib/renderer/WGPURayTracePass.js +538 -340
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.js +83 -47
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLFullQuadPass.d.ts +2 -1
- package/lib/renderer/WebGLFullQuadPass.js +4 -0
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.js +66 -66
- package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
- package/lib/renderer/WebGLRayTracePass.d.ts +6 -1
- package/lib/renderer/WebGLRayTracePass.js +43 -6
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/WebGLRenderingPipeline.js +10 -14
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLSkyBaker.js +60 -60
- package/lib/renderer/accumulationTarget.d.ts +2 -1
- package/lib/renderer/accumulationTarget.js.map +1 -1
- package/lib/renderer/causticDiagnostics.d.ts +31 -0
- package/lib/renderer/causticDiagnostics.js +5 -0
- package/lib/renderer/causticDiagnostics.js.map +1 -0
- package/lib/renderer/causticEmission.d.ts +10 -0
- package/lib/renderer/causticEmission.js +40 -0
- package/lib/renderer/causticEmission.js.map +1 -0
- package/lib/renderer/causticUniform.d.ts +12 -0
- package/lib/renderer/causticUniform.js +22 -0
- package/lib/renderer/causticUniform.js.map +1 -0
- package/lib/renderer/caustics.d.ts +16 -0
- package/lib/renderer/caustics.js +93 -0
- package/lib/renderer/caustics.js.map +1 -0
- package/lib/renderer/glsl/aovDisplay.frag.js +5 -5
- package/lib/renderer/glsl/aovReflectance.glsl.js +53 -53
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +1 -1
- package/lib/renderer/glsl/aovTrace.frag.js +33 -33
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -9
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +35 -0
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js +73 -73
- package/lib/renderer/glsl/chunks/intersect.glsl.js +426 -428
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +156 -153
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +771 -771
- package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +68 -63
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +94 -76
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +140 -117
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +14 -14
- package/lib/renderer/glsl/chunks/sampling.glsl.js +89 -92
- package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
- 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 +2 -2
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +10 -10
- package/lib/renderer/glsl/rayTrace.frag.d.ts +1 -1
- package/lib/renderer/glsl/rayTrace.frag.js +260 -237
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/shadowCatcher.frag.js +26 -26
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +59 -59
- package/lib/renderer/lightSampling.d.ts +3 -2
- package/lib/renderer/lightSampling.js +14 -8
- package/lib/renderer/lightSampling.js.map +1 -1
- package/lib/renderer/progressiveScheduler.js +4 -3
- package/lib/renderer/progressiveScheduler.js.map +1 -1
- package/lib/renderer/renderPipeline.d.ts +1 -0
- package/lib/renderer/renderPipeline.js.map +1 -1
- package/lib/renderer/researchTransport.d.ts +31 -0
- package/lib/renderer/researchTransport.js +5 -0
- package/lib/renderer/researchTransport.js.map +1 -0
- package/lib/renderer/sceneLayoutSchema.d.ts +1 -0
- package/lib/renderer/sceneLayoutSchema.js +2 -2
- package/lib/renderer/sceneLayoutSchema.js.map +1 -1
- package/lib/renderer/scratchSampling.js +6 -6
- package/lib/renderer/spectrum.d.ts +21 -0
- package/lib/renderer/spectrum.js +154 -0
- package/lib/renderer/spectrum.js.map +1 -0
- package/lib/renderer/webglLightSampling.d.ts +39 -0
- package/lib/renderer/webglLightSampling.js +15 -0
- package/lib/renderer/webglLightSampling.js.map +1 -0
- package/lib/renderer/wgpuBindlessSource.js +3 -3
- package/lib/renderer/wgpuShaderSource.d.ts +7 -0
- package/lib/renderer/wgpuShaderSource.js +2 -0
- package/lib/renderer/wgpuShaderSource.js.map +1 -1
- package/lib/renderer/wgsl/aovDisplay.wgsl.js +9 -9
- package/lib/renderer/wgsl/aovReflectance.wgsl.js +55 -55
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +1 -1
- package/lib/renderer/wgsl/aovResolve.wgsl.js +2 -2
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js +1 -1
- package/lib/renderer/wgsl/aovTrace.wgsl.js +33 -33
- package/lib/renderer/wgsl/bloom.wgsl.js +18 -18
- package/lib/renderer/wgsl/causticLight.compute.d.ts +6 -0
- package/lib/renderer/wgsl/causticLight.compute.js +537 -0
- package/lib/renderer/wgsl/causticLight.compute.js.map +1 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.js +102 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +12 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +16 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js +62 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +37 -37
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +598 -592
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +14 -14
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +2 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +75 -73
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +794 -794
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +2 -1
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +35 -25
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +142 -138
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +204 -187
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +11 -11
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +89 -93
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
- package/lib/renderer/wgsl/compose.frag.wgsl.js +98 -98
- package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
- package/lib/renderer/wgsl/depthQuery.wgsl.js +2 -2
- package/lib/renderer/wgsl/jnlm.compute.js +74 -74
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +25 -25
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +3 -3
- package/lib/renderer/wgsl/photonMap.compute.d.ts +29 -0
- package/lib/renderer/wgsl/photonMap.compute.js +352 -0
- package/lib/renderer/wgsl/photonMap.compute.js.map +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js +64 -64
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +9 -1
- package/lib/renderer/wgsl/rayTrace.compute.js +448 -522
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/MaterialState.d.ts +2 -2
- package/lib/scene/MaterialState.js +2 -2
- package/lib/scene/MaterialState.js.map +1 -1
- package/lib/settings/render.d.ts +11 -0
- package/lib/settings/render.js +1 -0
- package/lib/settings/render.js.map +1 -1
- package/lib/util/fromTHREE.js +2 -2
- 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/llms.txt +2 -1
- package/package.json +3 -3
|
@@ -16,17 +16,17 @@ export default createShaderMixin({
|
|
|
16
16
|
groundedBackgroundCenter: Shader.uniform('vec2')
|
|
17
17
|
},
|
|
18
18
|
main: glsl `
|
|
19
|
-
vec2
|
|
20
|
-
float phi = mod(atan(-
|
|
21
|
-
float theta = acos(clamp(
|
|
19
|
+
vec2 eF(vec3 gh) {
|
|
20
|
+
float phi = mod(atan(-gh.z, -gh.x), TWOPI);
|
|
21
|
+
float theta = acos(clamp(gh.y, -1.0, 1.0));
|
|
22
22
|
return vec2(phi * 0.5 * INVPI, theta * INVPI);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
vec2
|
|
26
|
-
return
|
|
25
|
+
vec2 cT(vec3 nD) {
|
|
26
|
+
return eF(transpose(environmentRotation) * nD);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
float
|
|
29
|
+
float rv(float u, out int vOffset, out float pdf) {
|
|
30
30
|
ivec2 size = textureSize(envMap, 0);
|
|
31
31
|
|
|
32
32
|
int left = 0;
|
|
@@ -52,7 +52,7 @@ pdf = s0.y;
|
|
|
52
52
|
return (float(vOffset) + (u - s0.x) / (s1.x - s0.x)) / float(size.y);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
float
|
|
55
|
+
float ru(float u, int vOffset, out float pdf) {
|
|
56
56
|
ivec2 size = textureSize(envMap, 0);
|
|
57
57
|
|
|
58
58
|
int left = 0;
|
|
@@ -66,128 +66,128 @@ left = mid + 1;
|
|
|
66
66
|
right = mid;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
int
|
|
69
|
+
int pw = left - 1;
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
|
|
73
|
-
vec2 s0 = texelFetch(envMapDistribution, ivec2(1 +
|
|
74
|
-
vec2 s1 = texelFetch(envMapDistribution, ivec2(1 +
|
|
73
|
+
vec2 s0 = texelFetch(envMapDistribution, ivec2(1 + pw, vOffset), 0).xy;
|
|
74
|
+
vec2 s1 = texelFetch(envMapDistribution, ivec2(1 + pw + 1, vOffset), 0).xy;
|
|
75
75
|
|
|
76
76
|
pdf = s0.y;
|
|
77
77
|
|
|
78
|
-
return (float(
|
|
78
|
+
return (float(pw) + (u - s0.x) / (s1.x - s0.x)) / float(size.x);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
|
|
82
|
-
float
|
|
82
|
+
float envMapSolidAnglePdf(vec2 partialPdf, float v) {
|
|
83
83
|
if (!(v > 0.0 && v < 1.0)) { return 0.0; }
|
|
84
84
|
float sinTheta = sin(min(v, 1.0 - v) * PI);
|
|
85
|
-
return
|
|
85
|
+
return partialPdf.x * partialPdf.y * INVPI2 / (2.0 * sinTheta);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
|
|
89
|
-
vec3
|
|
90
|
-
vec2
|
|
89
|
+
vec3 pn(vec2 random, out vec2 uv, out float pdf) {
|
|
90
|
+
vec2 partialPdf;
|
|
91
91
|
int vOffset;
|
|
92
92
|
|
|
93
|
-
uv.y =
|
|
94
|
-
uv.x =
|
|
93
|
+
uv.y = rv(random.x, vOffset, partialPdf.y);
|
|
94
|
+
uv.x = ru(random.y, vOffset, partialPdf.x);
|
|
95
95
|
|
|
96
96
|
float phi = uv.x * TWOPI;
|
|
97
97
|
float theta = uv.y * PI;
|
|
98
|
-
float
|
|
98
|
+
float ct = cos(theta);
|
|
99
99
|
float sinTheta = sin(theta);
|
|
100
|
-
float
|
|
101
|
-
float
|
|
100
|
+
float vZ = cos(phi);
|
|
101
|
+
float wr = sin(phi);
|
|
102
102
|
|
|
103
|
-
vec3 dir = vec3(-sinTheta *
|
|
103
|
+
vec3 dir = vec3(-sinTheta * vZ, ct, -sinTheta * wr);
|
|
104
104
|
|
|
105
|
-
pdf =
|
|
105
|
+
pdf = envMapSolidAnglePdf(partialPdf, uv.y);
|
|
106
106
|
|
|
107
107
|
return environmentRotation * dir;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
float
|
|
110
|
+
float envMapPdf(vec2 uv) {
|
|
111
111
|
vec2 size = vec2(textureSize(envMap, 0));
|
|
112
112
|
|
|
113
113
|
ivec2 pixel = clamp(ivec2(uv * size), ivec2(0), ivec2(size) - ivec2(1));
|
|
114
114
|
|
|
115
|
-
float
|
|
116
|
-
float
|
|
115
|
+
float ue = texelFetch(envMapDistribution, ivec2(1 + pixel.x, pixel.y), 0).y;
|
|
116
|
+
float uf = texelFetch(envMapDistribution, ivec2(0, pixel.y), 0).y;
|
|
117
117
|
|
|
118
|
-
return
|
|
118
|
+
return envMapSolidAnglePdf(vec2(ue, uf), uv.y);
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
float
|
|
122
|
-
float
|
|
123
|
-
if (
|
|
121
|
+
float di(vec3 point, float height, float radius) {
|
|
122
|
+
float fQ = length(point);
|
|
123
|
+
if (fQ < 0.00001) {
|
|
124
124
|
return -radius;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
float
|
|
128
|
-
float
|
|
129
|
-
float
|
|
130
|
-
if (
|
|
131
|
-
|
|
132
|
-
} else if (
|
|
133
|
-
|
|
127
|
+
float iG = radius * point.y / fQ;
|
|
128
|
+
float iq = -1.5 * height;
|
|
129
|
+
float eq;
|
|
130
|
+
if (iG >= 0.0) {
|
|
131
|
+
eq = radius;
|
|
132
|
+
} else if (iG < iq) {
|
|
133
|
+
eq = -height * fQ / point.y;
|
|
134
134
|
} else {
|
|
135
|
-
float
|
|
136
|
-
-
|
|
137
|
-
|
|
135
|
+
float cv = 1.0
|
|
136
|
+
- iG * iG / (3.0 * iq * iq);
|
|
137
|
+
eq = radius * cv;
|
|
138
138
|
}
|
|
139
|
-
return
|
|
139
|
+
return fQ - eq;
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
vec3
|
|
142
|
+
vec3 eM(vec3 origin, vec3 d) {
|
|
143
143
|
#ifdef USE_GROUNDED_BACKGROUND
|
|
144
144
|
float height = groundedBackgroundParams.x;
|
|
145
145
|
float radius = groundedBackgroundParams.y;
|
|
146
|
-
float
|
|
147
|
-
vec3
|
|
148
|
-
vec3
|
|
146
|
+
float yd = groundedBackgroundParams.z;
|
|
147
|
+
vec3 bS = normalize(d);
|
|
148
|
+
vec3 bs = origin - vec3(
|
|
149
149
|
groundedBackgroundCenter.x,
|
|
150
|
-
|
|
150
|
+
yd + height,
|
|
151
151
|
groundedBackgroundCenter.y
|
|
152
152
|
);
|
|
153
153
|
|
|
154
154
|
|
|
155
155
|
|
|
156
|
-
float
|
|
157
|
-
float
|
|
158
|
-
- dot(
|
|
159
|
-
if (
|
|
160
|
-
float
|
|
156
|
+
float eE = dot(bs, bS);
|
|
157
|
+
float bj = eE * eE
|
|
158
|
+
- dot(bs, bs) + radius * radius;
|
|
159
|
+
if (bj > 0.0) {
|
|
160
|
+
float cw = -eE + sqrt(bj);
|
|
161
161
|
if (
|
|
162
|
-
|
|
163
|
-
&&
|
|
162
|
+
cw > 0.0
|
|
163
|
+
&& di(bs, height, radius) <= 0.0
|
|
164
164
|
) {
|
|
165
|
-
vec3
|
|
166
|
-
if (
|
|
167
|
-
return normalize(
|
|
165
|
+
vec3 oA = bs + bS * cw;
|
|
166
|
+
if (oA.y >= 0.0) {
|
|
167
|
+
return normalize(oA);
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
if (
|
|
171
|
-
float
|
|
172
|
-
vec3
|
|
173
|
-
float
|
|
170
|
+
if (bS.y < -0.00001 && radius > 1.5 * height) {
|
|
171
|
+
float hP = (-height - bs.y) / bS.y;
|
|
172
|
+
vec3 ot = bs + bS * hP;
|
|
173
|
+
float oT = (2.0 / 3.0)
|
|
174
174
|
* sqrt(radius * radius - 2.25 * height * height);
|
|
175
|
-
if (
|
|
176
|
-
return normalize(
|
|
175
|
+
if (hP > 0.0 && length(ot.xz) <= oT) {
|
|
176
|
+
return normalize(ot);
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
float
|
|
180
|
+
float cI = 0.0;
|
|
181
181
|
for (int i = 0; i < 14; i++) {
|
|
182
|
-
float
|
|
183
|
-
vec3
|
|
184
|
-
if (
|
|
185
|
-
|
|
182
|
+
float fd = (cI + cw) * 0.5;
|
|
183
|
+
vec3 qq = bs + bS * fd;
|
|
184
|
+
if (di(qq, height, radius) > 0.0) {
|
|
185
|
+
cw = fd;
|
|
186
186
|
} else {
|
|
187
|
-
|
|
187
|
+
cI = fd;
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
|
-
vec3 hit =
|
|
190
|
+
vec3 hit = bs + bS * ((cI + cw) * 0.5);
|
|
191
191
|
return normalize(hit);
|
|
192
192
|
}
|
|
193
193
|
}
|
|
@@ -195,15 +195,15 @@ return normalize(hit);
|
|
|
195
195
|
return d;
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
vec4
|
|
199
|
-
d =
|
|
198
|
+
vec4 cn(vec3 origin, vec3 d) {
|
|
199
|
+
d = eM(origin, d);
|
|
200
200
|
#ifdef USE_BACKGROUND
|
|
201
201
|
vec4 t = backgroundMapTransform;
|
|
202
202
|
d = vec3(t.x * d.x - t.y * d.z, d.y, t.y * d.x + t.x * d.z);
|
|
203
|
-
vec4
|
|
204
|
-
return vec4(
|
|
203
|
+
vec4 aW = textureLinear(backgroundMap, eF(transpose(backgroundMapRotation) * d));
|
|
204
|
+
return vec4(aW.rgb * t.z, aW.a);
|
|
205
205
|
#else
|
|
206
|
-
return textureLinear(backgroundMap,
|
|
206
|
+
return textureLinear(backgroundMap, cT(d));
|
|
207
207
|
#endif
|
|
208
208
|
}`
|
|
209
209
|
});
|