@takram/three-geospatial 0.8.0 → 0.9.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 (62) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/build/index.cjs +1 -1
  3. package/build/index.cjs.map +1 -1
  4. package/build/index.js +580 -598
  5. package/build/index.js.map +1 -1
  6. package/build/r3f.cjs +1 -1
  7. package/build/r3f.js +1 -1
  8. package/build/shared2.cjs +1 -1
  9. package/build/shared2.cjs.map +1 -1
  10. package/build/shared2.js +27 -212
  11. package/build/shared2.js.map +1 -1
  12. package/build/shared3.cjs +1 -1
  13. package/build/shared3.cjs.map +1 -1
  14. package/build/shared3.js +213 -8
  15. package/build/shared3.js.map +1 -1
  16. package/build/webgpu.cjs +6 -1
  17. package/build/webgpu.cjs.map +1 -1
  18. package/build/webgpu.js +993 -807
  19. package/build/webgpu.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/PointOfView.ts +12 -5
  22. package/src/STBNLoader.ts +41 -19
  23. package/src/webgpu/CascadedShadowMapsNode.ts +48 -0
  24. package/src/webgpu/DualMipmapFilterNode.ts +8 -4
  25. package/src/webgpu/FilterNode.ts +3 -2
  26. package/src/webgpu/FnLayout.ts +17 -16
  27. package/src/webgpu/HighpVelocityNode.ts +2 -2
  28. package/src/webgpu/LensFlareNode.ts +1 -1
  29. package/src/webgpu/LensGlareNode.ts +26 -26
  30. package/src/webgpu/LensHaloNode.ts +2 -1
  31. package/src/webgpu/STBNTextureNode.ts +58 -0
  32. package/src/webgpu/ScreenSpaceShadowNode.ts +30 -35
  33. package/src/webgpu/SeparableFilterNode.ts +8 -5
  34. package/src/webgpu/SingleFilterNode.ts +5 -2
  35. package/src/webgpu/StorageTexture3DNode.ts +30 -0
  36. package/src/webgpu/TemporalAntialiasNode.ts +50 -31
  37. package/src/webgpu/accessors.ts +75 -36
  38. package/src/webgpu/debug.ts +38 -47
  39. package/src/webgpu/events.ts +18 -0
  40. package/src/webgpu/index.ts +4 -0
  41. package/src/webgpu/math.ts +116 -15
  42. package/src/webgpu/sampling.ts +39 -5
  43. package/src/webgpu/transformations.ts +71 -44
  44. package/types/PointOfView.d.ts +1 -1
  45. package/types/STBNLoader.d.ts +3 -4
  46. package/types/webgpu/CascadedShadowMapsNode.d.ts +13 -0
  47. package/types/webgpu/DualMipmapFilterNode.d.ts +1 -2
  48. package/types/webgpu/FnLayout.d.ts +4 -4
  49. package/types/webgpu/LensGlareNode.d.ts +1 -1
  50. package/types/webgpu/STBNTextureNode.d.ts +9 -0
  51. package/types/webgpu/ScreenSpaceShadowNode.d.ts +2 -4
  52. package/types/webgpu/SeparableFilterNode.d.ts +2 -3
  53. package/types/webgpu/SingleFilterNode.d.ts +1 -2
  54. package/types/webgpu/StorageTexture3DNode.d.ts +9 -0
  55. package/types/webgpu/TemporalAntialiasNode.d.ts +1 -1
  56. package/types/webgpu/accessors.d.ts +9 -8
  57. package/types/webgpu/debug.d.ts +4 -3
  58. package/types/webgpu/events.d.ts +3 -0
  59. package/types/webgpu/index.d.ts +4 -0
  60. package/types/webgpu/math.d.ts +3 -0
  61. package/types/webgpu/sampling.d.ts +2 -1
  62. package/types/webgpu/transformations.d.ts +7 -10
