상세 컨텐츠

본문 제목

[Unity] Rigidbody의 Interpolate 옵션

Unity

by 메타샤워 2023. 7. 19. 15:26

본문

유니티에서는 렌터링 프레임과 물리 프레임이 서로 다른 주기로 동작한다.

물리 프레임의 기본설정은 0.02초로 되어있다. ( Edit → Project Setting →Time에서 변경가능 하다 )
 
물리 엔진 특성상 계산의 편의성을 위해 항상 고정단위로 계산되도록 설계되어있다.
 
0.02의 의미는 물리 프레임이 초당 50회의 고정 간격으로 돌아간다는 의미이다.
 
만약 렌더링 프레임이 30fps 정도로 동작한다면 렌더링 프레임보다 더 많은 물리 프레임이 동작하게 될것이다.
 
물리 계산으로 인해 소비되는 CPU자원을 아끼기 위해 물리 프레임의 속도를 렌더링 프레임보다 더 낮게 생성할 경우 툭툭 끊켜서 보이는 현상이 발생하게 되는데, 이것을 잡아주기 위해 RigidBody 컴포넌트의 Interpolate옵션이다.
 
 
Interpolate 옵션을 켜주면 렌더링 루프에서 추가적으로 물리 관련된 계산의 보정을 진행하게 된다.
 
Interpolate 옵션은 두가지가 있다
 
 
 - Interpolate
 
렌더링 프레임의 현재시점에서 이전 물리 프레임과 다음 물리프레임(예측)의 사이 값을 찾아서 선형보간을 수행한다.
 
이를 위해 이전 물리 프레임의 값을 계속 어딘가에 저장해두어야 한다. 
 
엔진은 선형보간된 위치와 회전값으로 Transform정보를 강제로 설정한다.
 
 
 - Extrapolate
 
렌더링 프레임의 현재 시간과 이전 물리 프레임시간을 뺀 델타 시간을 구한뒤에 현재 Rigidbody가 가지고 있는 속력에 이를 곱해 최종 위치를 예측한다. 
 
( 회전은 각속도를 사용함) 마찬가지로 엔진은 예측된 위치와 회전값으로 Transform정보를 강제로 설정한다.
 
 
마무으리 
 
Interpolate 설정은 공짜가 아니다. 옵션을 설정하는 순간 해당 Rigidbody는 별도로 관리 박데 되며, 렌더링 프레임마다 이들에 대한 보간 연산이 추가적으로 일어나게 된다.
 
두가지 방법을 선능의 관점에서 비교하자면 Extrapolate가 추가적인 정보의 저장이 없고 속력에 시간을 곱하는 단순한 연산을 수행하므로 조금이나마 부하가 덜하다.
 
마마지막으로 , 이옵션은 강제로 위치를 조절하기 때문에 충돌과는 아무런 관련이 없다. 따라서 충돌까지 고려한다면 충돌처리의 CCD옵션도 같이 켜주는것이 바람직 하다.

관련글 더보기