Unity 커스텀 렌더 파이프라인 가이드

이 문서는 Unity의 커스텀 렌더 파이프라인에서 렌더 루프를 생성하는 방법을 설명합니다. 이 문서를 통해 스크립터블 렌더 파이프라인의 기본 원칙을 배우고, 커스텀 렌더 파이프라인을 구축하는 데 필요한 단계를 익힐 수 있습니다.

콘텐츠

  1. 프로젝트 준비
  2. SRP 호환 셰이더 만들기
  3. 렌더링할 게임 오브젝트 생성
  4. 커스텀 SRP의 기본 구조 생성
  5. 렌더 루프 생성
  6. 렌더 타겟 지우기
  7. 컬링
  8. 그리기

프로젝트 준비

렌더 루프를 위해 프로젝트를 다음과 같이 준비합니다.

  1. SRP 호환 셰이더를 만듭니다.
  2. 렌더링할 게임 오브젝트를 생성합니다.
  3. 커스텀 SRP의 기본 구조를 생성합니다.

선택적으로, SRP Core 패키지를 설치하여 셰이더에 SRP 배처 호환성을 추가할 수 있습니다.

SRP 호환 셰이더 만들기

스티우를 사용하여 지오메트리를 렌더링할 방법을 정의하는 LightMode 태그를 사용하여 SRP 호환 셰이더를 만듭니다. 아래와 같이 새 셰이더를 생성합니다.

Shader "Examples/SimpleUnlitColor"
{
    SubShader
    {
        Pass
        {
            Tags { "LightMode" = "ExampleLightModeTag"}

            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            float4x4 unity_MatrixVP;
            float4x4 unity_ObjectToWorld;

            struct Attributes
            {
                float4 positionOS   : POSITION;
            };

            struct Varyings
            {
                float4 positionCS : SV_POSITION;
            };

            Varyings vert (Attributes IN)
            {
                Varyings OUT;
                float4 worldPos = mul(unity_ObjectToWorld, IN.positionOS);
                OUT.positionCS = mul(unity_MatrixVP, worldPos);
                return OUT;
            }

            float4 frag (Varyings IN) : SV_TARGET
            {
                return float4(0.5,1,0.5,1);
            }
            ENDHLSL
        }
    }
}

렌더링할 게임 오브젝트 생성

게임 오브젝트를 생성하여 이전에 만든 SRP 호환 셰이더를 사용할 수 있습니다.

  1. 새 머티리얼 에셋을 만듭니다.
  2. 머티리얼 에셋에 셰이더를 할당합니다.
  3. 씬에 큐브를 생성하고, 큐브에 머티리얼을 할당합니다.

커스텀 SRP의 기본 구조 생성

커스텀 SRP에 필요한 기본 소스 파일을 생성하고, Unity에 렌더링을 시작하도록 지시합니다. 아래와 같은 코드로 RenderPipeline 클래스를 상속하여 클립을 작성합니다.

public class ExampleRenderPipeline : RenderPipeline {
    public ExampleRenderPipeline() {
    }

    protected override void Render (ScriptableRenderContext context, Camera[] cameras) {
        // 렌더 타겟을 지우고, 필요에 따라 다른 기능을 추가합니다.
    }
}

렌더 루프 생성

렌더 루프의 기본 작업은 다음과 같습니다:

렌더 타겟 지우기

렌더 타겟을 지우는 작업입니다. 다음 단계를 따릅니다:

  1. Clear 커맨드를 사용하여 CommandBuffer를 설정합니다.
  2. ScriptableRenderContext의 커맨드 대기열에 CommandBuffer를 추가합니다.
  3. 그래픽스 API에 명령을 전달합니다.

예제 코드는 다음과 같습니다.

var cmd = new CommandBuffer();
cmd.ClearRenderTarget(true, true, Color.black);
context.ExecuteCommandBuffer(cmd);
cmd.Release();
context.Submit();

컬링

컬링은 카메라에 보이지 않는 지오메트리를 필터링하는 과정입니다. 스크립터블 렌더 파이프라인에서 컬링을 수행하는 방법은 다음과 같습니다:

  • ScriptableCullingParameters 구조체를 카메라에 대한 데이터로 채웁니다.
  • ScriptableRenderContext.Cull을 호출하고, 결과를 CullingResults 구조체에 저장합니다.

관련 코드 예시는 다음과 같습니다.

foreach (Camera camera in cameras) {
    camera.TryGetCullingParameters(out var cullingParameters);
    var cullingResults = context.Cull(ref cullingParameters);
}

그리기

그리기는 특정 지오메트리를 그리도록 지시하는 작업입니다. 그리기를 수행하기 위한 단계는 다음과 같습니다:

  1. 컬링 작업을 수행하고 결과를 CullingResults에 저장합니다.
  2. FilteringSettings 및 DrawingSettings 구조체를 생성합니다.
  3. ScriptableRenderContext.DrawRenderers를 호출합니다.

다음은 예제 코드입니다.

context.DrawRenderers(cullingResults, ref drawingSettings, ref filteringSettings);

결론

이 가이드는 Unity의 커스텀 렌더 파이프라인을 사용하여 렌더 루프를 생성하는 방법을 설명합니다. 이 원칙들을 이해하고 적용함으로써, 여러분은 더 복잡한 렌더링 작업을 수행할 수 있는 기반을 구축할 수 있습니다. Unity를 통해 창의적인 비주얼을 만들어 보세요!

Read more

Unity 매뉴얼 스크립팅 API 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 간단한 해설과 활용 예제들을 포함하고 있습니다. Unity는 게임 개발 플랫폼으로, 스크립팅 API를 통해 게임의 다양한 기능을 제어하고 수정할 수 있습니다. 버전 Unity 스크립팅 API는 여러 버전으로 제공됩니다. 주의 깊게 선택하여 사용하는 것이 중요합니다. 버전 설명 2023.2 최신 기능 및 버그 수정이 추가됨

By 이재협/실장/시스템개발실/PHYSIA

Unity 매뉴얼 스크립팅 API 설명서 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 정보를 제공하며, 버전에 따라 다르게 적용되는 내용들을 설명합니다. 본 문서에서는 주요 내용을 간단히 정리하고 활용 가능 예제를 통해 이해를 돕겠습니다. 기본 개념 Unity에서 스크립팅 API는 게임 오브젝트와 그들의 동작을 제어하기 위한 강력한 도구입니다. 이를 통해 게임의 로직, 물리 엔진, 애니메이션 및 사용자 인터페이스를

By 이재협/실장/시스템개발실/PHYSIA

Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 게임 개발을 위한 인기 있는 엔진으로, 강력한 스크립팅 기능을 제공합니다. 이 가이드는 Unity에서 스크립트를 작성하고 사용하는 방법을 이해하는 데 도움을 드립니다. 목차 * Unity 스크립팅 소개 * 기본 스크립트 생성 * 스크립트 사용 예제 * 응용 프로그램 * 참고 자료 Unity 스크립팅 소개 Unity는 C# 프로그래밍 언어를

By 이재협/실장/시스템개발실/PHYSIA