CommandBuffer.Blit
Declaration
public void Blit(Texture source, Rendering.RenderTargetIdentifier dest);public void Blit(Texture source, Rendering.RenderTargetIdentifier dest, Material mat);public void Blit(Texture source, Rendering.RenderTargetIdentifier dest, Material mat, int pass);public void Blit(Texture source, Rendering.RenderTargetIdentifier dest, Vector2 scale, Vector2 offset);public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest);public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, Material mat);public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, Material mat, int pass);public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, Vector2 scale, Vector2 offset);public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, int sourceDepthSlice, int destDepthSlice);public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, Vector2 scale, Vector2 offset, int sourceDepthSlice, int destDepthSlice);public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, Material mat, int pass, int destDepthSlice);Параметры
| Параметр | Описание |
|---|---|
| источник | Исходная текстура или RenderTargetIdentifier. |
| рука | Место назначения RenderTargetIdentifier. |
| мат | Материал для использования. Если вы не указываете mat, Unity использует материал по умолчанию. |
| пропуск | Если значением является -1, то Unity рисует все проходы в mat. В противном случае Unity рисует только проход, на который установлен pass. Значение по умолчанию — -1. |
| шкала | Шкала, которая будет применяться. |
| офсет | Смещение, которое будет применяться. |
| sourceDepthSlice | Элемент в исходной текстуре, из которого будет копироваться текстура, например текстура в массиве текстур. Вы не можете использовать sourceDepthSlice для указания поверхности в кубическом отображении. |
| destDepthSlice | Элемент в текстуре назначения для копирования, например текстура в массиве текстур. Вы не можете использовать destDepthSlice для указания поверхности в кубическом отображении. |
Описание
Добавлена команда для использования шейдера для копирования данных пикселей из текстуры в текстуру рендеринга.
Этот метод добавляет команду для копирования данных пикселей из текстуры на GPU в текстуру рендеринга на GPU. Это один из самых быстрых способов копирования текстуры.
При использовании Graphics.BlitUnity выполняет следующее:
- Устанавливает активная текстура отображения к Генеральной Ассамблее
destтекстура. - Передаёт
sourceматериалуmatв качестве свойства_MainTex. - Использует шейдер материала для рисования полноэкранной поверхности от текстуры
sourceдо текстурыdest.
Если переданный mat материал не содержит свойства _MainTex, метод Blit не использует source.
С помощью Graphics.Blit можно создавать эффекты постобработки, назначив mat материал с пользовательским шейдером.
При этом Blit изменяет RenderTexture.active. Если после вызова Blit потребуется активная Render Texture, сохраните её заранее.
Не назначайте одну и ту же Render Texture параметрам source и dest: это может привести к неопределённому поведению. Вместо этого используйте Настраиваемые текстуры с двойной буферизацией либо две Render Texture, попеременно переключаясь между ними вручную.
В линейном цветовом пространстве задайте GL.sRGBWrite перед вызовом Blit, чтобы преобразование из sRGB в линейное пространство выполнялось ожидаемым образом.
Чтобы выполнить blit на экран во встроенном рендер-конвейере, сделайте следующее:
- Установите
destнаnull. Unity теперь используетCamera.main.targetTextureв качестве текстуры назначения. - Установите свойство Camera.targetTexture для Camera.main на
null.
Чтобы блит на экран в Universal Render Pipeline (URP) или High Definition Render Pipeline (HDRP), вы должны позвонить Graphics.Blit или CommandBuffer.Blit внутри метода, который вы вызываете из RenderPipelineManager.endContextRendering обратный вызов.
Если вы хотите использовать буфер глубины или шаблона, который является частью source (Render)texture, или blit к субрегиону текстуры, вам придется вручную написать эквивалент текстуры, Graphics.Blit функция — i.e. Graphics.SetRenderTarget с буфером цвета назначения и буфером глубины источника, установка ортографической проекции (GL.LoadOrtho), настройка материала пропуска (Material.SetPass) и нарисовать четверку (GL.Begin).
Часто предыдущее содержание Blit dest В этом случае рекомендуется активировать функцию «Сохранить как» в меню «Настройки». dest отображать цель явно с соответствующими действиями загрузки и хранения, используя SetRenderTarget. Затем Blit dest следует установить на BuiltinRenderTextureType.CurrentActive.
Дополнительные ресурсы: Graphics.BlitMultiTap, Последствия после обработки.