This commit is contained in:
2025-11-13 17:40:28 +08:00
parent 962ab49609
commit 10156da245
5503 changed files with 805282 additions and 0 deletions

View File

@@ -0,0 +1,201 @@
Shader "HPE/hand_axis"
{
Properties
{
[Hand(FadeColor)]
_Scale("Scale", Float) = 20
_Power("Power", Float) = 3
_ColorX("ColorX", Color) = (206,71, 38, 1)
_ColorY("ColorY", Color) = (156,204,85, 1)
_ColorZ("ColorZ", Color) = (66, 118, 184, 1)
}
CGINCLUDE
#include "Lighting.cginc"
#pragma target 3.0
// FadeColor
uniform half _Scale;
uniform half _Power;
uniform half4 _ColorX;
uniform half4 _ColorY;
uniform half4 _ColorZ;
ENDCG
SubShader
{
LOD 100
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True""RenderPipeline" = "UniversalPipeline"
}
//Pass
//{
// Name "Depth"
// Tags
// {
// "LightMode" = "SRPDefaultUnlit"
// }
// ZWrite On
// ColorMask 0
//}
Pass
{
Name "Fade"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True""LightMode" = "UniversalForward"
}
//Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex outlineVertex
#pragma fragment outlineFragment
struct OutlineVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct OutlineVertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD1;
float4 localPos : TEXCOORD2;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
OutlineVertexOutput outlineVertex(OutlineVertexInput v)
{
OutlineVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
o.localPos = v.vertex;
return o;
}
half4 outlineFragment(OutlineVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half3 axis = pow((clamp((i.localPos*_Scale) , 0.01, 1)),_Power)-0.01;
half3 axiscolor = _ColorX*axis.r+_ColorY*axis.g+_ColorZ*axis.b;
half fade = length(axis);
half4 result = half4(axiscolor.rgb, fade);
return result;
}
ENDCG
}
}
SubShader
{
LOD 200
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"
}
//Pass
//{
// Name "Depth"
// Tags
// {
// "LightMode" = "SRPDefaultUnlit"
// }
// ZWrite On
// ColorMask 0
//}
Pass
{
Name "Fade"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True"
}
//Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex outlineVertex
#pragma fragment outlineFragment
struct OutlineVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct OutlineVertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD1;
float4 localPos : TEXCOORD2;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
OutlineVertexOutput outlineVertex(OutlineVertexInput v)
{
OutlineVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
o.localPos = v.vertex;
return o;
}
half4 outlineFragment(OutlineVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half3 axis = pow((clamp((i.localPos*_Scale) , 0.01, 1)),_Power)-0.01;
half3 axiscolor = _ColorX*axis.r+_ColorY*axis.g+_ColorZ*axis.b;
half fade = length(axis);
half4 result = half4(axiscolor.rgb, fade);
return result;
}
ENDCG
}
}
}

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 83d5259263ef7e544b6ef74f579d0479
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,311 @@
Shader "HPE/hand_Fade"
{
Properties
{
[Hand(Fade)]
_Length("Length", Float) = 0
_Color("Color", Color) = (0, 0, 0, 0)
_Scale("Scale", Float) = 1
}
CGINCLUDE
#include "Lighting.cginc"
#pragma target 3.0
// fade
uniform half _Length;
uniform half4 _Color;
uniform half _Scale;
ENDCG
SubShader
{
LOD 100
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True""RenderPipeline" = "UniversalPipeline"
}
//Pass
//{
// Name "Depth"
// Tags
// {
// "LightMode" = "SRPDefaultUnlit"
// }
// ZWrite On
// ColorMask 0
//}
Pass
{
Name "Fade"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True""LightMode" = "UniversalForward"
}
//Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex outlineVertex
#pragma fragment outlineFragment
struct OutlineVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct OutlineVertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
OutlineVertexOutput outlineVertex(OutlineVertexInput v)
{
OutlineVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
return o;
}
half4 outlineFragment(OutlineVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half fade = clamp((i.uv.y + _Length) * _Scale, 0, 1) * _Color.a;
half4 result = half4(_Color.rgb, fade);
return result;
}
ENDCG
}
Pass
{
Name "Fade"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True"
}
//Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex outlineVertex
#pragma fragment outlineFragment
struct OutlineVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct OutlineVertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
OutlineVertexOutput outlineVertex(OutlineVertexInput v)
{
OutlineVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
return o;
}
half4 outlineFragment(OutlineVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half fade = clamp((i.uv.y + _Length) * _Scale, 0, 1) * _Color.a;
half4 result = half4(_Color.rgb, fade);
return result;
}
ENDCG
}
}
SubShader
{
LOD 200
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"
}
//Pass
//{
// Name "Depth"
// Tags
// {
// "LightMode" = "SRPDefaultUnlit"
// }
// ZWrite On
// ColorMask 0
//}
Pass
{
Name "Fade"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True"
}
//Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex outlineVertex
#pragma fragment outlineFragment
struct OutlineVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct OutlineVertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
OutlineVertexOutput outlineVertex(OutlineVertexInput v)
{
OutlineVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
return o;
}
half4 outlineFragment(OutlineVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half fade = clamp((i.uv.y + _Length) * _Scale, 0, 1) * _Color.a;
half4 result = half4(_Color.rgb, fade);
return result;
}
ENDCG
}
Pass
{
Name "Fade"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True"
}
//Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex outlineVertex
#pragma fragment outlineFragment
struct OutlineVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct OutlineVertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
OutlineVertexOutput outlineVertex(OutlineVertexInput v)
{
OutlineVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
return o;
}
half4 outlineFragment(OutlineVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half fade = clamp((i.uv.y + _Length) * _Scale, 0, 1) * _Color.a;
half4 result = half4(_Color.rgb, fade);
return result;
}
ENDCG
}
}
}

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: d2754f47eb19b8747870e7dd52de1e87
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,180 @@
Shader "HPE/hand_FloorShadow"
{
Properties
{
[Hand(Fade)]
_MainTex ("Texture",2D) = "white" {}
_Color("Color", Color) = (0, 0, 0, 0)
}
CGINCLUDE
#include "Lighting.cginc"
#pragma target 3.0
sampler2D _MainTex;
uniform float4 _MainTex_ST;
uniform half4 _Color;
ENDCG
SubShader
{
LOD 100
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True""RenderPipeline" = "UniversalPipeline"
}
Pass
{
Name "Fade"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True""LightMode" = "UniversalForward"
}
//Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex Vertex
#pragma fragment Fragment
struct VertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct VertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
VertexOutput Vertex(VertexInput v)
{
VertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord.xy, _MainTex);
return o;
}
half4 Fragment(VertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
fixed4 col = tex2D(_MainTex,i.uv);
fixed3 colRGB = col.rgb*_Color.rgb;
fixed colAlpha = col.a*_Color.a;
return half4(colRGB,colAlpha);
}
ENDCG
}
}
SubShader
{
LOD 200
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"
}
Pass
{
Name "Fade"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True"
}
//Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex Vertex
#pragma fragment Fragment
struct VertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct VertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
VertexOutput Vertex(VertexInput v)
{
VertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord.xy, _MainTex);
return o;
}
half4 Fragment(VertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
fixed4 col = tex2D(_MainTex,i.uv);
fixed3 colRGB = col.rgb*_Color.rgb;
fixed colAlpha = col.a*_Color.a;
return half4(colRGB,colAlpha);
}
ENDCG
}
}
}

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 1ee5ba7cc57c8074b81f3fba4c0c3dba
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,433 @@
Shader "HPE/Highlight"
{
Properties
{
[Header(Finger)]
_FingerIndex("FingerIndex", Vector) = (0.28, 0.875, 0.03, 0.3)
_FingerMiddle("FingerMiddle", Vector) = (0.38, 0.825, 0.035, 0.3)
_FingerRing("FingerRing", Vector) = (0.47, 0.86, 0.04, 0.3)
_FingerThumb("FingerThumb", Vector) = (0.178, 0.72, 0.05, 0.25)
_LightColor("LightColor", Color) = (1, 0, 0, 0)
_BlendPower("BlendPower", Vector) = (1, 1, 1, 1)
[HideInInspector]_Head("Head", Float) = 1
[HideInInspector]_Smooth("Smooth", Float) = 1
}
CGINCLUDE
#include "Lighting.cginc"
#pragma target 3.0
// Finger
uniform float4 _FingerIndex;
uniform float4 _FingerMiddle;
uniform float4 _FingerRing;
uniform float4 _FingerThumb;
uniform float4 _LightColor;
uniform float4 _BlendPower;
//Test
uniform float _Head;
uniform float _Smooth;
ENDCG
SubShader
{
LOD 100
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True""RenderPipeline" = "UniversalPipeline"
}
Pass
{
Name "Depth"
Tags
{
"LightMode" = "SRPDefaultUnlit"
}
ZWrite On
ColorMask 0
}
Pass
{
Name "Highlight"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True""LightMode" = "UniversalForward"
}
Cull off
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex highlightVertex
#pragma fragment highlightFragment
struct highlightVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct highlightVertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
void Remap(float In, float2 InMinMax, float2 OutMinMax, out float Out)
{
Out = OutMinMax.x + (In - InMinMax.x) * (OutMinMax.y - OutMinMax.x) / (InMinMax.y - InMinMax.x);
}
void SplitQuad(float4 _QuadRange, float2 _UV, out float2 _UV1, out float _Range2)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡUV
half2 uv = _UV;
half uv_R = uv[0];
half uv_G = uv[1];
half4 quadRange = _QuadRange;
half quad_R = quadRange[0];
half quad_G = quadRange[1];
half quad_B = quadRange[2];
half quad_A = quadRange[3];
//shape_Range
half subtract_1 = quad_R - quad_B;
half subtract_4 = quad_G - quad_A;
half add_1 = quad_R + quad_B;
half add_2 = quad_G + quad_A;
half2 pos = half2(subtract_1, subtract_4);
half2 pos2 = half2(add_1, add_2);
half2 shape01 = float2(subtract_1, subtract_4)-uv;
half2 shape02 = uv-float2(add_1, add_2);
float2 _Step_1 = step(shape01, float2(0, 0));
float2 _Step_2 = step(shape02, float2(0, 0));
float2 _Blend_Out = min(_Step_1, _Step_2);
float _Final_Blend_Out = min(_Blend_Out.x, _Blend_Out.y);
//outR
half subtract_3 = add_1 - subtract_1;
half subtract_2 = uv_R - subtract_1;
half divide_1 = subtract_2 / subtract_3;
//outG
half subtract_6 = add_2 - subtract_4;
half subtract_5 = uv_G - subtract_4;
half divide_2 = subtract_5 / subtract_6;
//outUV
half4 combine_RGBA;
combine_RGBA.x = divide_1;
combine_RGBA.y = divide_2;
combine_RGBA.z = 0;
combine_RGBA.w = 0;
_UV1 = float2(combine_RGBA.x, combine_RGBA.y);
_Range2 = _Final_Blend_Out;
}
void CapsuleArea(float _Head, float2 _UV, out float shape2)
{
float u = _UV.r;
float v = _UV.g;
float _Head_Processed = 1-_Head;
float part1;
Remap(v,float2(_Head_Processed, 1), float2(0,1), part1);
part1 = max(part1,0);
float part2;
Remap(v,float2(0,_Head), float2(1,0), part2);
part2 = max(part2,0);
float v2 = part1 + part2;
float dis = distance(float2(u,v2),float2(0.5, 0))*2;
float result = clamp(1-dis,0,1);
shape2 = result;
}
void processFinger(float4 _Finger, float2 _UV, out float result)
{
float2 _UV1;
float _Range2;
SplitQuad(_Finger, _UV, _UV1, _Range2);
float2 _UV2 =_UV1*_Range2;
float _shape2;
CapsuleArea(_Head,_UV2,_shape2);
float shape3 = smoothstep(_Smooth,0,_UV.g)*_shape2;
result = shape3;
}
highlightVertexOutput highlightVertex(highlightVertexInput v)
{
highlightVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
return o;
}
float4 highlightFragment(highlightVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
float2 _UV2 = i.uv;
float shape3_index;
processFinger(_FingerIndex,_UV2,shape3_index);
shape3_index *= _BlendPower.x;
float shape3_middle;
processFinger(_FingerMiddle,_UV2,shape3_middle);
shape3_middle *= _BlendPower.y;
float shape3_ring;
processFinger(_FingerRing,_UV2,shape3_ring);
shape3_ring *= _BlendPower.z;
float shape3_thumb;
processFinger(_FingerThumb,_UV2,shape3_thumb);
shape3_thumb *= _BlendPower.w;
float4 glow = clamp(_LightColor,0,1);
glow.rgb *= shape3_index + shape3_middle + shape3_ring + shape3_thumb;
glow.a *= shape3_index + shape3_middle + shape3_ring + shape3_thumb;
return glow*3.8;
}
ENDCG
}
}
SubShader
{
LOD 200
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"
}
Pass
{
Name "Depth"
ZWrite On
ColorMask 0
}
Pass
{
Name "Highlight"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True"
}
Cull off
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex highlightVertex
#pragma fragment highlightFragment
struct highlightVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct highlightVertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
void Remap(float In, float2 InMinMax, float2 OutMinMax, out float Out)
{
Out = OutMinMax.x + (In - InMinMax.x) * (OutMinMax.y - OutMinMax.x) / (InMinMax.y - InMinMax.x);
}
void SplitQuad(float4 _QuadRange, float2 _UV, out float2 _UV1, out float _Range2)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡUV
half2 uv = _UV;
half uv_R = uv[0];
half uv_G = uv[1];
half4 quadRange = _QuadRange;
half quad_R = quadRange[0];
half quad_G = quadRange[1];
half quad_B = quadRange[2];
half quad_A = quadRange[3];
//shape_Range
half subtract_1 = quad_R - quad_B;
half subtract_4 = quad_G - quad_A;
half add_1 = quad_R + quad_B;
half add_2 = quad_G + quad_A;
half2 pos = half2(subtract_1, subtract_4);
half2 pos2 = half2(add_1, add_2);
half2 shape01 = float2(subtract_1, subtract_4)-uv;
half2 shape02 = uv-float2(add_1, add_2);
float2 _Step_1 = step(shape01, float2(0, 0));
float2 _Step_2 = step(shape02, float2(0, 0));
float2 _Blend_Out = min(_Step_1, _Step_2);
float _Final_Blend_Out = min(_Blend_Out.x, _Blend_Out.y);
//outR
half subtract_3 = add_1 - subtract_1;
half subtract_2 = uv_R - subtract_1;
half divide_1 = subtract_2 / subtract_3;
//outG
half subtract_6 = add_2 - subtract_4;
half subtract_5 = uv_G - subtract_4;
half divide_2 = subtract_5 / subtract_6;
//outUV
half4 combine_RGBA;
combine_RGBA.x = divide_1;
combine_RGBA.y = divide_2;
combine_RGBA.z = 0;
combine_RGBA.w = 0;
_UV1 = float2(combine_RGBA.x, combine_RGBA.y);
_Range2 = _Final_Blend_Out;
}
void CapsuleArea(float _Head, float2 _UV, out float shape2)
{
float u = _UV.r;
float v = _UV.g;
float _Head_Processed = 1-_Head;
float part1;
Remap(v,float2(_Head_Processed, 1), float2(0,1), part1);
part1 = max(part1,0);
float part2;
Remap(v,float2(0,_Head), float2(1,0), part2);
part2 = max(part2,0);
float v2 = part1 + part2;
float dis = distance(float2(u,v2),float2(0.5, 0))*2;
float result = clamp(1-dis,0,1);
shape2 = result;
}
void processFinger(float4 _Finger, float2 _UV, out float result)
{
float2 _UV1;
float _Range2;
SplitQuad(_Finger, _UV, _UV1, _Range2);
float2 _UV2 =_UV1*_Range2;
float _shape2;
CapsuleArea(_Head,_UV2,_shape2);
float shape3 = smoothstep(_Smooth,0,_UV.g)*_shape2;
result = shape3;
}
highlightVertexOutput highlightVertex(highlightVertexInput v)
{
highlightVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
return o;
}
float4 highlightFragment(highlightVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
float2 _UV2 = i.uv;
float shape3_index;
processFinger(_FingerIndex,_UV2,shape3_index);
shape3_index *= _BlendPower.x;
float shape3_middle;
processFinger(_FingerMiddle,_UV2,shape3_middle);
shape3_middle *= _BlendPower.y;
float shape3_ring;
processFinger(_FingerRing,_UV2,shape3_ring);
shape3_ring *= _BlendPower.z;
float shape3_thumb;
processFinger(_FingerThumb,_UV2,shape3_thumb);
shape3_thumb *= _BlendPower.w;
float4 glow = clamp(_LightColor,0,1);
glow.rgb *= shape3_index + shape3_middle + shape3_ring + shape3_thumb;
glow.a *= shape3_index + shape3_middle + shape3_ring + shape3_thumb;
return glow*3.8;
}
ENDCG
}
}
}

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: ef269a72d9c5bff4d92983b06a83716f
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
preprocessorOverride: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,208 @@
Shader "HPE/Outline"
{
Properties
{
[Header(Outline)]
_OutlineWidth("Width", Range(0 , 0.005)) = 0.002
_OutlineColor("Color", Color) = (1.0,1.0,1.0,1)
_OutlineOpacity("Opacity", Range(0 , 1)) = 0.4
_FadeIntensity("Intensity", Range(-5 , 5)) = 0.0
_FadeOffset("Offset",Range(-5 , 5)) = 1.0
_FadeOffset2("Offset2",Range(-5 , 5)) = 1.0
[MaterialToggle] _HandFade_Toggle ("HandFade_Toggle", Float ) = 0.5
}
CGINCLUDE
#include "Lighting.cginc"
#pragma target 3.0
// Outline
uniform float4 _OutlineColor;
uniform float _OutlineWidth;
uniform float _OutlineOpacity;
// fade
uniform half _FadeIntensity;
uniform half _FadeOffset;
uniform half _FadeOffset2;
// fade mask
uniform sampler2D _FingerGlowMask;
uniform fixed _HandFade_Toggle;
ENDCG
SubShader
{
LOD 100
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True""RenderPipeline" = "UniversalPipeline"
}
Pass
{
Name "Depth"
Tags
{
"LightMode" = "SRPDefaultUnlit"
}
ZWrite On
ColorMask 0
}
Pass
{
Name "Outline"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True""LightMode" = "UniversalForward"
}
Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex outlineVertex
#pragma fragment outlineFragment
struct OutlineVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct OutlineVertexOutput
{
float4 vertex : SV_POSITION;
float3 normal: NORMAL;
half4 glowColor : TEXCOORD1;
half3 fadeMask : TEXCOORD2;
float4 localPos : TEXCOORD4;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
OutlineVertexOutput outlineVertex(OutlineVertexInput v)
{
OutlineVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
v.vertex.xyz += v.normal * _OutlineWidth;
o.vertex = UnityObjectToClipPos(v.vertex);
o.localPos = v.vertex;
half3 fadeMask = v.vertex;
half fadeMaskOffset = o.localPos.y*_FadeOffset+_FadeOffset2;
half fadeMaskOffset2 = o.localPos.z*_FadeOffset+_FadeOffset2;
half _HandFade_Toggle_var = lerp( fadeMaskOffset,fadeMaskOffset2,_HandFade_Toggle );
half4 glow = _OutlineColor;
o.glowColor.rgb = glow.rgb;
o.glowColor.a = clamp((_HandFade_Toggle_var*_FadeIntensity),0,1) * glow.a * _OutlineOpacity;
return o;
}
half4 outlineFragment(OutlineVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
return i.glowColor;
}
ENDCG
}
}
SubShader
{
LOD 200
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"
}
Pass
{
Name "Depth"
ZWrite On
ColorMask 0
}
Pass
{
Name "Outline"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True"
}
Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex outlineVertex
#pragma fragment outlineFragment
struct OutlineVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct OutlineVertexOutput
{
float4 vertex : SV_POSITION;
float3 normal: NORMAL;
half4 glowColor : TEXCOORD1;
half3 fadeMask : TEXCOORD2;
float4 localPos : TEXCOORD4;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
OutlineVertexOutput outlineVertex(OutlineVertexInput v)
{
OutlineVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
v.vertex.xyz += v.normal * _OutlineWidth;
o.vertex = UnityObjectToClipPos(v.vertex);
o.localPos = v.vertex;
half3 fadeMask = v.vertex;
half fadeMaskOffset = o.localPos.y*_FadeOffset+_FadeOffset2;
half fadeMaskOffset2 = o.localPos.z*_FadeOffset+_FadeOffset2;
half _HandFade_Toggle_var = lerp( fadeMaskOffset,fadeMaskOffset2,_HandFade_Toggle );
half4 glow = _OutlineColor;
o.glowColor.rgb = glow.rgb;
o.glowColor.a = clamp((_HandFade_Toggle_var*_FadeIntensity),0,1) * glow.a * _OutlineOpacity;
return o;
}
half4 outlineFragment(OutlineVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
return i.glowColor;
}
ENDCG
}
}
}

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: d731039ebfec33f48a9a477a1969b4c5
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,181 @@
Shader "HPE/head_fade"
{
Properties
{
[Hand(Fade)]
_Length("Length", Float) = 0
_Color("Color", Color) = (0, 0, 0, 0)
_Scale("Scale", Float) = 1
}
CGINCLUDE
#include "Lighting.cginc"
#pragma target 3.0
// headfade
uniform half _Length;
uniform half4 _Color;
uniform half _Scale;
ENDCG
SubShader
{
LOD 100
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True""RenderPipeline" = "UniversalPipeline"
}
Pass
{
Name "headFade"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True""LightMode" = "UniversalForward"
}
//Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex outlineVertex
#pragma fragment outlineFragment
struct OutlineVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct OutlineVertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD1;
float4 localPos : TEXCOORD2;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
OutlineVertexOutput outlineVertex(OutlineVertexInput v)
{
OutlineVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
o.localPos = v.vertex;
return o;
}
half4 outlineFragment(OutlineVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half fade = clamp((i.localPos.g+ _Length) * _Scale, 0, 1) * _Color.a;
half4 result = half4(_Color.rgb, fade);
return result;
}
ENDCG
}
}
SubShader
{
LOD 200
Tags
{
"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"
}
Pass
{
Name "headFade"
Tags
{
"RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True"
}
//Cull Front
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex outlineVertex
#pragma fragment outlineFragment
struct OutlineVertexInput
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct OutlineVertexOutput
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD1;
float4 localPos : TEXCOORD2;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
OutlineVertexOutput outlineVertex(OutlineVertexInput v)
{
OutlineVertexOutput o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord.xy;
o.localPos = v.vertex;
return o;
}
half4 outlineFragment(OutlineVertexOutput i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
half fade = clamp((i.localPos.g+ _Length) * _Scale, 0, 1) * _Color.a;
half4 result = half4(_Color.rgb, fade);
return result;
}
ENDCG
}
}
}

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 05101c81489cd764ebd35d33ec4e0900
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,54 @@
Shader "HandEditor/Transparent Outlined Hand (PrepassZ)"
{
SubShader
{
Tags
{
"Queue"="Transparent" "RenderType"="Transparent"
}
LOD 200
// Pre-pass Zwrite. Makes the semitransparent hands
// sort correctly (i.e., the fingers blend onto the
// background, but not each other!)
Pass
{
ZWrite On
ColorMask A // Prevents Z prepass from actually drawing anything.
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 vertex : POSITION;
UNITY_VERTEX_OUTPUT_STEREO
};
struct appdata
{
float4 vertex : POSITION;
float4 normal : NORMAL;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
uniform float _HandThickness;
v2f vert(appdata v)
{
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_OUTPUT(v2f, o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.vertex = UnityObjectToClipPos(v.vertex);
return o;
}
fixed4 frag() : SV_Target { return 0; } // nop!
ENDCG
}
}
FallBack "Diffuse"
}

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 0b059227bd2954f478ffb40ca189d39d
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
preprocessorOverride: 0
userData:
assetBundleName:
assetBundleVariant: