← All ideas
  • Published 4 Sep 2026

Proposal: Native "Duplicate with Modifiers Applied" / "Create Mesh Snapshot"

Problem & Workflow Bottleneck

Currently, duplicating an object at a specific point in time with all its modifiers pre-applied is unnecessarily tedious.

For instance, when working with a Cloth Simulation , Geometry Nodes setup , or complex Deformation Modifiers , an artist often needs to freeze a mesh at a specific frame and duplicate it as a static snapshot.

To achieve this natively, users currently have to go through multiple manual steps (e.g., duplicating the object, converting to mesh via Object > Convert > Mesh , or manually applying and removing modifiers on the copy), which breaks the flow and disrupts non-destructive setups.


Proposed Solution

Add a dedicated operator in the Object Menu alongside Duplicate Objects ( Shift+D ) and Duplicate Linked ( Alt+D ), such as Duplicate with Modifiers Applied (or Create Mesh Snapshot ).

  • Location: Object > Duplicate > Duplicate with Applied Modifiers
  • Behavior: It duplicates the selected object(s) at the current frame using the evaluated mesh state (freezing physics, procedural nodes, and deformation modifiers into static geometry) while leaving the original object completely untouched.

Why This Matters

This simple quality-of-life feature bridges a major gap for:

  • 3D Artists & Animators: Easily grabbing frozen frames from physics simulations (cloth, soft bodies, particles) without destroying the sim setup.
  • Procedural/Geometry Nodes Designers: Quick snapshotting of procedural assets into static meshes for exporting or manual sculpting.
  • Environment Designers: Scattering assets and baking specific instances into static meshes on the fly.

Technical Proof of Concept (Python API)

To demonstrate how straightforward this logic is, a basic proof-of-concept can already be implemented using Blender's evaluated dependency graph and bpy.data.meshes.new_from_object() :

import bpy

def create_mesh_snapshot(context, obj):
    # Get evaluated mesh at current frame
    depsgraph = context.evaluated_depsgraph_get()
    obj_eval = obj.evaluated_get(depsgraph)

    # Extract static mesh from evaluated state
    frame = context.scene.frame_current
    new_mesh = bpy.data.meshes.new_from_object(
        obj_eval, 
        preserve_all_data_layers=True, 
        depsgraph=depsgraph
    )
    new_mesh.name = f"{obj.data.name}_Snapshot_F{frame}"

    # Create new static object
    new_obj = bpy.data.objects.new(f"{obj.name}_Snapshot_F{frame}", new_mesh)
    new_obj.matrix_world = obj.matrix_world.copy()

    # Link to current collection
    context.collection.objects.link(new_obj)
    return new_obj
66.7%

Development Status: Open

Upvote 2 Downvote 1
rolli
4 Sep 2026

1 Comment

khellstr

Visual Geometry to Objects command does exactly this.

docs.blender.org/manual/en/latest/scene_layout/object/editing/apply.html