Interactive architecture map of Blender's internal systems — from the DNA/RNA data layer through render engines, modifiers, and scripting, compiled from developer documentation and source code.
Blender is a free and open-source 3D creation suite covering the entire pipeline: modeling, sculpting, animation, rendering, compositing, video editing, and 2D/3D drawing. The architecture follows an MVC-inspired pattern with clear module separation.
graph TD
subgraph UI["User Interface Layer"]
EDITORS["Editors
(3D View, Node, Timeline)"]
PYTHON_UI["Python UI Scripts"]
end
subgraph DATA["Data Access Layer"]
RNA["RNA Property System"]
DNA["DNA Struct Definitions"]
end
subgraph EVAL["Evaluation Layer"]
DEP["Dependency Graph"]
MODS["Modifier Stack"]
ANIM["Animation System"]
end
subgraph RENDER["Render Layer"]
CYCLES["Cycles
(Path Tracer)"]
EEVEE["EEVEE
(Rasterizer)"]
COMP["Compositor"]
end
subgraph PLATFORM["Platform Layer"]
GPU["GPU Abstraction"]
GHOST["GHOST
(Window System)"]
IO["File I/O"]
end
UI --> DATA
DATA --> EVAL
EVAL --> RENDER
RENDER --> PLATFORM
style EDITORS fill:#2a3150,stroke:#45c8dc,color:#e4e8f4
style RNA fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style DNA fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style DEP fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style CYCLES fill:#2a3150,stroke:#d4533b,color:#e4e8f4
style EEVEE fill:#2a3150,stroke:#d4533b,color:#e4e8f4
style GPU fill:#1a1e2e,stroke:#5c6ea0,color:#e4e8f4
style GHOST fill:#1a1e2e,stroke:#5c6ea0,color:#e4e8f4
style IO fill:#1a1e2e,stroke:#5c6ea0,color:#e4e8f4
style PYTHON_UI fill:#2a3150,stroke:#f2c94c,color:#e4e8f4
style MODS fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style ANIM fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style COMP fill:#2a3150,stroke:#a86fa3,color:#e4e8f4
Blender's source is organized into three top-level directories: source/blender/ for the main application, intern/ for internal libraries, and extern/ for third-party dependencies.
graph TD
subgraph SRC["source/blender/"]
MAKEDNA["makesdna
(struct defs)"]
MAKERNA["makesrna
(property API)"]
BLENKERNEL["blenkernel
(kernel functions)"]
BLENLIB["blenlib
(math, utils)"]
BLENLOADER["blenloader
(file I/O, undo)"]
EDIT["editors/
(UI + operators)"]
MODSRC["modifiers/"]
NODESRC["nodes/"]
DEPSRC["depsgraph/"]
end
subgraph INT["intern/"]
CYC["cycles/
(render engine)"]
GHO["ghost/
(window system)"]
GUARD["guardedalloc/
(memory)"]
MANTA["mantaflow/
(fluids)"]
BULLET["rigidbody/
(physics)"]
end
SRC --> INT
style MAKEDNA fill:#1a1e2e,stroke:#e8943a,color:#e4e8f4
style MAKERNA fill:#1a1e2e,stroke:#e8943a,color:#e4e8f4
style BLENKERNEL fill:#1a1e2e,stroke:#8193c4,color:#e4e8f4
style EDIT fill:#1a1e2e,stroke:#45c8dc,color:#e4e8f4
style CYC fill:#1a1e2e,stroke:#d4533b,color:#e4e8f4
style GHO fill:#1a1e2e,stroke:#5c6ea0,color:#e4e8f4
style BLENLIB fill:#1a1e2e,stroke:#8193c4,color:#e4e8f4
style BLENLOADER fill:#1a1e2e,stroke:#45c8dc,color:#e4e8f4
style MODSRC fill:#1a1e2e,stroke:#4dd9a0,color:#e4e8f4
style NODESRC fill:#1a1e2e,stroke:#a86fa3,color:#e4e8f4
style DEPSRC fill:#1a1e2e,stroke:#4dd9a0,color:#e4e8f4
style GUARD fill:#1a1e2e,stroke:#5c6ea0,color:#e4e8f4
style MANTA fill:#1a1e2e,stroke:#5c6ea0,color:#e4e8f4
style BULLET fill:#1a1e2e,stroke:#5c6ea0,color:#e4e8f4
Physically-based path tracer, standalone-capable. Supports CPU, CUDA, OptiX, HIP, Metal, oneAPI.
Cross-platform window and event system. Supports Windows, macOS, Linux (Wayland/X11).
Fluid and smoke simulation engine integrated as a physics modifier.
Audio engine with C++ core and Python bindings. Also usable as a standalone library.
Pixar's subdivision surface library. Provides GPU-accelerated adaptive tessellation.
Memory allocator with leak detection and bounds checking for all Blender allocations.
DNA is Blender's serialization foundation. Every .blend file embeds a complete schema (SDNA) describing all data structures, enabling forward and backward compatibility across versions.
graph LR
HEADERS["C Struct Headers
(makesdna/*.h)"]
TOOL["makesdna Tool
(compile-time)"]
SDNA["SDNA Binary
(struct catalog)"]
BLEND[".blend File"]
DATA["Data Blocks
(binary payload)"]
HEADERS --> TOOL
TOOL --> SDNA
SDNA --> BLEND
DATA --> BLEND
style HEADERS fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style TOOL fill:#2a3150,stroke:#f2c94c,color:#e4e8f4
style SDNA fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style BLEND fill:#1a1e2e,stroke:#45c8dc,color:#e4e8f4
style DATA fill:#1a1e2e,stroke:#8193c4,color:#e4e8f4
When loading a .blend file, Blender compares the file's embedded SDNA against the current binary's SDNA. Unknown newer fields are safely skipped, missing older fields get sensible defaults, and do_versions code handles semantic changes between releases.
Every .blend carries its complete schema. No external schema files needed for interpretation.
DNA structs mirror C memory layout exactly, sensitive to padding, pointer size, and endianness.
Most DNA structs serve as both serialization format AND in-memory representation during editing.
RNA sits above DNA, providing rich metadata, type information, and runtime behavior. The Python API (bpy) is auto-generated from RNA definitions, and the UI system reads RNA metadata for automatic widget generation.
graph TD
DNA_S["DNA Structs
(in-memory data)"]
RNA_D["RNA Definitions
(makesrna/*.cc)"]
BPY["Python bpy Module
(auto-generated)"]
UI_W["UI Widgets
(auto-generated)"]
ANIM_P["Animation Paths
(keyframe targets)"]
DEP_U["Depsgraph Updates
(change propagation)"]
OPS["Operator Parameters"]
DNA_S --> RNA_D
RNA_D --> BPY
RNA_D --> UI_W
RNA_D --> ANIM_P
RNA_D --> DEP_U
RNA_D --> OPS
style DNA_S fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style RNA_D fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style BPY fill:#1a1e2e,stroke:#f2c94c,color:#e4e8f4
style UI_W fill:#1a1e2e,stroke:#45c8dc,color:#e4e8f4
style ANIM_P fill:#1a1e2e,stroke:#d4533b,color:#e4e8f4
style DEP_U fill:#1a1e2e,stroke:#4dd9a0,color:#e4e8f4
style OPS fill:#1a1e2e,stroke:#8193c4,color:#e4e8f4
| Type | Description | Example Subtypes |
|---|---|---|
| Boolean | On/off flags, often from DNA bitfields | use_*, show_*, is_* |
| Int / Float | Numeric values with min/max ranges | PROP_ANGLE, PROP_COLOR, PROP_FACTOR |
| String | Text values with length limits | PROP_FILEPATH, PROP_DIRPATH |
| Enum | Named choices from a fixed set | Mode selectors, interpolation types |
| Pointer | References to other RNA structs | Object, Mesh, Material references |
| Collection | Lists of RNA structs | Vertices, bones, modifiers |
The depsgraph ensures efficient scene updates after any change, rebuilding only what depends on the modified value. It uses Copy-on-Write semantics so original data is never modified during evaluation.
graph LR
ORIG["Original
DNA Data"]
CONSTRUCT["Graph Construction
(shallow CoW copies)"]
EVAL["Multi-threaded
Evaluation"]
GEN["Generated Data
(filled copies)"]
VIEW["Viewport /
Render Engines"]
ORIG --> CONSTRUCT
CONSTRUCT --> EVAL
EVAL --> GEN
GEN --> VIEW
style ORIG fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style CONSTRUCT fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style EVAL fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style GEN fill:#2a3150,stroke:#45c8dc,color:#e4e8f4
style VIEW fill:#2a3150,stroke:#d4533b,color:#e4e8f4
At graph construction, shallow copies of datablocks are allocated. During evaluation, worker threads populate these copies. Geometry sharing means lightweight container structs (like Mesh) are duplicated, but actual vertex/face arrays reference originals when unmodified. Original DNA data is never modified by evaluation.
Each window owns its own depsgraph tied to the active workspace and render engine, enabling simultaneous multi-viewport states.
Outer ID nodes represent datablocks; inner operation nodes handle specific evaluation steps within each datablock.
Handles dynamic per-frame updates (F-Curves, constraints, modifiers) but not one-time operations like mesh subdivide in edit mode.
Cycles is Blender's physically-based path tracer. It lives in intern/cycles/ and can run as a standalone library. It supports CPU, CUDA, OptiX, HIP, Metal, and oneAPI backends.
graph TD
CAM["Camera Ray
Generation"]
BVH["BVH Traversal
(closest hit)"]
SURF["Surface Shading
(BSDF evaluation)"]
VOL["Volume Scattering"]
BG["Background
(missed rays)"]
LIGHT["Light Sampling
(hierarchical tree)"]
BOUNCE["Path Continuation
(indirect bounces)"]
FILM["Film Accumulation
+ Denoising"]
CAM --> BVH
BVH --> SURF
BVH --> BG
SURF --> LIGHT
SURF --> VOL
LIGHT --> BOUNCE
BOUNCE --> BVH
SURF --> FILM
BG --> FILM
style CAM fill:#2a3150,stroke:#d4533b,color:#e4e8f4
style BVH fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style SURF fill:#2a3150,stroke:#f2c94c,color:#e4e8f4
style VOL fill:#1a1e2e,stroke:#a86fa3,color:#e4e8f4
style BG fill:#1a1e2e,stroke:#5c6ea0,color:#e4e8f4
style LIGHT fill:#2a3150,stroke:#f2c94c,color:#e4e8f4
style BOUNCE fill:#2a3150,stroke:#d4533b,color:#e4e8f4
style FILM fill:#2a3150,stroke:#45c8dc,color:#e4e8f4
| Backend | Platform | Notes |
|---|---|---|
| CPU | All platforms | Multi-threaded, always available |
| CUDA | NVIDIA | Software ray tracing |
| OptiX | NVIDIA RTX | Hardware RT cores, OSL support |
| HIP | AMD | RDNA2+ GPUs |
| Metal | macOS | Apple Silicon and AMD GPUs |
| oneAPI | Intel | Arc GPUs |
Bytecode interpreter for node graphs. Stack-based execution with 16-float stack in GPU local memory. Available on all device backends.
Industry-standard shading language. Closure-based with no direct light access. CPU and OptiX only due to hardware limitations.
EEVEE is Blender's real-time rasterization engine. It shares the same material node system as Cycles, compiling node graphs to GPU shaders for interactive viewport feedback.
graph LR
SCENE["Scene Data"]
DEP2["Depsgraph
(evaluated copies)"]
DM["Draw Manager"]
ENG["EEVEE Engine"]
GLSL["GPU Shaders
(compiled nodes)"]
FB["Framebuffer
Output"]
SCENE --> DEP2
DEP2 --> DM
DM --> ENG
ENG --> GLSL
GLSL --> FB
style SCENE fill:#2a3150,stroke:#8193c4,color:#e4e8f4
style DEP2 fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style DM fill:#2a3150,stroke:#45c8dc,color:#e4e8f4
style ENG fill:#2a3150,stroke:#d4533b,color:#e4e8f4
style GLSL fill:#2a3150,stroke:#f2c94c,color:#e4e8f4
style FB fill:#1a1e2e,stroke:#5c6ea0,color:#e4e8f4
Screen-space reflections, ambient occlusion (GTAO), volumetric lighting, soft shadow maps, irradiance volumes, and reflection cubemaps.
Bloom, depth of field, and motion blur applied as post-processing passes after rasterization.
Major rewrite built on the Vulkan GPU abstraction layer with VKDevice, VKContext, and VKRenderGraph for improved stability and accuracy.
The same node graph works in both Cycles and EEVEE. Material nodes compile to SVM bytecode for Cycles path tracing and to GLSL shaders for EEVEE rasterization via GPU_material_compile() and GPU_link().
The modifier stack is a sequential pipeline where each modifier transforms input geometry. Geometry Nodes extends this with a visual programming system for procedural geometry manipulation.
graph LR
BASE["Base Mesh
(original geometry)"]
MOD1["Modifier 1
(e.g. Mirror)"]
MOD2["Modifier 2
(e.g. Subsurf)"]
GN["Geometry Nodes
(procedural)"]
MOD3["Modifier 3
(e.g. Armature)"]
FINAL["Final Geometry
(to render/viewport)"]
BASE --> MOD1
MOD1 --> MOD2
MOD2 --> GN
GN --> MOD3
MOD3 --> FINAL
style BASE fill:#2a3150,stroke:#8193c4,color:#e4e8f4
style MOD1 fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style MOD2 fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style GN fill:#2a3150,stroke:#f2c94c,color:#e4e8f4
style MOD3 fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style FINAL fill:#2a3150,stroke:#45c8dc,color:#e4e8f4
Supports mesh, curves, point cloud, instances, and volumes in the same node graph.
Replaces vertex groups with arbitrary named data channels for flexible per-element data (position, normal, custom attributes).
Node groups can be packaged with a high-level interface, appearing as standard modifiers with settings panels.
Operates on CurvesGeometry -- the same backend used by Grease Pencil and hair curves.
Blender's unified shader system uses node graphs stored as bNodeTree DNA structs. Each node has typed input/output sockets connected by links, and the graph compiles differently per render engine.
graph TD
NT["Node Tree
(bNodeTree)"]
SVM["SVM Bytecode
(Cycles, all devices)"]
OSL2["OSL Source
(Cycles, CPU+OptiX)"]
GLSL2["GLSL Shaders
(EEVEE, GPU)"]
CLOSURES["Closures
(BSDF, volume, emission)"]
NT --> SVM
NT --> OSL2
NT --> GLSL2
SVM --> CLOSURES
OSL2 --> CLOSURES
GLSL2 --> CLOSURES
style NT fill:#2a3150,stroke:#a86fa3,color:#e4e8f4
style SVM fill:#2a3150,stroke:#d4533b,color:#e4e8f4
style OSL2 fill:#1a1e2e,stroke:#d4533b,color:#e4e8f4
style GLSL2 fill:#2a3150,stroke:#f2c94c,color:#e4e8f4
style CLOSURES fill:#2a3150,stroke:#e8943a,color:#e4e8f4
| Category | Examples | Purpose |
|---|---|---|
| Input | Textures, coordinates, object info | Data sources for shader evaluation |
| Shader | Diffuse, Glossy, Glass, Emission | BSDF closures defining surface behavior |
| Texture | Noise, Voronoi, Musgrave | Procedural pattern generation |
| Color | Mix, Curves, Ramp | Color manipulation and blending |
| Vector | Mapping, Bump, Normal | Direction and coordinate transforms |
| Converter | Math, Separate/Combine | Type conversion and arithmetic |
Blender's animation system is built on Actions containing F-Curves, with the NLA editor for non-linear blending. Drivers, constraints, and armatures complete the rigging and animation pipeline.
graph TD
TRIGGER["Depsgraph Trigger
(frame change)"]
NLA["NLA Strip Evaluation
(bottom-to-top blending)"]
FCURVES["F-Curve Interpolation
(bezier, linear, constant)"]
DRIVERS["Driver Evaluation
(expressions/deps)"]
CONSTRAINTS["Constraint Application
(IK, copy, track-to)"]
DEFORM["Armature Deformation
(mesh vertices)"]
TRIGGER --> NLA
NLA --> FCURVES
FCURVES --> DRIVERS
DRIVERS --> CONSTRAINTS
CONSTRAINTS --> DEFORM
style TRIGGER fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style NLA fill:#2a3150,stroke:#d4533b,color:#e4e8f4
style FCURVES fill:#2a3150,stroke:#d4533b,color:#e4e8f4
style DRIVERS fill:#2a3150,stroke:#f2c94c,color:#e4e8f4
style CONSTRAINTS fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style DEFORM fill:#2a3150,stroke:#8193c4,color:#e4e8f4
Actions are named collections of F-Curves. Each F-Curve animates a single property with keyframes and configurable interpolation.
Non-linear animation strips that blend, add, or replace values. Strips are evaluated as a chain of functions bottom-to-top.
Skeleton objects with hierarchical bones for character deformation. Supports IK solvers (standard + iTaSC constraint-based).
Graph Editor (F-Curves), Action Editor (keyframe timeline), NLA Editor (strip arrangement), Dope Sheet (summary view).
The .blend format uses a TLV (type-length-value) binary structure. Each file starts with a 12-byte header, followed by data blocks, an embedded SDNA catalog, and an end marker.
graph LR
HDR["File Header
(12 bytes: magic,
ptr size, endian, ver)"]
BLK1["Data Block 1
(Object)"]
BLK2["Data Block 2
(Mesh)"]
BLK3["Data Block N
(Material, etc.)"]
DNA1["DNA1 Block
(embedded SDNA)"]
ENDB["ENDB
(end marker)"]
HDR --> BLK1
BLK1 --> BLK2
BLK2 --> BLK3
BLK3 --> DNA1
DNA1 --> ENDB
style HDR fill:#2a3150,stroke:#45c8dc,color:#e4e8f4
style BLK1 fill:#1a1e2e,stroke:#8193c4,color:#e4e8f4
style BLK2 fill:#1a1e2e,stroke:#8193c4,color:#e4e8f4
style BLK3 fill:#1a1e2e,stroke:#8193c4,color:#e4e8f4
style DNA1 fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style ENDB fill:#1a1e2e,stroke:#5c6ea0,color:#e4e8f4
References data from another .blend file. Linked data is read-only; the source file must remain accessible.
Copies data into the current file, making it independent. Changes to the source file are not reflected.
Allow local modifications to linked data -- enabling non-destructive customization of shared assets across files.
If a library file is missing at load time, Blender creates placeholder datablocks. Relocating the library file restores the data automatically. File blocks store old memory pointers for relinking internal references.
Python is embedded in Blender for the entire session. Much of Blender's own UI is drawn by Python scripts, and the addon system enables hot-reloadable extensions.
graph LR
USER["User Action
(button, hotkey)"]
OP["Operator
(Python or C)"]
BPY_OPS["bpy.ops
(execution)"]
RNA_CH["RNA Property
Changes"]
DEP_UP["Depsgraph
Update"]
VIEW2["Viewport
Refresh"]
USER --> OP
OP --> BPY_OPS
BPY_OPS --> RNA_CH
RNA_CH --> DEP_UP
DEP_UP --> VIEW2
style USER fill:#2a3150,stroke:#45c8dc,color:#e4e8f4
style OP fill:#2a3150,stroke:#f2c94c,color:#e4e8f4
style BPY_OPS fill:#2a3150,stroke:#f2c94c,color:#e4e8f4
style RNA_CH fill:#2a3150,stroke:#e8943a,color:#e4e8f4
style DEP_UP fill:#2a3150,stroke:#4dd9a0,color:#e4e8f4
style VIEW2 fill:#1a1e2e,stroke:#d4533b,color:#e4e8f4
| Module | Purpose |
|---|---|
| bpy.data | Access all library data (objects, meshes, materials, scenes) |
| bpy.context | Current active state (selected objects, active tool, mode) |
| bpy.ops | Operator execution (buttons, menu items, tools) |
| bpy.types | All registrable types (Operator, Panel, Menu, PropertyGroup) |
| bpy.props | Property types for addon settings |
| bpy.utils | Utility functions (register/unregister, path helpers) |
Addons define Python subclasses of Blender types and register via bpy.utils.register_class(). Each addon has register() / unregister() functions enabling hot-reload. Addons can be single files or packages with __init__.py.