-
-
Notifications
You must be signed in to change notification settings - Fork 164
Expand file tree
/
Copy pathSobolNumberMapGenerator.js
More file actions
51 lines (33 loc) · 1.13 KB
/
SobolNumberMapGenerator.js
File metadata and controls
51 lines (33 loc) · 1.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { FloatType, MeshBasicNodeMaterial, NearestFilter, RenderTarget, RGBAFormat } from 'three/webgpu';
import { FullScreenQuad } from 'three/examples/jsm/Addons.js';
import { generateSobolPointFunc } from './nodes/random.wgsl';
import { uv } from 'three/tsl';
const _quad = new FullScreenQuad( new MeshBasicNodeMaterial() );
export class SobolNumberMapGenerator {
constructor( renderer, dimensions ) {
this.target = new RenderTarget( dimensions, dimensions, {
type: FloatType,
format: RGBAFormat,
minFilter: NearestFilter,
maxFilter: NearestFilter,
generateMipmaps: false,
} );
this.renderer = renderer;
this.dimensions = dimensions;
this.isGenerated = false;
}
get texture() {
return this.target.texture;
}
generate() {
const { renderer, dimensions, target } = this;
const ogTarget = renderer.getRenderTarget();
renderer.setRenderTarget( target );
_quad.material.colorNode = generateSobolPointFunc(
uv().x.mul( dimensions ).toUint().add( uv().y.mul( dimensions ).toUint().mul( dimensions ) )
);
_quad.render( renderer );
renderer.setRenderTarget( ogTarget );
this.isGenerated = true;
}
}