기본 수학 함수와 벡터 연산
산술·삼각·클램프 함수와 벡터 생성·분해·정규화·내적·외적을 조합해 위치와 속도 변화를 계산합니다.
나이아가라 스크립트의 기본 개념을 확인했으므로, 이번 절에서는 파티클 움직임과 속성 변화를 계산하는 기본 수학 함수와 벡터 연산을 다룹니다.
위치, 속도, 색상, 크기 같은 속성은 숫자로 표현되며, 이 값을 연산해 파티클 변화를 제어합니다.
나이아가라의 스크립트 에디터는 다양한 수학 노드와 벡터 연산 노드를 제공하여, 코딩 없이도 복잡한 계산을 시각적으로 구현할 수 있게 해줍니다.
기본 수학 함수 (Basic Math Functions)
단일 숫자(Float, Int) 값에 적용되는 기본적인 수학 연산입니다.
덧셈, 뺄셈, 곱셈, 나눗셈 (Add, Subtract, Multiply, Divide)
가장 기본적인 사칙연산 노드입니다.
- 사용법: 두 개의 입력 핀을 받아 연산을 수행하고 결과를 출력합니다.
-
예시
Particles.Lifetime에Multiply노드를 사용하여 Particle Spawn에서 초기 수명을 한 번 두 배로 늘립니다. Update에서 현재 수명을 계속 곱하면 매 틱 커집니다.Particles.SpriteSize에Add노드를 사용하여 Particle Spawn에서 초기 크기를 일정량 늘립니다. 수명 중 크기 변화는 저장한 초기 크기나 기준값에서 계산합니다.
사인, 코사인, 탄젠트 (Sine, Cosine, Tangent)
주로 주기적인 움직임이나 파동 효과를 만들 때 사용되는 삼각 함수입니다.
- 사용법: 단일
Float입력(라디안 값)을 받아 해당 함수의 값을 출력합니다. -
예시
phase = 2π × 반복 횟수 × Particles.NormalizedAge를Sine에 넣고 진폭을 곱합니다. 이 변위를 저장한 기준 위치에 더하면 수명 동안 정해진 횟수로 흔들립니다. 매 틱 현재 위치에 같은 변위를 누적하는 계산과 구분합니다.- 불꽃이 위로 솟아오르면서 좌우로 흔들리는
Add Velocity효과를 만들 때.
절대값 (Abs)
숫자의 부호를 제거하고 0 이상의 값으로 만드는 함수입니다.
- 사용법: 단일
Float또는Vector입력을 받습니다. - 예시: 파티클의 속도 중 한 축이 음수가 될 때 (예: 아래로 떨어질 때),
Abs를 적용하여 해당 성분의 절댓값을 사용하고 싶을 때. 벡터의Abs는 성분별 연산이며 전체 속력은Length로 구합니다.
거듭제곱, 제곱근 (Power, Sqrt)
Power는 밑을 주어진 지수로 거듭제곱하고, Sqrt는 제곱근을 구합니다. 지수가 정수일 필요는 없습니다. 나눗셈의 분모 0, 음수의 실수 제곱근, 음수 밑의 비정수 지수처럼 유효하지 않은 입력은 계산 전에 처리합니다. 계산 뒤 Clamp만 붙여도 NaN이 해결되는 것은 아닙니다.
- 사용법:
Power는 두 개의Float입력을,Sqrt는 단일Float입력을 받습니다. -
예시
- 파티클의 밝기를 수명에 따라 비선형적으로 변화시킬 때
Power를 사용할 수 있습니다. - 파티클의 밀도를 계산하는 복잡한 수식에서
Sqrt가 사용될 수 있습니다.
- 파티클의 밝기를 수명에 따라 비선형적으로 변화시킬 때
최소, 최대 (Min, Max)
두 개의 입력 중 더 작거나 큰 값을 선택합니다.
- 사용법: 두 개의
Float입력을 받아 비교합니다. - 예시: 속력
Length(Velocity)에Min으로 상한을 적용한 뒤 안전하게 구한 단위 방향을 곱하면 속도를 제한할 수 있습니다. 벡터의 성분별Min은 속력 제한과 다릅니다.
클램프 (Clamp)
값을 특정 최소값과 최대값 사이에 강제로 유지시킵니다.
- 사용법:
Value,Min,Max세 개의 입력을 받습니다. - 예시: 파티클의 알파나 정규화 제어값을 0~1로 제한할 때, 또는 파티클의 크기가 너무 커지거나 작아지지 않도록 할 때 유용합니다. HDR 발광 색상은 1을 넘을 수 있으므로 목적 없이 잘라내지 않습니다.
벡터 연산 (Vector Operations)
속도는 3성분 Vector, 스프라이트 크기는 2성분 Vector2, 색상은 RGBA Color로 다룹니다. Particles.Position은 Position 타입이며, 방향/변위와 좌표 공간을 구분해야 합니다.
벡터 연산은 이러한 벡터 값들을 다루는 수학입니다.
벡터 연산은 목적에 맞는 노드 조합을 고르는 순간 활용도가 크게 올라갑니다.
벡터 생성 (Make Vector, Make Vector2, Make Vector4)
개별 Float 값을 합쳐 Vector를 생성합니다.
- 사용법: X, Y, Z (또는 W) 입력 핀에
Float값을 연결하여 하나의Vector값을 만듭니다. - 예시:
Add Velocity모듈에서 파티클에 원하는 방향과 크기의 속도를 부여하기 위해 X, Y, Z 값을 각각 조절할 때 사용합니다.
벡터 분해 (Split Vector, Split Vector2, Split Vector4)
Vector를 개별 Float 값으로 분해합니다.
- 사용법: 하나의
Vector입력을 받아 X, Y, Z (또는 W) 출력 핀으로 분리합니다. - 예시: 파티클의
Position에서 X 값만 가져와 특정 계산에 사용하고 싶을 때.
벡터 덧셈, 뺄셈, 곱셈, 나눗셈 (Vector Add, Subtract, Multiply, Divide)
벡터와 벡터, 또는 벡터와 Float 간의 사칙연산입니다.
각 컴포넌트(X, Y, Z)별로 연산이 수행됩니다.
-
사용법
- 벡터 + 벡터: 두 벡터의 각 컴포넌트끼리 더합니다. (예:
Particles.Position+Particles.Velocity*Engine.DeltaTime으로 다음 시뮬레이션 틱 위치 계산.Solve Forces and Velocity가 이미 이동을 적분한다면 같은 이동을 중복 적용하지 않습니다) - 벡터 * Float: 벡터의 모든 컴포넌트에
Float값을 곱합니다. (예: 파티클의Velocity에0.5를 곱하여 속도를 절반으로 줄일 때)
- 벡터 + 벡터: 두 벡터의 각 컴포넌트끼리 더합니다. (예:
-
예시
- 가속도에
Engine.DeltaTime을 곱한 속도 변화량을Particles.Velocity에 더할 때. 힘은 질량으로 나누어 가속도로 바꾸어야 합니다. 기본Gravity Force와 solver를 사용할 때는 그 적분 경로를 따릅니다. - 파티클의
Color벡터에Float값을 곱하여 색상의 밝기를 조절할 때.
- 가속도에
벡터 길이 (Vector Length)
벡터의 크기(길이)를 Float 값으로 출력합니다.
- 사용법: 단일
Vector입력을 받습니다. - 예시: 파티클의 속도 크기가 특정 값 이상일 때만 추가 효과를 발생시키고 싶을 때.
정규화 (Normalize)
벡터의 방향은 유지하고 길이를 1.0으로 만듭니다.
방향 벡터를 얻을 때 사용됩니다. 길이가 0이거나 매우 작은 입력은 안전한 정규화 또는 별도 기본 방향으로 처리합니다.
- 사용법: 단일
Vector입력을 받습니다. - 예시: 특정 방향으로 힘을 일정하게 적용하고 싶을 때, 방향 벡터를
Normalize하여 사용합니다.
내적 (Dot Product)
두 벡터의 내적을 계산하여 Float 값을 출력합니다.
단위 벡터끼리의 내적은 두 방향 사이 각도의 코사인입니다. 정규화하지 않았다면 두 벡터의 길이도 결과에 곱해집니다.
- 사용법: 두 개의
Vector입력을 받습니다. - 예시: 파티클의 이동 방향과 특정 빛의 방향이 일치할 때만 밝아지도록 할 때.
외적 (Cross Product)
두 벡터에 수직인 벡터를 출력합니다. 평행하거나 한쪽이 0이면 결과도 0이고, 입력 순서를 바꾸면 부호가 뒤집힙니다. 결과가 자동으로 단위 벡터가 되는 것은 아닙니다.
3D 공간에서 회전 축 등을 계산할 때 사용됩니다.
- 사용법: 두 개의
Vector입력을 받습니다. - 예시: 특정 표면의 노멀 방향을 기반으로 파티클의 회전 축을 결정할 때.
스크립팅과 수학의 결합
이러한 수학 함수와 벡터 연산 노드들을 조합함으로써 여러분은 파티클의 동작을 매우 정교하게 제어할 수 있습니다.
- 파동 효과:
Sine노드를 사용하여 파티클의 위치나 속도에 주기적인 변화를 줍니다. - 랜덤성 제어:
Random노드와Multiply,Add등을 조합하여 파티클의 속성에 다양한 무작위성을 부여하면서도 원하는 범위 내에서 제어합니다. - 동적인 크기/색상 변화:
Particles.NormalizedAge와Curve노드, 그리고Multiply노드를 사용하여 파티클의 크기와 색상을 수명에 따라 부드럽게 변화시킵니다. - 물리적 상호작용:
Add Velocity,Gravity Force등의 모듈과 함께 벡터 연산을 사용하여 파티클이 실제 물리 법칙을 따르도록 시뮬레이션합니다.
나이아가라 스크립트 에디터에서는 작은 노드 조합부터 실행 결과를 확인하며 계산 흐름을 검증해야 합니다.