@meimu/mutracer 0.1.3 → 0.1.5

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 (125) hide show
  1. package/dist/assets/bvh.worker.js +1 -1
  2. package/dist/mutracer.umd.js +4155 -4052
  3. package/docs/api.md +13 -10
  4. package/docs/materials.md +17 -26
  5. package/docs/threejs.md +35 -9
  6. package/docs/viewer.md +36 -3
  7. package/lib/Engine.js +18 -1
  8. package/lib/Engine.js.map +1 -1
  9. package/lib/main.d.ts +1 -1
  10. package/lib/main.js.map +1 -1
  11. package/lib/oidn.d.ts +1 -1
  12. package/lib/oidnBundledWeights.cdn.d.ts +2 -2
  13. package/lib/renderer/MaterialTable.d.ts +1 -0
  14. package/lib/renderer/MaterialTable.js +10 -4
  15. package/lib/renderer/MaterialTable.js.map +1 -1
  16. package/lib/renderer/WGPUBloomPass.js +18 -18
  17. package/lib/renderer/WGPUFullQuadPass.js +6 -6
  18. package/lib/renderer/WGPUJNLMDenoiser.js +69 -69
  19. package/lib/renderer/WGPURayTraceOutput.js +14 -14
  20. package/lib/renderer/WGPURayTracePass.d.ts +2 -0
  21. package/lib/renderer/WGPURayTracePass.js +17 -9
  22. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  23. package/lib/renderer/WGPURenderingPipeline.js +15 -15
  24. package/lib/renderer/WebGLJNLMDenoiser.js +69 -69
  25. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  26. package/lib/renderer/WebGLRayTracePass.d.ts +1 -0
  27. package/lib/renderer/WebGLRayTracePass.js +8 -1
  28. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  29. package/lib/renderer/envMapCreation.d.ts +5 -1
  30. package/lib/renderer/envMapCreation.js +42 -5
  31. package/lib/renderer/envMapCreation.js.map +1 -1
  32. package/lib/renderer/geometryUpdates.js +1 -1
  33. package/lib/renderer/geometryUpdates.js.map +1 -1
  34. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
  35. package/lib/renderer/glsl/chunks/envMap.glsl.js +66 -54
  36. package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
  37. package/lib/renderer/glsl/chunks/intersect.glsl.js +323 -315
  38. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  39. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +154 -121
  40. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
  41. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +434 -434
  42. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
  43. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  44. package/lib/renderer/glsl/chunks/random.glsl.js +3 -3
  45. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +42 -41
  46. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  47. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +69 -69
  48. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +84 -84
  49. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  50. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
  51. package/lib/renderer/glsl/chunks/sampling.glsl.js +75 -75
  52. package/lib/renderer/glsl/chunks/sobol.glsl.js +61 -61
  53. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  54. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
  55. package/lib/renderer/glsl/depthQuery.frag.js +5 -5
  56. package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
  57. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
  58. package/lib/renderer/glsl/rayTrace.frag.js +133 -133
  59. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  60. package/lib/renderer/glsl/shadowCatcher.frag.js +9 -9
  61. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  62. package/lib/renderer/glsl/webglPipeline.frag.js +52 -52
  63. package/lib/renderer/lightsUtil.js +6 -4
  64. package/lib/renderer/lightsUtil.js.map +1 -1
  65. package/lib/renderer/materialChanges.js +1 -1
  66. package/lib/renderer/materialChanges.js.map +1 -1
  67. package/lib/renderer/materialComparison.generated.js +36 -18
  68. package/lib/renderer/materialComparison.generated.js.map +1 -1
  69. package/lib/renderer/prepareMeshBVH.js +2 -2
  70. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  71. package/lib/renderer/sceneChangeDetector.js +4 -1
  72. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  73. package/lib/renderer/sceneLightChanges.js +3 -2
  74. package/lib/renderer/sceneLightChanges.js.map +1 -1
  75. package/lib/renderer/scratchSampling.js +18 -18
  76. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  77. package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
  78. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +39 -31
  79. package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
  80. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +476 -470
  81. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  82. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +8 -8
  83. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +95 -60
  84. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  85. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +469 -469
  86. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +1 -1
  87. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +117 -120
  88. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -1
  89. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  90. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +25 -22
  91. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  92. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +127 -127
  93. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +136 -136
  94. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +6 -6
  95. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +73 -73
  96. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +62 -62
  97. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
  98. package/lib/renderer/wgsl/compose.frag.wgsl.js +105 -105
  99. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  100. package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
  101. package/lib/renderer/wgsl/depthQuery.wgsl.js +5 -5
  102. package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
  103. package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
  104. package/lib/renderer/wgsl/rayTrace.compute.js +251 -248
  105. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  106. package/lib/scene/EnvironmentLight.d.ts +9 -3
  107. package/lib/scene/EnvironmentLight.js +9 -2
  108. package/lib/scene/EnvironmentLight.js.map +1 -1
  109. package/lib/scene/OpenPBRMaterial.d.ts +1 -1
  110. package/lib/scene/OpenPBRMaterial.js +1 -1
  111. package/lib/scene/OpenPBRMaterial.js.map +1 -1
  112. package/lib/scene/Scene.d.ts +4 -0
  113. package/lib/scene/Scene.js.map +1 -1
  114. package/lib/scene/SpotLight.d.ts +2 -2
  115. package/lib/scene/SpotLight.js +1 -1
  116. package/lib/scene/SpotLight.js.map +1 -1
  117. package/lib/scene/Texture.d.ts +17 -6
  118. package/lib/scene/Texture.js +13 -4
  119. package/lib/scene/Texture.js.map +1 -1
  120. package/lib/util/fromTHREE.js +151 -29
  121. package/lib/util/fromTHREE.js.map +1 -1
  122. package/lib/version.d.ts +1 -1
  123. package/lib/version.js +1 -1
  124. package/lib/version.js.map +1 -1
  125. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  export const linearToSrgbDefine = /* wgsl */ `
2
- fn fJ(color: vec3f) -> vec3f {
2
+ fn fN(color: vec3f) -> vec3f {
3
3
  let linear = max(color, vec3f(0.0));
4
4
  let low = linear * 12.92;
5
5
  let high = 1.055 * pow(linear, vec3f(1.0 / 2.4)) - 0.055;
@@ -8,90 +8,90 @@ return select(high, low, linear <= vec3f(0.0031308));
8
8
  `;
