{!See https://docs.google.com/document/d/1takg_GmIBBKKTj-GHZCwzxohpQz7Bhekivkk72kYMtE/edit for reference implementation of OneTrust, dataLayer and GTM} {!OneTrust Cookies Consent} {!OneTrust Cookies Consent end} {!dataLayer initialization push} {!dataLayer initialization push end} {!Google Tag Manager} {!Google Tag Manager end} URP의 디퍼드 렌더링 경로 | Universal RP | 15.0.4
docs.unity3d.com
"{0}"의 검색 결과

    목차 표시/숨기기

    URP의 디퍼드 렌더링 경로

    URP 유니버설 렌더러는 포워드와 디퍼드라는 두 가지 렌더링 경로를 지원합니다.

    이 두 렌더링 경로 간의 차이점은 렌더링 경로 비교를 참조하십시오.

    이 섹션에서는 디퍼드 렌더링 경로에 대해 설명합니다.

    디퍼드 렌더링 경로를 사용하여 렌더링한 씬
    디퍼드 렌더링 경로를 사용하여 렌더링한 샘플 씬.

    이 섹션은 다음의 항목에 대해 다룹니다.

    • 디퍼드 렌더링 경로를 선택하는 방법

    • Unity 플레이어 시스템 요구 사항

    • 구현 세부 정보

    • 관련 코드 파일

    • ShaderLab 패스 태그

    • 제한 사항과 성능

    디퍼드 렌더링 경로를 선택하는 방법

    렌더링 경로를 선택하려면 URP 유니버설 렌더러 에셋에서 Lighting > Rendering Path 프로퍼티를 사용해야 합니다.

    URP 유니버설 렌더러 에셋에서 렌더링 경로 선택

    디퍼드 렌더링 경로를 선택하면 Unity에 Accurate G-buffer normals 프로퍼티가 나타납니다.

    Accurate G-buffer normals 프로퍼티를 사용하면 지오메트리 버퍼(GBuffer)에 저장할 때 Unity가 노멀을 인코딩하는 방식을 설정할 수 있습니다.

    • Accurate G-buffer normals 꺼짐: 이 옵션을 사용하면 모바일 GPU에서 성능이 향상되지만, 매끄러운 표면에서 컬러 밴딩 결함이 발생할 수 있습니다.

    • Accurate G-buffer normals 켜짐: Unity는 팔면체 인코딩을 사용하여 노멀 벡터의 값을 노멀 텍스처의 RGB 채널에 저장합니다. 이 인코딩을 사용하면 노멀 벡터의 값이 더 정확해지지만, 인코딩 및 디코딩 작업으로 인해 GPU에 추가 부하가 발생합니다.

    이 설정에 대한 자세한 내용은 GBuffer에서의 노멀 인코딩 섹션을 참조하십시오.

    Unity 플레이어 시스템 요구 사항

    디퍼드 렌더링 경로에는 Unity 플레이어의 일반적인 시스템 요구 사항 외에도 다음과 같은 요구 사항과 제한 사항이 있습니다.

    • 최소 셰이더 모델: 셰이더 모델 4.5.

    • 디퍼드 렌더링 경로는 OpenGL 기반 그래픽스 API (Desktop OpenGL, OpenGL ES 2.0, OpenGL ES 3.0, WebGL 1.0, WebGL 2.0)를 지원하지 않습니다.

    구현 세부 정보

    이 섹션에서는 이 기능의 구현 세부 정보와 이 기능이 작동하는 방식에 대한 기술적 세부 정보에 대해 설명합니다.

    GBuffer 레이아웃

    이 섹션에서는 Unity가 디퍼드 렌더링 경로의 GBuffer에 머티리얼 속성을 저장하는 방법에 대해 설명합니다.

    다음 그림은 Unity가 디퍼드 렌더링 경로에서 사용하는 렌더 타겟의 각 픽셀에 대한 데이터 구조를 보여줍니다.

    Unity가 디퍼드 렌더링 경로에서 사용하는 렌더 타겟의 데이터 구조

    데이터 구조는 다음 컴포넌트로 구성됩니다.

    Albedo (sRGB)

    이 필드에는 24비트 sRGB 포맷의 알베도 컬러가 포함되어 있습니다.

    MaterialFlags

    머티리얼 플래그가 포함된 비트 필드입니다.

    • Bit 1, ReceiveShadowsOff: 설정하면 픽셀이 동적 그림자를 받지 않습니다.

    • Bit 2, SpecularHighlightsOff: 설정하면 픽셀이 스페큘러 하이라이트를 받지 않습니다.

    • Bit 4, SubtractiveMixedLighting: 설정하면 픽셀이 서브트랙티브 혼합 조명을 사용합니다.

    • Bit 8, SpecularSetup: 설정하면 머티리얼이 스페큘러 워크플로를 사용합니다.

    기술적 세부 정보는 /ShaderLibrary/UnityGBuffer.hlsl 파일을 참조하십시오.

    Specular

    이 필드에는 다음 값이 포함되어 있습니다.

    • SimpleLit 머티리얼: 24비트로 저장된 RGB 스페큘러 컬러.

    • 메탈릭 워크플로가 포함된 릿 머티리얼: 각각 8비트로 저장되고, 16비트는 사용되지 않음.

    • 스페큘러 워크플로가 포함된 릿 머티리얼: 24비트로 저장된 RGB 스페큘러 컬러.

    Occlusion

    이 필드에는 베이크된 조명의 베이크된 오클루전 값이 포함되어 있습니다. 실시간 조명의 경우 Unity는 베이크된 오클루전 값과 SSAO 값을 결합하여 앰비언트 오클루전 값을 계산합니다.

    Normal

    이 필드에는 24비트로 인코딩된 월드 공간 노멀이 포함되어 있습니다. 노멀 인코딩에 대한 자세한 내용은 GBuffer에서의 노멀 인코딩 섹션을 참조하십시오.

    Smoothness

    이 필드에는 SimpleLit 및 Lit 머티리얼의 평활도 값이 저장됩니다.

    Emissive/GI/Lighting

    이 렌더 타겟에는 머티리얼 이미시브 출력과 베이크된 조명이 포함되어 있습니다. Unity는 GBuffer 패스 동안 이 필드를 채웁니다. 디퍼드 셰이딩 패스 동안에는 이 렌더 타겟에 조명 결과를 저장합니다.

    렌더 타겟 포맷:

    • B10G11R11_UFloatPack32 - 다음 조건 중 하나가 true가 아닌 경우

      • URP 에셋에서 Quality > HDR 설정이 켜져 있고, 타겟 플레이어 플랫폼이 HDR을 지원하지 않습니다.

      • 플레이어 설정에서 PreserveFramebufferAlpha가 true입니다.

    • R16G6B16A16_SFloat - 프로젝트 설정으로 인해 Unity가 B10G11R11_UFloatPack32를 사용할 수 없는 경우

    • Unity가 리스트에 있는 다른 포맷 중 하나를 사용할 수 없는 경우 다음 메서드가 반환하는 포맷을 사용합니다. SystemInfo.GetGraphicsFormat(DefaultFormat.HDR)

    ShadowMask

    조명 모드가 서브트랙티브 또는 섀도우 마스크로 설정된 경우 Unity는 이 렌더 타겟을 GBuffer 레이아웃에 추가합니다.

    서브트랙티브 및 섀도우 마스크 모드는 포워드 렌더링 경로에 최적화되어 있으며 디퍼드 렌더링 경로에서는 효율성이 떨어집니다. 디퍼드 렌더링 경로에서는 이러한 모드 대신 베이크된 간접 모드를 사용하여 GPU 성능을 개선하십시오.

    Rendering Layer Mask

    광원 레이어 기능(URP 에셋에서 Advanced > Light Layers)이 활성화되면 Unity는 이 렌더 타겟을 GBuffer 레이아웃에 추가합니다. 광원 레이어 기능은 GPU 성능에 상당한 영향을 미칠 수 있습니다. 자세한 내용은 광원 레이어 섹션을 참조하십시오.

    Depth as Color

    네이티브 렌더 패스를 지원하는 플랫폼에서 네이티브 렌더 패스를 활성화하면 Unity는 이 렌더 타겟을 GBuffer 레이아웃에 추가합니다. Unity는 이 렌더 타겟에 뎁스를 컬러로 렌더링합니다. 이 렌더 타겟의 목적은 다음과 같습니다.

    • Vulkan 기기에서 성능을 개선합니다.

    • 동일한 렌더 패스 내 DepthStencil 버퍼에서 뎁스를 페치할 수 없는 경우 Unity가 Metal API에서 뎁스 버퍼를 가져올 수 있도록 허용합니다.

    Depth as Color 렌더 타겟의 포맷은 GraphicsFormat.R32_SFloat입니다.

    DepthStencil

    Unity는 머티리얼 타입을 표시하기 위해 이 렌더 타겟의 가장 높은 4개 비트를 예약합니다. URP 패스 태그: UniversalMaterialType도 참조하십시오.

    이 렌더 타겟의 경우 Unity는 플랫폼에 따라 D32F_S8 포맷 또는 D24S8 포맷을 선택합니다.

    GBuffer에서의 노멀 인코딩

    디퍼드 렌더링 경로에서 Unity는 GBuffer에 노멀을 저장합니다. Unity는 각 채널을 24비트 값으로 인코딩합니다.

    URP 유니버설 렌더러 에셋의 Rendering Path 프로퍼티에서 Deferred 옵션을 선택하면 Unity에 Accurate G-buffer normals 프로퍼티가 표시됩니다.

    URP 유니버설 렌더러 에셋의 Accurate G-buffer normals 프로퍼티

    Accurate G-buffer normals 프로퍼티를 사용하면 Unity가 노멀을 인코딩하는 방식을 설정할 수 있습니다.

    • Accurate G-buffer normals 꺼짐: Unity는 노멀 벡터의 값을 노멀 텍스처의 RGB 채널에 있는 GBuffer에 값(x, y, z)당 8비트로 저장합니다. 이 값들은 양자화되며 정확도가 손실됩니다. 이 옵션을 사용하면 모바일 GPU에서 성능이 향상되지만, 매끄러운 표면에서 컬러 밴딩 결함이 발생할 수 있습니다.

    • Accurate G-buffer normals 켜짐: Unity는 팔면체 인코딩을 사용하여 노멀 벡터의 값을 노멀 텍스처의 RGB 채널에 저장합니다. 이 인코딩을 사용하면 노멀 벡터의 값이 더 정확해지지만, 인코딩 및 디코딩 작업으로 인해 GPU에 추가 부하가 발생합니다.
      인코딩된 노멀 벡터의 정밀도는 포워드 렌더링 경로에서 샘플링된 값의 정밀도와 유사합니다.

    다음 그림은 카메라가 게임 오브젝트에 매우 가까이 있을 때 두 옵션의 시각적 차이를 보여줍니다.

    Accurate G-buffer normals, 두 옵션 간의 시각적 차이.

    Performance considerations

    Accurate G-buffer normals 옵션을 켜면 인코딩 및 디코딩 작업으로 인해 GPU에 추가 부하가 발생합니다. 이러한 부하는 데스크톱 플랫폼과 콘솔에서는 경미하지만, 모바일 GPU에서는 상당할 수 있습니다.

    이 옵션을 켜도 메모리 사용량은 증가하지 않습니다. 노멀을 저장하기 위해 Unity는 인코딩에 관계없이 노멀 텍스처에 동일한 RGB 채널을 사용합니다.

    디퍼드 렌더링 경로 렌더 패스

    다음 표에는 디퍼드 렌더링 경로의 렌더 패스 이벤트 순서가 나와 있습니다.

    렌더 패스 이벤트 디퍼드 렌더링 경로 패스 SSAO 렌더러 기능 패스
    BeforeRendering    
    BeforeRenderingShadows    
    AfterRenderingShadows    
    BeforeRenderingPrePasses 뎁스 프리패스, 또는 뎁스 및 노멀 프리패스(포워드 전용 머티리얼)  
    AfterRenderingPrePasses    
    BeforeRenderingGbuffer GBuffer 패스(GBufferPass)  
      GBuffer 뎁스 텍스처 복사  
    AfterRenderingGbuffer   SSAO(선택 사항)
    BeforeRenderingDeferredLights  
    디퍼드 렌더링(스텐실)
    AfterRenderingDeferredLights  
    BeforeRenderingOpaques 불투명 포워드 전용 머티리얼
    AfterRenderingOpaques   SSAO 및 블렌딩(선택 사항)
    BeforeRenderingSkybox    
    AfterRenderingSkybox    
    BeforeRenderingTransparents    
    AfterRenderingTransparents    
    BeforeRenderingPostProcessing    
    AfterRenderingPostProcessing    
    AfterRendering    

    다음 섹션에서는 디퍼드 렌더링 경로 렌더 패스에 대해 설명합니다.

    뎁스 프리패스, 또는 뎁스 및 노멀 프리패스

    디퍼드 렌더링 경로의 뎁스 프리패스 또는 뎁스 및 노멀 프리패스에서 Unity는 디퍼드 렌더링 모델을 지원하지 않는 머티리얼만 렌더링합니다. ComplexLit 셰이더를 사용하는 머티리얼을 예로 들 수 있습니다.

    디퍼드 렌더링 경로에서 Unity는 뎁스 프리패스를 사용하여 뎁스 버퍼의 복사본을 생성하지 않습니다(이 동작은 포워드 렌더링 경로와 다름).

    유니버설 렌더러에 SSAO 렌더러 기능이 있는 경우 Unity는 뎁스 및 노멀 프리패스를 실행합니다. SSAO는 스크린 공간 뎁스와 노멀 버퍼를 사용하여 앰비언트 오클루전을 계산합니다.

    선택적 패스: SSAO, SSAO 및 블렌딩

    유니버설 렌더러에 SSAO 렌더러 기능이 있고 After Opaque 옵션이 비활성화된 경우(이 옵션은 기본적으로 비활성화됨) Unity는 AfterRenderingGbuffer 이벤트에서 SSAO 패스를 실행합니다. SSAO 렌더러 기능은 SSAO 텍스처를 계산합니다. Unity는 이 텍스처를 디퍼드 렌더링 패스와 포워드 전용 머티리얼을 렌더링하는 패스에서 샘플링합니다.

    이 패스 순서를 사용하여 Unity는 베이크된 오클루전과 SSAO 렌더러 기능의 실시간 오클루전을 결합하고, 베이크된 앰비언트 오클루전과 실시간 앰비언트 오클루전으로 인해 이중으로 어두워지는 문제를 방지할 수 있습니다.

    After Opaque 옵션이 활성화되면 Unity는 포워드 전용 머티리얼을 렌더링한 후 AfterRenderingOpaques 이벤트에서 SSAO 및 블렌딩 패스를 실행합니다. 그런 다음, 추가 전체 화면 패스를 실행하여 이미시브/GI/라이팅 버퍼에 SSAO 텍스처를 오버레이합니다. 이로 인해 베이크된 오클루전과 실시간 오클루전을 받는 영역이 과도하게 어두워집니다.

    Performance considerations

    TBDR 아키텍처를 사용하는 모바일 플랫폼에서 After Opaque 옵션을 비활성화하면 Unity에 로드 및 저장 작업을 위한 추가 렌더 타겟이 필요합니다. 이는 성능에 상당한 영향을 미칩니다.

    모바일 플랫폼에서 After Opaque 옵션을 활성화하면 GPU 성능이 향상됩니다. TBDR 아키텍처를 사용하는 모바일 플랫폼에서 이 옵션을 활성화하면 추가 렌더 타겟 로드 및 저장 작업을 피할 수 있습니다.

    포워드 전용 패스

    특정 Unity 셰이더는 디퍼드 렌더링 경로에서 렌더링할 수 없는 조명 모델을 사용합니다.

    이러한 셰이더의 예는 다음과 같습니다.

    • ComplexLit: 이 셰이더의 조명 모델(예: 클리어 코트 효과)은 너무 복잡하며 추가 머티리얼 프로퍼티를 GBuffer에 보관할 수 없습니다.

    • Baked Lit 및 Unlit: 이 셰이더는 실시간 조명을 계산하지 않으며, 이로 인해 Unity는 포워드 전용 패스 동안 이미시브/GI/라이팅 버퍼에 직접 렌더링합니다. 디퍼드 렌더링(스텐실) 패스에서 셰이더를 평가하는 것보다 빠릅니다.

    • 커스텀 셰이더: Unity는 디퍼드 렌더링 경로에 필요한 패스 태그를 선언하지 않은 셰이더를 포워드 전용으로 렌더링합니다. 필요한 패스 태그는 LightMode 및 UniversalMaterialType입니다. 자세한 내용은 URP 패스 태그를 참조하십시오.

    Unity는 포워드 렌더링 경로에서 이러한 셰이더가 포함된 머티리얼을 렌더링합니다. SSAO 렌더러 기능이 ComplexLit 셰이더를 사용하여 머티리얼의 앰비언트 오클루전을 계산할 수 있으려면 Unity가 먼저 뎁스 및 노멀 프리패스에서 해당 머티리얼을 렌더링해야 합니다. Unity가 해당 머티리얼을 GBuffer 패스(GBufferPass)에서 렌더링하지 않기 때문입니다. 자세한 내용은 URP 패스 태그를 참조하십시오.

    일반 구현 참고 사항

    플랫폼 호환성을 극대화하기 위해 URP 디퍼드 렌더링 경로는 광원 스텐실 볼륨 기법을 사용하여 광원 볼륨을 렌더링하고 디퍼드 셰이딩을 적용합니다.

    관련 코드 파일

    이 섹션에는 디퍼드 렌더링 경로와 관련된 코드가 포함된 파일 리스트가 포함되어 있습니다.

    • 디퍼드 렌더링 경로를 처리하는 메인 클래스:

      com.unity.render-pipelines.universal\Runtime\DeferredLights.cs
      
    • GBuffer 패스를 위한 ScriptableRenderPass:

      com.unity.render-pipelines.universal\Runtime\Passes\GBufferPass.cs
      
    • 디퍼드 셰이딩 패스를 위한 ScriptableRenderPass:

      com.unity.render-pipelines.universal\Runtime\Passes\DeferredPass.cs
      
    • 디퍼드 셰이딩을 위한 셰이더 에셋:

      com.unity.render-pipelines.universal\Shaders\Utils\StencilDeferred.shader
      
    • 디퍼드 셰이딩을 위한 유틸리티 함수:

      com.unity.render-pipelines.universal\Shaders\Utils\Deferred.hlsl
      
    • GBuffer에서 머티리얼 프로퍼티를 저장하고 로드하기 위한 유틸리티 함수:

      com.unity.render-pipelines.universal\Shaders\Utils\UnityGBuffer.hlsl
      

    ShaderLab 패스 태그

    Unity가 디퍼드 렌더링 경로에서 셰이더를 렌더링할 수 있으려면 셰이더에 다음 태그 정의가 포함된 패스가 있어야 합니다.

    "LightMode" = "UniversalGBuffer"

    Unity는 GBuffer 패스 동안 LightMode 태그가 있는 셰이더를 실행합니다.

    Unity가 특정 머티리얼을 디퍼드 렌더링 경로의 포워드 전용 패스에서 렌더링해야 한다는 것을 나타내려면 셰이더 패스에 다음 태그를 추가하십시오.

    "LightMode" = "UniversalForwardOnly"

    "LightMode" = "DepthNormalsOnly"

    셰이더 조명 모델(Lit, SimpleLit)을 지정하려면 UniversalMaterialType 태그를 사용하십시오.

    자세한 내용은 URP 패스 태그: LightMode를 참조하십시오.

    제한 사항과 성능

    이 섹션에서는 디퍼드 렌더링 경로의 제한 사항에 대해 설명합니다.

    터레인 블렌딩

    4개가 넘는 터레인 레이어를 블렌딩하면 디퍼드 렌더링 경로가 포워드 렌더링 경로와 약간 다른 결과를 생성합니다. 이는 포워드 렌더링 경로에서 Unity가 멀티 패스 렌더링을 사용하여 처음 4개의 레이어를 다음 4개의 레이어와 별도로 처리하기 때문에 발생합니다.

    포워드 렌더링 경로에서 Unity는 머티리얼 프로퍼티를 병합하고 4개 레이어의 결합된 프로퍼티에 대한 조명을 한 번에 계산합니다. 그런 다음 Unity는 다음 4개의 레이어를 동일한 방식으로 처리하고 조명 결과를 알파 블렌딩합니다.

    디퍼드 렌더링 경로에서 Unity는 한 번에 4개 레이어씩 GBuffer 패스에 터레인 레이어를 결합한 후 디퍼드 렌더링 패스 동안 조명을 한 번만 계산합니다. 포워드 렌더링 경로와의 이러한 차이로 인해 시각적으로 다른 결과물이 나옵니다.

    Unity는 하드웨어 블렌딩(한 번에 4개 레이어)을 사용하여 GBuffer에서 머티리얼 프로퍼티를 결합하므로, 프로퍼티 값 조합의 정확도가 제한됩니다. 예를 들어 한 터레인 레이어에는 거친 터레인 디테일이 포함되어 있고 다른 레이어에는 세세한 디테일이 포함되어 있을 수 있으므로, 알파 블렌드 등식만으로는 픽셀 노멀을 올바르게 결합할 수 없습니다. 노멀을 평균화하거나 합하면 정확도가 떨어집니다.

    참고: Accurate G-buffer normals 설정을 켜면 터레인 블렌딩이 중단됩니다. 이 설정을 켜면 Unity는 팔면체 인코딩을 사용하여 노멀을 인코딩합니다. 이러한 방식으로 인코딩된 다른 레이어의 노멀은 인코딩의 비트 단위 속성(2x12비트)으로 인해 한데 블렌딩할 수 없습니다. 애플리케이션에 4개가 넘는 터레인 레이어가 필요한 경우 Accurate G-buffer normals 설정을 끄십시오.

    다음 그림은 렌더링 경로가 다른 터레인 레이어를 렌더링할 때의 시각적 차이를 보여줍니다.

    포워드 렌더링 경로를 사용하여 렌더링한 터레인 레이어
    포워드 렌더링 경로를 사용하여 렌더링한 터레인 레이어

    디퍼드 렌더링 경로를 사용하여 렌더링한 터레인 레이어
    디퍼드 렌더링 경로를 사용하여 렌더링한 터레인 레이어

    베이크된 전역 조명 및 조명 모드

    베이크된 전역 조명을 활성화하면 서브트랙티브 및 섀도우 마스크 조명 모드가 디퍼드 렌더링 경로의 GPU에 추가 부하를 가합니다.

    디퍼드 렌더링 경로는 호환성의 이유로 서브트랙티브 및 섀도우 마스크 조명 모드를 지원하지만, 포워드 렌더링 경로의 경우와 달리 이러한 모드가 성능 향상을 제공하지는 않습니다. 디퍼드 렌더링 경로에서 Unity는 동일한 조명 알고리즘을 사용하여 모든 메시를 처리하고 서브트랙티브 및 섀도우 마스크 모드에 필요한 추가 조명 프로퍼티를 섀도우 마스크 렌더 타겟에 저장합니다.

    디퍼드 렌더링 경로에서 베이크된 간접 조명 모드는 섀도우 마스크 렌더 타겟을 필요로 하지 않으므로 더 나은 성능을 제공합니다.

    광원 레이어

    URP는 광원 레이어 기능을 구현하여 특정 메시에 영향을 주는 씬 내 광원을 설정할 수 있도록 지원합니다. 특정 광원 레이어에 할당된 광원은 동일한 광원 레이어에 할당된 메시에만 영향을 줍니다.

    광원 레이어 기능을 활성화하려면 URP 에셋에서 Advanced > Light Layers를 선택하십시오.

    Light Layers 체크박스.

    성능 영향

    광원 레이어 기능을 사용하려면 렌더링 레이어 마스크(32비트)를 저장하기 위한 추가 GBuffer 렌더 타겟이 있어야 합니다. 추가 렌더 타겟은 GPU 성능에 부정적인 영향을 줄 수 있습니다.

    구현 참고 사항

    포워드 렌더링 경로에서 레이어 기능을 사용하면 특정 광원 세트로 특정 메시를 렌더링하도록 Unity에 지시할 수 있습니다. 레이어 기능은 컬링 마스크 시스템을 사용합니다.

    디퍼드 렌더링 경로는 셰이딩이 렌더링 루프의 후반 단계로 연기되기 때문에 광원 컬링 마스크가 있는 레이어 시스템을 사용할 수 없습니다(디퍼드 렌더링 경로 렌더 패스 표에서 디퍼드 렌더링(스텐실) 단계 참조).

    문서 개요
    맨 위로
    Copyright © 2023 Unity Technologies — 상표 및 이용약관
    • 법률정보
    • 개인정보처리방침
    • 쿠키
    • 내 개인정보 판매 금지
    • Your Privacy Choices (Cookie Settings)