StarWink UV顶点动画制作详解

我们先来看最终效果

实现原理:

1.利用算法得到圆形差值的UV坐标(中间为0)去采样纹理,得到圆形扩散的循环纹理动画。
2.利用算法得到循环的圆形扩散遮罩,并作为顶点偏移遮罩控制顶点动画。
3.模型顶点UV做了同一块模型上的UV顶点坐标一致性的处理,使得同一块模型上的所有点偏移量一致。
此次制作使用ASE来做算法说明(代码不直观)。

算法实现:

1. 利用UV的取值范围映射到指定的取值范围,并求模(Remap和Length)


第一个算法是Remap方法:

将某个区间的取值范围([Min Old, Max Old])映射到指定区间范围([Min New, Max New])。
算法为:如要将Val从[a, b]映射到[A, B],则公式为 Val = A + Val * (B - A) / (b - a)

第二个算法是length方法,意思是求取向量模长。公式:Sqrt ( Dot ( Iput, Iput ) )。此处将
[-1, 1]的取值范围的二维坐标取模,因为中间点(0, 0)的模长为0,边界处模长为1,所以得到一个[0, 1]灰度渐变的圆(这里的渐变为线性的)。

2. 两向量间的距离,(Distance)


当B向量TimeSpeed = 0时,Distance如下图所示。
公式:Sqrt (dot ( ( B-A ), ( B-A ) ) ),即为两向量距离公式。

这里将公式拆开分析,此处为两个模长的点积,即标量点积(理论上是不成立的,但是unity在底层还是做了计算规则)。先来看下图:

0.6点积0.6 近似= 1
所以我猜测可能是将一维的值自动填充为了三维向量,三个分量都是一维的那个值。然后两个三维向量进行点乘。例举几个值,测试结果均吻合!下图是其中一个测试:

下图中的a是Length的值,即模长为1的圆,根据上面推测的算法,a和a点积并开方后,边界值为根号3,即约等于1.732,并做了减法验证,说明推测无误(但是从0到1.732是非线性渐变的),所以看起来黑色圆缩小了。
Sqrt为开根号运算。

当B向量Time
Speed != 0时,Distance如下图所示为一个从Time*Speed 到(上限值X(此处X为1.732)TimeSpeed) 范围的取值。并且随着时间增长,整个区间的值也随着增长。

3.UV坐标值随着时间线性增长并实时采样贴图

(彩虹纹理图)

用Distance的值去采样彩虹纹理图,得到循环圆的彩虹纹理。
作为UV坐标的distance遮罩的(0, 0)点在中心,采样贴图颜色为彩虹纹理图的左下角(0, 0)点的颜色(橙色),所以最终中心点颜色为橙色,并随着坐标的增大,不断采样靠上的颜色,黄,绿,蓝,紫,红。当坐标超过1时,即循环从橙色开始采样。所以最终效果是一个循环的圆扩散动画。

4. Fract(取小数位)


如上面所分析,Distance的取值范围在[ TimeSpeed, X * TimeSpeed ],差值为2左右,这样就有了两个小数循环,如图Fract所示。由于从0.9999到0是突然跳转(因为1的小数位是0),所以有硬边,而0到1是渐变的。但是这里发现了个问题,那就是如果Distance上限为1.732,那取小数后就是0.732,不可能为上图Fract的样式,应该是下图这样的:

而我们用点乘开方的算法算出来正是上面的形状,请看:

所以我觉得Distance算法并不像官方所说的仅仅是Sqrt (dot ( ( B-A ), ( B-A ) ) ),应该还加了一个压缩到整数位的操作,这样取小数时才能取满。
所以我们使用Remap将取值范围从(0, 1.737)映射到(0, 2),如下图所,结果和Distance结果一致。

5.Step节点


Step节点具体算法是,如果B>A,则返回1(白色),如果B<=A,则返回0(黑色)。
将Fract的值做Step就得到了黑白遮罩,这个遮罩是为了最终影响顶点偏移(黑色不偏移,白色完全偏移,因为模型顶点UV做了同一块模型上的UV顶点坐标一致性的处理)而做的。

6. 构建顶点偏移量(Append)


将顶点坐标的每个分量分别做偏移处理,最后利用Append节点重新构建。最后和Step混合得到最终的顶点动画。

