본문으로 건너뛰기
CHOI HONGSU
1 min read

VFX Optimization Guide

VFX Resource Optimization Guide

In this work, to reduce recurring costs during the effect authoring stage, I organized overdraw inspection criteria, Timeline control patterns, MPB-based color control, shader structure cleanup, particle texture atlasing, and a ResourceChecker-based review flow. The goal was not to drastically change the look of individual effects, but to create a reusable structure and reduce redundant resources.

Problem

In the legacy structure, prefabs, materials, and textures were often split per skill / team color / staging.

In this structure, even the same effect could spawn separate prefabs and materials due to ally / enemy color differences, and similar particle textures could be scattered across several assets.

In addition, transparent particles tend to accumulate overdraw cost due to alpha blending even when ZTest is applied, so screen coverage and alpha area had to be managed from the authoring stage.

Goal

The goal was to reduce both rendering cost and management cost for effect resources together.

  • Establish overdraw inspection criteria for transparent particles
  • Reduce Timeline / Animation Key based control in favor of a poolable structure
  • Control ally / enemy color differences via MaterialPropertyBlock
  • Reduce shader count by consolidating similar shaders and nodes
  • Bundle particle textures into atlases to improve material reusability
  • Establish a review flow that checks Texture / Material / Mesh counts with ResourceChecker

Implementation

  1. 01

    Overdraw

    How to check overdraw

  2. 02

    2. Step Title

    You must minimize the white areas shown in the Overdraw View.

    ( ZTest is not applied, but it is a good way to check overdraw on (semi-transparent) effects. )

    Simplify Blending Mode/Shader. Using less complex blending/shaders reduces the overdraw burden.

    Minimize alpha blending. Keep the alpha-blended portions of the effect as small as possible.

  3. 03

    Remove effect custom node / animation key control

    Apply Prefab Control Track (source edits) / pooling system or Signal Track + script / pooling system

  4. 04

    Control effect color via Material Property Block

    For simple color distinctions like ally (Blue) / enemy (Red), change the color via Material Property Block.

    Headlight color is likewise changed via Material Property Block.

    Legacy units used separate Blue / Red prefabs and materials per skill.

    → After the change, only KeyColor is controlled by MPB, excluding shared effects

    The key color property name is Tint_Color ( shader — Kong82_FXS_FX_Alphablend_1T_One )

    Legacy HeadLight

    Controlled per unit via (4 prefabs) × (4 materials)

    Updated Headlight Controlled per unit via (1 prefab) × (1 material), with color driven by MPB

  5. 05

    Shader structure and node cleanup

    Legacy 25 shaders

    Kong82_FXS_FX_Add_1T Kong82_FXS_FX_Add_2T Kong82_FXS_FX_Add_Gra_Flipbook Kong82_FXS_FX_Add_Gra_Shockwave Kong82_FXS_FX_Add_Shockwave Kong82_FXS_FX_Additve_Shield Kong82_FXS_FX_Alpha_Shockwave Kong82_FXS_FX_Alphablend_1T Kong82_FXS_FX_Alphablend_2T Kong82_FXS_FX_BasicTrail Kong82_FXS_FX_CartoonSmoke Kong82_FXS_FX_Crack Kong82_FXS_FX_Dissolve Kong82_FXS_FX_Distortion Kong82_FXS_FX_FireTrail Kong82_FXS_FX_MaskFlow Kong82_FXS_FX_Parallax_Crack Kong82_FXS_FX_Particles_Unlit Kong82_FXS_FX_Smoke Kong82_FXS_FX_Twoside Kong82_FXS_FX_UI_BasicDistortion Kong82_FXS_FX_UI_Distortion Kong82_FXS_FX_UI_RadialBlur Kong82_FXS_FX_Water Kong82_FXS_FX_Water_Toon

    After shader structure cleanup

    8 in-game shaders

    Kong82_FXS_FX_Add_Shockwave Kong82_FXS_FX_Alphablend_1T_One // changed, MPB color control Kong82_FXS_FX_Alphablend_2T_Dissove // changed

    Kong82_FXS_FX_HeadLight // added, MPB color control Kong82_FXS_FX_CartoonSmoke_HS // changed Kong82_FXS_FX_MaskFlow_HS_Trail // changed Kong82_FXS_FX_Parallax_Crack_HS // changed Kong82_FXS_FX_Water_Toon

    4 UI shaders

    Kong82_FXS_FX_UI_Additve_Shield Kong82_FXS_FX_UI_Smoke Kong82_FXS_FX_UI_Distortion Kong82_FXS_FX_UI_Alphablend_2T

    Example work

    Gas shader optimization

    Before ( 3 shaders / 3 materials / 10 textures ) — left

    After ( 1 shader / 1 material / 3 textures ) — right

  6. 06

    Shader property comparison

    Legacy shader

  7. 07

    Merged shader

    Merge shaders that are not reused to remove unnecessary textures and nodes

    Separate the shader that will use MPB ( color control )

    Keep heavily reused shaders as light as possible to minimize overdraw

파티클 텍스처 아틀라스

Particle texture atlas

  1. Textures that use similar alpha blending — flames, smoke, light effects, etc. — are arranged into a single atlas.
  2. If the implementation simply changes the UV coordinates like a Sprite to swap particle images, the material becomes reusable.

이펙트 최적화프로파일링 툴

  1. 01

    ResourceChecker

    Lets you inspect the Textures, Materials, and Meshes in the scene.

  2. 02

    Hierarchy window

    Pressing Go jumps to the Hierarchy window.

    When checking unnecessary resources, it's best to remove them after profiling.

    Bring only a single asset to be profiled into the scene and run the optimization.

  3. 03

    Before

    Vanguard — Texture 31 Material 29 Mesh 5 (2538 verts)

    Vanguard — Texture 16 Material 15 Mesh 3 (1721 verts)

VFX 최적화 가이드 · FlashGambit · Choi Hongsu · Hongsu