9
9
  export const composeDefine = /* wgsl */ `
10
10
 
11
- fn jN(color: vec3f) -> vec3f {
11
+ fn jU(color: vec3f) -> vec3f {
12
12
  return clamp(color, vec3f(0.0), vec3f(1.0));
13
13
  }
14
- fn iK(color: vec3f) -> vec3f {
14
+ fn iP(color: vec3f) -> vec3f {
15
15
  return clamp(color / (vec3f(1.0) + color), vec3f(0.0), vec3f(1.0));
16
16
  }
17
- fn jE(jm: vec3f) -> vec3f {
18
- let color = max(vec3f(0.0), jm - 0.004);
17
+ fn jJ(jr: vec3f) -> vec3f {
18
+ let color = max(vec3f(0.0), jr - 0.004);
19
19
  return pow((color * (6.2 * color + 0.5)) /
20
20
  (color * (6.2 * color + 1.7) + 0.06), vec3f(2.2));
21
21
  }
22
- fn oA(value: vec3f) -> vec3f {
23
- let kF = value * (value + 0.0245786) - 0.000090537;
22
+ fn oI(value: vec3f) -> vec3f {
23
+ let kO = value * (value + 0.0245786) - 0.000090537;
24
24
  let ap = value * (0.983729 * value + 0.4329510) + 0.238081;
25
- return kF / ap;
25
+ return kO / ap;
26
26
  }
27
- fn ll(jm: vec3f) -> vec3f {
28
- let pn = mat3x3f(
27
+ fn lv(jr: vec3f) -> vec3f {
28
+ let pw = mat3x3f(
29
29
  vec3f(0.59719, 0.07600, 0.02840),
30
30
  vec3f(0.35458, 0.90834, 0.13383),
31
31
  vec3f(0.04823, 0.01566, 0.83777)
32
32
  );
33
- let ov = mat3x3f(
33
+ let oD = mat3x3f(
34
34
  vec3f(1.60475, -0.10208, -0.00327),
35
35
  vec3f(-0.53108, 1.10813, -0.07276),
36
36
  vec3f(-0.07367, -0.00605, 1.07602)
37
37
  );
38
- let color = pn * (jm / 0.6);
39
- return clamp(ov * oA(color), vec3f(0.0), vec3f(1.0));
40
- }
41
- fn fP(value: vec3f) -> vec3f {
42
- let mE = value * value;
43
- let qC = mE * mE;
44
- return 15.5 * qC * mE - 40.14 * qC * value
45
- + 31.96 * qC - 6.868 * mE * value
46
- + 0.4298 * mE + 0.1191 * value - 0.00232;
47
- }
48
- fn lS(jm: vec3f) -> vec3f {
49
- let mG = mat3x3f(
38
+ let color = pw * (jr / 0.6);
39
+ return clamp(oD * oI(color), vec3f(0.0), vec3f(1.0));
40
+ }
41
+ fn fU(value: vec3f) -> vec3f {
42
+ let mN = value * value;
43
+ let qK = mN * mN;
44
+ return 15.5 * qK * mN - 40.14 * qK * value
45
+ + 31.96 * qK - 6.868 * mN * value
46
+ + 0.4298 * mN + 0.1191 * value - 0.00232;
47
+ }
48
+ fn mc(jr: vec3f) -> vec3f {
49
+ let mQ = mat3x3f(
50
50
  vec3f(1.6605, -0.1246, -0.0182),
51
51
  vec3f(-0.5876, 1.1329, -0.1006),
52
52
  vec3f(-0.0728, -0.0083, 1.1187)
53
53
  );
54
- let mH = mat3x3f(
54
+ let mR = mat3x3f(
55
55
  vec3f(0.6274, 0.0691, 0.0164),
56
56
  vec3f(0.3293, 0.9195, 0.0880),
57
57
  vec3f(0.0433, 0.0113, 0.8956)
58
58
  );
59
- let pp = mat3x3f(
59
+ let pH = mat3x3f(
60
60
  vec3f(0.856627153315983, 0.137318972929847, 0.11189821299995),
61
61
  vec3f(0.0951212405381588, 0.761241990602591, 0.0767994186031903),
62
62
  vec3f(0.0482516061458583, 0.101439036467562, 0.811302368396859)
63
63
  );
64
- let ow = mat3x3f(
64
+ let oE = mat3x3f(
65
65
  vec3f(1.1271005818144368, -0.1413297634984383, -0.14132976349843826),
66
66
  vec3f(-0.11060664309660323, 1.157823702216272, -0.11060664309660294),
67
67
  vec3f(-0.016493938717834573, -0.016493938717834257, 1.2519364065950405)
68
68
  );
69
- var color = pp * (mH * jm);
69
+ var color = pH * (mR * jr);
70
70
  color = clamp((log2(max(color, vec3f(1e-10))) + 12.47393) / 16.5, vec3f(0.0), vec3f(1.0));
71
- color = ow * fP(color);
71
+ color = oE * fU(color);
72
72
  color = pow(max(color, vec3f(0.0)), vec3f(2.2));
73
- return clamp(mG * color, vec3f(0.0), vec3f(1.0));
73
+ return clamp(mQ * color, vec3f(0.0), vec3f(1.0));
74
74
  }
75
75
  fn cl(color: vec3f) -> vec3f {
76
76
  let toneMappingMode = i32(toneMappingParams.x);
77
- if (toneMappingMode == 1) { return ll(color); }
78
- if (toneMappingMode == 2) { return jE(color); }
79
- if (toneMappingMode == 3) { return iK(color); }
80
- if (toneMappingMode == 4) { return jN(color); }
81
- return lS(color);
77
+ if (toneMappingMode == 1) { return lv(color); }
78
+ if (toneMappingMode == 2) { return jJ(color); }
79
+ if (toneMappingMode == 3) { return iP(color); }
80
+ if (toneMappingMode == 4) { return jU(color); }
81
+ return mc(color);
82
82
  }
83
83
  ${linearToSrgbDefine}
84
- fn fX(jm: vec3f) -> vec3f {
84
+ fn gc(jr: vec3f) -> vec3f {
85
85
  let contrast = colorGradingParams.x;
86
86
  let saturation = colorGradingParams.y;
87
87
  let temperature = colorGradingParams.z;
88
88
  let tint = colorGradingParams.w;
89
- let tb = vec3f(
89
+ let tj = vec3f(
90
90
  1.0 + temperature * 0.16 + tint * 0.04,
91
91
  1.0 - tint * 0.12,
92
92
  1.0 - temperature * 0.16 + tint * 0.04
93
93
  );
94
- var color = max(jm * tb, vec3f(0.0));
94
+ var color = max(jr * tj, vec3f(0.0));
95
95
  color = max((color - 0.18) * contrast + 0.18, vec3f(0.0));
96
96
  let luminance = dot(color, vec3f(0.2126, 0.7152, 0.0722));
97
97
  return max(mix(vec3f(luminance), color, saturation), vec3f(0.0));
@@ -100,54 +100,54 @@ return max(mix(vec3f(luminance), color, saturation), vec3f(0.0));
100
100
  export const composeMain = /* wgsl */ `