@@ -1,16 +1,50 @@
1
- import { add, sub, textureSize, vec2 } from 'three/tsl'
2
- import type { TextureNode } from 'three/webgpu'
1
+ import { add, ivec2, ivec4, sub, uv, vec2, vec4 } from 'three/tsl'
2
+ import type { ConstNode, TextureNode } from 'three/webgpu'
3
3
 
4
+ import { reinterpretType } from '../types'
4
5
  import { FnVar } from './FnVar'
5
6
  import type { Node } from './node'
6
7
 
8
+ const components = ['x', 'y', 'z', 'w'] as const
9
+
10
+ // WORKAROUND: TextureNode doesn't have gather() yet.
11
+ // See: https://www.w3.org/TR/WGSL/#texturegather
12
+ export const textureGather = /*#__PURE__*/ FnVar(
13
+ (
14
+ textureNode: TextureNode,
15
+ uvNode: Node<'vec2'>,
16
+ component = 0
17
+ ): Node<'vec4'> => {
18
+ let componentValue
19
+ if (typeof component === 'number') {
20
+ componentValue = component
21
+ } else if ((component as any)?.isConstNode === true) {
22
+ reinterpretType<ConstNode<number>>(component)
23
+ componentValue = component.value
24
+ } else {
25
+ throw new Error('Component must be a constant.')
26
+ }
27
+
28
+ const size = textureNode.size()
29
+ const coord = ivec2(uvNode.mul(size).sub(0.5).floor()).toConst()
30
+ const i = ivec4(coord, coord.add(1)).toConst()
31
+ const c = components[componentValue] // element() fails for depth textures
32
+ return vec4(
33
+ textureNode.load(i.xw)[c], // min, max
34
+ textureNode.load(i.zw)[c], // max, max
35
+ textureNode.load(i.zy)[c], // max, min
36
+ textureNode.load(i.xy)[c] // min, min
37
+ )
38
+ }
39
+ )
40
+
7
41
  // 9-taps version of Catmull-Rom sampling.
8
42
  // Reference: https://gist.github.com/TheRealMJP/c83b8c0f46b63f3a88a5986f4fa982b1
