three-gpu-pathtracer 0.0.23 → 0.0.25
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/README.md +53 -528
- package/build/index.module.js +319 -66
- package/build/index.module.js.map +1 -1
- package/build/index.umd.cjs +318 -64
- package/build/index.umd.cjs.map +1 -1
- package/package.json +35 -18
- package/src/core/PathTracingSceneGenerator.js +21 -2
- package/src/core/WebGLPathTracer.js +16 -7
- package/src/core/utils/mergeGeometries.js +14 -1
- package/src/core/utils/sceneUpdateUtils.js +8 -12
- package/src/detectors/PrecisionMaterial.js +9 -9
- package/src/index.d.ts +2 -1
- package/src/index.js +1 -0
- package/src/materials/pathtracing/PhysicalPathTracingMaterial.js +2 -1
- package/src/materials/pathtracing/glsl/attenuate_hit_function.glsl.js +2 -1
- package/src/materials/pathtracing/glsl/camera_util_functions.glsl.js +1 -1
- package/src/materials/pathtracing/glsl/get_surface_record_function.glsl.js +2 -1
- package/src/materials/surface/AmbientOcclusionMaterial.js +2 -0
- package/src/objects/PhysicalSpotLight.js +2 -0
- package/src/shader/bsdf/bsdf_functions.glsl.js +0 -1
- package/src/shader/bvh/inside_fog_volume_function.glsl.js +1 -1
- package/src/shader/structs/material_struct.glsl.js +3 -1
- package/src/textures/BlueNoiseTexture.js +6 -6
- package/src/textures/ProceduralEquirectTexture.js +8 -7
- package/src/textures/turquinMetal.png +0 -0
- package/src/uniforms/EquirectHdrInfoUniform.js +9 -4
- package/src/uniforms/FloatAttributeTextureArray.js +11 -11
- package/src/uniforms/MaterialsTexture.js +13 -10
- package/src/webgpu/API.md +762 -0
- package/src/webgpu/AtlasTexture.js +471 -0
- package/src/webgpu/BlurredEnvMapGenerator.js +129 -0
- package/src/webgpu/EquirectBackgroundInfo.js +97 -0
- package/src/webgpu/EquirectHdrInfoNode.js +151 -0
- package/src/webgpu/LightsInfoNode.js +224 -0
- package/src/webgpu/MegaKernelPathTracer.js +277 -0
- package/src/webgpu/PathTracerBackend.js +216 -0
- package/src/webgpu/TurquinTexture.js +169 -0
- package/src/webgpu/WaveFrontPathTracer.js +586 -0
- package/src/webgpu/WebGPUPathTracer.js +1302 -0
- package/src/webgpu/compute/ComputeKernel.js +92 -0
- package/src/webgpu/compute/CopyBufferKernel.js +40 -0
- package/src/webgpu/compute/PathTracerMegaKernel.js +470 -0
- package/src/webgpu/compute/SampleDebugKernel.js +51 -0
- package/src/webgpu/compute/TallySampleCountsKernel.js +111 -0
- package/src/webgpu/compute/ZeroOutBufferKernel.js +35 -0
- package/src/webgpu/compute/ZeroOutKernel.js +31 -0
- package/src/webgpu/compute/wavefront/LogicKernel.js +349 -0
- package/src/webgpu/compute/wavefront/MaterialKernel.js +371 -0
- package/src/webgpu/compute/wavefront/PopulatePixelIndicesKernel.js +72 -0
- package/src/webgpu/compute/wavefront/QueueLengthToDispatchKernel.js +38 -0
- package/src/webgpu/compute/wavefront/ResetSlotsKernel.js +66 -0
- package/src/webgpu/compute/wavefront/TraceRayKernel.js +71 -0
- package/src/webgpu/compute/wavefront/TraceShadowRayKernel.js +67 -0
- package/src/webgpu/compute/wavefront/structs.js +155 -0
- package/src/webgpu/constants.js +62 -0
- package/src/webgpu/denoise/OIDNDenoiser.js +431 -0
- package/src/webgpu/index.d.ts +176 -0
- package/src/webgpu/index.js +11 -0
- package/src/webgpu/materials/GltfCompliantMaterial.js +608 -0
- package/src/webgpu/materials/GraphMaterial.js +331 -0
- package/src/webgpu/materials/PathtracingMaterial.js +89 -0
- package/src/webgpu/materials/RenderToScreenMaterial.js +150 -0
- package/src/webgpu/materials/debug/AtlasDebugMaterial.js +41 -0
- package/src/webgpu/materials/debug/SampleDensityMaterial.js +61 -0
- package/src/webgpu/nodes/PathtracerBVHComputeData.js +1037 -0
- package/src/webgpu/nodes/debugBounds.wgsl.js +228 -0
- package/src/webgpu/nodes/eon.wgsl.js +262 -0
- package/src/webgpu/nodes/ggx.wgsl.js +190 -0
- package/src/webgpu/nodes/lights.wgsl.js +203 -0
- package/src/webgpu/nodes/material.wgsl.js +990 -0
- package/src/webgpu/nodes/rand/bluedither.wgsl.js +92 -0
- package/src/webgpu/nodes/rand/pcg.wgsl.js +81 -0
- package/src/webgpu/nodes/rand/sobol.wgsl.js +287 -0
- package/src/webgpu/nodes/random.wgsl.js +20 -0
- package/src/webgpu/nodes/reset.wgsl.js +21 -0
- package/src/webgpu/nodes/sampling.wgsl.js +193 -0
- package/src/webgpu/nodes/sheen.wgsl.js +148 -0
- package/src/webgpu/nodes/structs.wgsl.js +272 -0
- package/src/webgpu/nodes/utils.wgsl.js +366 -0
- package/src/webgpu/shims/ArrayCameraShim.js +74 -0
- package/src/webgpu/shims/EquirectCameraShim.js +37 -0
- package/src/webgpu/shims/PhysicalCameraShim.js +151 -0
- package/src/webgpu/upscale/FSRUpscaler.js +108 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { Camera, Scene, Texture, ExternalTexture } from 'three';
|
|
2
|
+
import { WebGPURenderer } from 'three/webgpu';
|
|
3
|
+
|
|
4
|
+
// constants
|
|
5
|
+
|
|
6
|
+
export type RandomStrategy = object;
|
|
7
|
+
|
|
8
|
+
export const RANDOM_PCG: RandomStrategy;
|
|
9
|
+
export const RANDOM_SOBOL: RandomStrategy;
|
|
10
|
+
export const RANDOM_BLUE_DITHER: RandomStrategy;
|
|
11
|
+
|
|
12
|
+
export const TRANSMISSIVE_BACKGROUND_ENVIRONMENT: 0;
|
|
13
|
+
export const TRANSMISSIVE_BACKGROUND_OVERLAY: 1;
|
|
14
|
+
export const TRANSMISSIVE_BACKGROUND_TRANSPARENT: 2;
|
|
15
|
+
|
|
16
|
+
export type TransmissiveBackgroundMode =
|
|
17
|
+
typeof TRANSMISSIVE_BACKGROUND_ENVIRONMENT |
|
|
18
|
+
typeof TRANSMISSIVE_BACKGROUND_OVERLAY |
|
|
19
|
+
typeof TRANSMISSIVE_BACKGROUND_TRANSPARENT;
|
|
20
|
+
|
|
21
|
+
// environment
|
|
22
|
+
|
|
23
|
+
export class BlurredEnvMapGenerator {
|
|
24
|
+
|
|
25
|
+
constructor( renderer: WebGPURenderer );
|
|
26
|
+
|
|
27
|
+
generate( texture: Texture, blur?: number, width?: number | null, height?: number | null ): Promise<Texture>;
|
|
28
|
+
dispose(): void;
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// upscaler
|
|
33
|
+
|
|
34
|
+
export interface FSRUpscalerOptions {
|
|
35
|
+
|
|
36
|
+
Upscaler: Function;
|
|
37
|
+
sharpness?: number;
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export class FSRUpscaler {
|
|
42
|
+
|
|
43
|
+
constructor( options: FSRUpscalerOptions );
|
|
44
|
+
|
|
45
|
+
Upscaler: Function;
|
|
46
|
+
sharpness: number;
|
|
47
|
+
|
|
48
|
+
init( renderer: WebGPURenderer ): void;
|
|
49
|
+
upscale( source: Texture, camera: Camera ): Texture;
|
|
50
|
+
dispose(): void;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// denoiser
|
|
55
|
+
|
|
56
|
+
export interface OIDNDenoiserOptions {
|
|
57
|
+
|
|
58
|
+
initUNetFromURL: Function;
|
|
59
|
+
auxWeightsUrl: string;
|
|
60
|
+
colorWeightsUrl?: string;
|
|
61
|
+
useAuxiliaryBuffers?: boolean;
|
|
62
|
+
maxTileSize?: number | null;
|
|
63
|
+
dynamicTile?: boolean | object | null;
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export class OIDNDenoiser {
|
|
68
|
+
|
|
69
|
+
constructor( options: OIDNDenoiserOptions );
|
|
70
|
+
|
|
71
|
+
initUNetFromURL: Function;
|
|
72
|
+
auxWeightsUrl: string;
|
|
73
|
+
colorWeightsUrl: string | undefined;
|
|
74
|
+
useAuxiliaryBuffers: boolean;
|
|
75
|
+
maxTileSize: number | null;
|
|
76
|
+
dynamicTile: boolean | object | null;
|
|
77
|
+
|
|
78
|
+
readonly texture: ExternalTexture | null;
|
|
79
|
+
readonly complete: boolean;
|
|
80
|
+
readonly running: boolean;
|
|
81
|
+
|
|
82
|
+
init( renderer: WebGPURenderer ): void;
|
|
83
|
+
setScene( scene: Scene, camera: Camera ): void;
|
|
84
|
+
update( target: Texture ): Texture | null;
|
|
85
|
+
denoise( color: Texture, albedo?: Texture | null, normal?: Texture | null ): Promise<void>;
|
|
86
|
+
reset(): void;
|
|
87
|
+
dispose(): void;
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// path tracer
|
|
92
|
+
|
|
93
|
+
export interface SampleCounts {
|
|
94
|
+
|
|
95
|
+
min: number;
|
|
96
|
+
max: number;
|
|
97
|
+
avg: number;
|
|
98
|
+
samplesPerSecond: number;
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface AtlasTexture {
|
|
103
|
+
|
|
104
|
+
readonly texture: Texture;
|
|
105
|
+
readonly width: number;
|
|
106
|
+
readonly height: number;
|
|
107
|
+
readonly pageCount: number;
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface DebugBoundsOptions {
|
|
112
|
+
|
|
113
|
+
displayTLAS?: boolean;
|
|
114
|
+
displayBLAS?: boolean;
|
|
115
|
+
stopAtSurface?: boolean;
|
|
116
|
+
saturationCount?: number;
|
|
117
|
+
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export class WebGPUPathTracer {
|
|
121
|
+
|
|
122
|
+
constructor( renderer: WebGPURenderer );
|
|
123
|
+
|
|
124
|
+
maxBounces: number;
|
|
125
|
+
frameBudget: number;
|
|
126
|
+
maxTransparentBounces: number;
|
|
127
|
+
maxSamples: number;
|
|
128
|
+
transmissiveBackground: TransmissiveBackgroundMode;
|
|
129
|
+
filterGlossyFactor: number;
|
|
130
|
+
multipleImportanceSampling: boolean;
|
|
131
|
+
clampDirect: number;
|
|
132
|
+
clampIndirect: number;
|
|
133
|
+
|
|
134
|
+
minSamples: number;
|
|
135
|
+
renderDelay: number;
|
|
136
|
+
fadeDuration: number;
|
|
137
|
+
dynamicLowRes: boolean;
|
|
138
|
+
lowResScale: number;
|
|
139
|
+
renderScale: number;
|
|
140
|
+
synchronizeRenderSize: boolean;
|
|
141
|
+
generateMissingAttributes: boolean;
|
|
142
|
+
commonAttributes: Array<string>;
|
|
143
|
+
stableNoise: boolean;
|
|
144
|
+
pause: boolean;
|
|
145
|
+
|
|
146
|
+
readonly target: Texture | null;
|
|
147
|
+
readonly fadeState: number;
|
|
148
|
+
readonly lowResTarget: Texture;
|
|
149
|
+
readonly lowResMode: boolean;
|
|
150
|
+
readonly textureAtlas: AtlasTexture;
|
|
151
|
+
|
|
152
|
+
getSampleCountsAsync(): Promise<SampleCounts>;
|
|
153
|
+
setMultipleImportanceSampling( value: boolean ): void;
|
|
154
|
+
setDenoiser( denoiser: OIDNDenoiser | null ): void;
|
|
155
|
+
setUpscaler( upscaler: FSRUpscaler | null ): void;
|
|
156
|
+
|
|
157
|
+
setScene( scene: Scene, camera: Camera ): void;
|
|
158
|
+
setRandom( random: RandomStrategy ): void;
|
|
159
|
+
setCamera( camera: Camera ): void;
|
|
160
|
+
setSize( x: number, y: number ): void;
|
|
161
|
+
|
|
162
|
+
updateMaterials(): void;
|
|
163
|
+
updateTransforms(): void;
|
|
164
|
+
updateCamera(): void;
|
|
165
|
+
updateEnvironment(): void;
|
|
166
|
+
updateLights(): void;
|
|
167
|
+
|
|
168
|
+
reset(): void;
|
|
169
|
+
renderSample(): void;
|
|
170
|
+
renderDebugBounds( options?: DebugBoundsOptions ): void;
|
|
171
|
+
renderTextureAtlas( layer?: number ): void;
|
|
172
|
+
renderSampleDensity(): void;
|
|
173
|
+
getRenderTime(): number;
|
|
174
|
+
dispose(): void;
|
|
175
|
+
|
|
176
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './WebGPUPathTracer.js';
|
|
2
|
+
export * from './BlurredEnvMapGenerator.js';
|
|
3
|
+
export * from './constants.js';
|
|
4
|
+
export * from './materials/RenderToScreenMaterial.js';
|
|
5
|
+
export * from './denoise/OIDNDenoiser.js';
|
|
6
|
+
export * from './upscale/FSRUpscaler.js';
|
|
7
|
+
|
|
8
|
+
// extend the cameras to avoid adding WebGPU imports to the WebGLPathTracer
|
|
9
|
+
import './shims/EquirectCameraShim.js';
|
|
10
|
+
import './shims/PhysicalCameraShim.js';
|
|
11
|
+
import './shims/ArrayCameraShim.js';
|