icon안동민 개발노트

동적 매개변수 시스템의 기초


 나이아가라의 동적 매개변수 시스템은 파티클 효과를 실시간으로 제어하고 조정할 수 있게 해주는 강력한 기능입니다.

 이 시스템을 통해 개발자는 유연하고 반응적인 파티클 효과를 만들 수 있으며, 게임플레이 요소와 파티클 시스템을 긴밀하게 연결할 수 있습니다.

동적 매개변수의 개념과 목적

 동적 매개변수는 파티클 시스템의 속성을 런타임에 변경할 수 있게 해주는 변수입니다.

 주요 목적은 다음과 같습니다.

  1. 실시간 파티클 제어
  2. 외부 시스템과의 연동
  3. 재사용 가능한 파티클 시스템 설계
  4. 성능 최적화

동적 매개변수 생성 및 설정 방법

  1. 나이아가라 에디터에서 파티클 시스템 열기
  2. 'Parameters' 패널에서 '+ Add Parameter' 클릭
  3. 매개변수 유형 선택 (예 : Float, Vector, Color)
  4. 매개변수 이름 지정 및 기본값 설정

 예시

Parameter Name: WindStrength
Type: Float
Default Value: 10.0

매개변수 유형과 특성

  1. 스칼라 (Scalar)
  • 유형 : Float, Int
  • 용도 : 단일 값 제어 (예 : 강도, 수량)
  • 예시
float SpawnRate = Parameters.SpawnRate;
  1. 벡터 (Vector)
  • 유형 : Vector2, Vector3, Vector4
  • 용도 : 위치, 방향, 속도 등 표현
  • 예시
float3 WindDirection = Parameters.WindDirection;
  1. 컬러 (Color)
  • 유형 : Linear Color
  • 용도 : 파티클 색상 제어
  • 예시
float4 ParticleColor = Parameters.BaseColor;
  1. 불리언 (Boolean)
  • 유형 : Bool
  • 용도 : 조건부 효과 활성화/비활성화
  • 예시
bool EnableGravity = Parameters.UseGravity;
  1. 커브 (Curve)
  • 유형 : Curve Float, Curve Vector
  • 용도 : 시간에 따른 값 변화 정의
  • 예시
float Size = SampleCurve(Parameters.SizeCurve, NormalizedAge);

동적 매개변수를 통한 실시간 파티클 제어

  1. 모듈에서 동적 매개변수 사용
void UpdateParticle(inout float3 Position)
{
      float3 WindForce = Parameters.WindDirection * Parameters.WindStrength;
      Position += WindForce * DeltaTime;
}
  1. 스택에서 동적 입력 사용
  • 'Add Dynamic Input' 모듈 추가
  • 입력 소스로 동적 매개변수 선택

블루프린트 및 C++ 연동

  1. 블루프린트에서 동적 매개변수 제어
Set Niagara Variable
System: Particle System Component
Parameter Name: WindStrength
Value: 20.0
  1. C++에서 동적 매개변수 제어
UNiagaraComponent* NiagaraSystem = GetComponent<UNiagaraComponent>();
NiagaraSystem->SetFloatParameter(FName("WindStrength"), 20.0f);

효과적인 동적 매개변수 활용 전략

  1. 모듈화된 설계
  • 공통 매개변수를 상위 레벨에서 정의
  • 특정 효과에 대한 매개변수는 하위 모듈에서 정의
  1. 명명 규칙 수립
  • 일관된 명명 규칙으로 매개변수 관리 용이성 증대
  • 예 : "Category_ParameterName"
  1. 기본값 설정
  • 모든 매개변수에 적절한 기본값 지정
  • 극단적인 값 피하기
  1. 범위 제한
  • 매개변수 값의 유효 범위 설정
  • 예 : 클램프 함수 사용
    float ClampedStrength = clamp(Parameters.Strength, 0.0, 100.0);
  1. 문서화
  • 각 매개변수의 용도와 영향 문서화
  • 팀 내 공유 및 유지보수 용이성 증대

재사용 가능한 파티클 시스템 설계

  1. 템플릿 시스템 생성
  • 기본 효과를 템플릿으로 설계
  • 동적 매개변수를 통해 커스터마이즈 가능하게 구성
  1. 매개변수 프리셋 활용
  • 다양한 효과 변형을 위한 매개변수 프리셋 생성
  • 빠른 효과 전환 및 테스트 가능
  1. 스케일러블 디자인
  • 성능과 품질을 조절할 수 있는 매개변수 포함
  • 예 : DetailLevel, ParticleCount

주의점 및 최적화 고려사항

  1. 과도한 매개변수 피하기
  • 필요한 매개변수만 노출
  • 복잡성 증가와 성능 영향 고려
  1. 업데이트 빈도 최적화
  • 매 프레임 업데이트가 필요 없는 매개변수는 이벤트 기반으로 변경
  1. 데이터 타입 최적화
  • 적절한 데이터 타입 선택 (예 : float vs half)
  1. 캐싱 활용
  • 자주 사용되는 매개변수 값 캐싱
  1. 조건부 실행
  • 특정 조건에서만 사용되는 매개변수는 조건부로 평가

실제 적용 예시 : 날씨 효과 시스템

 날씨 변화에 따라 동적으로 조절되는 파티클 시스템

  1. 동적 매개변수 정의
Weather_Intensity: Float (0.0 to 1.0)
Weather_WindDirection: Vector3
Weather_Temperature: Float (-20.0 to 40.0)
  1. 파티클 업데이트 로직
void UpdateWeatherParticle(inout float3 Position, inout float Size)
{
      float Intensity = Parameters.Weather_Intensity;
      float3 WindDir = Parameters.Weather_WindDirection;
      float Temp = Parameters.Weather_Temperature;
      
      // 바람에 의한 이동
      Position += WindDir * Intensity * DeltaTime;
      
      // 온도에 따른 크기 변화
      Size *= lerp(0.8, 1.2, (Temp + 20) / 60);
      
      // 강도에 따른 생존 시간 조절
      Lifetime = lerp(1.0, 5.0, Intensity);
}
  1. 블루프린트에서 제어
Event Tick
-> Get Current Weather
-> Set Niagara Variable (Weather_Intensity)
-> Set Niagara Variable (Weather_WindDirection)
-> Set Niagara Variable (Weather_Temperature)

 이 예시에서는 동적 매개변수를 사용하여 날씨 조건에 따라 파티클의 동작, 크기, 수명 등을 실시간으로 조절할 수 있습니다. 이를 통해 단일 파티클 시스템으로 다양한 날씨 효과(비, 눈, 안개 등)를 표현할 수 있으며, 게임 내 환경 변화에 즉각적으로 반응하는 동적인 시각 효과를 만들 수 있습니다.

 동적 매개변수 시스템은 나이아가라의 강력한 기능 중 하나로, 이를 효과적으로 활용하면 유연하고 재사용 가능한 파티클 시스템을 구축할 수 있습니다. 게임의 다양한 상황과 요구사항에 맞춰 파티클 효과를 실시간으로 조정할 수 있어, 더욱 역동적이고 반응적인 게임 환경을 만들 수 있습니다.