Unity 6.3
0 онлайн 25 гостей 3 в системе
Вход

Blit с использованием графической системы рендеринга в URP

Для перехода от одной текстуры к другой в графической системе рендеринга в Universal Render Pipeline (URP), используйте AddBlitPass API. API генерирует проход рендеринга автоматически, так что вам не нужно использовать метод AddRasterRenderPass.

Выполните следующие действия:

  1. Чтобы создать шейдер и материал, который работает с blit рендерингом, в главном меню выберите Ассеты > Создать > Шейдер > SRP Blit Shader, затем создайте материал из него.

    Чтобы использовать граф шейдера вместо этого, см. Создание низкоуровневого пользовательского эффекта пост-обработки.

    Дополнительные сведения о записи шейдеров в URP см. в Запись пользовательских шейдеров в URP.

  2. Добавьте using UnityEngine.Rendering.RenderGraphModule.Util в ваш скрипт прохождения рендеринга.

  3. В вашем проходе рендеринга создайте поле для материала блита. Например:

    public class MyBlitPass : ScriptableRenderPass
    {
        Material blitMaterial;
    }
    
  4. Настройте текстуру, из которой будет выполняться блитинг, и текстуру, в которую будет выполняться блитинг. Например:

    TextureHandle sourceTexture = renderGraph.CreateTexture(sourceTextureProperties);
    TextureHandle destinationTexture = renderGraph.CreateTexture(destinationTextureProperties);
    

    Дополнительные сведения см. в Получение данных из текущего кадра в URP и Создание временной текстуры для одного рендеринга.

  5. Чтобы настроить материал, текстуры и проход шейдера для операции blit, создайте объект RenderGraphUtils.BlitMaterialParameters. Например:

    // Create a BlitMaterialParameters object with the blit material, source texture, destination texture, and shader pass to use.
    var blitParams = new RenderGraphUtils.BlitMaterialParameters(sourceTexture, destinationTexture, blitMaterial, 0);
    
  6. Чтобы добавить проход blit, вызовите метод AddBlitPass с параметрами blit. Например:

    renderGraph.AddBlitPass(blitParams, "Pass created with AddBlitPass");
    

Полный пример см. в примере, названном BlitWithMaterial в примерах графа отображения образцов пакетов Universal Render Pipeline (URP).

Если вы используете AddBlitPass с материалом по умолчанию, Unity может использовать AddCopyPass API вместо этого, чтобы оптимизировать проход рендеринга так, чтобы он получал доступ к кадровому буферу из чиповой памяти GPU вместо видеопамяти. Этот процесс иногда называется получением кадрового буфера. Для более подробной информации см. AddCopyPass API.

Избегайте обратной связи

После блита, вы обычно блитаете текстуру назначения обратно к активной цветовой текстуре. Однако в системе графов рендеринга вы можете обновить данные кадра, чтобы вместо этого указывать на текстуру назначения, так что вы блитаете только один раз. Например:

// Set the camera color as the destination texture you blitted to.
frameData.cameraColor = destinationTexture;

Более подробную информацию см. в Предотвращение биттинга в цветовой буфер и из него.

Настройка прохода рендеринга

Чтобы настроить проход рендеринга, генерируемый методами, например, чтобы изменить настройки или добавить больше ресурсов, вызовите APIs с параметром returnBuilder, установленным на true. Затем APIs возвращает объект IBaseRenderGraphBuilder, который вы обычно получаете как var builder от метода, подобного AddRasterRenderPass.

Например:

using (var builder = renderGraph.AddBlitPass(blitParams, "Pass created with AddBlitPass", returnBuilder: true))
{
    // Use the builder variable to customize the render pass here.
}

Дополнительные ресурсы