언리얼 엔진 라이브 대작들(세븐나이츠 2 · 블레이드&소울 2 · 리니지 W/2M · 배틀 크러쉬)에서 UI 연출과 스킬·시네마틱 FX를 만들어 왔고, 현재는 Unity 모바일 퍼즐의 게임필과 자동화 파이프라인을 다룹니다. 이펙트 한 발의 타이밍부터 3,815개 이펙트를 처리하는 캡처 파이프라인까지 — 엔진을 가리지 않고 게임의 비주얼 피드백 전체를 책임집니다.
※ 지금 보고 계신 이 페이지의 모든 이펙트는 외부 영상이 아니라, 자체 제작 플립북 엔진이 원본 시트를 실시간 재생하는 것입니다. 직접 제작분과 파이프라인으로 수집한 레퍼런스는 카드의 출처 배지로 구분됩니다.
이펙트·UI연출·테크니컬 아트는 결국 같은 질문에 답하는 일입니다. "이 순간이 플레이어에게 어떻게 느껴지는가?"
0.08초짜리 임팩트 플래시부터 150프레임 궁극기 루프까지, 게임 템포에 맞는 이펙트 타이밍을 설계합니다.
버튼 하나의 눌림부터 보상 획득의 카타르시스까지, UI 위에서 벌어지는 모든 움직임을 연출합니다.
Grayscale, RGBMask Dissolve)아티스트가 만든 것을 측정 가능하게, 반복 작업을 자동화 가능하게 만듭니다.
모두 언리얼 엔진 기반 타이틀입니다 — 세븐나이츠 2 · 블레이드&소울 2 · 블레이드&소울 NEO · 리니지 W · 리니지 2M · 배틀 크러쉬의 라이브 서비스에서 UMG UI 연출과 나이아가라·캐스케이드 스킬 FX, 시퀀서 시네마틱을 직접 작업했습니다. 아래 모든 캡처는 본인 작업 쇼릴 영상에서 발췌한 것이며, 각 카드의 버튼으로 영상 전체를 볼 수 있습니다.


























아래 모든 카드는 실제 게임 프로젝트에서 추출한 프레임 시퀀스/스프라이트시트를 이 페이지의 자체 플립북 엔진으로 재생하는 것입니다. 카드를 클릭하면 일시정지되고, 배속을 바꿔 타이밍 설계를 확인할 수 있습니다.
위 VFX Lab의 시퀀스들은 제가 만든 자동 캡처 파이프라인의 산출물입니다. 게임 속 이펙트 3,815개를 자동 캡처하고, 그중 3,087개를 13개 카테고리로 자동 분류해 검색 가능한 라이브러리로 만들었습니다. "이 이펙트 다른 게임에서 어땠더라?"라는 질문에 3초 안에 답하는 시스템입니다.
Unity Editor 상주 레코더. _VfxBatchTrigger.json 감지 → VFX 프리팹을 스폰·재생·프레임 캡처. 해상도/FPS/길이 설정 가능.
TypeScript CLI. Unity YAML/.meta 파싱 → GUID 맵 → 텍스처 추적. UE5 프로젝트도 지원.
투명 여백 자동 트림 → N×N 그리드 자동 산출 → 시트 출력(원본+50%). Sharp 기반 이미지 처리.
캡처 3,815개 → 분류 3,087개 검색·재생·추출 웹 뷰어. 3차에 걸쳐 자체 개량.
이펙트 레퍼런스 탐색이 작업 시간의 30%를 먹고 있었습니다. 게임별로 흩어진 이펙트를 한 번 캡처해서 영구 재사용 — 신규 프로젝트 무드보드 제작이 일 단위에서 분 단위로 줄었습니다.
v1(5.3GB 정적 HTML)은 무거웠고, v2(메타데이터+서버)는 관리성을 얻은 대신 느렸습니다. v3는 썸네일 분리·지연 로딩으로 코어를 184MB까지 경량화. 도구도 제품처럼 이터레이션합니다.
지금 보고 계신 페이지의 플립북 플레이어·시퀀스 재생·뷰포트 기반 재생 제어 모두 같은 파이프라인 철학으로 작성한 자체 제작 엔진입니다.


