Unity3D:我的着色器在GameView中不能很好地工作

时间:2015-10-01 07:52:35

标签: unity3d shader

我写了具有凹凸纹理的SurfaceShader。

我将我的材料应用于球体。我可以在场景视图中看到球体,但我无法在游戏视图中看到球体

当我将其他着色器应用于球体时,我可以在GameView中看到球体。 enter image description here enter image description here

我在Unity社区找到了the same question

我知道我不应该使用Vertex Lighting而是Pixel Lighting。

但我无法理解应该更改哪些设置。我应该修改着色器还是我的设置?

我的着色器如下。

Shader "Custom/MyShader2"{
    Properties{
        _Bump("Bump",2D) = "white"{}
        _DiffuseColor("Diffuse Color", Color) = (1.0,1.0,1.0)
        _Specular("Specular",Range(1.0,50.0)) = 15.0
        _Alpha("Alpha",Range(0,1)) = 1
    }
    SubShader{
        Tags{
            "RenderType" = "Opaque"
        }
        CGPROGRAM
        #pragma surface surf Original alpha
        struct Input{
            float4 color: COLOR;
            float2 uv_Bump;
        };
        float3 _DiffuseColor;
        float _Specular;
        sampler2D _Bump;
        float _Alpha;
        half4 LightingOriginal( SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) {
            half diff = max(0,dot(s.Normal,lightDir));
            half spec = max(0,dot(s.Normal,normalize(lightDir + viewDir)));
            spec = pow(spec, _Specular);
            half trans = 1.0 - max(0,dot(s.Normal, viewDir)) + spec;
            half4 c;
            c. rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec / 2) * (atten * 2);
            c.a = trans;
            return c;
        }
        void surf( Input IN, inout SurfaceOutput o) {
            o.Albedo = _DiffuseColor * _Alpha;;
            o.Normal = UnpackNormal(tex2D(_Bump,IN.uv_Bump));
            o.Alpha = _Alpha;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

非常感谢。

1 个答案:

答案 0 :(得分:0)

尝试更改

Tags { "RenderType" = "Opaque" }

Tags { "Queue"="Transparent" "RenderType"="Transparent" }
Blend SrcAlpha OneMinusSrcAlpha
Cull Off ZWrite Off