Unity播放透明视频的两种方式

简述两种方式,第一种方式是带通道的webm格式的透明视频,第二种方式是使用shader遮挡正常视频后面的黑色部分。

第一种播放

首先需要动画导出透明的序列图,然后用pr导出我们需要的webm格式的视频,记得要带透明通道

Unity播放透明视频的两种方式_第1张图片

然后把拖到Unity里面

Unity播放透明视频的两种方式_第2张图片

选择视频的参数,记得解压方式是VP8,其他格式也能用,自己可以看看效果就知道为啥不选择了。

接着就是正常的播放视频的流程,这里就不说了

Unity播放透明视频的两种方式_第3张图片

最后就可以直接播放带有透明的视频了。

第二种方式

为什么有一种方式了,还要有第二种方法呢。肯定是满足不了需求啊!这个透明视频如果是4k的话,重复叠上去几个视频会导致视频播放卡顿,电脑配置高的离谱的排外,可以不考虑第二种方法。

第二种方法用的是shader遮挡。

让视频组正常导出MP4格式的视频,需要遮挡的地方用全黑色代替。

Unity播放透明视频的两种方式_第4张图片

新建shader和一个材质球

shader中的代码如下:

Shader "Custom/Example"
{
	Properties{
	   _MainTex("Base (RGB)", 2D) = "white" {}
	   _FilterfColor("Ridof (RGB)",Color) = (1,1,1,1)
	}
		SubShader{
			Tags { "RenderType" = "Opaque" }
			Blend SrcAlpha OneMinusSrcAlpha
			pass
			{
				CGPROGRAM

				#pragma vertex vertext_convert
				#pragma fragment fragment_convert
				#include "UnityCG.cginc" 

				sampler2D  _MainTex;
				sampler2D  _MainTex1;
				float4  _FilterfColor;
				struct Inputvrite
				{
					float4 vertex : POSITION;
					float4 texcoord : TEXCOORD0;
				};
				struct Inputfragment
				{
					float4 pos : SV_POSITION;
					float4 uv : TEXCOORD0;
				};

				float ColorLerp(float3 tmp_nowcolor,float3 tmp_FilterfColor)
				{
					float3 dis = float3(abs(tmp_nowcolor.x - tmp_FilterfColor.x),abs(tmp_nowcolor.y - tmp_FilterfColor.y),abs(tmp_nowcolor.z - tmp_FilterfColor.z));
					float dis0 = sqrt(pow(dis.x,2) + pow(dis.y,2) + pow(dis.z,2));
					float maxdis = sqrt(3);
					float dis1 = lerp(0,maxdis,dis0);
					return dis1;
				}

				Inputfragment vertext_convert(Inputvrite i)
				{
					Inputfragment o;
					o.pos = UnityObjectToClipPos(i.vertex);
					o.uv = float4(i.texcoord.xy,1,1);
					return o;
				}

				float4 fragment_convert(Inputfragment o) : COLOR
				{
					float4 c = tex2D(_MainTex,o.uv);
					c.a *= ColorLerp(c.rgb,_FilterfColor.rgb);
					return c;
				}


			ENDCG
			}
	   }
		   FallBack "Diffuse"

}

材质球选择到shader的路径

Unity播放透明视频的两种方式_第5张图片

找到shader路径,Ridof(RGB)选择需要遮挡掉的颜色,遮掉黑色就选择黑色,其他颜色同理。

把材质球拖到播放器上

Unity播放透明视频的两种方式_第6张图片

然后就可以顺畅的播放了,不会有卡的情况。

你可能感兴趣的:(Unity播放透明视频的两种方式)