Skip to content

Core Functions

Pure TypeScript functions with no React dependencies. Import from @strata-game-library/core.

Signed distance to a sphere.

function sdSphere(
point: [number, number, number],
center: [number, number, number],
radius: number
): number;

Signed distance to an axis-aligned box.

function sdBox(
point: [number, number, number],
center: [number, number, number],
size: [number, number, number]
): number;

Signed distance to a capsule.

function sdCapsule(
point: [number, number, number],
start: [number, number, number],
end: [number, number, number],
radius: number
): number;

Signed distance to a torus.

function sdTorus(
point: [number, number, number],
center: [number, number, number],
majorRadius: number,
minorRadius: number
): number;

Boolean union of two SDFs.

function opUnion(d1: number, d2: number): number;

Boolean subtraction (d1 - d2).

function opSubtraction(d1: number, d2: number): number;

Smooth blended union.

function opSmoothUnion(d1: number, d2: number, k: number): number;
// k = smoothness factor (0.1 - 1.0)

3D Perlin noise.

function noise3D(x: number, y: number, z: number): number;
// Returns -1 to 1

Fractal Brownian Motion noise.

function fbm(
x: number,
y: number,
z: number,
options?: {
octaves?: number; // Default: 6
persistence?: number; // Default: 0.5
lacunarity?: number; // Default: 2.0
}
): number;

Domain-warped FBM for organic shapes.

function warpedFbm(
x: number,
y: number,
z: number,
options?: {
octaves?: number;
warpStrength?: number;
}
): number;

Get biome type at a position.

function getBiomeAt(
x: number,
z: number,
config: BiomeConfig
): string;

Get terrain height at a position.

function getTerrainHeight(
x: number,
z: number,
biome: string,
config?: TerrainConfig
): number;

SDF for terrain heightfield.

function sdTerrain(
point: [number, number, number],
config: TerrainConfig
): number;

Calculate surface normal from SDF.

function calcNormal(
point: [number, number, number],
sdf: (p: [number, number, number]) => number,
epsilon?: number
): [number, number, number];

Generate mesh from SDF.

function marchingCubes(
sdf: (point: [number, number, number]) => number,
bounds: { min: [number, number, number]; max: [number, number, number] },
resolution: number
): { vertices: Float32Array; indices: Uint32Array };

Create Three.js geometry from SDF.

function createGeometryFromMarchingCubes(options: {
bounds: { min: [number, number, number]; max: [number, number, number] };
resolution: number;
sdf: (point: [number, number, number]) => number;
}): THREE.BufferGeometry;

Generate complete terrain chunk.

function generateTerrainChunk(options: {
position: [number, number, number];
size: number;
resolution: number;
sdfFunction: (p: [number, number, number]) => number;
biomeFunction?: (x: number, z: number) => string;
}): THREE.BufferGeometry;

Create simple water material.

function createWaterMaterial(options: {
color: THREE.Color;
opacity?: number;
reflectivity?: number;
waveHeight?: number;
waveSpeed?: number;
}): THREE.ShaderMaterial;

Create procedural sky material.

function createSkyMaterial(options: {
sunPosition: THREE.Vector3;
turbidity?: number;
rayleigh?: number;
}): THREE.ShaderMaterial;

Create time of day object.

function createTimeOfDay(
hour: number,
minute: number
): TimeOfDay;

Create procedural walk animation.

function createWalkCycle(options: {
speed?: number;
stride?: number;
bounce?: number;
armSwing?: number;
}): Animation;