Silhouette-Outlined Diffuse

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(Created page with "A variant of the Outlined Diffuse 3 showing outlines only at the exteriors of the object. Useful for showing which character is selected in a strategy game, for example. [[F...")
 
m
Line 1: Line 1:
A variant of the [[Outlined Diffuse 3]] showing outlines only at the exteriors of the object. Useful for showing which character is selected in a strategy game, for example.
+
A variant of [[Outlined Diffuse 3]] showing outlines only at the exteriors of the object. Useful for showing which character is selected in a strategy game, for example.
  
 
[[File:SilhouetteOutline1.jpg]]
 
[[File:SilhouetteOutline1.jpg]]
  
 
Notice that the outline is merely the object in question but scaled upwards, rendered in a single color, and it always shows on top of everything, except the object it is outlining.
 
Notice that the outline is merely the object in question but scaled upwards, rendered in a single color, and it always shows on top of everything, except the object it is outlining.
 +
 
[[File:SilhouetteOutline2.jpg]]
 
[[File:SilhouetteOutline2.jpg]]
  

Revision as of 15:55, 9 July 2011

A variant of Outlined Diffuse 3 showing outlines only at the exteriors of the object. Useful for showing which character is selected in a strategy game, for example.

SilhouetteOutline1.jpg

Notice that the outline is merely the object in question but scaled upwards, rendered in a single color, and it always shows on top of everything, except the object it is outlining.

SilhouetteOutline2.jpg

<shaderlab> Shader "Outlined/Silhouetted Diffuse" { Properties { _Color ("Main Color", Color) = (.5,.5,.5,1) _OutlineColor ("Outline Color", Color) = (0,0,0,1) _Outline ("Outline width", Range (0.0, 0.03)) = .005 _MainTex ("Base (RGB)", 2D) = "white" { } }

CGINCLUDE

  1. include "UnityCG.cginc"

struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; };

struct v2f { float4 pos : POSITION; float4 color : COLOR; };

uniform float _Outline; uniform float4 _OutlineColor;

v2f vert(appdata v) { // just make a copy of incoming vertex data but scaled according to normal direction v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex);

float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal); float2 offset = TransformViewToProjection(norm.xy);

o.pos.xy += offset * o.pos.z * _Outline; o.color = _OutlineColor; return o; } ENDCG

SubShader { Tags { "Queue" = "Transparent" }

// note that a vertex shader is specified here but its using the one above Pass { Name "OUTLINE" Tags { "LightMode" = "Always" } Cull Off ZWrite Off ZTest Always ColorMask RGB // alpha not used

// you can choose what kind of blending mode you want for the outline Blend SrcAlpha OneMinusSrcAlpha // Normal //Blend One One // Additive //Blend One OneMinusDstColor // Soft Additive //Blend DstColor Zero // Multiplicative //Blend DstColor SrcColor // 2x Multiplicative

CGPROGRAM

  1. pragma vertex vert
  2. pragma fragment frag

half4 frag(v2f i) :COLOR { return i.color; } ENDCG }

Pass { Name "BASE" ZWrite On ZTest LEqual Blend SrcAlpha OneMinusSrcAlpha Material { Diffuse [_Color] Ambient [_Color] } Lighting On SetTexture [_MainTex] { ConstantColor [_Color] Combine texture * constant } SetTexture [_MainTex] { Combine previous * primary DOUBLE } } }

SubShader { Tags { "Queue" = "Transparent" }

Pass { Name "OUTLINE" Tags { "LightMode" = "Always" } Cull Front ZWrite On ColorMask RGB

// you can choose what kind of blending mode you want for the outline Blend SrcAlpha OneMinusSrcAlpha // Normal //Blend One One // Additive //Blend One OneMinusDstColor // Soft Additive //Blend DstColor Zero // Multiplicative //Blend DstColor SrcColor // 2x Multiplicative

CGPROGRAM #pragma vertex vert #pragma exclude_renderers gles xbox360 ps3 ENDCG SetTexture [_MainTex] { combine primary } }

Pass { Name "BASE" ZWrite On ZTest LEqual Blend SrcAlpha OneMinusSrcAlpha Material { Diffuse [_Color] Ambient [_Color] } Lighting On SetTexture [_MainTex] { ConstantColor [_Color] Combine texture * constant } SetTexture [_MainTex] { Combine previous * primary DOUBLE } } }

Fallback "Diffuse" } </shaderlab>

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox