다른 적분기의 장단점 [닫기]


29

게임에서 물리와 같은 것을 만들 때는 통합자가 필요합니다. 나는 Verlet 통합이 Euler 통합의 훌륭한 대안으로 여러 곳을 언급 한 것을 보았습니다. 예를 들어 Thomas Jakobsen유명한 문서 에서 . 그러나이 기사에서 Glenn Fiedler는 다음과 같이 썼습니다.

존재하는 방대한 다른 통합 자에 대해 소개하는 대신, 추격에 나서서 바로 최선을 다하겠습니다. 이 적분기를 Runge Kutta order 4 적분기 (일명 RK4)라고합니다.

그래서 분명히 총알이 없습니다. 다른 적분기의 장단점은 무엇입니까? 단순성, 속도, 정확성, 안정성 등과 관련하여 어떤 종류의 게임이 어떤 유형의 게임에 가장 적합한가? Verlet, RK4 또는 다른 제품을 언제 사용 하시겠습니까? 오일러를 사용해야합니까?


멋진 답변이 있습니다 stackoverflow.com/questions/2769466/…
teodron

링크 주셔서 감사합니다. 나는 이미 그것을 알고 있습니다.
paldepind

답변:


27

두 가지 방법의 장단점 :

RK4 전문가 :

  1. 정확도 (더 나은 근사 계열 덕분에 4 차 정밀 산출)
  2. 인공 / 내재적으로 유도 된 댐핑 (암시 적 방법과 약간 비슷 함)은 안정성을 추가합니다 (단순한 오일러 단계는 그렇지 않은 반면, 실제로는 반대로 고스트 에너지를 발생시켜 시스템을 혼란에 빠뜨릴 수 있음)

RK4 단점 :

  1. 계산 비용 : 암묵적 방법이나 하이브리드 IMEX 방법과 비교할 때 RK4는 더 많은 기능 평가가 필요하기 때문에 명시 적 오일러보다 4 배 더 비쌉니다. 최적화의 최첨단을 목표로 할 때 나타납니다.
  2. 여전히 불안정 함 : 관련된 힘의 유형에 따라 RK4는 오일러만큼 불안정 할 수 있습니다. 평균적으로 RK4는 좀 더 안정적이며 부여 된 댐핑 "스킬"로부터 이러한 이점을 얻는 경향이 있습니다.
  3. 비 증상 : 수치 감쇠에는 비용이 발생합니다. 에너지 / 볼륨 등이있는 시스템은 시뮬레이션 할 수 없습니다. 손실은 시간이 지남에 따라 눈에 띄는 효과를 적용하지 않아야합니다 (예 : 분자 역학, 잠재적 필드 유도 력, 변형 문제)

베레모 프로 :

  1. 오일러 단계의 복잡도의 1 ~ 2 배 (Verlet 풍미에 따라 위치 또는 속도)
  2. 증상 : 내부 에너지 절약
  3. 2 차 정확도 : 많은 게임은 고정밀 부동 소수점 결과를 요구하지 않으며, 2 차는 게임 시나리오에서 눈을 즐겁게하는 것 이상입니다. 그렇게 나쁘진 않아)

Verlet 단점 :

  1. 안정적이지만 여전히 안정성 측면에서 가장 명백한 방법 일 것입니다 . 시스템에 하드 구속 조건을 추가 할 때 우위를 점하는 경향이 있으므로 위치 기반 다이내믹 엔진에서 예상 구속 조건을 구현할 때 헤드 아픔을 줄일 수 있습니다. 시스템이 큰 외력으로 교란되고 댐핑 / 마찰이 추가되지 않으면 무한대로 설정됩니다. 그럼에도 불구하고, 내부 (스프링) 힘이 얼마나 큰지에 대해 수치 적으로 부과 된 한계가 있지만, RK4가 할 수있는 것보다 평균적으로 더 높습니다.
  2. 낮은 정확도 : 높은 정밀 추정을 원하는 경우 유용하지 않습니다
  3. 일부 시뮬레이션의 경우 평균적으로 RK4보다 더 작은 시간 단계가 필요합니다 (RK4는 정확도와 내부 댐핑 모두에서 이점을 얻습니다)

하나를 다른 것보다 사용하는 것은 시나리오에 따라 다릅니다. 강성과 큰 외력과 가상 에너지가 문제가되는 경우 설명 / 제목에 "암시 적"이라는 단어가있는 다른 방법을 고려하십시오.


