icon
5장 : 기본 스크립팅과 수학

기본 수학 함수와 벡터 연산


나이아가라 스크립트의 기본 개념을 이해하셨다면, 이제 파티클에 실제로 생명력을 불어넣고 복잡한 움직임을 구현하는 핵심 도구인 기본 수학 함수와 벡터 연산에 대해 알아볼 차례입니다. 수학은 파티클 시스템의 언어와 같습니다. 파티클의 위치, 속도, 색상, 크기 등 모든 속성은 결국 숫자로 표현되며, 이 숫자들을 수학적으로 연산함으로써 파티클의 변화를 제어할 수 있습니다.

나이아가라의 스크립트 에디터는 다양한 수학 노드와 벡터 연산 노드를 제공하여, 코딩 없이도 복잡한 계산을 시각적으로 구현할 수 있게 해줍니다.


기본 수학 함수 (Basic Math Functions)

단일 숫자(Float, Int) 값에 적용되는 기본적인 수학 연산입니다.

덧셈, 뺄셈, 곱셈, 나눗셈 (Add, Subtract, Multiply, Divide)

가장 기본적인 사칙연산 노드입니다.

  • 사용법: 두 개의 입력 핀을 받아 연산을 수행하고 결과를 출력합니다.
  • 예시
    • Particles.LifetimeMultiply 노드를 사용하여 파티클의 수명을 두 배로 늘립니다.
    • Particles.SpriteSizeAdd 노드를 사용하여 모든 파티클의 크기를 일정량 증가시킵니다.

사인, 코사인, 탄젠트 (Sine, Cosine, Tangent)

주로 주기적인 움직임이나 파동 효과를 만들 때 사용되는 삼각 함수입니다.

  • 사용법: 단일 Float 입력(라디안 값)을 받아 해당 함수의 값을 출력합니다.
  • 예시
    • Sine 노드에 Particles.NormalizedAge (정규화된 수명)를 곱하고, 그 결과를 파티클의 X 위치에 더하여 파티클이 좌우로 흔들리며 날아가게 합니다.
    • 불꽃이 위로 솟아오르면서 좌우로 흔들리는 Add Velocity 효과를 만들 때.

절대값 (Abs)

숫자의 부호를 제거하고 항상 양수로 만드는 함수입니다.

  • 사용법: 단일 Float 또는 Vector 입력을 받습니다.
  • 예시: 파티클의 속도 중 한 축이 음수가 될 때 (예: 아래로 떨어질 때), Abs를 적용하여 속도의 크기만 사용하고 싶을 때.

거듭제곱, 제곱근 (Power, Sqrt)

Power는 입력 값을 지정된 횟수만큼 곱하고, Sqrt는 입력 값의 제곱근을 계산합니다.

  • 사용법: Power는 두 개의 Float 입력을, Sqrt는 단일 Float 입력을 받습니다.
  • 예시
    • 파티클의 밝기를 수명에 따라 비선형적으로 변화시킬 때 Power를 사용할 수 있습니다.
    • 파티클의 밀도를 계산하는 복잡한 수식에서 Sqrt가 사용될 수 있습니다.

최소, 최대 (Min, Max)

두 개의 입력 중 더 작거나 큰 값을 선택합니다.

  • 사용법: 두 개의 Float 입력을 받아 비교합니다.
  • 예시: 파티클의 속도가 특정 값 이상으로 빨라지지 않도록 제한할 때 Min을 사용할 수 있습니다.

클램프 (Clamp)

값을 특정 최소값과 최대값 사이에 강제로 유지시킵니다.

  • 사용법: Value, Min, Max 세 개의 입력을 받습니다.
  • 예시: 파티클의 색상 값이 특정 범위(0~1)를 벗어나지 않도록 할 때, 또는 파티클의 크기가 너무 커지거나 작아지지 않도록 할 때 유용합니다.

벡터 연산 (Vector Operations)

위치, 속도, 색상 등은 2차원 또는 3차원 벡터(Vector) 로 표현됩니다. 벡터 연산은 이러한 벡터 값들을 다루는 수학입니다.

벡터 생성 (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 * System.DeltaTime으로 다음 프레임 위치 계산)
    • 벡터 * Float: 벡터의 모든 컴포넌트에 Float 값을 곱합니다. (예: 파티클의 Velocity0.5를 곱하여 속도를 절반으로 줄일 때)
  • 예시
    • Add Velocity 모듈에서 Particles.VelocityGravity Force의 힘을 더하여 최종 속도를 계산할 때.
    • 파티클의 Color 벡터에 Float 값을 곱하여 색상의 밝기를 조절할 때.

벡터 길이 (Vector Length)

벡터의 크기(길이)를 Float 값으로 출력합니다.

  • 사용법: 단일 Vector 입력을 받습니다.
  • 예시: 파티클의 속도 크기가 특정 값 이상일 때만 추가 효과를 발생시키고 싶을 때.

정규화 (Normalize)

벡터의 방향은 유지하고 길이를 1.0으로 만듭니다. 방향 벡터를 얻을 때 사용됩니다.

  • 사용법: 단일 Vector 입력을 받습니다.
  • 예시: 특정 방향으로 힘을 일정하게 적용하고 싶을 때, 방향 벡터를 Normalize하여 사용합니다.

내적 (Dot Product)

두 벡터의 내적을 계산하여 Float 값을 출력합니다. 두 벡터가 얼마나 같은 방향을 향하는지 나타냅니다.

  • 사용법: 두 개의 Vector 입력을 받습니다.
  • 예시: 파티클의 이동 방향과 특정 빛의 방향이 일치할 때만 밝아지도록 할 때.

외적 (Cross Product)

두 벡터에 수직인 새로운 벡터를 출력합니다. 3D 공간에서 회전 축 등을 계산할 때 사용됩니다.

  • 사용법: 두 개의 Vector 입력을 받습니다.
  • 예시: 특정 표면의 노멀 방향을 기반으로 파티클의 회전 축을 결정할 때.

스크립팅과 수학의 결합

이러한 수학 함수와 벡터 연산 노드들을 조합함으로써 여러분은 파티클의 동작을 매우 정교하게 제어할 수 있습니다.

  • 파동 효과: Sine 노드를 사용하여 파티클의 위치나 속도에 주기적인 변화를 줍니다.
  • 랜덤성 제어: Random 노드와 Multiply, Add 등을 조합하여 파티클의 속성에 다양한 무작위성을 부여하면서도 원하는 범위 내에서 제어합니다.
  • 동적인 크기/색상 변화: Particles.NormalizedAgeCurve 노드, 그리고 Multiply 노드를 사용하여 파티클의 크기와 색상을 수명에 따라 부드럽게 변화시킵니다.
  • 물리적 상호작용: Add Velocity, Gravity Force 등의 모듈과 함께 벡터 연산을 사용하여 파티클이 실제 물리 법칙을 따르도록 시뮬레이션합니다.

처음에는 복잡해 보일 수 있지만, 기본적인 노드들을 하나씩 연결해보면서 그 결과를 직접 눈으로 확인하는 것이 중요합니다. 나이아가라 스크립트 에디터는 여러분의 수학적 아이디어를 시각적인 파티클 효과로 구현하는 강력한 캔버스가 될 것입니다.