@meimu/mutracer 0.1.1 → 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 (95) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +3525 -3484
  3. package/docs/materials.md +27 -7
  4. package/docs/threejs.md +13 -2
  5. package/docs/viewer.md +53 -0
  6. package/lib/oidn.d.ts +1 -1
  7. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  8. package/lib/renderer/MaterialTable.d.ts +1 -0
  9. package/lib/renderer/MaterialTable.js +2 -1
  10. package/lib/renderer/MaterialTable.js.map +1 -1
  11. package/lib/renderer/WGPUBloomPass.js +18 -18
  12. package/lib/renderer/WGPUFullQuadPass.js +3 -3
  13. package/lib/renderer/WGPUJNLMDenoiser.js +62 -62
  14. package/lib/renderer/WGPURayTraceOutput.js +14 -12
  15. package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
  16. package/lib/renderer/WGPURayTracePass.js +2 -2
  17. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  18. package/lib/renderer/WGPURenderingPipeline.js +20 -18
  19. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  20. package/lib/renderer/WebGLJNLMDenoiser.js +61 -61
  21. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  22. package/lib/renderer/WebGLRayTracePass.js +3 -1
  23. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  24. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -9
  25. package/lib/renderer/glsl/chunks/envMap.glsl.js +45 -45
  26. package/lib/renderer/glsl/chunks/intersect.glsl.js +262 -262
  27. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +111 -111
  28. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +436 -436
  29. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  30. package/lib/renderer/glsl/chunks/random.glsl.js +3 -3
  31. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +32 -32
  32. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +54 -54
  33. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +71 -71
  34. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
  35. package/lib/renderer/glsl/chunks/sampling.glsl.js +64 -64
  36. package/lib/renderer/glsl/chunks/sobol.glsl.js +49 -49
  37. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  38. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +5 -5
  39. package/lib/renderer/glsl/depthQuery.frag.js +2 -2
  40. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
  41. package/lib/renderer/glsl/rayTrace.frag.js +128 -128
  42. package/lib/renderer/glsl/shadowCatcher.frag.js +12 -12
  43. package/lib/renderer/glsl/webglPipeline.frag.js +49 -49
  44. package/lib/renderer/lightsUtil.js +1 -1
  45. package/lib/renderer/lightsUtil.js.map +1 -1
  46. package/lib/renderer/materialComparison.generated.js +5 -0
  47. package/lib/renderer/materialComparison.generated.js.map +1 -1
  48. package/lib/renderer/materialLayout.js +2 -1
  49. package/lib/renderer/materialLayout.js.map +1 -1
  50. package/lib/renderer/prepareMeshBVH.d.ts +4 -2
  51. package/lib/renderer/prepareMeshBVH.js +44 -20
  52. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  53. package/lib/renderer/scratchSampling.js +6 -6
  54. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  55. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +29 -29
  56. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +376 -379
  57. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  58. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +5 -5
  59. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +51 -51
  60. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +453 -453
  61. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +1 -1
  62. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +122 -117
  63. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -1
  64. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  65. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +13 -13
  66. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +94 -94
  67. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +119 -119
  68. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +5 -5
  69. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +62 -62
  70. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +3 -3
  71. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +2 -2
  72. package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
  73. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +53 -53
  74. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +5 -5
  75. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -2
  76. package/lib/renderer/wgsl/compose.frag.wgsl.js +120 -92
  77. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  78. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  79. package/lib/renderer/wgsl/depthQuery.wgsl.js +3 -3
  80. package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
  81. package/lib/renderer/wgsl/rayTrace.compute.js +220 -211
  82. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  83. package/lib/scene/OpenPBRMaterial.d.ts +4 -2
  84. package/lib/scene/OpenPBRMaterial.js +4 -2
  85. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  86. package/lib/scene/openPbrSchema.d.ts +7 -2
  87. package/lib/scene/openPbrSchema.js +2 -1
  88. package/lib/scene/openPbrSchema.js.map +1 -1
  89. package/lib/util/fromTHREE.d.ts +1 -0
  90. package/lib/util/fromTHREE.js +24 -6
  91. package/lib/util/fromTHREE.js.map +1 -1
  92. package/lib/version.d.ts +1 -1
  93. package/lib/version.js +1 -1
  94. package/lib/version.js.map +1 -1
  95. package/package.json +5 -4
