Unity 透明视频

编程入门 行业动态 更新时间:2024-10-08 04:32:46

Unity <a href=https://www.elefans.com/category/jswz/34/1768258.html style=透明视频"/>

Unity 透明视频

一、问题
有时候图片序列帧太大占用存储和运行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 OneMinusSrcAlphapass{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"}


 

更多推荐

Unity 透明视频

本文发布于:2024-02-19 17:48:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1764929.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:透明   视频   Unity

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!