簡體   English   中英

統一着色器中的下標無效

[英]Invalid subscript in unity shader

我對着色器編碼很陌生,但是我通過將 2 個未點亮的着色器分組來制作這個當我嘗試制作這個着色器時,它旨在創建一個輪廓並讓我插入 2 個紋理統一告訴我有這個錯誤:無效的下標`頂點' 在第 61 行

我嘗試了一些東西,但我沒有讓這個着色器正常工作,如果有人知道我必須做什么,我會非常感激

Shader "Unlit/Combined"
{
    Properties
    {
        _MainTex("Texture", 2D) = "white" {}
        _SecondaryTex("Secondary Texture", 2D) = "white" {}
        _LerpValue("Transition float", Range(0,1)) = 0.5

        _OutlineColor("Outline color", color) = (0,0,0,1)
        _OutlineWidth("Outline width", Range(1.0,5.0)) = 1.01
    }





        SubShader
        {
            Tags { "RenderType" = "Opaque"  "Queue" = "Transparent"}
            LOD 100

            Pass
            {
                CGPROGRAM

                #pragma vertex vert
                #pragma fragment frag

                // make fog work
                #pragma multi_compile_fog

                #include "UnityCG.cginc"

                struct appdata
                {
                    //float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                    float3 normal : NORMAL;
                };

                struct v2f
                {
                    float2 uv : TEXCOORD0;
                    UNITY_FOG_COORDS(1)
                    float4 outvertex : SV_POSITION;
                    float4 pos : POSITION;
                    float3 normal : NORMAL;
                };

                sampler2D _MainTex;
                float4 _MainTex_ST;
                sampler2D _SecondaryTex;
                float4 _SecondaryTex_ST;
                float _LerpValue;
                float _OutlineWidth;
                float4 _OutlineColor;

                v2f vert(appdata v)
                {
                    v2f o;
                    v.vertex.xyz *= _OutlineWidth;
                    o.outvertex = UnityObjectToClipPos(v.vertex);
                    o.pos = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    UNITY_TRANSFER_FOG(o,o.vertex);
                    return o;
                }

                fixed4 frag(v2f i) : SV_Target
                {
                    // sample the texture
                    fixed4 col = lerp(tex2D(_MainTex, i.uv),tex2D(_SecondaryTex, i.uv), _LerpValue);

                    return col;
                    return _OutlineColor;
                }

                ENDCG
            }


            Pass//Normal render
            {
                ZWrite On

                Material
                {
                    Diffuse[_Color]
                    Ambient[_Color]
                }

                Lighting On

                SetTexture[_MainTex]
                {
                    ConstantColor[_Color]
                }

                SetTexture[_MainTex]
                {
                    Combine previous * primary DOUBLE
                }

            }
        }
}

有問題的行是第 61 行:

v.vertex.xyz *= _OutlineWidth;

如果您查看v聲明為的類型,則其聲明為appdata

v2f vert(appdata v)

如果您查看appdata的定義:

struct appdata
{
    //float4 vertex : POSITION;
    float2 uv : TEXCOORD0;
    float3 normal : NORMAL;
};

你會看到它沒有vertex屬性,只有uvnormal

因此,應該將有問題的行更改為其中一個,這可能是normal的,因為您嘗試修改它的 3 值屬性(並且 uv 只有xy )。

v.normal.xyz *= _OutlineWidth;

或者,您可以通過取消注釋已注釋掉的vertex來修改appdata以具有 vertex 屬性:

struct appdata
{
    float4 vertex : POSITION;
    float2 uv : TEXCOORD0;
    float3 normal : NORMAL;
};

或刪除第 61 行,具體取決於您要執行的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM