TOOLS GAMES DEVLOG DOCS ABOUT CONTACT
HOME > DOCS > Shader / URP > 3D 씬의 실시간 2D 픽셀 아트화 (Low-Res RenderTexture & Point Upscaling)
Shader / URP Intermediate Unity 2022.3+ / Unity 6 (URP)

3D 씬의 실시간 2D 픽셀 아트화 (Low-Res RenderTexture & Point Upscaling)

3D 지형과 애니메이션 모델을 320x180 저해상도 RenderTexture에 렌더링한 뒤 Nearest-Neighbor(Point) 필터로 디스플레이에 칼같이 업스케일하는 인디 렌더링 파이프라인.

#Shader #URP #3D-to-2D #PixelArt #RenderTexture #Retro
핵심 개념*A Short Hike*나 *Signalis* 같은 명작 인디 게임들은 3D의 편리한 조명·물리·카메라 워크를 그대로 누리면서도, 화면 전체를 저해상도 RenderTexture(예: 320×180, 480×270)에 렌더링한 후 FilterMode.Point로 확대 출력함으로써 특유의 레트로 도트 픽셀 아트 감성을 실시간으로 구현합니다.

1. 실시간 저해상도 픽셀 다운샘플링 컨트롤러

PixelArtRenderFeatureController.cs
using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(Camera))]
public class PixelArtRenderFeatureController : MonoBehaviour
{
    [Header("타겟 저해상도 (레트로 해상도)")]
    [SerializeField] private int targetWidth = 320;
    [SerializeField] private int targetHeight = 180;

    [Header("출력 캔버스 RawImage (전체 화면)")]
    [SerializeField] private RawImage displayScreen;

    private RenderTexture _pixelRenderTexture;
    private Camera _camera;

    private void Awake()
    {
        _camera = GetComponent<Camera>();
        CreatePixelRenderTexture();
    }

    private void CreatePixelRenderTexture()
    {
        // 1. 기존 텍스처 해제
        if (_pixelRenderTexture != null)
        {
            _camera.targetTexture = null;
            _pixelRenderTexture.Release();
        }

        // 2. 도트 느낌을 위한 핵심: FilterMode.Point (바이리니어 블러 제거)
        _pixelRenderTexture = new RenderTexture(targetWidth, targetHeight, 24, RenderTextureFormat.ARGB32)
        {
            filterMode = FilterMode.Point,
            antiAliasing = 1, // 안티앨리어싱을 꺼야 도트 경계가 살아남
            useMipMap = false
        };
        _pixelRenderTexture.Create();

        // 3. 카메라 타겟 바인딩
        _camera.targetTexture = _pixelRenderTexture;

        // 4. UI 캔버스 RawImage로 풀스크린 전송
        if (displayScreen != null)
        {
            displayScreen.texture = _pixelRenderTexture;
        }
    }

    private void OnDestroy()
    {
        if (_pixelRenderTexture != null)
        {
            _pixelRenderTexture.Release();
            Destroy(_pixelRenderTexture);
        }
    }
}

2. 3D 티를 지우는 URP 렌더러 필수 세팅

  • 오소그래픽(Orthographic) 카메라 사용: 원근 왜곡(Perspective)이 있으면 카메라와 가까운 오브젝트의 픽셀 그리드가 커지고 멀리 있는 픽셀이 촘촘해져 도트 크기가 제각각 달라집니다. 일정한 픽셀 크기(Pixel Density)를 유지하려면 직교 투영 카메라를 쓰는 것이 정석입니다.
  • MSAA 강제 끔: URP 에셋 설정에서 Anti-Aliasing을 Off로 변경해야 3D 모델 외곽선에 부드러운 회색 보간 픽셀이 섞이지 않고 날카로운 1비트 도트 계단 현상이 유지됩니다.
  • 텍스처 밉맵 제거: 3D 모델에 입혀진 텍스처들의 Mipmap을 끄거나 거리를 고정해야 텍스처가 뭉개지지 않고 선명한 픽셀로 표현됩니다.

참고자료 & 관련 링크