@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
@@ -4,70 +4,70 @@ export default /*wgsl*/ `
4
4
 
5
5
 
6
6
  fn aQ(view: vec3f, alpha: vec2f, samplePoint: vec2f) -> vec3f {
7
- let rc = vec3f(alpha, 1.0);
8
- let gf = normalize(rc * view);
9
- let ua = min(gf.z, 1.0);
10
- let qH = 1.0 + ua;
11
- let qX = (1.0 - samplePoint.y) * qH;
12
- let rJ = samplePoint.y * qH;
13
- let sA = qX + (1.0 - ua);
14
- let fi = sqrt(max(0.0, sA * rJ));
7
+ let rm = vec3f(alpha, 1.0);
8
+ let gj = normalize(rm * view);
9
+ let uh = min(gj.z, 1.0);
10
+ let qQ = 1.0 + uh;
11
+ let rh = (1.0 - samplePoint.y) * qQ;
12
+ let rR = samplePoint.y * qQ;
13
+ let sI = rh + (1.0 - uh);
14
+ let fl = sqrt(max(0.0, sI * rR));
15
15
  let br = TWOPI * samplePoint.x;
16
- let lw = vec3f(
17
- gf.x + fi * cos(br),
18
- gf.y + fi * sin(br),
19
- qX
16
+ let lJ = vec3f(
17
+ gj.x + fl * cos(br),
18
+ gj.y + fl * sin(br),
19
+ rh
20
20
  );
21
- return normalize(rc * lw);
21
+ return normalize(rm * lJ);
22
22
  }
23
23
 
24
- fn gG(od: vec3f, alpha: vec2f) -> f32 {
25
- let hm = vec3f(
26
- od.x / alpha.x,
27
- od.y / alpha.y,
28
- od.z
24
+ fn gK(oq: vec3f, alpha: vec2f) -> f32 {
25
+ let hr = vec3f(
26
+ oq.x / alpha.x,
27
+ oq.y / alpha.y,
28
+ oq.z
29
29
  );
30
- let ap = dot(hm, hm);
30
+ let ap = dot(hr, hr);
31
31
  return 1.0 / (
32
32
  PI * alpha.x * alpha.y * ap * ap
33
33
  );
34
34
  }
35
35
 
36
36
  fn bk(direction: vec3f, alpha: vec2f) -> f32 {
37
- let eE = abs(direction.z);
38
- if (eE <= 1e-8) {
37
+ let eF = abs(direction.z);
38
+ if (eF <= 1e-8) {
39
39
  return 0.0;
40
40
  }
41
- let hY = alpha * direction.xy;
42
- let lA = dot(hY, hY)
43
- / (eE * eE);
44
- return 2.0 / (1.0 + sqrt(1.0 + lA));
41
+ let ic = alpha * direction.xy;
42
+ let lK = dot(ic, ic)
43
+ / (eF * eF);
44
+ return 2.0 / (1.0 + sqrt(1.0 + lK));
45
45
  }
46
46
 
47
47
  fn aE(au: f32) -> f32 {
48
- let dg = clamp(1.0 - au, 0.0, 1.0);
49
- return pow(dg, 5.0);
48
+ let di = clamp(1.0 - au, 0.0, 1.0);
49
+ return pow(di, 5.0);
50
50
  }
51
51
 
52
52
  fn cu(L: f32, cJ: f32) -> f32 {
53
- let iu = clamp(abs(L), 0.0, 1.0);
54
- let ke = cJ * cJ
55
- * max(0.0, 1.0 - iu * iu);
56
- if (ke >= 1.0) {
53
+ let iA = clamp(abs(L), 0.0, 1.0);
54
+ let kl = cJ * cJ
55
+ * max(0.0, 1.0 - iA * iA);
56
+ if (kl >= 1.0) {
57
57
  return 1.0;
58
58
  }
59
59
 
60
- let lK = sqrt(max(0.0, 1.0 - ke));
61
- let ba = (iu - cJ * lK)
62
- / max(iu + cJ * lK, 1e-8);
63
- let pw = (cJ * iu - lK)
64
- / max(cJ * iu + lK, 1e-8);
60
+ let lU = sqrt(max(0.0, 1.0 - kl));
61
+ let ba = (iA - cJ * lU)
62
+ / max(iA + cJ * lU, 1e-8);
63
+ let pN = (cJ * iA - lU)
64
+ / max(cJ * iA + lU, 1e-8);
65
65
  return 0.5 * (
66
- ba * ba + pw * pw
66
+ ba * ba + pN * pN
67
67
  );
68
68
  }
69
69
 
70
- fn gd(samplePoint: vec2f) -> vec2f {
70
+ fn gh(samplePoint: vec2f) -> vec2f {
71
71
  let offset = 2.0 * samplePoint - vec2f(1.0);
72
72
  if (offset.x == 0.0 && offset.y == 0.0) {
73
73
  return vec2f(0.0);
@@ -87,21 +87,21 @@ return radius * vec2f(cos(angle), sin(angle));
87
87
  }
88
88
 
89
89
  fn bi(samplePoint: vec2f) -> vec3f {
90
- let kx = gd(samplePoint);
90
+ let kF = gh(samplePoint);
91
91
  return vec3f(
92
- kx,
93
- sqrt(max(0.0, 1.0 - dot(kx, kx)))
92
+ kF,
93
+ sqrt(max(0.0, 1.0 - dot(kF, kF)))
94
94
  );
95
95
  }
96
96
 
97
- fn aG(pi: f32, nD: f32) -> f32 {
98
- let scale = max(pi, nD);
97
+ fn aG(pr: f32, nO: f32) -> f32 {
98
+ let scale = max(pr, nO);
99
99
  if (scale <= 0.0) {
100
100
  return 0.0;
101
101
  }
102
- let normalized = vec2f(pi, nD) / scale;
103
- let oG = normalized * normalized;
104
- return oG.x / (oG.x + oG.y);
102
+ let normalized = vec2f(pr, nO) / scale;
103
+ let oP = normalized * normalized;
104
+ return oP.x / (oP.x + oP.y);
105
105
  }
106
106
 
107
107
  fn aL(
@@ -109,17 +109,17 @@ normal: vec3f,
109
109
  tangent: ptr<function, vec3f>,
110
110
  bitangent: ptr<function, vec3f>
111
111
  ) {
112
- let ie = select(-1.0, 1.0, normal.z >= 0.0);
113
- let dW = -1.0 / (ie + normal.z);
112
+ let ik = select(-1.0, 1.0, normal.z >= 0.0);
113
+ let dW = -1.0 / (ik + normal.z);
114
114
  let xy = normal.x * normal.y * dW;
115
115
  *tangent = vec3f(
116
- 1.0 + ie * normal.x * normal.x * dW,
117
- ie * xy,
118
- -ie * normal.x
116
+ 1.0 + ik * normal.x * normal.x * dW,
117
+ ik * xy,
118
+ -ik * normal.x
119
119
  );
120
120
  *bitangent = vec3f(
121
121
  xy,
122
- ie + normal.y * normal.y * dW,
122
+ ik + normal.y * normal.y * dW,
123
123
  -normal.y
124
124
  );
125
125
  }
@@ -137,32 +137,32 @@ return vec3f(0.0, rgb.g, 0.0);
137
137
  return vec3f(0.0, 0.0, rgb.b);
138
138
  }
139
139
 
140
- fn eK(
140
+ fn eN(
141
141
  wavelength: f32,
142
- hb: f32,
143
- hk: f32,
144
- qk: f32
142
+ hg: f32,
143
+ hp: f32,
144
+ qs: f32
145
145
  ) -> f32 {
146
- if (wavelength == 0.0 || hk <= 0.0) {
147
- return hb;
146
+ if (wavelength == 0.0 || hp <= 0.0) {
147
+ return hg;
148
148
  }
149
149
 
150
150
  let FRAUNHOFER_C = 656.3;
151
151
  let FRAUNHOFER_D = 587.6;
152
152
  let FRAUNHOFER_F = 486.1;
153
- let jK = 1.0 / (
153
+ let jR = 1.0 / (
154
154
  1.0 / (FRAUNHOFER_F * FRAUNHOFER_F)
155
155
  - 1.0 / (FRAUNHOFER_C * FRAUNHOFER_C)
156
156
  );
157
- let mT = max(qk / hk, 1e-6);
158
- let qI = (hb - 1.0) * jK / mT;
159
- let td = hb
160
- - qI / (FRAUNHOFER_D * FRAUNHOFER_D);
161
- return td + qI / (wavelength * wavelength);
157
+ let nh = max(qs / hp, 1e-6);
158
+ let qR = (hg - 1.0) * jR / nh;
159
+ let tl = hg
160
+ - qR / (FRAUNHOFER_D * FRAUNHOFER_D);
161
+ return tl + qR / (wavelength * wavelength);
162
162
  }
163
163
 
164
- fn fl(
165
- gu: vec3f,
164
+ fn fp(
165
+ gy: vec3f,
166
166
  anisotropy: f32,
167
167
  samplePoint: vec2f
168
168
  ) -> vec3f {
@@ -171,21 +171,21 @@ if (abs(anisotropy) < 0.001) {
171
171
  au = 1.0 - 2.0 * samplePoint.y;
172
172
  }
173
173
  else {
174
- let iV = (1.0 - anisotropy * anisotropy)
174
+ let ja = (1.0 - anisotropy * anisotropy)
175
175
  / (1.0 + anisotropy - 2.0 * anisotropy * samplePoint.y);
176
176
  au = (
177
- iV * iV - 1.0 - anisotropy * anisotropy
177
+ ja * ja - 1.0 - anisotropy * anisotropy
178
178
  ) / (2.0 * anisotropy);
179
179
  }
180
180
 
181
- let tW = sqrt(max(0.0, 1.0 - au * au));
181
+ let ud = sqrt(max(0.0, 1.0 - au * au));
182
182
  let br = TWOPI * samplePoint.x;
183
183
  var tangent: vec3f;
184
184
  var bitangent: vec3f;
185
- aL(gu, &tangent, &bitangent);
186
- return tangent * (tW * cos(br))
187
- + bitangent * (tW * sin(br))
188
- + gu * au;
185
+ aL(gy, &tangent, &bitangent);
186
+ return tangent * (ud * cos(br))
187
+ + bitangent * (ud * sin(br))
188
+ + gy * au;
189
189
  }
190
190
 
191
191
  fn bD(au: f32, anisotropy: f32) -> f32 {
@@ -20,8 +20,8 @@ var<private> bc: vec2u;
20
20
  var<private> bd: u32;
21
21
  var<private> cF: u32 = 0u;
22
22
  var<private> em: u32 = 0u;
23
- fn eg(kk: u32) -> u32 {
24
- var x = kk;
23
+ fn eg(kt: u32) -> u32 {
24
+ var x = kt;
25
25
  x ^= x >> 16u; x *= 0x7feb352du;
26
26
  x ^= x >> 15u; x *= 0x846ca68bu;
27
27
  return x ^ (x >> 16u);
@@ -29,28 +29,28 @@ return x ^ (x >> 16u);
29
29
  fn aq(a: u32, b: u32) -> u32 {
30
30
  return eg(a ^ eg(b + 0x9e3779b9u));
31
31
  }
32
- fn iA(kk: u32, ic: u32) -> u32 {
33
- var x = kk + ic;
32
+ fn iE(kt: u32, ij: u32) -> u32 {
33
+ var x = kt + ij;
34
34
  x ^= x * 0x6c50b47cu; x ^= x * 0xb82f1e52u;
35
35
  x ^= x * 0xc7afe638u; x ^= x * 0x8d22f6e6u;
36
36
  return x;
37
37
  }
38
- fn sC(x: u32, ic: u32) -> u32 {
39
- return reverseBits(iA(reverseBits(x), ic));
38
+ fn sK(x: u32, ij: u32) -> u32 {
39
+ return reverseBits(iE(reverseBits(x), ij));
40
40
  }
41
41
 
42
- fn rb(kk: u32) -> u32 {
43
- var r = reverseBits(kk);
42
+ fn rl(kt: u32) -> u32 {
43
+ var r = reverseBits(kt);
44
44
  ${sobolD1Steps.map(([shift, mask]) => `r ^= (r << ${shift}u) & 0x${mask.toString(16)}u;`).join("\n ")}
45
45
  return r;
46
46
  }
47
- fn vI(index: u32, ic: u32) -> vec2f {
48
- let i = sC(index, aq(ic, 0u));
49
- let x = reverseBits(iA(i, aq(ic, 1u)));
50
- let y = sC(rb(i), aq(ic, 2u));
47
+ fn vP(index: u32, ij: u32) -> vec2f {
48
+ let i = sK(index, aq(ij, 0u));
49
+ let x = reverseBits(iE(i, aq(ij, 1u)));
50
+ let y = sK(rl(i), aq(ij, 2u));
51
51
  return vec2f(f32(x >> 8u), f32(y >> 8u)) * (1.0 / 16777216.0);
52
52
  }
53
- fn tp(p: vec2u) -> u32 {
53
+ fn tB(p: vec2u) -> u32 {
54
54
  var v = p & vec2u(255u);
55
55
  v = (v | (v << vec2u(4u))) & vec2u(0x0f0fu);
56
56
  v = (v | (v << vec2u(2u))) & vec2u(0x3333u);
@@ -58,27 +58,27 @@ v = (v | (v << vec2u(1u))) & vec2u(0x5555u);
58
58
  return v.x | (v.y << 1u);
59
59
  }
60
60
  ${zSobolPackedPermutations.map((v, i) => `const Z_PERM_${i} = ${v}u;`).join("\n")}
61
- fn km(tu: u32) -> u32 {
62
- let group = tu >> 2u;
61
+ fn kw(tE: u32) -> u32 {
62
+ let group = tE >> 2u;
63
63
  var word = Z_PERM_5;
64
64
  ${[0, 1, 2, 3, 4].map(i => `word = select(word, Z_PERM_${i}, group == ${i}u);`).join("\n ")}
65
- return (word >> ((tu & 3u) * 8u)) & 255u;
65
+ return (word >> ((tE & 3u) * 8u)) & 255u;
66
66
  }
67
- fn pO(kE: u32, dim: u32, logSPP: u32) -> u32 {
67
+ fn pW(kN: u32, dim: u32, logSPP: u32) -> u32 {
68
68
  let odd = logSPP & 1u;
69
- let uf = 8u + ((logSPP + 1u) >> 1u);
69
+ let um = 8u + ((logSPP + 1u) >> 1u);
70
70
  var result = 0u;
71
- for (var digit = i32(uf) - 1; digit >= i32(odd); digit--) {
71
+ for (var digit = i32(um) - 1; digit >= i32(odd); digit--) {
72
72
  let shift = 2u*u32(digit) - odd;
73
73
 
74
- var sj = 0u;
75
- if (shift < 30u) { sj = kE >> (shift + 2u); }
76
- let tu = (eg(sj ^ (0x55555555u * dim)) >> 24u) % 24u;
77
- let d = (kE >> shift) & 3u;
78
- result |= ((km(tu) >> (2u*d)) & 3u) << shift;
74
+ var st = 0u;
75
+ if (shift < 30u) { st = kN >> (shift + 2u); }
76
+ let tE = (eg(st ^ (0x55555555u * dim)) >> 24u) % 24u;
77
+ let d = (kN >> shift) & 3u;
78
+ result |= ((kw(tE) >> (2u*d)) & 3u) << shift;
79
79
  }
80
80
  if (odd != 0u) {
81
- result |= (kE & 1u) ^ (eg((kE >> 1u) ^ (0x55555555u * dim)) & 1u);
81
+ result |= (kN & 1u) ^ (eg((kN >> 1u) ^ (0x55555555u * dim)) & 1u);
82
82
  }
83
83
  return result;
84
84
  }
@@ -88,7 +88,7 @@ return result;
88
88
  fn cw(slot: u32) -> u32 {
89
89
  return CAMERA_BEVEL_BASE + u32(BEVEL_SAMPLES) + cF * BOUNCE_STRIDE + slot;
90
90
  }
91
- fn qV(candidate: u32, slot: u32) -> u32 {
91
+ fn rd(candidate: u32, slot: u32) -> u32 {
92
92
  if (candidate == 0u) {
93
93
  if (slot == 2u) { return cw(8u); }
94
94
  return cw(slot);
@@ -97,62 +97,62 @@ return cw(9u + (candidate - 1u) * 3u + slot);
97
97
  }
98
98
 
99
99
 
100
- var<private> hh: vec4u;
101
- var<private> hi: u32;
102
- var<private> fv: bool = false;
103
- var<private> df: bool = false;
104
- var<private> dE: u32;
105
- var<private> gq: u32;
106
- var<private> eN: vec2f;
100
+ var<private> hl: vec4u;
101
+ var<private> hm: u32;
102
+ var<private> fB: bool = false;
103
+ var<private> dg: bool = false;
104
+ var<private> dF: u32;
105
+ var<private> gu: u32;
106
+ var<private> eQ: vec2f;
107
107
  fn dw(dim: u32) {
108
108
 
109
- let jW = bc.x + bc.y * u32(rtUniform.outputSize.x);
110
- let key = vec4u(dim, bd, jW, rtUniform.sequenceSeed);
111
- if (fv && all(hh == key) && hi == rtUniform.zSobolLogSPP) { return; }
112
- hh = key; hi = rtUniform.zSobolLogSPP;
113
- fv = true; df = false;
114
- var ic = aq(aq(jW, dim), rtUniform.sequenceSeed);
109
+ let kd = bc.x + bc.y * u32(rtUniform.outputSize.x);
110
+ let key = vec4u(dim, bd, kd, rtUniform.sequenceSeed);
111
+ if (fB && all(hl == key) && hm == rtUniform.zSobolLogSPP) { return; }
112
+ hl = key; hm = rtUniform.zSobolLogSPP;
113
+ fB = true; dg = false;
114
+ var ij = aq(aq(kd, dim), rtUniform.sequenceSeed);
115
115
  var index = bd;
116
116
  if (SAMPLING_PATTERN == 1) {
117
117
  var logSPP = rtUniform.zSobolLogSPP;
118
118
  if (index == 0u) { logSPP = 0u; }
119
119
  else { index -= 1u; }
120
120
 
121
- var iW = index >> logSPP;
121
+ var jb = index >> logSPP;
122
122
  let mask = (1u << logSPP) - 1u;
123
- let kE = (tp(bc) << logSPP) | (index & mask);
124
- index = pO(kE, dim, logSPP);
123
+ let kN = (tB(bc) << logSPP) | (index & mask);
124
+ index = pW(kN, dim, logSPP);
125
125
  let tile = bc >> vec2u(8u);
126
- ic = aq(aq(dim, rtUniform.sequenceSeed), aq(tile.x, tile.y));
126
+ ij = aq(aq(dim, rtUniform.sequenceSeed), aq(tile.x, tile.y));
127
127
 
128
- if (bd != 0u) { iW += 1u; }
129
- ic = aq(ic, iW);
128
+ if (bd != 0u) { jb += 1u; }
129
+ ij = aq(ij, jb);
130
130
  }
131
- dE = sC(index, aq(ic, 0u));
132
- gq = ic;
133
- let x = reverseBits(iA(dE, aq(ic, 1u)));
134
- eN.x = f32(x >> 8u) * (1.0 / 16777216.0);
131
+ dF = sK(index, aq(ij, 0u));
132
+ gu = ij;
133
+ let x = reverseBits(iE(dF, aq(ij, 1u)));
134
+ eQ.x = f32(x >> 8u) * (1.0 / 16777216.0);
135
135
  }
136
- fn kJ(dim: u32) -> vec2f {
136
+ fn kS(dim: u32) -> vec2f {
137
137
  dw(dim);
138
- if (!df) {
139
- let y = sC(rb(dE), aq(gq, 2u));
140
- eN.y = f32(y >> 8u) * (1.0 / 16777216.0);
141
- df = true;
138
+ if (!dg) {
139
+ let y = sK(rl(dF), aq(gu, 2u));
140
+ eQ.y = f32(y >> 8u) * (1.0 / 16777216.0);
141
+ dg = true;
142
142
  }
143
- return EPS + (1.0 - 2.0*EPS) * eN;
143
+ return EPS + (1.0 - 2.0*EPS) * eQ;
144
144
  }
145
145
  fn dz(dim: u32) -> f32 {
146
146
  if (SAMPLING_PATTERN == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
147
147
  dw(dim);
148
- return EPS + (1.0 - 2.0*EPS) * eN.x;
148
+ return EPS + (1.0 - 2.0*EPS) * eQ.x;
149
149
  }
150
- fn fk(dim: u32) -> vec2f {
150
+ fn fo(dim: u32) -> vec2f {
151
151
  if (SAMPLING_PATTERN == 2) {
152
152
  let x = dz(dim); let y = dz(dim);
153
153
  return vec2f(x,y);
154
154
  }
155
- return kJ(dim);
155
+ return kS(dim);
156
156
  }
157
157
 
158
158
  fn eo(slot: u32) -> f32 {
@@ -160,10 +160,10 @@ let dim = aq(aq(cF, slot), em) | 0x80000000u;
160
160
  em += 1u;
161
161
  if (SAMPLING_PATTERN == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
162
162
 
163
- let jW = bc.x + bc.y * u32(rtUniform.outputSize.x);
164
- let ic = aq(aq(jW, dim), rtUniform.sequenceSeed);
165
- let i = sC(bd, aq(ic, 0u));
166
- let x = reverseBits(iA(i, aq(ic, 1u)));
163
+ let kd = bc.x + bc.y * u32(rtUniform.outputSize.x);
164
+ let ij = aq(aq(kd, dim), rtUniform.sequenceSeed);
165
+ let i = sK(bd, aq(ij, 0u));
166
+ let x = reverseBits(iE(i, aq(ij, 1u)));
167
167
  return EPS + (1.0 - 2.0*EPS) * (f32(x >> 8u) * (1.0 / 16777216.0));
168
168
  }
169
169
  `;
