ToonShadowed

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(New page: This shader behaves precisely like the Toon-Basic shader with two exceptions: 1) If a pixel light casts upon it, then it can receive shadows. 2) It has proper culling, making it unsuitab...)
 
Line 1: Line 1:
 +
[[Category: Unity 2.x shaders]]
 +
[[Category: Pixel lit shaders]]
 +
 +
Author: [[User:MrJoy | Jon Frisby]]
 +
 +
==Description==
 +
 
This shader behaves precisely like the Toon-Basic shader with two exceptions:  1) If a pixel light casts upon it, then it can receive shadows.  2) It has proper culling, making it unsuitable for use with the Outline toon shader variant unless you add "Cull Off" to both Pass blocks below.
 
This shader behaves precisely like the Toon-Basic shader with two exceptions:  1) If a pixel light casts upon it, then it can receive shadows.  2) It has proper culling, making it unsuitable for use with the Outline toon shader variant unless you add "Cull Off" to both Pass blocks below.
  
Line 5: Line 12:
 
Thanks to Aras for his super-prompt response that saved me from embarrassing myself with a stupid vertex fragment that was naive and 3 instructions longer.
 
Thanks to Aras for his super-prompt response that saved me from embarrassing myself with a stupid vertex fragment that was naive and 3 instructions longer.
  
Shader "MrJoy/Toon/Shadowed" {
+
==ShaderLab - ToonShadowed.shader==
 +
<shaderlab>Shader "MrJoy/Toon/Shadowed" {
 
Properties {
 
Properties {
 
_Color ("Main Color", Color) = (.5,.5,.5,1)
 
_Color ("Main Color", Color) = (.5,.5,.5,1)
Line 70: Line 78:
 
Fallback "VertexLit"
 
Fallback "VertexLit"
 
}
 
}
 +
</shaderlab>

Revision as of 13:53, 4 March 2008


Author: Jon Frisby

Description

This shader behaves precisely like the Toon-Basic shader with two exceptions: 1) If a pixel light casts upon it, then it can receive shadows. 2) It has proper culling, making it unsuitable for use with the Outline toon shader variant unless you add "Cull Off" to both Pass blocks below.

None of the actual *light* is used -- it ONLY receives shadows. Shadows fall as they normally would -- they are not skewed to orient following the cubemap. It must be a pixel light, because only pixel lights can cast shadows.

Thanks to Aras for his super-prompt response that saved me from embarrassing myself with a stupid vertex fragment that was naive and 3 instructions longer.

ShaderLab - ToonShadowed.shader

<shaderlab>Shader "MrJoy/Toon/Shadowed" { Properties { _Color ("Main Color", Color) = (.5,.5,.5,1) _MainTex ("Base (RGB)", 2D) = "white" {} _ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "white" { Texgen CubeNormal } }

Category { SubShader { Pass { // Fallback case for non-pixel-lit situations. Blend Off Name "BASE" Tags {"LightMode" = "VertexOrNone"} SetTexture [_MainTex] { constantColor [_Color] Combine texture * constant } SetTexture [_ToonShade] { combine texture * previous DOUBLE, previous } } Pass { Blend Off Name "PPL" Tags { "LightMode" = "Pixel" } ColorMask RGBA CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_builtin #pragma fragmentoption ARB_fog_exp2 #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" #include "AutoLight.cginc"

struct v2f { V2F_POS_FOG; LIGHTING_COORDS float2 uvA; float3 uvB; };

uniform float4 _MainTex_ST;

v2f vert (appdata_tan v) { v2f o; PositionFog( v.vertex, o.pos, o.fog ); o.uvA = TRANSFORM_TEX(v.texcoord, _MainTex); o.uvB = mul((float3x3)glstate.matrix.invtrans.modelview[0], v.normal ); TRANSFER_VERTEX_TO_FRAGMENT(o); return o; }

uniform sampler2D _MainTex; uniform samplerCUBE _ToonShade; uniform float4 _Color;

float4 frag (v2f i) : COLOR { half4 texcol = tex2D( _MainTex, i.uvA ) * _Color; half4 lighting = LIGHT_ATTENUATION(i) * texCUBE(_ToonShade, i.uvB);

return half4((texcol * lighting * 2).rgb, texcol.a); } ENDCG } } } Fallback "VertexLit" } </shaderlab>

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox