@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.
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +4114 -4015
- package/docs/api.md +11 -9
- package/docs/threejs.md +30 -4
- package/lib/Engine.js +18 -1
- package/lib/Engine.js.map +1 -1
- package/lib/main.d.ts +1 -1
- package/lib/main.js.map +1 -1
- package/lib/oidn.d.ts +1 -1
- package/lib/oidnBundledWeights.cdn.d.ts +2 -2
- package/lib/renderer/MaterialTable.d.ts +1 -0
- package/lib/renderer/MaterialTable.js +10 -4
- package/lib/renderer/MaterialTable.js.map +1 -1
- package/lib/renderer/WGPUBloomPass.js +18 -18
- package/lib/renderer/WGPUFullQuadPass.js +6 -6
- package/lib/renderer/WGPUJNLMDenoiser.js +69 -69
- package/lib/renderer/WGPURayTraceOutput.js +14 -14
- package/lib/renderer/WGPURayTracePass.d.ts +2 -0
- package/lib/renderer/WGPURayTracePass.js +12 -6
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.js +15 -15
- package/lib/renderer/WebGLJNLMDenoiser.js +69 -69
- package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
- package/lib/renderer/WebGLRayTracePass.d.ts +1 -0
- package/lib/renderer/WebGLRayTracePass.js +7 -1
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/envMapCreation.d.ts +5 -1
- package/lib/renderer/envMapCreation.js +42 -5
- package/lib/renderer/envMapCreation.js.map +1 -1
- package/lib/renderer/geometryUpdates.js +1 -1
- package/lib/renderer/geometryUpdates.js.map +1 -1
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/envMap.glsl.js +66 -54
- package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/intersect.glsl.js +316 -310
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +151 -119
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +414 -414
- package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/random.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +40 -39
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +69 -69
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +78 -78
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/sampling.glsl.js +75 -75
- package/lib/renderer/glsl/chunks/sobol.glsl.js +61 -61
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
- package/lib/renderer/glsl/depthQuery.frag.js +5 -5
- package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +8 -8
- package/lib/renderer/glsl/rayTrace.frag.js +133 -133
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/shadowCatcher.frag.js +9 -9
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +52 -52
- package/lib/renderer/lightsUtil.js +6 -4
- package/lib/renderer/lightsUtil.js.map +1 -1
- package/lib/renderer/materialChanges.js +1 -1
- package/lib/renderer/materialChanges.js.map +1 -1
- package/lib/renderer/materialComparison.generated.js +36 -18
- package/lib/renderer/materialComparison.generated.js.map +1 -1
- package/lib/renderer/prepareMeshBVH.js +2 -2
- package/lib/renderer/prepareMeshBVH.js.map +1 -1
- package/lib/renderer/sceneChangeDetector.js +4 -1
- package/lib/renderer/sceneChangeDetector.js.map +1 -1
- package/lib/renderer/sceneLightChanges.js +3 -2
- package/lib/renderer/sceneLightChanges.js.map +1 -1
- package/lib/renderer/scratchSampling.js +18 -18
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +39 -31
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +475 -469
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +8 -8
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +93 -59
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +469 -469
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +117 -120
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +25 -22
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +127 -127
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +136 -136
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +6 -6
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +73 -73
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +62 -62
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
- package/lib/renderer/wgsl/compose.frag.wgsl.js +105 -105
- package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
- package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/depthQuery.wgsl.js +5 -5
- package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
- package/lib/renderer/wgsl/rayTrace.compute.js +251 -248
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/EnvironmentLight.d.ts +9 -3
- package/lib/scene/EnvironmentLight.js +9 -2
- package/lib/scene/EnvironmentLight.js.map +1 -1
- package/lib/scene/Scene.d.ts +4 -0
- package/lib/scene/Scene.js.map +1 -1
- package/lib/scene/SpotLight.d.ts +2 -2
- package/lib/scene/SpotLight.js +1 -1
- package/lib/scene/SpotLight.js.map +1 -1
- package/lib/scene/Texture.d.ts +17 -6
- package/lib/scene/Texture.js +13 -4
- package/lib/scene/Texture.js.map +1 -1
- package/lib/util/fromTHREE.js +151 -29
- package/lib/util/fromTHREE.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -16,33 +16,33 @@ ${shadowCatcherAccumulationWGSL}
|
|
|
16
16
|
override outputWidth: f32;
|
|
17
17
|
override outputHeight: f32;
|
|
18
18
|
|
|
19
|
-
struct
|
|
19
|
+
struct pd {
|
|
20
20
|
${layers ? `@location(0) foreground: vec4f,
|
|
21
21
|
@location(1) catcherBackground: vec4f` : `@location(0) color: vec4f,
|
|
22
22
|
@location(1) normal: vec4f,
|
|
23
23
|
@location(2) albedo: vec4f${catcher ? ',\n @location(3) shadowCatcher: vec4f' : ''}`}
|
|
24
24
|
}
|
|
25
25
|
@fragment
|
|
26
|
-
fn main(@builtin(position)
|
|
26
|
+
fn main(@builtin(position) fG: vec4f) -> pd {
|
|
27
27
|
let size = vec2u(u32(outputWidth), u32(outputHeight));
|
|
28
|
-
let
|
|
29
|
-
var idx =
|
|
28
|
+
let fP = vec2u(u32(fG.x), size.y - u32(fG.y) - 1u);
|
|
29
|
+
var idx = fP.x + fP.y * size.x;
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
if (sampleCount < 1.0 && normalBuffer[idx].a <= 0.0) {
|
|
35
|
-
let
|
|
36
|
-
let
|
|
37
|
-
((
|
|
38
|
-
((size - vec2u(1u)) /
|
|
35
|
+
let vc = max(sampleTileGrid, vec2u(1u));
|
|
36
|
+
let uM = min(
|
|
37
|
+
((fP + vc / 2u) / vc) * vc,
|
|
38
|
+
((size - vec2u(1u)) / vc) * vc
|
|
39
39
|
);
|
|
40
|
-
let
|
|
41
|
-
if (normalBuffer[
|
|
42
|
-
idx =
|
|
40
|
+
let sH = uM.x + uM.y * size.x;
|
|
41
|
+
if (normalBuffer[sH].a > 0.0) {
|
|
42
|
+
idx = sH;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
var output:
|
|
45
|
+
var output: pd;
|
|
46
46
|
if (normalBuffer[idx].a <= 0.0) {
|
|
47
47
|
${layers ? `output.foreground = vec4f(0.0);
|
|
48
48
|
output.catcherBackground = vec4f(0.0);` : `output.color = vec4f(0.0);
|
|
@@ -62,12 +62,12 @@ let hit = albedo.a;
|
|
|
62
62
|
let total = max(normal.a, 1.0);
|
|
63
63
|
${layers ? `
|
|
64
64
|
let shadow = shadowCatcherBuffer[idx];
|
|
65
|
-
let
|
|
65
|
+
let iV = max(hit - shadow.mask.b, 0.0);
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
output.foreground = vec4f(
|
|
69
69
|
(color.rgb - shadow.background.rgb)
|
|
70
|
-
/ select(total,
|
|
70
|
+
/ select(total, iV, iV > 0.0),
|
|
71
71
|
clamp((color.a - shadow.mask.g) / total, 0.0, 1.0)
|
|
72
72
|
);
|
|
73
73
|
output.catcherBackground = shadow.background / total;
|
|
@@ -57,6 +57,8 @@ export declare function makeRayTraceUniform(): {
|
|
|
57
57
|
sequenceSeed: Uint32Array<ArrayBuffer>;
|
|
58
58
|
zSobolLogSPP: Uint32Array<ArrayBuffer>;
|
|
59
59
|
sampleSequenceOffset: Uint32Array<ArrayBuffer>;
|
|
60
|
+
environmentRotation: Float32Array<ArrayBuffer>;
|
|
61
|
+
backgroundMapTransform: Float32Array<ArrayBuffer>;
|
|
60
62
|
};
|
|
61
63
|
};
|
|
62
64
|
export declare function packAnalyticsLightsToBuffer(lights: AnalyticLight[], texturesIndices: number[], selectionPmfs: number[], iesProfileTexelOffsets?: ArrayLike<number>): Float32Array<ArrayBuffer>;
|
|
@@ -24,7 +24,7 @@ import { WGPU_SCENE_FEATURE_BITS, wgpuSceneFeatureFlags } from './WGPUSceneFeatu
|
|
|
24
24
|
import { mat4 } from '../math.js';
|
|
25
25
|
import MaterialTable, { DEFAULT_MAX_TEXTURE_ARRAY_BYTES, materialUsesMedium } from './MaterialTable.js';
|
|
26
26
|
import { numberArraysEqual } from './util.js';
|
|
27
|
-
import { generateBackgroundMapFromSceneBackground } from './envMapCreation.js';
|
|
27
|
+
import { generateBackgroundMapFromSceneBackground, environmentRotation, backgroundMapTransform } from './envMapCreation.js';
|
|
28
28
|
import rayTraceCompute, { WORKGROUP_SIZE } from './wgsl/rayTrace.compute.js';
|
|
29
29
|
import { CONSTANT_DIRECTIONAL_LIGHT, CONSTANT_RECT_LIGHT, CONSTANT_SPHERE_LIGHT, CONSTANT_SPOT_LIGHT } from './lightsUtil.js';
|
|
30
30
|
import { envMapDistribution, environmentMapSourcesMatch } from './envMapDistribution.js';
|
|
@@ -89,7 +89,7 @@ export function isWebGPUPipelineSpecializationFailure(...errors) {
|
|
|
89
89
|
/** CPU-side views over the `RayTraceUniform` WGSL struct. */
|
|
90
90
|
export function makeRayTraceUniform() {
|
|
91
91
|
// Created from https://webgpufundamentals.org/webgpu/lessons/resources/wgsl-offset-computer.html
|
|
92
|
-
const RayTraceUniformValues = new ArrayBuffer(
|
|
92
|
+
const RayTraceUniformValues = new ArrayBuffer(256);
|
|
93
93
|
const RayTraceUniformViews = {
|
|
94
94
|
outputSize: new Float32Array(RayTraceUniformValues, 0, 2),
|
|
95
95
|
sampleCount: new Float32Array(RayTraceUniformValues, 8, 1),
|
|
@@ -119,11 +119,15 @@ export function makeRayTraceUniform() {
|
|
|
119
119
|
sceneFeatureFlags: new Uint32Array(RayTraceUniformValues, 152, 1),
|
|
120
120
|
sequenceSeed: new Uint32Array(RayTraceUniformValues, 156, 1),
|
|
121
121
|
zSobolLogSPP: new Uint32Array(RayTraceUniformValues, 160, 1),
|
|
122
|
-
sampleSequenceOffset: new Uint32Array(RayTraceUniformValues, 164, 1)
|
|
122
|
+
sampleSequenceOffset: new Uint32Array(RayTraceUniformValues, 164, 1),
|
|
123
|
+
environmentRotation: new Float32Array(RayTraceUniformValues, 176, 16),
|
|
124
|
+
backgroundMapTransform: new Float32Array(RayTraceUniformValues, 240, 4)
|
|
123
125
|
};
|
|
124
126
|
// Fixed runtime trip bounds discourage thin-film loop unrolling. Keep 4 for
|
|
125
127
|
// 2 polarizations/substrates and 3 channels, independent of BSDF budgets.
|
|
126
128
|
RayTraceUniformViews.loopUnrollGuard[0] = 4;
|
|
129
|
+
RayTraceUniformViews.environmentRotation.set(environmentRotation([]));
|
|
130
|
+
RayTraceUniformViews.backgroundMapTransform.set(backgroundMapTransform());
|
|
127
131
|
RayTraceUniformViews.bevel[0] = 1;
|
|
128
132
|
RayTraceUniformViews.dispersionWavelengths[0] = 3;
|
|
129
133
|
return {
|
|
@@ -179,7 +183,7 @@ export function packAnalyticsLightsToBuffer(lights, texturesIndices, selectionPm
|
|
|
179
183
|
data[(off + 2) * 4 + 3] = light.radius;
|
|
180
184
|
packVec3(off + 3, [
|
|
181
185
|
Math.cos((light.outerAngle * Math.PI) / 180),
|
|
182
|
-
Math.
|
|
186
|
+
Math.cos((Math.min(light.innerAngle, light.outerAngle) * Math.PI) / 180),
|
|
183
187
|
0
|
|
184
188
|
]);
|
|
185
189
|
}
|
|
@@ -792,8 +796,6 @@ class WGPURayTracePass {
|
|
|
792
796
|
...MATERIAL_TEXTURE_DEFINES,
|
|
793
797
|
'USE_ANISOTROPY_DIRECTIONS',
|
|
794
798
|
'USE_COAT_NORMAL_FRAMES',
|
|
795
|
-
'COLOR_OFF',
|
|
796
|
-
'USE_VERTEX_COLOR',
|
|
797
799
|
'HAS_ALPHA_BLEND',
|
|
798
800
|
'HAS_ALPHA_MASK'
|
|
799
801
|
];
|
|
@@ -1621,6 +1623,7 @@ ${rayTraceCompute({
|
|
|
1621
1623
|
return true;
|
|
1622
1624
|
}
|
|
1623
1625
|
setBackground(background) {
|
|
1626
|
+
this._rtUniform.views.backgroundMapTransform.set(backgroundMapTransform(background));
|
|
1624
1627
|
this._constants.USE_BACKGROUND = !!background;
|
|
1625
1628
|
const backgroundImage = background && !Array.isArray(background)
|
|
1626
1629
|
? generateBackgroundMapFromSceneBackground(background)
|
|
@@ -2119,6 +2122,8 @@ ${rayTraceCompute({
|
|
|
2119
2122
|
for (let i = 0; i < mapUvChannel.length; i++) {
|
|
2120
2123
|
mapInfoData[numMaps * 8 + i * 4] = mapUvChannel[i];
|
|
2121
2124
|
mapInfoData[numMaps * 8 + i * 4 + 1] = mapColorLinear[i];
|
|
2125
|
+
mapInfoData[numMaps * 8 + i * 4 + 2] = materialData.bufferData.mapWrap[i * 2];
|
|
2126
|
+
mapInfoData[numMaps * 8 + i * 4 + 3] = materialData.bufferData.mapWrap[i * 2 + 1];
|
|
2122
2127
|
}
|
|
2123
2128
|
let mapInfoUniform = this._mapInfoUniform;
|
|
2124
2129
|
if (!mapInfoUniform || mapInfoUniform.size !== mapInfoData.byteLength) {
|
|
@@ -2186,6 +2191,7 @@ ${rayTraceCompute({
|
|
|
2186
2191
|
const analyticLights = allAnalyticLights.slice(0, FIXED_LIGHT_COUNT);
|
|
2187
2192
|
const numAnalyticLights = analyticLights.length;
|
|
2188
2193
|
const envImage = this._sceneEnvironment.update(lights);
|
|
2194
|
+
this._rtUniform.views.environmentRotation.set(environmentRotation(lights));
|
|
2189
2195
|
this._rtUniform.views.lightsCount[0] = numAnalyticLights;
|
|
2190
2196
|
this._setEnvMap(envImage);
|
|
2191
2197
|
const lightTexturesChanged = this._rectLightTextures.update(analyticLights);
|