Unity中带有alpha通道的视频叠加播放
问题:
如何让两个透明视频叠加播放
解决播放:
1:使用Unity自带的shader,shader代码如下所示
Shader "Unlit/MaskVideo"
{
Properties
{
_MainTex("MainTex", 2D) = "white" {}
_Mask("Mask", 2D) = "white" {}
_Transparency("Transparency", Range(0, 1)) = 0
_Color("Color", Color) = (0.4485294,0.310013,0.310013,1)
[HideInInspector]_Cutoff("Alpha cutoff", Range(0,1)) = 0.5
} SubShader
{
Tags
{
"IgnoreProjector" = "True"
"Queue" = "Transparent"
"RenderType" = "Transparent"
} Pass
{
Name "FORWARD"
Tags {"LightMode" = "ForwardBase"}
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#define UNITY_PASS_FORWARDBASE
#include "UnityCG.cginc"
#include "UnityPBSLighting.cginc"
#include "UnityStandardBRDF.cginc"
#pragma multi_compile_fwdbase
#pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2
#pragma target 3.0 uniform sampler2D _MainTex; uniform float4 _MainTex_ST;
uniform sampler2D _Mask; uniform float4 _Mask_ST;
uniform float _Transparency;
uniform float4 _Color; struct VertexInput
{
float4 vertex : POSITION;
float2 texcoord0 : TEXCOORD0;
}; struct VertexOutput
{
float4 pos : SV_POSITION;
float2 uv0 : TEXCOORD0;
}; VertexOutput vert(VertexInput v)
{
VertexOutput o = (VertexOutput)0;
o.uv0 = v.texcoord0;
o.pos = UnityObjectToClipPos(v.vertex);
return o;
} float4 frag(VertexOutput i) : COLOR
{
float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex));
float3 emissive = (_Color.rgb*_MainTex_var.rgb);
float3 finalColor = emissive;
float4 _Mask_var = tex2D(_Mask,TRANSFORM_TEX(i.uv0, _Mask));
return fixed4(finalColor,((lerp(lerp(lerp(_Mask_var.b, _Mask_var.r, _Mask_var.rgb.r), _Mask_var.g, _Mask_var.rgb.g), _Mask_var.b, _Mask_var.rgb.b))*_Transparency));
} ENDCG
} } FallBack "Diffuse"
CustomEditor "ShaderForgeMaterialInspector"
}
2:准备好格式为两个mp4的视频文件,并且提前下载安装好QuickTime,导入Unity当中,将视频文件由Videoclip改为MovieTexture
3:建立新的Material材质,将编写好的shader使用到材质中去,并将处理好的视频拖入当中
注意 : 上面的视频会遮盖住下面的视频
4:建立plane模型,X旋转90度,将建立好的材质拖到plane模型当中去,用代码控制视频的播放
5:控制代码如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class MovieTextureWithAlphaMask : MonoBehaviour { private MovieTexture mask;
private MovieTexture mainTex; // Use this for initialization
void Start()
{
mask = (MovieTexture)GetComponent<Renderer>().material.GetTexture("_Mask");
mainTex = (MovieTexture)GetComponent<Renderer>().material.GetTexture("_MainTex");
mainTex.Play();
mainTex.loop = true;
mask.Play();
mask.loop = true;
}
}
Unity中带有alpha通道的视频叠加播放的更多相关文章
- Unity如何播放带有alpha 通道的视频
问题: 当使用Video Player播放带有alpha 通道的视频时带有黑色背景 解决方式: 使用文件格式为WEBM的视频,对视频文件进行的修改 在RawImage中,将New Render Tex ...
- 去除图像中的alpha通道或透明度
自从appstore提交app改变后,虽然提交的流程还是和原来一样,但是相比以前还是有很大的改动,本来就不太喜欢 English,改版之后很多东西都变了,开发一个app就已经够他妈的蛋疼啦,上传一个a ...
- 在wpf中如何让MediaElement的视频循环播放
原文:在wpf中如何让MediaElement的视频循环播放 MediaElement原始的播放是只播放一遍:如何设置让MediaElement播放 的视频或者音频循环播放,解决如下: 修改Media ...
- Unity中播放带有alpha通道格式为Mp4的视频
问题: Unity中实现播放透明的MP4视频时出现黑点 解决办法: 使用Unity自带的shader去除黑点 1:shader代码如下所示 Shader "Unlit/NewUnlit ...
- 带Alpha通道的色彩叠加问题
css3的rgba色彩模式.png/gif图片的alpha通道.canvas的rgba色彩模式.css3的阴影.css3的opacity属性等等,这些应用在网页中,有意无意间,我们的页面多了许多半透明 ...
- mixer中动态Alpha通道处理案例
本案例处理的是RGB+a,每个色彩的采样为10位位宽. 1.在Mixer IP中打开Alpha Blending Enable 和Alpha Input Stream Enable.这样在Blo ...
- Unity 播放 带 alpha 通道的视频(Video Player组件)
孙广东 2017.6.18 http://blog.csdn.NET/u010019717 通常是 .webm类型文件!!!!! 你可以下载这个文件到本地: Http://tsubakit1.s ...
- (转)unity中基于alpha通道的shadow volume实现
转自:http://blog.163.com/wmk_2000_ren/blog/static/138846192201019114117466/ 实现呢,Aras大神已经给出了, http://fo ...
- 【计算机视觉】OPENCV对于有alpha通道的透明背景图片的读取和图片叠加
这个是我自己做的粗略的螺旋丸的图,导出为png并带有alpha通道. 最后和一只狗合成成这个样子. 效果还是可以的. 为了实现这个效果,首先我们要明白具有透明通道的图片的OpenCV的读取方式.在Op ...
随机推荐
- react-color 颜色选择器组件
demo链接:github demo 安装: npm install react-color --save 有一下几种类型组件 <AlphaPicker /> <BlockPicke ...
- 剑指Offer面试题29(java版):数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 比如输入一个长度为9的数组{1,2,3,2.2,2.5,4,2}.因为数字2在数组中出现5次,超过数组长度的一半,因此输出2. 解 ...
- MVC 登录后重定向来最初请求的 URL
1.在登录的“Action” 方法中接收“ReturnUrl”参数. 2.在验证登录的“Action”方法中登录成功后,判断如果“ReturnUrl”不为空就跳转到“ReturnUrl”指向的页面. ...
- 局部优化与整体效果 新增时间>节省时间 权衡利弊
原代码 from selenium import webdriverimport requests,timeurl_l=[]with open('DISTINCT_url.txt', 'r', enc ...
- Codeforces Round #311 (Div. 2) D - Vitaly and Cycle
D. Vitaly and Cycle time limit per test 1 second memory limit per test 256 megabytes input standard ...
- 【NOIP1999】【Codevs 1046】旅行家的预算
http://codevs.cn/problem/1046/ Solution: 贪心,如果当前油价很低,它就比起当前剩余油的价还低就可以替换,并且每次加满,最后把剩的油卖掉即可 油价用单调链表(不知 ...
- 红米note怎么打开USB调试模式
红米note到货后,打开USB调试模式是一些新手很棘手的问题,所以要手机助手成功识别红米note,你必须打开红米note的USB调试模式.在安卓4.2版本中,系统的USB调试模式不是非常简单地被打开的 ...
- 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 C序列变换
链接:https://www.nowcoder.com/acm/contest/91/C来源:牛客网没有账号的同学这样注册,支持博主 题目描述 给定两个长度为n的序列,ai, bi(1<=i&l ...
- Code First:Data Anotation (2)
示例一 本例演示与索引有关的内容,模型: using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAn ...
- HDU 2544 最短路 (Floyd)
题意:略. 析:由于 n 比较小,所以我们可以用Floyd,完全不会超时. 代码如下: #pragma comment(linker, "/STACK:1024000000,10240000 ...