動態與 Easing:p5.js Coding Art 裡真正的靈魂設計學

why6280
·
·
IPFS
·
動態與 Easing:p5.js Coding Art 裡真正的靈魂設計學


我認為在數位藝術的世界裡,漂亮的動畫不是靠更多線條、更多粒子,而是靠「動得好不好看」。而判斷「好不好看」的核心,不在動 得快或慢,而在於動 得有節奏、有呼吸、有情緒。這也是有一些 coding artist,會說提到:

Easing 是動畫的靈魂。

一、從靜態到動態:視覺藝術跨向「節奏」的關鍵轉折

當我們開始做動態視覺時,第一個直覺通常是:

x += 5;

物件會移動,但畫面彷彿只有「往右飄的 PowerPoint」。
沒有情感、沒有流動、沒有意圖。

然而加入 easing 後,動態馬上變得「像有生命」:

  • ease in:慢慢啟動,像生物甦醒

  • ease out:逐漸停下,像在呼吸或沉澱

  • ease in-out:柔滑的啟停,帶有冥想感或夢境感

  • bounce / elastic:具機械性、張力感

結論:Coding art 裡,動態是語言,而 easing 就是語氣。


二、掌握動態的第一步:讓時間成為動畫的主宰

在 p5.js 裡做出穩定、美觀的動態,第一個重要轉變是:

不要用 frame 驅動(加固定數字)
要用時間驅動(0 → 1 的 progress)

為什麼時間驅動比較好?

  • 無論 FPS 變化、運算負載多少,動畫節奏不會變

  • 可以確保「1.5 秒完成」、「延遲 0.2 秒開始」這種高階控制

  • easing 可以精準作用在 progress 值上

  • 多物件之間可共享同一條時間軸,做出群體節奏

時間軸的典型公式是:

progress = constrain((millis() - startTime) / duration, 0, 1);

取得線性的 progress 後,再丟進 easing 函式即可。


三、Easing:把「情緒」轉換成「數學曲線」的工具

為什麼 easing 可以塑造情緒?

因為線性動態只有一種語氣,而 easing 則提供整套情緒曲線:

動態風格對應的感覺ease in慢慢啟動、好奇、甦醒ease out靜下來、溫柔停頓、沉靜ease in-out呼吸、冥想、平穩的流動bounce / elastic張力、驚喜、機械感back(overshoot)像實體物件拉扯、反彈。

藝術家在選 easing,就像音樂人選擇音階與節奏。

做 coding art 時,通常會因此把 easing 寫成獨立模組來「替換、混合」。

四、分層使用 easing:為畫面注入生命感

在創作中,不同視覺層級使用不同 easing,可以形成強烈層次感。

1. 位置 Position(主體的節奏)

  • 線性 → 背景主體微飄

  • ease in-out → 主角的存在感

  • 加 noise → 更自然的漂浮(像雲、煙、植物)

這可以塑造「誰在主導視覺」。

2. Scale / Rotation(呼吸與生命感來源)

只加 scale easing,一個圓就有了「活著」的感覺。

  • scale 用慢的 ease in-out → 像心跳或潮汐

  • rotation 用線性 → 穩定的底層節奏

  • rotation + easing → 陡峭或柔滑的扭動

3. 顏色與透明度(情緒轉場)

色彩本身也可以做 easing:

  • lerpColor() + ease out → 柔和淡出

  • lerpColor() + ease in → 快速亮起

  • 多段 easing → 清晨 → 白天 → 黃昏 → 夜晚 的色彩循環

這在 generative art 作品裡非常常見。


五、Coding art 創作中常用的動態套路

1. Class-based 動態物件管理

每個物件持有:

  • startTime

  • duration

  • easingType

  • from / to 參數(位置、大小、顏色)

這種架構能同時管理十幾、上百個物件,各自使用不同節奏。

2. Easing + Noise → 自然界動態感

自然世界從不完全依循數學曲線:

base = lerp(..., ease(t))
noiseOffset = map(noise(t + seed), -amp, amp)
result = base + noiseOffset

用在:

  • 星星微微閃爍

  • 草地晃動

  • 雲層漂移

  • 粒子群舞

3. 多段式 Easing:讓動態有片段與敘事

把 progress 分段處理:

  • 0–30%:ease in(啟動)

  • 30–80%:linear(主運動)

  • 80–100%:ease out(收尾)

這種方式很像編舞:
不是一條 curve,而是一段一段的動作語句。


4. 用 Easing 扭曲時間(Temporal Distortion)

使用 easing 的核心秘密是:

easing 不只改「數值」,更能改「時間本身」。

你可以把 easing 作用在:

  • Perlin noise 的時間軸

  • 色彩循環時間

  • 物件生成頻率

  • 群體動作的 phase

整個畫面會像「同呼吸」般動起來。


六、如何以藝術創作的方式選擇 easing?

1. 先決定「作品的情緒」

2. 用 easing 來「作曲」

讓畫面不同層級按照不同節奏動:

  • 背景:線性/平緩噪聲

  • 主體:主旋律式的 ease in-out

  • 點綴:跳躍式 bounce / elastic

3. 做一個「Easing Playground」

許多 coding artist 都會做一個檔:

  • 同一個形狀

  • 換 easing

  • 換 duration

  • 比較情緒差異

這能快速找到畫面最適合的節奏。


動態本身是視覺藝術的語法,而 easing 是語氣與情緒。
只有線性移動,是「句子」。但加入 easing,畫面才會開始「說話」。

以上的分享是我自己嘗試然後跟AI 討論實作技巧的部分。希望大家也能做出一些自己喜歡的作品~~

CC BY-NC-ND 4.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!