Unity shader实现顶点动画波动效果

本文实例为大家分享了Unity shader实现顶点动画的具体代码,供大家参考,具体内容如下

需要了解的背景知识:

波动实例:y=  Asin(ωx+φ)

φ:决定波形与X轴位置关系或横向移动距离(左加右减)

ω:决定周期(最小正周期T=2Π/|ω|)

A:决定峰值(纵向拉伸压缩的倍数)

顶点着色器的主要计算:

1.顶点位置

2.矩阵转换

片段着色器

1.纹理寻址

2.灯光作用

_Time表示时间周期 float4(t/20,  t,  t*2,  t*3)

Shader "Custom/Wave" {
 Properties {

 _MainTex("Texture", 2D) = "white"{} //纹理
 _Arange("Amplitute", float) = 1
 _Frequency("Frequency", float) = 2//波动频率
 _Speed("Speed",float) = 0.5//控制纹理移动的速度

 }

 SubShader
 {
 Pass
 {
 CGPROGRAM
 #pragma vertex vert
 #pragma fragment frag
 #include "UnityCG.cginc"

 struct appdata
 {
 float4 vertex:POSITION;
 float2 uv:TEXCOORD0;
 };

 struct v2f
 {
 float2 uv:TEXCOORD0;
 float4 vertex:SV_POSITION;
 };

 float _Frequency;
 float _Arange;
 float _Speed;

 v2f vert(appdata v)
 {
 v2f o;

 float timer = _Time.y *_Speed;
 //变化之前做一个波动 y= Asin(ωx+φ)
 float waver = _Arange*sin(timer + v.vertex.x *_Frequency);
 v.vertex.y = v.vertex.y + waver;
 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
 o.uv = v.uv;;
 return o;
 }

 sampler2D _MainTex;

 fixed4 frag(v2f i) :SV_Target
 {
 fixed4 col = tex2D(_MainTex, i.uv);
 return col;
 } 

 ENDCG
 }
 }

 FallBack "Diffuse"
}

