
비교군
*SpawnRate 5
나이아가라 이미터1 : LoopDuration 1초 / Lifetime 0.2 / SpawnRate 5
> 1초의 수명동안 0.2초짜리 파티클이 순서대로 5번 스폰
*SpawnBurst 1
나이아가라 이미터2 : LoopDuration 1초 / Lifetime 1.0 / SpawnBurst 1
> 1초의 수명동안 1초짜리 파티클이 1번 스폰
이 방법을 사용하려는 이유
- 가장 큰 이유는 퍼포먼스 부담을 줄이기 위해서 고민을 시작 (최적화)
- Rate 방식은 짧은 시간에 많은 파티클을 스폰해서 멋진 모양을 내기는 용이함
- 하지만 이 방식은 지속적으로 스폰하기 때문에, 프레임이 떨어질 경우 안보일 수도 있다
- 그리고 좀 욕심내서 스폰 수를 늘리면, 파티클이 많이 겹쳐져서 픽셀을 여러 번 렌더링된다.
- (오버드로우)
- 그래서 1개만 스폰해서 방식 멋진 모양을 내는 방식을 구현해려고 함
필요한 기능
- 파티클의 크기가 0~1로 갔다가, 다시 0~1로 가도록 만들어야한다.
( 작은 상태에서 커지고 – 초기화 – 작은상태에서 커지고 – 초기화 … ) - 그리고 이 주기를 조절할 수 있게 만들어야 한다.
- 파티클의 색상이 1~0으로 가도록 만들어야 한다.
( 안보였다가 보였다가 – 초기화 – 안보였다가 보였다가 – 초기화 … ) - 이것도 주기를 조절할 수 있도록 만들어야 한다.
- 어차피 같은 주기를 사용하기 때문에 하나의 조절장치를 만들어서
- 파티클 스폰에 넣어서 제어하면 될 듯


Frac Float
목표 : 좌측 사진의 0-1 그래프식을 우측에 있는 톱니 그래프로 만들어야한다.
<알고 넘어가기>
1. Frac 은 0~1 로 반복 변환하는 식이다.
2. 예를 들어 1.4 는 0.4로 변환
3. 19.2 는 0.2로 변환
4. 24.89 는 0.89로 변환

- X(수명) = 2Y(값) 인 그래프에 Frac 식을 적용시키면
- 소수점을 빼고는 전부 0-1로 변환시켜버리니
- (0~2) -> (0~1)(0~1) > 이런 그래프가 된다.
- 그래서 이렇게 하면 톱니 모양 그래프가 완성이 된다.
아래 구현 방법에서 Frac 식을 적용하는 법을 안내한다.
구현 방법


1. 원형 파티클 만들기
점점 커지게 만들고
점점 색상이 사라지게 만든다


2. Frac Float
> Curve Index 에 Frac Float 연결
> Multiply 연결
> (파티클) NormalizeAge * Float (주기)
> Color 랑 Scale 둘다 추가


3. (파티클) FracPeriod 커스텀 파라미터 추가
한번에 제어하기 위해서 주기를 설정해준다.
굳이 한번에 제어할 필요가 없으면 추가하지 않아도 된다.

4. Lifetime 곱해주기
Lifetime에 따라 주기가 계속 일정하게 나올 수 있도록 작업
(2)에서 우리가 NormalizeAge와 FracPeriod를 곱해줬기 때문에
이 파티클의 수명에 FracPeriod이 영향을 준다.
따라서 파티클 스폰에 넣어둔 FracPeriod에 Lifetime을 곱해준다.
이해를 돕기 위해..
Lifetime을 안곱해주면?
Lifetime 1초로 설정하고 FracPeriod가 5면 -> 1초동안 5번 주기
Lifetime 2초동안 설정하고 FracPeriod가 5면 > 2초동안 5번 주기 (좀 느려짐)
Lifetime 3초동안 설정하고 FracPeriod가 5면 > 3초동안 5번 주기(더 느려짐)
Lifetime을 곱해주면?
Lifetime 1초로 설정하고 FracPeriod가 5면 -> 1초동안 5번주기
Lifetime2초동안 설정하고 FracPeriod가 5면 > 2초동안 10번주기 (같음)
Lifetime 3초동안 설정하고 FracPeriod가 5면 > 3초동안 15번주기 (같음)
근데 이건 제어하기 편하려고 하는거라서
굳이 이렇게 안하고 각각 제어해도 괜찮다.
기대효과


왼쪽 SpawnRate 5 / 오른쪽 SpawnBurst 1
완벽하게 똑같이 구현되었다.
비교

| SpawnRate 5 | SpawnBurst 1 |
| 이미터 수명 1초 파티클 수명 0.2초 파티클 5번 스폰 | 이미터 수명 1초 파티클 수명 1초 파티클 1번 스폰 |
| 시간당 지속생성 > 지속적 처리 필요 > 성능 부담 높음 | 특정 타이밍에 한번 생성 > 단발성 생성 > 성능 부담 적음 |
| 프레임률에 민감 (프레임 저하 시 시각적 영향 큼) | 프레임률 영향 적음 |
- 실제로 어느정도로 성능 개선이 되었을지는 모르겠지만
- 확실히 Rate보다는 Burst로 사용할 수 있으면
- 적극적으로 활용하는 것이 좋을 것 같다.