Unity 6.3
0 онлайн 44 гостей 3 в системе
Вход

RenderTextureSubElement.Stencil

Описание

Элемент шаблона RenderTexture.

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

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

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

При использовании MSAA RenderTextures, вам нужно определить текстуру шаблона с помощью эквивалентного MS Типы текстур.

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

Ниже приведен пример Unlit shader, который считывает информацию о шаблоне из 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<uint2> _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 } } }