读书笔记10《Unity Shader入门精要》

铁名_IronName Lv4

第 11 章 让画面动起来

Unity Shader 中的内置变量

名称类型描述
_Timefloat4t 是自场景加载开始所经过的时间,4 个分量的值分别是(t/20, t, 2t, 3t)
_SinTimefloat4t 是时间的正弦值,4 个分量的值分别是(t/8, t/4, t/2, t)
_CosTimefloat4t 是时间的余弦值,4 个分量的值分别是(t/8, t/4, t/2, t)
unity_DeltaTimefloat4dt 是时间增量,4 个分量的值分别是(dt,1/dt,smoothDt,1/smoothDt)

纹理动画

序列帧动画

实践

在 Unity 中编写可以播放序列帧动画的 Shader。

  • Edit Mode 下 Time 的更新不是实时的,所以序列帧动画看起来是卡顿的。
  • 在 Play Mode 下对材质的修改会被保留。

滚动的背景

实践

在 Unity 中编写滚动(双层)背景效果的 Shader。

顶点动画

流动的河流

用正弦函数等来模拟水流的波动效果

实践

在 Unity 中编写河流效果的 Shader。

  • Tags {"DisableBatching"="True"}关闭批处理。因为批处理会合并所有相关的模型,导致模型各自的模型空间丢失。在本例中,我们需要在物体的模型空间下对顶点的位置进行偏移。

广告牌

广告牌技术(Billboarding)根据视角方向来旋转一个被纹理着色的多边形,使这个多边形看起来好像总是面对着摄像机。广告牌技术用处很多,比如渲染烟雾、云朵、闪光效果等。
广告牌技术的本质是构建旋转矩阵(一个变换矩阵需要 3 个基向量),广告牌技术用的基向量是表面法线(normal)指向上的方向(up)、以及指向右的方向(right)。除此之外还需要一个锚点(anchor loaction),用来确定多边形在空间中的位置。
模拟草丛时,我们希望广告牌的指向上的方向永远是(0, 1, 0),法线随视角变化;而模拟粒子效果时,我们希望法线的方向是固定的,指向上的方向可以变化。

以模拟粒子效果的广告牌为例:

right=up×normalright=up\times normal up=normal×rightup'=normal\times right

这样可以得到用于旋转的 3 个正交基 up normal rightup'\text{ }normal\text{ }right

实践

在 Unity 中实现广告牌效果。

之所以使用 四边形(Quad),而不是屏幕(Plane),是因为我们的代码建立在一个竖直摆放的多边形的基础上,顶点结构在模型空间下是竖直排列的。这样才能使用 v.vertex 来计算得到正确的相对与中心的位置偏移量。

注意事项

  • 顶点动画需要关闭批处理。(关闭批处理会带来一定的性能下降)
  • 如果想要投射阴影,需要自定义 ShadowCaster Pass。
  • 标题: 读书笔记10《Unity Shader入门精要》
  • 作者: 铁名_IronName
  • 创建于 : 2026-01-26 09:50:06
  • 更新于 : 2026-02-15 15:20:58
  • 链接: https://blog.ironname.top/2026/01/26/读书笔记10《Unity-Shader入门精要》/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论