Shader动画之UV动画与顶点动画
2017-12-18 20:40
281 查看
用Shader实现动画主要包括两种方式:
1.UV动画
主要用于 序列帧、模拟无限重复的背景
让模型顶点对应的uv随时间变化,使其对应纹理像素不断随时间变化
但是无法达到让物体“变形”的效果
例如:
2.顶点动画
原理和uv动画有相同的地方,但是顶点动画
可以让物体动起来的同时,达到变形的效果
其主要原理是在 顶点着色器中对模型的顶点进行偏移,再将偏移后的顶点位置输出到片元着色器中。
用正弦函数,以时间为变化量,输出对应的 x方向偏移,即可模拟简单的水流效果
y = Asin(频率 * t + w)
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; }
相关文章推荐
- uv切换动画实现-shader
- Unity shader 七 能在Ugui上面使用的顶点动画Shader
- UnityShader入门精要学习笔记(十七):顶点动画
- UnityShader顶点动画实现Mage-Fiers漂移效果
- Unity Shader 学习笔记(九) UV动画Shader实例
- UnityShader入门精要学习笔记(十七):顶点动画
- Cg入门23: Fragment shader – UV动画(序列帧)
- Unity Shaders and Effects Cookbook (7-2) Surface Shader 中实现 顶点动画
- Cg入门24: Fragment shader – UV动画(波纹)
- 【Shader】顶点动画
- UnityShader实例06:UV动画
- shader uv动画
- UV旋转动画Shader
- Cg入门25: Fragment shader – UV动画(模糊)
- 美术同学最近自己找了个shader用来做动态的草和旗,结果出了一些问题(顶点动画shader)
- Unity Shader 学习笔记(十三)表面着色器的顶点动画
- Unity Shader UV动画(序列帧动画)
- Cg入门23: Fragment shader – UV动画(序列帧)
- Fragment shader---UV动画3
- 关键帧实现的动画效果顶点着色器的开发(Shader特效1)