@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.
Files changed (68) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +3429 -3390
  3. package/lib/oidn.d.ts +1 -1
  4. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  5. package/lib/renderer/WGPUBloomPass.js +18 -18
  6. package/lib/renderer/WGPUFullQuadPass.js +3 -3
  7. package/lib/renderer/WGPUJNLMDenoiser.js +62 -62
  8. package/lib/renderer/WGPURayTraceOutput.js +14 -12
  9. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  10. package/lib/renderer/WGPURayTracePass.js +1 -1
  11. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  12. package/lib/renderer/WGPURenderingPipeline.js +20 -18
  13. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  14. package/lib/renderer/WebGLJNLMDenoiser.js +61 -61
  15. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  16. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -9
  17. package/lib/renderer/glsl/chunks/envMap.glsl.js +45 -45
  18. package/lib/renderer/glsl/chunks/intersect.glsl.js +262 -262
  19. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +111 -111
  20. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +436 -436
  21. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  22. package/lib/renderer/glsl/chunks/random.glsl.js +3 -3
  23. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +32 -32
  24. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +54 -54
  25. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +71 -71
  26. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
  27. package/lib/renderer/glsl/chunks/sampling.glsl.js +64 -64
  28. package/lib/renderer/glsl/chunks/sobol.glsl.js +49 -49
  29. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  30. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +5 -5
  31. package/lib/renderer/glsl/depthQuery.frag.js +2 -2
  32. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
  33. package/lib/renderer/glsl/rayTrace.frag.js +128 -128
  34. package/lib/renderer/glsl/shadowCatcher.frag.js +12 -12
  35. package/lib/renderer/glsl/webglPipeline.frag.js +49 -49
  36. package/lib/renderer/lightsUtil.js +1 -1
  37. package/lib/renderer/lightsUtil.js.map +1 -1
  38. package/lib/renderer/scratchSampling.js +6 -6
  39. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  40. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +29 -29
  41. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +368 -368
  42. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +5 -5
  43. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +51 -51
  44. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +453 -453
  45. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +116 -116
  46. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  47. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +13 -13
  48. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +94 -94
  49. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +119 -119
  50. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +5 -5
  51. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +62 -62
  52. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +3 -3
  53. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +2 -2
  54. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  55. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +53 -53
  56. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +5 -5
  57. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -2
  58. package/lib/renderer/wgsl/compose.frag.wgsl.js +120 -92
  59. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  60. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  61. package/lib/renderer/wgsl/depthQuery.wgsl.js +3 -3
  62. package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
  63. package/lib/renderer/wgsl/rayTrace.compute.js +220 -211
  64. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  65. package/lib/version.d.ts +1 -1
  66. package/lib/version.js +1 -1
  67. package/lib/version.js.map +1 -1
  68. package/package.json +5 -4
