Unity3D消除视频绿幕

4 篇文章 0 订阅

PS:本文首发于简书,系本人文章,再在CSDN发布。

以前主管就告诉我们,做一个专门的技术博客,对以后成长有很大帮助,但是一直没有去做,工作一年,知识杂且乱,感觉收获不大,决定从写技术博客开始。

最近因工作原因,需要用unity实现 播放 消除  绿幕的视频。

首先从游戏蛮牛里面找到一个相关的文章,从文章中,大致了解到,可以使用shader来进行绿幕消除,但是CG语言小弟以前从来未接触过,表示看不懂。

后来找到了一个过滤颜色的文章,于是我复制了作者的shader代码。

首先新建一个shader,双击打开编辑代码,把文章中的代码复制下来,主要起作用的代码是以下的方法:

float4 fragment_convert(Inputfragment o) : COLOR{

float4 c = tex2D(_MainTex,o.uv);

return c;

}
该方法可以引用到使用该shader的材质上的RGBA值 ,然后我就根据代码大概意思,写出了以下代码
float4 fragment_convert(Inputfragment o) : COLOR{

float4 c = tex2D(_MainTex,o.uv);

//简单的判断材质的RGB值

if (c.g >0.5&&c.b<0.5&&c.r<0.5){

c.a = 0;//材质的绿色大到一定程度,并且蓝色和红色小到一定程度,就把该部分的材质的透明度设置为0

}

return c;

}

shader代码写好后,新建一个材质球,把shader赋予材质球,把材质球赋予指定的播放容器。

然后把播放视频代码的赋予到播放容器上即可。直接播放视频,会发现视频上的绿色部分被消除,但是并不能完全消除干净,CG代码有待优化。

绿幕消除前后对比:


以下是shader代码和播放视频代码

链接:http://pan.baidu.com/s/1eSiLzpg 密码:ul22


PS:以上描述虽然简单,但是在毫无基础的情况下,真是苦苦搜索而不得入门。

其中有几个坑:

1.不知道关键代码在何处,后来才认知到该方法能捕抓材质RGBA。

2.不清楚CG语言中RGBA值的范围,一直使用了0~255的值域,所以久久得不到正确的结果,后来才发现CG语言中RGBA的值域是0~1。

3.不熟悉shader玩法的情况下,不知道应该如何把shader和视频关联起来,后来才发现,把shader绑到容器里,就会使用该shader自动渲染视频。

就酱吧,欢迎转载,转载注明出处


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值