물리 엔진은 정확히 무엇입니까?


57

프로그램은 입력을 받아서 처리하고 출력해야합니다. 물리 엔진은 정확히 입력으로 무엇을 취하고 출력으로 제공합니까?


36
많은 용어가 사람들에게 질문합니다. 기본적인 질문은 기본적인 질문이므로 간단하게 투표 할 필요가 없습니다.
MichaelHouse

16
"입력을 취해서 처리하고 결과를 제공해야한다"는 프로그램의 설명은 쓸모 없다는 것에 대해 터무니없이 단순화되고 축소적인 사고 방식입니다. "프로그램은 입력을 받아서 처리하고 출력해야합니다. 게임이 입력으로 가져와 출력으로 정확히 무엇을 제공합니까?"라는 질문에 어떻게 대답 할 수 있을지 생각해보십시오. 경기.
Jack Aidley

10
@JackAidley 나는 당신의 요점을 알지만, 실제로 게임은 입력과 같은 것입니다 : 입력 : 키 입력 및 마우스 / 조이스틱 움직임, 출력 : 화면의 재미있는 이미지 및 재미있는 스피커 소리. 그것은 간단합니다. 그러나 "게임"이 계산적으로 무엇인지 이해하는 데 도움이되며 제 경험상 코드 아키텍처, 자산 디자인, 프로젝트 관리 등에 대해 생각하는 매우 유용한 방법입니다 (물론 유일한 방법은 아닙니다).
wjl

답변:


58

물리 엔진은 마치 실제 (또는 실제와 유사한) 물리학의 제약을받는 것처럼 객체의 움직임과 반응을 시뮬레이션하는 역할을합니다. 필자는 일반적으로 독립형 프로그램이 아니라 더 크고 더 흥미로운 프로그램 (예 : 게임)의 구성 요소라는 점에 유의해야합니다.

물리 시뮬레이션에 대한 입력은 일반적으로 속성 (단단하거나 부드러운 지 여부, 질량, 모양 등)과 해당 바디에 작용하는 힘의 모음을 가진 객체 ( "본체") 모음입니다.

해당 입력을 기반으로 엔진은 업데이트 된 바디의 위치와 방향을 시뮬레이션하고 적용합니다 ( "출력"). 일반적으로 객체가 충돌하거나 겹치는 경우, 충돌과 관련된 특정 게임 플레이 로직을 처리하기 위해 클라이언트 코드가 연결될 수있는 콜백 형태의 시뮬레이션 단계 출력에 포함됩니다.


6

입력 속도, 질량 및 시간, 출력은 새로운 속도입니다. 때때로 회전 / 각 운동량도 입력 및 출력입니다.

본질적으로 물리 엔진은 중력과 충돌의 영향을 시뮬레이션하려고합니다. 더 나은 물리 엔진을 위해서는 객체를 여러 객체로 분할하는 것과 객체의 각도 운동량을 포함하여 객체의 영구적 및 일시적 변형을 모두 포함합니다. 다리를 무너 뜨릴 때까지 몇 대의 트럭이 넘어 질 수 있는지와 같은 스트레스를 시뮬레이션하는 것이 이상적입니다. 공기 저항과 같은 추가 시뮬레이션 변수도 물리 엔진으로 계산되지만 아직까지는 게임에 적용되지 않은 것으로 알고 있습니다.

대부분의 물리 엔진은 어느 정도 전문화되어 있으며 게임에 필요한 지점까지 물리를 시뮬레이션합니다. 자동차 게임을위한 물리 엔진은 종종 3D 사수를위한 물리 엔진과는 상당히 다릅니다. 그리고 골프 게임의 물리 엔진은 골프 공과 개별 잔디 잎의 상호 작용을 과도하게 계산할 수 있지만 고속 충돌 및 자동차의 변형 (골프 공에 닿는 경우)의 처리가 완전히 누락 될 수 있습니다 .