@@ -45,27 +45,27 @@ void main() {
45
45
  ivec2 p = ivec2(gl_FragCoord.xy);
46
46
  ivec2 size = rawGuideTexRegion();
47
47
  vec2 center = load_rawGuideTex(p, 0).xy;
48
- float lg = 0.0;
49
- float iX = 0.0;
50
- float mL = 0.0;
51
- float iR = 0.0;
48
+ float lk = 0.0;
49
+ float iY = 0.0;
50
+ float mO = 0.0;
51
+ float iS = 0.0;
52
52
  for (int dy = -1; dy <= 1; dy++) {
53
53
  for (int dx = -1; dx <= 1; dx++) {
54
54
  vec2 value = load_rawGuideTex(clamp(p + ivec2(dx, dy), ivec2(0), size - 1), 0).xy;
55
- mL += value.x;
56
- iR += value.x * value.x;
55
+ mO += value.x;
56
+ iS += value.x * value.x;
57
57
  if (value.y >= 0.0) {
58
- lg += value.y;
59
- iX += 1.0;
58
+ lk += value.y;
59
+ iY += 1.0;
60
60
  }
61
61
  }
62
62
  }
63
63
  float variance;
64
64
  if (center.y >= 0.0) {
65
- variance = lg / iX;
65
+ variance = lk / iY;
66
66
  } else {
67
- float lf = mL / 9.0;
68
- variance = max(iR / 9.0 - lf * lf, 0.0) * 9.0 / 8.0;
67
+ float lj = mO / 9.0;
68
+ variance = max(iS / 9.0 - lj * lj, 0.0) * 9.0 / 8.0;
69
69
  }
70
70
  out_guide = vec4(center.x, variance, 0.0, 1.0);
71
71
  }`
@@ -105,29 +105,29 @@ const filterFragment = new FragmentShader({
105
105
 
106
106
  ivec2 imageSize;
107
107
 
108
- vec2 nq(ivec2 p) {
108
+ vec2 nt(ivec2 p) {
109
109
  return load_guideTex(clamp(p, ivec2(0), imageSize - 1), 0).xy;
110
110
  }
111
111
 
112
112
 
113
- vec4 rv(ivec2 p) {
113
+ vec4 rD(ivec2 p) {
114
114
  vec4 c = load_colorTex(p, 0);
115
115
  if (decodeInput) c.rgb = pow(max(c.rgb, 0.0), vec3(2.2));
116
116
  return vec4(c.rgb * c.a, c.a);
117
117
  }
118
118
 
119
- float lk(ivec2 q, vec4 bs, vec3 gM) {
119
+ float ln(ivec2 q, vec4 bs, vec3 gO) {
120
120
  vec4 albedo = load_albedoTex(q, 0);
121
121
 
122
122
 
123
- vec3 oS = max((albedo.rgb + bs.rgb) * 0.5, vec3(${JNLM_ALBEDO_FLOOR}));
124
- vec3 kR = (albedo.rgb - bs.rgb) / oS;
125
- float iO = albedo.a - bs.a;
126
- vec3 lb = load_normalTex(q, 0).rgb - gM;
123
+ vec3 oW = max((albedo.rgb + bs.rgb) * 0.5, vec3(${JNLM_ALBEDO_FLOOR}));
124
+ vec3 kU = (albedo.rgb - bs.rgb) / oW;
125
+ float iP = albedo.a - bs.a;
126
+ vec3 le = load_normalTex(q, 0).rgb - gO;
127
127
  return max(
128
- dot(kR, kR) * INV_ALBEDO_BANDWIDTH2
129
- + iO * iO * INV_COVERAGE_BANDWIDTH2,
130
- dot(lb, lb) * INV_NORMAL_BANDWIDTH2
128
+ dot(kU, kU) * INV_ALBEDO_BANDWIDTH2
129
+ + iP * iP * INV_COVERAGE_BANDWIDTH2,
130
+ dot(le, le) * INV_NORMAL_BANDWIDTH2
131
131
  );
132
132
  }
133
133
 
@@ -136,37 +136,37 @@ imageSize = guideTexRegion();
136
136
  ivec2 p = ivec2(gl_FragCoord.xy);
137
137
  vec4 bs = load_albedoTex(p, 0);
138
138
  vec4 fw = load_normalTex(p, 0);
139
- vec3 gM = fw.rgb;
139
+ vec3 gO = fw.rgb;
140
140
 
141
141
 
142
142
  if (fw.a <= 0.0 && load_shadowCatcherTex(p, 0).r <= 0.0) {
143
- vec4 c = rv(p);
143
+ vec4 c = rD(p);
144
144
  vec3 rgb = c.rgb / max(c.a, 1e-6);
145
145
  if (encodeOutput) rgb = pow(max(rgb, 0.0), vec3(1.0 / 2.2));
146
146
  out_color = vec4(rgb, c.a);
147
- out_guide = vec4(nq(p), 0.0, 1.0);
147
+ out_guide = vec4(nt(p), 0.0, 1.0);
148
148
  return;
149
149
  }
150
150
 
151
- vec2 kT[PATCH_SIZE];
151
+ vec2 kW[PATCH_SIZE];
152
152
  int k = 0;
153
153
  for (int dy = -PATCH_RADIUS; dy <= PATCH_RADIUS; dy++) {
154
154
  for (int dx = -PATCH_RADIUS; dx <= PATCH_RADIUS; dx++) {
155
- kT[k] = nq(p + ivec2(dx, dy) * dilation);
155
+ kW[k] = nt(p + ivec2(dx, dy) * dilation);
156
156
  k++;
157
157
  }
158
158
  }
159
159
  float k2 = colorSensitivity * colorSensitivity;
160
160
 
161
161
  vec4 sum = vec4(0.0);
162
- vec3 gP = max(bs.rgb, vec3(${JNLM_ALBEDO_FLOOR}));
163
- vec3 mb = vec3(0.0);
164
- vec3 gs = vec3(0.0);
162
+ vec3 gR = max(bs.rgb, vec3(${JNLM_ALBEDO_FLOOR}));
163
+ vec3 mf = vec3(0.0);
164
+ vec3 gt = vec3(0.0);
165
165
  vec3 hn = vec3(0.0);
166
- float pg = 0.0;
167
- float gu = 0.0;
168
- float nH = 0.0;
169
- float kA = 0.0;
166
+ float pk = 0.0;
167
+ float gv = 0.0;
168
+ float nK = 0.0;
169
+ float kD = 0.0;
170
170
  for (int sy = -SEARCH_RADIUS; sy <= SEARCH_RADIUS; sy++) {
171
171
  for (int sx = -SEARCH_RADIUS; sx <= SEARCH_RADIUS; sx++) {
172
172
  ivec2 q = p + ivec2(sx, sy) * dilation;
@@ -174,17 +174,17 @@ if (
174
174
  (sx == 0 && sy == 0) ||
175
175
  q.x < 0 || q.y < 0 || q.x >= imageSize.x || q.y >= imageSize.y
176
176
  ) continue;
177
- float features = lk(q, bs, gM);
177
+ float features = ln(q, bs, gO);
178
178
  if (features > 16.0) continue;
179
179
 
180
180
  float fT = 0.0;
181
181
  k = 0;
182
182
  for (int dy = -PATCH_RADIUS; dy <= PATCH_RADIUS; dy++) {
183
183
  for (int dx = -PATCH_RADIUS; dx <= PATCH_RADIUS; dx++) {
184
- vec2 a = kT[k];
185
- vec2 b = nq(q + ivec2(dx, dy) * dilation);
186
- float qH = a.x - b.x;
187
- fT += (qH * qH
184
+ vec2 a = kW[k];
185
+ vec2 b = nt(q + ivec2(dx, dy) * dilation);
186
+ float qL = a.x - b.x;
187
+ fT += (qL * qL
188
188
  - VARIANCE_CANCELLATION * (a.y + min(a.y, b.y)))
189
189
  / (1e-10 + k2 * (a.y + b.y));
190
190
  k++;
@@ -193,49 +193,49 @@ k++;
193
193
  fT /= float(PATCH_SIZE);
194
194
 
195
195
  float weight = exp(-max(max(fT, 0.0), features));
196
- vec2 g = nq(q);
196
+ vec2 g = nt(q);
197
197
 
198
- vec3 a = (load_albedoTex(q, 0).rgb - bs.rgb) / gP;
199
- vec4 value = rv(q);
198
+ vec3 a = (load_albedoTex(q, 0).rgb - bs.rgb) / gR;
199
+ vec4 value = rD(q);
200
200
  sum += value * weight;
201
- mb += a * weight;
202
- gs += a * a * weight;
201
+ mf += a * weight;
202
+ gt += a * a * weight;
203
203
  hn += a * value.rgb * weight;
204
- pg += g.x * weight;
205
- gu += g.y * weight * weight;
206
- nH += weight;
207
- kA = max(kA, weight);
204
+ pk += g.x * weight;
205
+ gv += g.y * weight * weight;
206
+ nK += weight;
207
+ kD = max(kD, weight);
208
208
  }
209
209
  }
210
210
 
211
211
 
212
212
 
213
- vec4 center = rv(p);
214
- vec2 kS = nq(p);
215
- float dF = max(kA, CENTER_WEIGHT_MIN);
216
- float totalWeight = nH + dF;
213
+ vec4 center = rD(p);
214
+ vec2 kV = nt(p);
215
+ float dF = max(kD, CENTER_WEIGHT_MIN);
216
+ float totalWeight = nK + dF;
217
217
  vec4 mean = (sum + center * dF) / totalWeight;
218
218
 
219
219
 
220
- vec3 ez = mb / totalWeight;
221
- vec3 ll = max(gs / totalWeight - ez * ez, vec3(0.0));
222
- vec3 qi = hn / totalWeight - ez * mean.rgb;
220
+ vec3 ez = mf / totalWeight;
221
+ vec3 lo = max(gt / totalWeight - ez * ez, vec3(0.0));
222
+ vec3 qm = hn / totalWeight - ez * mean.rgb;
223
223
 
224
224
 
225
225
 
226
- vec3 qs = bs.rgb + ez * gP;
227
- vec3 ol = mean.rgb * gP / max(qs, vec3(${JNLM_ALBEDO_FLOOR}));
228
- vec3 vm = clamp(qi / (ll + vec3(${JNLM_ALBEDO_REGULARIZATION})), vec3(0.0), ol);
229
- vec3 rn = mean.rgb - vm * ez;
230
- vec4 filtered = vec4(max(rn, vec3(0.0)), max(mean.a, 0.0));
226
+ vec3 qw = bs.rgb + ez * gR;
227
+ vec3 oq = mean.rgb * gR / max(qw, vec3(${JNLM_ALBEDO_FLOOR}));
228
+ vec3 vs = clamp(qm / (lo + vec3(${JNLM_ALBEDO_REGULARIZATION})), vec3(0.0), oq);
229
+ vec3 rs = mean.rgb - vs * ez;
230
+ vec4 filtered = vec4(max(rs, vec3(0.0)), max(mean.a, 0.0));
231
231
  vec3 rgb = filtered.a > 1e-6
232
232
  ? filtered.rgb / max(filtered.a, 1e-6)
233
233
  : center.rgb / max(center.a, 1e-6);
234
234
  if (encodeOutput) rgb = pow(max(rgb, 0.0), vec3(1.0 / 2.2));
235
235
  out_color = vec4(rgb, filtered.a);
236
236
  out_guide = vec4(
237
- (pg + kS.x * dF) / totalWeight,
238
- (gu + kS.y * dF * dF)
237
+ (pk + kV.x * dF) / totalWeight,
238
+ (gv + kV.y * dF * dF)
239
239
  / (totalWeight * totalWeight),
240
240
  0.0,
241
241
  1.0
@@ -42,11 +42,11 @@ vec4 mask = sample_shadowCatcherTex(v_Texcoord);
42
42
  vec4 background = sample_catcherBackgroundTex(v_Texcoord);
43
43
  float hit = sample_albedoTex(v_Texcoord).a;
44
44
 
45
- float pW = max(sample_normalTex(v_Texcoord).a, 1.0) / sampleCount;
46
- float iP = max(hit - mask.b * pW, 0.0);
45
+ float qa = max(sample_normalTex(v_Texcoord).a, 1.0) / sampleCount;
46
+ float iQ = max(hit - mask.b * qa, 0.0);
47
47
  out_foreground = vec4(
48
- (light.rgb - background.rgb * pW)
49
- / (iP > 0.0 ? iP : sampleCount),
48
+ (light.rgb - background.rgb * qa)
49
+ / (iQ > 0.0 ? iQ : sampleCount),
50
50
  clamp((light.a - background.a) / sampleCount, 0.0, 1.0)
51
51
  );
52
52
  out_catcherBackground = background / sampleCount;
@@ -3,7 +3,7 @@
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 hz(vec2 fD) {
6
+ Ray hy(vec2 fD) {
7
7
  vec4 origin = viewProjectionInv * vec4(fD * 2.0 - 1.0, -1.0, 1.0);
8
8
  vec4 target = viewProjectionInv * vec4(fD * 2.0 - 1.0, 1.0, 1.0);
9
9
  Ray cam;
@@ -12,7 +12,7 @@ iw(cam, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * ta
12
12
  return cam;
13
13
  }
14
14
 
15
- vec2 oz(vec2 p) {
15
+ vec2 oC(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,16 +20,16 @@ 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 nv() {
24
- Ray cam = hz(v_Texcoord + rN());
23
+ Ray nC() {
24
+ Ray cam = hy(v_Texcoord + rS());
25
25
  if (cameraApertureRadius > 0.0) {
26
26
 
27
27
  vec3 eye = viewInv[3].xyz;
28
- vec3 nV = -normalize(viewInv[2].xyz);
29
- vec3 qm = eye + cam.d * (cameraFocusDistance / dot(cam.d, nV));
30
- vec2 ru = cameraApertureRadius * oz(fk(CAMERA_LENS));
31
- vec3 origin = vec3(viewInv * vec4(ru, 0.0, 1.0));
32
- iw(cam, origin, normalize(qm - origin));
28
+ vec3 nY = -normalize(viewInv[2].xyz);
29
+ vec3 qq = eye + cam.d * (cameraFocusDistance / dot(cam.d, nY));
30
+ vec2 rC = cameraApertureRadius * oC(fk(CAMERA_LENS));
31
+ vec3 origin = vec3(viewInv * vec4(rC, 0.0, 1.0));
32
+ iw(cam, origin, normalize(qq - origin));
33
33
  }
34
34
  return cam;
35
35
  }
@@ -13,13 +13,13 @@ export default createShaderMixin({
13
13
  groundedBackgroundCenter: Shader.uniform('vec2')
14
14
  },
15
15
  main: glsl `
