MAURICIO PORRASOVISUALS
← Technical Work
Artist Tools

Artist Tool Development

A suite of Unreal Editor Utility tools built with Python and C++ to remove repetitive setup work from environment artists' daily loop.

PythonC++UE Editor Tools
01

Overview

A focused suite of Unreal Editor Utility Widgets and Python-backed tools that handle the repetitive parts of an environment artist's day: batch renaming and re-parenting, material ID assignment, scene-wide validation sweeps, and one-click LOD/collision setup for hand-placed assets that fall outside the procedural pipeline.

None of these tools do anything an artist couldn't do by hand — they just do it in seconds instead of an afternoon, and they do it the same way every time.

02

Challenge

Environment artists were spending a meaningful chunk of their time on setup work that had nothing to do with actual environment art: renaming batches of imported assets to match convention, manually assigning collision presets, re-running the same validation checklist before a scene could be marked review-ready. It was necessary work, but it was also exactly the kind of work that's tedious to do by hand and inconsistent when different artists do it slightly differently.

03

Design Goals

  • Every tool should live inside the Editor Utility Widget UI artists already use daily — no external scripts to run.
  • Batch operations need an undo path; nothing should be a one-way door.
  • Validation tools report problems in plain language, not engine error codes.
  • Performance-sensitive operations (batch re-parenting, mesh analysis) belong in C++, not Python.
  • Tools should degrade gracefully — a partially-successful batch operation reports exactly what did and didn't apply.
04

System Design

The suite splits along a simple line: anything that touches the editor UI or orchestrates a workflow is Python, driven through Editor Utility Widgets; anything that needs to run over thousands of actors or static mesh components in a single frame — batch re-parenting, mesh complexity analysis — is a native C++ Blueprint Function Library exposed back to those same widgets.

Step 01Editor Utility Widget
Step 02Python Orchestration
Step 03C++ Function Library
Step 04Validation Report
05

Implementation

The widgets themselves are built with UMG inside Editor Utility Widgets, giving artists a familiar panel-based UI rather than a command palette. Batch operations — rename, re-parent, assign material ID, apply collision preset — are implemented in Python for fast iteration, since the logic changes often as conventions evolve.

The one exception is anything that has to scan or mutate a large number of actors or components in the level: a native C++ Blueprint Function Library handles mesh-complexity analysis and bulk re-parenting, since a Python loop over several thousand actors was measurably slow enough to make the tool feel unresponsive. The Python layer calls into that library and only handles orchestration and UI.

Every batch operation records what it changed before applying it, so a single "Undo Last Operation" button in the widget can fully revert a batch — including partially-failed ones.

Editor Utility Widget — batch rename tool
Scene validation report panel
06

Results

Setup and validation work that previously took the better part of an afternoon per scene now runs in under a minute, and the undo path meant artists trusted the tools enough to actually use the batch operations instead of falling back to doing things by hand "to be safe." Validation reports surfaced real, actionable problems (unassigned collision, missing LODs, naming drift) before scenes reached review, catching issues that had previously slipped through to playtest.

07

Lessons Learned

Putting the Python/C++ boundary at "does this touch a lot of actors at once" rather than anywhere else turned out to be the right line — it kept iteration fast on the parts that change often (workflow logic, UI) while keeping the parts that need raw performance out of the interpreter entirely.

The undo system was originally scoped as a "nice to have" and ended up being the single feature that determined whether artists trusted the tools enough to adopt them. Future versions are aimed at extending validation coverage to material instance parameter drift, which currently still requires a manual spot-check.