Объявление
public static void Blit(Texture source, RenderTexture dest);public static void Blit(Texture source, RenderTexture dest, Material mat, int pass = -1);
public static void Blit(Texture source, Material mat, int pass = -1);
public static void Blit(Texture source, RenderTexture dest, Vector2 scale, Vector2 offset);
public static void Blit(Texture source, RenderTexture dest, int sourceDepthSlice, int destDepthSlice);
public static void Blit(Texture source, Material mat, int pass, int destDepthSlice);
public static void Blit(Texture source, RenderTexture dest, Vector2 scale, Vector2 offset, int sourceDepthSlice, int destDepthSlice);
Параметры
source | Исходная текстура. |
dest | Место назначения RenderTexture. Установите для этого параметра значение null , чтобы вывести его прямо на экран. См. описание для получения дополнительной информации. |
mat | Материал для использования. Например, шейдер материала может выполнять некоторый эффект постобработки.. |
pass | Если -1 (по умолчанию), рисует все проходы в материале. В противном случае рисует только данный проход. |
offset | Смещение применяется к исходной координате текстуры. |
scale | Масштаб применяется к исходной координате текстуры. |
sourceDepthSlice | Исходный фрагмент массива текстур, из которого выполняется перенос. |
destDepthSlice | Целевой срез массива текстур для выполнения преобразования. |
Описание
Копирует исходную текстуру в целевую визуализированную текстуру с помощью шейдера.
В основном это используется для реализации эффектов постобработки.
Blit устанавливает dest
в качестве цели рендеринга, устанавливает source
_MainTex
на материале и рисует полноэкранный четырехугольник.
Чтобы перенести в резервный буфер экрана во встроенном конвейере рендеринга, необходимо убедиться, что dest
равно null
, и что свойство Camera.targetTexture файла Camera.main также равно null. Если dest
имеет значение null, Unity пытается использовать Camera.main.targetTexture
в качестве места назначения.
Чтобы перенести на экран резервный буфер в конвейере рендеринга на основе Scriptable Render Pipeline, необходимо вызвать Graphics.Blit в методе, который вы вызываете из RenderPipelineManager.endFrameRendering или RenderPipelineManager.endContextRendering обратные вызовы.
Если вы хотите использовать буфер глубины или шаблона, который является частью исходного
(Render)текстуры,
вам нужно вручную написать эквивалент функции Graphics.Blit, т. е. Graphics.SetRenderTarget с целевым цветовым буфером исходный буфер глубины, настройка ортогональной проекции (GL.LoadOrtho), настройка прохода материала (Material.SetPass) и нарисуйте четырехугольник (GL.Begin).
В линейном цветовом пространстве важно правильно установить состояние преобразования цвета sRGB<->Linear. В зависимости от того, что было обработано ранее, текущее состояние может отличаться от ожидаемого. Вы должны установить GL.sRGBWrite по мере необходимости, прежде чем выполнять Blit или любой другой ручной рендеринг.
Вызов Blit с параметрами source
и dest
, для которых задана одна и та же RenderTexture, может привести к неопределенному поведению. Лучшим подходом является либо использование Пользовательских текстур визуализации с двойной буферизацией, либо использование двух текстур визуализации и чередование между ними для реализации двойной буферизации вручную.
Graphics.Blit изменяет RenderTexture.active. Отслеживайте ранее активную RenderTexture, если вам нужно использовать ее после вызова Graphics.Blit.
Смотрите так же: Graphics.BlitMultiTap, Post-processing effects.
using UnityEngine;
public class Example : MonoBehaviour
{ // Copies aTexture to rTex and displays it in all cameras.
Texture aTexture;
RenderTexture rTex;
void Start()
{
if (!aTexture || !rTex)
{
Debug.LogError("A texture or a render texture are missing, assign them.");
}
}
void Update()
{
Graphics.Blit(aTexture, rTex);
}
}