Unity 透明视频

4 篇文章 0 订阅

一、问题
有时候图片序列帧太大占用存储和运行IO,故采取透明视频方式处理。制作透明视频相比普通视频大小就会变小,但是如果还是不是很理想,可以进行视频压缩。
二、视频格式和压缩
视频是不带通道视频,格式为MP4,压缩我使用的ffmpeg,命令如下

ffmpeg -i test.mp4 -vcodec libx264 -preset veryslow  -crf 28 test-output1.mp4

三、Unity 透明视频
主要通过shader实现,新建shader 复制如下内容,然后新建材质,然后给RawImage和VideoPlayer托入改材质

SimpleAlpha.shader 

Shader "Custom/SimpleAlpha"
{
    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"

}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值