1
공기 저항은 실제로 물리 엔진의 일반적인 특징이라는 점을 지적하고 싶습니다. 낙하물에 터미널 속도를 적용하는 모든 게임은 공기 저항을 모델링합니다.
Patrick Roberts

@PatrickRoberts Terminal Velocity는 공기 저항을 언급 할 때 생각했던 것과 다릅니다. Pong에 운동 영향을 모델링하는 물리 엔진이 있다고 말하는 것과 같습니다.
피터

12
그것은 느슨한 의미에서 공정한 것이 었습니다. 무중력 환경에서 완벽하게 탄성 충돌을 모델링합니다. 나는 모델이 단순 할 수 있다는 것을 이해하지만, 우리가 실제로 경험하는 현상의 실제 근사치이기 때문에 모델이라고 불리는 이유입니다.
Patrick Roberts

4

일반적으로 물리 엔진은 게임의 객체가 가능한 모든 시나리오에 대해 특정 애니메이션을 디자인 할 필요없이 환경과 관련하여 현실적인 방식으로 동작하도록하는 데 사용됩니다.

특히 물리 엔진은 일련의 속성 (질량, 관절 등)이있는 모델을 가져 와서 일련의 매개 변수에 따라 게임 내에서 렌더링합니다.

이것의 초기 예제는 래그 돌 엔진 (예 : 언리얼에서) 으로 림프계 가 계단 등으로 떨어지는 방식을 모델링 한 것입니다.

현재의 기술 물리 엔진은 AI, 게임 UI, 컷신 생성 등과 함께 전반적인 게임 디자인 패키지에 밀접하게 통합되는 경우가 많습니다.

당신은 물리 엔진이 게임 디자인의 시작으로 거슬러 올라간다는 것을 확실히 주장 할 수 있습니다. 예를 들어 탁구는 조잡한 물리 엔진으로 간주 될 수 있습니다. 그러나 요점은 물리 엔진이 모션 캡처 나 수동 애니메이션에서 미리 정해진 애니메이션 시퀀스를 사용하는 대신 매개 변수 세트를 기반으로 애니메이션 포인트를 즉석에서 생성 할 수 있다는 것입니다.

다른 답변에서 언급했듯이, 운전 또는 비행 시뮬레이션과 같은 일부 클래스 또는 게임에서 물리 엔진은 게임 플레이의 기초가 될 수 있으며 화면 애니메이션을 구동하는 주요 입력이 ​​될 것입니다. 일반적으로이 용어는지면에서 구축 된 매우 특정한 시뮬레이터가 아닌 개발자 측에서 해당 상황에 대한 매우 구체적인 지식이나 분석을 요구하지 않고 다양한 상황에 적용 할 수있는 범용 도구로 사용되지만 특정 응용 프로그램에 적합합니다.


4

물리 엔진은 "세계"에서 물체의 움직임을 시뮬레이션하는 역할을합니다 . 오늘날 대부분의 물리 엔진은 공간 시뮬레이션을 수행하지 않는 한 대부분의 목적을 위해 시뮬레이션하고 "충분히 정확"하기 때문에 비교적 뉴턴 식 역학을 사용하여이를 수행합니다.

이론적으로 "순수한"물리 엔진은 세 가지 입력을받습니다.

  • 마지막 "틱"(엔진이 모델링해야하는 마지막 순간)을 기준으로 한 세계의 상태 (객체, 위치 및 속도)
  • 마지막 진드기 발생 후 시간이 얼마나 지났습니까?
  • 마지막 진드기 이후 세계의 다양한 물체에 작용 한 힘의 목록

엔진은 관성과 힘을 고려하여 물체를 움직입니다. 물리 엔진의 출력은 단순히 "세계"의 새로운 상태이며 , 게임은 필요에 따라 읽고 수정할 수 있습니다.

