读书笔记10《Unity Shader入门精要》
第 11 章 让画面动起来
Unity Shader 中的内置变量
| 名称 | 类型 | 描述 |
|---|---|---|
| _Time | float4 | t 是自场景加载开始所经过的时间,4 个分量的值分别是(t/20, t, 2t, 3t) |
| _SinTime | float4 | t 是时间的正弦值,4 个分量的值分别是(t/8, t/4, t/2, t) |
| _CosTime | float4 | t 是时间的余弦值,4 个分量的值分别是(t/8, t/4, t/2, t) |
| unity_DeltaTime | float4 | dt 是时间增量,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),法线随视角变化;而模拟粒子效果时,我们希望法线的方向是固定的,指向上的方向可以变化。
以模拟粒子效果的广告牌为例:
这样可以得到用于旋转的 3 个正交基 。
实践
在 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 进行许可。
评论