holopy3/Assets/SteamVR/InteractionSystem/Teleport/Shaders/Highlight.shader
2020-12-10 15:25:12 +01:00

206 lines
6.7 KiB
Text

//======= Copyright (c) Valve Corporation, All rights reserved. ===============
//
// Purpose: Used for the teleport markers
//
//=============================================================================
// UNITY_SHADER_NO_UPGRADE
Shader "Valve/VR/Highlight"
{
Properties
{
_TintColor( "Tint Color", Color ) = ( 1, 1, 1, 1 )
_SeeThru( "SeeThru", Range( 0.0, 1.0 ) ) = 0.25
_Darken( "Darken", Range( 0.0, 1.0 ) ) = 0.0
_MainTex( "MainTex", 2D ) = "white" {}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
CGINCLUDE
// Pragmas --------------------------------------------------------------------------------------------------------------------------------------------------
#pragma target 5.0
#if UNITY_VERSION >= 560
#pragma only_renderers d3d11 vulkan glcore
#else
#pragma only_renderers d3d11 glcore
#endif
#pragma exclude_renderers gles
#pragma multi_compile_instancing
// Includes -------------------------------------------------------------------------------------------------------------------------------------------------
#include "UnityCG.cginc"
// Structs --------------------------------------------------------------------------------------------------------------------------------------------------
struct VertexInput
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
fixed4 color : COLOR;
#if UNITY_VERSION >= 560
UNITY_VERTEX_INPUT_INSTANCE_ID
#endif
};
struct VertexOutput
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
#if UNITY_VERSION >= 560
UNITY_VERTEX_OUTPUT_STEREO
#endif
};
#if UNITY_VERSION >= 201810
// Globals --------------------------------------------------------------------------------------------------------------------------------------------------
UNITY_INSTANCING_BUFFER_START( Props )
UNITY_DEFINE_INSTANCED_PROP( float4, _TintColor )
UNITY_DEFINE_INSTANCED_PROP( sampler2D, _MainTex )
UNITY_DEFINE_INSTANCED_PROP( float4, _MainTex_ST )
UNITY_DEFINE_INSTANCED_PROP( float, _SeeThru )
UNITY_DEFINE_INSTANCED_PROP( float, _Darken )
UNITY_INSTANCING_BUFFER_END( Props )
// MainVs ---------------------------------------------------------------------------------------------------------------------------------------------------
VertexOutput MainVS( VertexInput i )
{
VertexOutput o;
UNITY_SETUP_INSTANCE_ID( i );
UNITY_INITIALIZE_OUTPUT( VertexOutput, o );
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o );
#if UNITY_VERSION >= 540
o.vertex = UnityObjectToClipPos( i.vertex );
#else
o.vertex = mul( UNITY_MATRIX_MVP, i.vertex );
#endif
o.uv = i.uv;
o.color = i.color;
return o;
}
// MainPs ---------------------------------------------------------------------------------------------------------------------------------------------------
float4 MainPS( VertexOutput i ) : SV_Target
{
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( i );
float4 vTexel = tex2D( UNITY_ACCESS_INSTANCED_PROP( Props, _MainTex ), i.uv ).rgba;
float4 vColor = vTexel.rgba * UNITY_ACCESS_INSTANCED_PROP( Props, _TintColor.rgba ) * i.color.rgba;
vColor.rgba = saturate( 2.0 * vColor.rgba );
float flAlpha = vColor.a;
vColor.rgb *= vColor.a;
vColor.a = lerp( 0.0, UNITY_ACCESS_INSTANCED_PROP( Props, _Darken ), flAlpha );
return vColor.rgba;
}
// MainPs ---------------------------------------------------------------------------------------------------------------------------------------------------
float4 SeeThruPS( VertexOutput i ) : SV_Target
{
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( i );
float4 vTexel = tex2D( UNITY_ACCESS_INSTANCED_PROP( Props, _MainTex ), i.uv ).rgba;
float4 vColor = vTexel.rgba * UNITY_ACCESS_INSTANCED_PROP( Props, _TintColor.rgba ) * i.color.rgba * UNITY_ACCESS_INSTANCED_PROP( Props, _SeeThru );
vColor.rgba = saturate( 2.0 * vColor.rgba );
float flAlpha = vColor.a;
vColor.rgb *= vColor.a;
vColor.a = lerp( 0.0, UNITY_ACCESS_INSTANCED_PROP( Props, _Darken ), flAlpha * UNITY_ACCESS_INSTANCED_PROP( Props, _SeeThru ) );
return vColor.rgba;
}
#else
// Globals --------------------------------------------------------------------------------------------------------------------------------------------------
sampler2D _MainTex;
float4 _MainTex_ST;
float4 _TintColor;
float _SeeThru;
float _Darken;
// MainVs ---------------------------------------------------------------------------------------------------------------------------------------------------
VertexOutput MainVS( VertexInput i )
{
VertexOutput o;
#if UNITY_VERSION >= 540
o.vertex = UnityObjectToClipPos(i.vertex);
#else
o.vertex = mul(UNITY_MATRIX_MVP, i.vertex);
#endif
o.uv = TRANSFORM_TEX( i.uv, _MainTex );
o.color = i.color;
return o;
}
// MainPs ---------------------------------------------------------------------------------------------------------------------------------------------------
float4 MainPS( VertexOutput i ) : SV_Target
{
float4 vTexel = tex2D( _MainTex, i.uv ).rgba;
float4 vColor = vTexel.rgba * _TintColor.rgba * i.color.rgba;
vColor.rgba = saturate( 2.0 * vColor.rgba );
float flAlpha = vColor.a;
vColor.rgb *= vColor.a;
vColor.a = lerp( 0.0, _Darken, flAlpha );
return vColor.rgba;
}
// MainPs ---------------------------------------------------------------------------------------------------------------------------------------------------
float4 SeeThruPS( VertexOutput i ) : SV_Target
{
float4 vTexel = tex2D( _MainTex, i.uv ).rgba;
float4 vColor = vTexel.rgba * _TintColor.rgba * i.color.rgba * _SeeThru;
vColor.rgba = saturate( 2.0 * vColor.rgba );
float flAlpha = vColor.a;
vColor.rgb *= vColor.a;
vColor.a = lerp( 0.0, _Darken, flAlpha * _SeeThru );
return vColor.rgba;
}
#endif
ENDCG
SubShader
{
Tags { "Queue" = "Transparent" "RenderType" = "Transparent" }
LOD 100
// Behind Geometry ---------------------------------------------------------------------------------------------------------------------------------------------------
Pass
{
// Render State ---------------------------------------------------------------------------------------------------------------------------------------------
Blend One OneMinusSrcAlpha
Cull Off
ZWrite Off
ZTest Greater
CGPROGRAM
#pragma vertex MainVS
#pragma fragment SeeThruPS
ENDCG
}
Pass
{
// Render State ---------------------------------------------------------------------------------------------------------------------------------------------
Blend One OneMinusSrcAlpha
Cull Off
ZWrite Off
ZTest LEqual
CGPROGRAM
#pragma vertex MainVS
#pragma fragment MainPS
ENDCG
}
}
}