이건 진짜 딥한 부분이라 모든 엔진들이 fixed update(또는 그에 준하는 무언가)를 권장하는 이유가 있는데, 쉬운 답변과 어려운 답변 둘다 해줄거임.

먼저 기본적으로 알아야하는게 수치 해석학 시간에 배우는 수치해법임.
모든 물리엔진의 기본은 적분을 통해
힘 => 속도 => 위치
순서대로 계산 하는것임.

여기서 수치해법상 중요한게 바로 h인데, 게임 엔진에서 말하는
dt를 생각하면 편함.

그럼 가장 간단한 반암묵적 오일러법을 예시로 들어보면

dvel = force x dt x invmass
dpos = dvel x dt
pos += dpos

이런 느낌으로 들어 가겠지?

그럼 여기서 dpos에 최종적으로 곱해지는 dt가 2개라는걸 알수 있음.

엥? dt를 쓰면 프레임간의 간격이 바뀌더라도 일정 값을 유지하기 위함인데, 힘은 2번들어가네?

간단하게 10000이라는 속력이 있을때 게임이 100fps면
프레임 1번당 100씩 움직이면 1초가 지났을때  10000을 지나갈거임. 50fps면 1프레임에 200씩 움직이면 1만을 지나갈거고.

게임이 1000fps면?
10000에 1/1000을 곱해준 10씩 움직이면 1초가 지났을때 10000이 지나갈거고 ㅇㅇ.

이게 dt를 한번만 쓰는 가장 큰 이유인데, 물리엔진은 그 특성상 2번 사용될수 밖에 없는거임.
dt가 2번들어가면?

10000이라는 force가 있을때 100fps면 1초에 1씩 움직일거임
10000/(100x100) = 1

50fps면?
10000/(50x50)이 되어 1초에 4씩 움직일거임.

쉽게 말하면 이러한 이유때문에 물리엔진은 dt값이 고정되어야 하는거임. fixed update에선 update 프레임, 즉 dt값이 고정되기 때문에
dt를 여러번 곱하더라도 동일한 수치를 사용할수 있음.

어려운 버젼
어려운 버젼은 좀더 딥하게 들어가는데, 이건 물리엔진의 견고성과 관련되어 있음.

대학교에서 물리학을 열심히 수강해 해석역학을 배웠다면 오일러 라그랑주 방정식, 변분법 등등을 수강했을거임.
쉬운버젼에서도 말했지만 물리엔진은 뭐다? 적분이다.
당연히 이 라그랑주 방정식을 풀어야 각종 물리효과들을 제 시간안에 풀수 있음.

그래서 물리 프로그래머들은 이 제약조건을 풀기위해 적분식을 적절한 수치에 수렴할때까지 반복하는 방식으로 구현해냈음.

그런데 아직까지도 CPU는 물리적인 제약조건을 깔끔하게 계산할만큼 충분히 빠르지 않았고, 모든 게임이 물리 시뮬레이션인것도 아니기 때문에 어느정도 적절한 수준까지만 수렴하게 찾으면 되는거였음.
특히나 게임에는 프레임에 필요한 연산들이 많은데,
눈으로 보이는 그래픽이나 네트워크 상호작용, AI, 길찾기 알고리즘 등 게임에 필수적인 연산들 또한 고려해야 하는거임.

당연히 물리엔진에 할당되는 연산량은 줄어들수밖에 없었고, 해결법은 간단했음.

현재 프레임까지 계산한 수치를 다음 프레임에도 가져가자임.

간단하게 오브젝트가 쌓여 있는 장면이라도, 매 프레임마다 처음부터 계산하게 되면 충돌 처리를 하기위해 오브젝트들이 부들부들 떨리는 현상이 일어나는것을 알수 있음.

하지만 한 프레임의 간격을 엄청 길게해 저 연산이 끝날때 까지 놔둬준다면 안정적인 결과물을 받아 볼수 있을거임. (픽사 같은 애니메이션 회사에서 하는것)

하지만 게임은 그게 아니니까 이전 프레임에서 현재 프레임이 될때 크게 움직이지 않는 놈들은 이전 프레임에 계산해둔 적분 수치에서 계산을 다시 시작하는 방식으로 물리엔진이 구현된거임.

이 기법을 warm starting이라고 하는데, 이 방법은
물리엔진에 필수적인 충돌처리부터 로프, 경첩, 등등 온갖 물리 효과에 사용되는 joint, constraints, 제약조건 등을 표현하는데 다 사용함. 어차피 쟤네들도 다 위에서 말한 제약조건 솔버 이기 때문임.

그런데 dt의 수치가 바뀌게 되면 아까도 말했듯 적분의 프레임 견고성이 떨어지게 되고, 멀쩡하던 물체가 갑자기 물체가 땅밑으로 떨어진다거나 하는 버그가 벌어지게 되는거임. (물론 그걸 방지하기위해 sleeping을 건다거나 하지만)

이래서 물리엔진의 견고성 문제 때문에 fixed update를 하라고 하는거임.

물론 discrete detection과 continous detection도 견고성과 관련된 팩터이긴 한데,
fixed update처럼 거의 희생없이 좋은 결과를 얻는것과는 다르게
많은 연산 희생을 써야 한다는 점에서 비추하는 방법이 되어버림.

또 비슷하게
반암묵적 오일러법 대신 룬지쿠타4나 벌레뜨를 사용해 soft body나 유체의 견고성을 올리는 방법 또한 존재하는데 (오일러법은 오차가 커서 생김) 이것도 엄청난양의 희생이 필요한 팩터라 게임에서 모든걸 RK4로 하는건 50년은 지나야 하지 않을까 싶음.

끝.