x


Transparent Diffuse Specular Normal Shader problem

I'm trying to create a shader that uses separated alpha, specular and normal maps along with a color texture, but I'm having some strange problems with it and I can't figure out what's wrong.

Here's my shader:

Shader "Custom/DiffuseAlphaNormalSpecular" {
Properties {
    _MainTex ("Diffuse", 2D) = "white" {}
    _AlphaMap ("Alpha", 2D) = "white" {}
    _BumpMap ("Normalmap", 2D) = "bump" {}
    _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
    _SpecularMap ("Specular", 2D) = "white" {}
    _Shininess ("Shininess", Range (0.01, 1)) = 0.5
}
SubShader {

    Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
    LOD 300

    CGPROGRAM
    #pragma surface surf BlinnPhong alpha decal:blend

    sampler2D _MainTex;
    sampler2D _AlphaMap;
    sampler2D _BumpMap;
    sampler2D _SpecularMap;
    half _Shininess;

    struct Input {
        float2 uv_MainTex;
        float2 uv_AlphaMap;
       float2 uv_SpecularMap;
       float2 uv_BumpMap;
    };

    void surf (Input IN, inout SurfaceOutput o) {
        half4 d = tex2D (_MainTex, IN.uv_MainTex);
        half4 a = tex2D (_AlphaMap, IN.uv_AlphaMap);
       half4 b = tex2D (_BumpMap, IN.uv_BumpMap);
       half4 s = tex2D (_SpecularMap, IN.uv_SpecularMap);

        o.Albedo = d.rgb;
        o.Alpha = Luminance(a.rgb);
       o.Normal = UnpackNormal(b);
       o.Specular = _Shininess;
       o.Gloss = s.rgb * o.Alpha;;
    }
    ENDCG
} 
FallBack "Transparent/Diffuse"  
}

and here is the problem:

Shader problem

more ▼

asked Feb 02 '12 at 05:45 PM

andresp gravatar image

andresp
183 18 21 25

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

This might be a bit late, but I found this question while looking for solutions to my own problems. The problem is (the lack of) self sorting when rendering a semi transparent mesh.

See http://forum.unity3d.com/threads/68636-Alpha-transparency-self-sorting-issue-help-really-appreciated

One solution that mentioned in the forum thread is to first draw a depth only pass with a non-transparent shader and then render the transparent shader on top. You might get other artifacts from that, including stuff not being rendered under the character, so it's probably best to render it after everything else setting "Queue"="Transparent+100"

more ▼

answered Mar 23 '12 at 07:35 AM

KvanteTore gravatar image

KvanteTore
1.5k 9 15 33

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x1741
x340
x283
x252

asked: Feb 02 '12 at 05:45 PM

Seen: 1324 times

Last Updated: Mar 23 '12 at 07:35 AM