82 lines
1.8 KiB
Plaintext
82 lines
1.8 KiB
Plaintext
|
//
|
||
|
// OutlineFill.shader
|
||
|
// QuickOutline
|
||
|
//
|
||
|
// Created by Chris Nolet on 2/21/18.
|
||
|
// Copyright © 2018 Chris Nolet. All rights reserved.
|
||
|
//
|
||
|
|
||
|
Shader "Custom/Outline Fill" {
|
||
|
Properties {
|
||
|
[Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
|
||
|
|
||
|
_OutlineColor("Outline Color", Color) = (1, 1, 1, 1)
|
||
|
_OutlineWidth("Outline Width", Range(0, 10)) = 2
|
||
|
}
|
||
|
|
||
|
SubShader {
|
||
|
Tags {
|
||
|
"Queue" = "Transparent+110"
|
||
|
"RenderType" = "Transparent"
|
||
|
"DisableBatching" = "True"
|
||
|
}
|
||
|
|
||
|
Pass {
|
||
|
Name "Fill"
|
||
|
Cull Off
|
||
|
ZTest [_ZTest]
|
||
|
ZWrite Off
|
||
|
Blend SrcAlpha OneMinusSrcAlpha
|
||
|
ColorMask RGB
|
||
|
|
||
|
Stencil {
|
||
|
Ref 1
|
||
|
Comp NotEqual
|
||
|
}
|
||
|
|
||
|
CGPROGRAM
|
||
|
#include "UnityCG.cginc"
|
||
|
|
||
|
#pragma vertex vert
|
||
|
#pragma fragment frag
|
||
|
|
||
|
struct appdata {
|
||
|
float4 vertex : POSITION;
|
||
|
float3 normal : NORMAL;
|
||
|
float3 smoothNormal : TEXCOORD3;
|
||
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
};
|
||
|
|
||
|
struct v2f {
|
||
|
float4 position : SV_POSITION;
|
||
|
fixed4 color : COLOR;
|
||
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
};
|
||
|
|
||
|
uniform fixed4 _OutlineColor;
|
||
|
uniform float _OutlineWidth;
|
||
|
|
||
|
v2f vert(appdata input) {
|
||
|
v2f output;
|
||
|
|
||
|
UNITY_SETUP_INSTANCE_ID(input);
|
||
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||
|
|
||
|
float3 normal = any(input.smoothNormal) ? input.smoothNormal : input.normal;
|
||
|
float3 viewPosition = UnityObjectToViewPos(input.vertex);
|
||
|
float3 viewNormal = normalize(mul((float3x3)UNITY_MATRIX_IT_MV, normal));
|
||
|
|
||
|
output.position = UnityViewToClipPos(viewPosition + viewNormal * -viewPosition.z * _OutlineWidth / 1000.0);
|
||
|
output.color = _OutlineColor;
|
||
|
|
||
|
return output;
|
||
|
}
|
||
|
|
||
|
fixed4 frag(v2f input) : SV_Target {
|
||
|
return input.color;
|
||
|
}
|
||
|
ENDCG
|
||
|
}
|
||
|
}
|
||
|
}
|