Hello, as I still have little understanding of ShaderLab code, I’m not sure where I would begin with creating the effect I want (a lighted toon shader with the ability to attach an Illumin (A) texture). So far, my searches haven’t thrown up anything useful, and my attempts to merge Unity’s own Lighted Toon shader with Self-Illuminating Diffuse failed… I’m hoping someone here can come up with something.
Thanks in advance for any help.
Well, problem solved - I’ve been a bit of an idiot and didn’t realise that I was attempting to edit the compiled shader :p. It was really only a copy/paste job in the end, but if anyone needs this it’s here:
Shader "Toon/Self-Illumin Lighted" {
Properties {
_Color ("Main Color", Color) = (0.5,0.5,0.5,1)
_MainTex ("Base (RGB)", 2D) = "white" {}
_Ramp ("Toon Ramp (RGB)", 2D) = "gray" {}
_Illum ("Illumin (A)", 2D) = "white" {}
_EmissionLM ("Emission (Lightmapper)", Float) = 0
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf ToonRamp
sampler2D _Ramp;
// custom lighting function that uses a texture ramp based
// on angle between light direction and normal
#pragma lighting ToonRamp exclude_path:prepass
inline half4 LightingToonRamp (SurfaceOutput s, half3 lightDir, half atten)
{
#ifndef USING_DIRECTIONAL_LIGHT
lightDir = normalize(lightDir);
#endif
half d = dot (s.Normal, lightDir)*0.5 + 0.5;
half3 ramp = tex2D (_Ramp, float2(d,d)).rgb;
half4 c;
c.rgb = s.Albedo * _LightColor0.rgb * ramp * (atten * 2);
c.a = 0;
return c;
}
sampler2D _MainTex;
sampler2D _Illum;
float4 _Color;
struct Input {
float2 uv_MainTex : TEXCOORD0;
float2 uv_Illum;
};
void surf (Input IN, inout SurfaceOutput o) {
half4 tex = tex2D(_MainTex, IN.uv_MainTex);
half4 c = tex * _Color;
o.Albedo = c.rgb;
o.Emission = c.rgb * tex2D(_Illum, IN.uv_Illum).a;
o.Alpha = c.a;
}
ENDCG
}
Fallback "Self-Illumin/VertexLit"
}
1 Like