Чтение или запись текстуры в проходе рендеринга в URP
Вы можете использовать систему графов рендеринга API для установки текстуры в качестве входа или выхода для пользовательского прохода рендеринга, так что вы можете читать из нее или записывать в нее.
Примечание: Чтобы копировать между текстурами с меньшим количеством кода, используйте вместо этого метод AddBlitPass. Более подробную информацию см. в Blit с использованием системы графов рендеринга.
Установить текстуру в качестве входа
Чтобы установить текстуру в качестве входа для настраиваемого прохода рендеринга, выполните следующие действия:
-
В данных пропуска добавьте поле обработки текстуры к данным, используемым вашим пропуском.
Например:
// Create the data your pass uses public class MyPassData { // Add a texture handle public TextureHandle textureToUse; } Установите ручку текстуры на текстуру, которую вы хотите использовать. Дополнительные сведения см. в Создание временной текстуры для одного кадра или Импорт текстуры в систему графов рендеринга.
-
Вызов метода
UseTextureдля установки текстуры в качестве входа.Например:
builder.UseTexture(passData.textureToUse, AccessFlags.Read);
В вашем методе SetRenderFunc теперь можно использовать объект TextureHandle в данных pass в качестве входа для APIs.
Установить текстуру в качестве объекта рендеринга
Чтобы установить текстуру в качестве объекта рендеринга, в методе RecordRenderGraph используйте методы SetRenderAttachment. Метод SetRenderAttachment устанавливает текстуру по умолчанию только для записи.
builder.SetRenderAttachment(textureHandle, 0);
Вам не нужно добавлять текстуру к данным прохода. Система графика рендеринга устанавливает текстуру для вас автоматически до выполнения прохода рендеринга.
Вы не можете использовать UseTexture и SetRenderAttachment на одной и той же текстуре в рендеринге AddRasterRenderPass. Подробнее см. в Изменение цели рендеринга во время рендеринга.
Если вам нужно нарисовать объекты на цель рендеринга, ознакомьтесь с Рисование объектов в проходе рендеринга.
Изменение назначения отображения во время прохождения отображения
Вы не можете изменить текстуру, в которую URP пишет во время прохождения рендеринга графической системы.
Вместо этого можно выполнить одно из следующих действий:
- Создайте второй пользовательский проход рендеринга и используйте
builder.SetRenderAttachmentво время второго прохода рендеринга, чтобы изменить цель рендеринга. - Используйте
UnsafePassAPI так что вы можете использоватьSetRenderTargetAPI вSetRenderFuncметод. Для получения дополнительной информации см. Использование интерфейса CommandBuffer в графе рендеринга.
Эти методы можно использовать для чтения и записи в одну и ту же текстуру, сначала копируя текстуру во временную текстуру, которую вы создаете, а затем копируя обратно.
AddRasterRenderPass может объединять проходы рендеринга в один нативный проход рендеринга только в том случае, если используемые текстуры имеют очень похожие свойства. Если вы используете несколько текстур с разными свойствами, используйте вместо этого методы AddUnsafePass API и SetRenderTarget(). Рендирование может быть медленнее, потому что будет больше проходов рендеринга.
Примеры
См. нижеследующее:
- Напишите рендерный проход для примера, который создает текстуру, а затем блиц к ней.
- Использовать текстуру в нескольких проходах рендеринга