@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
@@ -33,15 +33,15 @@ return vec2(pow((a*a + u*u) * 0.5, 0.25), clamp(1.0 - u/a, 0.0, 1.0));
33
33
 
34
34
  #endif
35
35
 
36
- vec3 oy(vec3 c) {
36
+ vec3 oB(vec3 c) {
37
37
  return mix(pow(c * 0.9478672986 + 0.0521327014, vec3(2.4)), c * 0.0773993808, vec3(lessThan(c, vec3(0.04045))));
38
38
  }
39
39
  vec4 fetchMatData(int i) {
40
- return kw(materialBuffer, i, materialBufferColumns);
40
+ return ky(materialBuffer, i, materialBufferColumns);
41
41
  }
42
42
 
43
43
 
44
- float ld(float alpha, int alphaMode, float alphaCutoff) {
44
+ float lg(float alpha, int alphaMode, float alphaCutoff) {
45
45
  if (alphaMode == ${materialAlphaModeConstants.opaque}) {
46
46
  return 1.0;
47
47
  }
@@ -51,7 +51,7 @@ return alpha >= alphaCutoff ? 1.0 : 0.0;
51
51
  return alpha;
52
52
  }
53
53
 
54
- float vO(int idx) {
54
+ float vU(int idx) {
55
55
  return fetchMatData(idx * MAT_DATA_SIZE + MAT_ROW_COLOR).w;
56
56
  }
57
57
 
@@ -62,33 +62,33 @@ return vec2(float(val >> 8), float(val & 0xff) / 255.0);
62
62
  #ifdef NUM_MAPS
63
63
  vec3 decodeMapColor(int index, vec3 c) {
64
64
  if (mapColorLinear[index] > 0.5) { return c; }
65
- return oy(c);
65
+ return oB(c);
66
66
  }
67
67
 
68
- vec2 nX(int index) {
68
+ vec2 oa(int index) {
69
69
  return mapInfo[index].xy;
70
70
  }
71
71
 
72
- float pf(int index) {
72
+ float pj(int index) {
73
73
  return floor(mapInfo[index].z);
74
74
  }
75
75
 
76
- vec2 nW(int index) {
76
+ vec2 nZ(int index) {
77
77
  return vec2(fract(mapInfo[index].z), mapInfo[index].w);
78
78
  }
79
79
 
80
- vec2 sb(int index, vec2 uv) {
80
+ vec2 sg(int index, vec2 uv) {
81
81
  vec4 transform = mapTransform[index];
82
- vec2 qv = fract(uv * transform.xy + transform.zw);
83
- vec2 je = 1.0 / vec2(textureSize(map, 0).xy);
84
- vec2 dZ = nW(index);
85
- vec2 ke = nX(index) + je;
86
- vec2 oB = dZ - 0.5 * je;
87
- vec2 lo = dZ + ke - je;
82
+ vec2 qz = fract(uv * transform.xy + transform.zw);
83
+ vec2 jg = 1.0 / vec2(textureSize(map, 0).xy);
84
+ vec2 dZ = nZ(index);
85
+ vec2 kg = oa(index) + jg;
86
+ vec2 oE = dZ - 0.5 * jg;
87
+ vec2 lr = dZ + kg - jg;
88
88
  return clamp(
89
- oB + qv * ke,
89
+ oE + qz * kg,
90
90
  dZ,
91
- lo
91
+ lr
92
92
  );
93
93
  }
94
94
 
@@ -97,22 +97,22 @@ return mapUvChannel[index] > 0.5 ? uv1 : uv;
97
97
  }
98
98
 
99
99
  vec4 sampleMap(int index, vec2 uv) {
100
- return texture(map, vec3(sb(index, uv), pf(index)));
100
+ return texture(map, vec3(sg(index, uv), pj(index)));
101
101
  }
102
102
  #endif
103
103
 
104
104
 
105
- vec2 aJ(float roughness, float anisotropy) {
105
+ vec2 aK(float roughness, float anisotropy) {
106
106
  float alpha = roughness * roughness;
107
- float oT = ROUGHNESS_MIN * ROUGHNESS_MIN;
108
- if (anisotropy == 0.0) { return vec2(max(oT, alpha)); }
107
+ float oX = ROUGHNESS_MIN * ROUGHNESS_MIN;
108
+ if (anisotropy == 0.0) { return vec2(max(oX, alpha)); }
109
109
  float dg = 1.0 - anisotropy;
110
- float rU = alpha * sqrt(2.0 / (1.0 + dg * dg));
111
- return max(vec2(oT), vec2(rU, dg * rU));
110
+ float rZ = alpha * sqrt(2.0 / (1.0 + dg * dg));
111
+ return max(vec2(oX), vec2(rZ, dg * rZ));
112
112
  }
113
113
 
114
114
  vec4 bv(int i);
115
- vec3 kx(int instanceIndex) {
115
+ vec3 kA(int instanceIndex) {
116
116
  if (instanceIndex < 0) return vec3(1.0);
117
117
  return bv(instanceIndex * ${INSTANCE_VEC4_STRIDE + ''} + 9).rgb;
118
118
  }
@@ -125,62 +125,62 @@ vec2 uv1,
125
125
  int instanceIndex
126
126
  ) {
127
127
  int i = materialIndex * MAT_DATA_SIZE;
128
- vec4 oJ = fetchMatData(i + MAT_ROW_COLOR);
129
- vec4 hb = fetchMatData(i + MAT_ROW_ROUGHNESS_NORMAL);
130
- vec4 gh = fetchMatData(i + MAT_ROW_METALLIC_MAPS);
131
- vec4 hF = fetchMatData(i + MAT_ROW_EMISSION);
132
- vec4 gT = fetchMatData(i + MAT_ROW_IOR_TRANSMISSION);
128
+ vec4 oM = fetchMatData(i + MAT_ROW_COLOR);
129
+ vec4 hc = fetchMatData(i + MAT_ROW_ROUGHNESS_NORMAL);
130
+ vec4 gi = fetchMatData(i + MAT_ROW_METALLIC_MAPS);
131
+ vec4 hE = fetchMatData(i + MAT_ROW_EMISSION);
132
+ vec4 gU = fetchMatData(i + MAT_ROW_IOR_TRANSMISSION);
133
133
  vec4 misc = fetchMatData(i + MAT_ROW_MISC);
134
- vec4 nh = fetchMatData(i + MAT_ROW_ALPHA_FILM);
135
- vec4 lF = fetchMatData(i + MAT_ROW_BASE_CONTROLS);
136
- vec4 oM = fetchMatData(i + MAT_ROW_SPECULAR_FUZZ);
134
+ vec4 nk = fetchMatData(i + MAT_ROW_ALPHA_FILM);
135
+ vec4 lI = fetchMatData(i + MAT_ROW_BASE_CONTROLS);
136
+ vec4 oQ = fetchMatData(i + MAT_ROW_SPECULAR_FUZZ);
137
137
  vec4 subsurface = fetchMatData(i + MAT_ROW_SUBSURFACE);
138
- vec4 wc = fetchMatData(i + MAT_ROW_FUZZ);
139
- vec4 vx = fetchMatData(i + MAT_ROW_COAT);
140
- vec4 lG = fetchMatData(i + MAT_ROW_COAT_CONTROLS);
141
- vec4 mK = fetchMatData(i + MAT_ROW_FILM_DISPERSION);
142
- vec4 ng = fetchMatData(i + MAT_ROW_STANDALONE_MAPS);
138
+ vec4 wj = fetchMatData(i + MAT_ROW_FUZZ);
139
+ vec4 vE = fetchMatData(i + MAT_ROW_COAT);
140
+ vec4 lJ = fetchMatData(i + MAT_ROW_COAT_CONTROLS);
141
+ vec4 mN = fetchMatData(i + MAT_ROW_FILM_DISPERSION);
142
+ vec4 nj = fetchMatData(i + MAT_ROW_STANDALONE_MAPS);
143
143
  int mapAlphaUsage = int(misc.a);
144
144
 
145
- mat.baseColor = oJ.rgb;
146
- mat.materialType = int(oJ.w);
147
- mat.specularRoughness = hb.x;
148
- mat.baseMetalness = gh.x;
149
- mat.specularAnisotropy = clamp(gh.y, 0.0, 1.0);
150
- mat.emission = hF.rgb;
145
+ mat.baseColor = oM.rgb;
146
+ mat.materialType = int(oM.w);
147
+ mat.specularRoughness = hc.x;
148
+ mat.baseMetalness = gi.x;
149
+ mat.specularAnisotropy = clamp(gi.y, 0.0, 1.0);
150
+ mat.emission = hE.rgb;
151
151
  mat.inside = false;
152
- mat.specularIor = gT.x;
153
- mat.transmissionWeight = gT.y;
152
+ mat.specularIor = gU.x;
153
+ mat.transmissionWeight = gU.y;
154
154
  #ifdef HAS_MEDIUM
155
- mat.mediumType = int(gT.z);
155
+ mat.mediumType = int(gU.z);
156
156
  #else
157
157
  mat.mediumType = 0;
158
158
  #endif
159
- mat.thinWalled = gT.w > 0.5;
159
+ mat.thinWalled = gU.w > 0.5;
160
160
  mat.bevel = misc.r;
161
161
  mat.transmissionDispersionScale = misc.g;
162
- mat.dispersionAbbeNumber = max(mK.y, 1e-6);
162
+ mat.dispersionAbbeNumber = max(mN.y, 1e-6);
163
163
  mat.thinFilmThickness = misc.b;
164
- mat.thinFilmIor = nh.b;
165
- mat.thinFilmWeight = clamp(mK.x, 0.0, 1.0);
164
+ mat.thinFilmIor = nk.b;
165
+ mat.thinFilmWeight = clamp(mN.x, 0.0, 1.0);
166
166
 
167
167
  mat.thinFilmThickness *= 1000.0;
168
- mat.baseWeight = clamp(lF.x, 0.0, 1.0);
169
- mat.diffuseRoughness = clamp(lF.y, 0.0, 1.0);
170
- mat.specularWeight = max(0.0, lF.z);
171
- mat.subsurfaceWeight = clamp(lF.w, 0.0, 1.0);
172
- mat.specularColor = max(oM.rgb, vec3(0.0));
173
- mat.fuzzWeight = clamp(oM.w, 0.0, 1.0);
168
+ mat.baseWeight = clamp(lI.x, 0.0, 1.0);
169
+ mat.diffuseRoughness = clamp(lI.y, 0.0, 1.0);
170
+ mat.specularWeight = max(0.0, lI.z);
171
+ mat.subsurfaceWeight = clamp(lI.w, 0.0, 1.0);
172
+ mat.specularColor = max(oQ.rgb, vec3(0.0));
173
+ mat.fuzzWeight = clamp(oQ.w, 0.0, 1.0);
174
174
  mat.subsurfaceColor = max(subsurface.rgb, vec3(0.0));
175
175
  mat.transmissionColor = max(fetchMatData(i + MAT_ROW_TRANSMISSION_COLOR).rgb, vec3(0.0));
176
- mat.fuzzColor = max(wc.rgb, vec3(0.0));
177
- mat.fuzzRoughness = clamp(wc.w, 0.0, 1.0);
178
- mat.coatColor = max(vx.rgb, vec3(0.0));
179
- mat.coatWeight = clamp(vx.w, 0.0, 1.0);
180
- mat.coatRoughness = clamp(lG.x, ROUGHNESS_MIN, 1.0);
181
- mat.coatAnisotropy = clamp(lG.y, 0.0, 1.0);
182
- mat.coatIor = max(lG.z, 1.0);
183
- mat.coatDarkening = clamp(lG.w, 0.0, 1.0);
176
+ mat.fuzzColor = max(wj.rgb, vec3(0.0));
177
+ mat.fuzzRoughness = clamp(wj.w, 0.0, 1.0);
178
+ mat.coatColor = max(vE.rgb, vec3(0.0));
179
+ mat.coatWeight = clamp(vE.w, 0.0, 1.0);
180
+ mat.coatRoughness = clamp(lJ.x, ROUGHNESS_MIN, 1.0);
181
+ mat.coatAnisotropy = clamp(lJ.y, 0.0, 1.0);
182
+ mat.coatIor = max(lJ.z, 1.0);
183
+ mat.coatDarkening = clamp(lJ.w, 0.0, 1.0);
184
184
 
185
185
  #ifdef HAS_MEDIUM
186
186
  mat.mediumExtinction = max(fetchMatData(i + MAT_ROW_MEDIUM_EXTINCTION).rgb, vec3(0.0));
@@ -191,41 +191,41 @@ mat.mediumType = max(max(mat.mediumExtinction.x, mat.mediumExtinction.y), mat.me
191
191
 
192
192
 
193
193
  #ifdef HAS_ALPHA
194
- mat.alpha = nh.r;
194
+ mat.alpha = nk.r;
195
195
  #else
196
196
  mat.alpha = 1.0;
197
197
  #endif
198
198
 
199
199
  #ifdef NUM_DIFFUSE_MAPS
200
- int diffuseMapIndex = int(gh.z);
200
+ int diffuseMapIndex = int(gi.z);
201
201
  if (diffuseMapIndex >= 0) {
202
- vec4 nN = sampleMap(
202
+ vec4 nQ = sampleMap(
203
203
  diffuseMapIndex, getMapUvSet(diffuseMapIndex, uv, uv1)
204
204
  );
205
205
 
206
206
 
207
- mat.baseColor *= decodeMapColor(diffuseMapIndex, nN.rgb);
207
+ mat.baseColor *= decodeMapColor(diffuseMapIndex, nQ.rgb);
208
208
 
209
209
 
210
210
  if (mapAlphaUsage == ${mapAlphaUsageConstants.transmission + ''}) {
211
- mat.transmissionWeight = 1.0 - nN.a;
211
+ mat.transmissionWeight = 1.0 - nQ.a;
212
212
  }
213
213
  else if (mapAlphaUsage == ${mapAlphaUsageConstants.alpha + ''}) {
214
- mat.alpha *= nN.a;
214
+ mat.alpha *= nQ.a;
215
215
  }
216
216
  }
217
217
  #endif
218
218
 
219
219
  ${simpleTextureSample('alphaMap', 'glsl')}
220
220
 
221
- mat.alpha = ld(
222
- mat.alpha, int(fetchMatData(i + MAT_ROW_ALPHA).w), ng.w
221
+ mat.alpha = lg(
222
+ mat.alpha, int(fetchMatData(i + MAT_ROW_ALPHA).w), nj.w
223
223
  );
224
224
 
225
225
  ${simpleTextureSample('transmissionMap', 'glsl')}
226
226
 
227
227
  #ifdef NUM_METALLIC_ROUGHNESS_MAPS
228
- int metallicRoughnessMapIndex = int(gh.w);
228
+ int metallicRoughnessMapIndex = int(gi.w);
229
229
  if (metallicRoughnessMapIndex >= 0) {
230
230
  vec4 fK = sampleMap(
231
231
  metallicRoughnessMapIndex,
@@ -241,7 +241,7 @@ ${simpleTextureSample('roughnessMap', 'glsl')}
241
241
  ${simpleTextureSample('metalnessMap', 'glsl')}
242
242
 
243
243
  #ifdef NUM_EMISSIVE_MAPS
244
- int emissiveMapIndex = int(hF.w);
244
+ int emissiveMapIndex = int(hE.w);
245
245
  if (emissiveMapIndex >= 0) {
246
246
  vec3 emissive = sampleMap(
247
247
  emissiveMapIndex, getMapUvSet(emissiveMapIndex, uv, uv1)
@@ -251,12 +251,12 @@ mat.emission *= decodeMapColor(emissiveMapIndex, emissive);
251
251
  #endif
252
252
 
253
253
  #ifdef NUM_COAT_WEIGHT_MAPS
254
- int hN = int(fetchMatData(i + MAT_ROW_LAYER_MAPS).x);
255
- if (hN >= 0 && mat.materialType == 0) {
256
- float qk = clamp(vx.w, 0.0, 1.0) * sampleMap(
257
- hN, getMapUvSet(hN, uv, uv1)
254
+ int hM = int(fetchMatData(i + MAT_ROW_LAYER_MAPS).x);
255
+ if (hM >= 0 && mat.materialType == 0) {
256
+ float qo = clamp(vE.w, 0.0, 1.0) * sampleMap(
257
+ hM, getMapUvSet(hM, uv, uv1)
258
258
  ).r;
259
- mat.emission *= mix(vec3(1.0), sqrt(max(vx.rgb, vec3(0.0))), qk);
259
+ mat.emission *= mix(vec3(1.0), sqrt(max(vE.rgb, vec3(0.0))), qo);
260
260
  }
261
261
  #endif
262
262
 
@@ -277,29 +277,29 @@ ${simpleTextureSample('specularWeightMap', 'glsl')}
277
277
 
278
278
  ${simpleTextureSample('specularColorMap', 'glsl')}
279
279
 
280
- vec4 kK = fetchMatData(i + MAT_ROW_DIRECTION_NORMAL);
280
+ vec4 kN = fetchMatData(i + MAT_ROW_DIRECTION_NORMAL);
281
281
  mat.anisotropyDirection = vec2(1.0, 0.0);
282
- mat.anisotropyDirectionEnabled = kK.y != 0.0;
282
+ mat.anisotropyDirectionEnabled = kN.y != 0.0;
283
283
  mat.coatAnisotropyRotation = fetchMatData(i + MAT_ROW_FILM_TEXTURE).x;
284
284
  #ifdef NUM_ANISOTROPY_MAPS
285
- if (kK.x >= 0.0) {
286
- int index = int(kK.x);
287
- vec4 iW = sampleMap(index, getMapUvSet(index, uv, uv1));
288
- mat.specularAnisotropy *= iW.b;
289
- vec2 direction = iW.rg * 2.0 - 1.0;
285
+ if (kN.x >= 0.0) {
286
+ int index = int(kN.x);
287
+ vec4 iX = sampleMap(index, getMapUvSet(index, uv, uv1));
288
+ mat.specularAnisotropy *= iX.b;
289
+ vec2 direction = iX.rg * 2.0 - 1.0;
290
290
  if (dot(direction, direction) > 1e-4) mat.anisotropyDirection = normalize(direction);
291
291
  mat.anisotropyDirectionEnabled = true;
292
292
  }
293
293
  #endif
294
294
  #ifdef HAS_GLTF_ANISOTROPY
295
295
  if (fetchMatData(i + MAT_ROW_FILM_TEXTURE).y > 0.5 && mat.specularAnisotropy > 0.0) {
296
- vec2 sp = fb(clamp(mat.specularRoughness, 0.0, 1.0), mat.specularAnisotropy);
297
- mat.specularRoughness = sp.x;
298
- mat.specularAnisotropy = sp.y;
296
+ vec2 sv = fb(clamp(mat.specularRoughness, 0.0, 1.0), mat.specularAnisotropy);
297
+ mat.specularRoughness = sv.x;
298
+ mat.specularAnisotropy = sv.y;
299
299
  }
300
300
  #endif
301
301
  if (mat.anisotropyDirectionEnabled) {
302
- float theta = kK.y;
302
+ float theta = kN.y;
303
303
  vec2 d = mat.anisotropyDirection;
304
304
  mat.anisotropyDirection = vec2(cos(theta)*d.x - sin(theta)*d.y, sin(theta)*d.x + cos(theta)*d.y);
305
305
  }
@@ -307,57 +307,57 @@ mat.anisotropyDirection = vec2(cos(theta)*d.x - sin(theta)*d.y, sin(theta)*d.x +
307
307
 
308
308
 
309
309
  if (mat.coatWeight > 0.0 && mat.coatRoughness > 0.0) {
310
- float hJ = mat.specularRoughness * mat.specularRoughness;
311
- float hK = mat.coatRoughness * mat.coatRoughness;
310
+ float hI = mat.specularRoughness * mat.specularRoughness;
311
+ float hJ = mat.coatRoughness * mat.coatRoughness;
312
312
  mat.specularRoughness = mix(mat.specularRoughness,
313
- pow(min(1.0, hJ * hJ + 2.0 * hK * hK), 0.25), mat.coatWeight);
313
+ pow(min(1.0, hI * hI + 2.0 * hJ * hJ), 0.25), mat.coatWeight);
314
314
  }
315
- vec3 instanceColor = kx(instanceIndex);
315
+ vec3 instanceColor = kA(instanceIndex);
316
316
  mat.baseColor *= instanceColor;
317
317
  if (mat.materialType == UNLIT) mat.emission *= instanceColor;
318
318
 
319
319
  mat.specularRoughness = clamp(mat.specularRoughness, ROUGHNESS_MIN, 1.0);
320
320
  mat.baseMetalness = clamp(mat.baseMetalness, 0.0, 1.0);
321
- vec2 specularAlpha = aJ(mat.specularRoughness, mat.specularAnisotropy);
321
+ vec2 specularAlpha = aK(mat.specularRoughness, mat.specularAnisotropy);
322
322
  mat.alphaX = specularAlpha.x;
323
323
  mat.alphaY = specularAlpha.y;
324
324
  }
325
325
 
326
326
  #if defined(NUM_NORMAL_MAPS)
327
- vec3 nY(int materialIndex, vec2 uv, vec3 normal, vec3 dp1, vec3 dp2, vec2 nP, vec2 nQ) {
327
+ vec3 ob(int materialIndex, vec2 uv, vec3 normal, vec3 dp1, vec3 dp2, vec2 nS, vec2 nT) {
328
328
  int i = materialIndex * MAT_DATA_SIZE;
329
- vec4 hb = fetchMatData(i + MAT_ROW_ROUGHNESS_NORMAL);
330
- int normalMapIndex = int(hb.y);
329
+ vec4 hc = fetchMatData(i + MAT_ROW_ROUGHNESS_NORMAL);
330
+ int normalMapIndex = int(hc.y);
331
331
  if (normalMapIndex >= 0) {
332
332
 
333
333
 
334
334
 
335
- vec3 qJ = cross(dp2, normal);
336
- vec3 qI = cross(normal, dp1);
337
- vec3 dpdu = qJ * nP.x + qI * nQ.x;
338
- vec3 rZ = qJ * nP.y + qI * nQ.y;
339
- float dS = max(dot(dpdu, dpdu), dot(rZ, rZ));
335
+ vec3 qO = cross(dp2, normal);
336
+ vec3 qM = cross(normal, dp1);
337
+ vec3 dpdu = qO * nS.x + qM * nT.x;
338
+ vec3 se = qO * nS.y + qM * nT.y;
339
+ float dS = max(dot(dpdu, dpdu), dot(se, se));
340
340
  if (dS > 1e-12) {
341
- float sh = inversesqrt(dS);
342
- dpdu *= sh;
343
- rZ *= sh;
341
+ float sn = inversesqrt(dS);
342
+ dpdu *= sn;
343
+ se *= sn;
344
344
  }
345
345
  else {
346
346
 
347
347
 
348
348
 
349
- vec3 mZ = abs(normal.z) < 0.999
349
+ vec3 nf = abs(normal.z) < 0.999
350
350
  ? vec3(0.0, 0.0, 1.0)
351
351
  : vec3(0.0, 1.0, 0.0);
352
- dpdu = normalize(cross(mZ, normal));
353
- rZ = cross(normal, dpdu);
352
+ dpdu = normalize(cross(nf, normal));
353
+ se = cross(normal, dpdu);
354
354
  }
355
355
 
356
356
  vec3 n = 2.0 * sampleMap(normalMapIndex, uv).rgb - 1.0;
357
- n.xy *= hb.zw;
357
+ n.xy *= hc.zw;
358
358
  n = normalize(n);
359
359
 
360
- mat3 tbn = mat3(dpdu, rZ, normal);
360
+ mat3 tbn = mat3(dpdu, se, normal);
361
361
 
362
362
  return normalize(tbn * n);
363
363
  } else {