Shader动画之UV动画与顶点动画_被踩到尾巴也不哭的李大海的博客-程序员宅基地_uv动画

技术标签: 动画  Shader  

用Shader实现动画主要包括两种方式:

1.UV动画

主要用于 序列帧、模拟无限重复的背景

让模型顶点对应的uv随时间变化,使其对应纹理像素不断随时间变化

但是无法达到让物体“变形”的效果

例如:

			v2f vert(a2v v){
				v2f o;
				o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
				o.uv.xy = TRANSFORM_TEX(v.texcoord,_FirstLayer) + frac(float2(_MoveSpeed1,0.0) * _Time.y); 
				o.uv.zw = TRANSFORM_TEX(v.texcoord,_SecendLayer) + frac(float2(_MoveSpeed2,0.0) * _Time.y); 
				return o;
			}
			float4 frag(v2f i):SV_Target{
				float4 color1 = tex2D(_FirstLayer,i.uv.xy);
				float4 color2 = tex2D(_SecendLayer,i.uv.zw);
				float4 color = lerp(color1,color2,1 - color1.a);
				return color;
			}
其中 
TRANSFORM_TEX()方法使用时必须注意,需要提前声明 纹理名_ST  变量,这是因为该方法的作用是计算模型空间下的顶点UV,对应的 纹理UV,
可以理解成,为模型的每个顶点指定其所对应的是纹理贴图上的哪一个像素。 但是,Unity中纹理贴图都会自动对应两个基础属性,Tiling 和 Offset
其中 Tiling 是指纹理贴图的阵列(相当于行、列方向的重复次数),设置为 3 x 3 ,即每行有3个,每列有3个。
Offset 是指贴图的偏移,因为我们要在代码中实现uv偏移,这里设置为0





2.顶点动画

原理和uv动画有相同的地方,但是顶点动画

可以让物体动起来的同时,达到变形的效果

其主要原理是在 顶点着色器中对模型的顶点进行偏移,再将偏移后的顶点位置输出到片元着色器中。

用正弦函数,以时间为变化量,输出对应的 x方向偏移,即可模拟简单的水流效果

y = Asin(频率 * t  + w)

v2f vert(a2v v){
	v2f o;
	float4 offset = float4(0.0,0.0,0.0,0.0);
	offset.x = sin(_Frequency * _Time.y  + v.vertex.x * _WaveLength + v.vertex.y * _WaveLength + v.vertex.z* _WaveLength) * _Magnitude;
	o.pos = mul(UNITY_MATRIX_MVP,v.vertex + offset);
	o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
	o.uv += float2(0.0,_Time.y * _Speed);
	return o;
}
float4 frag(v2f i):SV_Target{
	float4 c = tex2D(_MainTex,i.uv);
	c.rab *= _Color;
	return c;
}






版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33953662/article/details/78836959

智能推荐

微信3.1.0.72逆向-微信3.1.0.72HOOK接口说明(WeChatHelper.dll)-好友列表_八爪鱼keepmoving8的博客-程序员宅基地

功能: 好友列表 Method: GET Http: http://127.0.0.1:8080/?cmdid=5 返回值: JSON(data为数组): { "cmdid": 9, "status": "ok", "data": [ { "wxid": "微信号", "account": "账号", ...

Login shell vs Interactive shell___HelloWorld__的博客-程序员宅基地

System Environment Variables PathsYou can start a bash shell with one of the following ways:Login shell.The interactive shell.The non-interactive shell.login shellWhen you log onto the s...

FPGA nios学习笔记_我是标同学的博客-程序员宅基地

IP核:美国著名的Dataquest咨询公司将半导体产业的IP定义为“用于ASIC或FPGA中的预先设计好的电路功能模块”。IP主要分为软IP、固IP和硬IP。软IP是用Verilog/VHDL等硬件描述语言描述的功能块,但是并不涉及用什么具体电路元件实现这些功能。固IP是完成了综合的功能块。硬IP提供设计的最终阶段产品——掩膜。 Qsys的前身是“SOPC Builder”,在最新的Quart...

Vim学习——编写Vim脚本基础_karelcn的博客-程序员宅基地_vim脚本语法

声明:此篇为https://vim.linuxsong.org vim中文手册整理入门案例::let i = 1:while i < 5: echo "Hello,World!" i: let i += 1:endwhile冒号: 字符非必须,只有键入命令时需要,编写Vim脚本时可以省略1.变量定义变量 :let:let {变量} = {表达式}表达式类型 ==vi...

递归求集合子集_Bread Sir的博客-程序员宅基地_用递归求集合的子集

那个紫书上求子集只是1~n,并不是指定集合a的子集,其实很简单,一个BFS递归一下,用vector保存这个集合,有两个状态:1.取a[i]放vector中;2.不取a[i]直接上代码:#include<cstdio>#include<vector>#include<algorithm>using namespace std;int a[100...

随便推点

linux驱动:i2c驱动(一)_郭老二的博客-程序员宅基地_/sys/bus/i2c/devices/i2c-*/ name

I2C系统框架:I2C核心层、I2C总线驱动、I2C设备驱动--------------------------------------------------------------------------------【I2C核心层】代码在driver/i2c/i2c-core.c中【I2C总线驱动】也叫I2C适配器驱动1、每个适配器视为一个字符设备文件代码在driver

C语言倒计时_kasalala的博客-程序员宅基地_倒计时 c

从3:00 2:59……到0:03 0:02 0:01#include <stdio.h>#include <stdlib.h>#include <windows.h>#define MINUTE 3#define SECOND 0int main(){ int mins,seconds; mins=MINUTE; ...

grpc-go 代码阅读笔记(六):名称解析(一)_fananchong2的博客-程序员宅基地

名称解析( Resolver )名称解析是 gRPC-go 提供的服务发现机制gRPC-go 内置了几种名称解析方式同时提供接口,使用者可以扩展自己的名称解析方式内置名称解析见代码, clientconn.go 49 - 51 行:package grpcimport ( // 其他代码略 _ "google.golang.org/grpc/internal/resolver/dns" // To register dns resolver. _ "google.gol

python 引入.py文件_kaluosifa的博客-程序员宅基地

问题:python 引入.py文件出错解决:问题出在文件名上的下划线“_”上, 将其去除即可。 

Linux命令总结_keep12moving的博客-程序员宅基地

1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序。 ps -A 显示所有程序。 ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。 ps -e 此参数的效果和指定"A"参数相同。 ps e 列出程序时,显示每个程序所使用的环境变量。 ps f 用ASC...

会声会影X4模板:在浪漫星光下 震撼婚礼庆典 模板下载_詬現玳諾唁的博客-程序员宅基地

会声会影X4模板:在浪漫的星光下。根据AE模板改编,无使用第三方插件,为了会声会影软件能够便利套用,该模板未使用PS序列文字图片文件作为标题字幕素材,方便直接在会会里替换更改文字,如果使用PS软件或其它制作文字导入会会效果更佳下载地址:http://d.119g.com/f/8B1AFE86219A5D61.html

推荐文章

热门文章

相关标签