Edit of asset "Static Mesh Merger" Accepted

Old/Current New/Edit
Title Static Mesh Merger Static Mesh Merger
Description # Static Mesh Merger

### Lightweight static mesh batching for Godot 4

**Mesh Merger** is a lightweight Godot editor plugin that combines multiple static `MeshInstance3D` nodes into a single optimized mesh while preserving existing collision data.

Select the meshes you want to merge, click **Merge Selected** in the 3D editor, and Mesh Merger handles the rest.

> **Less clutter. Fewer objects. Same geometry. Existing collision preserved.**

## Features

* **Merge selected meshes** into a single `ArrayMesh`
* **Preserve materials and textures** from the original meshes
* **Preserve existing collision hierarchies** without modifying their collision shapes
* **Move preserved collision** under the newly created merged mesh
* **Remove the original mesh hierarchies** after a successful merge
* **Create a new `MeshInstance3D`** containing the merged geometry
* **Save merged meshes** as reusable `.res` resources
* **Automatically back up original nodes** before making changes
* **Keep backup scenes out of exported builds**
* **Editor-only workflow** — no runtime systems or scripts required

## Collision Preservation

Mesh Merger does **not** attempt to generate, convert, or rebuild collision geometry.

If a selected mesh has an existing collision hierarchy such as:

```text
MeshInstance3D
└── StaticBody3D
└── CollisionShape3D
```

the collision hierarchy is preserved without modification.

After merging, it becomes part of the new merged mesh hierarchy:

```text
MeshInstance3D_merged
└── Collision
└── StaticBody3D
└── CollisionShape3D
```

The original collision shape remains the same resource and shape type.

This means Mesh Merger can preserve Godot collision shapes such as:

* `BoxShape3D`
* `SphereShape3D`
* `CapsuleShape3D`
* `CylinderShape3D`
* `ConvexPolygonShape3D`
* `ConcavePolygonShape3D`
* Other existing `CollisionShape3D` configurations

Mesh Merger simply preserves the collision data that already exists rather than trying to recreate it.

> **If your mesh already has collision, Mesh Merger keeps it.**

## Great for Open-World Games

Mesh Merger is particularly useful for **large open-world environments** where thousands of static objects can make a scene unnecessarily expensive to manage.

Large environments are often built from hundreds or thousands of smaller modular pieces:

```text
Open World
├── House
│ ├── Wall
│ ├── Roof
│ ├── Window
│ └── Door
├── Rocks
├── Trees
├── Ruins
├── Cliffs
└── Decorations
```

Many of these objects never need to move independently.

Mesh Merger lets you combine appropriate static sections into larger meshes:

```text
Open World
├── Village_merged
├── Forest_merged
├── Ruins_merged
├── Cliffs_merged
└── Decorations_merged
```

This can reduce the number of individual scene objects Godot needs to manage while keeping the underlying geometry intact.

For open-world projects, you can also merge **smaller logical sections** rather than turning the entire world into one enormous mesh. This keeps your environment modular while still reducing unnecessary object overhead.

> **Build your world from modular pieces. Merge the pieces that don't need to stay separate.**

## How It Works

Before:

```text
Environment
├── Rock_01
├── Rock_02
├── Rock_03
├── Rock_04
├── Rock_05
└── Rock_06
```

After clicking **Merge Selected**:

```text
Environment
└── Rock_merged
```

The individual meshes are combined into one mesh while their materials are preserved.

If collision exists, it is preserved as well:

```text
Before

Environment
├── Rock_01
├── Rock_02
│ └── StaticBody3D
│ └── CollisionShape3D
└── Rock_03
```

becomes:

```text
After

Environment
└── Rock_merged
└── Collision
└── StaticBody3D
└── CollisionShape3D
```

The original collision data is not regenerated or converted.

Your original nodes are also backed up automatically, so you have a way to recover them if needed.

## Is This Nanite?

**No.**

Mesh Merger is nowhere near as sophisticated as Nanite.

It does **not** provide:

* Virtualized geometry
* Hierarchical cluster culling
* Automatic geometric LOD
* Geometry streaming
* Nanite-style visibility management

Instead, Mesh Merger takes a much simpler approach:

> **Combine lots of static objects into fewer objects.**

Think of it as a small, editor-side **static mesh batching tool** rather than a Nanite replacement.

## Best Used For

Mesh Merger is designed primarily for **static level geometry**, including:

* Open-world environments
* Environment pieces
* Buildings
* Rocks
* Props
* Decorations
* Modular level sections
* Large static structures
* Other geometry that doesn't need to move independently

It's especially useful when a scene contains large numbers of small static meshes that don't need to remain separate at runtime.

## Safety First

Mesh Merger creates a backup **before modifying the scene**.

Backups are stored in:

```text
res://merge_backups/
```

The plugin also prevents these backup scenes from being included in exported builds.

