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

Написать шейдер для пользовательской текстуры отображения

Чтобы обновить пользовательскую текстуру вручную, вы можете написать специализированный шейдер для пользовательской текстуры.

Чтобы помочь вам написать свой собственный шейдер Custom Render Texture, здесь представлены два примера фреймворков, которые содержат функции утилиты и встроенные переменные помощи.

Следующий пример шейдера заполняет текстуру цветом, умноженным на цвет. При написании шейдера для пользовательской текстуры рендеринга необходимо выполнить следующие действия:

  • #include "UnityCustomRenderTexture.cginc".
  • Используйте предоставленный Vertex Shader 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
        {
            HLSLPROGRAM
            #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);
            }
            ENDHLSL
            }
    }
}

В следующем примере показан шейдер для материала, который можно использовать для инициализации пользовательской текстуры рендеринга. При написании шейдера для инициализации материала обязательно выполнять следующие действия:

  • #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
        {
            HLSLPROGRAM
            #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);
            }
            ENDHLSL
        }
    }
}