@meimu/mutracer 0.1.3 → 0.1.4

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 (118) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +4114 -4015
  3. package/docs/api.md +11 -9
  4. package/docs/threejs.md +30 -4
  5. package/lib/Engine.js +18 -1
  6. package/lib/Engine.js.map +1 -1
  7. package/lib/main.d.ts +1 -1
  8. package/lib/main.js.map +1 -1
  9. package/lib/oidn.d.ts +1 -1
  10. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  11. package/lib/renderer/MaterialTable.d.ts +1 -0
  12. package/lib/renderer/MaterialTable.js +10 -4
  13. package/lib/renderer/MaterialTable.js.map +1 -1
  14. package/lib/renderer/WGPUBloomPass.js +18 -18
  15. package/lib/renderer/WGPUFullQuadPass.js +6 -6
  16. package/lib/renderer/WGPUJNLMDenoiser.js +69 -69
  17. package/lib/renderer/WGPURayTraceOutput.js +14 -14
  18. package/lib/renderer/WGPURayTracePass.d.ts +2 -0
  19. package/lib/renderer/WGPURayTracePass.js +12 -6
  20. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  21. package/lib/renderer/WGPURenderingPipeline.js +15 -15
  22. package/lib/renderer/WebGLJNLMDenoiser.js +69 -69
  23. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  24. package/lib/renderer/WebGLRayTracePass.d.ts +1 -0
  25. package/lib/renderer/WebGLRayTracePass.js +7 -1
  26. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  27. package/lib/renderer/envMapCreation.d.ts +5 -1
  28. package/lib/renderer/envMapCreation.js +42 -5
  29. package/lib/renderer/envMapCreation.js.map +1 -1
  30. package/lib/renderer/geometryUpdates.js +1 -1
  31. package/lib/renderer/geometryUpdates.js.map +1 -1
  32. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  33. package/lib/renderer/glsl/chunks/envMap.glsl.js +66 -54
  34. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  35. package/lib/renderer/glsl/chunks/intersect.glsl.js +316 -310
  36. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  37. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +151 -119
  38. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  39. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +414 -414
  40. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  41. package/lib/renderer/glsl/chunks/random.glsl.js +3 -3
  42. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +40 -39
  43. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  44. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +69 -69
  45. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +78 -78
  46. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
  47. package/lib/renderer/glsl/chunks/sampling.glsl.js +75 -75
  48. package/lib/renderer/glsl/chunks/sobol.glsl.js +61 -61
  49. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  50. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
  51. package/lib/renderer/glsl/depthQuery.frag.js +5 -5
  52. package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
  53. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
  54. package/lib/renderer/glsl/rayTrace.frag.js +133 -133
  55. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  56. package/lib/renderer/glsl/shadowCatcher.frag.js +9 -9
  57. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  58. package/lib/renderer/glsl/webglPipeline.frag.js +52 -52
  59. package/lib/renderer/lightsUtil.js +6 -4
  60. package/lib/renderer/lightsUtil.js.map +1 -1
  61. package/lib/renderer/materialChanges.js +1 -1
  62. package/lib/renderer/materialChanges.js.map +1 -1
  63. package/lib/renderer/materialComparison.generated.js +36 -18
  64. package/lib/renderer/materialComparison.generated.js.map +1 -1
  65. package/lib/renderer/prepareMeshBVH.js +2 -2
  66. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  67. package/lib/renderer/sceneChangeDetector.js +4 -1
  68. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  69. package/lib/renderer/sceneLightChanges.js +3 -2
  70. package/lib/renderer/sceneLightChanges.js.map +1 -1
  71. package/lib/renderer/scratchSampling.js +18 -18
  72. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  73. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  74. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +39 -31
  75. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  76. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +475 -469
  77. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  78. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +8 -8
  79. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +93 -59
  80. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  81. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +469 -469
  82. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +1 -1
  83. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +117 -120
  84. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -1
  85. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  86. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +25 -22
  87. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  88. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +127 -127
  89. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +136 -136
  90. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +6 -6
  91. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +73 -73
  92. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +62 -62
  93. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
  94. package/lib/renderer/wgsl/compose.frag.wgsl.js +105 -105
  95. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  96. package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
  97. package/lib/renderer/wgsl/depthQuery.wgsl.js +5 -5
  98. package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
  99. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  100. package/lib/renderer/wgsl/rayTrace.compute.js +251 -248
  101. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  102. package/lib/scene/EnvironmentLight.d.ts +9 -3
  103. package/lib/scene/EnvironmentLight.js +9 -2
  104. package/lib/scene/EnvironmentLight.js.map +1 -1
  105. package/lib/scene/Scene.d.ts +4 -0
  106. package/lib/scene/Scene.js.map +1 -1
  107. package/lib/scene/SpotLight.d.ts +2 -2
  108. package/lib/scene/SpotLight.js +1 -1
  109. package/lib/scene/SpotLight.js.map +1 -1
  110. package/lib/scene/Texture.d.ts +17 -6
  111. package/lib/scene/Texture.js +13 -4
  112. package/lib/scene/Texture.js.map +1 -1
  113. package/lib/util/fromTHREE.js +151 -29
  114. package/lib/util/fromTHREE.js.map +1 -1
  115. package/lib/version.d.ts +1 -1
  116. package/lib/version.js +1 -1
  117. package/lib/version.js.map +1 -1
  118. package/package.json +1 -1
