Version: Unity 6.0 (6000.0)
언어 : 한국어
URP의 프레임 데이터 텍스처 레퍼런스
URP 렌더 그래프 시스템의 컴퓨트 셰이더

URP의 렌더 그래프 시스템에서 오브젝트 드로우

렌더 그래프 시스템을 사용하는 커스텀 렌더 패스에서 오브젝트를 드로우하려면 RendererListHandle API를 사용하여 드로우할 오브젝트 목록을 생성하십시오.

드로우할 오브젝트 목록 생성

다음 과정을 따르십시오.

  1. ScriptableRenderPass 클래스에서 패스 데이터에 사용하는 클래스에 RendererListHandle 필드를 만듭니다.

    예시:

    private class PassData
    {
        public RendererListHandle objectsToDraw;
    }
    
  2. 드로우할 오브젝트, 드로우 설정, 컬링 데이터를 포함하는 RendererListParams 오브젝트를 만듭니다. RenderListParams 오브젝트에 대한 상세 내용은 커스텀 렌더 파이프라인에서 간단한 렌더 루프 생성을 참고하십시오.

    자세한 예시는 예시를 참조하십시오.

  3. RecordRenderGraph 메서드에서 CreateRendererList API를 사용하여 RendererListParams 오브젝트를 렌더 그래프 시스템이 사용할 수 있는 핸들로 전환합니다.

    예시:

    RenderListHandle rendererListHandle = renderGraph.CreateRendererList(rendererListParameters);
    
  4. 패스 데이터에서 RendererListHandle 필드를 설정합니다.

    예시:

    passData.objectsToDraw = rendererListHandle;
    

오브젝트 드로우하기

패스 데이터에서 RendererListHandle을 설정한 후 목록에서 오브젝트를 드로우할 수 있습니다.

다음 과정을 따르십시오.

  1. RecordRenderGraph 메서드에서 UseRendererList API를 사용하여 렌더 그래프 시스템에 오브젝트 목록을 사용하도록 지시합니다.

    예시:

    builder.UseRendererList(passData.rendererListHandle);
    
  2. 오브젝트를 드로우할 텍스처를 설정합니다. URP가 오브젝트를 올바르게 렌더링할 수 있도록 컬러 텍스처와 뎁스 텍스처를 모두 설정합니다.

    예를 들어 다음은 활성 카메라 텍스처의 컬러 텍스처와 뎁스 텍스처를 드로우하도록 URP에 지시합니다.

    UniversalResourceData frameData = frameContext.Get<UniversalResourceData>();
    builder.SetRenderAttachment(frameData.activeColorTexture, 0);
    builder.SetRenderAttachmentDepth(frameData.activeDepthTexture, AccessFlags.Write);
    
  3. SetRenderFunc 메서드에서 DrawRendererList API를 사용하여 렌더러를 드로우합니다.

    예시:

    context.cmd.DrawRendererList(passData.rendererListHandle);
    

예제

다음 스크립터블 렌더러 기능은 오버라이드 머티리얼을 사용하여 Lightmode 태그가 UniversalForward로 설정된 씬의 오브젝트를 다시 드로우합니다.

이 스크립터블 리더 기능을 렌더러에 추가한 뒤, Material To Use 파라미터를 원하는 머티리얼로 설정합니다.

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using UnityEngine.Rendering.RenderGraphModule;
 
public class DrawObjectsWithOverrideMaterial : ScriptableRendererFeature
{

    DrawObjectsPass drawObjectsPass;
    public Material overrideMaterial;
 
    public override void Create()
    {
        // Create the render pass that draws the objects, and pass in the override material
        drawObjectsPass = new DrawObjectsPass(overrideMaterial);

        // Insert render passes after URP's post-processing render pass
        drawObjectsPass.renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing;
    }
 
    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    {
        // Add the render pass to the URP rendering loop
        renderer.EnqueuePass(drawObjectsPass);
    }

    class DrawObjectsPass : ScriptableRenderPass
    {
        private Material materialToUse;

        public DrawObjectsPass(Material overrideMaterial)
        {
            // Set the pass's local copy of the override material 
            materialToUse = overrideMaterial;
        }
       
        private class PassData
        {
            // Create a field to store the list of objects to draw
            public RendererListHandle rendererListHandle;
        }
 
        public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameContext)
        {
            using (var builder = renderGraph.AddRasterRenderPass<PassData>("Redraw objects", out var passData))
            {
                // Get the data needed to create the list of objects to draw
                UniversalRenderingData renderingData = frameContext.Get<UniversalRenderingData>();
                UniversalCameraData cameraData = frameContext.Get<UniversalCameraData>();
                UniversalLightData lightData = frameContext.Get<UniversalLightData>();
                SortingCriteria sortFlags = cameraData.defaultOpaqueSortFlags;
                RenderQueueRange renderQueueRange = RenderQueueRange.opaque;
                FilteringSettings filterSettings = new FilteringSettings(renderQueueRange, ~0);

                // Redraw only objects that have their LightMode tag set to UniversalForward 
                ShaderTagId shadersToOverride = new ShaderTagId("UniversalForward");

                // Create drawing settings
                DrawingSettings drawSettings = RenderingUtils.CreateDrawingSettings(shadersToOverride, renderingData, cameraData, lightData, sortFlags);

                // Add the override material to the drawing settings
                drawSettings.overrideMaterial = materialToUse;

                // Create the list of objects to draw
                var rendererListParameters = new RendererListParams(renderingData.cullResults, drawSettings, filterSettings);

                // Convert the list to a list handle that the render graph system can use
                passData.rendererListHandle = renderGraph.CreateRendererList(rendererListParameters);
                
                // Set the render target as the color and depth textures of the active camera texture
                UniversalResourceData resourceData = frameContext.Get<UniversalResourceData>();
                builder.UseRendererList(passData.rendererListHandle);
                builder.SetRenderAttachment(resourceData.activeColorTexture, 0);
                builder.SetRenderAttachmentDepth(resourceData.activeDepthTexture, AccessFlags.Write);

                builder.SetRenderFunc((PassData data, RasterGraphContext context) => ExecutePass(data, context));
            }
        }

        static void ExecutePass(PassData data, RasterGraphContext context)
        {
            // Clear the render target to black
            context.cmd.ClearRenderTarget(true, true, Color.black);

            // Draw the objects in the list
            context.cmd.DrawRendererList(data.rendererListHandle);
        }

    }
 
}

다른 예시를 살펴보고 싶다면 렌더 그래프 시스템 URP 패키지 샘플RendererList를 참조하십시오.

추가 리소스

URP의 프레임 데이터 텍스처 레퍼런스
URP 렌더 그래프 시스템의 컴퓨트 셰이더
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961