Repository navigation
Home
github-actions[bot] edited this page Oct 8, 2026
·
25 revisions
ThreeMojo is a port of three.js to Mojo. It renders 3D scenes in software on the CPU, or on a GPU, and writes the result to an image file.
The documentation follows Diátaxis. Each page has one job.
Learn by doing.
Get a task done.
- Install
- Run the checks
- Use the GPU backend
- Measure coverage
- Measure examples
- Add a feature
- Write documentation
Look something up.
- Scene graph
- Rotations
- Cameras
- Geometry
- Geometry addons
- Lofts and clipping groups
- Sculptor
- Procedural generators
- Meshes and assets
- Scene objects
- Animated objects
- Lines
- Points and sprites
- Helpers
- Raycasting
- Curves and paths
- Animation
- Skinning
- Materials
- Node materials
- TSL functions
- Lights
- Lighting addons
- Fog
- Textures
- Renderer
- Renderer hooks and material flags
- Rasterization
- GPU backend
- Render target and framebuffer
- Post-processing
- GPU computation
- Compute nodes
- Progressive light map
- Gaussian splats
- Voxel global illumination
- SVG renderer
- Image files
- Model files
- More model files
- Exporters
- Scene JSON
- Windowing and controls
- Math
- Math addons
- Units
- Coverage tool
- Commands
- Examples
- Benchmarks
- Extensions
- Physics
- Physics query snapshots
- Continuous collision
- Tick force restoration
- Image decode queue
- Norm consumers
- Water
- Animals
- Buildings
- CARLA
- Femur
- Tibia
- Fibula
- Patella
- Knee
- Muscles
- Vessels
- Lymph
- Nerves
- Integument
- Leg
- Foot
- Pelvis
- Torso
- Arm
- Hand
- Head
- Genome
- Game humanoid
- Humanoid fidelity
- Audio-aligned game faces
- Converted assets
- Mesh quality
- Segment inertia
Understand why.
- Why a software rasterizer
- Why the scene graph is an array
- Why color is linear
- Why a normal is not a color
- Why interpolation is perspective-correct
- Why coverage uses fixed point
- Why shading is per fragment
- Why mipmaps
- Why transparency is sorted
- Why render hooks are a trait
- Why types and checks both exist
- Why the CPU and GPU share code
- Why the CPU renderer uses bands
- Why the PNG reader checks structure
- Why extensions sit beside the port
- The CUDA teardown hang
- The Mojo compiler hang
The source of every page is docs/wiki/ in the repository. make docs-check checks the writing rules. make wiki-publish copies the pages to this wiki, and the CI workflow does the same on every push to main. Edit the files in the repository, not the wiki.
Tutorials
How-to
Reference
- Scene graph
- Rotations
- Cameras
- Geometry
- Geometry addons
- Lofts and clipping groups
- Sculptor
- Procedural generators
- Meshes and assets
- Lines
- Points and sprites
- Helpers
- Scene objects
- Animated objects
- Raycasting
- Curves and paths
- Animation
- Skinning
- Materials
- Node materials
- TSL functions
- Lights
- Lighting addons
- Fog
- Textures
- Renderer
- Renderer hooks and material flags
- Rasterization
- GPU backend
- Render target
- Post-processing
- GPU computation
- Compute nodes
- Progressive light map
- Gaussian splats
- Voxel global illumination
- SVG renderer
- Image files
- Image decode queue
- Model files
- More model files
- Exporters
- Scene JSON
- Windowing and controls
- Math
- Norm consumers
- Math addons
- Units
- Coverage tool
- Commands
- Examples
- Benchmarks
- Extensions
- Shared physics
- Physics query snapshots
- Continuous collision
- Tick force restoration
- Water
- Animals
- Buildings
- CARLA
- Femur
- Tibia
- Fibula
- Patella
- Knee
- Muscles
- Vessels
- Lymph
- Nerves
- Integument
- Leg
- Foot
- Pelvis
- Torso
- Arm
- Hand
- Head
- Genome
- Game humanoid
- Humanoid fidelity
- Audio-aligned game faces
- Converted assets
- Mesh quality
- Segment inertia
Explanation
- Software rasterizer
- Scene graph as an array
- Linear color
- Normals are not colors
- Perspective correction
- Fixed-point coverage
- Per-fragment shading
- Mipmaps
- Sorted transparency
- Types and checks
- Render hooks as a trait
- Shared CPU and GPU code
- Bands and threads
- PNG structure
- Extensions beside the port
- CUDA teardown hang
- Mojo compiler hang