프로그램은 입력을 받아서 처리하고 출력해야합니다. 물리 엔진은 정확히 입력으로 무엇을 취하고 출력으로 제공합니까?
프로그램은 입력을 받아서 처리하고 출력해야합니다. 물리 엔진은 정확히 입력으로 무엇을 취하고 출력으로 제공합니까?
답변:
물리 엔진은 마치 실제 (또는 실제와 유사한) 물리학의 제약을받는 것처럼 객체의 움직임과 반응을 시뮬레이션하는 역할을합니다. 필자는 일반적으로 독립형 프로그램이 아니라 더 크고 더 흥미로운 프로그램 (예 : 게임)의 구성 요소라는 점에 유의해야합니다.
물리 시뮬레이션에 대한 입력은 일반적으로 속성 (단단하거나 부드러운 지 여부, 질량, 모양 등)과 해당 바디에 작용하는 힘의 모음을 가진 객체 ( "본체") 모음입니다.
해당 입력을 기반으로 엔진은 업데이트 된 바디의 위치와 방향을 시뮬레이션하고 적용합니다 ( "출력"). 일반적으로 객체가 충돌하거나 겹치는 경우, 충돌과 관련된 특정 게임 플레이 로직을 처리하기 위해 클라이언트 코드가 연결될 수있는 콜백 형태의 시뮬레이션 단계 출력에 포함됩니다.
입력 속도, 질량 및 시간, 출력은 새로운 속도입니다. 때때로 회전 / 각 운동량도 입력 및 출력입니다.
본질적으로 물리 엔진은 중력과 충돌의 영향을 시뮬레이션하려고합니다. 더 나은 물리 엔진을 위해서는 객체를 여러 객체로 분할하는 것과 객체의 각도 운동량을 포함하여 객체의 영구적 및 일시적 변형을 모두 포함합니다. 다리를 무너 뜨릴 때까지 몇 대의 트럭이 넘어 질 수 있는지와 같은 스트레스를 시뮬레이션하는 것이 이상적입니다. 공기 저항과 같은 추가 시뮬레이션 변수도 물리 엔진으로 계산되지만 아직까지는 게임에 적용되지 않은 것으로 알고 있습니다.
대부분의 물리 엔진은 어느 정도 전문화되어 있으며 게임에 필요한 지점까지 물리를 시뮬레이션합니다. 자동차 게임을위한 물리 엔진은 종종 3D 사수를위한 물리 엔진과는 상당히 다릅니다. 그리고 골프 게임의 물리 엔진은 골프 공과 개별 잔디 잎의 상호 작용을 과도하게 계산할 수 있지만 고속 충돌 및 자동차의 변형 (골프 공에 닿는 경우)의 처리가 완전히 누락 될 수 있습니다 .
일반적으로 물리 엔진은 게임의 객체가 가능한 모든 시나리오에 대해 특정 애니메이션을 디자인 할 필요없이 환경과 관련하여 현실적인 방식으로 동작하도록하는 데 사용됩니다.
특히 물리 엔진은 일련의 속성 (질량, 관절 등)이있는 모델을 가져 와서 일련의 매개 변수에 따라 게임 내에서 렌더링합니다.
이것의 초기 예제는 래그 돌 엔진 (예 : 언리얼에서) 으로 림프계 가 계단 등으로 떨어지는 방식을 모델링 한 것입니다.
현재의 기술 물리 엔진은 AI, 게임 UI, 컷신 생성 등과 함께 전반적인 게임 디자인 패키지에 밀접하게 통합되는 경우가 많습니다.
당신은 물리 엔진이 게임 디자인의 시작으로 거슬러 올라간다는 것을 확실히 주장 할 수 있습니다. 예를 들어 탁구는 조잡한 물리 엔진으로 간주 될 수 있습니다. 그러나 요점은 물리 엔진이 모션 캡처 나 수동 애니메이션에서 미리 정해진 애니메이션 시퀀스를 사용하는 대신 매개 변수 세트를 기반으로 애니메이션 포인트를 즉석에서 생성 할 수 있다는 것입니다.
다른 답변에서 언급했듯이, 운전 또는 비행 시뮬레이션과 같은 일부 클래스 또는 게임에서 물리 엔진은 게임 플레이의 기초가 될 수 있으며 화면 애니메이션을 구동하는 주요 입력이 될 것입니다. 일반적으로이 용어는지면에서 구축 된 매우 특정한 시뮬레이터가 아닌 개발자 측에서 해당 상황에 대한 매우 구체적인 지식이나 분석을 요구하지 않고 다양한 상황에 적용 할 수있는 범용 도구로 사용되지만 특정 응용 프로그램에 적합합니다.
물리 엔진은 "세계"에서 물체의 움직임을 시뮬레이션하는 역할을합니다 . 오늘날 대부분의 물리 엔진은 공간 시뮬레이션을 수행하지 않는 한 대부분의 목적을 위해 시뮬레이션하고 "충분히 정확"하기 때문에 비교적 뉴턴 식 역학을 사용하여이를 수행합니다.
이론적으로 "순수한"물리 엔진은 세 가지 입력을받습니다.
엔진은 관성과 힘을 고려하여 물체를 움직입니다. 물리 엔진의 출력은 단순히 "세계"의 새로운 상태이며 , 게임은 필요에 따라 읽고 수정할 수 있습니다.
실제로 물리 엔진이 반드시 "순수한"것은 아닙니다 . 물체는 생성되고 파괴되어야하며 때로는 물리 엔진의 법칙이 허용하지 않는 방식으로 움직여야합니다. 때로는 엔진 외부에서 수행 할 수도 있지만 때로는 내부에서 수행되기 때문에 엔진에 더 많은 입력이 필요합니다. 그러나 위에서 언급 한 세 가지 입력은 기본 사항을 다룹니다.
예를 들어, 게임에서 조이스틱을 사용하여 캐릭터를 움직여야한다고 가정 해 봅시다. 물리 엔진을 사용하지 않는 경우 이는 매우 간단합니다. 사용자가 조이스틱을 움직이고 있다는 것을 알면 그에 따라 객체를 움직입니다. 물리 엔진을 사용하면 오브젝트를 직접 이동하지 않습니다. 오브젝트를 이동하려는 방향에 해당하는 힘을 가해 엔진이 실제로 움직일 수 있도록합니다 .
차이점이 뭐야? 세계에 다른 것이 없더라도 물리 엔진은 현실적인 가속과 같은 것을 처리하기 때문에 객체가 거의 같은 방식으로 움직이지 않을 것입니다. 그러나 관성에 따라 다른 힘이 물체에 동시에 작용할 수도 있으며 엔진이 모든 힘을 고려합니다 . 예를 들어, 물체에 북쪽으로 힘을 가하지 만 다른 물체가 서쪽으로 힘을 가하면 (또는 물체가 이미 서쪽으로 움직이고 있고 속도가 느려지지 않는 경우) 엔진이 물체를 북서쪽으로 움직입니다.
그것은 물리 엔진이 당신을 얻는 것입니다 : 그것은 물체, 그들의 위치와 속도, 그리고 그것들에 작용하는 힘을 추적합니다. 역학의 법칙 덕분에 게임 개발자가 아니더라도 추가 작업을 수행하지 않고도 충돌, 마찰 및 중력과 같은 것을 자동으로 처리하기 위해 자체적으로 힘을 만들 수도 있습니다.
물리 엔진은 기본적으로 물리 바디의 시뮬레이터입니다.
질량, 크기, 밀도 등과 같은 물리 속성을 지정하여 바디 (또는 여러 바디)를 만들 수 있습니다.
또한 시뮬레이션이 발생하는 물리 세계의 속성 (예 : 중력)을 정의 할 수 있습니다.
마지막으로 몸에 힘을가하거나 관절을 만들 수 있습니다.
이 모든 것을 정의한 후에는 시뮬레이션을 시작할 수 있으며 물리 엔진은 다음 타임 스텝 (일반적으로 게임의 다음 프레임에 해당) 에 모든 바디가 배치 될 위치를 알려줍니다 . 그리고 다음은 ...
게임 엔진이 물리 엔진에 요청하는 모든 프레임 때문에 스프라이트가 화면에서 움직이는 것을 볼 수 있습니다
이 몸은 지금 어디에 있습니까?
게임 엔진은 그에 따라 그래픽 표현을 업데이트합니다.
나는 보통 물리 엔진을 물리 법칙을 선언적인 방식으로 적용하는 도구처럼보고 싶다 .
실제로 다음 타임 스텝에서 바디가 어디에 있을지를 결정하기 위해 어떤 계산을 수행해야 하는지를 설명하는 코드를 작성하는 대신, 나는 신체 (및 물리 세계 자체)의 속성을 설정하는 물리 세계를 간단히 설명하고 물리 엔진이 응답하게했습니다. 그 질문