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. 실시간 저해상도 픽셀 다운샘플링 컨트롤러
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을 끄거나 거리를 고정해야 텍스처가 뭉개지지 않고 선명한 픽셀로 표현됩니다.