Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Описание

Элемент трафарета RenderTexture.

Используйте это, чтобы получить доступ к данным трафарета базовой поверхности из текстуры рендеринга, а затем связать их в шейдере. Прежде чем создавать RenderTexture, убедитесь, что для формата трафарета задан формат, поддерживаемый целевой платформой.

Чтобы получить доступ к информации о трафарете в шейдере, вы должны прочитать ее из правильного канала. Данные трафарета хранятся в красном канале для всех графических API, которые его поддерживают, кроме DirectX 11, в этом случае они сохраняются в зеленом канале.

Если для параметра stencilFormat задано значение R8_UInt, необходимо использовать функцию Загрузить для чтения из Текстуры. В противном случае, если используется формат R8_UNorm, вы можете использовать выборку.

При использовании MSAA RenderTextures необходимо определить трафаретную текстуру с использованием эквивалентных типов текстур MS.

Вы не можете привязать буфер трафарета как RWTexture.

Ниже приведен пример шейдера Unlit, который считывает информацию о трафарете из RenderTexture с помощью stencilFormat R8_UInt и записывает ее как информацию о цвете в зеленый канал.

Посмотрите так же: GraphicsFormat.

Shader "Unlit/ExampleShader" { Properties { _ExampleTex("Texture", 2D) = "" {} } SubShader { Tags { "RenderType" = "Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 4.0 #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; #if SHADER_API_D3D11 #define STENCIL_CHANNEL g #else #define STENCIL_CHANNEL r #endif Texture2D _ExampleTex; v2f vert(appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag(v2f i) : SV_Target { int xRes = 1024; int yRes = 768; uint stencil = _ExampleTex.Load(int3(floor(i.uv.x * xRes), floor(i.uv.y * yRes), 0)).STENCIL_CHANNEL; fixed4 col = float4(0.0, float(stencil) / 255.0f, 0.0, 1.0); return col; } ENDCG } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3