oidn-web 0.1.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.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -0
  3. package/dist/oidn.mjs +22909 -0
  4. package/dist/oidn.umd.js +5905 -0
  5. package/lib/UNet.d.ts +54 -0
  6. package/lib/UNet.js +467 -0
  7. package/lib/UNet.js.map +1 -0
  8. package/lib/WGPUComputePass.d.ts +53 -0
  9. package/lib/WGPUComputePass.js +220 -0
  10. package/lib/WGPUComputePass.js.map +1 -0
  11. package/lib/WGPUFullQuadPass.d.ts +51 -0
  12. package/lib/WGPUFullQuadPass.js +261 -0
  13. package/lib/WGPUFullQuadPass.js.map +1 -0
  14. package/lib/backend.d.ts +5 -0
  15. package/lib/backend.js +41 -0
  16. package/lib/backend.js.map +1 -0
  17. package/lib/hdr.d.ts +31 -0
  18. package/lib/hdr.js +340 -0
  19. package/lib/hdr.js.map +1 -0
  20. package/lib/helper.d.ts +1 -0
  21. package/lib/helper.js +27 -0
  22. package/lib/helper.js.map +1 -0
  23. package/lib/kernels.d.ts +1 -0
  24. package/lib/kernels.js +26 -0
  25. package/lib/kernels.js.map +1 -0
  26. package/lib/main.d.ts +20 -0
  27. package/lib/main.js +20 -0
  28. package/lib/main.js.map +1 -0
  29. package/lib/process.d.ts +39 -0
  30. package/lib/process.js +309 -0
  31. package/lib/process.js.map +1 -0
  32. package/lib/tza.d.ts +15 -0
  33. package/lib/tza.js +114 -0
  34. package/lib/tza.js.map +1 -0
  35. package/package.json +26 -0
  36. package/src/UNet.ts +708 -0
  37. package/src/WGPUComputePass.ts +318 -0
  38. package/src/WGPUFullQuadPass.ts +348 -0
  39. package/src/backend.ts +53 -0
  40. package/src/hdr.ts +398 -0
  41. package/src/helper.ts +35 -0
  42. package/src/kernels.ts +31 -0
  43. package/src/main.ts +42 -0
  44. package/src/process.ts +362 -0
  45. package/src/tza.ts +136 -0
  46. package/weights/.gitattributes +1 -0
  47. package/weights/LICENSE.txt +202 -0
  48. package/weights/README.md +7 -0
  49. package/weights/rt_hdr.tza +0 -0
  50. package/weights/rt_hdr_alb_nrm.tza +0 -0
  51. package/weights/rt_ldr.tza +0 -0
  52. package/weights/rt_ldr_alb_nrm.tza +0 -0
