unity中VideoPlayer播放视频,使用Shader除去黑底且无黑边

1. 创建一个Shader 和 一个 材质球;Shader中复制如下代码:(此Shader代码为“ChromaKeyKit”插件中的ChromaKey_Alpa_Genera代码,但因只需要除去视频黑底而挂一个插件有点不合适)

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "ChromaKeyKit/ChromaKey/ChromaKey_Alpha_General" {
	Properties{
		_MainTex("MainTex", 2D) = "white" {}
		_KeyColor("KeyColor", Color) = (1,1,1,1)
		_DChroma("D Chroma", range(0.0, 1.0)) = 0.5
		_DChromaT("D ChromaT", range(0.0, 1.0)) = 0.05
		_DLuma("D Luma", range(0.0, 1.0)) = 0.5
		_DLumaT("D LumaT", range(0.0, 1.0)) = 0.05
	}
	CGINCLUDE
	#include "UnityCG.cginc"
	struct VS_OUT {
		float4 position:POSITION;
		half2 texcoord0:TEXCOORD0;
	};

	sampler2D _MainTex;
	half4 _MainTex_ST;
	
	half4 _KeyColor;
	half _DChroma;
	half _DLuma;
	
	half _DLumaT;
	half _DChromaT;

	VS_OUT vert(appdata_base input) {
		VS_OUT o;
		o.position = UnityObjectToClipPos(input.vertex);
		o.texcoord0 = TRANSFORM_TEX(input.texcoord, _MainTex);
		return o;
	}

	half3 RGB_To_YCbCr(half3 rgb) {
		half Y = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;
		half Cb = 0.564 * (rgb.b - Y);
		half Cr = 0.713 * (rgb.r - Y);
		return half3(Cb, Cr, Y);
	}

	half4 frag(VS_OUT input) : SV_Target {
		half4 c = tex2D(_MainTex, input.texcoord0);

		half3 src_YCbCr = RGB_To_YCbCr(c.rgb);
		half3 key_YCbCr = RGB_To_YCbCr(_KeyColor);

		half dChroma = distance(src_YCbCr.xy, key_YCbCr.xy);
		half dLuma = distance(src_YCbCr.z, key_YCbCr.z);

		if (dLuma < _DLuma && dChroma < _DChroma) {
			half a = 0;
			if (dChroma > _DChroma - _DChromaT) {
				a = (dChroma -_DChroma + _DChromaT) / _DChromaT;
			}
			if (dLuma > _DLuma - _DLumaT) {
				a = max(a, (dLuma - _DLuma + _DLumaT) / _DLumaT);
			}
			c.a = a;
		}
		return c;
	}
	ENDCG
	SubShader {
		//Cull back
		Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True" }

		Lighting Off
		ZWrite Off
		AlphaTest Off
		Blend SrcAlpha OneMinusSrcAlpha

		Pass {
			CGPROGRAM
			  #pragma vertex vert
			  #pragma fragment frag
			ENDCG
		}
	}
	Fallback Off
}

2. 挂上Shader的材质球,KeyColor地方选择黑色;

2. 将材质球挂在 带有VideoPlayer插件的 RawImage上就可以了;

3. 因为不是即时写的方法, 可能会漏了些步骤,不过不可以,我补充一下;

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值