Is there something different with Unity3 and Unity2 shaders? 'cuz when I converted my Unity 2.6.1 project to Unity 3.1, the main shader that I was using was fried…
The shader in question is a toon shader which has outlines and diffuse, done by some dude that I sadly forgot the name of… (Whoever you are, god bless you, that shader was fantastic). And now I desperately need to either fix this shader, or get a new outline diffuse toon shader… But I have zero clue about how shaders work…
Can anyone give me a hand?
The shader in question is:
// Upgrade NOTE: replaced 'glstate.matrix.modelview[0]' with 'UNITY_MATRIX_MV'
// Upgrade NOTE: replaced 'glstate.matrix.mvp' with 'UNITY_MATRIX_MVP'
// Upgrade NOTE: replaced 'glstate.matrix.projection' with 'UNITY_MATRIX_P'
Shader "Outlined Diffuse"
{
Properties
{
_Color ("Main Color", Color) = (.5,.5,.5,1)
_OutlineColor ("Outline Color", Color) = (0,1,0,1)
_Outline ("Outline width", Range (0.002, 0.03)) = 0.01
_MainTex ("Base (RGBA)", 2D) = "white" { }
//Not needed
//_ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { Texgen CubeNormal }
}
SubShader
{
Tags {"Queue"="Transparent" "RenderType"="Transparent"}
//Minor switch
//UsePass "Toon/Basic/BASE"
UsePass "Diffuse/BASE"
Pass
{
Name "OUTLINE"
Tags { "LightMode" = "Always" }
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
// Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it does not contain a surface program or both vertex and fragment programs.
#pragma exclude_renderers gles
// Upgrade NOTE: excluded shader from Xbox360; has structs without semantics (struct appdata members vertex,normal)
#pragma exclude_renderers xbox360
#pragma vertex vert
struct appdata {
float4 vertex;
float3 normal;
};
struct v2f {
float4 pos : POSITION;
float4 color : COLOR;
float fog : FOGC;
};
uniform float _Outline;
uniform float4 _OutlineColor;
v2f vert(appdata v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
float3 norm = mul ((float3x3)UNITY_MATRIX_MV, v.normal);
norm.x *= UNITY_MATRIX_P[0][0];
norm.y *= UNITY_MATRIX_P[1][1];
o.pos.xy += norm.xy * o.pos.z * _Outline;
o.fog = o.pos.z;
o.color = _OutlineColor;
return o;
}
ENDCG
Cull Front
ZWrite On
ColorMask RGBA
Blend SrcAlpha OneMinusSrcAlpha
//? -Note: I don't remember why I put a "?" here
SetTexture [_MainTex] { combine primary }
}
}
Fallback "Diffuse"
}
This is the Unity3 version, after they modified it…