package/lib/UNet.d.ts ADDED
@@ -0,0 +1,54 @@
1
+ /// <reference types="@webgpu/types/dist" />
2
+ import { HostTensor } from './tza';
3
+ import { Tile } from './process';
4
+ import type { WebGPUBackend } from '@tensorflow/tfjs-backend-webgpu';
5
+ interface HDRImageData {
6
+ data: Float32Array;
7
+ width: number;
8
+ height: number;
9
+ }
10
+ interface GPUImageData {
11
+ data: GPUBuffer;
12
+ width: number;
13
+ height: number;
14
+ }
15
+ declare class UNet {
16
+ private _tensors;
17
+ private _backend;
18
+ private _tfModel;
19
+ private _device;
20
+ private _tileWidth;
21
+ private _tileHeight;
22
+ private _tileOverlapX;
23
+ private _tileOverlapY;
24
+ private _aux;
25
+ private _hdr;
26
+ private _dataProcessGPU?;
27
+ private _maxTileSize;
28
+ constructor(_tensors: Map<string, HostTensor>, _backend: WebGPUBackend, opts?: {
29
+ aux?: boolean;
30
+ hdr?: boolean;
31
+ maxTileSize?: number;
32
+ });
33
+ private _createConv;
34
+ private _createConcatConv;
35
+ private _createPooling;
36
+ private _addUpsamplingLayer;
37
+ getDevice(): GPUDevice | undefined;
38
+ buildModel(): void;
39
+ private _updateModel;
40
+ private _getTileSizeWithOverlap;
41
+ private _processImageData;
42
+ private _readTile;
43
+ private _writeTile;
44
+ private _executeTile;
45
+ progressiveExecute<T extends ImageData | HDRImageData | GPUImageData>({ color, albedo, normal, done, progress }: {
46
+ color: T;
47
+ albedo?: ImageData | GPUImageData;
48
+ normal?: ImageData | GPUImageData;
49
+ done: (outputData: T) => void;
50
+ progress?: (outputData: T, tileData: T | undefined, tile: Tile, currentIdx: number, totalIdx: number) => void;
51
+ }): () => void;
52
+ dispose(): void;
53
+ }
54
+ export default UNet;
package/lib/UNet.js ADDED
@@ -0,0 +1,467 @@
1
+ import { tensor } from '@tensorflow/tfjs-core/dist/ops/tensor';
2
+ import { tensor1d } from '@tensorflow/tfjs-core/dist/ops/tensor1d';
3
+ import { mirrorPad } from '@tensorflow/tfjs-core/dist/ops/mirror_pad';
4
+ import { pad4d } from '@tensorflow/tfjs-core/dist/ops/pad4d';
5
+ import { slice4d } from '@tensorflow/tfjs-core/dist/ops/slice4d';
6
+ import { concat4d } from '@tensorflow/tfjs-core/dist/ops/concat_4d';
7
+ import { Conv2D, UpSampling2D } from '@tensorflow/tfjs-layers/dist/layers/convolutional';
8
+ import { MaxPooling2D } from '@tensorflow/tfjs-layers/dist/layers/pooling';
9
+ import { Concatenate } from '@tensorflow/tfjs-layers/dist/layers/merge';
10
+ import { LayersModel } from '@tensorflow/tfjs-layers/dist/engine/training';
11
+ import { Input as TFInput } from '@tensorflow/tfjs-layers/dist/engine/input_layer';
12
+ import { Float16Array } from '@petamoriken/float16';
13
+ import { GPUDataProcess, Tile, avgLogLum, hdrTransferFuncCPU, hdrTransferFuncInverseCPU } from './process';
14
+ // import { profileAndLogKernelCode } from './helper';
15
+ function getTensorData(ubytes, type) {
16
+ const buffer = ubytes.buffer;
17
+ if (type === 'Float32') {
18
+ return new Float32Array(ubytes.buffer);
19
+ }
20
+ const float16Data = new Float16Array(buffer);
21
+ const float32Data = new Float32Array(float16Data.length);
22
+ for (let i = 0; i < float32Data.length; ++i) {
23
+ float32Data[i] = float16Data[i];
24
+ }
25
+ return float32Data;
26
+ }
27
+ function changeWeightShapes(weightData, dims) {
28
+ const [O, C, H, W] = dims;
29
+ const reorderedWeightData = new Float32Array(weightData.length);
30
+ for (let o = 0; o < O; ++o) {
31
+ for (let c = 0; c < C; ++c) {
32
+ for (let h = 0; h < H; ++h) {
33
+ for (let w = 0; w < W; ++w) {
34
+ // Change OCHW to HWCO
35
+ const idx = o * C * H * W + c * H * W + h * W + w;
36
+ const idx2 = h * W * C * O + w * C * O + c * O + o;
37
+ reorderedWeightData[idx2] = weightData[idx];
38
+ }
39
+ }
40
+ }
41
+ }
42
+ return reorderedWeightData;
43
+ }
44
+ function roundUp(a, b) {
45
+ return Math.ceil(a / b) * b;
46
+ }
47
+ // Returns the smallest integer larger than or equal to a which has remainder c when divided by b
48
+ function roundUp2(a, b, c) {
49
+ return Math.ceil((a - c) / b) * b + c;
50
+ }
51
+ function isGPUImageData(data) {
52
+ return data.data instanceof GPUBuffer;
53
+ }
54
+ const receptiveField = 174; // receptive field in pixels
55
+ // TODO metal is 32?
56
+ const minTileAlignment = 1;
57
+ const tileAlignment = 16; // required spatial alignment in pixels (padding may be necessary)
58
+ const defaultTileOverlap = roundUp(receptiveField / 2, tileAlignment);
59
+ class UNet {
60
+ _tensors;
61
+ _backend;
62
+ _tfModel;
63
+ _device;
64
+ // TODO calculate the tile size from memory size
65
+ // https://github.com/RenderKit/oidn/blob/713ec7838ba650f99e0a896549c0dca5eeb3652d/core/unet_filter.cpp#L287
66
+ _tileWidth = 0;
67
+ _tileHeight = 0;
68
+ _tileOverlapX = 0;
69
+ _tileOverlapY = 0;
70
+ _aux = false;
71
+ _hdr = false;
72
+ _dataProcessGPU;
73
+ _maxTileSize;
74
+ constructor(_tensors, _backend, opts = {}) {
75
+ this._tensors = _tensors;
76
+ this._backend = _backend;
77
+ this._aux = opts.aux || false;
78
+ this._hdr = opts.hdr || false;
79
+ this._maxTileSize = opts.maxTileSize ?? 512;
80
+ this._device = this._backend.device;
81
+ }
82
+ _createConv(name, source, activation) {
83
+ const unetWeightTensor = this._tensors.get(name + '.weight');
84
+ const unetBiasTensor = this._tensors.get(name + '.bias');
85
+ const weightDims = unetWeightTensor.desc.dims;
86
+ const weightTensor = tensor(changeWeightShapes(getTensorData(unetWeightTensor.data, unetWeightTensor.desc.dataType), weightDims), [weightDims[2], weightDims[3], weightDims[1], weightDims[0]], 'float32');
87
+ const biasTensor = tensor1d(getTensorData(unetBiasTensor.data, unetBiasTensor.desc.dataType), 'float32');
88
+ // TODO whats the purpose of padded dims ?
89
+ const convLayer = new Conv2D({
90
+ name,
91
+ filters: unetWeightTensor.desc.dims[0],
92
+ kernelSize: unetWeightTensor.desc.dims.slice(2, 4),
93
+ useBias: true,
94
+ activation,
95
+ padding: 'same',
96
+ weights: [weightTensor, biasTensor],
97
+ trainable: false
98
+ });
99
+ return convLayer.apply(source);
100
+ }
101
+ _createConcatConv(name, source1, source2) {
102
+ //https://github.com/RenderKit/oidn/blob/713ec7838ba650f99e0a896549c0dca5eeb3652d/training/model.py#L40
103
+ return this._createConv(name,
104
+ // Concat on the channel
105
+ new Concatenate({ trainable: false, axis: 3 }).apply([
106
+ // convLayer.apply(source2) as SymbolicTensor,
107
+ source1,
108
+ source2
109
+ ]), 'relu');
110
+ }
111
+ _createPooling(source) {
112
+ // https://github.com/RenderKit/oidn/blob/713ec7838ba650f99e0a896549c0dca5eeb3652d/training/model.py#L33
113
+ return new MaxPooling2D({
114
+ name: source.name + '/pooling',
115
+ poolSize: [2, 2],
116
+ strides: [2, 2],
117
+ padding: 'same',
118
+ trainable: false
119
+ }).apply(source);
120
+ }
121
+ _addUpsamplingLayer(source) {
122
+ return new UpSampling2D({
123
+ name: source.name + '/upsampling',
124
+ size: [2, 2],
125
+ trainable: false
126
+ }).apply(source);
127
+ }
128
+ getDevice() {
129
+ return this._device;
130
+ }
131
+ buildModel() {
132
+ const aux = this._aux;
133
+ const channels = 3 + (aux ? 6 : 0);
134
+ const tileSize = this._getTileSizeWithOverlap();
135
+ // TODO input process transferFunc
136
+ // TODO input shape
137
+ const input = TFInput({
138
+ shape: [tileSize.height, tileSize.width, channels],
139
+ dtype: 'float32'
140
+ });
141
+ const encConv0 = this._createConv('enc_conv0', input, 'relu');
142
+ const pool1 = this._createPooling(this._createConv('enc_conv1', encConv0, 'relu'));
143
+ const pool2 = this._createPooling(this._createConv('enc_conv2', pool1, 'relu'));
144
+ const pool3 = this._createPooling(this._createConv('enc_conv3', pool2, 'relu'));
145
+ const pool4 = this._createPooling(this._createConv('enc_conv4', pool3, 'relu'));
146
+ const encConv5a = this._createConv('enc_conv5a', pool4, 'relu');
147
+ const upsample4 = this._addUpsamplingLayer(this._createConv('enc_conv5b', encConv5a, 'relu'));
148
+ const decConv4a = this._createConcatConv('dec_conv4a', upsample4, pool3);
149
+ const upsample3 = this._addUpsamplingLayer(this._createConv('dec_conv4b', decConv4a, 'relu'));
150
+ const decConv3a = this._createConcatConv('dec_conv3a', upsample3, pool2);
151
+ const upsample2 = this._addUpsamplingLayer(this._createConv('dec_conv3b', decConv3a, 'relu'));
152
+ const decConv2a = this._createConcatConv('dec_conv2a', upsample2, pool1);
153
+ const upsample1 = this._addUpsamplingLayer(this._createConv('dec_conv2b', decConv2a, 'relu'));
154
+ const decConv1a = this._createConcatConv('dec_conv1a', upsample1, input);
155
+ const decConv1b = this._createConv('dec_conv1b', decConv1a, 'relu');
156
+ const decConv0 = this._createConv('dec_conv0', decConv1b, 'relu');
157
+ this._tfModel = new LayersModel({
158
+ inputs: [input],
159
+ // TODO output process transferFunc
160
+ outputs: decConv0
161
+ });
162
+ }
163
+ _updateModel(width, height) {
164
+ const maxTileSize = this._maxTileSize;
165
+ let tileWidth = maxTileSize;
166
+ let tileHeight = maxTileSize;
167
+ let tileOverlapX = defaultTileOverlap;
168
+ let tileOverlapY = defaultTileOverlap;
169
+ if (width < maxTileSize + defaultTileOverlap * 2) {
170
+ tileWidth = roundUp(width, tileAlignment);
171
+ tileOverlapX = 0;
172
+ }
173
+ if (height < maxTileSize + defaultTileOverlap * 2) {
174
+ tileHeight = roundUp(height, tileAlignment);
175
+ tileOverlapY = 0;
176
+ }
177
+ if (tileWidth !== this._tileWidth ||
178
+ tileHeight !== this._tileHeight ||
179
+ tileOverlapX !== this._tileOverlapX ||
180
+ tileOverlapY !== this._tileOverlapY ||
181
+ !this._tfModel) {
182
+ this._tileWidth = tileWidth;
183
+ this._tileHeight = tileHeight;
184
+ this._tileOverlapX = tileOverlapX;
185
+ this._tileOverlapY = tileOverlapY;
186
+ if (this._tfModel) {
187
+ this._tfModel.dispose();
188
+ }
189
+ this.buildModel();
190
+ }
191
+ }
192
+ _getTileSizeWithOverlap() {
193
+ return {
194
+ width: this._tileWidth + 2 * this._tileOverlapX,
195
+ height: this._tileHeight + 2 * this._tileOverlapY
196
+ };
197
+ }
198
+ _processImageData(color, albedo, normal, isHDR) {
199
+ const rawData = color.data;
200
+ const pixelsCount = rawData.length / 4;
201
+ const channels = this._aux ? 9 : 3;
202
+ const tensorData = new Float32Array(pixelsCount * channels);
203
+ if ((albedo && !normal) || (normal && !albedo)) {
204
+ throw new Error('Normal map and albedo map are both required');
205
+ }
206
+ if (albedo && normal) {
207
+ if (albedo.width !== normal.width ||
208
+ albedo.height !== normal.height ||
209
+ color.width !== albedo.width ||
210
+ color.height !== albedo.height) {
211
+ throw new Error('Image size mismatch');
212
+ }
213
+ }
214
+ const albedoData = albedo?.data;
215
+ const normalData = normal?.data;
216
+ for (let i = 0; i < rawData.length; i += 4) {
217
+ const i2 = (i / 4) * channels;
218
+ for (let c = 0; c < 3; c++) {
219
+ if (isHDR) {
220
+ tensorData[i2 + c] = rawData[i + c];
221
+ }
222
+ else {
223
+ tensorData[i2 + c] = rawData[i + c] / 255;
224
+ }
225
+ if (albedoData) {
226
+ tensorData[i2 + c + 3] = albedoData[i + c] / 255;
227
+ }
228
+ if (normalData) {
229
+ tensorData[i2 + c + 6] = normalData[i + c] / 255;
230
+ }
231
+ }
232
+ }
233
+ return tensorData;
234
+ }
235
+ _readTile(data, channels, srcTile, width) {
236
+ const tileData = new Float32Array(srcTile.width * srcTile.height * channels);
237
+ for (let y = 0; y < srcTile.height; y++) {
238
+ for (let x = 0; x < srcTile.width; x++) {
239
+ const i2 = ((y + srcTile.y) * width + (x + srcTile.x)) * channels;
240
+ const i1 = (y * srcTile.width + x) * channels;
241
+ for (let c = 0; c < channels; c++) {
242
+ tileData[i1 + c] = data[i2 + c];
243
+ }
244
+ }
245
+ }
246
+ return tileData;
247
+ }
248
+ _writeTile(imageData, srcTile, dstTile, srcTileData, srcWidth, isHDR) {
249
+ const { data: outImageData, width } = imageData;
250
+ const dx = dstTile.x - srcTile.x;
251
+ const dy = dstTile.y - srcTile.y;
252
+ for (let y = 0; y < dstTile.height; y++) {
253
+ for (let x = 0; x < dstTile.width; x++) {
254
+ const i1 = ((y + dy) * srcWidth + x + dx) * 3;
255
+ const i2 = ((y + dstTile.y) * width + (x + dstTile.x)) * 4;
256
+ for (let c = 0; c < 3; c++) {
257
+ if (isHDR) {
258
+ outImageData[i2 + c] = srcTileData[i1 + c];
259
+ }
260
+ else {
261
+ outImageData[i2 + c] = Math.min(Math.max(srcTileData[i1 + c] * 255, 0), 255);
262
+ }
263
+ }
264
+ imageData.data[i2 + 3] = isHDR ? 1 : 255;
265
+ }
266
+ }
267
+ }
268
+ _executeTile(inputData, outputTileData, outputImageData, i, j, width, height, isHDR) {
269
+ const channels = this._aux ? 9 : 3;
270
+ const tileOverlapX = this._tileOverlapX;
271
+ const tileOverlapY = this._tileOverlapY;
272
+ let srcTileSize = this._getTileSizeWithOverlap();
273
+ let dstTileSize = { width: this._tileWidth, height: this._tileHeight };
274
+ let srcX0 = i > 0 ? i * dstTileSize.width - tileOverlapX : 0;
275
+ let srcX1 = Math.min(srcX0 + srcTileSize.width, width);
276
+ srcX0 = Math.max(srcX1 - srcTileSize.width, 0);
277
+ let srcY0 = j > 0 ? j * dstTileSize.height - tileOverlapY : 0;
278
+ let srcY1 = Math.min(srcY0 + srcTileSize.height, height);
279
+ srcY0 = Math.max(srcY1 - srcTileSize.height, 0);
280
+ const srcTileWidth = Math.min(srcTileSize.width, width);
281
+ const srcTileHeight = Math.min(srcTileSize.height, height);
282
+ const needsResize = width < dstTileSize.width || height < dstTileSize.height;
283
+ const srcTile = new Tile(srcX0, srcY0, srcTileWidth, srcTileHeight);
284
+ let tileTensor;
285
+ let inputScale = 1;
286
+ const device = this._device;
287
+ let dataProcessGPU = this._dataProcessGPU;
288
+ if (inputData instanceof Float32Array) {
289
+ let tileData = this._readTile(inputData, channels, srcTile, width);
290
+ if (isHDR) {
291
+ inputScale = avgLogLum({
292
+ data: tileData,
293
+ channels: 9
294
+ });
295
+ tileData = hdrTransferFuncCPU({
296
+ data: tileData,
297
+ channels: 9,
298
+ inputScale
299
+ });
300
+ }
301
+ tileTensor = tensor(tileData, [1, srcTileHeight, srcTileWidth, channels], 'float32');
302
+ }
303
+ else {
304
+ if (!isHDR) {
305
+ throw new Error('Only hdr is supported for webgpu data.');
306
+ }
307
+ if (!dataProcessGPU) {
308
+ dataProcessGPU = this._dataProcessGPU = new GPUDataProcess(device);
309
+ }
310
+ dataProcessGPU.setImageSize(width, height);
311
+ dataProcessGPU.setInputTile(srcTile);
312
+ // Display the noisy input instead of prev denoised result
313
+ if (i === 0 && j === 0) {
314
+ dataProcessGPU.copyInputDataToOutput(inputData.color);
315
+ }
316
+ const { color, albedo, normal } = dataProcessGPU.forward(inputData.color, inputData.albedo, inputData.normal);
317
+ const shape = [1, srcTileHeight, srcTileWidth, 4];
318
+ tileTensor = concat4d([color, albedo, normal].map((buffer) => {
319
+ const tmp = tensor({ buffer, zeroCopy: true }, shape);
320
+ const ret = slice4d(tmp, [0, 0, 0, 0], [1, srcTileHeight, srcTileWidth, 3]);
321
+ tmp.dispose();
322
+ return ret;
323
+ }), 3);
324
+ }
325
+ // We need resize if input size is smaller than tile size. And is rounded up.
326
+ if (needsResize) {
327
+ const rawTileTensor = tileTensor;
328
+ tileTensor = mirrorPad(rawTileTensor, [
329
+ [0, 0],
330
+ [0, srcTileSize.height - height],
331
+ [0, srcTileSize.width - width],
332
+ [0, 0]
333
+ ], 'reflect');
334
+ rawTileTensor.dispose();
335
+ }
336
+ const outputTensor = this._tfModel.predict(tileTensor);
337
+ tileTensor.dispose();
338
+ const dstWidth = Math.min(dstTileSize.width, width);
339
+ const dstHeight = Math.min(dstTileSize.height, height);
340
+ const dstTile = new Tile(i * dstWidth, j * dstHeight, dstWidth, dstHeight);
341
+ dstTile.width = Math.min(dstTile.width, width - dstTile.x);
342
+ dstTile.height = Math.min(dstTile.height, height - dstTile.y);
343
+ if (inputData instanceof Float32Array) {
344
+ let denoisedData = outputTensor.dataSync();
345
+ if (isHDR) {
346
+ denoisedData = hdrTransferFuncInverseCPU({
347
+ data: denoisedData,
348
+ channels: 3,
349
+ inputScale
350
+ });
351
+ }
352
+ this._writeTile(outputImageData, srcTile, dstTile, denoisedData, srcTileSize.width, isHDR);
353
+ for (let y = 0; y < dstHeight; y++) {
354
+ for (let x = 0; x < dstWidth; x++) {
355
+ const i1 = (y * dstWidth + x) * 4;
356
+ const i2 = ((y + dstTile.y) * width + (x + dstTile.x)) * 4;
357
+ for (let c = 0; c < 4; c++) {
358
+ outputTileData.data[i1 + c] = outputImageData.data[i2 + c];
359
+ }
360
+ }
361
+ }
362
+ outputTensor.dispose();
363
+ }
364
+ else {
365
+ dataProcessGPU.setOutputTile(dstTile, srcTile);
366
+ // IMPORTANT
367
+ // storage buffer has alignment. that 3 channels still needs 16 bytes data.
368
+ // So we need to pad it to 4 channels.
369
+ const outputTensor4Channnels = pad4d(outputTensor, [
370
+ [0, 0],
371
+ [0, 0],
372
+ [0, 0],
373
+ [0, 1]
374
+ ]);
375
+ const outBuffer = dataProcessGPU.inverse(outputTensor4Channnels.dataToGPU().buffer, inputData.color);
376
+ outputTensor.dispose();
377
+ outputTensor4Channnels.dispose();
378
+ return outBuffer;
379
+ }
380
+ }
381
+ progressiveExecute({ color, albedo, normal, done, progress }) {
382
+ if (this._aux && (!albedo || !normal)) {
383
+ throw new Error('Normal map and albedo map are both required');
384
+ }
385
+ if (!this._aux) {
386
+ if (albedo || normal) {
387
+ throw new Error('Normal map and albedo map are not required');
388
+ }
389
+ }
390
+ const width = color.width;
391
+ const height = color.height;
392
+ this._updateModel(width, height);
393
+ // TODO should fixed to be hdr when UNet is created.
394
+ // weights of hdr and ldr is different
395
+ const hdr = this._hdr || false;
396
+ let rawData;
397
+ if (!isGPUImageData(color)) {
398
+ rawData = this._processImageData(color, albedo, normal, hdr);
399
+ }
400
+ const tileWidth = this._tileWidth;
401
+ const tileHeight = this._tileHeight;
402
+ const tileCountH = Math.ceil(height / tileHeight);
403
+ const tileCountW = Math.ceil(width / tileWidth);
404
+ function makeImageData(width, height) {
405
+ return hdr
406
+ ? {
407
+ data: new Float32Array(width * height * 4),
408
+ width,
409
+ height
410
+ }
411
+ : new ImageData(width, height);
412
+ }
413
+ const outputImageData = isGPUImageData(color)
414
+ ? undefined
415
+ : makeImageData(width, height);
416
+ const outputTileData = isGPUImageData(color)
417
+ ? undefined
418
+ : makeImageData(Math.min(tileWidth, width), Math.min(tileHeight, height));
419
+ let aborted = false;
420
+ const executeTile = (i, j) => {
421
+ if (aborted) {
422
+ return;
423
+ }
424
+ let resGPUBuffer;
425
+ // profileAndLogKernelCode(() => {
426
+ resGPUBuffer = this._executeTile(isGPUImageData(color)
427
+ ? {
428
+ color: color.data,
429
+ albedo: albedo.data,
430
+ normal: normal.data
431
+ }
432
+ : rawData, outputTileData, outputImageData, i, j, width, height, hdr);
433
+ // }, true);
434
+ const output = outputImageData || {
435
+ data: resGPUBuffer,
436
+ width,
437
+ height
438
+ };
439
+ progress?.(output,
440
+ // Is undefined if using webgpu buffer
441
+ outputTileData, new Tile(i * tileWidth, j * tileHeight, tileWidth, tileHeight), i + j * tileCountW, tileCountW * tileCountH);
442
+ if (i + 1 < tileCountW || j + 1 < tileCountH) {
443
+ requestAnimationFrame(() => {
444
+ if (i + 1 < tileCountW) {
445
+ executeTile(i + 1, j);
446
+ }
447
+ else if (j + 1 < tileCountH) {
448
+ executeTile(0, j + 1);
449
+ }
450
+ });
451
+ }
452
+ else {
453
+ done(output);
454
+ }
455
+ };
456
+ executeTile(0, 0);
457
+ return () => {
458
+ aborted = true;
459
+ };
460
+ }
461
+ dispose() {
462
+ this._tfModel?.dispose();
463
+ this._dataProcessGPU?.dispose();
464
+ }
465
+ }
466
+ export default UNet;
467
+ //# sourceMappingURL=UNet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UNet.js","sourceRoot":"","sources":["../src/UNet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /// <reference types="@webgpu/types/dist" />
2
+ export declare const WORKGROUP_SIZE = 8;
3
+ export interface Uniform {
4
+ label: string;
5
+ type: string;
6
+ data: Float32Array | Int32Array | Uint32Array;
7
+ }
8
+ export interface WGPUComputePassInput {
9
+ buffer: GPUBuffer;
10
+ channels: number;
11
+ }
12
+ export interface WGPUComputePassOutput {
13
+ channels: number;
14
+ }
15
+ export declare class WGPUComputePass<I extends string, O extends string> {
16
+ private _label;
17
+ private _device;
18
+ private _outputBuffers;
19
+ private _pipeline;
20
+ private _bindGroups;
21
+ private _needsUpdatePipeline;
22
+ private _inputs;
23
+ private _outputs;
24
+ private _uniforms;
25
+ private _uniformBuffers;
26
+ private _width;
27
+ private _height;
28
+ private _execWidth?;
29
+ private _execHeight?;
30
+ private _csCode;
31
+ private _csMain;
32
+ private _csDefine;
33
+ constructor(label: string, device: GPUDevice, opts: {
34
+ inputs: I[];
35
+ outputs: O[];
36
+ csMain: string;
37
+ csDefine?: string;
38
+ uniforms: Uniform[];
39
+ });
40
+ setSize(width: number, height: number): void;
41
+ setExecuteSize(width: number, height: number): void;
42
+ setOutputParams(outputParams: Record<O, WGPUComputePassOutput>): void;
43
+ setUniform(label: string, data: Float32Array | Int32Array | Uint32Array): void;
44
+ getOutputBuffer(name: O): GPUBuffer;
45
+ dispose(): void;
46
+ private _createBuffer;
47
+ private _resizeOutputBuffers;
48
+ private _updateOutputBuffers;
49
+ private _updatePipeline;
50
+ private _getFullCs;
51
+ private _updateBindGroups;
52
+ createPass(commandEncoder: GPUCommandEncoder, inputBuffers: Record<I, WGPUComputePassInput>): void;
53
+ }