轩辕kuku
论坛版主
论坛版主
  • UID14
  • 粉丝6
  • 关注1
  • 发帖数78
  • 社区居民
  • 原创写手
阅读:1765回复:1

Unity中单通道视频播放Shader

楼主#
更多 发布于:2015-11-13 21:20
接着前一篇帖子Unity播放单通道视频内容,PC端Vuforia增强现实透底视频的Shader。不足之处请大家指出,大家相互学习,共同进步,谢谢!(请关注网站www.arvrschool.com和微信公众号:AR助手)

图片:111.png



1、Shader的属性
Properties {
             _MainTex("Base(RGB)", 2D) = "white" {}
      }
这部分将会显示在Unity的Inspector面板中,直接将要显示的内容拖拽进去即可。
2、在shader中的SubShader中定义一次输入的2D图片:
sampler2D _MainTex;
并将sampler的uv坐标写入输入的结构体:
             struct
Input {
                    float2 uv_MainTex;
             };

3、Shader的主函数
void surf (Input IN, inout
SurfaceOutput o) {
//获取_MainTex的uv坐标
                    float2 uv_Left = IN.uv_MainTex;
        //将_Main_Left的左边部分坐标读取到uv_Left,因为视频的x坐标是原来的一般,y坐标不变化
                    uv_Left.x = uv_Left.x / 2.0;
//通过坐标取出_MainTex的左边部分即有RGB的部分
                    half4 c_Left = tex2D (_MainTex, uv_Left);
//同理取出MainTex的右边部分,即黑白部分
                    float2 uv_Right = IN.uv_MainTex;
                    uv_Right.x = uv_Right.x / 2.0 + 0.5;
                    half4 c_Right = tex2D(_MainTex, uv_Right);
//最后在输出的时候采用左边部分的RGB值,通过判断右边的为白还是为黑,来决定右边对应部分的Alpha通道值为0还是1.
                    o.Albedo = c_Left.rgb;
//这种判断方式有很多种,这里只是比较粗糙的一种判断
                    o.Alpha = c_Right.r >0.5 ? 1:0;

             }

最新喜欢:

ARqingongARqing...

欢迎分享

ARqingong
侠客
侠客
  • UID290
  • 粉丝1
  • 关注0
  • 发帖数19
  • 社区居民
沙发#
发布于:2015-11-16 13:00
感谢!终于弄明白了!
游客

返回顶部