16
- vec2 aS(vec3 gb) {
17
- float phi = mod(atan(-gb.z, -gb.x), TWOPI);
18
- float theta = acos(gb.y);
16
+ vec2 aS(vec3 gc) {
17
+ float phi = mod(atan(-gc.z, -gc.x), TWOPI);
18
+ float theta = acos(gc.y);
19
19
  return vec2(phi * 0.5 * INVPI, theta * INVPI);
20
20
  }
21
21
 
22
- float qp(float u, out int vOffset, out float pdf) {
22
+ float qt(float u, out int vOffset, out float pdf) {
23
23
  ivec2 size = textureSize(envMap, 0);
24
24
 
25
25
  int left = 0;
@@ -45,7 +45,7 @@ pdf = s0.y;
45
45
  return (float(vOffset) + (u - s0.x) / (s1.x - s0.x)) / float(size.y);
46
46
  }
47
47
 
48
- float qo(float u, int vOffset, out float pdf) {
48
+ float qs(float u, int vOffset, out float pdf) {
49
49
  ivec2 size = textureSize(envMap, 0);
50
50
 
51
51
  int left = 0;
@@ -59,36 +59,36 @@ left = mid + 1;
59
59
  right = mid;
60
60
  }
61
61
  }
62
- int oG = left - 1;
62
+ int oJ = left - 1;
63
63
 
64
64
 
65
65
 
66
- vec2 s0 = texelFetch(envMapDistribution, ivec2(1 + oG, vOffset), 0).xy;
67
- vec2 s1 = texelFetch(envMapDistribution, ivec2(1 + oG + 1, vOffset), 0).xy;
66
+ vec2 s0 = texelFetch(envMapDistribution, ivec2(1 + oJ, vOffset), 0).xy;
67
+ vec2 s1 = texelFetch(envMapDistribution, ivec2(1 + oJ + 1, vOffset), 0).xy;
68
68
 
69
69
  pdf = s0.y;
70
70
 
71
- return (float(oG) + (u - s0.x) / (s1.x - s0.x)) / float(size.x);
71
+ return (float(oJ) + (u - s0.x) / (s1.x - s0.x)) / float(size.x);
72
72
  }
73
73
 
74
74
 
75
- vec3 oA(vec2 random, out vec2 uv, out float pdf) {
76
- vec2 gY;
75
+ vec3 oD(vec2 random, out vec2 uv, out float pdf) {
76
+ vec2 gZ;
77
77
  int vOffset;
78
78
 
79
- uv.y = qp(random.x, vOffset, gY.y);
80
- uv.x = qo(random.y, vOffset, gY.x);
79
+ uv.y = qt(random.x, vOffset, gZ.y);
80
+ uv.x = qs(random.y, vOffset, gZ.x);
81
81
 
82
82
  float phi = uv.x * TWOPI;
83
83
  float theta = uv.y * PI;
84
84
  float cc = cos(theta);
85
85
  float sinTheta = sin(theta);
86
- float tZ = cos(phi);
87
- float uh = sin(phi);
86
+ float ue = cos(phi);
87
+ float um = sin(phi);
88
88
 
89
- vec3 dir = vec3(-sinTheta * tZ, cc, -sinTheta * uh);
89
+ vec3 dir = vec3(-sinTheta * ue, cc, -sinTheta * um);
90
90
 
91
- pdf = gY.x * gY.y * INVPI2 / (2.0 * sinTheta);
91
+ pdf = gZ.x * gZ.y * INVPI2 / (2.0 * sinTheta);
92
92
 
93
93
  return dir;
94
94
  }
@@ -100,28 +100,28 @@ float sinTheta = sin(uv.y * PI);
100
100
 
101
101
  uv *= size;
102
102
 
103
- float sw = texelFetch(envMapDistribution, ivec2(1.0 + uv.x, uv.y), 0).y;
104
- float sz = texelFetch(envMapDistribution, ivec2(0, uv.y), 0).y;
103
+ float sD = texelFetch(envMapDistribution, ivec2(1.0 + uv.x, uv.y), 0).y;
104
+ float sE = texelFetch(envMapDistribution, ivec2(0, uv.y), 0).y;
105
105
 
106
- return sw * sz * INVPI2 / (2.0 * sinTheta);
106
+ return sD * sE * INVPI2 / (2.0 * sinTheta);
107
107
  }
108
108
 
109
- float dq(vec3 sA, float height, float radius) {
110
- float fN = length(sA);
109
+ float dq(vec3 sF, float height, float radius) {
110
+ float fN = length(sF);
111
111
  if (fN < 0.00001) {
112
112
  return -radius;
113
113
  }
114
114
 
115
- float iC = radius * sA.y / fN;
116
- float ik = -1.5 * height;
115
+ float iC = radius * sF.y / fN;
116
+ float ij = -1.5 * height;
117
117
  float ev;
118
118
  if (iC >= 0.0) {
119
119
  ev = radius;
120
- } else if (iC < ik) {
121
- ev = -height * fN / sA.y;
120
+ } else if (iC < ij) {
121
+ ev = -height * fN / sF.y;
122
122
  } else {
123
123
  float dW = 1.0
124
- - iC * iC / (3.0 * ik * ik);
124
+ - iC * iC / (3.0 * ij * ij);
125
125
  ev = radius * dW;
126
126
  }
127
127
  return fN - ev;
@@ -131,11 +131,11 @@ vec3 eQ(vec3 origin, vec3 d) {
131
131
  #ifdef USE_GROUNDED_BACKGROUND
132
132
  float height = groundedBackgroundParams.x;
133
133
  float radius = groundedBackgroundParams.y;
134
- float vB = groundedBackgroundParams.z;
134
+ float vG = groundedBackgroundParams.z;
135
135
  vec3 bY = normalize(d);
136
136
  vec3 bB = origin - vec3(
137
137
  groundedBackgroundCenter.x,
138
- vB + height,
138
+ vG + height,
139
139
  groundedBackgroundCenter.y
140
140
  );
141
141
 
@@ -145,37 +145,37 @@ float eI = dot(bB, bY);
145
145
  float ej = eI * eI
146
146
  - dot(bB, bB) + radius * radius;
147
147
  if (ej > 0.0) {
148
- float cB = -eI + sqrt(ej);
148
+ float cC = -eI + sqrt(ej);
149
149
  if (
150
- cB > 0.0
150
+ cC > 0.0
151
151
  && dq(bB, height, radius) <= 0.0
152
152
  ) {
153
- vec3 nB = bB + bY * cB;
154
- if (nB.y >= 0.0) {
155
- return normalize(nB);
153
+ vec3 nE = bB + bY * cC;
154
+ if (nE.y >= 0.0) {
155
+ return normalize(nE);
156
156
  }
157
157
 
158
158
  if (bY.y < -0.00001 && radius > 1.5 * height) {
159
- float hQ = (-height - bB.y) / bY.y;
160
- vec3 nk = bB + bY * hQ;
161
- float nZ = (2.0 / 3.0)
159
+ float hP = (-height - bB.y) / bY.y;
160
+ vec3 nq = bB + bY * hP;
161
+ float oc = (2.0 / 3.0)
162
162
  * sqrt(radius * radius - 2.25 * height * height);
163
- if (hQ > 0.0 && length(nk.xz) <= nZ) {
164
- return normalize(nk);
163
+ if (hP > 0.0 && length(nq.xz) <= oc) {
164
+ return normalize(nq);
165
165
  }
166
166
  }
167
167
 
168
168
  float cN = 0.0;
169
169
  for (int i = 0; i < 14; i++) {
170
- float fe = (cN + cB) * 0.5;
171
- vec3 pp = bB + bY * fe;
172
- if (dq(pp, height, radius) > 0.0) {
173
- cB = fe;
170
+ float fe = (cN + cC) * 0.5;
171
+ vec3 pt = bB + bY * fe;
172
+ if (dq(pt, height, radius) > 0.0) {
173
+ cC = fe;
174
174
  } else {
175
175
  cN = fe;
176
176
  }
177
177
  }
178
- vec3 hit = bB + bY * ((cN + cB) * 0.5);
178
+ vec3 hit = bB + bY * ((cN + cC) * 0.5);
179
179
  return normalize(hit);
180
180
  }
181
181
  }
@@ -183,7 +183,7 @@ return normalize(hit);
183
183
  return d;
184
184
  }
185
185
 
186
- vec4 cw(vec3 origin, vec3 d) {
186
+ vec4 cx(vec3 origin, vec3 d) {
187
187
  d = eQ(origin, d);
188
188
  vec2 uv = aS(d);
189
189
  return textureLinear(backgroundMap, uv);