BACK TO HOME.DESIGN

Stylized Motion Design

背景:一个很小,但很急的任务

这是一个很小,却很典型的需求。

视频编辑准备增加“背景音效优化”功能,用户可以选择不同的声音风格。我们需要为几种风格设计对应的图案或图标,让人不用逐个试听,也能先对它们的差别有个大致感觉。

视频编辑界面中的音乐增强功能与四种声音风格入口
产品场景:用图案帮助用户预判不同的声音风格。

留给我们的时间只有一天,中间还夹着别的事。

按以往流程,交互要先梳理场景,视觉尝试静态方向,动效设计师再把动画做出来。效果放回界面后,如果尺寸不合适,或团队有了新想法,几个角色还得来回调整。

这次我们换了个做法:让 AI 把视觉尝试、动效实现和现场调整尽量串在一起。做完马上放进界面看,不合适就继续改。

拿到任务后,我先盯住三个问题:

  1. 几种声音风格能不能一眼区分。
  2. 图案缩进界面后,仍然要像一个明确、可点击的功能点,不能反过来抢走注意力。
  3. 动效要能稳定循环,后续也得好改。

思路:给抽象的声音找一套视觉语汇

我快速看了一圈声音类产品。比起具象图标,粒子或线条更适合表现声场的差别,也便于用代码实现。于是,我把“声音风格”拆成几个可以直接观察和调整的变量:

  • 形状:圆润还是有棱角,边界清不清楚
  • 节奏:平稳、轻快、悠长,还是有冲击力
  • 粒子 / 线条:大小、密度,以及聚拢和散开的关系
  • 幅度:克制、舒展,还是强烈
  • 延续性:瞬间跳动、平滑过渡,还是带有拖尾
  • 色彩:用冷暖拉开感受上的差别

这里最费脑子的,是把“温暖、透亮、均衡、保真”这些感受词,翻译成画面和代码都能理解的运动规则。比如“温暖”,我会先想到圆润的形状、缓慢的上下起伏,再配一组平稳舒缓的暖色粒子。

行动:试了三轮,才把路走顺

一开始,我在两个方案之间犹豫:直接生成视频,或者用代码做。

粒子和线条本来就是代码动效里常见的表现形式,我之前做 p5.js 音画交互时也接触过,很多细节都能单独调整。直接生成视频虽然快,但只要有一个地方传达不准,整段就可能要重来。最后我选了代码方案。做完这次尝试后,我也顺手整理了两种方式各自适合的场景,方便以后判断。

工具方式输入内容生成过程输出内容优势局限更适合的场景
即梦等视频生成工具文字描述、参考图、首尾帧黑盒生成,要等完整结果出来视频或 GIF擅长有机、复杂、有氛围感的运动修改成本高,很难精确控制局部和时间线概念视频、氛围背景、不规则运动、一次性展示
GPT + Codex文字、参考图、组件、运动规则和代码约束生成代码后持续修改,可以实时运行HTML、Canvas、SVG、WebGL 等可编辑效果可调参、可循环、可交互,也容易适配界面前期要把感受翻译成明确的规则产品界面动效、交互反馈、需要长期维护的动态组件

第一轮:先靠描述做 3D 粒子

我先把粒子的形态、运动方式、空间层次和整体氛围交给 AI,希望用一个有纵深感的 3D 粒子场来表现音乐律动。第一版很快就出来了。

单独看,它很抓眼。塞回真实界面,问题也马上冒了出来:

  • 空间层次太多,粒子也太密
  • 缩小以后看不出明确的视觉焦点
  • 动态范围太大,会干扰界面里的其他信息
  • 更像一张氛围背景,不像边界清楚的功能入口

这一轮让我意识到,动效成立与否,必须放到最终界面、真实尺寸和具体的交互角色里判断。它的任务不是证明“这里能动”,而是帮用户理解并点选这个功能。

第一轮:有纵深感的 3D 粒子场。
把第一版效果放回真实界面与实际尺寸中检查。

第二轮:借成熟组件,把范围收窄

为了少抽几次盲盒,我转去找成熟的动态组件,最后选了 React Bits 的 Strands 作为参考。

以 React Bits 的 Strands 作为明确的动态结构参考。

这次我不再只给一段抽象描述,而是先给 AI 一个明确的动态结构,再让它基于这个组件生成不同声音风格的变体。

结果确实稳了。我大致能预判画面的形态和基础运动逻辑,AI 对设计意图的误解也少了很多。

新问题同样很明显:Strands 的形态已经定得比较死,运动方式也单一,很难真正拉开四种声音风格的差别。成熟组件让我知道结果大概会长什么样,也同时框住了继续探索的空间。

所以,参考组件适合帮我定方向,却不能替我为每种声音重新设计运动规则。

第二轮放回界面后的动效效果。

第三轮:先定关键帧,再让代码动起来

第三轮,我把视觉定义和动态实现拆开,不再逼一个工具同时做好两件事。

我先收集与声音特征有关的意向图,整理成情绪板,再用 image-to-image 生成静态关键帧。这一步先解决几件事:

  • 粒子的基本形态
  • 画面的疏密关系
  • 主体在容器里的占比
  • 视觉重心和留白
  • 四种风格在静态画面里的差别

静态画面一确定,后面的判断轻松了很多。

均衡、悠长、低音宽广与清晰四种声音风格的静态粒子关键帧
用静态关键帧先确定四种声音风格的视觉差异。

把关键帧放进真实界面后,我先确认它像不像一个合适的功能入口。通过之后,问题就从开放的“它该长什么样”,缩小成更具体的“它该怎么动”。

接着,我用 Codex 把静态视觉还原成可以运行的粒子动效。第一版代码已经能动,但粒子的方向、律动频率和整体节奏都不太对。如果继续用“快一点”“柔和一点”“更有节奏”这类描述来回改,速度很慢,而且每次生成还可能同时动到好几个变量。

于是,我做了这次最有效的一步:

别再用 Prompt 抽盲盒,把真正影响结果的参数露出来。

我临时搭了一套调参面板,又加上时间线控制,把这些变量变成可以实时调整的参数:

  • 粒子速度
  • 运动振幅
  • 粒子大小和密度
  • 运动方向
  • 扩散和回落的时机
  • 拖尾长度
  • 缓动曲线
  • 循环周期

原来要来回描述几轮的细节,现在拖动参数就能立即验证。

把影响结果的变量暴露为可以实时调整的参数。

为了让循环和衔接稳下来,我又用 GSAP Skill 建立时间线和缓动关系,并结合 Emil 的动效 Skill,继续调整节奏、惯性和循环细节。

最后,方案变成了三个彼此独立的控制层:

  1. 静态关键帧决定视觉语言
  2. 代码系统决定运动规则
  3. 参数面板校准节奏

到这一步,AI 做的已经不是一次次替我出图,而是帮我搭好一个能反复试的工作环境。怎么调、最后选哪一版,还是由我来判断。

最终系统:静态关键帧、代码运动规则与参数面板协同工作。

结果

用这套方式,我们在半天内完成了 4 种声音风格的关键动效,并让它们真正适配产品界面。

真正省事的是,它们不是四段定死的视频,而是同一套系统里的四组参数:

  • 新增一种风格时,可以复用原来的粒子系统
  • 想让动效安静一点,直接降低振幅和速度
  • 要改变运动方向,不必重做整段视频
  • 比较多个版本时,可以快速保存不同的参数组合
  • 团队临时提出新想法,也能当场试给大家看

过去要在交互、视觉和动效之间来回传递的问题,现在我可以在同一个界面里试完。