2 minute read

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를 효과적으로 활용하기 위해서는 주요 파라미터를 적절히 설정하는 것이 중요합니다. 프로젝트의 요구사항에 따라 렌더링 성능과 그래픽 품질을 균형 있게 조정할 수 있습니다.

  1. URP Asset 설정 URP를 사용하려면 URP Asset을 생성하고 프로젝트에 적용해야 합니다.

설정 항목:

  • Render Scale: 해상도를 조정하여 성능을 최적화합니다. (기본값: 1.0, 낮추면 성능 향상 가능)
  • MSAA (Multi-Sample Anti-Aliasing): 계단 현상을 줄이는 안티앨리어싱 기능을 설정합니다.
  • Shadow Quality: 그림자의 품질을 조절하여 성능을 최적화합니다.
  • Post-processing: 후처리 효과(Bloom, Color Grading 등)를 활성화할지 여부를 설정합니다.
  1. Renderer 설정 URP는 커스텀 렌더러를 사용할 수 있도록 구성할 수 있습니다.
    • Forward Renderer: 기본적인 렌더링 방식으로, 모바일 및 저사양 기기에 적합합니다.
    • Deferred Renderer: 많은 광원을 효율적으로 처리할 수 있으며, 고품질 그래픽을 요구하는 프로젝트에 적합합니다.

Image



URP(Universal Render Pipeline) 작동 과정


URP의 작동 과정은 다음과 같습니다.

  1. 렌더링 파이프라인 설정
    • Unity에서 URP Asset을 생성하고 Graphics Settings에서 설정합니다.
    • URP에 맞는 머티리얼과 셰이더를 사용해야 정상적으로 렌더링됩니다.
  2. 쉐이더 작성
    • Shader Graph를 사용하여 직관적으로 쉐이더를 생성할 수 있습니다.
    • C# 코드 기반의 Custom Shader도 제작 가능하며, 기존의 Standard Shader는 URP에서 사용할 수 없습니다.
  3. 라이팅 설정
    • 리얼타임 라이팅과 베이크드 라이팅을 적절히 조합하여 성능을 조절할 수 있습니다.
    • URP는 Screen Space Ambient Occlusion(SSAO) 를 기본적으로 지원하지 않으므로, 별도의 후처리 설정이 필요할 수 있습니다.
  4. 포스트 프로세싱(Post-processing)
    • Bloom: 빛의 퍼짐 효과
    • Depth of Field: 카메라 초점 효과
    • Vignette: 화면 테두리 어둡게 처리
  5. 렌더링 및 출력
    • 최종적으로 씬을 렌더링하여 게임 화면을 완성합니다.

Image

주요 기능


  • 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
        }
    }
}


Top