pixelgon/Assets/Materials/Shaders/Vector.shader
2021-01-22 20:55:48 -08:00

71 lines
No EOL
1.8 KiB
Text

Shader "Custom/Vector"
{
Properties
{
_Color ("Color", Color) = (1, 1, 1, 1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_instancing
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float3 normal : NORMAL;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2f
{
float4 vertex : SV_POSITION;
float4 worldPos : TEXCOORD1;
float3 normal : TEXCOORD2;
float4 color : COLOR;
UNITY_VERTEX_INPUT_INSTANCE_ID // necessary only if you want to access instanced properties in fragment Shader.
};
UNITY_INSTANCING_BUFFER_START(Props)
UNITY_DEFINE_INSTANCED_PROP(float4, _Color)
UNITY_INSTANCING_BUFFER_END(Props)
v2f vert(appdata v)
{
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_TRANSFER_INSTANCE_ID(v, o); // necessary only if you want to access instanced properties in the fragment Shader.
o.vertex = UnityObjectToClipPos(v.vertex);
o.worldPos = mul(unity_ObjectToWorld, v.vertex);
o.normal = UnityObjectToWorldNormal(v.normal);
o.color = float4(1,1,1,1);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
// UNITY_SETUP_INSTANCE_ID(i); // necessary only if any instanced properties are going to be accessed in the fragment Shader.
// UNITY_ACCESS_INSTANCED_PROP(Props, _Color);
float t = 1 + clamp(dot(normalize(UnityWorldSpaceViewDir(i.worldPos)), i.normal), -1, 1);
t = t / 2;
t = t - 0.8;
// float t = abs(i.worldPos.x) + abs(i.worldPos.y) + abs(i.worldPos.z);
// t = t / 1;
return i.color * t;
}
ENDCG
}
}
}