更新於 2024/11/04閱讀時間約 6 分鐘

wiggle表達式介紹及應用教程

raw-image

wiggle是一個非常有用的表達式,用於給層的屬性添加隨機抖動效果。這個表達式特別適合於創建自然、隨機的運動,例如攝像機的手持效果、文字的抖動、或者任何需要不規則運動的場景。


基本語法

wiggle(frequency, amplitude)

  • frequency:每秒鐘的抖動次數。
  • amplitude:抖動的幅度。
  • 基礎應用

假設你想讓一個圖層的位置隨機抖動,每秒抖動 2 次,每次的幅度為 50 像素。你可以在位置屬性中添加以下表達式:wiggle(2, 50)

  • 應用於旋轉

如果你想讓一個圖層的旋轉隨機抖動,每秒抖動 3 次,每次的幅度為 10 度,可以在旋轉屬性中添加:wiggle(3, 10)

  • 應用於透明度

同樣,你可以讓一個圖層的透明度隨機變化,每秒變化 1 次,變化幅度為 20%:wiggle(1, 20)


----------------------------------------------------------------------------

*限制單一維度的抖動

如果你只想讓某一個維度抖動,例如只讓X軸位置抖動,可以使用以下表達式,假設你的圖層位置是 [x, y],並且你希望只讓 X 軸擺動,而 Y 軸保持不變

  1. 選擇圖層的 位置 屬性,並按住 Alt 鍵(Windows)或 Option 鍵(Mac),點擊位置的碼錶圖標來打開表達式編輯器。
  2. 在表達式編輯器中輸入以下代碼:




這樣,圖層的位置就會在 Z 軸上隨機擺動,而 X 和 Y 軸保持固定。

使用這些表達式,你可以輕鬆地控制 wiggle 只在一個維度上進行擺動,從而創建你所需要的動畫效果。


x = wiggle(3, 50)[0]; // 取得 wiggle 的 X 值 

y = transform.position[1]; // 保持 Y 值不變

[x, y]


*添加衰減

如果你想讓抖動隨時間衰減,可以使用一些複雜的表達式。例如,下面這個表達式會讓抖動在 5 秒內逐漸減弱:




pathPosition = thisComp.layer("Path Layer").position;
wiggleEffect = wiggle(2, 30);
[pathPosition[0] + wiggleEffect[0], pathPosition[1] + wiggleEffect[1]]



*與其他表達式結合

你也可以將 wiggle 與其他表達式結合使用。例如,你可以讓一個物體在沿著一個路徑運動的同時添加抖動效果:

使用 wiggle 表達式可以為你的動畫添加更多的隨機性和自然感,使你的作品更加生動和有趣。希望這些資訊對你有幫助!

freq = 3;
amp = 50;
decay = 1.0; // 衰減速率

t = time;
w = wiggle(freq, amp);
[w[0] * Math.exp(-decay * t), w[1] * Math.exp(-decay * t)]


*循環擺動

創建一個在指定時間內循環的 wiggle 效果。這個表達式應該實現的是:在指定的時間段內(secondsToLoop),生成一個平滑的隨機抖動,然後循環這個效果。


frequency = 2; // 每秒擺動次數
amplitude = 40; // 擺動的像素數量
secondsToLoop = 3; // 循環時間(以秒為單位)

t = time % secondsToLoop;
wiggle1 = wiggle(frequency, amplitude, 1, 0.5, t);
wiggle2 = wiggle(frequency, amplitude, 1, 0.5, t - secondsToLoop);
linear(t, 0, secondsToLoop, wiggle1, wiggle2)





frequency 和 amplitude 定義了 wiggle 的頻率和幅度。

  • secondsToLoop 定義了循環的時間段。
  • t = time % secondsToLoop 計算當前時間在循環周期內的位置,確保 t 在 0 和 secondsToLoop 之間。
  • wiggle1 和 wiggle2 創建了兩個 wiggle 效果,分別對應當前循環周期的開始和結束時的抖動。
  • linear(t, 0, secondsToLoop, wiggle1, wiggle2) 使用線性插值在 wiggle1 和 wiggle2 之間創建平滑過渡,實現循環效果。

這樣可以確保你的 wiggle 效果在每個 secondsToLoop 週期內循環,創造出平滑的循環動畫。


原始貼文:https://www.jan1lab.com/blog/jan1-ae-expressionwiggle

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.