Unity 커스텀 렌더 텍스처 가이드
개요
커스텀 렌더 텍스처(Custom Render Texture)는 셰이더로 텍스처를 업데이트할 수 있도록 지원하는 특별한 타입의 텍스처입니다. 이를 통해 복잡한 시뮬레이션이나 물결 효과, 액체의 튀는 모습을 구현할 수 있습니다. 커스텀 렌더 텍스처는 다양한 업데이트 빈도와 멀티 패스를 지원하며, 효과적인 시뮬레이션을 위해 스크립팅 API와 셰이더 프레임워크를 제공하고 있습니다.
커스텀 렌더 텍스처 사용법
- 새로운 커스텀 렌더 텍스처 생성
- Material 프로퍼티에서 호환 가능한 머티리얼 할당
프로퍼티 설명
| 프로퍼티 | 기능 |
|---|---|
| Dimension | 렌더 텍스처의 차원 설정 |
| Size | 렌더 텍스처의 크기(픽셀 단위) |
| Color Format | 렌더 텍스처의 색상 포맷 |
| Enable Mip Maps | 밉맵 사용 여부 설정 |
| Wrap Mode | 텍스처의 배열 동작 방식 정의 |
| Filter Mode | 텍스처 필터링 방식 정의 |
| Custom Texture Parameters | 텍스처 업데이트에 사용할 셰이더 등을 정의 |
렌더 파이프라인 호환성
| 기능 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인 (URP) | 고해상도 렌더 파이프라인 (HDRP) | 커스텀 스크립터블 렌더 파이프라인 (SRP) |
|---|---|---|---|---|
| 커스텀 렌더 텍스처 지원 | 지원 | 지원 | 지원 | 지원 |
업데이트 영역
커스텀 렌더 텍스처의 업데이트 영역을 정의하여 부분적으로 텍스처를 업데이트할 수 있습니다. 이는 최적화를 위한 주요 기능으로, 여러 개의 작은 영역에 대하여 한 번에 업데이트를 수행할 수 있게 해줍니다.
| 프로퍼티 | 기능 |
|---|---|
| Center | 업데이트 영역의 중심 좌표 |
| Size | 업데이트 영역의 크기 |
| Rotation | 업데이트 영역의 방향 (각도로 표시) |
| Shader Pass | 업데이트 영역에 사용할 셰이더 패스 정의 |
스크립트를 통한 커스텀 렌더 텍스처 제어
커스텀 렌더 텍스처의 대부분 기능은 스크립팅 API를 통해 접근할 수 있습니다. 스크립트를 사용하여 머티리얼 파라미터를 변경하고, 업데이트 영역을 요청하는 등의 작업이 가능합니다. 예를 들어:
customRenderTexture.updateZones = updateZones1;
customRenderTexture.Update();
customRenderTexture.updateZones = updateZones2;
customRenderTexture.Update();
이중 버퍼링
커스텀 렌더 텍스처는 이중 버퍼링을 통해 이전 업데이트의 결과를 사용할 수 있습니다. 이를 활용하면 한 쪽의 텍스처에 새로운 결과를 작성하면서도, 이전 결과를 읽을 수 있게 됩니다. 이중 버퍼링 활용 시 성능 저하가 있을 수 있으므로 주의가 필요합니다.
체이닝
여러 개의 커스텀 렌더 텍스처를 서로 연결(chain)하여 복잡한 시뮬레이션을 통합할 수 있습니다. 이는 각 커스텀 렌더 텍스처가 서로의 결과를 입력으로 사용하며, Unity가 업데이트 순서를 자동으로 관리합니다.
커스텀 렌더 텍스처 셰이더 작성
커스텀 렌더 텍스처를 수동으로 업데이트하기 위해 셰이더를 작성할 수 있습니다. 기본적인 템플릿은 다음과 같습니다:
Shader "CustomRenderTexture/Simple"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_Tex("InputTex", 2D) = "white" {}
}
SubShader
{
Lighting Off
Blend One Zero
Pass
{
CGPROGRAM
#include "UnityCustomRenderTexture.cginc"
#pragma vertex CustomRenderTextureVertexShader
#pragma fragment frag
float4 _Color;
sampler2D _Tex;
float4 frag(v2f_customrendertexture IN) : COLOR
{
return _Color * tex2D(_Tex, IN.localTexcoord.xy);
}
ENDCG
}
}
}
위의 예시는 텍스처를 컬러로 채우는 기본적인 셰이더 구조를 보여줍니다. 각 단계에서 UnityCustomRenderTexture.cginc를 포함하여 필요한 변수를 설정해야 합니다.
결론
커스텀 렌더 텍스처는 복잡한 비주얼 효과를 구현하는 데 강력한 도구입니다. 올바른 설정과 셰이더 작성으로 다양한 효과를 제공할 수 있으며, Unity의 다양한 기능과 잘 융합되어 사용할 수 있습니다.