StarWink UV顶点动画制作详解相关推荐

  1. matlab动画制作详解

    众所周知,MATLAB的绘图能力十分强大.有时,我们不仅需要绘图,还需要制作一些动态视频和动画,下面就来介绍一些matlab里制作动画和视频常用的函数,并举出一些实例. 一.animatedline ...

  2. 利用Animation控件制作帧动画过程详解

    利用Animation控件制作帧动画过程详解 前言 通过Animation控件来达到序列图的播放(素材和示例视频在文章末尾) 一.序列图 (此素材为已经分割好的序列图) 如若序列图在一张图片上,请参考 ...

  3. Android 动画框架详解,第 1 部分

    2019独角兽企业重金招聘Python工程师标准>>> Android 平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果,本文将向读者阐述 Android 的动画框 ...

  4. Unity动画系统详解10:子状态机是什么?

    摘要:除了使用Layer还有没有更好的组织状态的方式呢?感觉一个Layer里面状态多的时候,还是很显得很乱. 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是复(yu)习( ...

  5. Unity动画系统详解9:Target Matching是什么?

    摘要:在游戏中,经常有这种情况:角色的手或者脚需要在特定时间放在特定的位置.比如角色需要用手撑着跳过一个石头或一堵墙,或者跳起抓住房梁.Target Match就是让动画的特定片段去匹配特定的位置. ...

  6. Unity动画系统详解5:BlendTree混合树是什么?

    摘要:"Animator中有一个功能,用来解决多个动画之间的混合,经常用于移动动画之间的混合,这个功能叫做BlendTree,混合树." 洪流学堂,让你快人几步.你好,我是跟着大智 ...

  7. unity velocity_Unity动画系统详解5:BlendTree混合树是什么?

    摘要:"Animator中有一个功能,用来解决多个动画之间的混合,经常用于移动动画之间的混合,这个功能叫做BlendTree,混合树." 洪流学堂,让你快人几步.你好,我是跟着大智 ...

  8. T4M插件放入unity后怎么找不到_Unity动画系统详解4:如何用代码控制动画?

    摘要:通过上一篇咱们知道了播放动画需要使用Animator,那么如何用代码控制动画呢? 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这几周一起来复(yu)习(xi)动画系统 ...

  9. Android 吸入动画效果详解(仿mac退出效果)

    转载自:http://m.blog.csdn.net/blog/leehong2005/9127095 [转]Android 吸入动画效果详解 1,背景 吸入(Inhale)效果,最初我是在iOS上面 ...

最新文章

  1. Boost:使用类array <>的简单示例
  2. VTK:Qt之RenderWindowNoUiFile
  3. PHP-Webshell免杀研究
  4. Markdown--Latex数学公式编辑
  5. C#设计学生成绩排序
  6. elasticsearch restful api操作使用指南
  7. git只提交一张图片_几张图让你彻底弄懂git工作流(三) ——git深入
  8. WordPress主题制作全过程(二):主题文件构成
  9. FPGA智能传感系统(二)基于FPGA的交通灯设计
  10. MPC5744P-时钟模块
  11. 斐讯k2路由器v22.4.6.3版本刷breed刷华硕固件方法
  12. 计算机病毒是如何入侵你的电脑吗,怎么样正确处理被病毒侵入的电脑
  13. JavaScript对象类型的详解
  14. 摄像头黑屏等问题及解决方案汇总
  15. 云虚拟主机worldpress安装教程
  16. API查q绑定带反查sgk带接口API文件源码
  17. u盘中毒文件被隐藏恢复方法
  18. 创新物联网方案引导生活更美好
  19. ZCMU-1919 kirito's 星爆气流斩(多重背包+二进制优化)
  20. 边云协同的优点_边云协同

热门文章

  1. 64位windows下32位进程一例卡死分析
  2. 电厂智慧化解决方案,助力电厂高效发电,节能降耗
  3. html5 Canvas颜色渐变(画图很重要)
  4. android 属性翻牌动画,Android通过动画实现翻牌效果
  5. 数字工业 弹性安全丨2022 Fortinet工业互联网安全发展峰会成功举办
  6. Radware:从宠物小精灵游戏看网络基础设施的预判与预案
  7. 深度学习 (六)Long Short Term Memery
  8. 算法实例:枚举的魅力
  9. 图片链接转base64
  10. Cannot set priority of nodemanager process xxx问题