VAF顶点动画和FlowMap 的原理介绍

2023-10-24 20:30

本文主要是介绍VAF顶点动画和FlowMap 的原理介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(1)VAF图片信息:
VAF顶点动画: 将动画信息存储在图片中()
图片大小:2687 * 100:
顶点数量 :2687
动画总帧数:100
在动画播放的时候:每一帧读取一行信息(2687个顶点的偏移值)。
在这里插入图片描述
(2)模型导入时的注意事项:
用于VAF顶点动画的模型,导入时 Optimize Mesh 一定要取消勾选
在这里插入图片描述

(3) VAF的代码:

  1. 注意点: 在图片中存储的uv信息的偏移值,在unity平台下 坐标轴向不同,可能会导致播放的动画是畸形的: XYZ三个轴的方向和unity 不一致导致!!!!!!!
    此处的bug,自己调整, 根据uv坐标采样出的rgb, 三个方向轴 慢慢试~~!!!!!!!!!!

  2. 3DMax 做VAF的顶点信息图片中 有正数 也有负数
    但是在unity 读取图片 读取不到负数。。。。。。。
    3.Hodini 可以导出 只有正数的VAF顶点信息图片。因此: 请拥抱 Houdini!!!

(4)在计算UV 流动的时候, 由于轴心点的值 不一定是你想要的!!!!

此时加一个可调节变量: _PivotOffset 轴心点偏移值!!!!!

(二)FlowMap效果

flowMap :
在noise图的基础上,
采样两次flowMap。 在两次采样结果之间lerp插值,
所以flowMap 的效果是周期性的, 循环往复, 这也是flowmap的缺点

Shader "Unlit/flowMap_code"
{Properties{_Noise ("_Noise", 2D) = "white" {}_FlowMap ("_FlowMap", 2D) = "white" {}_NoiseSpeed ("_NoiseSpeed", float) = 1_NoiseStrength ("_NoiseSpeed", vector) = (1,1,1,1)}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag			#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float2 uv_flow : TEXCOORD1;float4 vertex : SV_POSITION;};sampler2D _Noise,_FlowMap;float4 _Noise_ST,_FlowMap_ST;float _NoiseSpeed;float4 _NoiseStrength;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _Noise);o.uv_flow = TRANSFORM_TEX(v.uv, _FlowMap);return o;}fixed4 frag (v2f i) : SV_Target{			float2 uv = i.uv;   float4 flowCol = tex2D(_FlowMap,i.uv_flow);flowCol.x = -flowCol.x + 0.5;float2 timeScale =  fract ( _Time.x * _NoiseSpeed)  * _NoiseStrength;  float2  uvOffset =( flowCol.rg ) * timeScale;uv = uv + uvOffset;float2 uv1 = i.uv;float2 timeScale1 = fract( _Time.x * _NoiseSpeed + 0.5)  * _NoiseStrength;float2 uvOffset1 =  flowCol.rg * timeScale1;uv1 = uv + uvOffset1;float lerpFactor = abs(fract(_Time.x * _NoiseSpeed) * 2 - 1);			fixed4 col = tex2D(_Noise, uv);fixed4 col1 = tex2D(_Noise, uv1);			float4 finalCol = lerp(col,col1,lerpFactor);return finalCol;}ENDCG}}
}

这篇关于VAF顶点动画和FlowMap 的原理介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/277589

相关文章

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Java中 instanceof 的用法详细介绍

《Java中instanceof的用法详细介绍》在Java中,instanceof是一个二元运算符(类型比较操作符),用于检查一个对象是否是某个特定类、接口的实例,或者是否是其子类的实例,这篇文章... 目录引言基本语法基本作用1. 检查对象是否是指定类的实例2. 检查对象是否是子类的实例3. 检查对象是否

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

什么是ReFS 文件系统? ntfs和refs的优缺点区别介绍

《什么是ReFS文件系统?ntfs和refs的优缺点区别介绍》最近有用户在Win11Insider的安装界面中发现,可以使用ReFS来格式化硬盘,这是不是意味着,ReFS有望在未来成为W... 数十年以来,Windows 系统一直将 NTFS 作为「内置硬盘」的默认文件系统。不过近些年来,微软还在研发一款名

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component