@@ -2,16 +2,16 @@
2
2
  // http://www.pbr-book.org/3ed-2018/Light_Transport_I_Surface_Reflection/Direct_Lighting.html#EstimatingtheDirectLightingIntegral
3
3
  import { glsl } from '../../shader.js';
4
4
  export default glsl `
5
- vec3 mG(ad si, J mat, ag prepared, inout Path aa, vec3 ffnormal, bool gw) {
6
- float mp = 1.0;
7
- vec3 kZ = vec3(fk(cv(LIGHT_POSITION)), dz(cv(LIGHT_SELECT)));
5
+ vec3 mJ(ad si, J mat, ag prepared, inout Path aa, vec3 ffnormal, bool gy) {
6
+ float mt = 1.0;
7
+ vec3 lc = vec3(fk(cw(LIGHT_POSITION)), dz(cw(LIGHT_SELECT)));
8
8
 
9
9
  LightSampleRec lightSample;
10
- sampleLight(si.position, kZ, lightSample, false);
10
+ sampleLight(si.position, lc, lightSample, false);
11
11
  lightSample.emission = ai(lightSample.emission, bf);
12
12
 
13
13
  vec3 lightDir = lightSample.direction;
14
- vec3 oH = -aa.ray.d;
14
+ vec3 oK = -aa.ray.d;
15
15
  float fd = lightSample.pdf;
16
16
 
17
17
 
@@ -19,7 +19,7 @@ float fd = lightSample.pdf;
19
19
 
20
20
  float cosThetaL = dot(ffnormal, lightDir);
21
21
  #ifdef NUM_COAT_NORMAL_MAPS
22
- if (gw && mat.coatNormalEnabled) { cosThetaL = dot(mat.geometricNormal, lightDir); }
22
+ if (gy && mat.coatNormalEnabled) { cosThetaL = dot(mat.geometricNormal, lightDir); }
23
23
  #endif
24
24
 
25
25
  if (fd <= 0.0 || max(max(lightSample.emission.x, lightSample.emission.y), lightSample.emission.z) <= 0.0) {
@@ -28,7 +28,7 @@ return vec3(0.0);
28
28
 
29
29
  float scatteringPdf = 0.0;
30
30
  vec3 f = vec3(0.0);
31
- if (gw) {
31
+ if (gy) {
32
32
  if (cosThetaL <= 0.0 && mat.transmissionWeight <= 0.0 && mat.subsurfaceWeight <= 0.0) {
33
33
  return vec3(0.0);
34
34
  }
@@ -36,7 +36,7 @@ f = bI(prepared, lightDir, scatteringPdf);
36
36
  }
37
37
  else {
38
38
  scatteringPdf = bD(
39
- dot(oH, lightDir),
39
+ dot(oK, lightDir),
40
40
  si.mediumAnisotropy
41
41
  );
42
42
  f = vec3(scatteringPdf);
@@ -46,9 +46,9 @@ if (scatteringPdf <= 0.0 || max(max(f.x, f.y), f.z) <= 0.0) {
46
46
  return vec3(0.0);
47
47
  }
48
48
 
49
- Ray ml;
50
- vec3 hc = si.position + EPS * lightDir;
51
- if (gw) {
49
+ Ray mp;
50
+ vec3 hd = si.position + EPS * lightDir;
51
+ if (gy) {
52
52
  const float bZ = 0.1;
53
53
  float dr = dot(si.normal, lightDir);
54
54
  #ifdef NUM_COAT_NORMAL_MAPS
@@ -56,26 +56,26 @@ if (mat.coatNormalEnabled) { dr = dot(si.faceNormal, lightDir); }
56
56
  #endif
57
57
  vec3 geometricNormal = dr < 0.0 ? -si.faceNormal : si.faceNormal;
58
58
  dr = abs(dr);
59
- float hP = dot(geometricNormal, lightDir);
60
- float oo = dr < bZ
59
+ float hO = dot(geometricNormal, lightDir);
60
+ float ot = dr < bZ
61
61
  ? clamp(
62
- 2.0 - (hP + dr) / bZ,
62
+ 2.0 - (hO + dr) / bZ,
63
63
  0.0,
64
64
  1.0
65
65
  )
66
- : clamp(1.0 - hP / bZ, 0.0, 1.0);
67
- hc += si.shadowOffset * oo;
66
+ : clamp(1.0 - hO / bZ, 0.0, 1.0);
67
+ hd += si.shadowOffset * ot;
68
68
  }
69
- iw(ml, hc, lightDir);
70
- if (ex(ml, lightSample.dist - EPS, si.triangleIndex)) {
69
+ iw(mp, hd, lightDir);
70
+ if (ex(mp, lightSample.dist - EPS, si.triangleIndex)) {
71
71
  return vec3(0.0);
72
72
  }
73
73
 
74
74
  #ifdef USE_ENVMAP
75
75
 
76
76
 
77
- if (gw && cosThetaL < 0.0 && kZ.z < envLightSelectionPmf) {
78
- vec4 background = cw(ml.o, lightDir);
77
+ if (gy && cosThetaL < 0.0 && lc.z < envLightSelectionPmf) {
78
+ vec4 background = cx(mp.o, lightDir);
79
79
  lightSample.emission = ai(background.rgb * background.a, bf);
80
80
  }
81
81
  #endif
@@ -84,45 +84,45 @@ lightSample.emission = ai(background.rgb * background.a, bf);
84
84
 
85
85
  float eW = lightSample.isDelta
86
86
  ? 1.0
87
- : aF(fd, scatteringPdf);
87
+ : aG(fd, scatteringPdf);
88
88
  return eW > 0.0
89
89
  ? eW * lightSample.emission * f / fd
90
90
  : vec3(0.0);
91
91
  }
92
92
 
93
93
  #ifdef NUM_COAT_NORMAL_MAPS
94
- vec3 fB(vec3 pk, vec3 tc, vec3 view) {
95
- bool qL = dot(tc, view) >= 0.0;
96
- vec3 ub = qL ? tc : -tc;
97
- vec3 qK = qL ? pk : -pk;
98
- if (dot(pk, tc) <= 0.0 || dot(qK, view) <= 1e-6) { return ub; }
99
- return qK;
94
+ vec3 fB(vec3 po, vec3 th, vec3 view) {
95
+ bool qQ = dot(th, view) >= 0.0;
96
+ vec3 uh = qQ ? th : -th;
97
+ vec3 qP = qQ ? po : -po;
98
+ if (dot(po, th) <= 0.0 || dot(qP, view) <= 1e-6) { return uh; }
99
+ return qP;
100
100
  }
101
101
  #endif
102
- void lO(inout ad si, J mat, inout Path aa) {
103
- vec3 ud = vec3(fk(cv(BSDF_DIRECTION)), dz(cv(BSDF_LOBE)));
102
+ void lR(inout ad si, J mat, inout Path aa) {
103
+ vec3 uj = vec3(fk(cw(BSDF_DIRECTION)), dz(cw(BSDF_LOBE)));
104
104
  #ifdef NUM_COAT_NORMAL_MAPS
105
105
  vec3 bC = si.faceNormal;
106
- vec3 mr = si.normal;
106
+ vec3 mv = si.normal;
107
107
  #endif
108
- float rA = -dot(si.faceNormal, aa.ray.d);
109
- float sq = -dot(si.normal, aa.ray.d);
108
+ float rF = -dot(si.faceNormal, aa.ray.d);
109
+ float sw = -dot(si.normal, aa.ray.d);
110
110
  if ((mat.transmissionWeight > 0.0 || mat.subsurfaceWeight > 0.0) && mat.thinWalled) {
111
111
 
112
- if (rA < 0.0) {
112
+ if (rF < 0.0) {
113
113
  si.faceNormal = -si.faceNormal;
114
- rA = -rA;
114
+ rF = -rF;
115
115
  }
116
- if (sq < 0.0) {
116
+ if (sw < 0.0) {
117
117
  si.normal = -si.normal;
118
- sq = -sq;
118
+ sw = -sw;
119
119
  }
120
120
  }
121
121
 
122
122
 
123
- bool pI = rA >= 0.0 && sq < 0.0;
124
- float ndv = pI ? rA : sq;
125
- vec3 normal = pI ? si.faceNormal : si.normal;
123
+ bool pM = rF >= 0.0 && sw < 0.0;
124
+ float ndv = pM ? rF : sw;
125
+ vec3 normal = pM ? si.faceNormal : si.normal;
126
126
 
127
127
  mat.inside = ndv <= 0.0 && !mat.thinWalled;
128
128
 
@@ -133,7 +133,7 @@ if (mat.coatNormalEnabled) {
133
133
  vec3 view = -aa.ray.d;
134
134
  float fW = dot(bC, view);
135
135
  mat.geometricNormal = fW >= 0.0 ? bC : -bC;
136
- ffnormal = fB(mr, bC, view);
136
+ ffnormal = fB(mv, bC, view);
137
137
  mat.coatNormal = fB(si.coatNormal, bC, view);
138
138
  mat.inside = fW <= 0.0 && !mat.thinWalled;
139
139
  mat.relativeIor = (fW > 0.0 || mat.thinWalled) ? 1.0 / mat.specularIor : mat.specularIor;
@@ -142,7 +142,7 @@ mat.relativeIor = (fW > 0.0 || mat.thinWalled) ? 1.0 / mat.specularIor : mat.spe
142
142
 
143
143
 
144
144
  float scatteringPdf;
145
- vec3 cF;
145
+ vec3 cG;
146
146
  aa.scatteringIsDelta = false;
147
147
  bool bl = false;
148
148
  bool hj = false;
@@ -151,49 +151,49 @@ ag prepared;
151
151
  #ifdef HAS_MEDIUM
152
152
  int mediumType = si.mediumType;
153
153
  float d = distance(si.position, aa.ray.o);
154
- vec3 ne = aa.ray.o;
154
+ vec3 nh = aa.ray.o;
155
155
  vec3 extinction = si.mediumExtinction;
156
156
  vec3 scattering = min(si.mediumScattering, extinction);
157
- float sl = max(max(extinction.x, extinction.y), extinction.z);
158
- if (mediumType > 0 && sl > 0.0) {
157
+ float sr = max(max(extinction.x, extinction.y), extinction.z);
158
+ if (mediumType > 0 && sr > 0.0) {
159
159
 
160
160
 
161
161
 
162
162
 
163
- int mT = min(int(dz(cv(MEDIUM_CHANNEL)) * 3.0), 2);
164
- float fA = extinction[mT];
165
- float ic = fA > 0.0
166
- ? min(-log(max(dz(cv(MEDIUM_DISTANCE)), 1e-7)) / fA, d)
163
+ int mW = min(int(dz(cw(MEDIUM_CHANNEL)) * 3.0), 2);
164
+ float fA = extinction[mW];
165
+ float ib = fA > 0.0
166
+ ? min(-log(max(dz(cw(MEDIUM_DISTANCE)), 1e-7)) / fA, d)
167
167
  : d;
168
- bl = ic < d;
169
- vec3 ew = exp(-extinction * ic);
170
- vec3 nM = bl
168
+ bl = ib < d;
169
+ vec3 ew = exp(-extinction * ib);
170
+ vec3 nP = bl
171
171
  ? extinction * ew
172
172
  : ew;
173
- float nt = max(
174
- (nM.x + nM.y + nM.z) / 3.0,
173
+ float nA = max(
174
+ (nP.x + nP.y + nP.z) / 3.0,
175
175
  1e-8
176
176
  );
177
177
  if (bl) {
178
- aa.beta *= ew * scattering / nt;
178
+ aa.beta *= ew * scattering / nA;
179
179
 
180
- aa.ray.o = ne + ic * aa.ray.d;
180
+ aa.ray.o = nh + ib * aa.ray.d;
181
181
  si.position = aa.ray.o;
182
- aa.li += mG(si, mat, prepared, aa, ffnormal, false) * aa.beta;
182
+ aa.li += mJ(si, mat, prepared, aa, ffnormal, false) * aa.beta;
183
183
 
184
184
 
185
- cF = fl(
185
+ cG = fl(
186
186
  -aa.ray.d,
187
187
  si.mediumAnisotropy,
188
- fk(cv(PHASE_DIRECTION))
188
+ fk(cw(PHASE_DIRECTION))
189
189
  );
190
190
  scatteringPdf = bD(
191
- dot(cF, -aa.ray.d),
191
+ dot(cG, -aa.ray.d),
192
192
  si.mediumAnisotropy
193
193
  );
194
194
  }
195
195
  else {
196
- aa.beta *= ew / nt;
196
+ aa.beta *= ew / nA;
197
197
  }
198
198
  }
199
199
  #endif
@@ -205,22 +205,22 @@ if (mat.materialType == UNLIT) {
205
205
  aa.abort = true;
206
206
  return;
207
207
  }
208
- vec3 pG = vec3(0.0);
208
+ vec3 pK = vec3(0.0);
209
209
  #ifdef USE_TANGENT
210
- pG = si.tangent;
210
+ pK = si.tangent;
211
211
  #endif
212
212
  mat.directionTangent = si.directionTangent;
213
213
  mat.directionBitangent = si.directionBitangent;
214
214
  mat.geometryTangent = si.geometryTangent;
215
215
  mat.geometryBitangent = si.geometryBitangent;
216
- prepared = eG(pG, mat, -aa.ray.d, ffnormal);
217
- aa.li += mG(si, mat, prepared, aa, ffnormal, true) * aa.beta;
216
+ prepared = eG(pK, mat, -aa.ray.d, ffnormal);
217
+ aa.li += mJ(si, mat, prepared, aa, ffnormal, true) * aa.beta;
218
218
 
219
219
  bool isNextRefraction;
220
220
  vec3 f = dv(
221
221
  prepared,
222
- ud,
223
- cF,
222
+ uj,
223
+ cG,
224
224
  scatteringPdf,
225
225
  isNextRefraction
226
226
  );
@@ -232,7 +232,7 @@ prepared.probabilities[OPENPBR_LOBE_TRANSMISSION] >= 1.0 - 1e-6;
232
232
 
233
233
 
234
234
  if (!(scatteringPdf > 0.0) || any(isnan(f)) || any(isinf(f)) ||
235
- dot(cF, cF) < 0.5) {
235
+ dot(cG, cG) < 0.5) {
236
236
  aa.scatteringPdf = 0.0;
237
237
  aa.abort = true;
238
238
  return;
@@ -243,14 +243,14 @@ isNextRefraction;
243
243
  aa.isNextRefraction = isNextRefraction;
244
244
 
245
245
 
246
- aa.ray.o = si.position + EPS * cF;
246
+ aa.ray.o = si.position + EPS * cG;
247
247
  #ifdef NUM_COAT_NORMAL_MAPS
248
- if (mat.coatNormalEnabled) { aa.ray.o = si.position + EPS * (dot(bC, cF) >= 0.0 ? bC : -bC); }
248
+ if (mat.coatNormalEnabled) { aa.ray.o = si.position + EPS * (dot(bC, cG) >= 0.0 ? bC : -bC); }
249
249
  #endif
250
250
  }
251
251
 
252
252
  aa.scatteringPdf = scatteringPdf;
253
- iw(aa.ray, aa.ray.o, cF);
253
+ iw(aa.ray, aa.ray.o, cG);
254
254
  if (bl) {
255
255
  aa.isNextRefraction = false;
256
256
  }
@@ -260,7 +260,7 @@ aa.fromEye = false;
260
260
 
261
261
 
262
262
  if (!bl && hj && mat.mediumType > 0) {
263
- if (rA >= 0.0) {
263
+ if (rF >= 0.0) {
264
264
  si.mediumType = mat.mediumType;
265
265
  si.mediumExtinction = mat.mediumExtinction;
266
266
  si.mediumScattering = mat.mediumScattering;
@@ -11,33 +11,33 @@ export default glsl `
11
11
 
