언리얼에서 스크린샷이나 다른 이유로 랙이 걸릴 때 마다 다른 PC 에 비해 World::TimeSeconds 가 느리게 가는 현상이 발견되었다.

확인해보니 AWorldSettings::FixupDeltaSeconds 에 의해 제한되고 있었다.

float AWorldSettings::FixupDeltaSeconds(float DeltaSeconds, float RealDeltaSeconds)

{

// DeltaSeconds is assumed to be fully dilated at this time, so we will dilate the clamp range as well

float const Dilation = GetEffectiveTimeDilation();

float const MinFrameTime = MinUndilatedFrameTime * Dilation;

float const MaxFrameTime = MaxUndilatedFrameTime * Dilation;


// clamp frame time according to desired limits

return FMath::Clamp(DeltaSeconds, MinFrameTime, MaxFrameTime);

}

WorldSettings 의 MinUndilatedFrameTime 과 MaxUndilatedFrameTime 에 설정할 수 있었다.


기본 값은 BaseGame.ini 에 설정되어 있다.

[/Script/Engine.WorldSettings]

MinUndilatedFrameTime=0.0005 ; 2000 fps

MaxUndilatedFrameTime=0.4 ; 2.5 fps

0.4초 이상은 버려지니 스크린샷으로 2~3초가 지났어도 World 는 0.4초 밖에 안 지난 것으로 취급되는 상황이었다.

P2P 마스터를 지원하는 상황에서는 DefaultGame.ini 에 MaxUndilatedFrameTime 을 충분히 큰 값으로 올려주고 그 값을 넘어가는 오차가 발생하면 자르거나 재동기화하는 식으로 구현하는게 좋을 것 같다.

728x90

+ Recent posts