@@ -7,12 +7,12 @@ let theta = atan2(n.x, n.z) / (2.0 * PI) + 0.5;
7
7
  let phi = acos(n.y) / PI;
8
8
  return vec2f(theta, 1.0 - phi);
9
9
  }
10
- fn iM(pos: vec3f, normal: vec3f) -> vec2f {
11
- let dm = abs(normal);
10
+ fn iR(pos: vec3f, normal: vec3f) -> vec2f {
11
+ let dn = abs(normal);
12
12
  var uv = vec2f(0.0);
13
- if (dm.x > dm.y && dm.x > dm.z) {
13
+ if (dn.x > dn.y && dn.x > dn.z) {
14
14
  uv = pos.yz;
15
- } else if (dm.y > dm.x && dm.y > dm.z) {
15
+ } else if (dn.y > dn.x && dn.y > dn.z) {
16
16
  uv = pos.xz;
17
17
  } else {
18
18
  uv = pos.xy;
@@ -23,18 +23,18 @@ return uv;
23
23
 
24
24
 
25
25
 
26
- fn hz(pos: vec3f, normal: vec3f) -> vec2f {
26
+ fn hD(pos: vec3f, normal: vec3f) -> vec2f {
27
27
  let theta = atan2(pos.z, pos.x) / (2.0 * PI) + 0.5;
28
28
  return vec2f(theta, pos.y);
29
29
  }
30
30
 
31
- fn gC(fh: i32, pos: vec3f, normal: vec3f) -> vec2f {
32
- if (fh == ${uvProjectionConstants.triplanar}) {
33
- return iM(pos, normal);
34
- } else if (fh == ${uvProjectionConstants.spherical}) {
31
+ fn gH(fk: i32, pos: vec3f, normal: vec3f) -> vec2f {
32
+ if (fk == ${uvProjectionConstants.triplanar}) {
33
+ return iR(pos, normal);
34
+ } else if (fk == ${uvProjectionConstants.spherical}) {
35
35
  return sphericalProjection(pos);
36
- } else if (fh == ${uvProjectionConstants.cylindrical}) {
37
- return hz(pos, normal);
36
+ } else if (fk == ${uvProjectionConstants.cylindrical}) {
37
+ return hD(pos, normal);
38
38
  }
39
39
  return vec2f(0.0);
40
40
  }