#3:렌더링이 게임 속 세상을 화면에 보이도록 해준다면, 물리 엔진은 그에 맞춰서 물체 간 충돌이 일어나고 충돌 결과 일어나는 움직임이 물리 법칙에 맞게 일어나도록 해줍니다.
렌더링 월드는 그에 대응되는 피직스 월드가 존재하고, 렌더링된 물체 중 다른 물체와 충돌이 일어나기 원하는 것들은 피직스 월드 안에 그에 대응되는 물체를 가집니다.
이 게임 스크린샷에서 와이어프레임으로 표시된 것이 피직스 월드 안에 존재하는 물체입니다. 렌더링되는 물체는 복잡한 모양일지라도 물리 엔진에서 사용되는 모양은 필요에 따라 단순화시킨 것을 볼 수 있습니다.
#4:게임에 물리 현상을 구현하는 목적은 현실감을 높이기 위해서입니다.
그러나, 현실감에 집착하다 보면 자칫 게임의 재미를 망치고, 리소스를 과도하게 사용하게 될 수 있습니다.
물리 처리는 상당한 리소스가 들어갑니다. 예를 들어, 아무 물리적 물체가 없더라도 피직스 월드를 생성해서 업데이트하는 데만도 0.5~1.0ms가 들어갑니다.
그러므로, 게임에서 물리는 게임의 재미를 더해주는 방향으로 사용되어야 하고, 항상 리소스를 고려해야 합니다.
물리학 지식은 게임 물리를 구현하는데 도움이 되지만 필수는 아닙니다. PhysX과 같은 물리 엔진을 사용한다면 경험으로 대체 가능합니다.
즉, 물리학 지식이 없어도 값을 바꿔가면서 테스트해서 변수의 영향을 이해한다면 물리 엔진을 사용할 수 있습니다.
하지만, 변수들이 서로 영향을 미치는 경우가 많기에 물리학 지식이 없이 변수의 모든 영향을 이해할 수는 없을 것입니다.
당연한 말일 수 있지만, 이해하지 못하는 변수들은 가능한 디폴트 값을 변경하지 마세요. 이해할 수 없는 버그의 원인이 될 수 있습니다.
#8:여기서 설명할 액터, 셰잎, 조인트 등은 PhysX에서 사용되는 개념이고, 이 개념을 실제로 Stingray에서 사용하는 방법은 Stingray와 연동하는 방식에 따른 것입니다.
그러므로, 게임엔진이 바뀌더라도 PhysX를 물리 엔진으로 사용한다면 거의 동일한 개념을 사용하겠지만, 사용법은 달라질 것입니다.
#13:density: 밀도. kg/m^3, 물이 1000
dynamic_friction: 운동 마찰 계수, 보통은 0에서 1 사이, 1을 넘어도 된다.
static_friction: 정지 마찰 계수, 현실에서 운동 마찰 계수보다 크다.
friction_combine_mode: (average, min, multiply, max) 마찰은 두 물체 사이에 일어나는 일이므로, 두 물체의 마찰 계수 중 어떤 것을 적용할지 결정, (평균, 최소, 곱하기, 최대) 두 물체의 컴바인 모드가 다르면, max, multiply, min, average 순으로 선택
restitution: 탄성 계수, 보통은 0에서 1 사이. 충돌 전후의 속도비 탄성 계수가 r인 물체가 1m에서 떨어지면, r^2m만큼 튀어 오른다. (v^2/2 = gh) 탄성 계수가 0.2이면 1m에서 떨어지면 4cm 튀어 오른다.
restitution_combine_mode: (average, min, multiply, max) 충돌도 두 물체 사이에 일어나는 일이므로, 두 물체의 탄성 계수 중 어떤 것을 적용할지 결정,
#14:collision_types: 충돌 그룹 리스트
collision_filters: 충돌 필터 리스트, 이 필터를 가진 shape이 어떤 충돌 그룹에 속하고, 어떤 충돌 그룹에 속한 shape과 충돌하는지 결정하는 필터
is = [] 이 필터를 가진 shape이 속하는 충돌 그룹 리스트
collides_wih = [] 이 필터를 가진 shape이 충돌할 상대 shape이 속하는 충돌 그룹 리스트
collides_with_all_except = [] 이 필터를 가진 shape이 충돌하지 않을 shape이 속하는 충돌 그룹 리스트
두 물체가 충돌하려면, 두 물체 중 하나라도 상대방과 충돌하도록 충돌 필터가 설정되면 충돌한다.