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.
// 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
Write a script
Use primitives like sphere(), cube(), cylinder() and
combine them with operations.
Preview instantly
GPU raymarching renders your SDF in real-time. See changes as you type.
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.