Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d I';我试图在Unity中修改着色器,但是得到了;'中的着色器错误;自定义/子空间外观';:无法识别的标识符';输入';在第82行(d3d11上)“;?_Unity3d_Shader - Fatal编程技术网

Unity3d I';我试图在Unity中修改着色器,但是得到了;'中的着色器错误;自定义/子空间外观';:无法识别的标识符';输入';在第82行(d3d11上)“;?

Unity3d I';我试图在Unity中修改着色器,但是得到了;'中的着色器错误;自定义/子空间外观';:无法识别的标识符';输入';在第82行(d3d11上)“;?,unity3d,shader,Unity3d,Shader,我想马上声明,我不经常使用着色器,我正在使用的基本着色器——Unity论坛中一个线程的力场着色器,是一个更老的版本。然而,最初的“几乎”是我想要的 我想修改它,添加滚动效果,以模拟速度,但奇怪的是,我得到了“无法识别的标识符‘输入’”。输入是一个正态变量。。据推测,在Unity的着色器中。以下是我迄今为止的代码: Shader "Custom/SubspaceLook" { Properties { _Color ("Main Color", Color) = (1,1,1,0.5)

我想马上声明,我不经常使用着色器,我正在使用的基本着色器——Unity论坛中一个线程的力场着色器,是一个更老的版本。然而,最初的“几乎”是我想要的

我想修改它,添加滚动效果,以模拟速度,但奇怪的是,我得到了“无法识别的标识符‘输入’”。输入是一个正态变量。。据推测,在Unity的着色器中。以下是我迄今为止的代码:

Shader "Custom/SubspaceLook" {

Properties {
   _Color ("Main Color", Color) = (1,1,1,0.5)
   _MainTex ("Texture", 2D) = "white" {}
   _UVScale ("UV Scale", Range (0.05, 4)) = 1
   _UVDistortion ("UV Distortion", Range (0.01, 1)) = 0.5
   _Rate ("Oscillation Rate", Range (5, 200)) = 10
   _Rate2 ("Oscillation Rate Difference", Range (1, 3)) = 1.43
   _ZPhase ("Z Phase", Range (0, 3)) = 0.5
   _Scale ("Scale", Range (0.02, 2)) = 0.5
   _Distortion ("Distortion", Range (0, 20)) = 0.4
   _ScrollSpeedX("Scroll X", Range(0, 10)) = 2
   _ScrollSpeedY("Scroll Y", Range(0, 10)) = 3
}

SubShader {

   ZWrite Off
   Tags { "Queue" = "Transparent" }
   Blend One One


   Pass {

        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #pragma fragmentoption ARB_fog_exp2
        #include "UnityCG.cginc"

        float4 _Color;
        sampler2D _MainTex;
        float _Rate;
        float _Rate2;
        float _Scale;
        float _Distortion;
        float _ZPhase;
        float _UVScale;
        float _UVDistortion;
        float _ScrollSpeedX;
        float _ScrollSpeedY;

        struct v2f {
            float4 pos : SV_POSITION;
            float3 uvsin : TEXCOORD0;
            float3 vertsin : TEXCOORD1;
            float2 uv : TEXCOORD2;
       };

       v2f vert (appdata_base v)
       {
           v2f o;
           o.pos = UnityObjectToClipPos (v.vertex);

           float s = 1 / _Scale;
           float t = (_Time[0]*_Rate*_Scale) / _Distortion;
           float2 uv = float2(v.vertex.y * 0.3 + (v.vertex.y - v.vertex.z * 
           0.0545), v.vertex.x + (v.vertex.z - v.vertex.x * 0.03165));
           o.vertsin = sin((v.vertex.xyz + t) * s);  
           o.uvsin = sin((float3(uv, t * _ZPhase) + (t* _Rate2)) * s) * 
           _Distortion;
           o.uv = uv;

           return o;
       }

    half4 frag (v2f i) : COLOR
    {
        float3 vert = i.vertsin;
        float3 uv = i.uvsin;
        float mix = 1 + sin((vert.x - uv.x) + (vert.y - uv.y) + (vert.z - 
        uv.z));
        float mix2 = 1 + sin((vert.x + uv.x) - (vert.y + uv.y) - (vert.z + 
    uv.z));

        return half4( tex2D( _MainTex, (i.uv + (float2(mix, mix2) * 
        _UVDistortion)) * _UVScale ) * 1.5 * _Color);  
    }

    void surf(Input IN, inout SurfaceOutput o)
    {
        fixed2 scrolledUV = IN.uv_MainTex;

        fixed xScrollValue = _ScrollSpeedX * _Time;
        fixed yScrollValue = _ScrollSpeedY * _Time;

        scrolledUV += fixed2(xScrollValue, yScrollValue);

        half2 c = tex2D(_MainTex, scrolledUV);

        o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rbg;
        o.Albedo += c.rbg;

        half rim = 1.0 - saturate(dot(normalize(IN.viewDir), o.Normal));
        o.Emission = _Rimcolor.rgb * pow(rim, _RimPower);
    }

    ENDCG

    }
}
    Fallback "Diffuse"
}

我对原始着色器的主要更改是添加滚动值和“冲浪”。除此之外,我还没有接触到forestjohnson在2008年编写的第一个版本。

您将混合匹配曲面着色器代码和常规着色器:

    #pragma vertex vert
    #pragma fragment frag
这些用于显式顶点和像素着色器,而surf()是unity曲面着色器系统

编译器指出的错误是着色器缺少由surf()函数引用的Input struct,但这不是您需要研究的内容

  struct Input {
      float2 uv_MainTex;
  };

请不要在问题上贴上无用的标签。您既不需要C++专家,也不需要OpenGL专家。这些技术中没有一项被Unity曝光。抱歉,我是按照系统的建议去做的。谢谢。是否可以编辑此项以调整常规着色器,或者我是否应该寻找滚动的另一种解决方案?请在中查找“带顶点修改器的法线拉伸”,这也会修改顶点位置。然后尝试将该功能移植到当前滚动曲面着色器。或者,如果你使用的旧着色器很好,那么只需在其中添加滚动,因为你没有使用照明。请注意这个愚蠢的问题