Files
tysdk-intergration/sdk-intergration/LocalPackages/LeviathanVideo/Runtime/Shader/YUV420P_3D_Alpha_Bottom.shader
2026-03-24 11:43:22 +08:00

122 lines
3.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Shader "LeviathanVideo/YUV420P_3D_Alpha_Bottom"
{
Properties
{
_MainTex ("YTexture", 2D) = "white" {}
_UTex("UTexture",2D)="white"{}
_VTex("VTexture",2D)="white"{}
[Toggle]_ReverseY("Reverse Y",Float)=1
_Color ("Tint", Color) = (1,1,1,1)
[Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull Mode", Float) = 2
[Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Float) = 1
[Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 4
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
}
Cull [_Cull]
Lighting Off
ZWrite [_ZWrite]
ZTest [_ZTest]
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
Name "Default"
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0
#include "UnityCG.cginc"
//Rec.709
static const half3x3 YUV_TO_RGB = half3x3(
1.16438, 1.16438, 1.16438,
0.0, -0.21325, 2.11240,
1.79274, -0.53291, 0.0
);
static const float FLOAT_16_255 = 16.0 / 255.0;
static const float FLOAT_128_255 = 128.0 / 255.0;
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
sampler2D _MainTex,_UTex,_VTex;
fixed4 _Color;
float4 _MainTex_ST;
half _ReverseY;
v2f vert(appdata_t v)
{
v2f OUT;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
OUT.vertex = UnityObjectToClipPos(v.vertex);
OUT.texcoord = TRANSFORM_TEX(v.texcoord.xy, _MainTex);
if (_ReverseY > 0)
{
OUT.texcoord.y = 1 - OUT.texcoord.y;
}
OUT.color = v.color * _Color;
return OUT;
}
fixed4 frag(v2f IN) : SV_Target
{
half3 c = 0;
half2 uv = IN.texcoord;
// 上半部分是颜色下半部分是Alpha
half2 uv1 = half2(uv.x, uv.y * 0.5);
half2 uv2 = half2(uv.x, uv.y * 0.5 + 0.5);
c.r = tex2D(_MainTex, uv1).a - FLOAT_16_255;
c.g = tex2D(_UTex, uv1).a - FLOAT_128_255;
c.b = tex2D(_VTex, uv1).a - FLOAT_128_255;
c = mul(c, YUV_TO_RGB);
half3 ca = 0;
ca.r = tex2D(_MainTex, uv2).a - FLOAT_16_255;
ca.g = tex2D(_UTex, uv2).a - FLOAT_128_255;
ca.b = 1;
ca = mul(ca, YUV_TO_RGB);
c /= clamp(ca.b, 0.01, 1);
c = saturate(c);
half4 color = half4(c, ca.b);
#ifdef UNITY_COLORSPACE_GAMMA
#else
color.rgb = pow(color.rgb, 2.2);
#endif
color.rgb = color.rgb * _Color.rgb;
return color * IN.color;
}
ENDCG
}
}
}