참고 일부 저자 / 책이 사교 오일러 방법 (또는 오일러 크로머) Verlet 실제로 파생라는 실제 명시 적 오일러 통합에 대한 용어 반 암시 오일러를 사용합니다. 일부 사람들은 Verlet을 "leapfrog method"라고 부릅니다. Velocity Verlet과 midpoint 방법은 시간 단계에서의 추정 때문에 상당히 유사합니다.t + 0.5*dt예측 자-수정 자 같은 단계에 필요합니다. IMEX 방법 (암시 적-명시 적)은 두 가지 유사하지만 동일하지 않은 접근법의 이름을 지정하는데도 사용됩니다. 암시 적 업데이트 단계가있는 속도와 명시 적 방식으로 위치를 업데이트합니다 (이는 뻣뻣한 부분이 가속 계산에 가장 큰 영향을주기 때문에 IMEX 클래스 클래스에 해당하는 하이브리드 반 암시 적 방법입니다). 암시 적 방법은 더 번거롭고 전체 구성에 대해 동시 비선형 방정식 시스템을 풀어야합니다. 암시 적 방법은 변형 가능한 바디에 사용되며 일반적으로 분리 된 강체에는 사용되지 않습니다.

의견 중 하나에 명시된 바와 같이 가능하면 오일러를 사용하지 마십시오. 미드 포인트 방법, 반 암시 적 오일러 또는 동일한 비용으로 위치 -Verlet을 사용하십시오. 이들 모두는 명시 적 오일러 통합 기보다 약간 높은 정확도와 상당히 높은 안정성을 가지고 있습니다.

권장되는 미니 비교 읽기 :

http://wiki.vdrift.net/Numerical_Integration


한 가지 관찰 : 두 Verlet 변형 모두 코딩하여 프레임 업데이트 당 한 번만 가속을 평가할 수 있습니다.
teodron

1
답변 해주셔서 감사합니다! 내가 찾던 것 대부분.
paldepind

3

오일러 구현은 매우 빠르지 만 대안보다 훨씬 안정적입니다. Runge Kutta는 오일러보다 느리지 만 훨씬 정확하고 안정적입니다.

나는 Verlet 통합에 대해 잘 모르므로 Euler와 Runge Kutta에 어떻게 누적되는지 전혀 모른다.

시뮬레이션이 더 정확하거나 수치 적으로 증명되어야하는 경우 Runge Kutta가 두 가지 중 더 좋습니다.

간단한 게임에 빠르고 저렴한 물리가 필요한 경우 오일러가 더 좋습니다.


2
Runge Kutta는 EULER보다 더 안정적이지 않습니다. 그것은 여전히 ​​오일러이며, 1 대신에 프레임 당 8 번 수행되었습니다 (약간의 예측과 수정이 있지만 여전히 ..) forums.evilmana.com/game-programming-theory/…
teodron

2
'안정적'이어야하는 대상에 따라 다릅니다. 어쩌면 내가 정교하게 설명해야 할 렁 쿠타는 수치보다 더 안정적입니다. farside.ph.utexas.edu/teaching/329/lectures/node35.html
Timothy Groote

3
내가 알 수있는 한 Verlet이 Euler보다 느린 이유는 없습니다. 따라서 Verlet Euler와 비교할 때 속도 이점이 없으며 훨씬 더 정확하고 안정적입니다. 따라서 오일러가 빠르고 간단한 물리학에 가장 적합하다고 주장하는 것은 잘못된 것입니다.
paldepind

4
다음은 정확도의 큰 차이를 보여주는 블로그 게시물입니다. kahrstrom.com/gamephysics/2011/08/03/euler-vs-verlet
paldepind

2
트랜스포머의 마지막 레벨 (PS2, 2004)에서 구현 한 비행 모델은 프레임 당 2000 회 업데이트 한 Euler 통합기를 사용했습니다. (물론 초음속으로 가속되고 곡선 중력장 안에 배치되는 상당히 사실적인 비행 모델이어서 안정성에 대한 요구 사항이 상당히 강렬했습니다. 그리고 그 수준에서 CPU를 많이 사용하는 것은 많지 않았습니다. 나는 그것을 벗어날 수 있었다). 오일러에서 추가 반복을 던지는 것은 종종 다른 반복자로 전환하는 것보다 훨씬 쉽습니다.
Trevor Powell

1

무엇보다 고급 통합 체계를 직접 사용해야 할 때까지 Euler를 사용해야한다고 생각합니다. 빠르고 쉽게 구현할 수 있습니다.

멈출 수없는 스프링 시스템과 같은 안정성 문제가 발생하거나 시뮬레이션에 높은 수준의 정확도가 필요한 경우 다른 시스템으로 실험을 시작하십시오.

위에서 언급하지 않은 방법은 구현하기가 쉽고 추가 통합 단계가 하나만 필요한 중간 지점 방법입니다.


1
나는 Verlet이 간단하고 구현하기 쉽다고 생각한다
paldepind

나는 그것을 직접 사용해 본 적이 없지만 당신이 이해 한 바에 따르면 아마도 맞을 것입니다.
Mikael Högström
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.