Пользовательские текстуры рендеринга — это особый тип текстуры, который позволяет обновлять текстуру с помощью шейдераПрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь. Они являются расширением рендеринговых текстуртекстур специального типа, которые создаются и обновляются во время выполнения. Чтобы использовать их, сначала создайте новую текстуру рендеринга и назначьте одну из ваших камер для рендеринга в нее. Затем вы можете использовать Render Texture в материале, как обычную текстуру. Подробнее
См. в Словарь. Пользовательские текстуры рендеринга можно использовать для создания сложных симуляций, таких как каустика, имитация ряби для эффектов дождя и брызг жидкости.
Функция Custom Render Textures предоставляет скрипты и структуру шейдеров, помогающие выполнять сложную настройку, например различную частоту обновлений, частичные или многопроходные обновления.
Чтобы использовать этот фреймворк, вам необходимо назначить материал для объекта Custom Render Texture. Пользовательские текстуры рендеринга требуют совместимого материала. Дополнительную информацию см. в разделе Написание шейдера для пользовательской текстуры рендеринга.
Чтобы назначить совместимый материал ресурсу Custom Render Texture:
- Создайте новый объект Custom Render Texture.
- Назначьте ему совместимый Материал в свойстве Материал в ресурсе Пользовательская текстура рендеринга.
Этот материал обновляет содержимое текстуры в соответствии с ее параметрами.
Эта страница содержит следующую информацию:
- Совместимость конвейера рендеринга
- Свойства
- Экспорт пользовательской текстуры визуализации в файл
- Обновить зоны
- Управление настраиваемой текстурой рендеринга из скрипта
- Пользовательские текстуры рендеринга с двойной буферизацией
- Связывание пользовательских текстур визуализации
- Написание шейдера для пользовательской текстуры рендеринга
Совместимость конвейера рендеринга
В следующей таблице описана совместимость между функцией Пользовательские текстуры рендеринга и каждым конвейером рендеринга:
Функция | Встроенный конвейер рендеринга | Универсальный конвейер рендеринга (URP) | Конвейер рендеринга высокого разрешения (HDRP) | Пользовательский конвейер рендеринга с поддержкой сценариев (SRP) |
---|---|---|---|---|
Пользовательские Render Textures | Да (1) | Да (1) | Да (1) | Да (1) |
Примечание.
- В настоящее время вы не можете создавать материалы, которые обновляют и инициализируют пользовательские текстуры визуализации в График шейдеров. Вы можете создавать шейдеры, которые работают только с пользовательскими текстурами рендеринга, написав ShaderLabязык Unity для определения структуры шейдерных объектов. Подробнее
См. в коде Словарь.
Характеристики

