[Unity] 유니티 URP(Universal Render Pipeline) 완벽 해부
URP(Universal Render Pipeline) 개념
URP는 Unity에서 제공하는 스크립터블 렌더 파이프라인(Scriptable Render Pipeline, SRP) 의 하나로, 다양한 플랫폼에서 최적화된 그래픽스를 제공하는 것을 목표로 합니다. 마치 “그래픽스 전문가” 처럼, URP는 다양한 플랫폼에 맞는 최적의 그래픽 설정을 제공하여 개발자들이 더욱 쉽게 고품질의 그래픽을 구현할 수 있도록 도와줍니다.
URP(Universal Render Pipeline)특징
URP는 다음과 같은 매력적인 특징들을 가지고 있습니다.
- 플랫폼 확장성: 모바일, PC, 콘솔 등 다양한 플랫폼에서 일관된 그래픽 품질을 제공합니다. 마치 “그래픽스 번역기” 처럼, URP는 다양한 플랫폼에서 동일한 그래픽 품질을 유지할 수 있도록 도와줍니다.
- 성능 최적화: 다양한 최적화 기술을 통해 높은 프레임률을 유지하고 성능을 향상시킵니다. 마치 “그래픽스 다이어트” 처럼, URP는 불필요한 연산을 줄여 게임의 성능을 향상시킵니다.
- 유연한 커스터마이징: C# 스크립트를 사용하여 렌더링 파이프라인을 자유롭게 커스터마이징할 수 있습니다. 마치 “그래픽스 맞춤 제작” 처럼, URP는 개발자들이 원하는 방식으로 렌더링 파이프라인을 수정할 수 있도록 도와줍니다.
- 향상된 렌더링 기능: Post-processing, Shader Graph 등 다양한 최신 렌더링 기능을 제공합니다. 마치 “그래픽스 최신 기술” 처럼, URP는 최신 렌더링 기술을 통해 더욱 풍부하고 현실감 있는 그래픽을 구현할 수 있도록 도와줍니다.
URP(Universal Render Pipeline) 파라메터 설정
URP를 효과적으로 활용하기 위해서는 주요 파라미터를 적절히 설정하는 것이 중요합니다. 프로젝트의 요구사항에 따라 렌더링 성능과 그래픽 품질을 균형 있게 조정할 수 있습니다.
- URP Asset 설정 URP를 사용하려면 URP Asset을 생성하고 프로젝트에 적용해야 합니다.
설정 항목:
- Render Scale: 해상도를 조정하여 성능을 최적화합니다. (기본값: 1.0, 낮추면 성능 향상 가능)
- MSAA (Multi-Sample Anti-Aliasing): 계단 현상을 줄이는 안티앨리어싱 기능을 설정합니다.
- Shadow Quality: 그림자의 품질을 조절하여 성능을 최적화합니다.
- Post-processing: 후처리 효과(Bloom, Color Grading 등)를 활성화할지 여부를 설정합니다.
- Renderer 설정
URP는 커스텀 렌더러를 사용할 수 있도록 구성할 수 있습니다.
- Forward Renderer: 기본적인 렌더링 방식으로, 모바일 및 저사양 기기에 적합합니다.
- Deferred Renderer: 많은 광원을 효율적으로 처리할 수 있으며, 고품질 그래픽을 요구하는 프로젝트에 적합합니다.
URP(Universal Render Pipeline) 작동 과정
URP의 작동 과정은 다음과 같습니다.
- 렌더링 파이프라인 설정
- Unity에서 URP Asset을 생성하고 Graphics Settings에서 설정합니다.
- URP에 맞는 머티리얼과 셰이더를 사용해야 정상적으로 렌더링됩니다.
- 쉐이더 작성
- Shader Graph를 사용하여 직관적으로 쉐이더를 생성할 수 있습니다.
- C# 코드 기반의 Custom Shader도 제작 가능하며, 기존의 Standard Shader는 URP에서 사용할 수 없습니다.
- 라이팅 설정
- 리얼타임 라이팅과 베이크드 라이팅을 적절히 조합하여 성능을 조절할 수 있습니다.
- URP는 Screen Space Ambient Occlusion(SSAO) 를 기본적으로 지원하지 않으므로, 별도의 후처리 설정이 필요할 수 있습니다.
- 포스트 프로세싱(Post-processing)
- Bloom: 빛의 퍼짐 효과
- Depth of Field: 카메라 초점 효과
- Vignette: 화면 테두리 어둡게 처리
- 렌더링 및 출력
- 최종적으로 씬을 렌더링하여 게임 화면을 완성합니다.
- 최종적으로 씬을 렌더링하여 게임 화면을 완성합니다.
주요 기능
- Forward Rendering: URP의 기본 렌더링 방식으로, 다양한 플랫폼에서 높은 성능을 제공합니다.
- Deferred Rendering: (URP 10.0 이상) 복잡한 씬에서 효율적인 라이팅을 처리하는 렌더링 방식입니다.
- Shader Graph: 코딩 없이 노드 기반으로 쉐이더를 제작할 수 있는 툴입니다.
- Post-processing: Bloom, Depth of Field 등 다양한 시각 효과를 적용하여 씬의 품질을 향상시키는 기능입니다.
예시 코드
아래 코드는 Shader Graph 없이 C#으로 작성한 간단한 URP 셰이더 코드로, 하기의 부분을 구현하였습니다.
- 기본적인 URP 호환 셰이더를 정의합니다.
- _BaseColor 속성을 이용하여 머티리얼 색상을 변경할 수 있습니다.
- Unity의 URP 라이브러리(Core.hlsl)를 포함하여 URP에 최적화된 형태로 구현하였습니다.
Shader "Custom/URPBasicShader"
{
Properties
{
_BaseColor("Base Color", Color) = (1,1,1,1)
}
SubShader
{
Tags {"RenderPipeline"="UniversalPipeline"}
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
float3 normalOS : NORMAL;
float2 uv : TEXCOORD0;
};
struct Varyings
{
float2 uv : TEXCOORD0;
float4 positionCS : SV_POSITION;
};
CBUFFER_START(UnityPerMaterial)
float4 _BaseColor;
CBUFFER_END
Varyings vert(Attributes IN)
{
Varyings OUT;
OUT.positionCS = TransformObjectToHClip(IN.positionOS);
OUT.uv = IN.uv;
return OUT;
}
half4 frag(Varyings IN) : SV_Target
{
return _BaseColor;
}
ENDHLSL
}
}
}