sdfChamferIntersect

two SDFs using chamfer operation.

Parameters

NameTypeDescription
distanceAf32First signed distance field.
distanceBf32Second signed distance field.
radiusf32Chamfer radius for the edge.

Returns

f32intersection signed distance field.

WGSL Code

fn sdfChamferIntersect(distanceA: f32, distanceB: f32, radius: f32) -> f32 {
return max(max(distanceA, distanceB), (distanceA + radius + distanceB) * 0.5);
}

sdfChamferSubtract

one SDF from another using chamfer operation.

Parameters

NameTypeDescription
distanceAf32First signed distance field.
distanceBf32Second signed distance field to subtract.
radiusf32Chamfer radius for the edge.

Returns

f32subtraction signed distance field.

WGSL Code

fn sdfChamferSubtract(distanceA: f32, distanceB: f32, radius: f32) -> f32 {
return max(max(distanceA, -distanceB), (distanceA + radius - distanceB) * 0.5);
}

sdfChamferUnion

two SDFs using chamfer union operation with hard edges.

Parameters

NameTypeDescription
distanceAf32First signed distance field.
distanceBf32Second signed distance field.
radiusf32Chamfer radius for the edge.

Returns

f32union signed distance field.

WGSL Code

fn sdfChamferUnion(distanceA: f32, distanceB: f32, radius: f32) -> f32 {
return min(min(distanceA, distanceB), (distanceA - radius + distanceB) * 0.5);
}

sdfOpIntersect

two SDFs (logical AND).

Parameters

NameTypeDescription
distanceAf32First signed distance field.
distanceBf32Second signed distance field.

Returns

f32signed distance field.

WGSL Code

fn sdfOpIntersect(distanceA: f32, distanceB: f32) -> f32 {
return max(distanceA, distanceB);
}

sdfOpSubtract

one SDF from another (A - B).

Parameters

NameTypeDescription
distanceAf32First signed distance field.
distanceBf32Second signed distance field to subtract.

Returns

f32signed distance field.

WGSL Code

fn sdfOpSubtract(distanceA: f32, distanceB: f32) -> f32 {
return max(distanceA, -distanceB);
}

sdfOpUnion

two SDFs using union operation (logical OR).

Parameters

NameTypeDescription
distanceAf32First signed distance field.
distanceBf32Second signed distance field.

Returns

f32signed distance field.

WGSL Code

fn sdfOpUnion(distanceA: f32, distanceB: f32) -> f32 {
return min(distanceA, distanceB);
}

sdfSmoothIntersect

two SDFs with smooth blending.

Parameters

NameTypeDescription
distanceAf32First signed distance field.
distanceBf32Second signed distance field.
smoothingf32Smoothing factor for the blend.

Returns

f32intersected signed distance field.

WGSL Code

fn sdfSmoothIntersect(distanceA: f32, distanceB: f32, smoothing: f32) -> f32 {
let h = clamp(0.5 - 0.5 * (distanceB - distanceA) / smoothing, 0.0, 1.0);
return mix(distanceB, distanceA, h) + smoothing * h * (1.0 - h);
}

sdfSmoothSubtract

one SDF from another with smooth blending.

Parameters

NameTypeDescription
distanceAf32First signed distance field.
distanceBf32Second signed distance field to subtract.
smoothingf32Smoothing factor for the blend.

Returns

f32subtracted signed distance field.

WGSL Code

fn sdfSmoothSubtract(distanceA: f32, distanceB: f32, smoothing: f32) -> f32 {
let h = clamp(0.5 - 0.5 * (distanceB + distanceA) / smoothing, 0.0, 1.0);
return mix(distanceA, -distanceB, h) + smoothing * h * (1.0 - h);
}

sdfSmoothUnion

two SDFs using smooth union operation with configurable smoothing.

Parameters

NameTypeDescription
distanceAf32First signed distance field.
distanceBf32Second signed distance field.
smoothingf32Smoothing factor for the blend.

Returns

f32combined signed distance field.

WGSL Code

fn sdfSmoothUnion(distanceA: f32, distanceB: f32, smoothing: f32) -> f32 {
let h = clamp(0.5 + 0.5 * (distanceB - distanceA) / smoothing, 0.0, 1.0);
return mix(distanceB, distanceA, h) - smoothing * h * (1.0 - h);
}