2014. 4. 30.

피직스 서브 스테핑

글쓴이 * Ori Cohen

UE4 에 잘 알려지지 않은 기능 중 하나로, 'physics sub-stepping'(피직스 서브 스테핑)이라는 것이 있습니다. 이 옵션을 켜 주면, 보다 정확하고 안정적인 피직스 시뮬레이션을 얻을 수 있습니다. 가장 눈에 띄게 좋아지는 부분은, 래그돌 지터링이나 기타 복잡한 피지컬 애셋 관련 문제입니다.

서브 스테핑은 프로젝트의 피직스 세팅에서 켤 수 있습니다:

PhysicsSettings

이 기능은 아직 작업중인 기능으로, APEX 디스트럭션에 완벽 지원되지 않습니다. 또한 현재 모바일 디바이스에도 지원되지 않으나, 모양과 느낌을 크게 향상시킬 수 있기에 지원하는 쪽으로 작업중입니다.

어떤 작업을 하나요?

UE4 는 가변 프레임 속도를 사용합니다. 그러면 하드웨어 범위성(scalability)이 좋아지는 반면 피직스 엔진에게는 힘들어지는 것이, 시간이 작게 고정된 단계에서 최상으로 작동하기 때문입니다. 서브 스테핑은 총 프레임 시간을 구한 다음 서브 스텝 수로 나눕니다. 그런 다음 피직스 시뮬레이션을 한 프레임에 여러 번 틱시킵니다. 서브 스텝 횟수는 최대 서브 스텝 경과 시간을 얼마나 작게 설정했는지에 따라 달라집니다. 최대 서브 스텝 시간이 짧아질 수록 시뮬레이션의 안정성은 높아지지만, GPU 비용도 높아집니다.

실제 어떻게 작동하나요?

서브 스테핑은 사용자에게서 완전히 숨겨져 있습니다. 즉 피직스 엔진으로의 일부 호출은 보간 및 유지되어야 한다는 뜻입니다. 예를 들어 사용자가 한 프레임동안 하나의 액터에 힘을 가한다면, 그 프레임은 내부적으로 N 회 서브 스테핑되며, 같은 가속도를 얻기 위해서는 N 회 연속 시뮬레이션 스텝 동안 그 힘을 적용해 줘야 합니다. 그와 비슷하게 사용자가 액터의 타겟 위치를 설정한 경우, 여러 서브 스텝에 걸쳐 해당 타겟 위치로 보간을 해야 원하는 속력을 유지할 수 있습니다. 이러한 모든 디테일은 이미 UE4 내부적으로 처리되지만, 필요한 작업 처리를 위한 CPU 와 메모리 비용이 있습니다.

또 한 가지 알아둬야 할 기술적인 디테일은, 서브 스테핑 도중의 콜리전 콜백 작동방식입니다. UE4 는 별도의 피직스 스레드에 피직스 서브 스테핑을 실행, 게임 스레드가 작업을 계속할 수 있도록 합니다. 최상의 퍼포먼스를 위해 마지막 서브 스텝 완료시까지 콜리전 콜백을 지연시킵니다. 즉 같은 콜리전에 대해 여러 개의 콜백을 얻을 수도 있다는 뜻입니다. 예를 들어 A 가 B 와 충돌하여 튕겨나가는 경우, 같은 프레임에서 A 와 B 가 겹쳤다는 것과 더이상 겹치지 않는다는 콜백을 동시에 받을 수도 있습니다. 내부적으로 모든 콜백은 큐 속에 푸시되므로, 서브 스텝 1 에서의 콜백은 서브 스텝 2 에서의 콜백 전에 처리될 수 있도록 합니다.

이 기능은 어떻게 켜나요?

게임의 필요에 따라 다릅니다. 복잡한 피직스 애셋을 사용중인 경우, 서브 스테핑을 켜면 상당한 퀄리티 향상이 있을 것입니다. 반면 피직스 시뮬레이션이 다른 기능만큼 중요하지 않은 경우, CPU 시간을 다른 곳에 쓰는 것이 나을 것입니다. 어떤 식으로든, 이 기능이 여러분의 게임에 도움이 될 것인지 시험해 볼 것을 강력 추천합니다!

질문이 있으신가요? 잊지 마시고 저희 포럼 에 들러주시기 바랍니다!

최근 게시글

2018년 언리얼 엔진 기대작

주요 매체들에서는 새해가 시작되면서 2018년 최고의 기대작들을 꼽고 있으며, 이 기대작 목록에는 언리얼 엔진 타이틀이 가득 들어있습니...

2017년 12월 NVIDIA Edge 프로그램 수상자

언리얼 커뮤니티가 다시 한번 나섰습니다. 이번에 NVIDIA GTX 1080Ti를 타게 된 놀라운 프로젝트들을 확인해 보시고, 여러분도...

LA에서 열리는 언리얼 엔진 VFX 마스터클래스

에픽게임즈의 언리얼 엔진 전문가들이 nomon VFX 학원에서 리얼타임 퍼포먼스를 주도하는 기본 개념과 워크플로우에 대한 두 가지 마스...