时间脉冲
1 / 14
使用 sin(u_time) 创建亮度脉冲动画。
画面里的蓝色在不停地变亮、变暗,像心跳一样。实现它只需要一行:
下面拆解每个部分。
把 sin 的输出变成亮度
sin(u_time) 的输出在 -1.0 到 1.0 之间震荡。
* 0.5 + 0.5 是一个标准的换算公式,把 -1.0~1.0 压缩并平移到 0.0~1.0:
- 当
sin是 -1.0(最低)→-1.0 * 0.5 + 0.5 = 0.0(0%) - 当
sin是 0.0(中间)→0.0 * 0.5 + 0.5 = 0.5(50%) - 当
sin是 1.0(最高)→1.0 * 0.5 + 0.5 = 1.0(100%)
如何用 pulse 控制亮度
base 是目标颜色(蓝色偏亮)。乘以 (0.2 + 0.8 * pulse) 控制它的整体亮度:
pulse为 0 时,亮度因子是 0.2,颜色保留 20% — 不会完全黑掉pulse为 1 时,亮度因子是 1.0,颜色是 100%
这样脉冲会在「很暗」和「全亮」之间循环,而不是「全黑」到「全亮」。
试着改一改
| 改动 | 效果 |
|---|---|
sin(u_time * 3.0) * 0.5 + 0.5 | 心跳速度变快 |
sin(u_time * 0.5) * 0.5 + 0.5 | 非常缓慢的呼吸 |
0.0 + 1.0 * pulse(替换 0.2 + 0.8) | 从全黑跳到全亮,对比更强烈 |
把 base 改为 vec3(0.95, 0.15, 0.25) | 变成红色脉冲 |
练习
练习区的脉冲值固定为 1.0,画面常亮不变,用 sin(u_time) 生成正确的 pulse 值让它动起来。
答案解析
sin(u_time)产生 -1.0 到 1.0 的震荡* 0.5 + 0.5将范围换算为 0.0 到 1.0
起始代码里 pulse = 1.0 是一个常量,所以亮度因子始终是 0.2 + 0.8 * 1.0 = 1.0,画面不变。换成 sin(u_time) * 0.5 + 0.5 后,pulse 开始在 0 到 1 之间变化,亮度随之起伏。
试着把 0.2 + 0.8 * pulse 改成 0.4 + 0.6 * pulse,让暗部更亮,脉冲感更柔和。