// 아티스트는 JSON에 프리팹 경로만 적으면 됩니다. // 에디터 상주 레코더가 감지해서 알아서 캡처합니다. { "prefabs": ["Assets/.../VFX.BloodSurge.prefab"], "width": 512, "height": 512, "fps": 30, "duration": 5.0, "background": "transparent" }
for (int f = 0; f < frameCount; f++) { yield return new WaitForEndOfFrame(); RenderTexture.active = rt; GL.Clear(true, true, new Color(0,0,0,0)); // 알파 보존 cam.Render(); readTex.ReadPixels(new Rect(0, 0, w, h), 0, 0); File.WriteAllBytes( Path.Combine(dir, $"frame_{f:D4}.png"), readTex.EncodeToPNG()); }
뱀파이어 테마의 모바일 타워디펜스. "피"라는 단일 테마를 122개 VFX 프리팹과 60+ 셰이더그래프로 변주하면서도 시인성을 잃지 않는 것이 과제였습니다. 적 9종(암살자·사냥꾼·창병·사제·마녀 등) 각각의 피격 이펙트를 속성 시스템으로 체계화했고, 전투의 핵심 보상 루프(혈액 오브 획득 → 제단 강화)는 UIParticle로 월드→UI를 끊김 없이 연결해 연출했습니다.
VFX.Hit.* 50+ 변형을 적 타입별로 운영하되, 머티리얼·텍스처는 공유 풀에서 조합. 상태이상(화상·빙결·감전)은 VFX.Status* 계열로 분리해 중첩 표현이 가능하게 설계.
RadialShockwave(충격파 왜곡), VerticalPannerWithSideFade(혈류 기둥), URPStylizedLava, UI용 RGBMask Dissolve 등 셰이더그래프로 안 되는 영역은 HLSL로 직접 작성.
mob-sakai ParticleEffectForUGUI 기반. Shared/Prefabs/UI 366종(버튼·게이지·배지·재화 연출)을 단일 체계로 운영하며, 재화 비행 연출의 Canvas 소팅·마스킹 충돌을 해결하고 획득 타이밍에 게이지 펀치 스케일을 동기화.
// 파티클 버텍스 컬러 알파를 '시간'으로 사용 → 머티리얼 복제 없이 // 파티클 시스템의 Color over Lifetime만으로 링 확산을 구동 float waveRadius = input.color.a; // 극좌표 샘플링: 각도별로 반지름을 왜곡해 '유기적인' 링을 만든다 float2 polarUV = float2(dist, normalizedAngle) * _MainTex_ST.xy + _MainTex_ST.zw; float radiusDistortion = (tex.r - 0.5) * _Distortion; float distToWave = abs(dist - (waveRadius + radiusDistortion)); // 링 두께 + 전/후 에지 페이드 + 원형 마스크 float ringMask = 1.0 - smoothstep(0.0, _Width, distToWave); float waveMask = ringMask * frontSoftness * backSoftness * circleMask;
캐주얼 퍼즐에서 이펙트는 곧 게임필(game feel)입니다. 매치 한 번의 짧은 임팩트부터 주문 완료·시즌 진행 같은 보상 연출의 여운까지 — 모두 "플레이어의 손가락이 옳았다"고 말해주는 피드백으로 설계했습니다. 연출 제작과 함께, 아트·기획의 반복 속도를 끌어올리는 에디터 툴링을 담당했습니다.
임팩트(~0.1s) → 보상(0.3~0.4s) → 무드 루프(2s)의 3계층 템포. 빠른 피드백은 짧고 강하게, 보상은 여운 있게.
FlyEffectTestMenu(연출 즉시 테스트), TMPFontResamplerWindow(폰트 리샘플), StageEditor(레벨 편집), AutoPlayEditor(자동 플레이 검증) — 아트·기획 반복 속도를 끌어올리는 도구들.
푸드트럭 테마 로비의 시즌 진행 HUD, 주문 보드의 접수·클리어 피드백 — 연출은 시안이 아니라 운영 빌드에서 검증됩니다.


털실 드래곤을 조작하는 캐주얼 퍼즐. 같은 게임을 Unity(네이티브)와 PixiJS(웹) 두 갈래로 구현하면서, 플랫폼이 달라도 동일한 비주얼 아이덴티티를 유지하는 것이 핵심 과제였습니다. Unity 쪽은 양털 질감을 위한 커스텀 셰이더를, 웹 쪽은 44프레임 플립북 VFX를 제작했습니다.
표준 Lit은 양털을 광택 플라스틱처럼 만듭니다. Wrapped Lambert(부드러운 명암 경계) + Fresnel Rim(실루엣의 보풀 빛) + 무광 처리로 섬유 질감을 표현. ShadowCaster/DepthOnly 패스까지 URP 완전 대응.
프리팹 없이 코드로 생성하는 2계층 파티클(보풀 퍼프 + 스파크). 색상 틴트를 게임 로직(실 색깔)과 연동해 9색 변형을 에셋 추가 없이 처리.
HudController.cs — HP/실타래 게이지, 퍼즐 그리드, 승패 모달을 전부 런타임 생성. 와일드카드 펄스 링 등 상태 연출 포함. 프리팹 머지 충돌 없는 UI 워크플로.
// Wrapped Lambert — 명암 경계를 부드럽게, 섬유 내부의 빛 번짐을 모사 float wrapped = saturate((NdotL + _Wrap) / (1.0 + _Wrap)); half3 diffuse = baseRGB * mainLight.color * (wrapped * shadow + _AmbientStrength); // Fresnel rim — 실루엣에서 밝게, 안쪽으로 감쇠. // 림을 베이스 컬러로도 틴트해 "털 자체가 빛을 머금은" 느낌으로. float fresnel = pow(1.0 - saturate(dot(N, V)), _RimPower); half3 rim = fresnel * _RimColor.rgb * _RimIntensity * baseRGB; return half4(diffuse + rim, _BaseColor.a);










뱀서라이크 장르의 HTML5 게임. 수백 마리 적이 쏟아지는 화면에서 UI는 0.12초 트랜지션으로 즉각 반응하되 전투를 가리지 않아야 합니다. 캔버스(전투)와 DOM(HUD)을 분리해 각자의 최적 기술로 연출했습니다 — 체력/경험치 바는 CSS 그라디언트+트랜지션, 레벨업 룰렛은 DOM 오버레이, 전투 이펙트는 Phaser 파티클.
전투(수백 엔티티)는 Phaser 캔버스, HUD는 DOM. HP바 width .12s 트랜지션, 장착 아티팩트의 inset glow 강조 등 CSS가 더 잘하는 일은 CSS에게.
전투 정지 → 룰렛 스핀 → 당첨 슬롯 강조로 이어지는 호흡. 카드 선택형에서 룰렛형으로 개편해 레벨업마다 기대감을 끌어올리고, 등급(Common~Legendary)별 컬러 시스템을 룰렛 슬롯·칩·아이콘 전체에 일관 적용.
허브(캐릭터/구역/연구/상점/일지) 6개 화면을 단일 오버레이 시스템으로 — 진입·이탈 모션의 방향성을 통일해 공간감을 부여.
























프로토타입도 기획서가 아니라 실행되는 빌드로 관리합니다. Grid Rush는 4개 모드와 기록·데일리 메타 루프를 갖춘 블록 퍼즐 — 아래 캡처는 모두 실제 인게임이며, 이 자리에서 바로 플레이됩니다.
조각 배치 → 라인 클리어 → 콤보로 이어지는 즉각 피드백. K2에서 다진 퍼즐 게임필 감각을 자체 타이틀로 확장.
클래식(무한) · 스테이지 48 · 타임어택(60s) · 데일리 챌린지. BEST 기록과 일일 미션이 재방문 동기를 만드는 메타 설계.
LINE(가로 클리어) · BOMB(범위 폭파) 아이템 — 보드를 가르는 클리어 연출과 슬롯 게이지 피드백으로 역전의 손맛을 설계.


아래 게임들은 이 포트폴리오 폴더에 실제 빌드가 동봉되어 있습니다. START_PORTFOLIO.bat 더블클릭 한 번이면 서버와 함께 자동 실행됩니다 — 별도 설치 없음, Node.js만 있으면 됩니다.