Posts 파티클 시스템 예제 - 05 - Dr. Strange Portal
Post
Cancel

파티클 시스템 예제 - 05 - Dr. Strange Portal

목차



Preview


2021_0309_drStrange_10


목표


  • 계층형 파티클 시스템 만들기

  • 닥터 스트레인지 포탈 이펙트 완성하기


준비물


  • 글로우 모양의 동그란 텍스쳐와 Additive 마테리얼

image


1. 계층형 파티클 시스템


지금까지는 이펙트 하나 당 파티클 시스템을 하나씩만 사용해서 제작했다.

하지만 대부분의 이펙트는 실제로 하나의 파티클 시스템으로 표현하기 어려운 경우가 많고,

여러 개의 파티클 시스템 게임오브젝트를 하나의 부모 게임오브젝트로 묶어서 계층형으로 제작한다.


계층 구조 만들기

  • 하이라키에서 우클릭 - [Create Empty]를 눌러 게임오브젝트 하나를 만든다.

  • 트랜스폼의 우측 상단 ...을 누르고, Reset을 클릭한다.

  • 생성한 게임오브젝트를 우클릭하고 [Effects] - [Particle System]을 누른다.

  • 다시 부모 게임오브젝트를 우클릭하고 [Effects] - [Particle System]을 눌러 자식으로 파티클 시스템을 하나 더 생성한다.

image

  • 하지만 이렇게 하면 두 자식 오브젝트의 파티클 시스템이 함께 재생되지 않는 것을 볼 수 있다.


파티클 시스템을 위한 계층구조 만들기

  • 따라서 파티클 시스템을 하나로 묶어서 함께 재생하려면, 부모 게임오브젝트 역시 파티클 시스템이어야 한다.

  • 일단 위에서 생성한 3개의 게임오브젝트를 모두 지운다(Delete).

  • 이 상태에서 하이라키 우클릭으로 파티클 시스템을 만든다.
    • 만들고 항상 트랜스폼을 리셋해준다.(필수)
  • 생성한 파티클 시스템을 우클릭하여, 자식 파티클 시스템을 마찬가지로 두 개 만들어본다.

image

  • 이제는 파티클 시스템이 모두 연결되어 함께 재생되는 것을 확인할 수 있다.


부모 파티클 시스템 수정

  • 하지만 원래 원했던 것은, 빈 부모 오브젝트 아래에 여러 개의 파티클 시스템을 묶어 하나로 관리하는 것이다.

  • 따라서 부모 게임오브젝트는 아무런 파티클도 생성하고 싶지 않지만, 부모 파티클 시스템도 자식들처럼 계속 파티클을 생성하고 있다.

  • 이를 수정하기 위해, 부모 게임오브젝트를 선택한다.

  • 인스펙터의 파티클 시스템 컴포넌트에서 Emission, Shape, Renderer 모듈을 모두 체크 해제한다.

image

  • 이제 더이상 부모 게임오브젝트는 파티클을 생성하지 않고, 자식 파티클 시스템들을 묶어주는 역할만 하게 된다.


2. Portal 이펙트 만들기


  • 총 네 개로 이루어진 닥터 스트레인지 포탈의 파티클 시스템 중, 첫 번째를 만든다.

  • 우선 부모 게임오브젝트의 이름을 [Doctor Strange Portal]로 바꿔준다.

  • 그리고 첫 번째 자식의 이름을 [Portal]로 변경한다.

  • 두 번째 자식 게임오브젝트는 Delete 키를 눌러 제거한다.

image


메인 모듈 설정

  • Start Lifetime - [Random Between Two Constants] : (0.2, 2)

  • Start Speed : 0

  • Start Size - [Random Between Two Constants] : (0.5, 1)

  • Start Color - [Random Color]

image


Shape 모듈

  • Shape : Circle

  • Radius : 2

  • Radius Thickness : 0

  • Arc - Mode : Loop


2021_0309_drStrange_01

Shape를 Circle로 설정하면 3차원 공간에서도 2차원의 원형 범위에서 파티클이 생성된다.

