Dotted outlined Diffuse

Hi guys, I would like to get a dotted outlined diffuse texture around an object

So I find this up :
http://wiki.unity3d.com/index.php/Silhouette-Outlined_Diffuse

But I can’t figure it out how to achieve want I want :frowning:

Any help would be greatly appreciated !

Seb

Two pass shader with the second pass drawing always… and here you could just plug in in a second mask with transparency where your dots should appear. Easiest way i could think of… you could also mask the outline in world/screen space on every axis to get this dots

Thanks you so much for your help TehReason.

Well I’m basically a 3D designer, and it’s hard for me to make this works. I could help you in 3D graphics if you want :slight_smile:

Edit :

For now I have this code wich work more or less :confused:
(please someone to improve it ?)

Shader "Outlined/Silhouetted Dotted 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" { }
		_frequenceDamierSurX ("frequenceDamierSurX", Range (0.0, 3)) = .005
		_frequenceDamierSurY ("frequenceDamierSurY", Range (0.0, 3)) = .005
	}
	
CGINCLUDE
#include "UnityCG.cginc"

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

};

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


uniform float _Outline;

uniform float4 _OutlineColor;

uniform float _frequenceDamierSurX;
uniform float _frequenceDamierSurY;

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;
	o.uv = o.pos;
	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
#pragma vertex vert
#pragma fragment frag


half4 frag(v2f i) : COLOR
{
      float2 damier = fmod(i.uv.xy, float2(_frequenceDamierSurX, _frequenceDamierSurY));
      if (damier.x < _frequenceDamierSurX / 2 || damier.y < _frequenceDamierSurY / 2)
         discard;

      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 Off
			ZTest Always
			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"
	
}