Окно Пользовательские текстуры рендеринга ИнспекторОкно Unity, в котором отображается информация о текущем выбранном игровом объекте, настройки актива или проекта, что позволяет просматривать и редактировать значения. Дополнительная информация
See in Словарь отображает многие из тех же свойств, что и инспектор текстуры рендеринга, и некоторые свойства, характерные для Пользовательских текстур визуализации.
Render Texture:
Свойства: | Функции: |
---|---|
Dimension | Размер рендер-текстуры. |
2D | Делает Render Texture двумерной. |
Cube | Делает Render Texture кубической картой. |
3D | Делает Render Texture трехмерной. |
Size | Размер Render Texture в пикселяхНаименьшая единица компьютерного изображения. Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. More info See in Словарь. |
Color Format | Формат Render Texture. |
sRGB (Color Render Texture) | Включите, чтобы разрешить Render Texture использовать преобразования чтения/записи sRGB (только для чтения).. |
Enable Mip Maps | Включите это свойство, чтобы позволить Render Texture использовать MIP-карты. |
Auto generate Mip Maps | Включите это свойство, чтобы автоматически генерировать MIP-карты. |
Wrap Mode | Определяет, как Текстура ведет себя при тайлинге. |
Repeat | Текстура повторяется как плитка. |
Clamp | Unity растягивает края текстуры. |
Filter Mode | Определяет, как Unity фильтрует текстуру, когда она растягивается 3D-преобразованиями. |
Point | Текстура становится блочной вблизи. |
Bilinear | Текстура становится размытой вблизи. |
Trilinear | Как Bilinear, но Текстура также размывается между разными уровнями MIP. |
Aniso LevelУровень анизотропной фильтрации (AF) текстуры. Позволяет повысить качество текстуры при просмотре текстуры под крутым углом. Подходит для текстур пола и земли. More info See in Словарь |
Повышает качество текстуры при просмотре текстуры под крутым углом. Подходит для текстур пола и земли. |
Пользовательская текстура:
Эти свойства являются эксклюзивными для пользовательских текстур рендеринга. Пользовательские параметры текстуры разделены на три категории:
- Материал: определяет, какой шейдер используется для обновления текстуры.
- Инициализация. Управляет инициализацией текстуры перед тем, как шейдер выполнит какие-либо обновления.
- Обновить: управляет тем, как шейдер обновляет текстуру.
Свойства: | Функции: |
---|---|
MaterialРесурс, определяющий, как должна отображаться поверхность.. More info See in Словарь |
Материал, который Unity использует для обновления пользовательской текстуры рендеринга.. |
Shader Pass | Shader Pass, который Unity использует для обновления Custom Render Texture. В раскрывающемся списке показаны все проходы, доступные в вашем материале.. |
Initialization Mode | Скорость, с которой Unity инициализирует текстуру. |
OnLoad | Unity инициализирует текстуру один раз при создании. |
Realtime | Unity инициализирует текстуру каждый кадр. |
OnDemand | Unity инициализирует текстуру по запросу из скрипта. |
Source | Как текстура Unity инициализирует текстуру. |
Texture and Color | Unity использует текстуру, умноженную на цвет, для инициализации текстуры. |
Initialization Color | Определяет цвет, который Unity использует для инициализации пользовательской текстуры рендеринга. Если вы также предоставляете текстуру инициализации, Unity использует умножение цвета и текстуры для инициализации пользовательской текстуры рендеринга. |
Initialization Texture | Определяет текстуру, которую Unity использует для инициализации пользовательской текстуры рендеринга. Если вы также указываете Цвет инициализации, Unity использует умножение цвета и текстуры для инициализации пользовательской текстуры рендеринга. |
Material | Unity использует материал для инициализации текстуры. |
Initialization Material | Определяет материал, который Unity использует для инициализации пользовательской текстуры рендеринга. |
Update Mode | Скорость, с которой шейдер обновляет пользовательскую текстуру рендеринга.. |
OnLoad | Шейдер обновляет текстуру один раз при создании. |
Realtime | Шейдер обновляет текстуру каждый кадр. |
OnDemand | Шейдер обновляет текстуру по требованию скрипта. |
Period | Время в секундах, в течение которого Unity обновляет текстуру в реальном времени. Значение 0.0 обновляет каждый кадр. Это свойство доступно только в том случае, если для свойства Режим обновления установлено значение «В реальном времени». |
Double Buffered | Двойная буферизация текстуры. Каждое обновление меняет местами два буфера. Это позволяет вам прочитать результат предыдущего обновления в шейдере. |
Wrap Update Zones | Включите, чтобы позволить зонам частичного обновления обтекать границу текстуры. |
Cubemap Faces | (Только для кубической карты) Серия переключателей, позволяющая пользователю включать/отключать обновление на каждой из граней кубической карты. |
Update Zone Space | Система координат, в которой Unity определяет зоны обновления. |
Normalized | Все координаты и размеры находятся в диапазоне от 0 до 1, а верхний левый угол начинается с (0, 0). |
Pixel | Все координаты и размеры выражаются в пикселях, ограниченных шириной и высотой текстуры. Верхний левый угол, начиная с (0, 0). |
Update Zone List | Список зон обновления текстуры. Дополнительную информацию см. в разделе Обновить зоны. |
Экспорт пользовательской текстуры рендеринга в файл:
Вы можете экспортировать пользовательские текстуры рендеринга в файл PNG или EXR (в зависимости от формата текстуры) в меню Экспорт.
Обновление зон:
Когда Unity обновляет пользовательскую текстуру рендеринга, по умолчанию он использует материал для обновления всей текстуры одновременно. Custom Render Texture позволяет определить зоны частичного обновления. Вы можете использовать это, чтобы определить столько зон, сколько хотите, и порядок, в котором зоны обрабатываются.
Вы можете использовать зоны обновления для различных целей. Например, у вас может быть несколько небольших зон для разбрызгивания капель воды на текстуру, а затем полный проход для имитации ряби. Это также можно использовать в качестве оптимизации, когда вы знаете, что вам не нужно обновлять полную текстуру.

