Placing and previewing NPR characters on a background in the editor

Character System

300+ characters from a single Blueprint

UE5 · C++ · Blueprint — Company, 2024–2026 · Live Service: cinev.com

Problem

As the character count approached 300, we needed a pipeline to systematically manage parts assembly, registration, preview, and loading. Opening the editor pulled in all assets via hard references, requiring a 30-second wait. Checking colors or animations meant launching the game every time. With external VRM support added, manually setting up cameras and thumbnails per model became yet another burden.

Solution

I proposed a VRM save/load prototype using vrm4u early on, which was adopted and is now running in production. I split the work into three systems: an Editor tool, a Runtime character Blueprint, and VRM Reference Points. Each loads Data Assets or external models and lets you verify them against the in-house shader and animations. Artists assemble parts and register presets in the editor, producing Data Assets that the runtime loads asynchronously.

NRC Data Asset — Info, Base, Parts, Outline, Chaos Cloth settings

NRC Data Asset — managing parts, materials, outline, and Chaos Cloth settings in one place

Editor preview — verifying NPR character placement on a background

Editor preview — checking NPR characters on background without launching the game

Result

Category Before After Improvement
Editor Load 30s 6s 80%↓
Packaged Load Several seconds Perceived 0s Eliminated
Character Presets - 300+ Unified

System Structure

Three separate codebases, connected through Data Assets and VRM info nodes. The editor tool produces Data Assets. The runtime Blueprint loads them async. VRM Reference Points handles external model info.

[1] NPR Character Manager (C++ Plugin)
    └─ BP_Character_EnvCheck ─── Editor (for artists)
        ├─ Parts assembly (Head/Hair/Body)
        ├─ Preset save → Data Asset production
        └─ Editor Tick → Preview without PIE

                    Data Asset ─────┐
                                    ▼
[2] BP_Basemodel_TF ─────────── Runtime (inherits CinevCharacter)
    ├─ Internal: Data Asset → Per-part async load
    └─ External: VRM loader → Whole-model load
                    ▲
                    │ VRM info node update
                    │
[3] VRM Reference Points ──── VRM4U Plugin (C++)
    ├─ 4-level fallback face detection (crown/eyes/mouth/nose)
    └─ Camera target + automatic thumbnail capture
CinevNPRCharacterManager C++ plugin headers

CinevNPRCharacterManager — C++ plugin headers

Editor — Character Environment Checker

Artists assemble head, hair, and body parts in the editor and save them as presets. The Editor Tick Interface allows verifying characters and animations on a background without launching the game. The runtime reads these Data Assets directly.

C++ Header — NPRCharacterLookDev UPROPERTY declarations

C++ character actor header — DataTable reference declarations

BP_Character_EnvCheck — Character registration UI BP_EditorTicker + BPI_EditorTick node graph

Editor Tick — preview without PIE

Runtime — Character Blueprint

A separate codebase from the editor tool -- a runtime character Blueprint inheriting the base character class. Internal characters load parts asynchronously from editor-produced Data Assets (Head/Hair/Body split), while external VRM loads the entire model through a loader. The same Blueprint handles both, branching only at the load path.

BP_Basemodel_TF — Loading NRC Data Asset from DataTable BP nodes — Unified/split skeletal mesh load branching

Unified / split skeletal mesh load branching

External Model Support — VRM Reference Points

A C++ module written for the VRM4U plugin that updates VRM info nodes in the runtime character Blueprint. It auto-detects the face position of any external VRM/PMX via a 4-level fallback, then uses the result as a camera target to automatically capture 3-angle thumbnails (face close-up, upper body, full body). A commandlet environment enables batch thumbnail generation for all characters without opening the editor. A-pose/T-pose detection is also automatic.

C++ Header — Mouth and Nose Detection Priority 1-4 fallback

C++ header — Mouth/Nose 4-level fallback detection

Auto face detection running on an external VRM

VRM Reference Points auto-thumbnail — face, upper body, and full body 3-angle auto-capture results

3-angle auto-captured thumbnails

C++ — CalculateCameraDistanceForFace/UpperBody with margin and aspect ratio

C++ — auto camera distance calculation for 3-angle thumbnails

C++ — PerformRenderWarmup and RenderFrame for thumbnail capture

C++ — commandlet render frame capture (Lumen GI, SSS warmup)

Internal and external VRM character lineup

In-house + external VRM character lineup

← Matcap Painter NPR Shader System →