Radius Thickness는 원 내에서 파티클이 생성될 영역의 두께를 설정하는데, 기본 설정인 1로 두면 원 범위 전체에서 파티클을 생성하고

점차 감소시키면 도넛 형태의 범위에서 파티클을 생성하며, 0으로 두면 원의 테두리 부분에서만 파티클을 생성하게 된다.


Arc Mode를 Random으로 두면 생성 범위 내에서 무작위로 파티클이 생성되며, Loop로 설정하면 원의 테두리를 차근차근 순회하며 생성된다.

그리고 Loop을 때 파티클이 생성되는 지점들은 Spread, Speed 속성, Emission 모듈의 Rate over Time 속성의 영향을 받는다.

따라서 Emission 모듈의 Rate over Time을 임시로 64 정도로 높여두면 다음과 같은 모습을 확인할 수 있다.

2021_0309_drStrange_02


Color over Lifetime 모듈

  • 알파값이 0 ~ 1 ~ 0으로 변화하도록 다음처럼 설정한다.


Size over Lifetime 모듈

  • 생성되는 파티클이 점차 작아지며 사라지도록, 다음처럼 설정한다.

image


Velocity over Lifetime 모듈

  • 일단 Radial에 2를 입력한다.

  • Radial의 우측에 있는 화살표를 눌러 [Curve]로 바꾸고, 다음처럼 설정한다.

    • 하단의 프리셋 우측 두번째를 클릭하면 빠르게 설정할 수 있다.

image

  • Orbital의 Z 값을 -2로 설정한다.


Radial 속성은 생성된 파티클이 중심으로부터 멀어지는 속도를 지정한다.

커브를 통해 0부터 2까지 증가하도록 설정하였으므로, 파티클이 생성되는 순간에는 가만히 있다가 점차 중심으로부터 빠르게 멀어지게 된다.

Orbital 속성은 각 축(X, Y, Z)에 대한 회전 속도를 지정한다.

Z축 회전 속도를 지정하였으므로, 아래 그림에서 보이는 파란색 축(Z축) 을 기준축으로 하여 파티클이 회전하게 된다.

image


  • 현재 상태 :

2021_0309_drStrange_03


Emission 모듈

  • Rate over Time : 512

  • 결과 :

2021_0309_drStrange_04


3. Spiral A 이펙트 만들기


  • [Portal] 게임오브젝트를 클릭하고 [Ctrl + D]를 눌러 복제한 뒤, 이름을 [Spiral A]로 변경한다.

  • [Portal] 게임오브젝트를 다시 클릭하고 인스펙터 좌측 상단의 체크박스를 클릭하거나, [Alt + Shift + A]를 눌러 잠시 게임오브젝트를 비활성화 해둔다.

image


메인 모듈 수정

  • Start Delay : 0.5

  • Start Lifetime - [Random Between Two Constants] : (0.5, 1)

  • Start Size - [Random Between Two Constants] : (0.2, 1)

  • Start Color - [Random Color] : 노란색 ~ 좀 더 진한 주황색 정도로 설정한다.

image


Start Delay 0.5로 설정했으므로, 파티클 시스템이 재생될 때 0.5초가 지나고 시작하게 된다.


Shape 모듈 수정

  • Arc - Speed : 6

2021_0309_drStrange_05


Trails 모듈

  • 트레일 모듈을 그냥 체크만 해준다.

  • 트레일 모듈이 활성화된 경우, 생성되는 모든 파티클은 잔상을 남기게 된다.

2021_0309_drStrange_06

  • 위처럼 보이지 않고 이상하게 보이는 경우, Renderer 모듈을 열어서 Trail MaterialMaterial과 동일한 마테리얼이 등록되어 있는지 확인한다.

  • 만약 등록되어 있지 않거나 다르다면, 동일한 마테리얼을 지정해준다.

image


Velocity over Lifetime 모듈

  • Orbital의 Z 값을 -2에서 -4로 변경한다.

  • Radial의 커브를 클릭하고, 하단의 커브 에디터를 클릭하여 연다.

  • Radial의 Y축 값을 2에서 6으로 변경한다.

image


결과

2021_0309_drStrange_07


