Free and open-source 3D creation suite supporting the entire pipeline. Modeling, sculpting, animation, VFX, compositing, motion tracking and video editing.
TIP
Use Blender Launcher V2 to manage multiple Blender versions.
TIP
Interactive shortcut reference: Blender Shortcuts
Shortcuts โ
General โ
| Action | Shortcut |
|---|---|
| Preferences | Ctrl , |
| Property box | F9 |
| Apply to all selected elements | hold Alt |
| Frame selected | Numpad . |
| Frame camera | Numpad 0 |
| Set selected as active viewpoint | Ctrl Numpad 0 |
| Set active camera to view | Ctrl Alt Numpad 0 |
| Join objects | Ctrl J |
| Move to collection | M |
| Link to collection | Shift M |
| Radial view selection menu | ` |
| Scale around Z axis | Alt S |
| Cursor/view to center | Shift C |
| Place cursor | Shift RMB |
| Drag viewport | Shift MMB |
| Zoom viewport | Ctrl MMB |
| Hide selected | H |
| Isolate selected | Shift H |
| Unhide all | Alt H |
| Quick favorites | Q |
| Snap to orthographic views | hold Alt while rotating |
| Toggle quad view | Ctrl Alt Q |
| Batch rename | Ctrl F2 |
| Vertex bevel | Ctrl Shift B |
Rendering โ
| Action | Shortcut |
|---|---|
| Render frame | F12 |
| Render sequence | Ctrl F12 |
| Render region | Ctrl B |
| Delete render region | Ctrl Alt B |
Modeling โ
| Action | Shortcut |
|---|---|
| Extrude | E |
| Select edge/poly loop | Alt LMB |
| Rotate along edges | Ctrl Shift Alt S |
| Even mode (loop cut) | E |
| Subdivide | Ctrl 1 / 2 / 3 (Ctrl 0 to reset) |
| Snap to points with ruler | hold Ctrl |
| Scale along normals | Alt S |
| Measure thickness with ruler | hold Shift |
| Measure angle with ruler | click in the middle |
| Delete a ruler | X |
| Inset | I |
| Constrain to outer edge (inset) | I then B |
Sculpting โ
| Action | Shortcut |
|---|---|
| Toggle perspective/orthographic | Numpad 5 |
| Rescale brush | F |
| Brush intensity | Shift F |
| Invert brush | hold Ctrl |
| Smooth | hold Shift |
| Stroke method | E |
| Dyntopo | Ctrl D |
| Invert mask | Alt I |
| Undo mask | Alt M |
| Hide masked | Ctrl H |
| Unhide all | H |
| Lasso mask | Ctrl Shift LMB |
| Box mask | B |
Rigging โ
| Action | Shortcut |
|---|---|
| Set pivot point | . |
Animation โ
| Action | Shortcut |
|---|---|
| Set keyframe | I |
Unwrapping โ
| Action | Shortcut |
|---|---|
| Select UV island | I |
Shading โ
| Action | Shortcut |
|---|---|
| Preview shader | Ctrl Shift LMB |
| Principled texture setup | Ctrl Shift T |
| Cut node wires | Ctrl RMB drag |
Tracking โ
| Action | Shortcut |
|---|---|
| Create new tracker | Ctrl LMB |
| Show search box | Alt S |
| Track manually | Alt Arrows |
| Lock view to tracker | L |
| Start auto tracker | Ctrl T |
| Lock tracker | Ctrl L |
Hard Ops / Boxcutter โ
INFO
Install Hard Ops first, then Boxcutter. This way Boxcutter is the first mode you access when pressing Alt W.
| Action | Shortcut |
|---|---|
| Toggle Hard Ops / Boxcutter | Alt W |
| Viewport settings | Alt V |
| Align Boxcutter | Shift V |
| Hard Ops menu | Q |
| Radial Hard Ops menu | Shift Q |
| Boxcutter menu / Hops tools | D |
| HOps helper | Ctrl ` |
| Display & select cutter | hold Shift when releasing |
| Mirror | Alt X |
| Align edges | Alt A |
Materialiq โ
| Action | Shortcut |
|---|---|
| Toggle asset library | E over any area |
DANGER
Materialiq can cause problems with commonly used shortcuts like mode switching (1 2 3) and the MACHIN3tools shortcut Alt X.
Add-ons โ
| Name | Description |
|---|---|
| Loop Tools | Mesh modelling toolkit |
| Edit Mesh Tools | Additional mesh modelling tools |
| Node Wrangler | Dramatically improves the node editing experience |
| MACHIN3tools | Swiss army knife for Blender workflow |
| CURVEmachine | Flexible poly curve editing |
| Hard Ops / Boxcutter | Hard surface modelling toolkit |
| Edge Flow | Adjust mesh geometry to curved surfaces |
| GrabDoc | Trim & tileable texture baker |
| Quick Rigid | Easy access to rigid body settings |
| Poly Haven | Polyhaven asset library integration |
| Materialiq | Material library |
| EZLattice | Lattice deformation companion |
| AddRoutes | MIDI and OSC signals in Blender |
| NodeOSC | OSC support for nodes |
| PinVerts | Pin unselected vertices for proportional editing |
| Shot Manager | Render manager |
| fSpy | Still image camera matching |
| KeenTools GeoTracker | Geometry tracking |
| Dream Textures | AI-generate textures |
| Pallaidium | AI-generate video, image, and audio |
| PhyX | Scene layout tool |
| Engon | Asset browser |
| Udin Shaders | Car shaders |
| Poly Quilt | Retopology tool |
| StoryPencil | Storyboarding tools |
| Gaffer | Light & HDRI manager |
| Light Manager | Light manager |
| Sketchup Importer | Tested with 3.6 |
| Compify | Compositing in 3D space |
| 3DGS Render | Gaussian Splatting editor/renderer |
| DreamUV | Manipulate UVs in the 3D viewport |
| BoltFactory | Parametric bolt and nut generator |
| Sculpt Bridge Tool | Bridge or punch holes in meshes |
| Shaders Plus | Caustics, thin film, dispersion |
| Gobos Plus | Procedural & 4K gobos |
| IES Plus | Procedural IES light nodes |
| Light Wrangler | Modify lights faster with shortcuts |
| Lens Sim | Bokeh, chromatic aberration simulation |
| nijiGPen | 2D graphic design with Grease Pencil |
| Grease Pencil Tool Wheel | Extended pie menu for GP tools |
| Camera Plane | Import images stuck to camera |
| Timelapse Orbit | Rotating viewport recording |
| Target, Please! | Targeting add-on |
| IKEA Browser | Download IKEA furniture in Blender |
| Batch Exporter | Batch export tool |
| 3D Print Toolbox | 3D print analysis tools |
| Motion Sounds | Generate sound from animation |
Scripts โ
Assign materials by object name โ
Assigns a material to each selected mesh if a material with the same name exists.
python
import bpy
selected_objects = bpy.context.selected_objects
for obj in selected_objects:
if obj.type == 'MESH':
matching_material = bpy.data.materials.get(obj.name)
if matching_material:
obj.data.materials.clear()
obj.data.materials.append(matching_material)
print(f"Assigned material '{matching_material.name}' to object '{obj.name}'")
else:
print(f"No matching material found for object '{obj.name}'")
print("Material assignment complete for selected objects.")Import KitBash3D models into Asset Browser โ
Sorts KB3D pack objects into collections and registers them as assets. Run inside Blender's Text Editor.
Setup:
- Open your KB3D pack (textures loaded, scene named
KB3D_"TitleCasePackName"-Native) - Create a folder in your Asset Library path (e.g.
D:/BlenderAssetLibraries/KB3D/CyberDistricts/Cyberdistricts.blend) - Run the script with
Alt + P
python
import bpy
import os
from pathlib import Path
import uuid
file_name = str(bpy.data.scenes.keys()[0].split('_')[1].split('-')[0])
folder = Path(bpy.data.filepath).parent
new_uuid = str(uuid.uuid4())
collection_map = {
"Props": "Prop",
"Buildings": "Bldg",
"Structures": "Strc",
"Vehicles": "Vehi",
"Creatures": "Crea"
}
kit_catalog = {}
flipped_cmap = {v: k for k, v in collection_map.items()}
primary_collections = ["Props", "Buildings", "Structures", "Vehicles", "Creatures", "Other"]
for collection_name in primary_collections:
new_collection = bpy.data.collections.new(collection_name)
bpy.context.scene.collection.children.link(new_collection)
for obj in bpy.data.objects:
if obj.type == "EMPTY" and obj.name.startswith("KB3D_"):
asset_type = obj.name.split("_")[2][:4]
cm_col_name = flipped_cmap.get(asset_type, "Other")
new_collection = bpy.data.collections.new(obj.name)
bpy.data.collections[obj.name].objects.link(obj)
cm_col = bpy.data.collections[cm_col_name]
bpy.data.collections[cm_col.name].children.link(bpy.data.collections[obj.name])
kit_catalog[obj.name] = cm_col.name
for obj in bpy.data.objects:
if obj.type == "MESH" and obj.parent is not None:
bpy.data.collections[obj.parent.name].objects.link(obj)
for empty in bpy.data.objects:
if empty.type == 'EMPTY' and empty.name.startswith('KB3D_'):
bpy.context.scene.collection.objects.unlink(empty)
for child in empty.children:
bpy.context.scene.collection.objects.unlink(child)
for col in bpy.data.collections:
if col.name.startswith('KB3D_'):
col.asset_mark()
empty_objects = [obj for obj in bpy.data.objects if obj.type == "EMPTY" and obj.name.startswith("KB3D_")]
for obj in empty_objects:
obj.location = (0, 0, 0)
asset_catalog_path = folder / "blender_assets.cats.txt"
lines = []
asset_uuids = {}
with asset_catalog_path.open('a+') as f:
f.seek(0)
lines = f.readlines()
if os.path.getsize(asset_catalog_path) == 0:
lines.extend([
"# This is an Asset Catalog Definition file for Blender.\n",
"#\n",
"# Empty lines and lines starting with `#` will be ignored.\n",
"# The first non-ignored line should be the version indicator.\n",
'# Other lines are of the format "UUID:catalog/path/for/assets:simple catalog name"\n',
"\n",
"VERSION 1\n\n"
])
file_contents = ''.join(lines)
collection_uuids = {cn: [] for cn in collection_map.keys()}
collection_uuids["Other"] = []
if file_name not in file_contents:
if "KB3D" not in file_contents:
lines.append(f"{str(uuid.uuid4())}:KB3D:KB3D\n")
lines.append(f"{str(uuid.uuid4())}:KB3D/{file_name}:{file_name}\n")
for collection_name in collection_map.keys():
asset_uuid = str(uuid.uuid4())
asset_uuids[collection_name] = asset_uuid
lines.append(f"{asset_uuid}:KB3D/{file_name}/{collection_name}:{collection_name}\n")
asset_uuid = str(uuid.uuid4())
asset_uuids["Other"] = asset_uuid
lines.append(f"{asset_uuid}:KB3D/{file_name}/Other:Other\n")
with asset_catalog_path.open("w") as f:
f.writelines(lines)
kit_catalog = {}
for col in bpy.data.collections:
if col.name.startswith("KB3D_"):
asset_type = col.name.split("_")[2][:4]
asset_name = flipped_cmap.get(asset_type, "Other")
col.asset_data.catalog_id = asset_uuids[asset_name]
print(f"Adding {col.name} -> {asset_name}")