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

Splat Map / Normal Map Reduction

 

A pass that separates the tiling, tone correction, and boundary blending that splatmaps used to handle into Plane / Vertex Color / Alpha Decal — reducing the terrain shader's fixed texture sampling cost.

Problem

Existing background tiles used a splatmap to break tiling repetition, vary color by region, and handle boundary blending.

But this approach added extra texture sampling across the whole terrain, while not every area actually needed complex blending.

Especially on mobile, where the background covers a large area, the terrain shader's sample count adds up to a meaningful cost.

Goal

Rather than trying to keep all of the splatmap's functions, the goal was to replace each function with a cheaper, purpose-specific alternative.

  • Break tiling repetition: cover parts with Plane objects
  • Per-region color correction: handled by Vertex Color
  • Soft boundary blending: alpha decals only where needed

Implementation

  1. 01

    For breaking background tile repetition

    The splatmap was mainly used to break the repetition of floor tile patterns.

    Instead of adding a sample to the entire terrain shader, simple Plane objects are placed over sections where the repetition is noticeable, creating a visual break.

  2. 02

    Alternative

    03. Cover parts with Plane

    The Plane object is placed at nearly the same position as the floor, naturally covering the existing tiles.

    MSAA isn't used in this project, so there's no Early-Z gain to be had — covering on top has no downside in this context.

Implementation

  1. 01

    For region blending

    The splatmap was also used to softly blend boundaries between regions.

    But not every floor pixel needs to pay this cost, so only the areas that actually need boundary blending are now handled with separate alpha decals.

    This isolates the complex blending cost from the entire terrain shader and applies it only in the regions that need it.

  2. 02

    Alternative ( alpha mesh decal )

Implementation

  1. 01

    For AO or tone correction

    Simple tone correction and AO-style dark-area expression that the splatmap used to handle were moved to Vertex Color.

    Vertex Color uses color information already in the mesh data — no extra texture sampling — so it's better suited to simple color variation and per-region tone adjustments.

    This way, the color variation and regional character of the background are preserved without using a splatmap.

  2. 02

    Alternative

Before / After

Previous memory 0.550MB -> 491.3MB ( splatmap removed )

 

Result

By separating the splatmap's functions by purpose, the overall terrain shader's sampling cost was reduced.

  • Tiling repetition removal → replaced with Plane
  • Region boundary blending → only where needed, with Alpha Decal
  • Simple tone correction / AO-style color variation → moved to Vertex Color
  • Changed from a structure where the entire floor always paid splatmap sampling cost to one that pays the cost only where needed

 

 

This work was not about changing visual quality much — the intent was to preserve the existing expression while cutting the terrain shader's fixed sampling cost.

BEFORE
Before
AFTER
After

Tradeoffs & Future Work

Tradeoffs

  • Plane and Alpha Decal approaches add extra rendering objects and transparent overdraw cost.
  • So these are used selectively — only in areas where the tiling repetition is noticeable or boundary blending is required — not blanket across the scene.