Free and open-source 3D creation suite supporting the entire pipeline. Modeling, sculpting, animation, VFX, compositing, motion tracking and video editing.
Tips โ
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}")