@@ -2,33 +2,33 @@
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 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)));
5
+ vec3 mU(ad si, J mat, ag prepared, inout Path aa, vec3 ffnormal, bool gE) {
6
+ float mD = 1.0;
7
+ vec3 ln = vec3(fo(cw(LIGHT_POSITION)), dz(cw(LIGHT_SELECT)));
8
8
 
9
9
  LightSampleRec lightSample;
10
- sampleLight(si.position, lc, lightSample, false);
10
+ sampleLight(si.position, ln, lightSample, false);
11
11
  lightSample.emission = ai(lightSample.emission, bf);
12
12
 
13
13
  vec3 lightDir = lightSample.direction;
14
- vec3 oK = -aa.ray.d;
15
- float fd = lightSample.pdf;
14
+ vec3 oT = -aa.ray.d;
15
+ float fg = lightSample.pdf;
16
16
 
17
17
 
18
18
 
19
19
 
20
20
  float cosThetaL = dot(ffnormal, lightDir);
21
21
  #ifdef NUM_COAT_NORMAL_MAPS
22
- if (gy && mat.coatNormalEnabled) { cosThetaL = dot(mat.geometricNormal, lightDir); }
22
+ if (gE && mat.coatNormalEnabled) { cosThetaL = dot(mat.geometricNormal, lightDir); }
23
23
  #endif
24
24
 
25
- if (fd <= 0.0 || max(max(lightSample.emission.x, lightSample.emission.y), lightSample.emission.z) <= 0.0) {
25
+ if (fg <= 0.0 || max(max(lightSample.emission.x, lightSample.emission.y), lightSample.emission.z) <= 0.0) {
26
26
  return vec3(0.0);
27
27
  }
28
28
 
29
29
  float scatteringPdf = 0.0;
30
30
  vec3 f = vec3(0.0);
31
- if (gy) {
31
+ if (gE) {
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(oK, lightDir),
39
+ dot(oT, 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 mp;
50
- vec3 hd = si.position + EPS * lightDir;
51
- if (gy) {
49
+ Ray mA;
50
+ vec3 hi = si.position + EPS * lightDir;
51
+ if (gE) {
52
52
  const float bZ = 0.1;
53
53
  float dr = dot(si.normal, lightDir);
54
54
  #ifdef NUM_COAT_NORMAL_MAPS
@@ -56,73 +56,73 @@ 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 hO = dot(geometricNormal, lightDir);
60
- float ot = dr < bZ
59
+ float hS = dot(geometricNormal, lightDir);
60
+ float oC = dr < bZ
61
61
  ? clamp(
62
- 2.0 - (hO + dr) / bZ,
62
+ 2.0 - (hS + dr) / bZ,
63
63
  0.0,
64
64
  1.0
65
65
  )
66
- : clamp(1.0 - hO / bZ, 0.0, 1.0);
67
- hd += si.shadowOffset * ot;
66
+ : clamp(1.0 - hS / bZ, 0.0, 1.0);
67
+ hi += si.shadowOffset * oC;
68
68
  }
69
- iw(mp, hd, lightDir);
70
- if (ex(mp, lightSample.dist - EPS, si.triangleIndex)) {
69
+ iC(mA, hi, lightDir);
70
+ if (ex(mA, 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 (gy && cosThetaL < 0.0 && lc.z < envLightSelectionPmf) {
78
- vec4 background = cx(mp.o, lightDir);
77
+ if (gE && cosThetaL < 0.0 && ln.z < envLightSelectionPmf) {
78
+ vec4 background = cx(mA.o, lightDir);
79
79
  lightSample.emission = ai(background.rgb * background.a, bf);
80
80
  }
81
81
  #endif
82
82
 
83
83
 
84
84
 
85
- float eW = lightSample.isDelta
85
+ float fa = lightSample.isDelta
86
86
  ? 1.0
87
- : aG(fd, scatteringPdf);
88
- return eW > 0.0
89
- ? eW * lightSample.emission * f / fd
87
+ : aG(fg, scatteringPdf);
88
+ return fa > 0.0
89
+ ? fa * lightSample.emission * f / fg
90
90
  : vec3(0.0);
91
91
  }
92
92
 
93
93
  #ifdef NUM_COAT_NORMAL_MAPS
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;
94
+ vec3 fE(vec3 pG, vec3 tq, vec3 view) {
95
+ bool qY = dot(tq, view) >= 0.0;
96
+ vec3 uo = qY ? tq : -tq;
97
+ vec3 qX = qY ? pG : -pG;
98
+ if (dot(pG, tq) <= 0.0 || dot(qX, view) <= 1e-6) { return uo; }
99
+ return qX;
100
100
  }
101
101
  #endif
102
- void lR(inout ad si, J mat, inout Path aa) {
103
- vec3 uj = vec3(fk(cw(BSDF_DIRECTION)), dz(cw(BSDF_LOBE)));
102
+ void mc(inout ad si, J mat, inout Path aa) {
103
+ vec3 ur = vec3(fo(cw(BSDF_DIRECTION)), dz(cw(BSDF_LOBE)));
104
104
  #ifdef NUM_COAT_NORMAL_MAPS
105
105
  vec3 bC = si.faceNormal;
106
- vec3 mv = si.normal;
106
+ vec3 mF = si.normal;
107
107
  #endif
108
- float rF = -dot(si.faceNormal, aa.ray.d);
109
- float sw = -dot(si.normal, aa.ray.d);
108
+ float rN = -dot(si.faceNormal, aa.ray.d);
109
+ float sG = -dot(si.normal, aa.ray.d);
110
110
  if ((mat.transmissionWeight > 0.0 || mat.subsurfaceWeight > 0.0) && mat.thinWalled) {
111
111
 
112
- if (rF < 0.0) {
112
+ if (rN < 0.0) {
113
113
  si.faceNormal = -si.faceNormal;
114
- rF = -rF;
114
+ rN = -rN;
115
115
  }
116
- if (sw < 0.0) {
116
+ if (sG < 0.0) {
117
117
  si.normal = -si.normal;
118
- sw = -sw;
118
+ sG = -sG;
119
119
  }
120
120
  }
121
121
 
122
122
 
123
- bool pM = rF >= 0.0 && sw < 0.0;
124
- float ndv = pM ? rF : sw;
125
- vec3 normal = pM ? si.faceNormal : si.normal;
123
+ bool pU = rN >= 0.0 && sG < 0.0;
124
+ float ndv = pU ? rN : sG;
125
+ vec3 normal = pU ? si.faceNormal : si.normal;
126
126
 
127
127
  mat.inside = ndv <= 0.0 && !mat.thinWalled;
128
128
 
@@ -131,12 +131,12 @@ vec3 ffnormal = ndv >= 0.0 ? normal : -normal;
131
131
  #ifdef NUM_COAT_NORMAL_MAPS
132
132
  if (mat.coatNormalEnabled) {
133
133
  vec3 view = -aa.ray.d;
134
- float fW = dot(bC, view);
135
- mat.geometricNormal = fW >= 0.0 ? bC : -bC;
136
- ffnormal = fB(mv, bC, view);
137
- mat.coatNormal = fB(si.coatNormal, bC, view);
138
- mat.inside = fW <= 0.0 && !mat.thinWalled;
139
- mat.relativeIor = (fW > 0.0 || mat.thinWalled) ? 1.0 / mat.specularIor : mat.specularIor;
134
+ float ga = dot(bC, view);
135
+ mat.geometricNormal = ga >= 0.0 ? bC : -bC;
136
+ ffnormal = fE(mF, bC, view);
137
+ mat.coatNormal = fE(si.coatNormal, bC, view);
138
+ mat.inside = ga <= 0.0 && !mat.thinWalled;
139
+ mat.relativeIor = (ga > 0.0 || mat.thinWalled) ? 1.0 / mat.specularIor : mat.specularIor;
140
140
  }
141
141
  #endif
142
142
 
@@ -145,47 +145,47 @@ float scatteringPdf;
145
145
  vec3 cG;
146
146
  aa.scatteringIsDelta = false;
147
147
  bool bl = false;
148
- bool hj = false;
148
+ bool hn = false;
149
149
  ag prepared;
150
150
 
151
151
  #ifdef HAS_MEDIUM
152
152
  int mediumType = si.mediumType;
153
153
  float d = distance(si.position, aa.ray.o);
154
- vec3 nh = aa.ray.o;
154
+ vec3 nv = aa.ray.o;
155
155
  vec3 extinction = si.mediumExtinction;
156
156
  vec3 scattering = min(si.mediumScattering, extinction);
157
- float sr = max(max(extinction.x, extinction.y), extinction.z);
158
- if (mediumType > 0 && sr > 0.0) {
157
+ float sC = max(max(extinction.x, extinction.y), extinction.z);
158
+ if (mediumType > 0 && sC > 0.0) {
159
159
 
160
160
 
161
161
 
162
162
 
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)
163
+ int nk = min(int(dz(cw(MEDIUM_CHANNEL)) * 3.0), 2);
164
+ float fD = extinction[nk];
165
+ float ih = fD > 0.0
166
+ ? min(-log(max(dz(cw(MEDIUM_DISTANCE)), 1e-7)) / fD, d)
167
167
  : d;
168
- bl = ib < d;
169
- vec3 ew = exp(-extinction * ib);
170
- vec3 nP = bl
168
+ bl = ih < d;
169
+ vec3 ew = exp(-extinction * ih);
170
+ vec3 oa = bl
171
171
  ? extinction * ew
172
172
  : ew;
173
- float nA = max(
174
- (nP.x + nP.y + nP.z) / 3.0,
173
+ float nL = max(
174
+ (oa.x + oa.y + oa.z) / 3.0,
175
175
  1e-8
176
176
  );
177
177
  if (bl) {
178
- aa.beta *= ew * scattering / nA;
178
+ aa.beta *= ew * scattering / nL;
179
179
 
180
- aa.ray.o = nh + ib * aa.ray.d;
180
+ aa.ray.o = nv + ih * aa.ray.d;
181
181
  si.position = aa.ray.o;
182
- aa.li += mJ(si, mat, prepared, aa, ffnormal, false) * aa.beta;
182
+ aa.li += mU(si, mat, prepared, aa, ffnormal, false) * aa.beta;
183
183
 
184
184
 
185
- cG = fl(
185
+ cG = fp(
186
186
  -aa.ray.d,
187
187
  si.mediumAnisotropy,
188
- fk(cw(PHASE_DIRECTION))
188
+ fo(cw(PHASE_DIRECTION))
189
189
  );
190
190
  scatteringPdf = bD(
191
191
  dot(cG, -aa.ray.d),
@@ -193,7 +193,7 @@ si.mediumAnisotropy
193
193
  );
194
194
  }
195
195
  else {
196
- aa.beta *= ew / nA;
196
+ aa.beta *= ew / nL;
197
197
  }
198
198
  }
199
199
  #endif
@@ -205,21 +205,21 @@ if (mat.materialType == UNLIT) {
205
205
  aa.abort = true;
206
206
  return;
207
207
  }
208
- vec3 pK = vec3(0.0);
208
+ vec3 pS = vec3(0.0);
209
209
  #ifdef USE_TANGENT
210
- pK = si.tangent;
210
+ pS = 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(pK, mat, -aa.ray.d, ffnormal);
217
- aa.li += mJ(si, mat, prepared, aa, ffnormal, true) * aa.beta;
216
+ prepared = eH(pS, mat, -aa.ray.d, ffnormal);
217
+ aa.li += mU(si, mat, prepared, aa, ffnormal, true) * aa.beta;
218
218
 
219
219
  bool isNextRefraction;
220
220
  vec3 f = dv(
221
221
  prepared,
222
- uj,
222
+ ur,
223
223
  cG,
224
224
  scatteringPdf,
225
225
  isNextRefraction
@@ -238,7 +238,7 @@ aa.abort = true;
238
238
  return;
239
239
  }
240
240
  aa.beta *= f / scatteringPdf;
241
- hj = !mat.thinWalled &&
241
+ hn = !mat.thinWalled &&
242
242
  isNextRefraction;
243
243
  aa.isNextRefraction = isNextRefraction;
244
244
 
@@ -250,7 +250,7 @@ if (mat.coatNormalEnabled) { aa.ray.o = si.position + EPS * (dot(bC, cG) >= 0.0
250
250
  }
251
251
 
252
252
  aa.scatteringPdf = scatteringPdf;
253
- iw(aa.ray, aa.ray.o, cG);
253
+ iC(aa.ray, aa.ray.o, cG);
254
254
  if (bl) {
255
255
  aa.isNextRefraction = false;
256
256
  }
@@ -259,8 +259,8 @@ aa.fromEye = false;
259
259
  #ifdef HAS_MEDIUM
260
260
 
261
261
 
262
- if (!bl && hj && mat.mediumType > 0) {
263
- if (rF >= 0.0) {
262
+ if (!bl && hn && mat.mediumType > 0) {
263
+ if (rN >= 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 ko(uint candidate, uint slot) {
14
+ uint ky(uint candidate, uint slot) {
15
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 oK = -aa.ray.d;
19
+ vec3 oT = -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 lc = vec3(
26
- fk(ko(candidate, LIGHT_POSITION)),
27
- dz(ko(candidate, LIGHT_SELECT))
25
+ vec3 ln = vec3(
26
+ fo(ky(candidate, LIGHT_POSITION)),
27
+ dz(ky(candidate, LIGHT_SELECT))
28
28
  );
29
- sampleLight(si.position, lc, lightSample, false);
29
+ sampleLight(si.position, ln, lightSample, false);
30
30
 
31
31
  vec3 lightDir = lightSample.direction;
32
32
  float cosThetaL = dot(si.normal, lightDir);
33
- float pv = dot(si.normal, oK) * cosThetaL;
34
- bool mt = false;
35
- if (pv >= 0.0) {
33
+ float pM = dot(si.normal, oT) * cosThetaL;
34
+ bool mD = false;
35
+ if (pM >= 0.0) {
36
36
  Ray ray;
37
- iw(ray, si.position + EPS * lightDir, lightDir);
38
- mt = ex(ray, lightSample.dist - EPS, si.triangleIndex);
37
+ iC(ray, si.position + EPS * lightDir, lightDir);
38
+ mD = ex(ray, lightSample.dist - EPS, si.triangleIndex);
39
39
  }
40
- visibility += mt ? 0.0 : 1.0;
40
+ visibility += mD ? 0.0 : 1.0;
41
41
  }
42
42
 
43
43
  aa.alpha = visibility / float(SHADOW_CATCHER_LIGHT_SAMPLES);
@@ -5,70 +5,70 @@ export default glsl `
5
5
 
6
6
 
7
7
  vec3 aQ(vec3 view, vec2 alpha, vec2 samplePoint) {
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));
8
+ vec3 rm = vec3(alpha, 1.0);
9
+ vec3 gj = normalize(rm * view);
10
+ float uh = min(gj.z, 1.0);
11
+ float qQ = 1.0 + uh;
12
+ float rh = (1.0 - samplePoint.y) * qQ;
13
+ float rR = samplePoint.y * qQ;
14
+ float sI = rh + (1.0 - uh);
15
+ float fl = sqrt(max(0.0, sI * rR));
16
16
  float br = TWOPI * samplePoint.x;
17
- vec3 lw = vec3(
18
- gf.x + fi * cos(br),
19
- gf.y + fi * sin(br),
20
- qX
17
+ vec3 lJ = vec3(
18
+ gj.x + fl * cos(br),
19
+ gj.y + fl * sin(br),
20
+ rh
21
21
  );
22
- return normalize(rc * lw);
22
+ return normalize(rm * lJ);
23
23
  }
24
24
 
25
- float gG(vec3 od, vec2 alpha) {
26
- vec3 hm = vec3(
27
- od.x / alpha.x,
28
- od.y / alpha.y,
29
- od.z
25
+ float gK(vec3 oq, vec2 alpha) {
26
+ vec3 hr = vec3(
27
+ oq.x / alpha.x,
28
+ oq.y / alpha.y,
29
+ oq.z
30
30
  );
31
- float ap = dot(hm, hm);
31
+ float ap = dot(hr, hr);
32
32
  return 1.0 / (
33
33
  PI * alpha.x * alpha.y * ap * ap
34
34
  );
35
35
  }
36
36
 
37
37
  float bk(vec3 direction, vec2 alpha) {
38
- float eE = abs(direction.z);
39
- if (eE <= 1e-8) {
38
+ float eF = abs(direction.z);
39
+ if (eF <= 1e-8) {
40
40
  return 0.0;
41
41
  }
42
- vec2 hY = alpha * direction.xy;
43
- float lA = dot(hY, hY)
44
- / (eE * eE);
45
- return 2.0 / (1.0 + sqrt(1.0 + lA));
42
+ vec2 ic = alpha * direction.xy;
43
+ float lK = dot(ic, ic)
44
+ / (eF * eF);
45
+ return 2.0 / (1.0 + sqrt(1.0 + lK));
46
46
  }
47
47
 
48
48
  float aE(float au) {
49
- float dg = clamp(1.0 - au, 0.0, 1.0);
50
- return pow(dg, 5.0);
49
+ float di = clamp(1.0 - au, 0.0, 1.0);
50
+ return pow(di, 5.0);
51
51
  }
52
52
 
53
53
  float cu(float L, float cJ) {
54
- float iu = clamp(abs(L), 0.0, 1.0);
55
- float ke = cJ * cJ
56
- * max(0.0, 1.0 - iu * iu);
57
- if (ke >= 1.0) {
54
+ float iA = clamp(abs(L), 0.0, 1.0);
55
+ float kl = cJ * cJ
56
+ * max(0.0, 1.0 - iA * iA);
57
+ if (kl >= 1.0) {
58
58
  return 1.0;
59
59
  }
60
60
 
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);
61
+ float lU = sqrt(max(0.0, 1.0 - kl));
62
+ float ba = (iA - cJ * lU)
63
+ / max(iA + cJ * lU, 1e-8);
64
+ float pN = (cJ * iA - lU)
65
+ / max(cJ * iA + lU, 1e-8);
66
66
  return 0.5 * (
67
- ba * ba + pw * pw
67
+ ba * ba + pN * pN
68
68
  );
69
69
  }
70
70
 
71
- vec2 gd(vec2 samplePoint) {
71
+ vec2 gh(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 kx = gd(samplePoint);
91
+ vec2 kF = gh(samplePoint);
92
92
  return vec3(
93
- kx,
94
- sqrt(max(0.0, 1.0 - dot(kx, kx)))
93
+ kF,
94
+ sqrt(max(0.0, 1.0 - dot(kF, kF)))
95
95
  );
96
96
  }
97
97
 
98
- float aG(float pi, float nD) {
99
- float scale = max(pi, nD);
98
+ float aG(float pr, float nO) {
99
+ float scale = max(pr, nO);
100
100
  if (scale <= 0.0) {
101
101
  return 0.0;
102
102
  }
103
- vec2 normalized = vec2(pi, nD) / scale;
104
- vec2 oG = normalized * normalized;
105
- return oG.x / (oG.x + oG.y);
103
+ vec2 normalized = vec2(pr, nO) / scale;
104
+ vec2 oP = normalized * normalized;
105
+ return oP.x / (oP.x + oP.y);
106
106
  }
107
107
 
108
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);
109
+ float ik = normal.z >= 0.0 ? 1.0 : -1.0;
110
+ float dW = -1.0 / (ik + normal.z);
111
111
  float xy = normal.x * normal.y * dW;
112
112
  tangent = vec3(
113
- 1.0 + ie * normal.x * normal.x * dW,
114
- ie * xy,
115
- -ie * normal.x
113
+ 1.0 + ik * normal.x * normal.x * dW,
114
+ ik * xy,
115
+ -ik * normal.x
116
116
  );
117
117
  bitangent = vec3(
118
118
  xy,
119
- ie + normal.y * normal.y * dW,
119
+ ik + 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 tG = wavelength > 600.0
128
+ vec3 tN = 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 * tG;
133
+ return rgb * tN;
134
134
  }
135
135
 
136
- float eK(
136
+ float eN(
137
137
  float wavelength,
138
- float hb,
139
- float hk,
140
- float qk
138
+ float hg,
139
+ float hp,
140
+ float qs
141
141
  ) {
142
- if (wavelength == 0.0 || hk <= 0.0) {
143
- return hb;
142
+ if (wavelength == 0.0 || hp <= 0.0) {
143
+ return hg;
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 jK = 1.0 / (
149
+ float jR = 1.0 / (
150
150
  1.0 / (FRAUNHOFER_F * FRAUNHOFER_F)
151
151
  - 1.0 / (FRAUNHOFER_C * FRAUNHOFER_C)
152
152
  );
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);
153
+ float nh = max(qs / hp, 1e-6);
154
+ float qR = (hg - 1.0) * jR / nh;
155
+ float tl = hg
156
+ - qR / (FRAUNHOFER_D * FRAUNHOFER_D);
157
+ return tl + qR / (wavelength * wavelength);
158
158
  }
159
159
 
160
- vec3 fl(
161
- vec3 gu,
160
+ vec3 fp(
161
+ vec3 gy,
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 iV = (1.0 - anisotropy * anisotropy)
170
+ float ja = (1.0 - anisotropy * anisotropy)
171
171
  / (1.0 + anisotropy - 2.0 * anisotropy * samplePoint.y);
172
172
  au = (
173
- iV * iV - 1.0 - anisotropy * anisotropy
173
+ ja * ja - 1.0 - anisotropy * anisotropy
174
174
  ) / (2.0 * anisotropy);
175
175
  }
176
176
 
177
- float tW = sqrt(max(0.0, 1.0 - au * au));
177
+ float ud = sqrt(max(0.0, 1.0 - au * au));
178
178
  float br = TWOPI * samplePoint.x;
179
179
  vec3 tangent;
180
180
  vec3 bitangent;
181
- aL(gu, tangent, bitangent);
182
- return tangent * (tW * cos(br))
183
- + bitangent * (tW * sin(br))
184
- + gu * au;
181
+ aL(gy, tangent, bitangent);
182
+ return tangent * (ud * cos(br))
183
+ + bitangent * (ud * sin(br))
184
+ + gy * au;
185
185
  }
186
186
 
187
187
  float bD(float au, float anisotropy) {