meants.dev작동하는 것 까지만 구현 완료.
그 이후 과정은 아트 퀄리티 업 과정이라 텍스쳐/머티리얼/애니메이션 키 수정 위주라서 여기서 마무리 하였음.
meants.dev
meants.dev도파민 최고 업무 중 하나였던 이 사악한 물건은 UI 디자인/애니메이션 전부 머티리얼만으로 스킬 연출 UI를 만들어서 포스트 프로세스에 적용한 결과물이다. 누구에게 일감을 넘겨야 했는지 모르고 재밌어 보여서 덥석 물었지만.. (이 업무 덕분에 다른 팀원도 지옥길을 걸었다.🙃)
UMG와 MCP 사용법을 익히기 위한 스터디. 새로 뭔가 기획부터 하면 시간이 너무 많이 들어서, 예전에 만들어봤던 결과물을 다시 구현하는 방식으로 시간에 대한 비용을 줄였다.
ChiR24/Unreal_mcp (npm: unreal-engine-mcp-server v0.5.21).
McpAutomationBridge) 조합이다.구조 요약:
Claude Code ──(stdio)──> MCP 서버 (Node.js/TypeScript)
│
├─ HTTP 8090 ┐
└─ WS 8091 ┴─> UE Editor
(McpAutomationBridge 플러그인).mcp.json으로 MCP 서버 프로세스(dist/cli.js)를 stdio로 띄움McpAutomationBridge 플러그인이 Remote Control / Automation API 래핑해서 실제 에디터 조작을 실행처음엔 수정 없이 그대로 돌려봤는데 알고보니 다운받은 MCP는 5.4 기준으로 제작된거라 5.7.4에서 바뀐 API 때문에 일부 기능이 작동하지 않았고 실시간으로 작동되게 고쳐가면서 사용중이다.
meants.dev이번엔 스터디용이라 전부 그대로 제작하진 않고, 라인(외곽선)만 그려서 준비하였다.
meants.dev원본은 스킬 발동 시 화면 전체를 덮는 포스트 프로세스 머티리얼 하나에 UI와 이펙트를 모두 우겨넣은 구조였다. 이번 제작 땐 두 갈래로 쪼갰다:
역할을 이렇게 나눈 덕에 애셋 복잡도 자체도 같이 해소됐다. 원본은 머티리얼 한 장에 UI·이펙트·애니가 섞여 있어서 노드 그래프를 열면 어디를 수정해야 하는지 시간도 걸리고, 유지보수도 힘들었는데, 이번엔 역할별로 파일이 쪼개져 있어서 어디를 볼지가 바로 보인다. Image 자체는 12장이지만 좌우 반전으로 공유되는 파츠가 있어 실제 MI 애셋은 5장 수준이다.
원본은 포스트 프로세스 머티리얼 하나가 UI까지 전부 들고 있었지만, 이번엔 UMG 학습이 목적이라 파츠 단위로 잘라 WBP에 적용하였다.
원본 PP 한 장에 다 들어있던 UI 파츠를 12개로 잘라 배치하고, 각 파츠가 공용 UI 머티리얼 인스턴스를 물고 독립적으로 제어되도록 했다. 파츠별 등장/해제 타이밍은 위젯 애니메이션 트랙으로 따로 만들어 머티리얼과 완전히 분리했다.
BP_VisorHUDController포스트 프로세스 머티리얼·위젯·MPC 사이의 신호를 한 곳에서 모아주는 허브. 매 프레임 버프 진행도를 머티리얼로 흘려보내고, 경고 페이즈 진입 순간을 한 번 기록해 PP에 적용하며, 위젯엔 진행도와 경고 색상 신호를 전달해 12개 파츠가 동시에 반응하게 한다.
flowchart LR
subgraph BP_Group["BP"]
Controller[BP_VisorHUDController]
end
subgraph WBP_Group["WBP"]
Widget[WBP_VisorHUD]
end
subgraph Mat_Group["Material"]
MPC[("MPC_VisorHUD<br/>BuffProgress")]
PPMID["M_PP_VisorHUD MID"]
UIMID["M_UI × 12 MID"]
end
Controller -->|"Tick: BuffProgress 갱신"| MPC
MPC -.->|"읽기"| PPMID
Controller -->|"WarningStartTime (1회)"| PPMID
Controller -.->|"AddOrUpdateBlendable"| PPMID
Controller -->|"UpdateProgress(Progress)"| Widget
Controller -->|"SetWarningColors(BlendValue)"| Widget
Widget -->|"Progress (TopMiddle03만)"| UIMID
Widget -->|"WarningBlend (12 팬아웃)"| UIMID작동 모션은 상단의 원본과 비슷하지만, 내부 구조는 꽤 달라졌다. 이전에 작업했을 때에는 애니메이션까지 포스트 프로세스 머티리얼에 전부 들어가 있어서 셰이더 자체가 꽤 무거웠지만 이번엔 UMG를 도입해서 UI 머티리얼이 UI 표현 하는 정도로 매우 가벼워졌고, 파츠별 등장/해제 타이밍도 Widget Animation(Render Opacity)으로 빠졌다.
다만 그렇게 전체가 가벼워졌다고 단정하긴 이르다. 런타임엔 12개 Image 각자가 MID를 물고 움직이는 구조라 드로우콜/UI 블렌드 쪽에서 새로운 비용이 생겼을 가능성이 있다. 머티리얼 한 장에 몰아넣었을 때의 셰이더 부담 vs. Image 12장 × MID 업데이트 × UI 오버드로우, 어느 쪽이 실제로 더 무거운지는 추후 퍼포먼스 테스트로 비교해볼 예정이다.
MCP는 제작 골격이 잡힌 뒤에 써야 훨씬 더 빠른 결과물을 낼 수 있다. MID 12개 선언, SetScalarParameterValue 팬아웃처럼 똑같은 노드가 반복되는 블록은 확실히 빠르다. 반면 초반처럼 뭘 만들지 자체가 흐릿할 땐 "이 Lerp의 B쪽에 이걸 붙이고…"를 말로 풀어내는 비용이 에디터에서 직접 드래그하는 것보다 더 번거롭고 AI 비용을 헛되게 쓸 수 있다. 골격이 잡힌 뒤의 기계적인 작업만 넘기는 게 안정적이었지만 색수차, 글리치 표현 같은 명사 단위로 표현할 수 있는 작업은 의외의 좋은 결과물을 가져오기도 했다.