@tinypoly/gpu-renderer 0.0.0-stage → 0.0.0
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/ARCHITECTURE.md +334 -0
- package/LICENSE +21 -0
- package/README.md +258 -2
- package/dist/accumulator.d.ts +27 -0
- package/dist/accumulator.d.ts.map +1 -0
- package/dist/accumulator.js +57 -0
- package/dist/accumulator.js.map +1 -0
- package/dist/bvh.d.ts +26 -0
- package/dist/bvh.d.ts.map +1 -0
- package/dist/bvh.js +207 -0
- package/dist/bvh.js.map +1 -0
- package/dist/camera.d.ts +29 -0
- package/dist/camera.d.ts.map +1 -0
- package/dist/camera.js +48 -0
- package/dist/camera.js.map +1 -0
- package/dist/canvas.d.ts +9 -0
- package/dist/canvas.d.ts.map +1 -0
- package/dist/canvas.js +11 -0
- package/dist/canvas.js.map +1 -0
- package/dist/denoise.d.ts +69 -0
- package/dist/denoise.d.ts.map +1 -0
- package/dist/denoise.js +455 -0
- package/dist/denoise.js.map +1 -0
- package/dist/device.d.ts +37 -0
- package/dist/device.d.ts.map +1 -0
- package/dist/device.js +52 -0
- package/dist/device.js.map +1 -0
- package/dist/dispatchScheduler.d.ts +43 -0
- package/dist/dispatchScheduler.d.ts.map +1 -0
- package/dist/dispatchScheduler.js +49 -0
- package/dist/dispatchScheduler.js.map +1 -0
- package/dist/environment.d.ts +39 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +168 -0
- package/dist/environment.js.map +1 -0
- package/dist/frameLayout.d.ts +4 -0
- package/dist/frameLayout.d.ts.map +1 -0
- package/dist/frameLayout.js +58 -0
- package/dist/frameLayout.js.map +1 -0
- package/dist/geometry.d.ts +75 -0
- package/dist/geometry.d.ts.map +1 -0
- package/dist/geometry.js +671 -0
- package/dist/geometry.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/lights.d.ts +64 -0
- package/dist/lights.d.ts.map +1 -0
- package/dist/lights.js +264 -0
- package/dist/lights.js.map +1 -0
- package/dist/materialLayout.d.ts +143 -0
- package/dist/materialLayout.d.ts.map +1 -0
- package/dist/materialLayout.js +297 -0
- package/dist/materialLayout.js.map +1 -0
- package/dist/math.d.ts +10 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/math.js +40 -0
- package/dist/math.js.map +1 -0
- package/dist/pathTracePass.d.ts +27 -0
- package/dist/pathTracePass.d.ts.map +1 -0
- package/dist/pathTracePass.js +83 -0
- package/dist/pathTracePass.js.map +1 -0
- package/dist/planarCapture.d.ts +38 -0
- package/dist/planarCapture.d.ts.map +1 -0
- package/dist/planarCapture.js +163 -0
- package/dist/planarCapture.js.map +1 -0
- package/dist/presentPass.d.ts +31 -0
- package/dist/presentPass.d.ts.map +1 -0
- package/dist/presentPass.js +78 -0
- package/dist/presentPass.js.map +1 -0
- package/dist/renderer.d.ts +196 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +839 -0
- package/dist/renderer.js.map +1 -0
- package/dist/sceneAssets.d.ts +24 -0
- package/dist/sceneAssets.d.ts.map +1 -0
- package/dist/sceneAssets.js +77 -0
- package/dist/sceneAssets.js.map +1 -0
- package/dist/sceneUpload.d.ts +61 -0
- package/dist/sceneUpload.d.ts.map +1 -0
- package/dist/sceneUpload.js +98 -0
- package/dist/sceneUpload.js.map +1 -0
- package/dist/shaderModule.d.ts +7 -0
- package/dist/shaderModule.d.ts.map +1 -0
- package/dist/shaderModule.js +19 -0
- package/dist/shaderModule.js.map +1 -0
- package/dist/shaderProgram.d.ts +124 -0
- package/dist/shaderProgram.d.ts.map +1 -0
- package/dist/shaderProgram.js +1030 -0
- package/dist/shaderProgram.js.map +1 -0
- package/dist/structLayout.d.ts +28 -0
- package/dist/structLayout.d.ts.map +1 -0
- package/dist/structLayout.js +58 -0
- package/dist/structLayout.js.map +1 -0
- package/dist/texturePack.d.ts +54 -0
- package/dist/texturePack.d.ts.map +1 -0
- package/dist/texturePack.js +86 -0
- package/dist/texturePack.js.map +1 -0
- package/dist/upstream.d.ts +7 -0
- package/dist/upstream.d.ts.map +1 -0
- package/dist/upstream.js +11 -0
- package/dist/upstream.js.map +1 -0
- package/dist/volumetric.d.ts +10 -0
- package/dist/volumetric.d.ts.map +1 -0
- package/dist/volumetric.js +34 -0
- package/dist/volumetric.js.map +1 -0
- package/dist/wgsl/bsdf.wgsl.d.ts +13 -0
- package/dist/wgsl/bsdf.wgsl.d.ts.map +1 -0
- package/dist/wgsl/bsdf.wgsl.js +619 -0
- package/dist/wgsl/bsdf.wgsl.js.map +1 -0
- package/dist/wgsl/bvh.wgsl.d.ts +3 -0
- package/dist/wgsl/bvh.wgsl.d.ts.map +1 -0
- package/dist/wgsl/bvh.wgsl.js +218 -0
- package/dist/wgsl/bvh.wgsl.js.map +1 -0
- package/dist/wgsl/common.wgsl.d.ts +3 -0
- package/dist/wgsl/common.wgsl.d.ts.map +1 -0
- package/dist/wgsl/common.wgsl.js +193 -0
- package/dist/wgsl/common.wgsl.js.map +1 -0
- package/dist/wgsl/environment.wgsl.d.ts +10 -0
- package/dist/wgsl/environment.wgsl.d.ts.map +1 -0
- package/dist/wgsl/environment.wgsl.js +145 -0
- package/dist/wgsl/environment.wgsl.js.map +1 -0
- package/dist/wgsl/lights.wgsl.d.ts +10 -0
- package/dist/wgsl/lights.wgsl.d.ts.map +1 -0
- package/dist/wgsl/lights.wgsl.js +434 -0
- package/dist/wgsl/lights.wgsl.js.map +1 -0
- package/dist/wgsl/pathTrace.wgsl.d.ts +14 -0
- package/dist/wgsl/pathTrace.wgsl.d.ts.map +1 -0
- package/dist/wgsl/pathTrace.wgsl.js +1020 -0
- package/dist/wgsl/pathTrace.wgsl.js.map +1 -0
- package/dist/wgsl/present.wgsl.d.ts +7 -0
- package/dist/wgsl/present.wgsl.d.ts.map +1 -0
- package/dist/wgsl/present.wgsl.js +154 -0
- package/dist/wgsl/present.wgsl.js.map +1 -0
- package/dist/wgsl/random.wgsl.d.ts +9 -0
- package/dist/wgsl/random.wgsl.d.ts.map +1 -0
- package/dist/wgsl/random.wgsl.js +91 -0
- package/dist/wgsl/random.wgsl.js.map +1 -0
- package/dist/wgsl/sampling.wgsl.d.ts +3 -0
- package/dist/wgsl/sampling.wgsl.d.ts.map +1 -0
- package/dist/wgsl/sampling.wgsl.js +31 -0
- package/dist/wgsl/sampling.wgsl.js.map +1 -0
- package/dist/wgsl/shaderSupport.wgsl.d.ts +6 -0
- package/dist/wgsl/shaderSupport.wgsl.d.ts.map +1 -0
- package/dist/wgsl/shaderSupport.wgsl.js +120 -0
- package/dist/wgsl/shaderSupport.wgsl.js.map +1 -0
- package/dist/wgsl/surface.wgsl.d.ts +10 -0
- package/dist/wgsl/surface.wgsl.d.ts.map +1 -0
- package/dist/wgsl/surface.wgsl.js +794 -0
- package/dist/wgsl/surface.wgsl.js.map +1 -0
- package/dist/wgsl/texture.wgsl.d.ts +11 -0
- package/dist/wgsl/texture.wgsl.d.ts.map +1 -0
- package/dist/wgsl/texture.wgsl.js +132 -0
- package/dist/wgsl/texture.wgsl.js.map +1 -0
- package/package.json +76 -3
- package/src/accumulator.ts +64 -0
- package/src/bvh.ts +272 -0
- package/src/camera.ts +77 -0
- package/src/canvas.ts +13 -0
- package/src/denoise.ts +514 -0
- package/src/device.ts +81 -0
- package/src/dispatchScheduler.ts +71 -0
- package/src/environment.ts +233 -0
- package/src/frameLayout.ts +59 -0
- package/src/geometry.ts +899 -0
- package/src/index.ts +61 -0
- package/src/lights.ts +365 -0
- package/src/materialLayout.ts +408 -0
- package/src/math.ts +48 -0
- package/src/pathTracePass.ts +97 -0
- package/src/planarCapture.ts +225 -0
- package/src/presentPass.ts +99 -0
- package/src/renderer.ts +1117 -0
- package/src/sceneAssets.ts +118 -0
- package/src/sceneUpload.ts +185 -0
- package/src/shaderModule.ts +19 -0
- package/src/shaderProgram.ts +1370 -0
- package/src/structLayout.ts +93 -0
- package/src/texturePack.ts +152 -0
- package/src/upstream.ts +56 -0
- package/src/volumetric.ts +42 -0
- package/src/wgsl/bsdf.wgsl.ts +618 -0
- package/src/wgsl/bvh.wgsl.ts +217 -0
- package/src/wgsl/common.wgsl.ts +193 -0
- package/src/wgsl/environment.wgsl.ts +144 -0
- package/src/wgsl/lights.wgsl.ts +433 -0
- package/src/wgsl/pathTrace.wgsl.ts +1019 -0
- package/src/wgsl/present.wgsl.ts +153 -0
- package/src/wgsl/random.wgsl.ts +90 -0
- package/src/wgsl/sampling.wgsl.ts +30 -0
- package/src/wgsl/shaderSupport.wgsl.ts +119 -0
- package/src/wgsl/surface.wgsl.ts +793 -0
- package/src/wgsl/texture.wgsl.ts +131 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialLayout.d.ts","sourceRoot":"","sources":["../src/materialLayout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { layoutStruct, writeStruct } from "./structLayout.js";
|
|
2
|
+
import { NO_TEXTURE } from "./texturePack.js";
|
|
3
|
+
/**
|
|
4
|
+
* The map slots the integrator reads, by Three's own property names, so a material's `maps` record is looked up directly.
|
|
5
|
+
* A baked ambient occlusion map is deliberately absent: this renderer traces the occlusion it stands for, and applying
|
|
6
|
+
* both would darken the same shadow twice. `displacementMap` moves vertices, so it is applied while packing instead.
|
|
7
|
+
*/
|
|
8
|
+
export const MATERIAL_MAPS = [
|
|
9
|
+
"map", "emissiveMap", "roughnessMap", "metalnessMap", "normalMap", "alphaMap", "transmissionMap", "thicknessMap",
|
|
10
|
+
"clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "sheenColorMap", "sheenRoughnessMap",
|
|
11
|
+
"iridescenceMap", "iridescenceThicknessMap", "anisotropyMap", "specularMap", "specularIntensityMap",
|
|
12
|
+
"specularColorMap", "bumpMap", "lightMap", "gradientMap", "matcap", "envMap"
|
|
13
|
+
];
|
|
14
|
+
/** How the integrator shades a surface. Each kind is one of Three's shading models. */
|
|
15
|
+
export const MATERIAL_KIND = {
|
|
16
|
+
standard: 0,
|
|
17
|
+
physical: 1,
|
|
18
|
+
lambert: 2,
|
|
19
|
+
phong: 3,
|
|
20
|
+
toon: 4,
|
|
21
|
+
/** Unlit: basic, points, lines and sprites. */
|
|
22
|
+
basic: 5,
|
|
23
|
+
normal: 6,
|
|
24
|
+
/** Depth and distance materials. */
|
|
25
|
+
depth: 7,
|
|
26
|
+
matcap: 8,
|
|
27
|
+
shadow: 9,
|
|
28
|
+
/** A `ShaderMaterial` or `RawShaderMaterial`: unlit, its colour from the translated fragment shader. */
|
|
29
|
+
shader: 10,
|
|
30
|
+
};
|
|
31
|
+
/** A surface Three shades with light at all. The rest return their own colour and take no part in it. */
|
|
32
|
+
export const MATERIAL_LIT = 1;
|
|
33
|
+
/** Three's metalness workflow, which is the only one with a GGX specular lobe. */
|
|
34
|
+
export const MATERIAL_PBR = 2;
|
|
35
|
+
/** Three's `transparent`: only then does the opacity let anything through. */
|
|
36
|
+
export const MATERIAL_TRANSPARENT = 4;
|
|
37
|
+
export const MATERIAL_VERTEX_COLORS = 8;
|
|
38
|
+
export const MATERIAL_FLAT = 16;
|
|
39
|
+
export const MATERIAL_WIREFRAME = 32;
|
|
40
|
+
/** The material accepts `scene.fog`. */
|
|
41
|
+
export const MATERIAL_FOG = 64;
|
|
42
|
+
export const MATERIAL_CLIP_INTERSECTION = 128;
|
|
43
|
+
export const MATERIAL_OBJECT_NORMAL_MAP = 256;
|
|
44
|
+
/** A built-in material whose `onBeforeCompile` hooks run before lighting, as a program. */
|
|
45
|
+
export const MATERIAL_PATCHED = 512;
|
|
46
|
+
/** The material's own environment map bends the view ray instead of mirroring it. */
|
|
47
|
+
export const MATERIAL_ENV_REFRACTION = 1024;
|
|
48
|
+
/** Three's `alphaHash`, which keeps the coverage stochastic without `transparent`. */
|
|
49
|
+
export const MATERIAL_ALPHA_HASH = 2048;
|
|
50
|
+
/** A physical material, whose specular colour and intensity reach the lobe and whose grazing reflectance follows them. */
|
|
51
|
+
export const MATERIAL_SPECULAR = 4096;
|
|
52
|
+
/** What a material's `program` reads as when it has no shader. */
|
|
53
|
+
export const NO_PROGRAM = 0xffffffff;
|
|
54
|
+
const FIELDS = [
|
|
55
|
+
{ name: "color", type: "vec4f", doc: "rgb is the base colour in linear light, w the opacity." },
|
|
56
|
+
{ name: "emissive", type: "vec4f", doc: "rgb is the emissive colour, w its intensity." },
|
|
57
|
+
{ name: "specular", type: "vec4f", doc: "rgb is the specular colour, w the roughness." },
|
|
58
|
+
{ name: "attenuation", type: "vec4f", doc: "rgb is the colour a volume fades to over w; a w of zero never absorbs." },
|
|
59
|
+
{ name: "sheen", type: "vec4f", doc: "rgb is the sheen colour times its strength, w its roughness." },
|
|
60
|
+
{ name: "metalness", type: "f32" },
|
|
61
|
+
{ name: "flags", type: "u32" },
|
|
62
|
+
{ name: "alphaTest", type: "f32" },
|
|
63
|
+
{ name: "transmission", type: "f32" },
|
|
64
|
+
{ name: "normalScaleX", type: "f32" },
|
|
65
|
+
{ name: "normalScaleY", type: "f32" },
|
|
66
|
+
{ name: "ior", type: "f32" },
|
|
67
|
+
{ name: "thickness", type: "f32", doc: "Zero is a thin wall; above it the surface bounds a volume that refracts." },
|
|
68
|
+
{ name: "clearcoat", type: "f32" },
|
|
69
|
+
{ name: "clearcoatRoughness", type: "f32" },
|
|
70
|
+
{ name: "clearcoatNormalScaleX", type: "f32" },
|
|
71
|
+
{ name: "clearcoatNormalScaleY", type: "f32" },
|
|
72
|
+
{ name: "iridescence", type: "f32" },
|
|
73
|
+
{ name: "iridescenceIor", type: "f32" },
|
|
74
|
+
{ name: "iridescenceThicknessMin", type: "f32" },
|
|
75
|
+
{ name: "iridescenceThicknessMax", type: "f32" },
|
|
76
|
+
{ name: "anisotropy", type: "f32" },
|
|
77
|
+
{ name: "anisotropyRotation", type: "f32" },
|
|
78
|
+
{ name: "dispersion", type: "f32" },
|
|
79
|
+
{ name: "shininess", type: "f32" },
|
|
80
|
+
{ name: "bumpScale", type: "f32" },
|
|
81
|
+
{ name: "lightMapIntensity", type: "f32" },
|
|
82
|
+
{ name: "envMapIntensity", type: "f32" },
|
|
83
|
+
{ name: "reflectivity", type: "f32" },
|
|
84
|
+
{ name: "refractionRatio", type: "f32" },
|
|
85
|
+
{ name: "combine", type: "u32" },
|
|
86
|
+
{ name: "side", type: "u32" },
|
|
87
|
+
{ name: "blending", type: "u32" },
|
|
88
|
+
{ name: "clipStart", type: "u32" },
|
|
89
|
+
{ name: "clipCount", type: "u32" },
|
|
90
|
+
{ name: "program", type: "u32" },
|
|
91
|
+
{ name: "shaderData", type: "u32" },
|
|
92
|
+
{ name: "varyingBase", type: "u32" },
|
|
93
|
+
{ name: "varyingStride", type: "u32" },
|
|
94
|
+
{ name: "firstTriangle", type: "u32" },
|
|
95
|
+
{ name: "kind", type: "u32" },
|
|
96
|
+
{ name: "specularIntensity", type: "f32" },
|
|
97
|
+
{ name: "dielectric", type: "f32" },
|
|
98
|
+
{ name: "afterProgram", type: "u32", doc: "What a hook does after <opaque_fragment>, or NO_PROGRAM." },
|
|
99
|
+
{ name: "afterData", type: "u32" },
|
|
100
|
+
{ name: "normalRow0", type: "vec4f", doc: "The mesh's world normal matrix, for an object space normal map." },
|
|
101
|
+
{ name: "normalRow1", type: "vec4f" },
|
|
102
|
+
{ name: "normalRow2", type: "vec4f" },
|
|
103
|
+
...MATERIAL_MAPS.map(slot => ({ name: slot, type: "u32" })),
|
|
104
|
+
];
|
|
105
|
+
/** The `Material` struct, as both sides of the device see it. */
|
|
106
|
+
export const MATERIAL_LAYOUT = layoutStruct("Material", FIELDS);
|
|
107
|
+
export const MATERIAL_WORDS = MATERIAL_LAYOUT.words;
|
|
108
|
+
const KIND_OF = {
|
|
109
|
+
MeshStandardMaterial: MATERIAL_KIND.standard,
|
|
110
|
+
MeshPhysicalMaterial: MATERIAL_KIND.physical,
|
|
111
|
+
MeshLambertMaterial: MATERIAL_KIND.lambert,
|
|
112
|
+
MeshPhongMaterial: MATERIAL_KIND.phong,
|
|
113
|
+
MeshToonMaterial: MATERIAL_KIND.toon,
|
|
114
|
+
MeshNormalMaterial: MATERIAL_KIND.normal,
|
|
115
|
+
MeshDepthMaterial: MATERIAL_KIND.depth,
|
|
116
|
+
MeshDistanceMaterial: MATERIAL_KIND.depth,
|
|
117
|
+
MeshMatcapMaterial: MATERIAL_KIND.matcap,
|
|
118
|
+
ShadowMaterial: MATERIAL_KIND.shadow,
|
|
119
|
+
ShaderMaterial: MATERIAL_KIND.shader,
|
|
120
|
+
RawShaderMaterial: MATERIAL_KIND.shader,
|
|
121
|
+
};
|
|
122
|
+
/** The material types Three lights, exactly as `LIT_MATERIALS` in the CPU renderer. */
|
|
123
|
+
const LIT = new Set([
|
|
124
|
+
"MeshLambertMaterial", "MeshPhongMaterial", "MeshToonMaterial", "MeshStandardMaterial", "MeshPhysicalMaterial"
|
|
125
|
+
]);
|
|
126
|
+
const PBR = new Set(["MeshStandardMaterial", "MeshPhysicalMaterial"]);
|
|
127
|
+
/** Three's `ShaderMaterial` keeps `fog` off by default; every built-in material has it on. */
|
|
128
|
+
const FOG_OFF_BY_DEFAULT = new Set(["ShaderMaterial", "RawShaderMaterial"]);
|
|
129
|
+
/** Three's `0x111111`, the Phong default specular colour, in linear light. */
|
|
130
|
+
const PHONG_SPECULAR = 0.005605391906346412;
|
|
131
|
+
/** Reads a serialized Three colour or vector, falling back when the material does not carry it. */
|
|
132
|
+
function vector(value, fallback, size = 3) {
|
|
133
|
+
return Array.isArray(value) && value.length >= size && value.slice(0, size).every(entry => typeof entry === "number")
|
|
134
|
+
? value.slice(0, size)
|
|
135
|
+
: [...fallback];
|
|
136
|
+
}
|
|
137
|
+
function number(value, fallback) {
|
|
138
|
+
return typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
139
|
+
}
|
|
140
|
+
function flag(value, fallback) {
|
|
141
|
+
return typeof value === "boolean" ? value : fallback;
|
|
142
|
+
}
|
|
143
|
+
const clamp01 = (value) => Math.min(1, Math.max(0, value));
|
|
144
|
+
/** Whether a material is drawn at all: Three skips one whose `visible` is off. */
|
|
145
|
+
export function isMaterialVisible(material) {
|
|
146
|
+
return flag(material?.values?.visible, true) && flag(material?.values?.colorWrite, true);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Three's resolution of a material, defaults and all. A material outside the metalness workflow keeps its own specular
|
|
150
|
+
* colour; one Three does not light reads as its own colour.
|
|
151
|
+
*/
|
|
152
|
+
export function materialProperties(material, textures = new Map()) {
|
|
153
|
+
const values = material?.values ?? {};
|
|
154
|
+
const type = material?.type ?? "MeshStandardMaterial";
|
|
155
|
+
const pbr = PBR.has(type);
|
|
156
|
+
const physical = type === "MeshPhysicalMaterial";
|
|
157
|
+
const ior = number(values.ior, 1.5);
|
|
158
|
+
const attenuationDistance = number(values.attenuationDistance, 0);
|
|
159
|
+
const transparent = flag(values.transparent, false);
|
|
160
|
+
const sheen = physical ? Math.max(0, number(values.sheen, 0)) : 0;
|
|
161
|
+
const anisotropy = physical ? number(values.anisotropy, 0) : 0;
|
|
162
|
+
const thickness = vector(values.iridescenceThicknessRange, [100, 400], 2);
|
|
163
|
+
const maps = Object.fromEntries(MATERIAL_MAPS.map(slot => {
|
|
164
|
+
const id = material?.maps?.[slot];
|
|
165
|
+
return [slot, id !== undefined ? textures.get(id) ?? NO_TEXTURE : NO_TEXTURE];
|
|
166
|
+
}));
|
|
167
|
+
// A shader material's own colour comes from its program; a patched built-in keeps its type's shading.
|
|
168
|
+
const shader = material?.shader;
|
|
169
|
+
const kind = KIND_OF[type] ?? MATERIAL_KIND.basic;
|
|
170
|
+
const flags = (LIT.has(type) ? MATERIAL_LIT : 0)
|
|
171
|
+
| (pbr ? MATERIAL_PBR : 0)
|
|
172
|
+
| (transparent ? MATERIAL_TRANSPARENT : 0)
|
|
173
|
+
| (flag(values.vertexColors, false) ? MATERIAL_VERTEX_COLORS : 0)
|
|
174
|
+
| (flag(values.flatShading, false) ? MATERIAL_FLAT : 0)
|
|
175
|
+
| (flag(values.wireframe, false) ? MATERIAL_WIREFRAME : 0)
|
|
176
|
+
| (flag(values.fog, !FOG_OFF_BY_DEFAULT.has(type)) ? MATERIAL_FOG : 0)
|
|
177
|
+
| (flag(values.clipIntersection, false) ? MATERIAL_CLIP_INTERSECTION : 0)
|
|
178
|
+
| (number(values.normalMapType, 0) === 1 ? MATERIAL_OBJECT_NORMAL_MAP : 0)
|
|
179
|
+
| (shader?.patched ? MATERIAL_PATCHED : 0)
|
|
180
|
+
| (flag(values.alphaHash, false) ? MATERIAL_ALPHA_HASH : 0)
|
|
181
|
+
| (physical ? MATERIAL_SPECULAR : 0);
|
|
182
|
+
return {
|
|
183
|
+
kind,
|
|
184
|
+
color: vector(values.color, [1, 1, 1]),
|
|
185
|
+
opacity: number(values.opacity, 1),
|
|
186
|
+
emissive: vector(values.emissive, [0, 0, 0]),
|
|
187
|
+
emissiveIntensity: number(values.emissiveIntensity, 1),
|
|
188
|
+
specular: physical
|
|
189
|
+
? vector(values.specularColor, [1, 1, 1])
|
|
190
|
+
: vector(values.specular, [PHONG_SPECULAR, PHONG_SPECULAR, PHONG_SPECULAR]),
|
|
191
|
+
specularIntensity: physical ? number(values.specularIntensity, 1) : 1,
|
|
192
|
+
// A standard material has no index of refraction in Three's shader and reflects 0.04, which is what 1.5 gives.
|
|
193
|
+
dielectric: ((ior - 1) / (ior + 1)) ** 2,
|
|
194
|
+
roughness: number(values.roughness, 1),
|
|
195
|
+
metalness: number(values.metalness, 0),
|
|
196
|
+
alphaTest: number(values.alphaTest, 0),
|
|
197
|
+
flags,
|
|
198
|
+
normalScale: vector(values.normalScale, [1, 1], 2),
|
|
199
|
+
// Three only lets light through a physical material. Like its own shader, metal takes the share back.
|
|
200
|
+
transmission: physical ? clamp01(number(values.transmission, 0)) : 0,
|
|
201
|
+
ior,
|
|
202
|
+
thickness: Math.max(0, number(values.thickness, 0)),
|
|
203
|
+
attenuationColor: vector(values.attenuationColor, [1, 1, 1]),
|
|
204
|
+
attenuationDistance: attenuationDistance > 0 ? attenuationDistance : 0,
|
|
205
|
+
clearcoat: physical ? clamp01(number(values.clearcoat, 0)) : 0,
|
|
206
|
+
clearcoatRoughness: number(values.clearcoatRoughness, 0),
|
|
207
|
+
clearcoatNormalScale: vector(values.clearcoatNormalScale, [1, 1], 2),
|
|
208
|
+
sheenColor: vector(values.sheenColor, [0, 0, 0]).map(channel => channel * sheen),
|
|
209
|
+
sheenRoughness: Math.min(1, Math.max(1e-4, number(values.sheenRoughness, 1))),
|
|
210
|
+
iridescence: physical ? Math.max(0, number(values.iridescence, 0)) : 0,
|
|
211
|
+
iridescenceIor: number(values.iridescenceIOR, 1.3),
|
|
212
|
+
iridescenceThickness: thickness,
|
|
213
|
+
anisotropy,
|
|
214
|
+
anisotropyRotation: number(values.anisotropyRotation, 0),
|
|
215
|
+
dispersion: physical ? Math.max(0, number(values.dispersion, 0)) : 0,
|
|
216
|
+
shininess: Math.max(0, number(values.shininess, 30)),
|
|
217
|
+
bumpScale: number(values.bumpScale, 1),
|
|
218
|
+
lightMapIntensity: number(values.lightMapIntensity, 1),
|
|
219
|
+
envMapIntensity: number(values.envMapIntensity, 1),
|
|
220
|
+
reflectivity: number(values.reflectivity, 1),
|
|
221
|
+
refractionRatio: number(values.refractionRatio, 0.98),
|
|
222
|
+
combine: number(values.combine, 0),
|
|
223
|
+
side: number(values.side, 0),
|
|
224
|
+
blending: number(values.blending, 1),
|
|
225
|
+
maps,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/** A material entry with no mesh specific parts: no clipping, no program, no varyings, an identity normal matrix. */
|
|
229
|
+
export const NO_PLACEMENT = {
|
|
230
|
+
clipStart: 0,
|
|
231
|
+
clipCount: 0,
|
|
232
|
+
program: NO_PROGRAM,
|
|
233
|
+
shaderData: 0,
|
|
234
|
+
varyingBase: 0,
|
|
235
|
+
varyingStride: 0,
|
|
236
|
+
firstTriangle: 0,
|
|
237
|
+
normalMatrix: [1, 0, 0, 0, 1, 0, 0, 0, 1],
|
|
238
|
+
afterProgram: NO_PROGRAM,
|
|
239
|
+
afterData: 0,
|
|
240
|
+
};
|
|
241
|
+
/** The bytes of one material, as the shader reads them. */
|
|
242
|
+
export function writeMaterial(target, index, properties, placement = NO_PLACEMENT) {
|
|
243
|
+
const p = properties;
|
|
244
|
+
const n = placement.normalMatrix;
|
|
245
|
+
writeStruct(MATERIAL_LAYOUT, target, index * MATERIAL_WORDS, {
|
|
246
|
+
color: [...p.color, p.opacity],
|
|
247
|
+
emissive: [...p.emissive, p.emissiveIntensity],
|
|
248
|
+
specular: [...p.specular, p.roughness],
|
|
249
|
+
attenuation: [...p.attenuationColor, p.attenuationDistance],
|
|
250
|
+
sheen: [...p.sheenColor, p.sheenRoughness],
|
|
251
|
+
metalness: p.metalness,
|
|
252
|
+
flags: p.flags,
|
|
253
|
+
alphaTest: p.alphaTest,
|
|
254
|
+
transmission: p.transmission,
|
|
255
|
+
normalScaleX: p.normalScale[0],
|
|
256
|
+
normalScaleY: p.normalScale[1],
|
|
257
|
+
ior: p.ior,
|
|
258
|
+
thickness: p.thickness,
|
|
259
|
+
clearcoat: p.clearcoat,
|
|
260
|
+
clearcoatRoughness: p.clearcoatRoughness,
|
|
261
|
+
clearcoatNormalScaleX: p.clearcoatNormalScale[0],
|
|
262
|
+
clearcoatNormalScaleY: p.clearcoatNormalScale[1],
|
|
263
|
+
iridescence: p.iridescence,
|
|
264
|
+
iridescenceIor: p.iridescenceIor,
|
|
265
|
+
iridescenceThicknessMin: p.iridescenceThickness[0],
|
|
266
|
+
iridescenceThicknessMax: p.iridescenceThickness[1],
|
|
267
|
+
anisotropy: p.anisotropy,
|
|
268
|
+
anisotropyRotation: p.anisotropyRotation,
|
|
269
|
+
dispersion: p.dispersion,
|
|
270
|
+
shininess: p.shininess,
|
|
271
|
+
bumpScale: p.bumpScale,
|
|
272
|
+
lightMapIntensity: p.lightMapIntensity,
|
|
273
|
+
envMapIntensity: p.envMapIntensity,
|
|
274
|
+
reflectivity: p.reflectivity,
|
|
275
|
+
refractionRatio: p.refractionRatio,
|
|
276
|
+
combine: p.combine,
|
|
277
|
+
side: p.side,
|
|
278
|
+
blending: p.blending,
|
|
279
|
+
clipStart: placement.clipStart,
|
|
280
|
+
clipCount: placement.clipCount,
|
|
281
|
+
program: placement.program,
|
|
282
|
+
shaderData: placement.shaderData,
|
|
283
|
+
varyingBase: placement.varyingBase,
|
|
284
|
+
varyingStride: placement.varyingStride,
|
|
285
|
+
firstTriangle: placement.firstTriangle,
|
|
286
|
+
kind: p.kind,
|
|
287
|
+
specularIntensity: p.specularIntensity,
|
|
288
|
+
dielectric: p.dielectric,
|
|
289
|
+
afterProgram: placement.afterProgram,
|
|
290
|
+
afterData: placement.afterData,
|
|
291
|
+
normalRow0: [n[0], n[3], n[6], 0],
|
|
292
|
+
normalRow1: [n[1], n[4], n[7], 0],
|
|
293
|
+
normalRow2: [n[2], n[5], n[8], 0],
|
|
294
|
+
...Object.fromEntries(MATERIAL_MAPS.map(slot => [slot, p.maps[slot]])),
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=materialLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialLayout.js","sourceRoot":"","sources":["../src/materialLayout.ts"],"names":[],"mappings":"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"}
|
package/dist/math.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Applies a column-major 4x4 to a point, writing three floats at `offset`. */
|
|
2
|
+
export declare function transformPoint(m: readonly number[], x: number, y: number, z: number, out: Float32Array, offset: number): void;
|
|
3
|
+
/**
|
|
4
|
+
* The inverse transpose of the upper-left 3x3, as a column-major 3x3. Non-uniform scale makes the world matrix itself
|
|
5
|
+
* wrong for normals, which is what this corrects; a singular matrix falls back to the identity.
|
|
6
|
+
*/
|
|
7
|
+
export declare function normalMatrix(m: readonly number[]): Float64Array;
|
|
8
|
+
/** Applies a column-major 3x3 to a direction and normalizes it, writing three floats at `offset`. */
|
|
9
|
+
export declare function transformNormal(n: Float64Array, x: number, y: number, z: number, out: Float32Array, offset: number): void;
|
|
10
|
+
//# sourceMappingURL=math.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAGA,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAClF,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QAMlC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CAiB/D;AAED,qGAAqG;AACrG,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAC9E,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,QASlC"}
|
package/dist/math.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Small matrix helpers. Three is a peer dependency, but the packing path stays free of it so it can be tested in Node
|
|
2
|
+
// without a scene. Matrices arrive as Three's column-major sixteen number arrays.
|
|
3
|
+
/** Applies a column-major 4x4 to a point, writing three floats at `offset`. */
|
|
4
|
+
export function transformPoint(m, x, y, z, out, offset) {
|
|
5
|
+
const w = m[3] * x + m[7] * y + m[11] * z + m[15] || 1;
|
|
6
|
+
out[offset] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
|
|
7
|
+
out[offset + 1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
|
|
8
|
+
out[offset + 2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The inverse transpose of the upper-left 3x3, as a column-major 3x3. Non-uniform scale makes the world matrix itself
|
|
12
|
+
* wrong for normals, which is what this corrects; a singular matrix falls back to the identity.
|
|
13
|
+
*/
|
|
14
|
+
export function normalMatrix(m) {
|
|
15
|
+
const a = m[0], b = m[1], c = m[2];
|
|
16
|
+
const d = m[4], e = m[5], f = m[6];
|
|
17
|
+
const g = m[8], h = m[9], i = m[10];
|
|
18
|
+
const cofactor0 = e * i - f * h, cofactor1 = f * g - d * i, cofactor2 = d * h - e * g;
|
|
19
|
+
const determinant = a * cofactor0 + b * cofactor1 + c * cofactor2;
|
|
20
|
+
if (determinant === 0)
|
|
21
|
+
return new Float64Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
|
|
22
|
+
const s = 1 / determinant;
|
|
23
|
+
// The inverse is the adjugate over the determinant; transposing it is the same as reading the adjugate row-wise.
|
|
24
|
+
return new Float64Array([
|
|
25
|
+
cofactor0 * s, cofactor1 * s, cofactor2 * s,
|
|
26
|
+
(c * h - b * i) * s, (a * i - c * g) * s, (b * g - a * h) * s,
|
|
27
|
+
(b * f - c * e) * s, (c * d - a * f) * s, (a * e - b * d) * s,
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
/** Applies a column-major 3x3 to a direction and normalizes it, writing three floats at `offset`. */
|
|
31
|
+
export function transformNormal(n, x, y, z, out, offset) {
|
|
32
|
+
const nx = n[0] * x + n[3] * y + n[6] * z;
|
|
33
|
+
const ny = n[1] * x + n[4] * y + n[7] * z;
|
|
34
|
+
const nz = n[2] * x + n[5] * y + n[8] * z;
|
|
35
|
+
const length = Math.hypot(nx, ny, nz) || 1;
|
|
36
|
+
out[offset] = nx / length;
|
|
37
|
+
out[offset + 1] = ny / length;
|
|
38
|
+
out[offset + 2] = nz / length;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=math.js.map
|
package/dist/math.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FRAME_LAYOUT } from "./frameLayout.js";
|
|
2
|
+
import { type ShaderPrograms } from "./shaderProgram.js";
|
|
3
|
+
import type { SceneBuffers } from "./sceneUpload.js";
|
|
4
|
+
/** One dispatch worth of state: which band, which samples, and everything the kernel reads about the frame. */
|
|
5
|
+
export type FrameUniforms = Record<keyof typeof FRAME_LAYOUT.offsets & string, number | boolean | ArrayLike<number>>;
|
|
6
|
+
/**
|
|
7
|
+
* The whole kernel, in the order WGSL needs: every stage may only call what comes before it, as there are no forward
|
|
8
|
+
* declarations. The scene's translated shaders sit between the texture code they call and the surface code that calls
|
|
9
|
+
* them.
|
|
10
|
+
*/
|
|
11
|
+
export declare function pathTraceSource(programs?: ShaderPrograms | null): string;
|
|
12
|
+
export declare class PathTracePass {
|
|
13
|
+
private readonly device;
|
|
14
|
+
private pipeline;
|
|
15
|
+
private readonly uniforms;
|
|
16
|
+
private readonly values;
|
|
17
|
+
private bindGroup;
|
|
18
|
+
private programKey;
|
|
19
|
+
constructor(device: GPUDevice);
|
|
20
|
+
/** Recompiles the kernel when the scene's shaders changed; the same set of programs keeps the pipeline it has. */
|
|
21
|
+
setPrograms(programs: ShaderPrograms | null): void;
|
|
22
|
+
private build;
|
|
23
|
+
/** Rebinds after the scene or the accumulation buffer was replaced. */
|
|
24
|
+
setBindings(scene: SceneBuffers, accumulation: GPUBuffer): void;
|
|
25
|
+
encode(encoder: GPUCommandEncoder, frame: FrameUniforms): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=pathTracePass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathTracePass.d.ts","sourceRoot":"","sources":["../src/pathTracePass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAcrD,+GAA+G;AAC/G,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,OAAO,YAAY,CAAC,OAAO,GAAG,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAErH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,GAAE,cAAc,GAAG,IAAW,GAAG,MAAM,CAG9E;AAMD,qBAAa,aAAa;IAOZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,UAAU,CAAM;gBAEK,MAAM,EAAE,SAAS;IAK9C,kHAAkH;IAClH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAU3C,OAAO,CAAC,KAAK;IAMb,uEAAuE;IACvE,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS;IAiBxD,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa;CAexD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { FRAME_LAYOUT, FRAME_WORDS } from "./frameLayout.js";
|
|
2
|
+
import { createShaderModule } from "./shaderModule.js";
|
|
3
|
+
import { programsWgsl } from "./shaderProgram.js";
|
|
4
|
+
import { writeStruct } from "./structLayout.js";
|
|
5
|
+
import { BSDF_WGSL } from "./wgsl/bsdf.wgsl.js";
|
|
6
|
+
import { BVH_WGSL } from "./wgsl/bvh.wgsl.js";
|
|
7
|
+
import { COMMON_WGSL } from "./wgsl/common.wgsl.js";
|
|
8
|
+
import { ENVIRONMENT_WGSL } from "./wgsl/environment.wgsl.js";
|
|
9
|
+
import { LIGHTS_WGSL } from "./wgsl/lights.wgsl.js";
|
|
10
|
+
import { PATH_TRACE_WGSL } from "./wgsl/pathTrace.wgsl.js";
|
|
11
|
+
import { RANDOM_WGSL } from "./wgsl/random.wgsl.js";
|
|
12
|
+
import { SAMPLING_WGSL } from "./wgsl/sampling.wgsl.js";
|
|
13
|
+
import { SHADER_SUPPORT_WGSL } from "./wgsl/shaderSupport.wgsl.js";
|
|
14
|
+
import { SURFACE_WGSL } from "./wgsl/surface.wgsl.js";
|
|
15
|
+
import { TEXTURE_WGSL } from "./wgsl/texture.wgsl.js";
|
|
16
|
+
/**
|
|
17
|
+
* The whole kernel, in the order WGSL needs: every stage may only call what comes before it, as there are no forward
|
|
18
|
+
* declarations. The scene's translated shaders sit between the texture code they call and the surface code that calls
|
|
19
|
+
* them.
|
|
20
|
+
*/
|
|
21
|
+
export function pathTraceSource(programs = null) {
|
|
22
|
+
return COMMON_WGSL + RANDOM_WGSL + BVH_WGSL + SAMPLING_WGSL + TEXTURE_WGSL + SHADER_SUPPORT_WGSL
|
|
23
|
+
+ programsWgsl(programs) + ENVIRONMENT_WGSL + SURFACE_WGSL + BSDF_WGSL + LIGHTS_WGSL + PATH_TRACE_WGSL;
|
|
24
|
+
}
|
|
25
|
+
const FRAME_BYTES = FRAME_WORDS * 4;
|
|
26
|
+
const WORKGROUP = 8;
|
|
27
|
+
export class PathTracePass {
|
|
28
|
+
device;
|
|
29
|
+
pipeline;
|
|
30
|
+
uniforms;
|
|
31
|
+
values = new ArrayBuffer(FRAME_BYTES);
|
|
32
|
+
bindGroup = null;
|
|
33
|
+
programKey = "";
|
|
34
|
+
constructor(device) {
|
|
35
|
+
this.device = device;
|
|
36
|
+
this.pipeline = this.build(null);
|
|
37
|
+
this.uniforms = device.createBuffer({ size: FRAME_BYTES, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });
|
|
38
|
+
}
|
|
39
|
+
/** Recompiles the kernel when the scene's shaders changed; the same set of programs keeps the pipeline it has. */
|
|
40
|
+
setPrograms(programs) {
|
|
41
|
+
const key = programs?.key ?? "";
|
|
42
|
+
if (key === this.programKey)
|
|
43
|
+
return;
|
|
44
|
+
this.programKey = key;
|
|
45
|
+
this.pipeline = this.build(programs);
|
|
46
|
+
this.bindGroup = null;
|
|
47
|
+
}
|
|
48
|
+
build(programs) {
|
|
49
|
+
const module = createShaderModule(this.device, "path trace", pathTraceSource(programs));
|
|
50
|
+
return this.device.createComputePipeline({ layout: "auto", compute: { module, entryPoint: "main" } });
|
|
51
|
+
}
|
|
52
|
+
/** Rebinds after the scene or the accumulation buffer was replaced. */
|
|
53
|
+
setBindings(scene, accumulation) {
|
|
54
|
+
this.bindGroup = this.device.createBindGroup({
|
|
55
|
+
layout: this.pipeline.getBindGroupLayout(0),
|
|
56
|
+
entries: [
|
|
57
|
+
{ binding: 0, resource: { buffer: this.uniforms } },
|
|
58
|
+
{ binding: 1, resource: { buffer: scene.positions } },
|
|
59
|
+
{ binding: 2, resource: { buffer: scene.attributes } },
|
|
60
|
+
{ binding: 3, resource: { buffer: scene.indices } },
|
|
61
|
+
{ binding: 4, resource: { buffer: scene.materials } },
|
|
62
|
+
{ binding: 5, resource: { buffer: scene.nodes } },
|
|
63
|
+
{ binding: 6, resource: { buffer: scene.lights } },
|
|
64
|
+
{ binding: 7, resource: { buffer: accumulation } },
|
|
65
|
+
{ binding: 8, resource: { buffer: scene.textures } },
|
|
66
|
+
],
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
encode(encoder, frame) {
|
|
70
|
+
if (!this.bindGroup)
|
|
71
|
+
throw new Error("GPU renderer: the path tracing pass has no scene bound.");
|
|
72
|
+
new Uint32Array(this.values).fill(0);
|
|
73
|
+
writeStruct(FRAME_LAYOUT, this.values, 0, frame);
|
|
74
|
+
this.device.queue.writeBuffer(this.uniforms, 0, this.values);
|
|
75
|
+
const pass = encoder.beginComputePass({ label: "path trace" });
|
|
76
|
+
const size = frame.bandSize;
|
|
77
|
+
pass.setPipeline(this.pipeline);
|
|
78
|
+
pass.setBindGroup(0, this.bindGroup);
|
|
79
|
+
pass.dispatchWorkgroups(Math.ceil(size[0] / WORKGROUP), Math.ceil(size[1] / WORKGROUP));
|
|
80
|
+
pass.end();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=pathTracePass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathTracePass.js","sourceRoot":"","sources":["../src/pathTracePass.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { CameraState, RenderBackgroundMode, SerializedScene } from "./upstream.js";
|
|
2
|
+
/**
|
|
3
|
+
* The CPU renderer's planar captures (`userData.cpuRenderer.planarCapture`): a flat surface whose shader samples what is
|
|
4
|
+
* reflected in it and seen through it, as `tReflectionMap`, `tEnvironmentReflectionMap`, `tRefractionMap` and
|
|
5
|
+
* `tRefractionDepth`, through `reflectionMatrix` and `refractionMatrix`. The cameras, the clip planes and the matrices are
|
|
6
|
+
* `pipeline.js`'s own; the images are rendered by this renderer, path traced from those cameras.
|
|
7
|
+
*/
|
|
8
|
+
export interface PlanarCapture {
|
|
9
|
+
/** The texture the image goes to, and the depth texture for the refraction capture. */
|
|
10
|
+
texture: string;
|
|
11
|
+
depth?: string;
|
|
12
|
+
camera: CameraState;
|
|
13
|
+
/** Whether the capture sees the scene, without its planar surfaces, or only the environment. */
|
|
14
|
+
scene: "scene" | "environment";
|
|
15
|
+
background: RenderBackgroundMode;
|
|
16
|
+
/** Drops what lies behind the plane, as the capture's clip plane does: `dot(xyz, p) + w < 0` is cut. */
|
|
17
|
+
clip?: number[];
|
|
18
|
+
}
|
|
19
|
+
export interface PlanarCaptures {
|
|
20
|
+
/** The scene with the capture textures in its table and each material's capture uniforms bound. */
|
|
21
|
+
scene: SerializedScene;
|
|
22
|
+
/** The scene the captures see: everything but the planar surfaces, which never appear in one. */
|
|
23
|
+
captureScene: SerializedScene;
|
|
24
|
+
captures: PlanarCapture[];
|
|
25
|
+
width: number;
|
|
26
|
+
height: number;
|
|
27
|
+
}
|
|
28
|
+
/** The captures a scene needs from this camera, or null when it has no planar surface. */
|
|
29
|
+
export declare function planarCaptures(source: SerializedScene, camera: CameraState, width: number, height: number): PlanarCaptures | null;
|
|
30
|
+
export declare class CaptureResolvePass {
|
|
31
|
+
private readonly device;
|
|
32
|
+
private readonly pipeline;
|
|
33
|
+
private readonly uniforms;
|
|
34
|
+
constructor(device: GPUDevice);
|
|
35
|
+
/** `color` and `depth` are word offsets of the textures' texels; a depth of 0xffffffff writes none. */
|
|
36
|
+
encode(encoder: GPUCommandEncoder, accumulation: GPUBuffer, textures: GPUBuffer, width: number, height: number, color: number, depth: number): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=planarCapture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planarCapture.d.ts","sourceRoot":"","sources":["../src/planarCapture.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAsB,eAAe,EAAqB,MAAM,eAAe,CAAC;AAE/H;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,gGAAgG;IAChG,KAAK,EAAE,OAAO,GAAG,aAAa,CAAC;IAC/B,UAAU,EAAE,oBAAoB,CAAC;IACjC,wGAAwG;IACxG,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,mGAAmG;IACnG,KAAK,EAAE,eAAe,CAAC;IACvB,iGAAiG;IACjG,YAAY,EAAE,eAAe,CAAC;IAC9B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAsBD,0FAA0F;AAC1F,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA4FpG;AA6CD,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;gBAER,MAAM,EAAE,SAAS;IAO9C,uGAAuG;IACvG,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAC7E,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAmB9D"}
|