Skip to content

Wave Expression

사인/코사인 파동을 이용한 부드러운 웨이브 움직임을 만드는 익스프레션입니다.

Preview

사인/코사인을 이용한 규칙적인 주기 운동입니다. phase를 다르게 하면 물결 효과를 만들 수 있습니다.

※ 시각적 이해를 위한 애니메이션으로, 실제 결과와 다를 수 있습니다.

Code

기본 사인 웨이브 (Position Y에 적용)

javascript
// Wave Expression
// 부드러운 위아래 움직임

amp = 50;         // 진폭 (움직임 크기)
freq = 1;         // 주파수 (초당 사이클)
phase = 0;        // 위상 (시작점 오프셋)

value + Math.sin(time * freq * 2 * Math.PI + phase) * amp;

연속 웨이브 (여러 레이어)

javascript
// 복제된 레이어들이 물결처럼 움직임
amp = 30;
freq = 2;
delay = 0.2;  // 레이어 간 딜레이

phase = (index - 1) * delay * 2 * Math.PI;
value + Math.sin(time * freq * 2 * Math.PI + phase) * amp;

양방향 웨이브 (X, Y 동시)

javascript
// Position에 적용
ampX = 30;
ampY = 50;
freq = 1;

x = value[0] + Math.sin(time * freq * 2 * Math.PI) * ampX;
y = value[1] + Math.cos(time * freq * 2 * Math.PI) * ampY;

[x, y];

Parameters

파라미터설명
amp진폭 - 움직임의 크기
freq주파수 - 초당 왕복 횟수
phase위상 - 시작점 오프셋 (라디안)
delay레이어 간 시간 차이

Wave Types

사인 웨이브 (Sine)

javascript
// 부드러운 곡선
Math.sin(time * freq * 2 * Math.PI) * amp;

코사인 웨이브 (Cosine)

javascript
// 사인과 90도 위상차
Math.cos(time * freq * 2 * Math.PI) * amp;

삼각 웨이브 (Triangle)

javascript
// 직선적인 왕복
amp * (2 * Math.abs(2 * ((time * freq) % 1) - 1) - 1);

사각 웨이브 (Square)

javascript
// 급격한 전환
amp * Math.sign(Math.sin(time * freq * 2 * Math.PI));

Examples

천천히 떠다니기

※ 시각적 이해를 위한 애니메이션으로, 실제 결과와 다를 수 있습니다.

낮은 주파수로 천천히 위아래로 떠다닙니다.

javascript
amp = 20;
freq = 0.3;

value + Math.sin(time * freq * 2 * Math.PI) * amp;

빠른 진동

※ 시각적 이해를 위한 애니메이션으로, 실제 결과와 다를 수 있습니다.

높은 주파수로 빠르게 진동합니다.

javascript
amp = 10;
freq = 5;

value + Math.sin(time * freq * 2 * Math.PI) * amp;

점점 커지는 웨이브

※ 시각적 이해를 위한 애니메이션으로, 실제 결과와 다를 수 있습니다.

시간이 지남에 따라 진폭이 점점 커집니다.

javascript
baseAmp = 10;
growthRate = 20;
freq = 2;

amp = baseAmp + time * growthRate;
value + Math.sin(time * freq * 2 * Math.PI) * amp;

스케일 펄스 효과

※ 시각적 이해를 위한 애니메이션으로, 실제 결과와 다를 수 있습니다.

Scale에 적용하여 심장 박동처럼 맥동하는 효과입니다.

javascript
// Scale에 적용
baseScale = 100;
pulseAmp = 10;
freq = 2;

s = baseScale + Math.sin(time * freq * 2 * Math.PI) * pulseAmp;
[s, s];

Advanced

복합 웨이브

javascript
// 여러 주파수 합성
amp1 = 30;
freq1 = 1;
amp2 = 10;
freq2 = 3;

wave1 = Math.sin(time * freq1 * 2 * Math.PI) * amp1;
wave2 = Math.sin(time * freq2 * 2 * Math.PI) * amp2;

value + wave1 + wave2;

감쇠 웨이브

javascript
// 시간이 지나면서 줄어드는 웨이브
amp = 50;
freq = 3;
decay = 0.5;

currentAmp = amp * Math.exp(-time * decay);
value + Math.sin(time * freq * 2 * Math.PI) * currentAmp;

Tips

Wiggle과의 차이

  • Wiggle: 랜덤하고 예측 불가능한 움직임
  • Wave: 규칙적이고 예측 가능한 주기적 움직임

위상(phase) 활용

여러 레이어에 같은 웨이브를 적용하되 phase를 다르게 하면 물결이 퍼져나가는 효과를 만들 수 있습니다.

index 활용

(index - 1) * 0.2처럼 index로 phase를 계산하면 복제된 레이어들이 자동으로 시차를 가집니다.