Architecture Maps

Blender 3D Architecture

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.

Open Source (GPL v2+) C / C++ / Python ~2M+ Lines of Code Updated: Mar 2026
01

Architecture Overview

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.

2M+
Lines of Code
6
GPU Backends
180+
Modifiers
30+
I/O Formats
High-Level Architecture Layers
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
02

Codebase Structure

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.

Source Tree Organization
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

Key intern/ Libraries

Cycles

Physically-based path tracer, standalone-capable. Supports CPU, CUDA, OptiX, HIP, Metal, oneAPI.

Render

GHOST

Cross-platform window and event system. Supports Windows, macOS, Linux (Wayland/X11).

Platform

Mantaflow

Fluid and smoke simulation engine integrated as a physics modifier.

Simulation

Audaspace

Audio engine with C++ core and Python bindings. Also usable as a standalone library.

Audio

OpenSubdiv

Pixar's subdivision surface library. Provides GPU-accelerated adaptive tessellation.

Geometry

guardedalloc

Memory allocator with leak detection and bounds checking for all Blender allocations.

Core
03

DNA System (Structure DNA)

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.

DNA Compilation and File Embedding
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
Version Compatibility

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.

DNA Characteristics

Self-Descriptive Files

Every .blend carries its complete schema. No external schema files needed for interpretation.

Direct Memory Layout

DNA structs mirror C memory layout exactly, sensitive to padding, pointer size, and endianness.

Dual Purpose

Most DNA structs serve as both serialization format AND in-memory representation during editing.

04

RNA System (Runtime Access Layer)

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.

RNA Integration Points
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

Property Types

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
05

Dependency Graph

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.

Depsgraph Evaluation Pipeline
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
Copy-on-Write

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.

Per-Window Ownership

Each window owns its own depsgraph tied to the active workspace and render engine, enabling simultaneous multi-viewport states.

Two-Tier Nodes

Outer ID nodes represent datablocks; inner operation nodes handle specific evaluation steps within each datablock.

Scope

Handles dynamic per-frame updates (F-Curves, constraints, modifiers) but not one-time operations like mesh subdivide in edit mode.

06

Cycles Render Engine

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.

Cycles Path Tracing Pipeline
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

Device Abstraction

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

Shader Execution

SVM (Shader Virtual Machine)

Bytecode interpreter for node graphs. Stack-based execution with 16-float stack in GPU local memory. Available on all device backends.

All Devices

OSL (Open Shading Language)

Industry-standard shading language. Closure-based with no direct light access. CPU and OptiX only due to hardware limitations.

CPU + OptiX
07

EEVEE Render Engine

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.

EEVEE Rendering Pipeline
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

Rendering Techniques

Lighting

Screen-space reflections, ambient occlusion (GTAO), volumetric lighting, soft shadow maps, irradiance volumes, and reflection cubemaps.

Post-Processing

Bloom, depth of field, and motion blur applied as post-processing passes after rasterization.

EEVEE Next

Major rewrite built on the Vulkan GPU abstraction layer with VKDevice, VKContext, and VKRenderGraph for improved stability and accuracy.

Shared Materials

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().

08

Modifier Stack & Geometry Nodes

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.

Modifier Stack Evaluation
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

Geometry Nodes Advantages

Multi-Type Processing

Supports mesh, curves, point cloud, instances, and volumes in the same node graph.

Attribute System

Replaces vertex groups with arbitrary named data channels for flexible per-element data (position, normal, custom attributes).

Custom Modifiers

Node groups can be packaged with a high-level interface, appearing as standard modifiers with settings panels.

Shared Backend

Operates on CurvesGeometry -- the same backend used by Grease Pencil and hair curves.

09

Node-Based Shader System

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.

Shader Compilation Backends
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

Node Categories

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
10

Animation System

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.

Animation Evaluation 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 & F-Curves

Actions are named collections of F-Curves. Each F-Curve animates a single property with keyframes and configurable interpolation.

Core

NLA Editor

Non-linear animation strips that blend, add, or replace values. Strips are evaluated as a chain of functions bottom-to-top.

Blending

Armatures

Skeleton objects with hierarchical bones for character deformation. Supports IK solvers (standard + iTaSC constraint-based).

Rigging

Editors

Graph Editor (F-Curves), Action Editor (keyframe timeline), NLA Editor (strip arrangement), Dope Sheet (summary view).

UI
11

.blend File Format & Library Linking

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.

.blend File Structure
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

Library Linking

Link

References data from another .blend file. Linked data is read-only; the source file must remain accessible.

Append

Copies data into the current file, making it independent. Changes to the source file are not reflected.

Library Overrides

Allow local modifications to linked data -- enabling non-destructive customization of shared assets across files.

Robust Loading

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.

12

Python Scripting & Addon API

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.

Operator Execution Flow
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

bpy Module Structure

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)
Addon System

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.

13

Acronym Reference

BVHBounding Volume Hierarchy
BSDFBidirectional Scattering Distribution Function
CoWCopy-on-Write
DAGDirected Acyclic Graph
DNAStructure DNA (serialization schema)
EEVEEExtra Easy Virtual Environment Engine
FKForward Kinematics
GHOSTGeneric Handy Operating System Toolkit
GLSLOpenGL Shading Language
GTAOGround Truth Ambient Occlusion
HIPHeterogeneous-computing Interface for Portability (AMD)
IKInverse Kinematics
iTaSCinstantaneous Task Specification using Constraints
MISMultiple Importance Sampling
MNEEManifold Next Event Estimation
NLANon-Linear Animation
OCIOOpenColorIO
OIDNOpen Image Denoise (Intel)
OSLOpen Shading Language
RNARuntime Nucleic Acid (data access layer)
SAHSurface Area Heuristic
SDNAStructure DNA (binary schema block)
SVMShader Virtual Machine
TLVType-Length-Value
VSEVideo Sequence Editor
Diagram
100%
Scroll to zoom · Drag to pan · Esc to close