Merged meshes are stored in:

```text
res://meshes/
```

So your original scene data isn't simply thrown into the void.

## Usage

1. Select the `MeshInstance3D` nodes you want to merge.
2. Click **Merge Selected** in the 3D editor.
3. Mesh Merger creates a backup.
4. The meshes are combined into a single `ArrayMesh`.
5. Existing collision hierarchies are preserved without modification.
6. The original mesh hierarchies are removed.
7. A new `MeshInstance3D` is created with the merged geometry.
8. Preserved collision hierarchies are placed under the new merged mesh.
9. The merged mesh resource is saved for reuse.

That's it.

## Requirements

* **Godot 4.x**
* Static `MeshInstance3D` geometry

## Limitations

Mesh Merger is intentionally simple.

It does **not** automatically provide:

* Runtime mesh merging
* Dynamic object support
* LOD generation
* Occlusion culling
* Geometry streaming
* Automatic collision generation
* Collision shape conversion
* Nanite-style virtualized geometry

Collision is **preserved**, not generated.

If an object has no existing collision, Mesh Merger will not create collision for it.

If an object needs to move independently, animate independently, or otherwise remain a separate object, **don't merge it**.

## Why?

Godot can handle a lot of geometry, but a scene containing thousands of individual static objects can create unnecessary overhead.

Mesh Merger provides a simple editor-side solution:

**Build your level normally → add collision where needed → merge what doesn't need to stay separate → ship a cleaner scene.**

No runtime plugin logic. No complicated setup. Just merge and go.

---

### Status

**Early release / actively developing**

If you find a bug or have an idea for an improvement, feel free to open an issue or contribute.
# Static Mesh Merger

### Lightweight static mesh batching for Godot 4

**Mesh Merger** is a lightweight Godot editor plugin that combines multiple static `MeshInstance3D` nodes into a single optimized mesh while preserving existing collision data.

Select the meshes you want to merge, click **Merge Selected** in the 3D editor, and Mesh Merger handles the rest.

> **Less clutter. Fewer objects. Same geometry. Existing collision preserved.**

## Features

* **Merge selected meshes** into a single `ArrayMesh`
* **Preserve materials and textures** from the original meshes
* **Preserve existing collision hierarchies** without modifying their collision shapes
* **Move preserved collision** under the newly created merged mesh
* **Remove the original mesh hierarchies** after a successful merge
* **Create a new `MeshInstance3D`** containing the merged geometry
* **Save merged meshes** as reusable `.res` resources
* **Automatically back up original nodes** before making changes
* **Keep backup scenes out of exported builds**
* **Editor-only workflow** — no runtime systems or scripts required

## Collision Preservation

Mesh Merger does **not** attempt to generate, convert, or rebuild collision geometry.

If a selected mesh has an existing collision hierarchy such as:

```text
MeshInstance3D
└── StaticBody3D
└── CollisionShape3D
```

the collision hierarchy is preserved without modification.

After merging, it becomes part of the new merged mesh hierarchy:

```text
MeshInstance3D_merged
└── Collision
└── StaticBody3D
└── CollisionShape3D
```

The original collision shape remains the same resource and shape type.

This means Mesh Merger can preserve Godot collision shapes such as:

* `BoxShape3D`
* `SphereShape3D`
* `CapsuleShape3D`
* `CylinderShape3D`
* `ConvexPolygonShape3D`
* `ConcavePolygonShape3D`
* Other existing `CollisionShape3D` configurations

Mesh Merger simply preserves the collision data that already exists rather than trying to recreate it.

> **If your mesh already has collision, Mesh Merger keeps it.**

## Great for Open-World Games

Mesh Merger is particularly useful for **large open-world environments** where thousands of static objects can make a scene unnecessarily expensive to manage.

Large environments are often built from hundreds or thousands of smaller modular pieces:

```text
Open World
├── House
│ ├── Wall
│ ├── Roof
│ ├── Window
│ └── Door
├── Rocks
├── Trees
├── Ruins
├── Cliffs
└── Decorations
```

Many of these objects never need to move independently.

Mesh Merger lets you combine appropriate static sections into larger meshes:

```text
Open World
├── Village_merged
├── Forest_merged
├── Ruins_merged
├── Cliffs_merged
└── Decorations_merged
```

This can reduce the number of individual scene objects Godot needs to manage while keeping the underlying geometry intact.

For open-world projects, you can also merge **smaller logical sections** rather than turning the entire world into one enormous mesh. This keeps your environment modular while still reducing unnecessary object overhead.

> **Build your world from modular pieces. Merge the pieces that don't need to stay separate.**

## How It Works

Before:

```text
Environment
├── Rock_01
├── Rock_02
├── Rock_03
├── Rock_04
├── Rock_05
└── Rock_06
```

After clicking **Merge Selected**:

```text
Environment
└── Rock_merged
```

