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
asked
Feb 14 '11 at 01:35 PM
Jules Fletcher
23
●
4
●
4
●
7