最近项目压力不大,抽时间看了些关于shader和游戏引擎的书籍,准备开始shader的学习。

在网上看到这位前辈(http://blog.sina.com.cn/s/articlelist_2312702844_6_1.html)写的博客,觉得很不错,学习曲线应该很适合自己,所以决定也从头一篇一篇每个shader自己实现一下,并加入自己的理解。今天就是调试的第一篇,很简单的逐帧动画shader。

这个shader的原理就是根据时间,变化uv的值,使得纹理映射时取的uv范围本应是0到1,变化为根据子图片数量切割成的区间。比如序列帧图片为两行四列,在纹理映射时,x和y的范围本应是0到1,但是经过处理,会变成在不同的时间段内,映射范围为不同的区间,比如x轴分别为0-0.25,0.25-0.50,0.50-0.75,0.75-1;y轴为0-0.5,0.5-1.这样,在不同的时间段内就可以取出对应的子图片。

Shader "Stutdy/1_FrameAnimation"
{Properties{_Color("Main Color", Color) = (1,1,1,1)_MainTex("Base (RGB) Trans (A)", 2D) = "white" {}_SizeX("列", Float) = 4_SizeY("行", Float) = 2_Speed("播放速度", Float) = 150}SubShader{// 这里使用Unity3d自带光照模型Lambert// 不用做顶点处理,只需要一个表面处理函数surfCGPROGRAM#pragma surface surf Lambert alpha  //开启Alpha透明// 声明参数fixed4 _Color;sampler2D _MainTex;uniform fixed _SizeX;uniform fixed _SizeY;uniform fixed _Speed;// 获取_MainTex的UV信息定义输入结构体struct Input{// 在贴图变量前加上uv表示提取uv值(二维坐标)float2 uv_MainTex;};void surf(Input IN, inout SurfaceOutput o){// 获取单元格UVfloat2 cellUV = float2(IN.uv_MainTex.x / _SizeX, IN.uv_MainTex.y / _SizeY);  //这步首先把范围缩小为初始为0的区间// UV坐标值范围为0-1,获取单元格宽度float deltaX = 1 / _SizeX; // 每个区间宽度float deltaY = 1 / _SizeY; // 每个区间高度// 当前播放总索引int index = _Time * _Speed;// 求列索引int col = fmod(index, _SizeX);// 求行索引int row = fmod(index / _SizeX, _SizeY); //这步多加了取余数操作,可以循环播放动画// 原始UV + 当前格增量cellUV.x += col * deltaX;  //确定x的区间cellUV.y += row * deltaY;  //确定y的区间   // 创建tex2d(材质,uv)*主色fixed4 c = tex2D(_MainTex, cellUV) * _Color;// RGBo.Albedo = c.rgb;// 透明度o.Alpha = c.a;}ENDCG}
}

附上工程链接:http://download.csdn.net/detail/yinfourever/9563256

1.逐帧动画shader相关推荐

  1. Shader山下(三)逐帧动画

    逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在"连续的关键帧"中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画. 例如下面这 ...

  2. Android 逐帧动画(Frame)

    Android 逐帧动画(Frame)  很好理解就是将多张图片放到一个容器里面通过控制这些图片一帧一张图片从而形成动画 使用的使用通过AnimationDrawable 加载放好的图片 然后通过调用 ...

  3. [练习]利用CSS steps 实现逐帧动画

    网页逐帧动画的实现方式 网页中的逐帧动画,大致可分为两大类的实现方式, 分别是使用JS控制,和单纯使用CSS实现,两者的优劣总体概括来说就是: JS动画可控性更强,但开销大,实现复杂. CSS动画实现 ...

  4. 逐帧动画和补间动画的使用场景(二)

    2019独角兽企业重金招聘Python工程师标准>>> 逐帧动画和补间动画的使用场景(二) 上一节我们详细的介绍了补间动画和逐帧动画的基本使用,如果你对这还不熟悉的请看这篇文章: h ...

  5. Android自定义控件:动画类---逐帧动画AnimationDrawable

    1:概述 Android动画包括View Animation(视图动画)和Property Animator(属性动画),而View Animation包括Tween Animation(补间动画)和 ...

  6. Android中实现一个简单的逐帧动画(附代码下载)

    场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...

  7. Android 高级编程【6个实战案例(附源码):刮刮卡、补间动画、逐帧动画、Fragment、RecyclerView、下拉刷新】

    目   录 刮刮卡案例[ScratchCard] 结构图 activity_main.xml MainActivity.java 运行效果图 补间动画(Tween Animation) 逐帧动画(Fr ...

  8. Android 动画(四)---逐帧动画

    1创建逐帧动画资源---文件res/drawable/animated_rocket.xml <?xml version="1.0" encoding="utf-8 ...

  9. objective-c 逐帧动画

    2019独角兽企业重金招聘Python工程师标准>>> // //  ViewController.m //  逐帧动画 // //  Created by DC017 on 15/ ...

最新文章

  1. abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...
  2. 网上银行跨行转账收费最高相差25倍 省钱有窍门
  3. 用好这6个新功能,让你的项目设计事半功倍
  4. oppo5.0以上系统怎么样不Root激活Xposed框架的经验
  5. string 释放_由String,String Builder,String Buffer 引起的面试惨案
  6. shell输入输出重定向
  7. 读谱对吉他手来说重要吗?试试它提升你的读谱效率
  8. spss分析qpcr数据_qRT-PCR差异分析及P值计算
  9. 2013校园招聘阶段小结
  10. 3GPP最新提案查询方法
  11. JavaScript基础知识全总结
  12. 看看清华人是如何学习和生活的
  13. [Python爬虫] 九、机器视觉与机器图像识别之Tesseract
  14. 一、熟悉新闻推荐系统基本流程
  15. 欧姆龙SYSMAC STUDIO如何与基恩士DL-EP1进行EIP通信
  16. HTML中如何为网页添加背景音乐
  17. 我理解的「向下兼容」
  18. SQL中的条件判断语句(case when zhen)用法
  19. 基于Sentinel-2的杞县大蒜提取试验
  20. Win10 从头开始搭建搭建GPU版darknet【CUDA11.1 + VS2019】

热门文章

  1. IBM服务器显示系统恢复,苏州数据恢复_IBM X3850服务器数据恢复中处理SAS硬盘故障的恢复案例...
  2. 单例模式android应用场景,应用最广的模式-单例模式(结合Android源码)
  3. [蓝桥杯][算法提高VIP]A Careful Approach(全排列+二分)
  4. ffplay android 编译,ffmpeg android 平台编译
  5. 【计算机网络】ISO/OSI模型
  6. python左移右移位运算_Python这些位运算的妙用,绝对让你大开眼界
  7. java arp 攻击_用JAVA代码实现ARP攻击 | 学步园
  8. Solr+Hbase多条件查(优劣互补)
  9. [机器学习]正则化方法 -- Regularization
  10. 一维的Haar小波变换