101
101
 
102
102
  var dY = load_colorTex(uv, 0);
103
- var jh = vec4(0.0);
103
+ var jl = vec4(0.0);
104
104
  if (bloomIntensity > 0.0) {
105
- jh = load_bloomTex(uv, 0) * bloomIntensity;
106
- dY = vec4f(dY.rgb + jh.rgb, dY.a);
105
+ jl = load_bloomTex(uv, 0) * bloomIntensity;
106
+ dY = vec4f(dY.rgb + jl.rgb, dY.a);
107
107
  }
108
108
 
109
- var la = fX(dY.rgb * exposure);
110
- let iE = smoothstep(0.2, 0.72, distance(vec2f(uv) / vec2f(colorTexRegion()), vec2f(0.5)));
111
- la *= 1.0 - toneMappingParams.y * iE;
112
- let gw = hdrOutputEnabled > 0.5;
113
- if (!gw) {
114
- la = cl(la);
109
+ var ll = gc(dY.rgb * exposure);
110
+ let iI = smoothstep(0.2, 0.72, distance(vec2f(uv) / vec2f(colorTexRegion()), vec2f(0.5)));
111
+ ll *= 1.0 - toneMappingParams.y * iI;
112
+ let gC = hdrOutputEnabled > 0.5;
113
+ if (!gC) {
114
+ ll = cl(ll);
115
115
  }
116
- let mb = select(
117
- pow(max(la, vec3f(0.0)), vec3f(1.0 / 2.2)),
118
- fJ(la),
119
- gw
116
+ let ml = select(
117
+ pow(max(ll, vec3f(0.0)), vec3f(1.0 / 2.2)),
118
+ fN(ll),
119
+ gC
120
120
  );
121
- var nR = mb;
121
+ var ob = ml;
122
122
  if (flatBackgroundColor.a > 0.5) {
123
- let jc = clamp(
123
+ let jg = clamp(
124
124
  load_flatBackgroundMaskTex(uv, 0).a,
125
125
  0.0,
126
126
  1.0
127
127
  );
128
- let oS = fJ(max(flatBackgroundColor.rgb, vec3f(0.0)));
129
- nR = mix(oS, mb, jc);
128
+ let pb = fN(max(flatBackgroundColor.rgb, vec3f(0.0)));
129
+ ob = mix(pb, ml, jg);
130
130
  if (bloomIntensity > 0.0) {
131
- var ik = fX(
132
- max(dY.rgb - jh.rgb, vec3f(0.0))
131
+ var ir = gc(
132
+ max(dY.rgb - jl.rgb, vec3f(0.0))
133
133
  * exposure
134
134
  );
135
- ik *= 1.0 - toneMappingParams.y * iE;
136
- if (!gw) {
137
- ik = cl(ik);
138
- }
139
- let ru = select(
140
- pow(max(ik, vec3f(0.0)), vec3f(1.0 / 2.2)),
141
- fJ(ik),
142
- gw
135
+ ir *= 1.0 - toneMappingParams.y * iI;
136
+ if (!gC) {
137
+ ir = cl(ir);
138
+ }
139
+ let rF = select(
140
+ pow(max(ir, vec3f(0.0)), vec3f(1.0 / 2.2)),
141
+ fN(ir),
142
+ gC
143
143
  );
144
- nR += max(mb - ru, vec3f(0.0))
145
- * (1.0 - jc);
144
+ ob += max(ml - rF, vec3f(0.0))
145
+ * (1.0 - jg);
146
146
  }
147
147
  }
148
- dY = vec4f(nR, dY.a);
148
+ dY = vec4f(ob, dY.a);
149
149
  if (bloomIntensity > 0.0) {
150
- dY.a = max(dY.a, min(dot(jh.rgb, vec3f(0.2125, 0.7154, 0.0721)), 1.0));
150
+ dY.a = max(dY.a, min(dot(jl.rgb, vec3f(0.2125, 0.7154, 0.0721)), 1.0));
151
151
  }
152
152
 
153
153
  if (shadowCatcherEnabled > 0.5) {
@@ -161,36 +161,36 @@ let background = load_catcherBackgroundTex(uv, 0);
161
161
 
162
162
 
163
163
 
164
- let kz = select(0.0, clamp(background.a - coverage, 0.0, 1.0 - coverage), flatBackgroundColor.a > 0.5);
165
- var bK = fX((foreground.rgb + jh.rgb) * exposure);
166
- var backgroundColor = fX((background.rgb / max(background.a, 0.000001) + jh.rgb) * exposure);
167
- bK *= 1.0 - toneMappingParams.y * iE;
168
- backgroundColor *= 1.0 - toneMappingParams.y * iE;
169
- if (!gw) {
164
+ let kH = select(0.0, clamp(background.a - coverage, 0.0, 1.0 - coverage), flatBackgroundColor.a > 0.5);
165
+ var bK = gc((foreground.rgb + jl.rgb) * exposure);
166
+ var backgroundColor = gc((background.rgb / max(background.a, 0.000001) + jl.rgb) * exposure);
167
+ bK *= 1.0 - toneMappingParams.y * iI;
168
+ backgroundColor *= 1.0 - toneMappingParams.y * iI;
169
+ if (!gC) {
170
170
  bK = cl(bK);
171
171
  backgroundColor = cl(backgroundColor);
172
172
  }
173
- bK = select(pow(max(bK, vec3f(0.0)), vec3f(1.0 / 2.2)), fJ(bK), gw);
174
- backgroundColor = select(pow(max(backgroundColor, vec3f(0.0)), vec3f(1.0 / 2.2)), fJ(backgroundColor), gw);
173
+ bK = select(pow(max(bK, vec3f(0.0)), vec3f(1.0 / 2.2)), fN(bK), gC);
174
+ backgroundColor = select(pow(max(backgroundColor, vec3f(0.0)), vec3f(1.0 / 2.2)), fN(backgroundColor), gC);
175
175
  if (flatBackgroundColor.a > 0.5) {
176
- var eM = fX(background.rgb / max(background.a, 0.000001) * exposure);
177
- eM *= 1.0 - toneMappingParams.y * iE;
178
- if (!gw) { eM = cl(eM); }
179
- let mc = select(pow(max(eM, vec3f(0.0)), vec3f(1.0 / 2.2)), fJ(eM), gw);
180
- let ud = select(vec3f(0.0), max(backgroundColor - mc, vec3f(0.0)), bloomIntensity > 0.0);
181
- backgroundColor = fJ(max(flatBackgroundColor.rgb, vec3f(0.0))) + ud;
182
- }
183
-
184
-
185
- let fO = coverage * opacity;
186
- let lU = clamp(dot(jh.rgb, vec3f(0.2125, 0.7154, 0.0721)), 0.0, 1.0);
187
- let hr = max(foreground.a, lU * (1.0 - coverage - kz));
188
- let iZ = max(background.a, lU * coverage);
189
- let kl = (iZ - kz) * (1.0 - opacity) + kz;
190
- let alpha = hr + kl + fO;
191
- let premultiplied = bK * hr
192
- + backgroundColor * kl
193
- + shadowCatcherColor * fO;
176
+ var eP = gc(background.rgb / max(background.a, 0.000001) * exposure);
177
+ eP *= 1.0 - toneMappingParams.y * iI;
178
+ if (!gC) { eP = cl(eP); }
179
+ let mn = select(pow(max(eP, vec3f(0.0)), vec3f(1.0 / 2.2)), fN(eP), gC);
180
+ let uk = select(vec3f(0.0), max(backgroundColor - mn, vec3f(0.0)), bloomIntensity > 0.0);
181
+ backgroundColor = fN(max(flatBackgroundColor.rgb, vec3f(0.0))) + uk;
182
+ }
183
+
184
+
185
+ let fS = coverage * opacity;
186
+ let mf = clamp(dot(jl.rgb, vec3f(0.2125, 0.7154, 0.0721)), 0.0, 1.0);
187
+ let hv = max(foreground.a, mf * (1.0 - coverage - kH));
188
+ let jd = max(background.a, mf * coverage);
189
+ let ku = (jd - kH) * (1.0 - opacity) + kH;
190
+ let alpha = hv + ku + fS;
191
+ let premultiplied = bK * hv
192
+ + backgroundColor * ku
193
+ + shadowCatcherColor * fS;
194
194
  dY = vec4f(premultiplied / max(alpha, 0.000001), alpha);
195
195
  }
196
196
  }
@@ -203,35 +203,35 @@ output.color = dY;
203
203
  // linear-light image. Alpha is deliberately not used as a second color layer.
204
204
  export const compositeDenoiseOutputMain = /* wgsl */ `
205
205
  let encoded = max(dY.rgb, vec3f(0.0));
206
- let sP = select(
206
+ let sW = select(
207
207
  pow(encoded, vec3f(2.2)),
208
208
  select(pow((encoded + 0.055) / 1.055, vec3f(2.4)), encoded / 12.92,
209
209
  encoded <= vec3f(0.04045)),
210
- gw
210
+ gC
211
211
  );
212
- output.denoiseColor = vec4f(sP, dY.a);
212
+ output.denoiseColor = vec4f(sW, dY.a);
213
213
 
214
214
 
215
215
 
216
216
 
217
217
 
218
218
  let rawAlbedo = load_flatBackgroundMaskTex(uv, 0);
219
- var oN = rawAlbedo.rgb;
219
+ var oW = rawAlbedo.rgb;
220
220
  if (shadowCatcherEnabled > 0.5 && flatBackgroundColor.a < 0.5) {
221
221
  let coverage = clamp(load_shadowCatcherTex(uv, 0).r, 0.0, 1.0);
222
222
  let background = load_catcherBackgroundTex(uv, 0);
223
223
  if (coverage > 0.0 && background.a > 0.0) {
224
- var im = fX(background.rgb / background.a * exposure);
225
- im *= 1.0 - toneMappingParams.y * iE;
226
- if (!gw) { im = cl(im); }
224
+ var iv = gc(background.rgb / background.a * exposure);
225
+ iv *= 1.0 - toneMappingParams.y * iI;
226
+ if (!gC) { iv = cl(iv); }
227
227
 
228
228
 
229
229
 
230
- let rk = clamp(background.a, 0.0, coverage);
231
- oN += rk * (clamp(im, vec3f(0.0), vec3f(1.0)) - vec3f(1.0));
230
+ let rs = clamp(background.a, 0.0, coverage);
231
+ oW += rs * (clamp(iv, vec3f(0.0), vec3f(1.0)) - vec3f(1.0));
232
232
  }
233
233
  }
234
- output.denoiseAlbedo = vec4f(clamp(oN, vec3f(0.0), vec3f(1.0)), rawAlbedo.a);
234
+ output.denoiseAlbedo = vec4f(clamp(oW, vec3f(0.0), vec3f(1.0)), rawAlbedo.a);
235
235
  `;
236
236
  export const compositeDenoiseDisplayMain = /* wgsl */ `
237
237
  let denoised = load_colorTex(uv, 0);
@@ -240,7 +240,7 @@ let denoised = load_colorTex(uv, 0);
240
240
 
241
241
  let alpha = select(load_composedTex(uv, 0).a, clamp(denoised.a, 0.0, 1.0), denoisedAlpha > 0.5);
242
242
  let linear = max(denoised.rgb, vec3f(0.0));
243
- let encoded = select(pow(linear, vec3f(1.0 / 2.2)), fJ(linear), hdrOutputEnabled > 0.5);
243
+ let encoded = select(pow(linear, vec3f(1.0 / 2.2)), fN(linear), hdrOutputEnabled > 0.5);
244
244
  output.color = vec4f(select(vec3f(0.0), encoded, alpha > 0.0), alpha);
245
245
  `;
246
246
  //# sourceMappingURL=compose.frag.wgsl.js.map
@@ -5,19 +5,19 @@ let filtered = load_filteredTex(uv, 0).rgb;
5
5
  let foreground = load_foregroundTex(uv, 0);
6
6
  let background = load_backgroundTex(uv, 0);
7
7
 
8
- var mh = foreground;
9
- var mg = background;
8
+ var mr = foreground;
9
+ var mq = background;
10
10
  if (any(filtered != original)) {
11
- let uq = abs(original) > vec3f(0.000001);
12
- let ap = select(vec3f(1.0), original, uq);
13
- let scale = select(vec3f(1.0), filtered / ap, uq);
14
- let tU = select(filtered - original, vec3f(0.0), uq);
15
- mh = vec4f(foreground.rgb * scale + tU, foreground.a);
11
+ let uz = abs(original) > vec3f(0.000001);
12
+ let ap = select(vec3f(1.0), original, uz);
13
+ let scale = select(vec3f(1.0), filtered / ap, uz);
14
+ let ub = select(filtered - original, vec3f(0.0), uz);
15
+ mr = vec4f(foreground.rgb * scale + ub, foreground.a);
16
16
 
17
- mg = vec4f(background.rgb * scale + tU * background.a, background.a);
17
+ mq = vec4f(background.rgb * scale + ub * background.a, background.a);
18
18
  }
19
- output.foreground = mh;
20
- output.background = mg;
19
+ output.foreground = mr;
20
+ output.background = mq;
21
21
  `;
22
22
  /** Custom output alpha is ignored; retain the input composition's coverage. */
23
23
  export const customDenoiseCoverageMain = /* wgsl */ `
@@ -1,3 +1,3 @@
1
1
  /** Extra entry point in the ray-tracing module; reuses its scene bindings. */
2
- declare const _default: "\n@group(3) @binding(4) var<uniform> depthArea: vec4f;\n\n@compute @workgroup_size(7, 7)\nfn depthQuery(@builtin(global_invocation_id) id: vec3u) {\n let index = id.x + id.y * 7u;\n let offset = vec2f(id.xy) / 6.0 * 2.0 - 1.0;\n let uv = depthArea.xy + depthArea.zw * offset * vec2f(1.0, -1.0);\n outColor[index] = vec4f(0.0);\n if (any(uv < vec2f(0.0)) || any(uv > vec2f(1.0))) { return; }\n var ray = initCameraRay(uv);\n let eye = cameraUniform.viewInv[3].xyz;\n let forward = -normalize(cameraUniform.viewInv[2].xyz);\n var si: SurfaceInteraction;\n si.triangleIndex = -1;\n // Ignore invisible catchers and alpha-cutout holes, without stochastic DOF\n // or pixel jitter. A bounded continuation prevents coincident surfaces\n // from keeping the query alive indefinitely.\n for (var layer = 0; layer < 32; layer++) {\n intersectScene(ray, &si, 0, false, false);\n if (!si.hit) { return; }\n var material: OpenPbrResolvedMaterial;\n getMaterial(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex);\n if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {\n outColor[index] = vec4f(max(dot(si.position - eye, forward), 0.0), 0.0, 0.0, 0.0);\n return;\n }\n ray.o = si.position + ray.d * (EPS * 0.02);\n }\n}\n";
2
+ declare const _default: "\n@group(3) @binding(4) var<uniform> depthArea: vec4f;\n\n@compute @workgroup_size(7, 7)\nfn depthQuery(@builtin(global_invocation_id) id: vec3u) {\n let index = id.x + id.y * 7u;\n let offset = vec2f(id.xy) / 6.0 * 2.0 - 1.0;\n let uv = depthArea.xy + depthArea.zw * offset * vec2f(1.0, -1.0);\n outColor[index] = vec4f(0.0);\n if (any(uv < vec2f(0.0)) || any(uv > vec2f(1.0))) { return; }\n var ray = initCameraRay(uv);\n let eye = cameraUniform.viewInv[3].xyz;\n let forward = -normalize(cameraUniform.viewInv[2].xyz);\n var si: SurfaceInteraction;\n si.triangleIndex = -1;\n // Ignore invisible catchers and alpha-cutout holes, without stochastic DOF\n // or pixel jitter. A bounded continuation prevents coincident surfaces\n // from keeping the query alive indefinitely.\n for (var layer = 0; layer < 32; layer++) {\n intersectScene(ray, &si, 0, false, false);\n if (!si.hit) { return; }\n var material: OpenPbrResolvedMaterial;\n getMaterial(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);\n if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {\n outColor[index] = vec4f(max(dot(si.position - eye, forward), 0.0), 0.0, 0.0, 0.0);\n return;\n }\n ray.o = si.position + ray.d * (EPS * 0.02);\n }\n}\n";
3
3
  export default _default;
@@ -10,21 +10,21 @@ let offset = vec2f(id.xy) / ${DEPTH_SAMPLE_GRID - 1}.0 * 2.0 - 1.0;
10
10
  let uv = depthArea.xy + depthArea.zw * offset * vec2f(1.0, -1.0);
11
11
  outColor[index] = vec4f(0.0);
12
12
  if (any(uv < vec2f(0.0)) || any(uv > vec2f(1.0))) { return; }
13
- var ray = hy(uv);
13
+ var ray = hC(uv);
14
14
  let eye = cameraUniform.viewInv[3].xyz;
15
- let nY = -normalize(cameraUniform.viewInv[2].xyz);
15
+ let oj = -normalize(cameraUniform.viewInv[2].xyz);
16
16
  var si: ad;
17
17
  si.triangleIndex = -1;
18
18
 
19
19
 
20
20
 
21
21
  for (var layer = 0; layer < 32; layer++) {
22
- cY(ray, &si, 0, false, false);
22
+ cZ(ray, &si, 0, false, false);
23
23
  if (!si.hit) { return; }
24
24
  var material: J;
25
- eT(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex);
25
+ eX(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
26
26
  if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {
27
- outColor[index] = vec4f(max(dot(si.position - eye, nY), 0.0), 0.0, 0.0, 0.0);
27
+ outColor[index] = vec4f(max(dot(si.position - eye, oj), 0.0), 0.0, 0.0, 0.0);
28
28
  return;
29
29
  }
30
30
  ray.o = si.position + ray.d * (EPS * 0.02);
@@ -1 +1 @@
1
- {"version":3,"file":"depthQuery.wgsl.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/depthQuery.wgsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,8EAA8E;AAC9E,eAAe,UAAU,CAAC;;;2BAGC,iBAAiB,KAAK,iBAAiB;;4BAEpC,iBAAiB;8BACf,iBAAiB,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBpD,CAAC","sourcesContent":["import { DEPTH_SAMPLE_GRID } from '../depthQuery.js';\n\n/** Extra entry point in the ray-tracing module; reuses its scene bindings. */\nexport default /* wgsl */ `\n@group(3) @binding(4) var<uniform> depthArea: vec4f;\n\n@compute @workgroup_size(${DEPTH_SAMPLE_GRID}, ${DEPTH_SAMPLE_GRID})\nfn depthQuery(@builtin(global_invocation_id) id: vec3u) {\n let index = id.x + id.y * ${DEPTH_SAMPLE_GRID}u;\n let offset = vec2f(id.xy) / ${DEPTH_SAMPLE_GRID - 1}.0 * 2.0 - 1.0;\n let uv = depthArea.xy + depthArea.zw * offset * vec2f(1.0, -1.0);\n outColor[index] = vec4f(0.0);\n if (any(uv < vec2f(0.0)) || any(uv > vec2f(1.0))) { return; }\n var ray = initCameraRay(uv);\n let eye = cameraUniform.viewInv[3].xyz;\n let forward = -normalize(cameraUniform.viewInv[2].xyz);\n var si: SurfaceInteraction;\n si.triangleIndex = -1;\n // Ignore invisible catchers and alpha-cutout holes, without stochastic DOF\n // or pixel jitter. A bounded continuation prevents coincident surfaces\n // from keeping the query alive indefinitely.\n for (var layer = 0; layer < 32; layer++) {\n intersectScene(ray, &si, 0, false, false);\n if (!si.hit) { return; }\n var material: OpenPbrResolvedMaterial;\n getMaterial(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex);\n if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {\n outColor[index] = vec4f(max(dot(si.position - eye, forward), 0.0), 0.0, 0.0, 0.0);\n return;\n }\n ray.o = si.position + ray.d * (EPS * 0.02);\n }\n}\n`;\n"]}
1
+ {"version":3,"file":"depthQuery.wgsl.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/depthQuery.wgsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,8EAA8E;AAC9E,eAAe,UAAU,CAAC;;;2BAGC,iBAAiB,KAAK,iBAAiB;;4BAEpC,iBAAiB;8BACf,iBAAiB,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBpD,CAAC","sourcesContent":["import { DEPTH_SAMPLE_GRID } from '../depthQuery.js';\n\n/** Extra entry point in the ray-tracing module; reuses its scene bindings. */\nexport default /* wgsl */ `\n@group(3) @binding(4) var<uniform> depthArea: vec4f;\n\n@compute @workgroup_size(${DEPTH_SAMPLE_GRID}, ${DEPTH_SAMPLE_GRID})\nfn depthQuery(@builtin(global_invocation_id) id: vec3u) {\n let index = id.x + id.y * ${DEPTH_SAMPLE_GRID}u;\n let offset = vec2f(id.xy) / ${DEPTH_SAMPLE_GRID - 1}.0 * 2.0 - 1.0;\n let uv = depthArea.xy + depthArea.zw * offset * vec2f(1.0, -1.0);\n outColor[index] = vec4f(0.0);\n if (any(uv < vec2f(0.0)) || any(uv > vec2f(1.0))) { return; }\n var ray = initCameraRay(uv);\n let eye = cameraUniform.viewInv[3].xyz;\n let forward = -normalize(cameraUniform.viewInv[2].xyz);\n var si: SurfaceInteraction;\n si.triangleIndex = -1;\n // Ignore invisible catchers and alpha-cutout holes, without stochastic DOF\n // or pixel jitter. A bounded continuation prevents coincident surfaces\n // from keeping the query alive indefinitely.\n for (var layer = 0; layer < 32; layer++) {\n intersectScene(ray, &si, 0, false, false);\n if (!si.hit) { return; }\n var material: OpenPbrResolvedMaterial;\n getMaterial(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);\n if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {\n outColor[index] = vec4f(max(dot(si.position - eye, forward), 0.0), 0.0, 0.0, 0.0);\n return;\n }\n ray.o = si.position + ray.d * (EPS * 0.02);\n }\n}\n`;\n"]}
@@ -27,8 +27,8 @@ _padding: f32,
27
27
  const LUMINANCE = vec3f(0.2126, 0.7152, 0.0722);
28
28
 
29
29
  @compute @workgroup_size(64)
30
- fn main(@builtin(global_invocation_id) ui: vec3u) {
31
- let tile = ui.x;
30
+ fn main(@builtin(global_invocation_id) uq: vec3u) {
31
+ let tile = uq.x;
32
32
  let tileCount = params.columns * params.rows;
33
33
  if (tile >= tileCount) {
34
34
  return;
@@ -36,18 +36,18 @@ return;
36
36
 
37
37
  let tileX = tile % params.columns;
38
38
  let tileY = tile / params.columns;
39
- let un = tileX * params.tileSize;
40
- let uo = tileY * params.tileSize;
41
- let wd = min(un + params.tileSize, params.width);
42
- let wf = min(uo + params.tileSize, params.height);
43
- var mO = 0.0;
44
- var ja = 0.0;
39
+ let ux = tileX * params.tileSize;
40
+ let uy = tileY * params.tileSize;
41
+ let wl = min(ux + params.tileSize, params.width);
42
+ let wm = min(uy + params.tileSize, params.height);
43
+ var mY = 0.0;
44
+ var je = 0.0;
45
45
  var count = 0u;
46
46
 
47
- for (var y = uo; y < wf; y++) {
48
- for (var x = un; x < wd; x++) {
49
- let fM = y * params.width + x;
50
- let offset = fM * 4u;
47
+ for (var y = uy; y < wm; y++) {
48
+ for (var x = ux; x < wl; x++) {
49
+ let fQ = y * params.width + x;
50
+ let offset = fQ * 4u;
51
51
  let samples = pilotMoments[offset + 3u];
52
52
  if (samples <= 0.0) {
53
53
  continue;
@@ -60,28 +60,28 @@ pilotColor[offset + 2u]
60
60
  ),
61
61
  LUMINANCE
62
62
  ) / samples;
63
- let tD = pilotMoments[offset] / samples;
64
- let oZ = max(tD - mean * mean, 0.0);
65
- var variance = oZ;
63
+ let tK = pilotMoments[offset] / samples;
64
+ let pi = max(tK - mean * mean, 0.0);
65
+ var variance = pi;
66
66
  if (samples > 1.0) {
67
- variance = oZ * samples / (samples - 1.0);
67
+ variance = pi * samples / (samples - 1.0);
68
68
  }
69
- mO += mean;
70
- ja = max(ja, variance);
69
+ mY += mean;
70
+ je = max(je, variance);
71
71
  count += 1u;
72
72
  }
73
73
  }
74
74
 
75
- let mean = mO / f32(max(count, 1u));
76
- var oO = 0.0;
75
+ let mean = mY / f32(max(count, 1u));
76
+ var oX = 0.0;
77
77
  if (params.hasPrevious != 0u) {
78
- oO = previousVariance[tile];
78
+ oX = previousVariance[tile];
79
79
  }
80
- let sa = max(ja, oO);
81
- let sY = params.absoluteError + params.relativeError * abs(mean);
80
+ let sj = max(je, oX);
81
+ let tf = params.absoluteError + params.relativeError * abs(mean);
82
82
  let required = ceil(
83
- params.confidence * params.confidence * sa /
84
- max(sY * sY, 1e-16)
83
+ params.confidence * params.confidence * sj /
84
+ max(tf * tf, 1e-16)
85
85
  );
86
86
  let targetSamples = u32(min(
87
87
  f32(params.maxSamples),
@@ -91,11 +91,11 @@ max(f32(params.minSamples), required)
91
91
  tileMeans[tile] = mean;
92
92
 
93
93
 
94
- tileVariances[tile] = ja;
94
+ tileVariances[tile] = je;
95
95
  tileTargets[tile] = targetSamples;
96
96
 
97
- for (var y = uo; y < wf; y++) {
98
- for (var x = un; x < wd; x++) {
97
+ for (var y = uy; y < wm; y++) {
98
+ for (var x = ux; x < wl; x++) {
99
99
  textureStore(
100
100
  targetTexture,
101
101
  vec2i(i32(x), i32(y)),