- Home /
Shader Problem
I have a problem to reuse my old shader i dont know whats the problem of the highlights
always render vertically even i change the position of my uv maps always got a same result
please help me to fix this
see my shader code hope it will help
hader "Toon/Hair" { Properties { _Color("Color(RGBA)", Color) = (1,1,1,1) _MainTex("Texture", 2D) = "white" {} _SphereAddTex("Texture(Sphere)", 2D) = "black" {} _Shininess ("Shininess(0.0:)", Float) = 1.0
_ShadowThreshold ("Shadow Threshold(0.0:1.0)", Float) = 0.5
_ShadowColor ("Shadow Color(RGBA)", Color) = (0,0,0,0.5)
_ShadowSharpness ("Shadow Sharpness(0.0:)", Float) = 100
}
SubShader
{
// Settings
Tags {"Queue" = "Transparent" "IgnoreProjector"="True" "RenderType" = "Transparent"}
//Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
// Surface Shader Pass ( Front )
Cull Off
ZWrite On
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
//#pragma surface surfHair ToonHair vertex:vert
#pragma surface surfHair ToonHair vertex:vert
// Toon Hair Surface Shader for Unity
// File : ToonSurfaceHair.cginc
// Title : Toon Surface Shader with Alpha
// Language : Cg Language
// Include : ToonSurfaceHair.cginc
/*
How To Use :
CGPROGRAM
#pragma surface surfHair ToonHair vertex:vert
#include "ToonSurfaceHair.cginc"
ENDCG
*/
float4 _Color;
sampler2D _MainTex;
float _ShadowThreshold;
float4 _ShadowColor;
float _ShadowSharpness;
float _Shininess;
sampler2D _SphereAddTex;
struct ToonSurfaceOutput
{
half3 Albedo;
half3 Normal;
half3 Emission;
half3 Gloss;
half Specular;
half Alpha;
half4 Color;
};
inline half4 LightingToonHair (ToonSurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
{
//Lighting paramater
float4 lightColor = _LightColor0 * atten;
float lightStrength = dot(lightDir, s.Normal) * 0.5 + 0.5;
//ToonMapping
half shadowRate = abs( max( -1, ( min( lightStrength, _ShadowThreshold ) -_ShadowThreshold)*_ShadowSharpness ) )*_ShadowColor.a;
float4 toon = float4(1,1,1,1) * (1-shadowRate) + _ShadowColor *shadowRate;
//Output
//float4 color = saturate( _Color * lightColor*2 ) * s.Color;
float4 color = _Color * (lightColor) * s.Color * (atten*2) * _Shininess;
color *= toon;
color.a = s.Alpha;
return color;
}
struct Input
{
float2 uv_MainTex;
float3 customColor;
};
void vert (inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input,o);
//o.customColor = abs(v.normal);
o.customColor = v.normal;
}
void surfHair (Input IN, inout ToonSurfaceOutput o)
{
// Defaults
o.Albedo = 0.0;
o.Emission = 0.0;
o.Gloss = 0.0;
o.Specular = 0.0;
// Sphere Map
float3 viewNormal = normalize( IN.customColor );
float3 viewNormal2 = normalize( mul( UNITY_MATRIX_MV, float4(normalize(o.Normal), 0.0) ).xyz );
viewNormal = normalize(viewNormal*0.7 + viewNormal2*0.3);
float2 sphereUv = viewNormal.xz * 0.5 + 0.5;
float4 sphereAdd = tex2D( _SphereAddTex, sphereUv );
half4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
o.Color = c;
o.Color += sphereAdd*0.2 * step(0,viewNormal.y); // SphereAddTex
o.Alpha = c.a;
}
ENDCG
}
// Other Environment
Fallback "Transparent/Diffuse"
}
Is that grey line (on the black area) the specular highlight? It looks like the shader is fine, and maybe the light is simply in a different place.
In both pictures, the light is on the right side, so the highlight in image #1 seems correct. I wonder if you don't just want to hand-draw a highlight on the texture.
Your answer
Follow this Question
Related Questions
Is it possible to avoid writing to certain g-buffers? 1 Answer
Shader issue with a 170 upper angle 0 Answers
UnityObjectToClipPos is inverted? 0 Answers
post shader: reconstruct worldspace plane coordinates 1 Answer
Shader Color 1 Answer