UnityShader基础(三)
- 引言:Shader基础内容由于内容较多分为多个部分记录,该部分主要为动态效果以及屏幕后处理相关
动态效果
如何制作动态效果
- 让画面动起来是因为每一帧对象的位置、角度、缩放、颜色等等信息的改变后重新渲染带来的
- 相当于就是间隔一定时间更新一些数据,从而带来了画面变化
- 那么想要利用Shader制作出动态效果,其实原理也是一样的
- 我们只需要
间隔一定时间改变Shader中的数据,从而改变渲染的结果,最终达到画面变化的目的
- 这样就能够带来动态感了
总结:
利用Shader制作动态效果的关键就是 —— 利用时间变化来改变数据,从而导致渲染结果改变,带来画面变化
Shader中的内置时间变量
时间是关键数据,Shader中提供了对应的内置时间变量
变量名 分量(x, y, z, w) 数学表达式 用途说明 典型应用场景 _Time
(t/20, t, 2t, 3t)
t = Time since level load
(场景加载后的总时间,单位:秒)提供不同频率的时间值,用于控制动画速度或周期性效果。 颜色渐变、缓慢波动、周期性运动(如旋转)。 _SinTime
(sin(t/8), sin(t/4), sin(t/2), sin(t))
t = Time since level load
,分量对应不同频率的正弦值。生成平滑的周期性波动效果(如呼吸灯、波浪)。 水的波纹、动态光影、呼吸效果。 _CosTime
(cos(t/8), cos(t/4), cos(t/2), cos(t))
t = Time since level load
,分量对应不同频率的余弦值。类似 _SinTime
,但相位偏移90度,适合需要对称周期性变化的场景。摆动动画、对称波形、能量场效果。 unity_DeltaTime
(dt, 1/dt, smoothDt, 1/smoothDt)
dt = Time since last frame
(上一帧到当前帧的时间间隔,单位:秒)用于帧率无关的动画计算,或需要精确控制时间步长的场景。 物理模拟、平滑运动、帧率补偿。
Shader中经常会改变的数据
效果类型 时间控制应用 示例效果 颜色 通过 _Time
变量或三角函数(如sin
)动态调整材质颜色或渐变参数颜色渐变、周期性闪烁 位置 利用时间变量驱动顶点偏移(如 vertex.xyz + sin(_Time)*offset
)水面波动、旗帜飘动 纹理坐标 通过时间改变UV坐标(如 uv + _Time.y*speed
)或序列帧索引计算水流动画、云彩流动、序列帧播放 法线 基于时间生成动态法线扰动(如 normal + sin(_Time)*bumpScale
)风吹草动、动态波纹 缩放 使用时间函数(如 1 + sin(_Time)*scaleFactor
)控制物体缩放脉动效果、心跳跳动 透明度 通过时间控制Alpha值(如 lerp(0, 1, sin(_Time))
)或透明度动画曲线淡入淡出、周期性透明闪烁
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 游戏开发笔记!
评论