9
43
  export const textureCatmullRom = /*#__PURE__*/ FnVar(
10
- (textureNode: TextureNode, uv: Node<'vec2'>): Node<'vec4'> => {
11
- const size = vec2(textureSize(textureNode))
44
+ (textureNode: TextureNode, uvNode: Node<'vec2'> = uv()): Node<'vec4'> => {
45
+ const size = vec2(textureNode.size())
12
46
  const texelSize = size.reciprocal()
13
- const position = uv.mul(size)
47
+ const position = uvNode.mul(size)
14
48
  const centerPosition = position.sub(0.5).floor().add(0.5)
15
49
 
16
50
  // Compute the fractional offset from our starting texel to our original
@@ -1,4 +1,7 @@
1
+ import type { Camera } from 'three'
1
2
  import {
3
+ cameraFar as cameraFarTSL,
4
+ cameraNear as cameraNearTSL,
2
5
  cos,
3
6
  int,
4
7
  logarithmicDepthToViewZ,
@@ -14,44 +17,54 @@ import {
14
17
  viewZToPerspectiveDepth
15
18
  } from 'three/tsl'
16
19
 
20
+ import { cameraFar, cameraNear } from './accessors'
21
+ import { FnLayout } from './FnLayout'
22
+ import { FnVar } from './FnVar'
17
23
  import type { Node } from './node'
18
24
 
19
- export interface DepthOptions {
20
- perspective?: boolean
21
- logarithmic?: boolean
22
- }
23
-
24
- export const depthToViewZ = (
25
- depth: Node<'float'>,
26
- near: Node<'float'>,
27
- far: Node<'float'>,
28
- { perspective = true, logarithmic = false }: DepthOptions = {}
29
- ): Node<'float'> => {
30
- return logarithmic
31
- ? logarithmicDepthToViewZ(depth, near, far)
32
- : perspective
33
- ? perspectiveDepthToViewZ(depth, near, far)
34
- : orthographicDepthToViewZ(depth, near, far)
35
- }
25
+ export const depthToViewZ = /*#__PURE__*/ FnVar(
26
+ (
27
+ depth: Node<'float'>,
28
+ camera?: Camera | null,
29
+ near?: Node<'float'> | null,
30
+ far?: Node<'float'> | null
31
+ ) =>
32
+ (builder): Node<'float'> => {
33
+ near ??= cameraNear(camera)
34
+ far ??= cameraFar(camera)
35
+ const perspective = camera?.isPerspectiveCamera === true
36
+ const logarithmic = builder.renderer.logarithmicDepthBuffer
37
+ return logarithmic
38
+ ? logarithmicDepthToViewZ(depth, near, far)
39
+ : perspective
40
+ ? perspectiveDepthToViewZ(depth, near, far)
41
+ : orthographicDepthToViewZ(depth, near, far)
42
+ }
43
+ )
36
44
 
37
45
  export const logarithmicToPerspectiveDepth = (
38
46
  depth: Node<'float'>,
39
- near: Node<'float'>,
40
- far: Node<'float'>
47
+ near?: Node<'float'> | null,
48
+ far?: Node<'float'> | null
41
49
  ): Node<'float'> => {
50
+ near ??= cameraNearTSL
51
+ far ??= cameraFarTSL
42
52
  const viewZ = logarithmicDepthToViewZ(depth, near, far)
43
53
  return viewZToPerspectiveDepth(viewZ, near, far)
44
54
  }
45
55
 
46
56
  export const perspectiveToLogarithmicDepth = (
47
57
  depth: Node<'float'>,
48
- near: Node<'float'>,
49
- far: Node<'float'>
58
+ near?: Node<'float'> | null,
59
+ far?: Node<'float'> | null
50
60
  ): Node<'float'> => {
61
+ near ??= cameraNearTSL
62
+ far ??= cameraFarTSL
51
63
  const viewZ = perspectiveDepthToViewZ(depth, near, far)
52
64
  return viewZToLogarithmicDepth(viewZ, near, far)
53
65
  }
54
66
 
67
+ // TODO: Reconsider interface
55
68
  export const screenToPositionView = (
56
69
  uv: Node<'vec2'>,
57
70
  depth: Node<'float'>,
@@ -68,34 +81,48 @@ export const screenToPositionView = (
68
81
 
69
82
  // A fifth-order polynomial approximation of Turbo color map.
70
83
  // See: https://observablehq.com/@mbostock/turbo
71
- const turboCoeffs = [
72
- /*#__PURE__*/ vec3(58.1375, 2.7747, 26.8183),
73
- /*#__PURE__*/ vec3(-150.5666, 4.2109, -88.5066),
74
- /*#__PURE__*/ vec3(130.5887, -14.0195, 109.0745),
75
- /*#__PURE__*/ vec3(-42.3277, 4.8052, -60.1097),
76
- /*#__PURE__*/ vec3(4.5974, 2.1856, 12.5925),
77
- /*#__PURE__*/ vec3(0.1357, 0.0914, 0.1067)
84
+ const turboCoeffs: ReadonlyArray<[number, number, number]> = [
85
+ [58.1375, 2.7747, 26.8183],
86
+ [-150.5666, 4.2109, -88.5066],
87
+ [130.5887, -14.0195, 109.0745],
88
+ [-42.3277, 4.8052, -60.1097],
89
+ [4.5974, 2.1856, 12.5925],
90
+ [0.1357, 0.0914, 0.1067]
78
91
  ]
79
92
 
80
- export const turbo = (x: Node<'float'>): Node<'vec3'> => {
81
- return turboCoeffs
82
- .slice(1)
83
- .reduce<Node>((y, offset) => offset.add(x.mul(y)), turboCoeffs[0])
84
- }
93
+ export const turbo = /*#__PURE__*/ FnLayout({
94
+ name: 'turbo',
95
+ type: 'vec3',
96
+ inputs: [{ name: 'x', type: 'float' }]
97
+ })(([x]) => {
98
+ const y = vec3(...turboCoeffs[0]).toVar()
99
+ for (let i = 1; i < turboCoeffs.length; ++i) {
100
+ y.assign(vec3(...turboCoeffs[i]).add(x.mul(y)))
101
+ }
102
+ return y
103
+ })
85
104
 
86
- export const depthToColor = (
87
- depth: Node<'float'>,
88
- near: Node<'float'>,
89
- far: Node<'float'>,
90
- options?: DepthOptions
91
- ): Node<'vec3'> => {
92
- const viewZ = depthToViewZ(depth, near, far, options)
93
- return turbo(viewZToLogarithmicDepth(viewZ, near, far))
94
- }
105
+ export const depthToColor = FnVar(
106
+ (
107
+ depth: Node<'float'>,
108
+ camera?: Camera,
109
+ near?: Node<'float'>,
110
+ far?: Node<'float'>
111
+ ): Node<'vec3'> => {
112
+ near ??= cameraNear(camera)
113
+ far ??= cameraFar(camera)
114
+ const viewZ = depthToViewZ(depth, camera, near, far)
115
+ return turbo(viewZToLogarithmicDepth(viewZ, near, far))
116
+ }
117
+ )
95
118
 
96
- export const equirectToDirectionWorld = (uv: Node<'vec2'>): Node<'vec3'> => {
119
+ export const equirectToDirectionWorld = /*#__PURE__*/ FnLayout({
120
+ name: 'equirectToDirectionWorld',
121
+ type: 'vec3',
122
+ inputs: [{ name: 'uv', type: 'vec2' }]
123
+ })(([uv]) => {
97
124
  const lambda = sub(0.5, uv.x).mul(PI2)
98
125
  const phi = sub(uv.y, 0.5).mul(PI)
99
126
  const cosPhi = cos(phi)
100
127
  return vec3(cosPhi.mul(cos(lambda)), sin(phi), cosPhi.mul(sin(lambda)))
101
- }
128
+ })
@@ -15,5 +15,5 @@ export declare class PointOfView {
15
15
  copy(other: PointOfView): this;
16
16
  equals(other: PointOfView): boolean;
17
17
  decompose(target: Vector3, eye: Vector3, quaternion: Quaternion, up?: Vector3, ellipsoid?: Ellipsoid): void;
18
- setFromCamera(camera: Camera, ellipsoid?: Ellipsoid): this | undefined;
18
+ setFromCamera(camera: Camera, ellipsoid?: Ellipsoid, target?: Vector3): this | undefined;
19
19
  }
@@ -1,5 +1,4 @@
1
- import { Data3DTexture, LoadingManager } from 'three';
2
- import { DataTextureLoader } from './DataTextureLoader';
3
- export declare class STBNLoader extends DataTextureLoader<Data3DTexture> {
4
- constructor(manager?: LoadingManager);
1
+ import { Data3DTexture, Loader } from 'three';
2
+ export declare class STBNLoader extends Loader<Data3DTexture> {
3
+ load(url: string, onLoad?: (data: Data3DTexture) => void, onProgress?: (event: ProgressEvent) => void, onError?: (error: unknown) => void): Data3DTexture;
5
4
  }
@@ -0,0 +1,13 @@
1
+ import { DirectionalLight, PerspectiveCamera, Vector2 } from 'three';
2
+ import { CSMShadowNode } from 'three/examples/jsm/csm/CSMShadowNode.js';
3
+ import { NodeFrame } from 'three/webgpu';
4
+ declare module 'three/examples/jsm/csm/CSMShadowNode.js' {
5
+ interface CSMShadowNode {
6
+ _cascades: Vector2[];
7
+ }
8
+ }
9
+ export declare class CascadedShadowMapsNode extends CSMShadowNode {
10
+ camera: PerspectiveCamera;
11
+ light: DirectionalLight;
12
+ updateBefore(frame: NodeFrame): void;
13
+ }
@@ -1,4 +1,3 @@
1
- import { Vector2 } from 'three';
2
1
  import { NodeBuilder, NodeFrame, TextureNode } from 'three/webgpu';
3
2
  import { FilterNode } from './FilterNode';
4
3
  import { Node } from './node';
@@ -9,7 +8,7 @@ export declare abstract class DualMipmapFilterNode extends FilterNode {
9
8
  private readonly upsampleMaterial;
10
9
  private readonly mesh;
11
10
  private rendererState?;
12
- protected readonly inputTexelSize: import('three/webgpu').UniformNode<Vector2>;
11
+ protected readonly inputTexelSize: import('three/webgpu').UniformNode<import('three').Vector2>;
13
12
  protected readonly downsampleNode: TextureNode;
14
13
  constructor(inputNode: TextureNode | null | undefined, levels: number);
15
14
  setSize(width: number, height: number): this;
@@ -1,7 +1,7 @@
1
- import { ProxiedTuple, ShaderCallNodeInternal, ShaderNodeFn, Struct } from 'three/src/nodes/TSL.js';
2
- import { NodeBuilder, Texture3DNode, TextureNode } from 'three/webgpu';
1
+ import { ProxiedTuple, ShaderCallNodeInternal, ShaderNodeFn } from 'three/src/nodes/TSL.js';
2
+ import { NodeBuilder } from 'three/webgpu';
3
3
  import { Node, NodeType } from './node';
4
- type FnLayoutType = NodeType | Struct | 'texture' | 'texture3D';
4
+ type FnLayoutType = NodeType | (new (...args: any[]) => any) | ((...args: any[]) => any);
5
5
  export interface FnLayoutInput<T extends FnLayoutType = FnLayoutType> {
6
6
  name: string;
7
7
  type: T;
@@ -12,7 +12,7 @@ export interface FnLayout<T extends FnLayoutType, Inputs extends readonly FnLayo
12
12
  type: T;
13
13
  inputs?: Inputs;
14
14
  }
15
- type InferNodeObject<T extends FnLayoutType> = T extends NodeType ? Node<T> : T extends Struct ? ReturnType<T> : T extends 'texture' ? TextureNode : T extends 'texture3D' ? Texture3DNode : never;
15
+ type InferNodeObject<T extends FnLayoutType> = T extends NodeType ? Node<T> : T extends new (...args: any[]) => any ? InstanceType<T> : T extends (...args: any[]) => any ? ReturnType<T> : never;
16
16
  type InferNodeObjects<Inputs extends readonly FnLayoutInput[]> = {
17
17
  [K in keyof Inputs]: Inputs[K] extends FnLayoutInput<infer T> ? InferNodeObject<T> : never;
18
18
  };
@@ -10,7 +10,7 @@ export declare class LensGlareNode extends FilterNode {
10
10
  sizeScale: import('three/webgpu').UniformNode<Vector2>;
11
11
  luminanceThreshold: import('three/webgpu').UniformNode<number>;
12
12
  private computeNode?;
13
- private readonly counterBuffer;
13
+ private readonly indirectBuffer;
14
14
  private instanceBuffer;
15
15
  private readonly renderTarget;
16
16
  private readonly material;
@@ -0,0 +1,9 @@
1
+ import { Texture3DNode, NodeBuilder } from 'three/webgpu';
2
+ export declare class STBNTextureNode extends Texture3DNode {
3
+ url: string;
4
+ constructor();
5
+ customCacheKey(): number;
6
+ setup(builder: NodeBuilder): unknown;
7
+ }
8
+ export declare const stbnTexture: STBNTextureNode;
9
+ export declare const stbn: import('three/src/nodes/TSL.js').ShaderCallNodeInternal;
@@ -14,21 +14,19 @@ export declare class ScreenSpaceShadowNode extends TempNode {
14
14
  shadowContrast: import('three/webgpu').UniformNode<number>;
15
15
  shadowIntensity: import('three/webgpu').UniformNode<number>;
16
16
  bilinearThreshold: import('three/webgpu').UniformNode<number>;
17
- nearDepth: import('three/webgpu').UniformNode<number>;
18
- farDepth: import('three/webgpu').UniformNode<number>;
19
17
  private readonly lightCoordinate;
20
18
  private readonly dispatchOffset;
21
19
  private readonly dispatchIndex;
22
20
  private readonly dispatches;
23
21
  private dispatchCount;
24
- private computeNode?;
22
+ private readonly computeNode;
25
23
  constructor(depthNode: TextureNode, camera: Camera, mainLight: DirectionalLight);
26
24
  customCacheKey(): number;
27
25
  getTextureNode(): TextureNode;
28
26
  setSize(width: number, height: number): this;
29
27
  updateBefore(frame: NodeFrame): void;
30
28
  private updateDispatchList;
31
- private setupCompute;
29
+ private createComputeNode;
32
30
  setup(builder: NodeBuilder): unknown;
33
31
  dispose(): void;
34
32
  }
@@ -1,4 +1,3 @@
1
- import { Vector2 } from 'three';
2
1
  import { NodeBuilder, NodeFrame, TextureNode } from 'three/webgpu';
3
2
  import { FilterNode } from './FilterNode';
4
3
  import { Node } from './node';
@@ -9,8 +8,8 @@ export declare abstract class SeparableFilterNode extends FilterNode {
9
8
  private readonly material;
10
9
  private readonly mesh;
11
10
  private rendererState?;
12
- protected readonly inputTexelSize: import('three/webgpu').UniformNode<Vector2>;
13
- protected readonly direction: import('three/webgpu').UniformNode<Vector2>;
11
+ protected readonly inputTexelSize: import('three/webgpu').UniformNode<import('three').Vector2>;
12
+ protected readonly direction: import('three/webgpu').UniformNode<import('three').Vector2>;
14
13
  constructor(inputNode?: TextureNode | null);
15
14
  setSize(width: number, height: number): this;
16
15
  updateBefore({ renderer }: NodeFrame): void;
@@ -1,4 +1,3 @@
1
- import { Vector2 } from 'three';
2
1
  import { NodeBuilder, NodeFrame, TextureNode } from 'three/webgpu';
3
2
  import { FilterNode } from './FilterNode';
4
3
  import { Node } from './node';
@@ -7,7 +6,7 @@ export declare abstract class SingleFilterNode extends FilterNode {
7
6
  private readonly material;
8
7
  private readonly mesh;
9
8
  private rendererState?;
10
- protected readonly inputTexelSize: import('three/webgpu').UniformNode<Vector2>;
9
+ protected readonly inputTexelSize: import('three/webgpu').UniformNode<import('three').Vector2>;
11
10
  constructor(inputNode?: TextureNode | null);
12
11
  setSize(width: number, height: number): this;
13
12
  updateBefore({ renderer }: NodeFrame): void;
@@ -0,0 +1,9 @@
1
+ import { StorageTextureNode, Node, NodeBuilder } from 'three/webgpu';
2
+ export declare class StorageTexture3DNode extends StorageTextureNode {
3
+ static get type(): string;
4
+ getDefaultUV(): Node;
5
+ setUpdateMatrix(_value: boolean): void;
6
+ generateUV(builder: NodeBuilder, uvNode: Node): string;
7
+ generateOffset(builder: NodeBuilder, offsetNode: Node): string;
8
+ }
9
+ export declare const storageTexture3D: (...args: ConstructorParameters<typeof StorageTexture3DNode>) => StorageTexture3DNode;
@@ -24,7 +24,7 @@ export declare class TemporalAntialiasNode extends TempNode {
24
24
  private readonly resolveMaterial;
25
25
  private readonly mesh;
26
26
  private rendererState?;
27
- private needsSyncPostProcessing;
27
+ private needsSyncRenderPipeline;
28
28
  private needsClearHistory;
29
29
  private readonly resolveNode;
30
30
  private readonly historyNode;
@@ -1,10 +1,11 @@
1
- import { Vector3, Camera } from 'three';
1
+ import { Camera, Vector3 } from 'three';
2
2
  import { UniformNode } from 'three/webgpu';
3
3
  import { Node } from './node';
4
- export declare const projectionMatrix: (camera: Camera) => Node<"mat4">;
5
- export declare const viewMatrix: (camera: Camera) => Node<"mat4">;
6
- export declare const inverseProjectionMatrix: (camera: Camera) => Node<"mat4">;
7
- export declare const inverseViewMatrix: (camera: Camera) => Node<"mat4">;
8
- export declare const cameraPositionWorld: (camera: Camera) => UniformNode<Vector3>;
9
- export declare const cameraNear: (camera: Camera) => Node<"float">;
10
- export declare const cameraFar: (camera: Camera) => Node<"float">;
4
+ export declare const projectionMatrix: (camera?: Camera | null) => Node<"mat4">;
5
+ export declare const viewMatrix: (camera?: Camera | null) => Node<"mat4">;
6
+ export declare const inverseProjectionMatrix: (camera?: Camera | null) => Node<"mat4">;
7
+ export declare const inverseViewMatrix: (camera?: Camera | null) => Node<"mat4">;
8
+ export declare const cameraPositionWorld: (camera?: Camera | null) => UniformNode<Vector3>;
9
+ export declare const cameraNear: (camera?: Camera | null) => Node<"float">;
10
+ export declare const cameraFar: (camera?: Camera | null) => Node<"float">;
11
+ export declare const viewZ: import('three/webgpu').VarNode;
@@ -1,7 +1,8 @@
1
1
  import { NodeMaterial, Node, Renderer } from 'three/webgpu';
2
- export declare function debugFragmentNode(renderer: Renderer, material: NodeMaterial): void;
3
- export declare function debugVertexNode(renderer: Renderer, material: NodeMaterial): void;
4
- export declare function debugNode(renderer: Renderer, node: Node): void;
2
+ export declare function debugMaterial(renderer: Renderer, material: NodeMaterial): Promise<string | null>;
3
+ export declare function debugVertexNode(renderer: Renderer, material: NodeMaterial): Promise<string | null>;
4
+ export declare function debugFragmentNode(renderer: Renderer, material: NodeMaterial): Promise<string | null>;
5
+ export declare function debugNode(renderer: Renderer, node: Node): Promise<string | null>;
5
6
  export declare function hookFunction<T, K extends keyof {
6
7
  [K in keyof T as T[K] extends (...args: any[]) => any ? K : never]: unknown;
7
8
  }, Args extends unknown[] = T[K] extends (...args: any[]) => any ? Parameters<T[K]> : never, Result = T[K] extends (...args: any[]) => any ? ReturnType<T[K]> : never>(target: T, name: K, callback: (...args: Args) => void): T;
@@ -0,0 +1,3 @@
1
+ import { Node, NodeFrame } from 'three/webgpu';
2
+ export declare const OnFrameUpdate: (callback: (frame: NodeFrame) => void) => Node;
3
+ export declare const OnBeforeFrameUpdate: (callback: (frame: NodeFrame) => void) => Node;
@@ -1,6 +1,8 @@
1
1
  export * from './accessors';
2
+ export * from './CascadedShadowMapsNode';
2
3
  export * from './debug';
3
4
  export * from './DownsampleThresholdNode';
5
+ export * from './events';
4
6
  export * from './FnLayout';
5
7
  export * from './FnVar';
6
8
  export * from './GaussianBlurNode';
@@ -16,6 +18,8 @@ export * from './OutputTexture3DNode';
16
18
  export * from './OutputTextureNode';
17
19
  export * from './sampling';
18
20
  export * from './ScreenSpaceShadowNode';
21
+ export * from './STBNTextureNode';
22
+ export * from './StorageTexture3DNode';
19
23
  export * from './TemporalAntialiasNode';
20
24
  export * from './transformations';
21
25
  export * from './utils';
@@ -1,3 +1,6 @@
1
+ export declare const bvecNot: (...params: import('three/webgpu').Node[]) => import('three/webgpu').FunctionOverloadingNode;
2
+ export declare const bvecAnd: (...params: import('three/webgpu').Node[]) => import('three/webgpu').FunctionOverloadingNode;
3
+ export declare const bvecOr: (...params: import('three/webgpu').Node[]) => import('three/webgpu').FunctionOverloadingNode;
1
4
  export declare const raySphereIntersection: import('three/src/nodes/TSL.js').ShaderNodeFn<[rayOrigin: number | import('three/webgpu').Node, rayDirection: number | import('three/webgpu').Node, center: number | import('three/webgpu').Node, radius: number | import('three/webgpu').Node]>;
2
5
  export declare const raySpheresIntersectionsStruct: import('three/src/nodes/TSL.js').Struct;
3
6
  export declare const raySpheresIntersections: import('three/src/nodes/TSL.js').ShaderNodeFn<[rayOrigin: number | import('three/webgpu').Node, rayDirection: number | import('three/webgpu').Node, center: number | import('three/webgpu').Node, radii: number | import('three/webgpu').Node]>;
@@ -1 +1,2 @@
1
- export declare const textureCatmullRom: import('three/src/nodes/TSL.js').ShaderNodeFn<[textureNode: number | import('three/webgpu').Node, uv: number | import('three/webgpu').Node]>;
1
+ export declare const textureGather: import('three/src/nodes/TSL.js').ShaderNodeFn<[textureNode: number | import('three/webgpu').Node, uvNode: number | import('three/webgpu').Node, component?: unknown]>;
2
+ export declare const textureCatmullRom: import('three/src/nodes/TSL.js').ShaderNodeFn<[textureNode: number | import('three/webgpu').Node, uvNode?: number | import('three/webgpu').Node | undefined]>;
@@ -1,12 +1,9 @@
1
+ import { Camera } from 'three';
1
2
  import { Node } from './node';
2
- export interface DepthOptions {
3
- perspective?: boolean;
4
- logarithmic?: boolean;
5
- }
6
- export declare const depthToViewZ: (depth: Node<"float">, near: Node<"float">, far: Node<"float">, { perspective, logarithmic }?: DepthOptions) => Node<"float">;
7
- export declare const logarithmicToPerspectiveDepth: (depth: Node<"float">, near: Node<"float">, far: Node<"float">) => Node<"float">;
8
- export declare const perspectiveToLogarithmicDepth: (depth: Node<"float">, near: Node<"float">, far: Node<"float">) => Node<"float">;
3
+ export declare const depthToViewZ: import('three/src/nodes/TSL.js').ShaderNodeFn<[depth: number | import('three/webgpu').Node, camera?: Camera | null | undefined, near?: number | import('three/webgpu').Node | null | undefined, far?: number | import('three/webgpu').Node | null | undefined]>;
4
+ export declare const logarithmicToPerspectiveDepth: (depth: Node<"float">, near?: Node<"float"> | null, far?: Node<"float"> | null) => Node<"float">;
5
+ export declare const perspectiveToLogarithmicDepth: (depth: Node<"float">, near?: Node<"float"> | null, far?: Node<"float"> | null) => Node<"float">;
9
6
  export declare const screenToPositionView: (uv: Node<"vec2">, depth: Node<"float">, viewZ: Node<"float">, projectionMatrix: Node<"mat4">, inverseProjectionMatrix: Node<"mat4">) => Node<"vec3">;
10
- export declare const turbo: (x: Node<"float">) => Node<"vec3">;
11
- export declare const depthToColor: (depth: Node<"float">, near: Node<"float">, far: Node<"float">, options?: DepthOptions) => Node<"vec3">;
12
- export declare const equirectToDirectionWorld: (uv: Node<"vec2">) => Node<"vec3">;
7
+ export declare const turbo: import('three/src/nodes/TSL.js').ShaderNodeFn<[number | import('three/webgpu').Node]>;
8
+ export declare const depthToColor: import('three/src/nodes/TSL.js').ShaderNodeFn<[depth: number | import('three/webgpu').Node, camera?: Camera | undefined, near?: number | import('three/webgpu').Node | undefined, far?: number | import('three/webgpu').Node | undefined]>;
9
+ export declare const equirectToDirectionWorld: import('three/src/nodes/TSL.js').ShaderNodeFn<[number | import('three/webgpu').Node]>;