Procedural 3D Asset Generation

Create 3D models
with code

Soyuz is a framework for building 3D assets using Signed Distance Fields. Write scripts, preview in real-time, export production-ready meshes.

gear.rhai
// A gear in 6 lines
let body = cylinder(0.8, 0.2);
let tooth = box3(0.2, 0.2, 0.15)
    .translate_x(0.85);
let teeth = tooth.repeat_polar(12);
let hole = cylinder(0.25, 0.3);

body.union(teeth).subtract(hole)

How it works

1

Write a script

Use primitives like sphere(), cube(), cylinder() and combine them with operations.

2

Preview instantly

GPU raymarching renders your SDF in real-time. See changes as you type.

3

Export mesh

Marching cubes converts your SDF to a triangle mesh. Export to glTF, GLB, or OBJ.

Built for procedural generation

Signed Distance Fields

Mathematical functions that describe shapes. Combine primitives with boolean operations, smooth blends, and transforms.

Real-time Preview

GPU-accelerated raymarching shows your model instantly. Edit code and see changes in real-time.

Script-based Workflow

Write in Rhai, a JavaScript-like language. Variables, loops, conditionals - procedural generation made simple.

Export Ready

Generate meshes via marching cubes. Export to glTF, GLB, or OBJ for your game engine or 3D software.

From simple to complex

Start with a sphere, end with a spaceship.

Primitives

sphere(0.5)
cube(1.0)
cylinder(0.3, 1.0)
torus(0.5, 0.15)

Boolean Operations

// Combine shapes
sphere(0.5).union(cube(0.6))

// Cut holes
cube(1.0).subtract(sphere(0.7))

// Smooth blend
a.smooth_union(b, 0.1)

Transforms

shape.translate(1.0, 0.0, 0.0)
shape.rotate_y(deg(45.0))
shape.scale(0.5)
shape.mirror_x()

Modifiers

// Make hollow
sphere(0.5).shell(0.05)

// Round edges
cube(1.0).round(0.1)

// Twist and bend
column.twist(2.0)

Ready to build?

Soyuz is open source and free to use. Get started in minutes.