做动画用的着色器效果,放在时间轴上

现成的效果做不出你要的东西时,就把它写成代码:逐像素上色的着色器⁠ (外部网站,在新标签页打开)、元素逐帧接着上一帧运动的模拟,或用 WebGPU⁠ (外部网站,在新标签页打开) 画出整个图层的程序。它的设置是普通属性,在时间轴上打关键帧;预览什么样,导出就什么样。

打开编辑器阅读使用文档在浏览器里免费使用,无需账户。

一个画面程序,实时画出

下面的水面是此刻在你浏览器里运行的画面程序,所在的沙箱和编辑器的画面程序效果用的是同一个。它和作品集里的其他几件一样,是为本站手写的。

每一帧都在你的显卡上边看边画;设备太慢时停在一张静帧上。 它是怎样画的 · 作品集里的全部作品

三种程序

  • 着色器:WGSL⁠ (外部网站,在新标签页打开) 程序,对图层这一帧的每个像素各运行一次,用来做图案、调色、扭曲和形状。它能读取图层画面、设置、时间和帧号。
  • 模拟:WGSL 程序,处理一组由显卡逐帧记住状态的元素(例如位置和速度),用来做粒子、布料、波纹和拖尾。你写元素怎样开始、怎样前进、怎样画出,其余由编辑器负责。
  • 画面程序:用 WebGPU 画出整个图层的 JavaScript⁠ (外部网站,在新标签页打开) 模块,需要时可以分多趟,用来做前两种做不出的东西。它在另一个源上的沙箱里运行,碰不到编辑器、你的项目和网络。

设置和任何属性一样打关键帧

程序声明的每个设置——带滑块范围的数值、角度、颜色、图层上的点、开关或选项——都会成为效果在效果控件里的属性。可以拖动它,打关键帧⁠ (在新标签页打开)并在图表编辑器⁠ (在新标签页打开)里调曲线,或用表达式⁠ (在新标签页打开)驱动。程序每一帧都读取它的值。

纯色图层上着色器效果的效果控件:程序摘要、编辑程序按钮和三个设置。
  1. 程序有几行、几个设置。
  2. 重新打开程序。
  3. 程序声明的一个设置。
  4. 给这个设置打关键帧,和别的属性一样。

编写或粘贴程序

  1. 选中图层,添加效果:在效果和预设里。

  2. 打开程序:在效果控件里点编辑程序。

  3. 编写或粘贴源码到源码(WGSL),并在参数(JSON)里列出它读取的设置。

  4. 应用。程序先在你的电脑上检查、编译并试跑;只有通过的程序才会写进项目,算一步,可以撤销。被拒时,对话框会说明原因,能定位时给出你自己源码里的行号。

着色器程序对话框:一段在图层上画出移动线条的程序,以及它的三个参数。
  1. 程序的源码。
  2. 它读取的设置,一行一个。
  3. 检查并试跑程序,然后应用。

预览什么样,导出就什么样

  • 查看器和导出运行同一段程序,在同一台电脑上得到相同的帧;直接跳到某一帧和播放到那一帧结果一样。
  • 程序没有时钟,也不用随机数:时间来自帧号,随机来自标准库的噪声,所以循环可以正好结束在开始的地方。
  • 效果可以和关键帧、蒙版、表达式及其他效果叠用,并像任何合成一样导出⁠ (在新标签页打开)为视频、GIF 或图像序列。
  • 渲染时出错的程序会在问题里报告。

或者说给 Agent 听

把效果描述给 Agent⁠ (在新标签页打开),三种程序它都能写。它在你的电脑上试跑每一版、看画出来的帧并修改程序,然后作为草稿⁠ (在新标签页打开)交给你审核。由 Agent 写程序属于 Agent 订阅,订阅即将开放;自己写是免费的。

常见问题

免费吗?
免费。编写、粘贴程序,给设置打关键帧并导出,都在浏览器里免费完成,无需账户。只有让 Agent 写程序才用到 Agent 订阅,订阅即将开放。
用什么语言写?
着色器与模拟效果用 WebGPU 的着色语言 WGSL;画面程序是用 WebGPU 绘图的 JavaScript 模块。GLSL 着色器需要先改写成 WGSL。
哪些浏览器能运行?
支持 WebGPU 的浏览器,例如电脑上较新的 Chrome 或 Edge。没有 WebGPU 的地方,程序画不出来。
能做循环播放的生成式艺术吗?
能。程序只被告知帧号和时间,没有自己的时钟或随机种子,所以可以正好结束在开始的地方,作品集里的每一件都是这样。

接着看