The individual meshes are combined into one mesh while their materials are preserved.

If collision exists, it is preserved as well:

```text
Before

Environment
├── Rock_01
├── Rock_02
│ └── StaticBody3D
│ └── CollisionShape3D
└── Rock_03
```

becomes:

```text
After

Environment
└── Rock_merged
└── Collision
└── StaticBody3D
└── CollisionShape3D
```

The original collision data is not regenerated or converted.

Your original nodes are also backed up automatically, so you have a way to recover them if needed.

## Is This Nanite?

**No.**

Mesh Merger is nowhere near as sophisticated as Nanite.

It does **not** provide:

* Virtualized geometry
* Hierarchical cluster culling
* Automatic geometric LOD
* Geometry streaming
* Nanite-style visibility management

Instead, Mesh Merger takes a much simpler approach:

> **Combine lots of static objects into fewer objects.**

Think of it as a small, editor-side **static mesh batching tool** rather than a Nanite replacement.

## Best Used For

Mesh Merger is designed primarily for **static level geometry**, including:

* Open-world environments
* Environment pieces
* Buildings
* Rocks
* Props
* Decorations
* Modular level sections
* Large static structures
* Other geometry that doesn't need to move independently

It's especially useful when a scene contains large numbers of small static meshes that don't need to remain separate at runtime.

## Safety First

Mesh Merger creates a backup **before modifying the scene**.

Backups are stored in:

```text
res://merge_backups/
```

The plugin also prevents these backup scenes from being included in exported builds.

Merged meshes are stored in:

```text
res://meshes/
```

So your original scene data isn't simply thrown into the void.

## Usage

1. Select the `MeshInstance3D` nodes you want to merge.
2. Click **Merge Selected** in the 3D editor.
3. Mesh Merger creates a backup.
4. The meshes are combined into a single `ArrayMesh`.
5. Existing collision hierarchies are preserved without modification.
6. The original mesh hierarchies are removed.
7. A new `MeshInstance3D` is created with the merged geometry.
8. Preserved collision hierarchies are placed under the new merged mesh.
9. The merged mesh resource is saved for reuse.

That's it.

## Requirements

* **Godot 4.x**
* Static `MeshInstance3D` geometry

## Limitations

Mesh Merger is intentionally simple.

It does **not** automatically provide:

* Runtime mesh merging
* Dynamic object support
* LOD generation
* Occlusion culling
* Geometry streaming
* Automatic collision generation
* Collision shape conversion
* Nanite-style virtualized geometry

Collision is **preserved**, not generated.

If an object has no existing collision, Mesh Merger will not create collision for it.

If an object needs to move independently, animate independently, or otherwise remain a separate object, **don't merge it**.

## Why?

Godot can handle a lot of geometry, but a scene containing thousands of individual static objects can create unnecessary overhead.

Mesh Merger provides a simple editor-side solution:

**Build your level normally → add collision where needed → merge what doesn't need to stay separate → ship a cleaner scene.**

No runtime plugin logic. No complicated setup. Just merge and go.

---

### Status

**Early release / actively developing**

If you find a bug or have an idea for an improvement, feel free to open an issue or contribute.
Category 3D Tools 3D Tools
License MIT MIT
Repository Provider GitHub GitHub
Repository Url https://github.com/EverettM12/Static-Mesh-Merger https://github.com/EverettM12/Static-Mesh-Merger
Issues Url https://github.com/EverettM12/Static-Mesh-Merger/issues https://github.com/EverettM12/Static-Mesh-Merger/issues
Godot version Godot 4.0 Godot 4.0
Version String 1.0.1 1.0.1
Download Commit 14f3d2378b74f52d7e9e0e9a63d0b21cec650743 14f3d2378b74f52d7e9e0e9a63d0b21cec650743
Download Url (Computed) https://github.com/EverettM12/Static-Mesh-Merger/archive/14f3d2378b74f52d7e9e0e9a63d0b21cec650743.zip https://github.com/EverettM12/Static-Mesh-Merger/archive/14f3d2378b74f52d7e9e0e9a63d0b21cec650743.zip
Icon Url https://raw.githubusercontent.com/EverettM12/Static-Mesh-Merger/main/addons/mergingmeshes/plugin.png
https://raw.githubusercontent.com/EverettM12/Static-Mesh-Merger/main/addons/mergingmeshes/plugin.png
Preview Insert
Type image
Image/Video URL https://raw.githubusercontent.com/EverettM12/Static-Mesh-Merger/main/button.png
Thumbnail
Preview Insert
Type image
Image/Video URL https://raw.githubusercontent.com/EverettM12/Static-Mesh-Merger/main/backup.png
Thumbnail
Preview Insert
Type image
Image/Video URL https://raw.githubusercontent.com/EverettM12/Static-Mesh-Merger/main/finalproduct.png
Thumbnail