GPU 스프라이트 이펙트 생성

이 문서에서는 GPU를 사용하여 수백만 개의 스프라이트 파티클을 스폰하는 방법에 대해 설명합니다.

Choose your operating system:

Windows

macOS

Linux

필요한 사전지식

이 글은 다음 주제에 대한 지식이 있는 분들을 대상으로 합니다. 계속하기 전 확인해 주세요.

이펙트 중에는 수억 만 개의 파티클을 스폰해야 하는 이펙트도 있습니다. 하지만 수많은 파티클을 생성하는 데 표준 CPU를 사용한다면 퍼포먼스에 문제가 발생할 수 있습니다. 이 가이드에서는 CPU 대신 GPU를 사용하여 시뮬레이션을 실행하는 스프라이트 파티클 이펙트를 생성하는 방법을 보여줍니다.

시스템 및 이미터 생성

캐스케이드와 달리 나이아가라 이미터와 시스템은 독립되어 있습니다. 현재 권장되는 워크플로는 기존 이미터 또는 이미터 템플릿에서 시스템을 생성하는 것입니다.

  1. 먼저 콘텐츠 브라우저에서 우클릭하여 나이아가라 시스템을 생성한 다음 나타나는 메뉴에서 FX > 나이아가라 시스템(FX > Niagara System) 을 선택합니다. 나이아가라 시스템 마법사가 표시됩니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  2. 선택한 이미터에서 새 시스템 생성(New system from selected emitters) 을 선택합니다. 그리고 나서 다음(Next) 을 클릭합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  3. 템플릿(Templates) 에서 심플 스프라이트 버스트(Simple Sprite Burst) 를 선택합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  4. 더하기 아이콘(Plus icon) ( + )을 클릭하여 시스템에 추가할 이미터 목록에 해당 이미터를 추가합니다. 그리고 나서 완료(Finish) 를 클릭합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  5. 새 시스템 이름을 GPUSprite 로 지정합니다. 나이아가라 에디터에서 더블클릭하여 엽니다.

새 시스템 이름 지정

  1. 새 시스템의 이미터 인스턴스 이름은 기본적으로 SimpleSpriteBurst 이지만 이름을 변경할 수 있습니다. 시스템 개요(System Overview) 에서 이미터 인스턴스 이름을 클릭하면 필드가 편집 가능하게 됩니다. 이미터 이름을 FX_GPUSprite 로 지정합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

    1. GPUSprite 시스템을 레벨로 드래그합니다.

    파티클 이펙트를 만들 때 레벨에 시스템을 드래그하는 작업은 항상 추천합니다. 이렇게 하면 모든 변경 및 편집 내역을 맥락과 함께 볼 수 있습니다. 시스템에서 변경한 내용은 레벨의 시스템 인스턴스에 자동으로 전파됩니다.

이미터 세팅 - 이미터 프로퍼티

먼저 이미터 프로퍼티(Emitter Properties) 에서 일부 설정을 변경해야 합니다. 여기가 CPU 시뮬레이션을 GPU 시뮬레이션으로 전환하는 지점입니다.

  1. 시스템 개요(System Overview) 에서 이미터 세팅(Emitter Settings) 을 클릭하여 선택(Selection) 패널에서 엽니다.

    전체 크기로 보려면 이미지를 클릭하세요.

  2. 이미터 프로퍼티(Emitter Properties) 를 펼칩니다. 시뮬레이션 타깃(Sim Target) 필드를 찾습니다. 여기가 언리얼 엔진에 시뮬레이션을 수행하는 데 GPU를 사용한다는 것을 알리는 지점입니다. 드롭다운을 클릭하고 GPUComputeSim 을 선택합니다.

    전체 크기로 보려면 이미지를 클릭하세요.

  3. Fixed Bounds(고정 바운드)가 설정되지 않음에 대한 경고를 트리거할 수도 있습니다. 고정 바운드(Fixed Bounds) 박스를 클릭합니다. 이렇게 하면 오류가 해결됩니다. 최소(Minimum) 최대(Maximum) 는 기본값으로 둡니다.

    파티클 시뮬레이션은 GPU에서 수행되므로 시스템은 이펙트의 크기를 읽을 수 없습니다. 이러한 이유로 고정 바운드 설정이 필요합니다. 이 단계에서 볼 수 있듯이 고정 바운드 설정은 이미터에서 할 수 있습니다. 또는 시스템 프로퍼티(System Properties) 항목에서 전체 시스템에 대해 고정 바운드를 설정할 수 있습니다.

