@hello-terrain/three 0.0.0-alpha.6 → 0.0.0-alpha.8
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/dist/index.cjs +461 -108
- package/dist/index.d.cts +71 -32
- package/dist/index.d.mts +71 -32
- package/dist/index.d.ts +71 -32
- package/dist/index.mjs +449 -110
- package/package.json +4 -4
package/dist/index.d.cts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BufferGeometry } from 'three';
|
|
2
2
|
import * as three_webgpu from 'three/webgpu';
|
|
3
|
-
import { InstancedMesh, NodeMaterial, Node, WebGPURenderer, StorageBufferAttribute, StorageBufferNode, UniformNode, Vector3, Vector3Like, ConstNode } from 'three/webgpu';
|
|
3
|
+
import { InstancedMesh, NodeMaterial, Node, WebGPURenderer, StorageArrayTexture, StorageTexture, StorageBufferAttribute, StorageBufferNode, UniformNode, Vector3, Vector3Like, ConstNode } from 'three/webgpu';
|
|
4
4
|
import * as three_src_nodes_TSL_js from 'three/src/nodes/TSL.js';
|
|
5
5
|
import { ShaderCallNodeInternal } from 'three/src/nodes/TSL.js';
|
|
6
6
|
import * as _hello_terrain_work from '@hello-terrain/work';
|
|
7
|
-
import { TaskRef } from '@hello-terrain/work';
|
|
7
|
+
import { TaskRef, Graph } from '@hello-terrain/work';
|
|
8
8
|
import Node$1 from 'three/src/nodes/core/Node.js';
|
|
9
9
|
import * as three_tsl from 'three/tsl';
|
|
10
10
|
|
|
@@ -114,7 +114,7 @@ declare class TerrainMesh extends InstancedMesh {
|
|
|
114
114
|
type ComputeStageCallback = (nodeIndex: Node, globalVertexIndex: Node, uv: Node, localCoordinates: Node, texelSize: Node) => void;
|
|
115
115
|
type ComputePipeline = ComputeStageCallback[];
|
|
116
116
|
|
|
117
|
-
/** Default compile task — uses
|
|
117
|
+
/** Default compile task — uses terrainFieldStageTask as the leaf. */
|
|
118
118
|
declare const compileComputeTask: _hello_terrain_work.Task<{
|
|
119
119
|
execute: (renderer: WebGPURenderer, instanceCount: number) => void;
|
|
120
120
|
}, string, unknown>;
|
|
@@ -390,6 +390,45 @@ type CubeSphereSurfaceConfig = {
|
|
|
390
390
|
*/
|
|
391
391
|
declare function createCubeSphereSurface(_cfg: CubeSphereSurfaceConfig): Surface;
|
|
392
392
|
|
|
393
|
+
type TerrainFieldStorageBackendType = "array-texture" | "atlas" | "texture-3d";
|
|
394
|
+
type TerrainFieldStorageFormat = "rgba16float" | "rgba32float";
|
|
395
|
+
type TerrainFieldStorageOptions = {
|
|
396
|
+
backend?: TerrainFieldStorageBackendType;
|
|
397
|
+
filter?: "nearest" | "linear";
|
|
398
|
+
format?: TerrainFieldStorageFormat;
|
|
399
|
+
};
|
|
400
|
+
interface TerrainFieldStorage {
|
|
401
|
+
readonly backendType: TerrainFieldStorageBackendType;
|
|
402
|
+
readonly edgeVertexCount: number;
|
|
403
|
+
readonly tileCount: number;
|
|
404
|
+
readonly texture: StorageArrayTexture | StorageTexture;
|
|
405
|
+
uv(ix: Node, iy: Node, tileIndex: Node): Node;
|
|
406
|
+
texel(ix: Node, iy: Node, tileIndex: Node): Node;
|
|
407
|
+
/** UV-based filtered sample. `u, v` in [0, 1] tile-local space. */
|
|
408
|
+
sample(u: Node, v: Node, tileIndex: Node): Node;
|
|
409
|
+
resize(width: number, height: number, tileCount: number): void;
|
|
410
|
+
}
|
|
411
|
+
declare function ArrayTextureBackend(edgeVertexCount: number, tileCount: number, options: Required<Pick<TerrainFieldStorageOptions, "format" | "filter">>): TerrainFieldStorage;
|
|
412
|
+
declare function AtlasBackend(edgeVertexCount: number, tileCount: number, options: Required<Pick<TerrainFieldStorageOptions, "format" | "filter">>): TerrainFieldStorage;
|
|
413
|
+
/**
|
|
414
|
+
* Placeholder backend for future true 3D storage-texture support in Three.js.
|
|
415
|
+
* We keep it present to preserve the backend API shape.
|
|
416
|
+
*/
|
|
417
|
+
declare function Texture3DBackend(edgeVertexCount: number, tileCount: number, options: Required<Pick<TerrainFieldStorageOptions, "format" | "filter">>): TerrainFieldStorage;
|
|
418
|
+
declare function createTerrainFieldStorage(edgeVertexCount: number, tileCount: number, renderer?: WebGPURenderer, options?: TerrainFieldStorageOptions): TerrainFieldStorage;
|
|
419
|
+
declare function storeTerrainField(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node, value: Node): Node;
|
|
420
|
+
declare function loadTerrainField(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node): Node;
|
|
421
|
+
declare function loadTerrainFieldElevation(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node): Node;
|
|
422
|
+
declare function loadTerrainFieldNormal(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node): Node;
|
|
423
|
+
/**
|
|
424
|
+
* UV-based filtered sample. `u, v` are in [0, 1] tile-local space.
|
|
425
|
+
* Respects the filter mode (nearest / linear) set on the storage.
|
|
426
|
+
*/
|
|
427
|
+
declare function sampleTerrainField(storage: TerrainFieldStorage, u: Node, v: Node, tileIndex: Node): Node;
|
|
428
|
+
declare function sampleTerrainFieldElevation(storage: TerrainFieldStorage, u: Node, v: Node, tileIndex: Node): Node;
|
|
429
|
+
declare function sampleTerrainFieldNormal(storage: TerrainFieldStorage, u: Node, v: Node, tileIndex: Node): Node;
|
|
430
|
+
declare function packTerrainFieldSample(height: Node, normalXZ: Node, extra?: Node): Node;
|
|
431
|
+
|
|
393
432
|
interface TerrainUniformsParams {
|
|
394
433
|
rootSize: number;
|
|
395
434
|
rootOrigin: Vector3Like;
|
|
@@ -431,11 +470,6 @@ interface ElevationFieldContext {
|
|
|
431
470
|
attribute: StorageBufferAttribute;
|
|
432
471
|
node: StorageBufferNode;
|
|
433
472
|
}
|
|
434
|
-
interface NormalFieldContext {
|
|
435
|
-
data: Uint32Array<ArrayBuffer>;
|
|
436
|
-
attribute: StorageBufferAttribute;
|
|
437
|
-
node: StorageBufferNode;
|
|
438
|
-
}
|
|
439
473
|
/** Task refs for the standard terrain pipeline. */
|
|
440
474
|
interface TerrainTasks {
|
|
441
475
|
instanceId: TaskRef<string>;
|
|
@@ -449,14 +483,17 @@ interface TerrainTasks {
|
|
|
449
483
|
positionNode: TaskRef<ShaderCallNodeInternal>;
|
|
450
484
|
createElevationFieldContext: TaskRef<ElevationFieldContext>;
|
|
451
485
|
createTileNodes: TaskRef<ReturnType<typeof createTileCompute>>;
|
|
452
|
-
|
|
486
|
+
createTerrainFieldTexture: TaskRef<TerrainFieldStorage>;
|
|
453
487
|
elevationFieldStage: TaskRef<ComputePipeline>;
|
|
454
|
-
|
|
488
|
+
terrainFieldStage: TaskRef<ComputePipeline>;
|
|
455
489
|
compileCompute: TaskRef<{
|
|
456
490
|
execute: (renderer: WebGPURenderer, instanceCount: number) => void;
|
|
457
491
|
}>;
|
|
458
492
|
executeCompute: TaskRef<void | (() => void)>;
|
|
459
493
|
}
|
|
494
|
+
type TerrainGraph = Graph<string, {
|
|
495
|
+
renderer: WebGPURenderer;
|
|
496
|
+
}>;
|
|
460
497
|
|
|
461
498
|
declare const createElevationFieldContextTask: _hello_terrain_work.Task<{
|
|
462
499
|
data: Float32Array<ArrayBuffer>;
|
|
@@ -479,11 +516,9 @@ declare const elevationFieldStageTask: _hello_terrain_work.Task<ComputePipeline,
|
|
|
479
516
|
/** Generates a unique instance ID per graph (cached once). */
|
|
480
517
|
declare const instanceIdTask: _hello_terrain_work.Task<`${string}-${string}-${string}-${string}-${string}`, string, unknown>;
|
|
481
518
|
|
|
482
|
-
declare const
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
node: three_webgpu.StorageBufferNode;
|
|
486
|
-
}, string, unknown>;
|
|
519
|
+
declare const createTerrainFieldTextureTask: _hello_terrain_work.Task<any, string, {
|
|
520
|
+
renderer: WebGPURenderer;
|
|
521
|
+
}>;
|
|
487
522
|
/**
|
|
488
523
|
* Normal field compute stage — reads height neighbors from the elevation field
|
|
489
524
|
* buffer, computes surface normals via central differences, packs XZ
|
|
@@ -492,7 +527,7 @@ declare const createNormalFieldContextTask: _hello_terrain_work.Task<{
|
|
|
492
527
|
*
|
|
493
528
|
* Accumulates the upstream elevation pipeline via `get(elevationFieldStageTask)`.
|
|
494
529
|
*/
|
|
495
|
-
declare const
|
|
530
|
+
declare const terrainFieldStageTask: _hello_terrain_work.Task<ComputePipeline, string, unknown>;
|
|
496
531
|
|
|
497
532
|
interface ElevationParams {
|
|
498
533
|
worldPosition: Node$1;
|
|
@@ -516,7 +551,7 @@ declare const origin: _hello_terrain_work.ParamRef<{
|
|
|
516
551
|
}>;
|
|
517
552
|
/**
|
|
518
553
|
* Number of segments per inner tile edge.
|
|
519
|
-
*
|
|
554
|
+
* Effective edge vertex count is `innerTileSegments + 3`.
|
|
520
555
|
*/
|
|
521
556
|
declare const innerTileSegments: _hello_terrain_work.ParamRef<number>;
|
|
522
557
|
/** Skirt scale factor. */
|
|
@@ -531,6 +566,8 @@ declare const maxLevel: _hello_terrain_work.ParamRef<number>;
|
|
|
531
566
|
declare const quadtreeUpdate: _hello_terrain_work.ParamRef<UpdateParams>;
|
|
532
567
|
/** Optional custom terrain surface; defaults to bounded flat surface when null. */
|
|
533
568
|
declare const surface: _hello_terrain_work.ParamRef<Surface | null>;
|
|
569
|
+
/** Terrain field texture filter mode. */
|
|
570
|
+
declare const terrainFieldFilter: _hello_terrain_work.ParamRef<"nearest" | "linear">;
|
|
534
571
|
/** Terrain elevation control function (per vertex, in gpu compute) */
|
|
535
572
|
declare const elevationFn: _hello_terrain_work.ParamRef<ElevationCallback>;
|
|
536
573
|
|
|
@@ -538,11 +575,10 @@ declare const elevationFn: _hello_terrain_work.ParamRef<ElevationCallback>;
|
|
|
538
575
|
* Builds the TSL position node for the terrain shader.
|
|
539
576
|
*
|
|
540
577
|
* Depends on leafStorageTask (buffer objects), createUniformsTask
|
|
541
|
-
* (uniform nodes),
|
|
542
|
-
* and createNormalFieldContextTask (normal field storage).
|
|
578
|
+
* (uniform nodes), and createTerrainFieldTextureTask (combined terrain field storage).
|
|
543
579
|
*
|
|
544
|
-
* The position node
|
|
545
|
-
* per-vertex
|
|
580
|
+
* The position node reads packed terrain samples (height + normal.xz)
|
|
581
|
+
* per-vertex and assigns them to the vNormal
|
|
546
582
|
* varying for use in the fragment shader.
|
|
547
583
|
*
|
|
548
584
|
* These only change when their GPU resources are recreated
|
|
@@ -591,9 +627,7 @@ declare const createUniformsTask: _hello_terrain_work.Task<TerrainUniformsContex
|
|
|
591
627
|
*/
|
|
592
628
|
declare const updateUniformsTask: _hello_terrain_work.Task<TerrainUniformsContext, string, unknown>;
|
|
593
629
|
|
|
594
|
-
declare function terrainGraph():
|
|
595
|
-
renderer: WebGPURenderer;
|
|
596
|
-
}>;
|
|
630
|
+
declare function terrainGraph(): TerrainGraph;
|
|
597
631
|
/** All terrain task refs for direct access. */
|
|
598
632
|
declare const terrainTasks: {
|
|
599
633
|
readonly instanceId: _hello_terrain_work.Task<`${string}-${string}-${string}-${string}-${string}`, string, unknown>;
|
|
@@ -625,13 +659,11 @@ declare const terrainTasks: {
|
|
|
625
659
|
rootUVCompute: three_src_nodes_TSL_js.ShaderNodeFn<[number | three_webgpu.Node, number | three_webgpu.Node, number | three_webgpu.Node]>;
|
|
626
660
|
tileVertexWorldPositionCompute: three_src_nodes_TSL_js.ShaderNodeFn<[number | three_webgpu.Node, number | three_webgpu.Node, number | three_webgpu.Node]>;
|
|
627
661
|
}, string, unknown>;
|
|
628
|
-
readonly
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
node: three_webgpu.StorageBufferNode;
|
|
632
|
-
}, string, unknown>;
|
|
662
|
+
readonly createTerrainFieldTexture: _hello_terrain_work.Task<any, string, {
|
|
663
|
+
renderer: WebGPURenderer;
|
|
664
|
+
}>;
|
|
633
665
|
readonly elevationFieldStage: _hello_terrain_work.Task<ComputePipeline, string, unknown>;
|
|
634
|
-
readonly
|
|
666
|
+
readonly terrainFieldStage: _hello_terrain_work.Task<ComputePipeline, string, unknown>;
|
|
635
667
|
readonly compileCompute: _hello_terrain_work.Task<{
|
|
636
668
|
execute: (renderer: WebGPURenderer, instanceCount: number) => void;
|
|
637
669
|
}, string, unknown>;
|
|
@@ -640,6 +672,13 @@ declare const terrainTasks: {
|
|
|
640
672
|
}>;
|
|
641
673
|
};
|
|
642
674
|
|
|
675
|
+
type ComputeDeviceLimits = {
|
|
676
|
+
maxWorkgroupSizeX: number;
|
|
677
|
+
maxWorkgroupSizeY: number;
|
|
678
|
+
maxWorkgroupInvocations: number;
|
|
679
|
+
};
|
|
680
|
+
declare function getDeviceComputeLimits(renderer: WebGPURenderer): ComputeDeviceLimits;
|
|
681
|
+
|
|
643
682
|
/**
|
|
644
683
|
* Maps a value or node from texture space [0, 1] to vector space [-1, 1].
|
|
645
684
|
*
|
|
@@ -712,5 +751,5 @@ declare const voronoiCells: three_src_nodes_TSL_js.ShaderNodeFn<[three_tsl.Proxi
|
|
|
712
751
|
uv: Node;
|
|
713
752
|
}>]>;
|
|
714
753
|
|
|
715
|
-
export { Dir, TerrainGeometry, TerrainMesh, U32_EMPTY, allocLeafSet, allocSeamTable, beginUpdate, blendAngleCorrectedNormals, buildLeafIndex, buildSeams2to1, compileComputeTask, createComputePipelineTasks, createCubeSphereSurface, createElevationFieldContextTask, createFlatSurface, createInfiniteFlatSurface,
|
|
716
|
-
export type { ComputePipeline, ComputeStageCallback, CubeSphereSurfaceConfig, ElevationCallback, ElevationFieldContext, ElevationParams, FlatSurfaceConfig, InfiniteFlatSurfaceConfig, IntNodeInput, LeafGpuBufferState, LeafSet, LeafStorageState, LodMode,
|
|
754
|
+
export { ArrayTextureBackend, AtlasBackend, Dir, TerrainGeometry, TerrainMesh, Texture3DBackend, U32_EMPTY, allocLeafSet, allocSeamTable, beginUpdate, blendAngleCorrectedNormals, buildLeafIndex, buildSeams2to1, compileComputeTask, createComputePipelineTasks, createCubeSphereSurface, createElevationFieldContextTask, createFlatSurface, createInfiniteFlatSurface, createSpatialIndex, createState, createTerrainFieldStorage, createTerrainFieldTextureTask, createTerrainUniforms, createUniformsTask, deriveNormalZ, elevationFieldStageTask, elevationFn, elevationScale, executeComputeTask, getDeviceComputeLimits, innerTileSegments, instanceIdTask, isSkirtUV, isSkirtVertex, leafGpuBufferTask, leafStorageTask, loadTerrainField, loadTerrainFieldElevation, loadTerrainFieldNormal, maxLevel, maxNodes, origin, packTerrainFieldSample, positionNodeTask, quadtreeConfigTask, quadtreeUpdate, quadtreeUpdateTask, resetLeafSet, resetSeamTable, rootSize, sampleTerrainField, sampleTerrainFieldElevation, sampleTerrainFieldNormal, skirtScale, storeTerrainField, surface, surfaceTask, terrainFieldFilter, terrainFieldStageTask, terrainGraph, terrainTasks, textureSpaceToVectorSpace, tileNodesTask, update, updateUniformsTask, vElevation, vGlobalVertexIndex, vectorSpaceToTextureSpace, voronoiCells };
|
|
755
|
+
export type { ComputePipeline, ComputeStageCallback, CubeSphereSurfaceConfig, ElevationCallback, ElevationFieldContext, ElevationParams, FlatSurfaceConfig, InfiniteFlatSurfaceConfig, IntNodeInput, LeafGpuBufferState, LeafSet, LeafStorageState, LodMode, QuadtreeConfig, QuadtreeConfigState, QuadtreeState, SeamTable, SpatialIndex, Surface, TerrainFieldStorage, TerrainFieldStorageBackendType, TerrainFieldStorageFormat, TerrainFieldStorageOptions, TerrainGraph, TerrainTasks, TerrainUniformsContext, TerrainUniformsParams, TileBounds, TileId, UpdateParams };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BufferGeometry } from 'three';
|
|
2
2
|
import * as three_webgpu from 'three/webgpu';
|
|
3
|
-
import { InstancedMesh, NodeMaterial, Node, WebGPURenderer, StorageBufferAttribute, StorageBufferNode, UniformNode, Vector3, Vector3Like, ConstNode } from 'three/webgpu';
|
|
3
|
+
import { InstancedMesh, NodeMaterial, Node, WebGPURenderer, StorageArrayTexture, StorageTexture, StorageBufferAttribute, StorageBufferNode, UniformNode, Vector3, Vector3Like, ConstNode } from 'three/webgpu';
|
|
4
4
|
import * as three_src_nodes_TSL_js from 'three/src/nodes/TSL.js';
|
|
5
5
|
import { ShaderCallNodeInternal } from 'three/src/nodes/TSL.js';
|
|
6
6
|
import * as _hello_terrain_work from '@hello-terrain/work';
|
|
7
|
-
import { TaskRef } from '@hello-terrain/work';
|
|
7
|
+
import { TaskRef, Graph } from '@hello-terrain/work';
|
|
8
8
|
import Node$1 from 'three/src/nodes/core/Node.js';
|
|
9
9
|
import * as three_tsl from 'three/tsl';
|
|
10
10
|
|
|
@@ -114,7 +114,7 @@ declare class TerrainMesh extends InstancedMesh {
|
|
|
114
114
|
type ComputeStageCallback = (nodeIndex: Node, globalVertexIndex: Node, uv: Node, localCoordinates: Node, texelSize: Node) => void;
|
|
115
115
|
type ComputePipeline = ComputeStageCallback[];
|
|
116
116
|
|
|
117
|
-
/** Default compile task — uses
|
|
117
|
+
/** Default compile task — uses terrainFieldStageTask as the leaf. */
|
|
118
118
|
declare const compileComputeTask: _hello_terrain_work.Task<{
|
|
119
119
|
execute: (renderer: WebGPURenderer, instanceCount: number) => void;
|
|
120
120
|
}, string, unknown>;
|
|
@@ -390,6 +390,45 @@ type CubeSphereSurfaceConfig = {
|
|
|
390
390
|
*/
|
|
391
391
|
declare function createCubeSphereSurface(_cfg: CubeSphereSurfaceConfig): Surface;
|
|
392
392
|
|
|
393
|
+
type TerrainFieldStorageBackendType = "array-texture" | "atlas" | "texture-3d";
|
|
394
|
+
type TerrainFieldStorageFormat = "rgba16float" | "rgba32float";
|
|
395
|
+
type TerrainFieldStorageOptions = {
|
|
396
|
+
backend?: TerrainFieldStorageBackendType;
|
|
397
|
+
filter?: "nearest" | "linear";
|
|
398
|
+
format?: TerrainFieldStorageFormat;
|
|
399
|
+
};
|
|
400
|
+
interface TerrainFieldStorage {
|
|
401
|
+
readonly backendType: TerrainFieldStorageBackendType;
|
|
402
|
+
readonly edgeVertexCount: number;
|
|
403
|
+
readonly tileCount: number;
|
|
404
|
+
readonly texture: StorageArrayTexture | StorageTexture;
|
|
405
|
+
uv(ix: Node, iy: Node, tileIndex: Node): Node;
|
|
406
|
+
texel(ix: Node, iy: Node, tileIndex: Node): Node;
|
|
407
|
+
/** UV-based filtered sample. `u, v` in [0, 1] tile-local space. */
|
|
408
|
+
sample(u: Node, v: Node, tileIndex: Node): Node;
|
|
409
|
+
resize(width: number, height: number, tileCount: number): void;
|
|
410
|
+
}
|
|
411
|
+
declare function ArrayTextureBackend(edgeVertexCount: number, tileCount: number, options: Required<Pick<TerrainFieldStorageOptions, "format" | "filter">>): TerrainFieldStorage;
|
|
412
|
+
declare function AtlasBackend(edgeVertexCount: number, tileCount: number, options: Required<Pick<TerrainFieldStorageOptions, "format" | "filter">>): TerrainFieldStorage;
|
|
413
|
+
/**
|
|
414
|
+
* Placeholder backend for future true 3D storage-texture support in Three.js.
|
|
415
|
+
* We keep it present to preserve the backend API shape.
|
|
416
|
+
*/
|
|
417
|
+
declare function Texture3DBackend(edgeVertexCount: number, tileCount: number, options: Required<Pick<TerrainFieldStorageOptions, "format" | "filter">>): TerrainFieldStorage;
|
|
418
|
+
declare function createTerrainFieldStorage(edgeVertexCount: number, tileCount: number, renderer?: WebGPURenderer, options?: TerrainFieldStorageOptions): TerrainFieldStorage;
|
|
419
|
+
declare function storeTerrainField(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node, value: Node): Node;
|
|
420
|
+
declare function loadTerrainField(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node): Node;
|
|
421
|
+
declare function loadTerrainFieldElevation(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node): Node;
|
|
422
|
+
declare function loadTerrainFieldNormal(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node): Node;
|
|
423
|
+
/**
|
|
424
|
+
* UV-based filtered sample. `u, v` are in [0, 1] tile-local space.
|
|
425
|
+
* Respects the filter mode (nearest / linear) set on the storage.
|
|
426
|
+
*/
|
|
427
|
+
declare function sampleTerrainField(storage: TerrainFieldStorage, u: Node, v: Node, tileIndex: Node): Node;
|
|
428
|
+
declare function sampleTerrainFieldElevation(storage: TerrainFieldStorage, u: Node, v: Node, tileIndex: Node): Node;
|
|
429
|
+
declare function sampleTerrainFieldNormal(storage: TerrainFieldStorage, u: Node, v: Node, tileIndex: Node): Node;
|
|
430
|
+
declare function packTerrainFieldSample(height: Node, normalXZ: Node, extra?: Node): Node;
|
|
431
|
+
|
|
393
432
|
interface TerrainUniformsParams {
|
|
394
433
|
rootSize: number;
|
|
395
434
|
rootOrigin: Vector3Like;
|
|
@@ -431,11 +470,6 @@ interface ElevationFieldContext {
|
|
|
431
470
|
attribute: StorageBufferAttribute;
|
|
432
471
|
node: StorageBufferNode;
|
|
433
472
|
}
|
|
434
|
-
interface NormalFieldContext {
|
|
435
|
-
data: Uint32Array<ArrayBuffer>;
|
|
436
|
-
attribute: StorageBufferAttribute;
|
|
437
|
-
node: StorageBufferNode;
|
|
438
|
-
}
|
|
439
473
|
/** Task refs for the standard terrain pipeline. */
|
|
440
474
|
interface TerrainTasks {
|
|
441
475
|
instanceId: TaskRef<string>;
|
|
@@ -449,14 +483,17 @@ interface TerrainTasks {
|
|
|
449
483
|
positionNode: TaskRef<ShaderCallNodeInternal>;
|
|
450
484
|
createElevationFieldContext: TaskRef<ElevationFieldContext>;
|
|
451
485
|
createTileNodes: TaskRef<ReturnType<typeof createTileCompute>>;
|
|
452
|
-
|
|
486
|
+
createTerrainFieldTexture: TaskRef<TerrainFieldStorage>;
|
|
453
487
|
elevationFieldStage: TaskRef<ComputePipeline>;
|
|
454
|
-
|
|
488
|
+
terrainFieldStage: TaskRef<ComputePipeline>;
|
|
455
489
|
compileCompute: TaskRef<{
|
|
456
490
|
execute: (renderer: WebGPURenderer, instanceCount: number) => void;
|
|
457
491
|
}>;
|
|
458
492
|
executeCompute: TaskRef<void | (() => void)>;
|
|
459
493
|
}
|
|
494
|
+
type TerrainGraph = Graph<string, {
|
|
495
|
+
renderer: WebGPURenderer;
|
|
496
|
+
}>;
|
|
460
497
|
|
|
461
498
|
declare const createElevationFieldContextTask: _hello_terrain_work.Task<{
|
|
462
499
|
data: Float32Array<ArrayBuffer>;
|
|
@@ -479,11 +516,9 @@ declare const elevationFieldStageTask: _hello_terrain_work.Task<ComputePipeline,
|
|
|
479
516
|
/** Generates a unique instance ID per graph (cached once). */
|
|
480
517
|
declare const instanceIdTask: _hello_terrain_work.Task<`${string}-${string}-${string}-${string}-${string}`, string, unknown>;
|
|
481
518
|
|
|
482
|
-
declare const
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
node: three_webgpu.StorageBufferNode;
|
|
486
|
-
}, string, unknown>;
|
|
519
|
+
declare const createTerrainFieldTextureTask: _hello_terrain_work.Task<any, string, {
|
|
520
|
+
renderer: WebGPURenderer;
|
|
521
|
+
}>;
|
|
487
522
|
/**
|
|
488
523
|
* Normal field compute stage — reads height neighbors from the elevation field
|
|
489
524
|
* buffer, computes surface normals via central differences, packs XZ
|
|
@@ -492,7 +527,7 @@ declare const createNormalFieldContextTask: _hello_terrain_work.Task<{
|
|
|
492
527
|
*
|
|
493
528
|
* Accumulates the upstream elevation pipeline via `get(elevationFieldStageTask)`.
|
|
494
529
|
*/
|
|
495
|
-
declare const
|
|
530
|
+
declare const terrainFieldStageTask: _hello_terrain_work.Task<ComputePipeline, string, unknown>;
|
|
496
531
|
|
|
497
532
|
interface ElevationParams {
|
|
498
533
|
worldPosition: Node$1;
|
|
@@ -516,7 +551,7 @@ declare const origin: _hello_terrain_work.ParamRef<{
|
|
|
516
551
|
}>;
|
|
517
552
|
/**
|
|
518
553
|
* Number of segments per inner tile edge.
|
|
519
|
-
*
|
|
554
|
+
* Effective edge vertex count is `innerTileSegments + 3`.
|
|
520
555
|
*/
|
|
521
556
|
declare const innerTileSegments: _hello_terrain_work.ParamRef<number>;
|
|
522
557
|
/** Skirt scale factor. */
|
|
@@ -531,6 +566,8 @@ declare const maxLevel: _hello_terrain_work.ParamRef<number>;
|
|
|
531
566
|
declare const quadtreeUpdate: _hello_terrain_work.ParamRef<UpdateParams>;
|
|
532
567
|
/** Optional custom terrain surface; defaults to bounded flat surface when null. */
|
|
533
568
|
declare const surface: _hello_terrain_work.ParamRef<Surface | null>;
|
|
569
|
+
/** Terrain field texture filter mode. */
|
|
570
|
+
declare const terrainFieldFilter: _hello_terrain_work.ParamRef<"nearest" | "linear">;
|
|
534
571
|
/** Terrain elevation control function (per vertex, in gpu compute) */
|
|
535
572
|
declare const elevationFn: _hello_terrain_work.ParamRef<ElevationCallback>;
|
|
536
573
|
|
|
@@ -538,11 +575,10 @@ declare const elevationFn: _hello_terrain_work.ParamRef<ElevationCallback>;
|
|
|
538
575
|
* Builds the TSL position node for the terrain shader.
|
|
539
576
|
*
|
|
540
577
|
* Depends on leafStorageTask (buffer objects), createUniformsTask
|
|
541
|
-
* (uniform nodes),
|
|
542
|
-
* and createNormalFieldContextTask (normal field storage).
|
|
578
|
+
* (uniform nodes), and createTerrainFieldTextureTask (combined terrain field storage).
|
|
543
579
|
*
|
|
544
|
-
* The position node
|
|
545
|
-
* per-vertex
|
|
580
|
+
* The position node reads packed terrain samples (height + normal.xz)
|
|
581
|
+
* per-vertex and assigns them to the vNormal
|
|
546
582
|
* varying for use in the fragment shader.
|
|
547
583
|
*
|
|
548
584
|
* These only change when their GPU resources are recreated
|
|
@@ -591,9 +627,7 @@ declare const createUniformsTask: _hello_terrain_work.Task<TerrainUniformsContex
|
|
|
591
627
|
*/
|
|
592
628
|
declare const updateUniformsTask: _hello_terrain_work.Task<TerrainUniformsContext, string, unknown>;
|
|
593
629
|
|
|
594
|
-
declare function terrainGraph():
|
|
595
|
-
renderer: WebGPURenderer;
|
|
596
|
-
}>;
|
|
630
|
+
declare function terrainGraph(): TerrainGraph;
|
|
597
631
|
/** All terrain task refs for direct access. */
|
|
598
632
|
declare const terrainTasks: {
|
|
599
633
|
readonly instanceId: _hello_terrain_work.Task<`${string}-${string}-${string}-${string}-${string}`, string, unknown>;
|
|
@@ -625,13 +659,11 @@ declare const terrainTasks: {
|
|
|
625
659
|
rootUVCompute: three_src_nodes_TSL_js.ShaderNodeFn<[number | three_webgpu.Node, number | three_webgpu.Node, number | three_webgpu.Node]>;
|
|
626
660
|
tileVertexWorldPositionCompute: three_src_nodes_TSL_js.ShaderNodeFn<[number | three_webgpu.Node, number | three_webgpu.Node, number | three_webgpu.Node]>;
|
|
627
661
|
}, string, unknown>;
|
|
628
|
-
readonly
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
node: three_webgpu.StorageBufferNode;
|
|
632
|
-
}, string, unknown>;
|
|
662
|
+
readonly createTerrainFieldTexture: _hello_terrain_work.Task<any, string, {
|
|
663
|
+
renderer: WebGPURenderer;
|
|
664
|
+
}>;
|
|
633
665
|
readonly elevationFieldStage: _hello_terrain_work.Task<ComputePipeline, string, unknown>;
|
|
634
|
-
readonly
|
|
666
|
+
readonly terrainFieldStage: _hello_terrain_work.Task<ComputePipeline, string, unknown>;
|
|
635
667
|
readonly compileCompute: _hello_terrain_work.Task<{
|
|
636
668
|
execute: (renderer: WebGPURenderer, instanceCount: number) => void;
|
|
637
669
|
}, string, unknown>;
|
|
@@ -640,6 +672,13 @@ declare const terrainTasks: {
|
|
|
640
672
|
}>;
|
|
641
673
|
};
|
|
642
674
|
|
|
675
|
+
type ComputeDeviceLimits = {
|
|
676
|
+
maxWorkgroupSizeX: number;
|
|
677
|
+
maxWorkgroupSizeY: number;
|
|
678
|
+
maxWorkgroupInvocations: number;
|
|
679
|
+
};
|
|
680
|
+
declare function getDeviceComputeLimits(renderer: WebGPURenderer): ComputeDeviceLimits;
|
|
681
|
+
|
|
643
682
|
/**
|
|
644
683
|
* Maps a value or node from texture space [0, 1] to vector space [-1, 1].
|
|
645
684
|
*
|
|
@@ -712,5 +751,5 @@ declare const voronoiCells: three_src_nodes_TSL_js.ShaderNodeFn<[three_tsl.Proxi
|
|
|
712
751
|
uv: Node;
|
|
713
752
|
}>]>;
|
|
714
753
|
|
|
715
|
-
export { Dir, TerrainGeometry, TerrainMesh, U32_EMPTY, allocLeafSet, allocSeamTable, beginUpdate, blendAngleCorrectedNormals, buildLeafIndex, buildSeams2to1, compileComputeTask, createComputePipelineTasks, createCubeSphereSurface, createElevationFieldContextTask, createFlatSurface, createInfiniteFlatSurface,
|
|
716
|
-
export type { ComputePipeline, ComputeStageCallback, CubeSphereSurfaceConfig, ElevationCallback, ElevationFieldContext, ElevationParams, FlatSurfaceConfig, InfiniteFlatSurfaceConfig, IntNodeInput, LeafGpuBufferState, LeafSet, LeafStorageState, LodMode,
|
|
754
|
+
export { ArrayTextureBackend, AtlasBackend, Dir, TerrainGeometry, TerrainMesh, Texture3DBackend, U32_EMPTY, allocLeafSet, allocSeamTable, beginUpdate, blendAngleCorrectedNormals, buildLeafIndex, buildSeams2to1, compileComputeTask, createComputePipelineTasks, createCubeSphereSurface, createElevationFieldContextTask, createFlatSurface, createInfiniteFlatSurface, createSpatialIndex, createState, createTerrainFieldStorage, createTerrainFieldTextureTask, createTerrainUniforms, createUniformsTask, deriveNormalZ, elevationFieldStageTask, elevationFn, elevationScale, executeComputeTask, getDeviceComputeLimits, innerTileSegments, instanceIdTask, isSkirtUV, isSkirtVertex, leafGpuBufferTask, leafStorageTask, loadTerrainField, loadTerrainFieldElevation, loadTerrainFieldNormal, maxLevel, maxNodes, origin, packTerrainFieldSample, positionNodeTask, quadtreeConfigTask, quadtreeUpdate, quadtreeUpdateTask, resetLeafSet, resetSeamTable, rootSize, sampleTerrainField, sampleTerrainFieldElevation, sampleTerrainFieldNormal, skirtScale, storeTerrainField, surface, surfaceTask, terrainFieldFilter, terrainFieldStageTask, terrainGraph, terrainTasks, textureSpaceToVectorSpace, tileNodesTask, update, updateUniformsTask, vElevation, vGlobalVertexIndex, vectorSpaceToTextureSpace, voronoiCells };
|
|
755
|
+
export type { ComputePipeline, ComputeStageCallback, CubeSphereSurfaceConfig, ElevationCallback, ElevationFieldContext, ElevationParams, FlatSurfaceConfig, InfiniteFlatSurfaceConfig, IntNodeInput, LeafGpuBufferState, LeafSet, LeafStorageState, LodMode, QuadtreeConfig, QuadtreeConfigState, QuadtreeState, SeamTable, SpatialIndex, Surface, TerrainFieldStorage, TerrainFieldStorageBackendType, TerrainFieldStorageFormat, TerrainFieldStorageOptions, TerrainGraph, TerrainTasks, TerrainUniformsContext, TerrainUniformsParams, TileBounds, TileId, UpdateParams };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BufferGeometry } from 'three';
|
|
2
2
|
import * as three_webgpu from 'three/webgpu';
|
|
3
|
-
import { InstancedMesh, NodeMaterial, Node, WebGPURenderer, StorageBufferAttribute, StorageBufferNode, UniformNode, Vector3, Vector3Like, ConstNode } from 'three/webgpu';
|
|
3
|
+
import { InstancedMesh, NodeMaterial, Node, WebGPURenderer, StorageArrayTexture, StorageTexture, StorageBufferAttribute, StorageBufferNode, UniformNode, Vector3, Vector3Like, ConstNode } from 'three/webgpu';
|
|
4
4
|
import * as three_src_nodes_TSL_js from 'three/src/nodes/TSL.js';
|
|
5
5
|
import { ShaderCallNodeInternal } from 'three/src/nodes/TSL.js';
|
|
6
6
|
import * as _hello_terrain_work from '@hello-terrain/work';
|
|
7
|
-
import { TaskRef } from '@hello-terrain/work';
|
|
7
|
+
import { TaskRef, Graph } from '@hello-terrain/work';
|
|
8
8
|
import Node$1 from 'three/src/nodes/core/Node.js';
|
|
9
9
|
import * as three_tsl from 'three/tsl';
|
|
10
10
|
|
|
@@ -114,7 +114,7 @@ declare class TerrainMesh extends InstancedMesh {
|
|
|
114
114
|
type ComputeStageCallback = (nodeIndex: Node, globalVertexIndex: Node, uv: Node, localCoordinates: Node, texelSize: Node) => void;
|
|
115
115
|
type ComputePipeline = ComputeStageCallback[];
|
|
116
116
|
|
|
117
|
-
/** Default compile task — uses
|
|
117
|
+
/** Default compile task — uses terrainFieldStageTask as the leaf. */
|
|
118
118
|
declare const compileComputeTask: _hello_terrain_work.Task<{
|
|
119
119
|
execute: (renderer: WebGPURenderer, instanceCount: number) => void;
|
|
120
120
|
}, string, unknown>;
|
|
@@ -390,6 +390,45 @@ type CubeSphereSurfaceConfig = {
|
|
|
390
390
|
*/
|
|
391
391
|
declare function createCubeSphereSurface(_cfg: CubeSphereSurfaceConfig): Surface;
|
|
392
392
|
|
|
393
|
+
type TerrainFieldStorageBackendType = "array-texture" | "atlas" | "texture-3d";
|
|
394
|
+
type TerrainFieldStorageFormat = "rgba16float" | "rgba32float";
|
|
395
|
+
type TerrainFieldStorageOptions = {
|
|
396
|
+
backend?: TerrainFieldStorageBackendType;
|
|
397
|
+
filter?: "nearest" | "linear";
|
|
398
|
+
format?: TerrainFieldStorageFormat;
|
|
399
|
+
};
|
|
400
|
+
interface TerrainFieldStorage {
|
|
401
|
+
readonly backendType: TerrainFieldStorageBackendType;
|
|
402
|
+
readonly edgeVertexCount: number;
|
|
403
|
+
readonly tileCount: number;
|
|
404
|
+
readonly texture: StorageArrayTexture | StorageTexture;
|
|
405
|
+
uv(ix: Node, iy: Node, tileIndex: Node): Node;
|
|
406
|
+
texel(ix: Node, iy: Node, tileIndex: Node): Node;
|
|
407
|
+
/** UV-based filtered sample. `u, v` in [0, 1] tile-local space. */
|
|
408
|
+
sample(u: Node, v: Node, tileIndex: Node): Node;
|
|
409
|
+
resize(width: number, height: number, tileCount: number): void;
|
|
410
|
+
}
|
|
411
|
+
declare function ArrayTextureBackend(edgeVertexCount: number, tileCount: number, options: Required<Pick<TerrainFieldStorageOptions, "format" | "filter">>): TerrainFieldStorage;
|
|
412
|
+
declare function AtlasBackend(edgeVertexCount: number, tileCount: number, options: Required<Pick<TerrainFieldStorageOptions, "format" | "filter">>): TerrainFieldStorage;
|
|
413
|
+
/**
|
|
414
|
+
* Placeholder backend for future true 3D storage-texture support in Three.js.
|
|
415
|
+
* We keep it present to preserve the backend API shape.
|
|
416
|
+
*/
|
|
417
|
+
declare function Texture3DBackend(edgeVertexCount: number, tileCount: number, options: Required<Pick<TerrainFieldStorageOptions, "format" | "filter">>): TerrainFieldStorage;
|
|
418
|
+
declare function createTerrainFieldStorage(edgeVertexCount: number, tileCount: number, renderer?: WebGPURenderer, options?: TerrainFieldStorageOptions): TerrainFieldStorage;
|
|
419
|
+
declare function storeTerrainField(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node, value: Node): Node;
|
|
420
|
+
declare function loadTerrainField(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node): Node;
|
|
421
|
+
declare function loadTerrainFieldElevation(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node): Node;
|
|
422
|
+
declare function loadTerrainFieldNormal(storage: TerrainFieldStorage, ix: Node, iy: Node, tileIndex: Node): Node;
|
|
423
|
+
/**
|
|
424
|
+
* UV-based filtered sample. `u, v` are in [0, 1] tile-local space.
|
|
425
|
+
* Respects the filter mode (nearest / linear) set on the storage.
|
|
426
|
+
*/
|
|
427
|
+
declare function sampleTerrainField(storage: TerrainFieldStorage, u: Node, v: Node, tileIndex: Node): Node;
|
|
428
|
+
declare function sampleTerrainFieldElevation(storage: TerrainFieldStorage, u: Node, v: Node, tileIndex: Node): Node;
|
|
429
|
+
declare function sampleTerrainFieldNormal(storage: TerrainFieldStorage, u: Node, v: Node, tileIndex: Node): Node;
|
|
430
|
+
declare function packTerrainFieldSample(height: Node, normalXZ: Node, extra?: Node): Node;
|
|
431
|
+
|
|
393
432
|
interface TerrainUniformsParams {
|
|
394
433
|
rootSize: number;
|
|
395
434
|
rootOrigin: Vector3Like;
|
|
@@ -431,11 +470,6 @@ interface ElevationFieldContext {
|
|
|
431
470
|
attribute: StorageBufferAttribute;
|
|
432
471
|
node: StorageBufferNode;
|
|
433
472
|
}
|
|
434
|
-
interface NormalFieldContext {
|
|
435
|
-
data: Uint32Array<ArrayBuffer>;
|
|
436
|
-
attribute: StorageBufferAttribute;
|
|
437
|
-
node: StorageBufferNode;
|
|
438
|
-
}
|
|
439
473
|
/** Task refs for the standard terrain pipeline. */
|
|
440
474
|
interface TerrainTasks {
|
|
441
475
|
instanceId: TaskRef<string>;
|
|
@@ -449,14 +483,17 @@ interface TerrainTasks {
|
|
|
449
483
|
positionNode: TaskRef<ShaderCallNodeInternal>;
|
|
450
484
|
createElevationFieldContext: TaskRef<ElevationFieldContext>;
|
|
451
485
|
createTileNodes: TaskRef<ReturnType<typeof createTileCompute>>;
|
|
452
|
-
|
|
486
|
+
createTerrainFieldTexture: TaskRef<TerrainFieldStorage>;
|
|
453
487
|
elevationFieldStage: TaskRef<ComputePipeline>;
|
|
454
|
-
|
|
488
|
+
terrainFieldStage: TaskRef<ComputePipeline>;
|
|
455
489
|
compileCompute: TaskRef<{
|
|
456
490
|
execute: (renderer: WebGPURenderer, instanceCount: number) => void;
|
|
457
491
|
}>;
|
|
458
492
|
executeCompute: TaskRef<void | (() => void)>;
|
|
459
493
|
}
|
|
494
|
+
type TerrainGraph = Graph<string, {
|
|
495
|
+
renderer: WebGPURenderer;
|
|
496
|
+
}>;
|
|
460
497
|
|
|
461
498
|
declare const createElevationFieldContextTask: _hello_terrain_work.Task<{
|
|
462
499
|
data: Float32Array<ArrayBuffer>;
|
|
@@ -479,11 +516,9 @@ declare const elevationFieldStageTask: _hello_terrain_work.Task<ComputePipeline,
|
|
|
479
516
|
/** Generates a unique instance ID per graph (cached once). */
|
|
480
517
|
declare const instanceIdTask: _hello_terrain_work.Task<`${string}-${string}-${string}-${string}-${string}`, string, unknown>;
|
|
481
518
|
|
|
482
|
-
declare const
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
node: three_webgpu.StorageBufferNode;
|
|
486
|
-
}, string, unknown>;
|
|
519
|
+
declare const createTerrainFieldTextureTask: _hello_terrain_work.Task<any, string, {
|
|
520
|
+
renderer: WebGPURenderer;
|
|
521
|
+
}>;
|
|
487
522
|
/**
|
|
488
523
|
* Normal field compute stage — reads height neighbors from the elevation field
|
|
489
524
|
* buffer, computes surface normals via central differences, packs XZ
|
|
@@ -492,7 +527,7 @@ declare const createNormalFieldContextTask: _hello_terrain_work.Task<{
|
|
|
492
527
|
*
|
|
493
528
|
* Accumulates the upstream elevation pipeline via `get(elevationFieldStageTask)`.
|
|
494
529
|
*/
|
|
495
|
-
declare const
|
|
530
|
+
declare const terrainFieldStageTask: _hello_terrain_work.Task<ComputePipeline, string, unknown>;
|
|
496
531
|
|
|
497
532
|
interface ElevationParams {
|
|
498
533
|
worldPosition: Node$1;
|
|
@@ -516,7 +551,7 @@ declare const origin: _hello_terrain_work.ParamRef<{
|
|
|
516
551
|
}>;
|
|
517
552
|
/**
|
|
518
553
|
* Number of segments per inner tile edge.
|
|
519
|
-
*
|
|
554
|
+
* Effective edge vertex count is `innerTileSegments + 3`.
|
|
520
555
|
*/
|
|
521
556
|
declare const innerTileSegments: _hello_terrain_work.ParamRef<number>;
|
|
522
557
|
/** Skirt scale factor. */
|
|
@@ -531,6 +566,8 @@ declare const maxLevel: _hello_terrain_work.ParamRef<number>;
|
|
|
531
566
|
declare const quadtreeUpdate: _hello_terrain_work.ParamRef<UpdateParams>;
|
|
532
567
|
/** Optional custom terrain surface; defaults to bounded flat surface when null. */
|
|
533
568
|
declare const surface: _hello_terrain_work.ParamRef<Surface | null>;
|
|
569
|
+
/** Terrain field texture filter mode. */
|
|
570
|
+
declare const terrainFieldFilter: _hello_terrain_work.ParamRef<"nearest" | "linear">;
|
|
534
571
|
/** Terrain elevation control function (per vertex, in gpu compute) */
|
|
535
572
|
declare const elevationFn: _hello_terrain_work.ParamRef<ElevationCallback>;
|
|
536
573
|
|
|
@@ -538,11 +575,10 @@ declare const elevationFn: _hello_terrain_work.ParamRef<ElevationCallback>;
|
|
|
538
575
|
* Builds the TSL position node for the terrain shader.
|
|
539
576
|
*
|
|
540
577
|
* Depends on leafStorageTask (buffer objects), createUniformsTask
|
|
541
|
-
* (uniform nodes),
|
|
542
|
-
* and createNormalFieldContextTask (normal field storage).
|
|
578
|
+
* (uniform nodes), and createTerrainFieldTextureTask (combined terrain field storage).
|
|
543
579
|
*
|
|
544
|
-
* The position node
|
|
545
|
-
* per-vertex
|
|
580
|
+
* The position node reads packed terrain samples (height + normal.xz)
|
|
581
|
+
* per-vertex and assigns them to the vNormal
|
|
546
582
|
* varying for use in the fragment shader.
|
|
547
583
|
*
|
|
548
584
|
* These only change when their GPU resources are recreated
|
|
@@ -591,9 +627,7 @@ declare const createUniformsTask: _hello_terrain_work.Task<TerrainUniformsContex
|
|
|
591
627
|
*/
|
|
592
628
|
declare const updateUniformsTask: _hello_terrain_work.Task<TerrainUniformsContext, string, unknown>;
|
|
593
629
|
|
|
594
|
-
declare function terrainGraph():
|
|
595
|
-
renderer: WebGPURenderer;
|
|
596
|
-
}>;
|
|
630
|
+
declare function terrainGraph(): TerrainGraph;
|
|
597
631
|
/** All terrain task refs for direct access. */
|
|
598
632
|
declare const terrainTasks: {
|
|
599
633
|
readonly instanceId: _hello_terrain_work.Task<`${string}-${string}-${string}-${string}-${string}`, string, unknown>;
|
|
@@ -625,13 +659,11 @@ declare const terrainTasks: {
|
|
|
625
659
|
rootUVCompute: three_src_nodes_TSL_js.ShaderNodeFn<[number | three_webgpu.Node, number | three_webgpu.Node, number | three_webgpu.Node]>;
|
|
626
660
|
tileVertexWorldPositionCompute: three_src_nodes_TSL_js.ShaderNodeFn<[number | three_webgpu.Node, number | three_webgpu.Node, number | three_webgpu.Node]>;
|
|
627
661
|
}, string, unknown>;
|
|
628
|
-
readonly
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
node: three_webgpu.StorageBufferNode;
|
|
632
|
-
}, string, unknown>;
|
|
662
|
+
readonly createTerrainFieldTexture: _hello_terrain_work.Task<any, string, {
|
|
663
|
+
renderer: WebGPURenderer;
|
|
664
|
+
}>;
|
|
633
665
|
readonly elevationFieldStage: _hello_terrain_work.Task<ComputePipeline, string, unknown>;
|
|
634
|
-
readonly
|
|
666
|
+
readonly terrainFieldStage: _hello_terrain_work.Task<ComputePipeline, string, unknown>;
|
|
635
667
|
readonly compileCompute: _hello_terrain_work.Task<{
|
|
636
668
|
execute: (renderer: WebGPURenderer, instanceCount: number) => void;
|
|
637
669
|
}, string, unknown>;
|
|
@@ -640,6 +672,13 @@ declare const terrainTasks: {
|
|
|
640
672
|
}>;
|
|
641
673
|
};
|
|
642
674
|
|
|
675
|
+
type ComputeDeviceLimits = {
|
|
676
|
+
maxWorkgroupSizeX: number;
|
|
677
|
+
maxWorkgroupSizeY: number;
|
|
678
|
+
maxWorkgroupInvocations: number;
|
|
679
|
+
};
|
|
680
|
+
declare function getDeviceComputeLimits(renderer: WebGPURenderer): ComputeDeviceLimits;
|
|
681
|
+
|
|
643
682
|
/**
|
|
644
683
|
* Maps a value or node from texture space [0, 1] to vector space [-1, 1].
|
|
645
684
|
*
|
|
@@ -712,5 +751,5 @@ declare const voronoiCells: three_src_nodes_TSL_js.ShaderNodeFn<[three_tsl.Proxi
|
|
|
712
751
|
uv: Node;
|
|
713
752
|
}>]>;
|
|
714
753
|
|
|
715
|
-
export { Dir, TerrainGeometry, TerrainMesh, U32_EMPTY, allocLeafSet, allocSeamTable, beginUpdate, blendAngleCorrectedNormals, buildLeafIndex, buildSeams2to1, compileComputeTask, createComputePipelineTasks, createCubeSphereSurface, createElevationFieldContextTask, createFlatSurface, createInfiniteFlatSurface,
|
|
716
|
-
export type { ComputePipeline, ComputeStageCallback, CubeSphereSurfaceConfig, ElevationCallback, ElevationFieldContext, ElevationParams, FlatSurfaceConfig, InfiniteFlatSurfaceConfig, IntNodeInput, LeafGpuBufferState, LeafSet, LeafStorageState, LodMode,
|
|
754
|
+
export { ArrayTextureBackend, AtlasBackend, Dir, TerrainGeometry, TerrainMesh, Texture3DBackend, U32_EMPTY, allocLeafSet, allocSeamTable, beginUpdate, blendAngleCorrectedNormals, buildLeafIndex, buildSeams2to1, compileComputeTask, createComputePipelineTasks, createCubeSphereSurface, createElevationFieldContextTask, createFlatSurface, createInfiniteFlatSurface, createSpatialIndex, createState, createTerrainFieldStorage, createTerrainFieldTextureTask, createTerrainUniforms, createUniformsTask, deriveNormalZ, elevationFieldStageTask, elevationFn, elevationScale, executeComputeTask, getDeviceComputeLimits, innerTileSegments, instanceIdTask, isSkirtUV, isSkirtVertex, leafGpuBufferTask, leafStorageTask, loadTerrainField, loadTerrainFieldElevation, loadTerrainFieldNormal, maxLevel, maxNodes, origin, packTerrainFieldSample, positionNodeTask, quadtreeConfigTask, quadtreeUpdate, quadtreeUpdateTask, resetLeafSet, resetSeamTable, rootSize, sampleTerrainField, sampleTerrainFieldElevation, sampleTerrainFieldNormal, skirtScale, storeTerrainField, surface, surfaceTask, terrainFieldFilter, terrainFieldStageTask, terrainGraph, terrainTasks, textureSpaceToVectorSpace, tileNodesTask, update, updateUniformsTask, vElevation, vGlobalVertexIndex, vectorSpaceToTextureSpace, voronoiCells };
|
|
755
|
+
export type { ComputePipeline, ComputeStageCallback, CubeSphereSurfaceConfig, ElevationCallback, ElevationFieldContext, ElevationParams, FlatSurfaceConfig, InfiniteFlatSurfaceConfig, IntNodeInput, LeafGpuBufferState, LeafSet, LeafStorageState, LodMode, QuadtreeConfig, QuadtreeConfigState, QuadtreeState, SeamTable, SpatialIndex, Surface, TerrainFieldStorage, TerrainFieldStorageBackendType, TerrainFieldStorageFormat, TerrainFieldStorageOptions, TerrainGraph, TerrainTasks, TerrainUniformsContext, TerrainUniformsParams, TileBounds, TileId, UpdateParams };
|