실제로 물리 엔진이 반드시 "순수한"것은 아닙니다 . 물체는 생성되고 파괴되어야하며 때로는 물리 엔진의 법칙이 허용하지 않는 방식으로 움직여야합니다. 때로는 엔진 외부에서 수행 할 수도 있지만 때로는 내부에서 수행되기 때문에 엔진에 더 많은 입력이 필요합니다. 그러나 위에서 언급 한 세 가지 입력은 기본 사항을 다룹니다.

예를 들어, 게임에서 조이스틱을 사용하여 캐릭터를 움직여야한다고 가정 해 봅시다. 물리 엔진을 사용하지 않는 경우 이는 매우 간단합니다. 사용자가 조이스틱을 움직이고 있다는 것을 알면 그에 따라 객체를 움직입니다. 물리 엔진을 사용하면 오브젝트를 직접 이동하지 않습니다. 오브젝트를 이동하려는 방향에 해당하는 힘을 가해 엔진이 실제로 움직일 수 있도록합니다 .

차이점이 뭐야? 세계에 다른 것이 없더라도 물리 엔진은 현실적인 가속과 같은 것을 처리하기 때문에 객체가 거의 같은 방식으로 움직이지 않을 것입니다. 그러나 관성에 따라 다른 힘이 물체에 동시에 작용할 수도 있으며 엔진이 모든 힘을 고려합니다 . 예를 들어, 물체에 북쪽으로 힘을 가하지 만 다른 물체가 서쪽으로 힘을 가하면 (또는 물체가 이미 서쪽으로 움직이고 있고 속도가 느려지지 않는 경우) 엔진이 물체를 북서쪽으로 움직입니다.

그것은 물리 엔진이 당신을 얻는 것입니다 : 그것은 물체, 그들의 위치와 속도, 그리고 그것들에 작용하는 힘을 추적합니다. 역학의 법칙 덕분에 게임 개발자가 아니더라도 추가 작업을 수행하지 않고도 충돌, 마찰 및 중력과 같은 것을 자동으로 처리하기 위해 자체적으로 힘을 만들 수도 있습니다.


1

물리 엔진은 기본적으로 물리 바디의 시뮬레이터입니다.

입력

질량, 크기, 밀도 등과 같은 물리 속성을 지정하여 바디 (또는 여러 바디)를 만들 수 있습니다.

또한 시뮬레이션이 발생하는 물리 세계의 속성 (예 : 중력)을 정의 할 수 있습니다.

마지막으로 몸에 힘을가하거나 관절을 만들 수 있습니다.

산출

이 모든 것을 정의한 후에는 시뮬레이션을 시작할 수 있으며 물리 엔진은 다음 타임 스텝 (일반적으로 게임의 다음 프레임에 해당) 에 모든 바디가 배치 될 위치를 알려줍니다 . 그리고 다음은 ...

게임 엔진이 물리 엔진에 요청하는 모든 프레임 때문에 스프라이트가 화면에서 움직이는 것을 볼 수 있습니다

이 몸은 지금 어디에 있습니까?

게임 엔진은 그에 따라 그래픽 표현을 업데이트합니다.

고려 사항

나는 보통 물리 엔진을 물리 법칙을 선언적인 방식으로 적용하는 도구처럼보고 싶다 .

실제로 다음 타임 스텝에서 바디가 어디에 있을지를 결정하기 위해 어떤 계산을 수행해야 하는지를 설명하는 코드를 작성하는 대신, 나는 신체 (및 물리 세계 자체)의 속성을 설정하는 물리 세계를 간단히 설명하고 물리 엔진이 응답하게했습니다. 그 질문


귀하의 '고려 사항'섹션이 실제로 명확하지 않습니다 (나에게). 보다 명확하고 구체적 / 실용적으로 개선하면 (예 : 관찰, 구축 등의 실제 시스템 예제 제공) +1을 줄 것입니다.
code_dredd

@ray : 제안 해 주셔서 감사합니다. 최대한 빨리 해결하겠습니다!
Luca Angeletti

당신이 끝난 후에 나에게 의견을 쏴 서두르지 마십시오. 나중에 다른 사람들에게 유용 할 것입니다.
code_dredd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.