이미터 업데이트 그룹 세팅

다음으로 이미터 업데이트(Emitter Update) 그룹에서 모듈을 편집합니다. 이미터에 적용되는 동작과 각 프레임을 업데이트하는 동작이 있습니다.

  1. 시스템 개요(System Overview) 에서 이미터 업데이트(Emitter Update) 를 클릭하여 선택(Selection) 패널에서 엽니다.

    전체 크기로 보려면 이미지를 클릭하세요.

  2. Emitter State(이미터 상태) 모듈을 확장합니다. 이 모듈은 이 이미터의 시간과 엔진 퀄리티를 제어합니다. Simple Sprite Burst(심플 스프라이트 버스트) 템플릿을 사용했기 때문에 라이프 사이클 모드(Life Cycle Mode) 셀프(Self) 로 설정됩니다. 일반적으로 이 특정 이미터의 이미터 라이프 사이클 로직의 완벽한 커스터마이징을 위해 사용되지만 이 이펙트에서는 필요가 없습니다. 드롭다운을 클릭하고 라이프 사이클 모드(Life Cycle Mode) 시스템(System) 으로 설정합니다. 이렇게 하면 시스템에서 라이프 사이클 세팅을 계산할 수 있으며, 이를 통해 기본적으로 퍼포먼스가 최적화됩니다. 기본적으로 시스템은 5초 간격으로 무한대로 루핑합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  3. 즉각적인 스폰 버스트(Spawn Burst Instantaneous) 모듈은 이미터가 스폰할 때 대형 파티클 버스트를 생성합니다. 이 모듈은 Simple Sprite Burst(심플 스프라이트 버스트) 템플릿에 포함되어 있습니다. 스폰 수(Spawn Count) 2500 으로 설정합니다. 스폰 시간(Spawn Time) 0 으로 설정되어 있기 때문에 스타트업 시 버스트가 즉시 발생합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  4. 이 이펙트 구현을 위해서는 이미터가 스폰될 때 파티클 버스트보다 더 많이 필요합니다. Spawn Rate(스폰 속도) 모듈은 이미터가 활성 상태에 있는 동안 지속적인 파티클 스트림을 생성합니다. 이미터 업데이트(Emitter Update) 에서 더하기 기호(Plus sign) 아이콘( + )을 클릭하고 스폰 > 스폰 속도(Spawning > Spawn Rate) 를 선택하여 스폰 속도(Spawn Rate) 모듈을 추가합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  5. 스폰 속도(Spawn Rate) 500 으로 설정합니다. 초당 500개의 속도로 파티클이 스폰하게 되어 초기 버스트 이후 지속적인 파티클 스트림이 제공됩니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

파티클 스폰 그룹 세팅

다음으로 파티클 스폰(Particle Spawn) 그룹에서 모듈을 편집합니다. 이 비헤이비어는 처음 스폰되었을 때 파티클에 적용됩니다.

  1. 시스템 개요(System Overview) 에서 파티클 스폰(Particle Spawn) 을 클릭하여 선택(Selection) 패널에서 엽니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

