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

Чтение или запись текстуры в проходе рендеринга в URP

Вы можете использовать систему графов рендеринга API для установки текстуры в качестве входа или выхода для пользовательского прохода рендеринга, так что вы можете читать из нее или записывать в нее.

Примечание: Чтобы копировать между текстурами с меньшим количеством кода, используйте вместо этого метод AddBlitPass. Более подробную информацию см. в Blit с использованием системы графов рендеринга.

Установить текстуру в качестве входа

Чтобы установить текстуру в качестве входа для настраиваемого прохода рендеринга, выполните следующие действия:

  1. В данных пропуска добавьте поле обработки текстуры к данным, используемым вашим пропуском.

    Например:

    // Create the data your pass uses
    public class MyPassData
    {
        // Add a texture handle
        public TextureHandle textureToUse;
    }
    
  2. Установите ручку текстуры на текстуру, которую вы хотите использовать. Дополнительные сведения см. в Создание временной текстуры для одного кадра или Импорт текстуры в систему графов рендеринга.

  3. Вызов метода UseTexture для установки текстуры в качестве входа.

    Например:

    builder.UseTexture(passData.textureToUse, AccessFlags.Read);
    

В вашем методе SetRenderFunc теперь можно использовать объект TextureHandle в данных pass в качестве входа для APIs.

Установить текстуру в качестве объекта рендеринга

Чтобы установить текстуру в качестве объекта рендеринга, в методе RecordRenderGraph используйте методы SetRenderAttachment. Метод SetRenderAttachment устанавливает текстуру по умолчанию только для записи.

builder.SetRenderAttachment(textureHandle, 0);

Вам не нужно добавлять текстуру к данным прохода. Система графика рендеринга устанавливает текстуру для вас автоматически до выполнения прохода рендеринга.

Вы не можете использовать UseTexture и SetRenderAttachment на одной и той же текстуре в рендеринге AddRasterRenderPass. Подробнее см. в Изменение цели рендеринга во время рендеринга.

Если вам нужно нарисовать объекты на цель рендеринга, ознакомьтесь с Рисование объектов в проходе рендеринга.

Изменение назначения отображения во время прохождения отображения

Вы не можете изменить текстуру, в которую URP пишет во время прохождения рендеринга графической системы.

Вместо этого можно выполнить одно из следующих действий:

  • Создайте второй пользовательский проход рендеринга и используйте builder.SetRenderAttachment во время второго прохода рендеринга, чтобы изменить цель рендеринга.
  • Используйте UnsafePass API так что вы можете использовать SetRenderTarget API в SetRenderFunc метод. Для получения дополнительной информации см. Использование интерфейса CommandBuffer в графе рендеринга.

Эти методы можно использовать для чтения и записи в одну и ту же текстуру, сначала копируя текстуру во временную текстуру, которую вы создаете, а затем копируя обратно.

AddRasterRenderPass может объединять проходы рендеринга в один нативный проход рендеринга только в том случае, если используемые текстуры имеют очень похожие свойства. Если вы используете несколько текстур с разными свойствами, используйте вместо этого методы AddUnsafePass API и SetRenderTarget(). Рендирование может быть медленнее, потому что будет больше проходов рендеринга.

Примеры

См. нижеследующее: