A 附录
内置函数速查表
点一个函数,左边画出它的样子。代码里的数字可以拖动或修改,看曲线怎样跟着变。
塑形
重复与取整
周期
指数
向量
采样与导数
smoothstep 柔和开关:在两个边界之间 S 形过渡注意:第一个边界必须小于第二个
看到什么 → 用什么
- 圆、圆环
length(p) − r;环:abs(d) − w - 拼合、相交、挖空
min · max · max(a, −b) - 液体、融在一起的形状
smin(a, b, k) - 花瓣、星形、放射线、螺旋
atan + cos(n · a) - 瓷砖、点阵、网格
fract(p · n),floor 取格子编号 - 每一格都不一样
hash(floor(p)) - 对称、万花筒
abs(p),对角度取 mod - 描边、霓虹、等高线
abs(d) · w / abs(d) · cos(d / w) - 任何缩放都干净的边
smoothstep + fwidth - 彩虹、渐变配色
0.5 + 0.5 · cos(2π(t + phase)) - 云、大理石、火焰
fbm,坐标扭曲 - 旋转、流动、闪烁
uTime 放进坐标或颜色 - 有明暗的立体感
max(dot(N, L), 0.0) - 不用三角形的 3D
raymarch + SDF
习题
每个像素运行一次拖动数字,或直接改代码
JS 这一侧
记函数先记形状:塑形、重复、周期、向量四组就覆盖了大部分 shader。真正要额外记的只有几个陷阱:mod 的负数、atan 的参数顺序、smoothstep 的边界顺序、pow 的负底数。
试一试
- 在 smoothstep 里把两个边界交换,曲线变成什么?
- 把 fract(x) 改成 fract(x * 3.0),数一数锯齿
- 对比 mod 和 fract 在负数一侧的样子
- 打开像素调试,把指针放到曲线上,读出 x 和 y