VR模拟枪支打靶,消灭鬼怪,换弹以及上弦等等硬核枪支操作。 使用HTCVive设备,开启SteamVR进行游玩。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
4.1 KiB

3 years ago
// Colorful FX - Unity Asset
// Copyright (c) 2015 - Thomas Hourdel
// http://www.thomashourdel.com
Shader "Hidden/Colorful/Strokes"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
_Params1 ("Amplitude (X) Frequency (Y) Scaling (Z) Max Thickness (W)", Vector) = (0, 0, 0, 0)
_Params2 ("Red Luminance (X) Green Luminance (Y) Blue Luminance (Z)", Vector) = (0, 0, 0, 0)
_Params3 ("Threshold (X) Harshness (Y)", Vector) = (0, 0, 0, 0)
}
CGINCLUDE
#include "UnityCG.cginc"
#include "./Colorful.cginc"
sampler2D _MainTex;
half4 _Params1;
half3 _Params2;
half2 _Params3;
void get_stroke(half2 uv, out half4 color, out half stroke)
{
half2 screenUV = uv * _ScreenParams.xy;
half2 xy = screenUV / _ScreenParams.yy;
half3 pattern[6] = {
half3(-0.707, 0.707, 3.0),
half3( 0.0, 1.0, 0.6),
half3( 0.0, 1.0, 0.5),
half3( 1.0, 0.0, 0.4),
half3( 1.0, 0.0, 0.3),
half3( 0.0, 1.0, 0.2)
};
color = tex2D(_MainTex, half2(screenUV.x / _ScreenParams.x, xy.y));
stroke = 1.0;
for(int i = 0; i < 6; i++)
{
half2 pt = half2(
xy.x * pattern[i].x - xy.y * pattern[i].y,
xy.x * pattern[i].y + xy.y * pattern[i].x
);
half thickness = _Params1.w * half(i + 1.0);
half dist = mod(pt.y + thickness * 0.5 - sin(pt.x * _Params1.y) * _Params1.x, _Params1.z);
half lum = dot(color.rgb, _Params2.xyz);
if(dist < thickness && lum < _Params3.x - 0.12 * half(i))
{
half k = pattern[i].z - _Params3.y;
half x = (thickness - dist) / thickness;
stroke = min(1.0 - 0.5 / k + abs((x - 0.5) / k), stroke);
}
}
}
half4 frag_black_white(v2f_img i) : SV_Target
{
half4 color; half stroke;
get_stroke(i.uv, color, stroke);
return half4(stroke.xxx, 1.0);
}
half4 frag_white_black(v2f_img i) : SV_Target
{
half4 color; half stroke;
get_stroke(i.uv, color, stroke);
stroke = 1.0 - stroke;
return half4(stroke.xxx, 1.0);
}
half4 frag_color_white(v2f_img i) : SV_Target
{
half4 color; half stroke;
get_stroke(i.uv, color, stroke);
half one_minus_stroke = 1.0 - stroke;
return half4(stroke.xxx, 1.0) + half4(one_minus_stroke.xxx, 1.0) * color;
}
half4 frag_color_black(v2f_img i) : SV_Target
{
half4 color; half stroke;
get_stroke(i.uv, color, stroke);
stroke = 1.0 - stroke;
return half4(stroke.xxx, 1.0) * color;
}
half4 frag_white_color(v2f_img i) : SV_Target
{
half4 color; half stroke;
get_stroke(i.uv, color, stroke);
half one_minus_stroke = 1.0 - stroke;
return half4(one_minus_stroke.xxx, 1.0) + half4(stroke.xxx, 1.0) * color;
}
half4 frag_black_color(v2f_img i) : SV_Target
{
half4 color; half stroke;
get_stroke(i.uv, color, stroke);
return half4(stroke.xxx, 1.0) * color;
}
ENDCG
SubShader
{
ZTest Always Cull Off ZWrite Off
Fog { Mode off }
// (0) Black and white
Pass
{
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag_black_white
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 3.0
ENDCG
}
// (1) White and black
Pass
{
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag_white_black
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 3.0
ENDCG
}
// (2) Color and white
Pass
{
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag_color_white
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 3.0
ENDCG
}
// (3) Color and black
Pass
{
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag_color_black
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 3.0
ENDCG
}
// (4) White and color
Pass
{
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag_white_color
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 3.0
ENDCG
}
// (5) Black and color
Pass
{
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag_black_color
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 3.0
ENDCG
}
}
FallBack off
}