Зоны обновления имеют собственный набор свойств. На дисплее отображается Обновить пространство зоны. Координаты зависят от размера текстуры: 2D для 2D и кубических текстур или 3D для 3D-текстур.
Свойства: | Функции: |
---|---|
Center | Координаты центра зоны обновления. |
Size | Размер зоны обновления. |
Rotation | Ориентация зоны обновления в градусах (недоступно для 3D-текстур). |
Shader Pass | Определяет Shader Pass для использования в этой зоне обновления. Если вы установите это свойство по умолчанию, эта зона обновления использует Shader Pass, который вы определили в основной части инспектора. В противном случае он будет использовать предоставленный вами Shader Pass. |
Swap (Double Buffer) | (Только для текстур с двойной буферизацией) Когда вы включаете это свойство, Unity меняет местами буферы перед обработкой этой зоны обновления.. |
Управление пользовательской текстурой рендеринга из скрипта
Вы можете получить доступ к большинству функций Custom Render Texture в Scripting API. Вы также можете изменить параметры Материала, частоту обновления, зоны обновления, запросить обновление и многое другое с помощью скрипта.
Когда Unity обновляет или инициализирует пользовательскую текстуру рендеринга, она использует текущие свойства для рендеринга следующего кадра. Это гарантирует, что любой Материал, использующий эту текстуру, будет иметь актуальный результат. Например, в следующем скрипте Unity выполняет два обновления, используя второй массив Update Zone:
customRenderTexture.updateZones = updateZones1;
customRenderTexture.Update();
customRenderTexture.updateZones = updateZones2;
customRenderTexture.Update();
Примечание. Unity не обновляет и не инициализирует пользовательскую текстуру рендеринга одновременно с вызовом Update()
или Инициализировать()
. Это связано с тем, что Unity всегда обновляет и инициализирует пользовательскую текстуру рендеринга в начале следующего кадра.
Double Buffered Custom Textures
Вы можете дважды буферизовать пользовательские текстуры рендеринга. Для этого включите Двойную буферизацию в компоненте Пользовательские текстуры рендеринга или используйте CustomRenderTexture.doubleBuffered
.
Двойная буферизация означает, что внутри одной пользовательской текстуры рендеринга есть две текстуры, которые Unity может менять местами после каждого обновления. Это позволяет вам читать результат последнего обновления при записи нового результата в Custom Render Texture.
Двойная буферизация особенно полезна, если шейдер должен использовать содержимое, которое Unity уже записал в текстуру, но не может смешивать значения с классическими режимами наложения. Это также необходимо, если шейдеры должны выбирать разные пиксели из предыдущего результата.
Предупреждение о производительности. В настоящее время двойная буферизация включает копию текстуры при каждой подкачке, что может привести к снижению производительности в зависимости от частоты, с которой это выполняется, и разрешения текстуры.
Связывание пользовательских текстур визуализации
Вы можете объединить пользовательские текстуры рендеринга в цепочку. Для этого используйте пользовательскую текстуру визуализации в качестве входных данных для материала, который вы назначили Материалу или Режим инициализации > Текстура в другой пользовательской текстуре визуализации.
Вы можете использовать связанные пользовательские текстуры рендеринга для создания симуляции с несколькими шагами.
Связанные в цепочку пользовательские текстуры рендеринга зависят друг от друга. Unity вычисляет эту зависимость автоматически, чтобы каждое обновление происходило в правильном порядке. Для этого он просматривает материалы, назначенные свойствам Материал и Режим инициализации > Текстура в окне инспектора Пользовательские текстуры рендеринга.
Написание шейдера для пользовательской текстуры рендеринга
Чтобы обновить пользовательскую текстуру рендеринга вручную, вы можете написать специальный шейдер пользовательской текстуры рендеринга.
Чтобы помочь вам в написании шейдеров Custom Render Texture, вот два примера фреймворка, которые содержат служебные функции и встроенные вспомогательные переменные.
В следующем примере шейдера текстура заполняется цветом, умноженным на цвет. Когда вы пишете шейдер для пользовательской текстуры рендеринга, вы должны сделать следующее:
-
#include "UnityCustomRenderTexture.cginc"
. - Используйте предоставленный Vertex ShaderПрограмму, которая запускается для каждой вершины 3D-модели во время рендеринга модели. Подробнее
См. в СловарьCustomRenderTextureVertexShader
. - Используйте предоставленную структуру ввода
v2f_customrendertexture
для пиксельного шейдера.
Shader "CustomRenderTexture/Simple"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_Tex("InputTex", 2D) = "white" {}
}
SubShader
{
Lighting Off
Blend One Zero
Pass
{
CGPROGRAM
#include "UnityCustomRenderTexture.cginc"
#pragma vertex CustomRenderTextureVertexShader
#pragma fragment frag
#pragma target 3.0
float4 _Color;
sampler2D _Tex;
float4 frag(v2f_customrendertexture IN) : COLOR
{
return _Color * tex2D(_Tex, IN.localTexcoord.xy);
}
ENDCG
}
}
}
Следующий пример представляет собой шейдер для материала, который можно использовать для инициализации пользовательской текстуры рендеринга. При написании шейдера для материала инициализации обязательными являются следующие шаги:
#include "UnityCustomRenderTexture.cginc"
- Используйте предоставленный вершинный шейдер
CustomRenderTextureVertexShader
- Используйте предоставленную структуру ввода
v2f_customrendertexture
для пиксельного шейдера.
Shader "CustomRenderTexture/CustomTextureInit"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_Tex("InputTex", 2D) = "white" {}
}
SubShader
{
Lighting Off
Blend One Zero
Pass
{
CGPROGRAM
#include "UnityCustomRenderTexture.cginc"
#pragma vertex InitCustomRenderTextureVertexShader
#pragma fragment frag
#pragma target 3.0
float4 _Color;
sampler2D _Tex;
float4 frag(v2f_init_customrendertexture IN) : COLOR
{
return _Color * tex2D(_Tex, IN.texcoord.xy);
}
ENDCG
}
}
}
#include "UnityCustomRenderTexture.cginc"
предоставляет доступ к набору встроенных значений. Сюда входят глобальные значения, значения из структуры v2f_customrendertexture
и значения из структуры v2f_init_customrendertexture
.
Структура v2f_customrendertexture
принимает следующие входные данные:
Имя | Тип | Значение |
---|---|---|
localTexcoord |
float3 |
Координаты текстуры относительно обрабатываемой в данный момент зоны обновления. |
globalTexcoord |
float3 |
Координаты текстуры относительно самой пользовательской текстуры рендеринга |
primitiveID |
uint |
Индекс обрабатываемой в данный момент зоны обновления. |
direction |
float3 |
Для Cube Custom Render Texture направление текущего пикселя внутри кубической картыколлекции из шести квадратных текстур, которые могут представлять отражения в окружение или скайбокс, нарисованный позади вашей геометрии. Шесть квадратов образуют грани воображаемого куба, окружающего объект; каждая грань представляет вид по направлениям мировых осей (вверх, вниз, влево, вправо, вперед и назад). More info See in Словарь. |
The v2f_init_customrendertexture
structure accepts the following inputs:
Имя | Тип | Значение |
---|---|---|
texcoord |
float3 | Координаты текстуры относительно самой пользовательской текстуры рендеринга. |
Следующие структуры являются глобальными значениями:
Имя | Тип | Значение |
---|---|---|
_CustomRenderTextureWidth |
float |
Ширина пользовательской текстуры в пикселях |
_CustomRenderTextureHeight |
float |
Высота пользовательской текстуры в пикселях |
_CustomRenderTextureDepth |
float |
Глубина пользовательской текстуры в пикселях (только для 3D-текстур, иначе всегда будет равна 1). |
_CustomRenderTextureCubeFace |
float |
Индекс текущей грани кубической карты, которую обрабатывает Unity (-X, +X, -Y, +Y, -Z, +Z). Это относится только к кубическим картам. |
_CustomRenderTexture3DSlice |
float |
Индекс текущего обрабатываемого 3D-среза. Это относится только к 3D-текстурам. |
_SelfTexture2D |
Sampler2D |
Для текстур с двойной буферизацией: Текстура, содержащая результат последнего обновления перед последней заменой. |
_SelfTextureCube |
SamplerCUBE |
Для текстур с двойной буферизацией: Текстура, содержащая результат последнего обновления перед последней заменой. |
_SelfTexture3D |
Sampler3D |
Для текстур с двойной буферизацией: Текстура, содержащая результат последнего обновления перед последней заменой. |
Новая функция в Unity 2017.1