运行效果图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • UnityShader3实现波浪效果

    本文实例为大家分享了UnityShader3实现波浪效果展示的具体代码,供大家参考,具体内容如下 参考链接: [OpenGL]Shader实例分析(一)-Wave 效果图: 1.首先,实现格子背景图 Shader "Custom/Curve" { Properties { _BackgroundColor ("BackgroundColor", Color) = (1, 1, 1, 1) _BackgroundColor2 ("BackgroundColo

  • Unity shader实现顶点动画波动效果

    本文实例为大家分享了Unity shader实现顶点动画的具体代码,供大家参考,具体内容如下 需要了解的背景知识: 波动实例:y=  Asin(ωx+φ) φ:决定波形与X轴位置关系或横向移动距离(左加右减) ω:决定周期(最小正周期T=2Π/|ω|) A:决定峰值(纵向拉伸压缩的倍数) 顶点着色器的主要计算: 1.顶点位置 2.矩阵转换 片段着色器 1.纹理寻址 2.灯光作用 _Time表示时间周期 float4(t/20,  t,  t*2,  t*3) Shader "Custom/Wav

  • Unity Shader实现序列帧动画效果

    本文实例为大家分享了Unity Shader序列帧动画效果的具体代码,供大家参考,具体内容如下   实现原理 主要的思想是设置显示UV纹理的大小,并逐帧修改图片的UV坐标.(可分为以下四步) 1.我们首先把 _Time.y 和速度属性_Speed 相乘来得到模拟的时间,并使用CG 的floor 函数对结果值取整来得到整数时间time 2.然后,我们使用time 除以_HorizontalAmount 的结果值的商来作为当前对应的行索引,除法结果的余数则是列索引. 3.接下来,我们需要使用行列索引

  • Unity Shader实现3D翻页效果

    本文实例为大家分享了Unity Shader实现3D翻页效果的具体代码,供大家参考,具体内容如下 参考文章:UnityShader使用Plane实现翻书效果 效果图: 原理:Shader顶点动画 在顶点着色器进行对顶点Y值的偏移(使用了Sin函数模拟翻页时产生的弯曲),对顶点X值的偏移实现纸张在翻页时的收缩(一般是不用收缩),最后对顶点进行围绕Z轴旋转实现Plane翻页(Z轴是本例的旋转轴,请根据你具体情况修改,上面的两个偏移同理). Shader "Unlit/PaperTurnMilkSha

  • Unity shader实现自由放大缩小效果

    本文实例为大家分享了Unity shader实现自由放大缩小效果的具体代码,供大家参考,具体内容如下 代码: 以下实现的shader代码: Shader "Hidden/Wave" { Properties { _MainTex ("Texture", 2D) = "white" {} _WaveWidth("Wave Width",float) = 0.5 _CenterX("CenterX",float

  • Unity Shader实现新手引导遮罩镂空效果

    这两天实现了下新手引导需要的遮罩镂空shader效果,记录一下. 1.圆形镂空shader代码:  //计算片元世界坐标和目标中心位置的距离 float dis = distance(IN.worldPosition.xy, _Center.xy); //过滤掉距离小于(半径-过渡范围)的片元 clip(dis - (_Radius - _TransitionRange)); //优化if条件判断,如果距离小于半径则执行下一步,等于if(dis < _Radius) fixed tmp = st

  • Unity Shader实现2D水流效果

    水流的模拟主要运用了顶点变换和纹理动画的结合: 顶点变换中,利用正弦函数模拟河流的大致形态,例如波长,振幅等. 纹理动画中,将纹理坐标朝某一方向持续滚动以形成流动的效果. 脚本如下: Shader "MyUnlit/ScrollWater" { Properties { _MainTex ("Texture", 2D) = "white" {} _Color("Color Tint",color)=(1,1,1,1) //控制

  • Unity Shader实现翻书效果

    今天实现一个简单的翻书的效果,话不多说,先上一张效果图: 这里就随便用的一张纹理了,我们还是称为"翻木板"吧,哈哈. 实现过程: 其实这个效果实现起来还是挺简单的,大概思路其实就是 让所有顶点都绕Z轴旋转,并且通过正余弦使之带有一点弧度. 下面开始让我们一步一步的实现该效果. 首先打开Unity新建一个工程,场景,并且创建一个名为openBookEffect的Shader文件,删掉原本多余的代码. 第一步,我们先让它绕z轴旋转起来 这里就要用到一个旋转矩阵了,让顶点左乘该矩阵,就能得到

  • Unity Shader实现描边OutLine效果

    本文实例为大家分享了Unity Shader实现描边OutLine效果的具体代码,供大家参考,具体内容如下 Shader实现描边流程大致为:对模型进行2遍(2个pass)绘制,第一遍(描边pass)在vertex shader中对模型沿顶点法线方向放大,fragment shader设置输出颜色为描边颜色:第二遍正常绘制模型,除被放大的部分外,其余被覆盖,这样就有了描边的效果. 实现代码如下: Shader "Custom/OutlineShader" { Properties { _

  • Unity shader实现移动端模拟深度水效果

    本文实例为大家分享了Unity shader实现移动端模拟深度水的具体代码,供大家参考,具体内容如下 描述: 在网上看到很多效果很好的水,比如根据水的深度,颜色有深浅变化,能让水变得更真实,但是又会涉及到比较复杂的计算,在移动端上面还是有些吃力的. 最近研究了一下,想在移动端上面模拟这样的效果 : 1 水的深浅透明度变化 2 水的深浅颜色变化 3 水上的阴影模拟(大面积的水通过烘焙比较浪费烘焙图) 根据上面的3点,可以通过一张黑白图的rg通道来实现深浅以及阴影的模拟 效果如下 如图,浅色的偏绿,

  • Unity shader实现遮罩效果

    本文实例为大家分享了Unity shader实现遮罩效果的具体代码,供大家参考,具体内容如下 效果: shader代码: Shader "Custom/Mask" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {}//目标图片,即需要被遮罩的图片 _MaskLayer("Culling Mask",2D) = "white"{}//混合的图片,设置

随机推荐