4. Spiral B 이펙트 만들기


  • [Spiral A] 게임오브젝트를 선택하고, [Ctrl + D]를 눌러 복제한다.

  • 복제한 게임오브젝트의 이름을 [Spiral B]로 변경한다.

  • [Spiral A] 게임오브젝트를 선택하고, 인스펙터 좌측 상단의 체크박스를 클릭하거나 [Alt + Shift + A]를 눌러 잠시 비활성화 해둔다.

image


메인 모듈 수정

  • Start Delay : 0.75

  • Start Lifetime - [Random Between Two Constants] : (1, 1.2)

  • Start Color - [Random Color] : Spiral A보다 약간 더 진하게, 주황색 ~ 갈색 정도로 설정한다.

image


Emission 모듈 수정

  • Rate over Time : 256


Velocity over Lifetime 모듈 수정

  • Orbital : Z값을 -8로 수정한다.

  • Radial의 커브를 클릭하고, 하단의 커브 에디터를 클릭하여 연다.

  • Radial의 Y축 값을 6에서 4로 변경한다.

image


결과

2021_0309_drStrange_08


5. Burst 이펙트 만들기


  • [Spiral B] 게임오브젝트를 선택하고, [Ctrl + D]를 눌러 복제한다.

  • 복제한 게임오브젝트의 이름을 [Burst]로 변경한다.

  • [Spiral B] 게임오브젝트를 선택하고, 인스펙터 좌측 상단의 체크박스를 클릭하거나 [Alt + Shift + A]를 눌러 잠시 비활성화 해둔다.


메인 모듈 수정

  • Looping : 체크 해제한다.

  • Start Delay : 1

  • Start Lifetime - [Random Between Two Constants] : (0.5, 0.8)

  • Max Particles : 4096

  • Stop Action : Disable


Burst 이펙트는 다른 이펙트들과 달리, 파티클 시스템 재생 시 반복되는 것이 아니라 한 번만 반짝 뿜어내고 사라지는 이펙트이다.

따라서 Looping을 해제하여 반복되지 않게 하며, Stop Action을 Disable로 설정하고 재생이 끝나면 파티클 시스템 게임오브젝트가 비활성화 되도록 해준다.

그리고 한 번에 많은 파티클을 생성해야 하는데 Max Particle 이하의 파티클만 동시에 존재할 수 있으므로, Max Particle 한도를 늘려준다.


Emission 모듈 수정

  • Rate over Time : 0

  • Bursts의 우측 하단 + 버튼을 눌러, 버스트 하나를 추가한다.

  • 생성한 버스트의 Count를 128, Cycles를 48로 설정한다.

image


Emission 모듈의 버스트 설정이 [Burst] 이펙트의 핵심이다.

Rate over Time은 지속적으로 생성할 파티클의 개수를 초당 개수로 지정하는데 반해,

Bursts는 지정된 타이밍(Time)에 지정한 개수(Count)의 파티클을 지정한 횟수(Cycles)만큼 지정한 시간 간격(Inteval)로 반복하여 생성하도록 한다.

따라서 파티클을 재생하면 0초에 0.01초 간격으로 48번, 0.48초까지 매 번 128개의 파티클을 생성하게 된다.

(메인 모듈에서 Start Delay를 지정하였으므로 실제로는 1초부터 시작된다.)


Shape 모듈 수정

  • Arc - Mode : Burst Spread

Burst Spread는 Emission의 Burst로 생성하는 파티클들이 생성 영역 내에서 골고루 생성되도록 해준다.


Velocity over Lifetime 모듈

  • Orbital : Z 값을 -4로 수정한다.

  • Radial 커브를 클릭하여 커브 에디터를 열고, Y축의 값을 -10으로 수정한다.


Trails 모듈 수정

  • Color over Lifetime - [Gradient] : 알파값이 0 ~ 1 ~ 0으로 변화하도록 다음처럼 설정한다.

image


결과

2021_0309_drStrange_09


6. 완성


  • 4개의 게임오브젝트를 모두 활성화하고, 파티클 시스템을 재생해본다.

2021_0309_drStrange_10

This post is licensed under CC BY 4.0 by the author.