. Initialize Particle(파티클 초기화) 모듈을 확장합니다. 이 모듈은 연관된 파라미터 여러 개를 한 모듈에서 함께 수집하여 스택의 복잡도를 최소화합니다. 포인트 어트리뷰트(Point Attributes) 에서 수명(Lifetime) 파라미터를 찾습니다.

  1. Lifetime(수명) 파라미터는 파티클이 사라지기 전까지 표시되는 시간을 결정합니다. 이 이펙트를 구현하려면 상수 값이 있어야 이펙트의 전체 실행 시 파티클이 표시됩니다. 수명(Lifetime) 5 로 설정합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  2. 이 가이드의 다른 부분에서 스프라이트 크기를 랜덤화할 수 있습니다. 여기서는 스프라이트의 기본 크기를 설정합니다. 스프라이트 어트리뷰트(Sprite Attributes) 에서 스프라이트 크기(Sprite Size) 파라미터를 찾아 활성화합니다. 스프라이트 크기(Sprite Size) 필드에 다음 값을 설정합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

    크기 벡터

    X

    5

    Y

    5

  3. Sphere location(구체 위치)는 스프라이트가 스폰하는 모양과 위치를 제어합니다. 구체 위치(Sphere Location) 모듈을 추가하여 스프라이트는 구체 모양으로 스폰되며, 반경을 지정해 구체 모양 크기를 설정할 수 있습니다. Particle Spawn(파티클 스폰)에서 더하기 기호(Plus sign) 아이콘( + )을 클릭하고 위치 > 구체 위치(Location > Sphere Location) 를 선택하여 구체 위치(Sphere Location) 모듈을 추가합니다. 이 모듈의 기본 세팅은 그대로 둡니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

파티클 업데이트 그룹 세팅

이제 다음으로 파티클 업데이트(Particle Update) 그룹에서 모듈을 편집합니다. 이 비헤이비어는 이미터의 파티클에 적용되며 각 프레임을 업데이트합니다.

  1. 시스템 개요(System Overview) 에서 파티클 업데이트(Particle Update) 그룹을 클릭하여 선택(Selection) 패널에서 엽니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  2. Particle Spawn(파티클 스폰) 그룹의 Initialize Particle(파티클 초기화) 모듈에서 스프라이트의 기본 크기가 선택되었습니다. Scale Sprite Size(스프라이트 크기 스케일 조절) 모듈을 추가하여 스프라이트 크기를 랜덤화할 수 있습니다. 기본 크기에 스케일 인수가 적용됩니다. 플러스 기호(Plus sign) 아이콘( + )을 클릭하고 크기 > 스프라이트 크기 스케일 조절(Size > Scale Sprite Size) 을 선택하여 스프라이트 크기 스케일 조절(Scale Sprite Size) 모듈을 추가합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  3. 스프라이트 크기 스케일 조절의 기본값은 다음과 같습니다. X: 1 Y: 1 . 이 기본값을 변경하면 모든 파티클이 균등하게 더 커지거나 더 작아집니다. 하지만 랜덤 크기 베리에이션은 스태틱 크기보다 시각적으로 더 흥미롭습니다. 인수 스케일 조절(Scale Factor) 필드 옆에 있는 아래 방향 화살표를 클릭하고 동적 입력 > 플로트의 벡터 2D(Dynamic Inputs > Vector 2D from Float) 를 선택합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  4. 인수 스케일 조절(Scale Factor) 값이 하나의 스태틱 값으로 변경되었습니다. 원하는 파티클 모양에 따라 플로트 값을 추가하는 방법에는 여러 가지가 있습니다. 크기 변화가 유동적이고 점진적인 경우에는 커브가 이상적입니다. 값(Value) 옆에 있는 아래 방향 화살표를 클릭하고 동적 입력 > 커브에서 플로트로(Dynamic Inputs > Float from Curve) 를 선택합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  5. 5단계에서 추가한 커브에는 2개의 기본값이 있습니다. 커브에 키를 더 추가하여 크기 베리에이션을 좀 더 복잡하게 만들 수 있습니다. 선을 우클릭하고 커브에 키 추가(Add Key to Curve) 를 선택합니다. 커브에 키가 총 4개가 표시되도록 이 작업을 반복합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  6. 커브에 있는 키 4개에 다음 값을 설정합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

    키 번호

    시간

    1

    0

    0

    2

    .25

    1

    3

    .75

    1

    4

    1

    0

  7. 이제 현재 세팅으로 아직은 흥미를 일으키지 않는 파티클 공 모양이 생성되었습니다. 파티클의 베리에이션과 움직임을 증가시키는 엘리먼트를 별도로 추가할 수 있습니다. 파티클 업데이트(Particle Update) 에서 더하기 기호(Plus sign) 아이콘( + )을 클릭하고 힘 > 곡선 노이즈 강도(Forces > Curl Noise Force) 를 선택합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  8. 곡선 노이즈 강도로 할 수 있는 작업은 매우 다양합니다. 노이즈 세기(Noise Strength) 는 전반적인 노이즈 필드의 크기를 제어합니다. 즉, 노이즈가 원래 파티클 구체를 얼마나 왜곡하는지 제어합니다. 노이즈 주기(Noise Frequency) 는 곡선 노이즈를 파티클에 적용하는 빈도를 제어합니다. 숫자가 작을수록 파티클의 구체 위치는 더 많이 휩니다. 지금은 아래의 세팅을 사용하지만 나중에 이 세팅을 활용하여 다른 모양을 만들 수 있습니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

