나는 최근에 MW2와 같은 게임을 해왔으며, 프로그래머로서 게임을 어떻게 몰입시키는 지 스스로에게 묻는 경향이 있습니다. 예를 들어 총알 속도를 시뮬레이션하는 방법.
NPC가 총에서 총알을 발사 할 때 총알이 실제로 총에서 지정된 대상으로 이동합니까? 아니면이 부분을 완전히 무시하고 대상에 총알 구멍을 줍니까?
총알이 실제로 총에서 대상으로 이동하는 경우 실제로 어떤 속도로 이동합니까?
나는 최근에 MW2와 같은 게임을 해왔으며, 프로그래머로서 게임을 어떻게 몰입시키는 지 스스로에게 묻는 경향이 있습니다. 예를 들어 총알 속도를 시뮬레이션하는 방법.
NPC가 총에서 총알을 발사 할 때 총알이 실제로 총에서 지정된 대상으로 이동합니까? 아니면이 부분을 완전히 무시하고 대상에 총알 구멍을 줍니까?
총알이 실제로 총에서 대상으로 이동하는 경우 실제로 어떤 속도로 이동합니까?
답변:
대부분의 FPS 게임은 실제 게임 플레이에 레이 캐스팅을 사용합니다. 총알은 즉시 발사되어 발사 될 때 목표물을 때립니다.
그러나 대부분의 게임은 또한 "가짜"추적 프로그램을 사용합니다. 3 발 또는 다른 간격마다 추적자가 총알과 함께 발사되며 추적기는 실제로 빠르지 만 순간적이지는 않습니다. 이것은 시각적 효과로만 이루어지며 게임 플레이에는 직접 영향을 미치지 않지만 사수, 사수에게 신호를주고 방관자에게 총성에 대한 방향 참조를 제공합니다.
이러한 종류의 총알 물리를 사용하는 대부분의 게임은 리코 치가없고 총알 조각이 없으며 일반적으로 선형이기 때문에 비현실적입니다.
ARMA II, STALKER (전체 시리즈)와 같은 일부 게임은 이동 시간, 리 코팅 및 처짐 각도 침투와 함께보다 현실적인 탄환 물리학을 사용합니다. 이 시스템은 레이 캐스팅을 사용하고 있지만 총알 속도에 따라 제한되는 것으로 생각합니다. 이 게임을 통해 총구 속도는 ARMA II에서와 같이 사실적이거나 STALKER 에서처럼 보입니다.
총은 레이저가 아닌 발사체를 발사하기 때문에 현실적인 총알 물리학을 선호합니다.
PlanetSide의 글 머리 기호 코드를 작성했습니다. 우리는 'hitscan'발사체를 몇 개 가지고 있었지만, CPU 제약 조건과 언제든지 사용할 수있는 총알 수를 감안할 때 최대한 발사체를 시뮬레이션했습니다.
히트 스캔의 경우, 종종 단일 레이 캐스트를 사용하여 입력을받는 것과 동일한 프레임에서 영향이 결정됩니다. 레이저 나 다른 초고속 발사체와 같은 무기에 적합합니다. 우리는 발사체의 초기 속도를 너무 높이 올려서 한 번의 틱으로 게임 보드를 가로 지르는 것으로 히트 스캔을했습니다.
히트 스캔이 아닌 총알은 그래픽 프레임 시간 또는 고정 된 타임 스텝에 따라 가속 (로켓 생각), 중력, 공기 마찰, 안내 (열 검색 발사체 생각) 등의 계산으로 적용됩니다. 목표는 타임 스텝에 대한 발사체의 최종 위치를 생성하는 것입니다. 시작점과 끝 점이 설정되면 비행 경로에 근접하고 비행 중에 발생한 충돌을 감지하기 위해 하나 이상의 광선을 캐스트 할 수 있습니다.
히트 스캔 및 히트 스캔이 아닌 발사체에서 충돌시 발생하는 일은 발사체 특성과 충돌하는 표면에 따라 다릅니다. 예를 들어 딱딱한 표면에 부딪 힐 수 있습니다.이 경우 바운스 수를 확인하고 반사 당 위치와 속도를 조정하거나 최대 바운스 수에 도달하면 발사체를 폭발시킬 수 있습니다. 이 시스템에서 로켓의 최대 바운스 카운트는 0입니다. 부드러운 표면에 부딪친 다음 관통력을 확인하여 발사체가 재료 등을 계속 통과해야하는지 여부를 확인하십시오.
작성하는 것은 재미있는 코드였습니다. 또한 비행 경로, 이벤트 등을 시각적으로 검사 할 수 있도록 진행중인 상황에 대한 우수한 디버그 시각화를 작성하는 것이 매우 유용합니다.
게임과 정확성 / 현실성 수준에 따라 다릅니다.
멀티 플레이어 설정에서 촬영 및 손상 모델을 동기화하는 것은 총알이 언제 어디서 언제 발사되었는지, 대상에 부딪 쳤는지 여부 및 경로를 통과 한 다른 물체가 있는지 여부를 정확하게 결정해야하기 때문에 매우 어렵습니다.
따라서 가능한 한 게임 디자이너가 일부 샷을 순간적으로 처리하거나 (한 순간에 모든 사람의 위치 만 고려하면 됨) 총알의 범위를 제한하여 상황을 단순화 할 수 있다고 생각합니다. 운 좋게도 이것은 종종 실제 물리에 해당합니다. 예를 들어, 저격 소총은 고속 라운드를 발사합니다.
많은 게임에서 천천히 움직이는 물체 (예 : 포병, 폭탄, 마커 라운드 등)의 다단계 멀티 스냅 샷 경로를 시뮬레이션 할 수 있지만 비용이 많이 들고 동기화 문제가 더 자주 발생하여 재미있는 유튜브 비디오가 만들어집니다.
또 다른 관심사는 더 큰 공간의 환상을 만들기 위해 별도의 작은 "환경"(예 : 각 방은 개별적으로 시뮬레이션 됨)을 유지하는 게임에 관한 것입니다. 이 경우, "방"의 경계 안에있는 것들이 올바르게 시뮬레이션되어 방의 모든 사람들이 총알이 만드는 공간의 일련의 전환에 대해 업데이트되지만 해당 환경 외부의 사람들은 그렇지 않습니다.
구현에 따라 다르지만 소스 엔진은 실제 총알 (발사체)을 전혀 사용하지 않았다는 것을 알았습니다. 플레이어에서 임의의 "적중 영역"원 (더 큰 반경 또는 더 작은 반경에 의존하는 광선)을 대상으로 광선을 던졌습니다. 그 중심이 플레이어가 목표로하는 지점 인 무기 발사 속도 및 플레이어가 발사 버튼을 누른 경우), 플레이어에서 무작위로 결정된 포인트까지 실제 광선을 결정하고 다른 요인에 따라 (예 : 총알 "무게"및 총구 속도 (모든 내부 번호), 물체 명중 등) 광선 캐스트가 여러 물체를 통과하거나 지형에 닿을 때까지 캐스트되었습니다.
반대로 Torque 3D Engine DID는 실제 발사체를 사용하며 설계자는 개별 속도, 질량 및 중력 수정 자에 영향을 줄 수 있습니다. 모든 엔진은 32 밀리 초마다 값을 업데이트했습니다.
편집하다
Torque 3D 엔진은 발사체를 사용하는 것 외에도 대안으로 레이 캐스트를 사용할 수있었습니다. (저는 "발사체"가 실제로 발사체가 광선 캐스트를 요구하는 것을 지원하지 않는 입자 효과 인 여러 게임을 만들었습니다.)
Team Fortress 2 위키에는 발사체와 히트 스캔 무기의 동작에 대한 멋진 글이 있습니다.
실제로 많은 게임에서 GPU 렌더링 적중 테스트 알고리즘을 사용합니다. 기본 작동 방식은 다음과 같습니다.
1) 오프 스크린은 모든 지형이 검은 색이고 모든 문자가 검은 색이 아닌 현재 뷰의 렌더링을 생성합니다. 2) 십자선 아래에서 픽셀의 색을 얻습니다. 3) 검은 색이 아닌 경우 > 플레이어 매핑을하고 해당 대상에 적중을 적용하십시오.
이 방법은 픽셀 완벽하기 때문에 게임에서 수년 동안 사용되어 왔습니다. 플레이어 모자의 단일 픽셀이 벽 뒤에서 튀어 나와 있으면 그를 칠 수 있습니다. 만약 당신이 그것을 볼 수 있다면, 당신은 그것을 칠 수 있습니다. 이 유형의 정밀도는 간단한 레이 캐스팅 기술로는 불가능합니다. 둘째, 이러한 종류의 테스트는 매우 빠르며 GPU에서 수행 할 수 있습니다.
일부 게임은 의심 할 여지없이 총알 이동 시간과 드롭을 고려하여 현실적인 총알 물리학을 사용하지만 적어도 NPC에서는 대부분의 게임이 그렇지 않다고 생각합니다.
즉각적인 총알 이동 (드롭 없음)을하는 게임의 경우, 게임은 배럴 지점에서 가상 선 (벡터)을 추적합니다. 그런 다음 해당 줄이 교차하는 것을 계산하고 해당 지점에서 글 머리 기호 "적중"을 등록합니다. 벽과 같이 딱딱한 물체 일 수 있습니다.이 경우 충격이 총알 타격 데칼 및 연기 / 파편의 "퍼프"와 같은 효과를 유발합니다. 깨질 수있는 물체에 영향을 미치거나 깨지거나 물리적 물체에 영향을 미쳐 "킥"을 줄 수 있습니다. 또는 플레이어 나 다른 NPC에 타격을 입히고 체력에 타격을 줄 수도 있습니다. 하드 코어 시뮬레이션은 벽을 관통하는 총알을 모델링하고 출구쪽에 타격 효과를 유발하여 출구에서 총알의 피해를 줄입니다.
NPC는 완벽한 목표를 갖지 않기 때문에 많은 게임에서 벡터에 일종의 무작위 화를 추가하여 총알 확산을 모델링합니다. 이것은 실제 상황에서 볼 수있는 것입니다. 총알이 목표 위치를 중심으로하는 것이 아니라 목표 지점을 중심으로 한 패턴으로 맞습니다.
총알 확산을 시각화하려면 직선 (벡터) 대신 총에서 원뿔이 나오는 것을 상상해보십시오. 실제 총알 방향은이 원뿔 안쪽에 무작위로 있습니다. 사수가 실제로 목표에 가까워지면 퍼짐이 작고 정확도가 높습니다. 대상이 멀리 떨어져 있으면 원뿔이 더 넓어 지므로 사수가 대상을 칠 가능성이 줄어 듭니다.
이 샷콘 아이디어는 사수 정확도 (스킬), 무기 정확도 및 기타 조건을 모델링하는 데 사용할 수 있습니다. 예를 들어, 낮은 수준의 NPC에는 낮은 정확도의 샷 콘이 제공 될 수있는 반면, 숙련 된 NPC는 높은 수준의 정확도를 가질 수있다. 엉덩이에서 기관단총으로 사격하는 선수는 넓은 원뿔을 가지게되는데, 이는 달리기를 멈추거나 조준하면 줄어 듭니다. 저격 소총은 권총보다 탄 콘이 더 타이트합니다.
또 다른 전략은 모든 것을 렌더링하고 모든 것을 추적하는 하이브리드입니다. 모든 글 머리 기호를 렌더링 할 필요는 없습니다. 예를 들어, 총이 초당 30 발 발사되면 스트 래프는 수백 개의 입자를 생성 할 수 있습니다. "추적자 효과"를 사용하여 렌더링을 줄이고 매 3 번째 샷을 렌더링하고 다른 두 개를 광선 추적 할 수 있습니다. 플레이어는 여전히 적에게 초당 10 라운드를 발사합니다.
특정 상황에 맞게 조정하면 발사 속도가 낮을수록 더 많이 렌더링 할 수 있습니다.
콜 오브 듀티 (Call of Duty)에서 비디오 재생을 살펴보면 오렌지색의 Biped가 공기를 통해 의도 한 대상으로 날아가는 것을 희미하게 볼 수 있으며, 실제로 Attackinghobo는 대부분의 경우 올바른 답을 가지고 있습니다.
Hobo와 같은 richochet 효과를 원한다면 Halo 게임 중 하나를 실행하십시오. 더 가까운 위치에서 금속 벽을 쏘면 총알이 금속에서 리치 체팅되는 것을 볼 수 있습니다. 저격수는 적중하는 흔적을 남깁니다.
지연된 답변이 완료되었습니다. 나중에 다시 고칠 수 있습니다.
스토커 시리즈 게임의 총알과 모든 물리학은 "Open Dynamics Engine"이라는 오픈 소스 라이브러리를 사용합니다.
http://en.wikipedia.org/wiki/Open_Dynamics_Engine
총알은 중력에 따라 떨어지고 벽에서 떨어져서 튀어 나와 매우 정확하게 튀어 나와도 스마트 한 경우 총알을 구부려서 볼 수없는 사람을 쏴서 자신의 위치를 알 수 있습니다. 글 머리 기호는 실제 객체 모델입니다. 이것은 내가 본 것 중 가장 현실적인 방법입니다. 광선 추적 방법은 넓은 공간으로 이동할 때 실용적이지 않습니다. 그래도 레이저 총을 쏘는 것이 좋습니다.
BloodRayne 2, Call of Juarez, World of Goo, X-Moto 및 OpenSimulator를 사용하는 다른 게임.
또 다른 좋은 선택은 물리 라이브러리 "Bullet"입니다. http://en.wikipedia.org/wiki/Bullet_%28software%29
그랜드 테 프트 오토 4, 레드 데드 리 뎀션 등에서 사용되었습니다.
ps arma 2는 사내 물리 엔진을 사용하고 다음 게임 arma 3은 physX 물리 엔진을 사용합니다