이펙트 파티클을 일정 기간 생성된 상태로 초기화하고 싶을 때 Warmup Time 을 설정하게 된다.

UParticleSystemComponent::ActivateSystem 코드를 보면 어떻게 동작하는지 알 수 있는데  WarmupTime을 WarmupTickRate 나눈 수만큼 TickComponent 를 호출하는 식이다.

if (WarmupTime != 0.0f)
{
bool bSaveSkipUpdate = bSkipUpdateDynamicDataDuringTick;
bSkipUpdateDynamicDataDuringTick = true;
bWarmingUp = true;
ResetBurstLists();


float WarmupElapsed = 0.f;
float WarmupTimestep = 0.032f;

if (WarmupTickRate > 0)
{
WarmupTimestep = (WarmupTickRate <= WarmupTime) ? WarmupTickRate : WarmupTime;
}

while (WarmupElapsed < WarmupTime)
{
TickComponent(WarmupTimestep, LEVELTICK_All, NULL);
WarmupElapsed += WarmupTimestep;
}

bWarmingUp = false;
WarmupTime = 0.0f;
}

예를 들어 WarmupTime 을 100 WarmupTickRate 를 0 으로 설정한 경우 100 / 0.032(WarmupTickRate 기본값) = 3125 Tick 을 돌아서 이 이펙트가 스폰될 때 마다 i7 + Nvidia 970 + 32GB Mem 정도 사양에서도 버벅이는 것을 느낄 수 있다. 초당 0.7 정도의 8개 짜리 스프라이트 이펙트였는데 스프라이트 파티클 개수가 10000개에 육박한 것을 볼 수 있었다. :(

728x90

+ Recent posts