메모리 비교



Cookie Run: Oven Smash 프로젝트에서 FX 제작 효율과 런타임 부담을 개선하기 위해, 기존 ParticlesBasic 우버 셰이더 의존도를 줄이고 용도별 경량 FX 셰이더를 제작했습니다. 기존 파티클 셰이더는 다양한 표현을 처리할 수 있는 범용 구조였지만, R&D 폭발 이펙트 제작에 필요한 디졸브, 이미시브, 디스토션 제어가 부족했고 기능을 추가할수록 셰이더 비용과 관리 부담이 커지는 문제가 있었습니다. 이에 폭발, 디졸브, 마스크, UI 파티클 용도별로 필요한 기능만 포함한 경량 셰이더를 새로 구성했습니다. Custom Vertex Streams와 CustomData 구조를 표준화하여 FX 아티스트가 파티클 시스템 안에서 HDR, 디졸브 강도, UV Tile/Offset, 마스크 이동 값을 직접 제어할 수 있도록 했습니다. 이를 통해 폭발 셰이더 기준 메모리를 338.7KB에서 37.9KB로 감소시켰고, UI 파티클 머테리얼도 10개에서 2개로 정리했습니다.
기존 FX 제작은 ParticlesBasic 우버 셰이더에 많이 의존하고 있었습니다.
우버 셰이더는 여러 기능을 하나의 셰이더에서 조합할 수 있다는 장점이 있지만, 실제 프로젝트에서는 사용하지 않는 기능까지 포함되어 기본 비용이 높고, 기능을 추가할수록 Variant와 관리 부담이 커지는 문제가 있었습니다.
특히 R&D 폭발 이펙트 제작 과정에서 기존 셰이더만으로는 디졸브, 이미시브, 디스토션 제어가 부족했고, 폭발에 필요한 기능을 추가하기에는 이미 셰이더 구조가 무거운 상태였습니다. 기존 ParticlesBasic의 폭발 사용 기준 메모리는 338.7KB였고, 전용 경량 셰이더가 필요한 상황이었습니다.
UI 파티클 쪽에서도 문제가 있었습니다. 기존 Additive / AlphaBlend UI 셰이더는 파티클용 CustomData 제어가 부족했고, 텍스처 슬롯에 파티클 텍스처를 직접 넣어 사용하는 구조라 작업 실수가 발생하기 쉬웠습니다.
이번 작업의 목표는 단순히 새로운 셰이더를 추가하는 것이 아니라, FX 제작에 자주 사용되는 표현을 용도별로 분리하고, 아티스트가 파티클 시스템 안에서 직접 제어할 수 있는 구조를 만드는 것이었습니다.
핵심 목표는 다음과 같습니다.
Custom Vertex Streams 기반 CustomData 제어 표준화레퍼런스에서는 폭발의 중심부 발광, 외곽 실루엣 변화, 연기와 화염의 단계적 소멸 방식에 집중했습니다. 이를 바탕으로 디졸브 값에 따라 이미지보드의 알파와 이미시브를 제어하는 FX 셰이더 구조를 설계했습니다.



R&D 폭발 이펙트를 위해 전용 경량 셰이더를 제작했습니다.
기존 ParticlesBasic은 유연하지만 기본 구조가 무겁고, 폭발에 필요한 기능을 추가할수록 부담이 커지는 문제가 있었습니다. 그래서 폭발 표현에 필요한 기능만 최소 구성한 Explosion Shader를 새로 제작했습니다.
주요 기능은 다음과 같습니다.
Base TextureDissolve TextureDissolveEmissiveDistortionUse Distortion On / OffCustom Data On / Off| Channel | CustomData1 | CustomData2 |
|---|---|---|
| x | HDR | U Tile |
| y | Dissolve Weight | V Tile |
| z | Dissolve Edge | U Offset |
| w | Emissive Weight | V Offset |
Custom1.xyzw는 TEXCOORD1.xyzw, Custom2.xyzw는 TEXCOORD2.xyzw로 받아 사용했습니다.

이번 작업을 통해 FX 제작에 필요한 셰이더를 용도별로 분리하고, 파티클 시스템에서 직접 제어 가능한 구조로 정리했습니다.
가장 큰 성과는 폭발 이펙트 전용 셰이더의 메모리 감소입니다. 기존 ParticlesBasic에서 폭발에 사용하는 셰이더 메모리는 338.7KB였지만, 신규 Explosion Shader는 37.9KB로 구성되었습니다. 또한 Variant 없이 운용하는 방향으로 설계해 불필요한 셰이더 부담을 줄였습니다.
UI 파티클 쪽에서는 기존 FX UI 머테리얼을 10개에서 2개로 정리했고, 파티클 스프라이트 참조 방식과 CustomData 기반 UV 제어 구조를 통일했습니다.
ParticlesBasic 우버 셰이더 의존도 감소Custom Vertex Streams 기반 CustomData 제어 표준화