12
12
  const uint SHADOW_CATCHER_LIGHT_SAMPLES = 4u;
13
13
 
14
- uint km(uint candidate, uint slot) {
15
- return candidate == 0u ? cv(slot) : cv(9u + (candidate - 1u) * 3u + slot);
14
+ uint ko(uint candidate, uint slot) {
15
+ return candidate == 0u ? cw(slot) : cw(9u + (candidate - 1u) * 3u + slot);
16
16
  }
17
17
 
18
18
  void sampleShadowCatcher(ad si, int bounce, inout Path aa) {
19
- vec3 oH = -aa.ray.d;
19
+ vec3 oK = -aa.ray.d;
20
20
 
21
21
  #if defined(NUM_LIGHTS) || defined(USE_ENVMAP)
22
22
  float visibility = 0.0;
23
23
  for (uint candidate = 0u; candidate < SHADOW_CATCHER_LIGHT_SAMPLES; candidate++) {
24
24
  LightSampleRec lightSample;
25
- vec3 kZ = vec3(
26
- fk(km(candidate, LIGHT_POSITION)),
27
- dz(km(candidate, LIGHT_SELECT))
25
+ vec3 lc = vec3(
26
+ fk(ko(candidate, LIGHT_POSITION)),
27
+ dz(ko(candidate, LIGHT_SELECT))
28
28
  );
29
- sampleLight(si.position, kZ, lightSample, false);
29
+ sampleLight(si.position, lc, lightSample, false);
30
30
 
31
31
  vec3 lightDir = lightSample.direction;
32
32
  float cosThetaL = dot(si.normal, lightDir);
33
- float pq = dot(si.normal, oH) * cosThetaL;
34
- bool mp = false;
35
- if (pq >= 0.0) {
33
+ float pv = dot(si.normal, oK) * cosThetaL;
34
+ bool mt = false;
35
+ if (pv >= 0.0) {
36
36
  Ray ray;
37
37
  iw(ray, si.position + EPS * lightDir, lightDir);
38
- mp = ex(ray, lightSample.dist - EPS, si.triangleIndex);
38
+ mt = ex(ray, lightSample.dist - EPS, si.triangleIndex);
39
39
  }
40
- visibility += mp ? 0.0 : 1.0;
40
+ visibility += mt ? 0.0 : 1.0;
41
41
  }
42
42
 
43
43
  aa.alpha = visibility / float(SHADOW_CATCHER_LIGHT_SAMPLES);
@@ -5,28 +5,28 @@ export default glsl `
5
5
 
6
6
 
7
7
  vec3 aQ(vec3 view, vec2 alpha, vec2 samplePoint) {
8
- vec3 qY = vec3(alpha, 1.0);
9
- vec3 ge = normalize(qY * view);
10
- float tU = min(ge.z, 1.0);
11
- float qD = 1.0 + tU;
12
- float qT = (1.0 - samplePoint.y) * qD;
13
- float rE = samplePoint.y * qD;
14
- float st = qT + (1.0 - tU);
15
- float fi = sqrt(max(0.0, st * rE));
8
+ vec3 rc = vec3(alpha, 1.0);
9
+ vec3 gf = normalize(rc * view);
10
+ float ua = min(gf.z, 1.0);
11
+ float qH = 1.0 + ua;
12
+ float qX = (1.0 - samplePoint.y) * qH;
13
+ float rJ = samplePoint.y * qH;
14
+ float sA = qX + (1.0 - ua);
15
+ float fi = sqrt(max(0.0, sA * rJ));
16
16
  float br = TWOPI * samplePoint.x;
17
- vec3 lt = vec3(
18
- ge.x + fi * cos(br),
19
- ge.y + fi * sin(br),
20
- qT
17
+ vec3 lw = vec3(
18
+ gf.x + fi * cos(br),
19
+ gf.y + fi * sin(br),
20
+ qX
21
21
  );
22
- return normalize(qY * lt);
22
+ return normalize(rc * lw);
23
23
  }
24
24
 
25
- float gE(vec3 oa, vec2 alpha) {
25
+ float gG(vec3 od, vec2 alpha) {
26
26
  vec3 hm = vec3(
27
- oa.x / alpha.x,
28
- oa.y / alpha.y,
29
- oa.z
27
+ od.x / alpha.x,
28
+ od.y / alpha.y,
29
+ od.z
30
30
  );
31
31
  float ap = dot(hm, hm);
32
32
  return 1.0 / (
@@ -39,10 +39,10 @@ float eE = abs(direction.z);
39
39
  if (eE <= 1e-8) {
40
40
  return 0.0;
41
41
  }
42
- vec2 hZ = alpha * direction.xy;
43
- float lu = dot(hZ, hZ)
42
+ vec2 hY = alpha * direction.xy;
43
+ float lA = dot(hY, hY)
44
44
  / (eE * eE);
45
- return 2.0 / (1.0 + sqrt(1.0 + lu));
45
+ return 2.0 / (1.0 + sqrt(1.0 + lA));
46
46
  }
47
47
 
48
48
  float aE(float au) {
@@ -50,25 +50,25 @@ float dg = clamp(1.0 - au, 0.0, 1.0);
50
50
  return pow(dg, 5.0);
51
51
  }
52
52
 
53
- float ct(float L, float cJ) {
53
+ float cu(float L, float cJ) {
54
54
  float iu = clamp(abs(L), 0.0, 1.0);
55
- float kc = cJ * cJ
55
+ float ke = cJ * cJ
56
56
  * max(0.0, 1.0 - iu * iu);
57
- if (kc >= 1.0) {
57
+ if (ke >= 1.0) {
58
58
  return 1.0;
59
59
  }
60
60
 
61
- float lH = sqrt(max(0.0, 1.0 - kc));
62
- float ba = (iu - cJ * lH)
63
- / max(iu + cJ * lH, 1e-8);
64
- float pr = (cJ * iu - lH)
65
- / max(cJ * iu + lH, 1e-8);
61
+ float lK = sqrt(max(0.0, 1.0 - ke));
62
+ float ba = (iu - cJ * lK)
63
+ / max(iu + cJ * lK, 1e-8);
64
+ float pw = (cJ * iu - lK)
65
+ / max(cJ * iu + lK, 1e-8);
66
66
  return 0.5 * (
67
- ba * ba + pr * pr
67
+ ba * ba + pw * pw
68
68
  );
69
69
  }
70
70
 
71
- vec2 gc(vec2 samplePoint) {
71
+ vec2 gd(vec2 samplePoint) {
72
72
  vec2 offset = 2.0 * samplePoint - vec2(1.0);
73
73
  if (offset.x == 0.0 && offset.y == 0.0) {
74
74
  return vec2(0.0);
@@ -88,35 +88,35 @@ return radius * vec2(cos(angle), sin(angle));
88
88
  }
89
89
 
90
90
  vec3 bi(vec2 samplePoint) {
91
- vec2 kv = gc(samplePoint);
91
+ vec2 kx = gd(samplePoint);
92
92
  return vec3(
93
- kv,
94
- sqrt(max(0.0, 1.0 - dot(kv, kv)))
93
+ kx,
94
+ sqrt(max(0.0, 1.0 - dot(kx, kx)))
95
95
  );
96
96
  }
97
97
 
98
- float aF(float pe, float nA) {
99
- float scale = max(pe, nA);
98
+ float aG(float pi, float nD) {
99
+ float scale = max(pi, nD);
100
100
  if (scale <= 0.0) {
101
101
  return 0.0;
102
102
  }
103
- vec2 normalized = vec2(pe, nA) / scale;
104
- vec2 oD = normalized * normalized;
105
- return oD.x / (oD.x + oD.y);
103
+ vec2 normalized = vec2(pi, nD) / scale;
104
+ vec2 oG = normalized * normalized;
105
+ return oG.x / (oG.x + oG.y);
106
106
  }
107
107
 
108
- void aK(in vec3 normal, out vec3 tangent, out vec3 bitangent) {
109
- float ig = normal.z >= 0.0 ? 1.0 : -1.0;
110
- float dW = -1.0 / (ig + normal.z);
108
+ void aL(in vec3 normal, out vec3 tangent, out vec3 bitangent) {
109
+ float ie = normal.z >= 0.0 ? 1.0 : -1.0;
110
+ float dW = -1.0 / (ie + normal.z);
111
111
  float xy = normal.x * normal.y * dW;
112
112
  tangent = vec3(
113
- 1.0 + ig * normal.x * normal.x * dW,
114
- ig * xy,
115
- -ig * normal.x
113
+ 1.0 + ie * normal.x * normal.x * dW,
114
+ ie * xy,
115
+ -ie * normal.x
116
116
  );
117
117
  bitangent = vec3(
118
118
  xy,
119
- ig + normal.y * normal.y * dW,
119
+ ie + normal.y * normal.y * dW,
120
120
  -normal.y
121
121
  );
122
122
  }
@@ -125,40 +125,40 @@ vec3 ai(vec3 rgb, float wavelength) {
125
125
  if (wavelength == 0.0) {
126
126
  return rgb;
127
127
  }
128
- vec3 tB = wavelength > 600.0
128
+ vec3 tG = wavelength > 600.0
129
129
  ? vec3(1.0, 0.0, 0.0)
130
130
  : wavelength > 500.0
131
131
  ? vec3(0.0, 1.0, 0.0)
132
132
  : vec3(0.0, 0.0, 1.0);
133
- return rgb * tB;
133
+ return rgb * tG;
134
134
  }
135
135
 
136
136
  float eK(
137
137
  float wavelength,
138
- float ha,
138
+ float hb,
139
139
  float hk,
140
- float qg
140
+ float qk
141
141
  ) {
142
142
  if (wavelength == 0.0 || hk <= 0.0) {
143
- return ha;
143
+ return hb;
144
144
  }
145
145
 
146
146
  const float FRAUNHOFER_C = 656.3;
147
147
  const float FRAUNHOFER_D = 587.6;
148
148
  const float FRAUNHOFER_F = 486.1;
149
- float jI = 1.0 / (
149
+ float jK = 1.0 / (
150
150
  1.0 / (FRAUNHOFER_F * FRAUNHOFER_F)
151
151
  - 1.0 / (FRAUNHOFER_C * FRAUNHOFER_C)
152
152
  );
153
- float mQ = max(qg / hk, 1e-6);
154
- float qE = (ha - 1.0) * jI / mQ;
155
- float sY = ha
156
- - qE / (FRAUNHOFER_D * FRAUNHOFER_D);
157
- return sY + qE / (wavelength * wavelength);
153
+ float mT = max(qk / hk, 1e-6);
154
+ float qI = (hb - 1.0) * jK / mT;
155
+ float td = hb
156
+ - qI / (FRAUNHOFER_D * FRAUNHOFER_D);
157
+ return td + qI / (wavelength * wavelength);
158
158
  }
159
159
 
160
160
  vec3 fl(
161
- vec3 gt,
161
+ vec3 gu,
162
162
  float anisotropy,
163
163
  vec2 samplePoint
164
164
  ) {
@@ -167,21 +167,21 @@ if (abs(anisotropy) < 0.001) {
167
167
  au = 1.0 - 2.0 * samplePoint.y;
168
168
  }
169
169
  else {
170
- float iU = (1.0 - anisotropy * anisotropy)
170
+ float iV = (1.0 - anisotropy * anisotropy)
171
171
  / (1.0 + anisotropy - 2.0 * anisotropy * samplePoint.y);
172
172
  au = (
173
- iU * iU - 1.0 - anisotropy * anisotropy
173
+ iV * iV - 1.0 - anisotropy * anisotropy
174
174
  ) / (2.0 * anisotropy);
175
175
  }
176
176
 
177
- float tR = sqrt(max(0.0, 1.0 - au * au));
177
+ float tW = sqrt(max(0.0, 1.0 - au * au));
178
178
  float br = TWOPI * samplePoint.x;
179
179
  vec3 tangent;
180
180
  vec3 bitangent;
181
- aK(gt, tangent, bitangent);
182
- return tangent * (tR * cos(br))
183
- + bitangent * (tR * sin(br))
184
- + gt * au;
181
+ aL(gu, tangent, bitangent);
182
+ return tangent * (tW * cos(br))
183
+ + bitangent * (tW * sin(br))
184
+ + gu * au;
185
185
  }
186
186
 
187
187
  float bD(float au, float anisotropy) {