REGION:simpletable

파라미터

노이즈 세기(Noise Strength)

72

노이즈 주기(Noise Frequency)

.02

  1. 이제 파티클이 처음에는 소용돌이치고, 사라질 때까지 계속해서 바깥쪽으로 이동하게 됩니다. 이러한 이펙트를 위해 파티클은 바깥쪽으로 이동한 다음 다시 원점을 향해 들어가 소용돌이치는 매스를 만들어야 합니다. 포인트 인력(Point Attraction Force) 모듈은 파티클을 단일 지점(기본적으로 이 지점은 이미터의 위치임)으로 이동시킵니다. 파티클 업데이트(Particle Update) 에서 더하기 기호(Plus sign) 아이콘( + )을 클릭하고 힘 > 포인트 인력(Forces > Point Attraction Force) 을 선택합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

  2. 인력 세기(Attraction Strength) 는 당기는 주체로 파티클을 강제로 끌어당기는 힘의 크기입니다. 인력 반경(Attraction Radius) 은 포인트 인력이 파티클에 적용되는 필드의 크기를 나타냅니다. 감쇠 익스포넌트(Falloff Exponent) 는 구체가 퍼지는 정도를 제어합니다. 숫자가 작을수록 파티클 구체가 더 많이 퍼집니다. 킬 반경(Kill Radius) 은 파티클의 라이프 사이클이 끝날 때 사라지는 영역의 크기를 설정합니다. 인력 세기(Attraction Strength) , 인력 반경(Attraction Radius) , 감쇠 익스포넌트(Falloff Exponent) 킬 반경(Kill Radius) 을 다음 값으로 지정합니다.

    모듈의 하단에 있는 삼각형을 클릭하여 킬 반경(Kill Radius) 파라미터를 표시합니다. 박스가 아직 선택되어 있지 않으면 선택하여 활성화합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

    파라미터

    인력 세기(Attraction Strength)

    5.5

    인력 반경(Attraction Radius)

    300.0

    감쇠 익스포넌트(Falloff Exponent)

    0.6

    킬 반경(Kill Radius)

    4.0

  3. 컬러가 지정된 바 위에서 영역을 클릭하여 커브에 컬러 스톱을 추가하거나, 스톱을 클릭하고 색 선택 툴을 열어 컬러를 변경할 수 있습니다. 오파시티 스톱을 설정하려면 바 아래에 있는 영역을 클릭하세요. 아래 표시된 대로 컬러와 오파시티를 설정합니다.

    이미지를 클릭하면 전체 크기로 확대됩니다.

    컬러 또는 오파시티 스톱

    시간

    컬러

    스톱 1(Stop 1)

    0.0

    R: 1, G: 0, B: 1

    스톱 2(Stop 2)

    .35

    R: .08, G: 0, B: 1

    스톱 3(Stop 3)

    ..60

    R: .2 , G: 1, B: .8

    스톱 4(Stop 4)

    .8

    R: 1, G: .96, B: .3

    오파시티

    스톱 1(Stop 1)

    0

    1

    스톱 2(Stop 2)

    .7

    1

    스톱 3(Stop 3)

    1

    0

최종 결과

Congratulations! 이제 CPU 대신 GPU를 사용하여 멋진 스프라이트 이펙트가 생성되었습니다.

태그
언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
취소