- Home /
Surface SpecularMap Shader color integration.
I have this SpecularMap shader that I got somewhere off the internet, it works perfectly well but I wanted to add some solid color integration to it. And The color picker is there but it does not change anything. I have no Shading experience and I won't understand if you give me shader scripting terms.
Anyway here's the script without the color picker integration:
Shader "Surface/Colored Specular" { Properties { _MainTex ("Texture", 2D) = "white" {} _SpecMap ("SpecMap", 2D) = "white" {} } SubShader { Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma surface surf ColoredSpecular
struct MySurfaceOutput { half3 Albedo; half3 Normal; half3 Emission; half Specular; half3 GlossColor; half Alpha; };
inline half4 LightingColoredSpecular (MySurfaceOutput s, half3 lightDir, half3 viewDir, half atten) { half3 h = normalize (lightDir + viewDir);
half diff = max (0, dot (s.Normal, lightDir));
float nh = max (0, dot (s.Normal, h)); float spec = pow (nh, 32.0); half3 specCol = spec * s.GlossColor;
half4 c; c.rgb = (s.Albedo _LightColor0.rgb diff + _LightColor0.rgb specCol) (atten * 2); c.a = s.Alpha; return c; }
inline half4 LightingColoredSpecular_PrePass (MySurfaceOutput s, half4 light) { half3 spec = light.a * s.GlossColor;
half4 c;
c.rgb = (s.Albedo * light.rgb + light.rgb * spec);
c.a = s.Alpha + spec * _SpecColor.a;
return c;
}
struct Input { float2 uv_MainTex; float2 uv_SpecMap; }; sampler2D _MainTex; sampler2D _SpecMap; void surf (Input IN, inout MySurfaceOutput o) { o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * 0.3; half4 spec = tex2D (_SpecMap, IN.uv_SpecMap); o.GlossColor = spec.rgb; o.Specular = 32.0/128.0; } ENDCG } Fallback "Diffuse" }
And here is the script with the color picker integration (that I got from http://answers.unity3d.com/questions/41222/looking-for-a-flat-shaderno-info-with-just-a-color-option)
Shader "Surface/Colored Specular" { Properties { _Color ("Color", Color) = (1,1,1) _MainTex ("Texture", 2D) = "white" {} _SpecMap ("SpecMap", 2D) = "white" {} } SubShader { Color [_Color] Pass {} Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma surface surf ColoredSpecular
struct MySurfaceOutput { half3 Albedo; half3 Normal; half3 Emission; half Specular; half3 GlossColor; half Alpha; };
inline half4 LightingColoredSpecular (MySurfaceOutput s, half3 lightDir, half3 viewDir, half atten) { half3 h = normalize (lightDir + viewDir);
half diff = max (0, dot (s.Normal, lightDir));
float nh = max (0, dot (s.Normal, h)); float spec = pow (nh, 32.0); half3 specCol = spec * s.GlossColor;
half4 c; c.rgb = (s.Albedo _LightColor0.rgb diff + _LightColor0.rgb specCol) (atten * 2); c.a = s.Alpha; return c; }
inline half4 LightingColoredSpecular_PrePass (MySurfaceOutput s, half4 light) { half3 spec = light.a * s.GlossColor;
half4 c;
c.rgb = (s.Albedo * light.rgb + light.rgb * spec);
c.a = s.Alpha + spec * _SpecColor.a;
return c;
}
struct Input { float2 uv_MainTex; float2 uv_SpecMap; }; sampler2D _MainTex; sampler2D _SpecMap; void surf (Input IN, inout MySurfaceOutput o) { o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * 0.3; half4 spec = tex2D (_SpecMap, IN.uv_SpecMap); o.GlossColor = spec.rgb; o.Specular = 32.0/128.0; } ENDCG } Fallback "Diffuse" }
I hope I'm not making too confusing putting the two scripts together here... I just dunno
Jules Fletcher
Your answer
