일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Specular
- Toon Shader
- AppSW
- VR
- C언어
- 메모리 누수
- Virtual Byte
- 게임 수학
- ASW(Application SpaceWarp)
- working set
- 가상 바이트
- Cell Look
- ColorGradingLutPass
- URP로 변경
- Rim Light
- URP
- Three(Two) Tone Shading
- 개인 바이트
- OculusMotionVectorPass
- 3d
- Private Bytes
- 벡터
- Cell Shader
- 프로그래밍 기초
- Windows Build
- 작업 집합
- Cartoon Rendering
- Today
- Total
WinCNT
Physics 본문
물리
중학교 1학년 수준의 물리만 알아도 기본적인 것은 가능하다
원과 원 충돌이 가장 간단하게 계산된다
마찰과 탄성을 생각하면 점점 어려워짐
물리의 기초는 고전 역학 부분 = 운동 에너지와 운동에 대한 것 등등
게임 엔진에서의 물리 엔진은 독특하다
그래픽스 엔진과 마찬가지로 어디까지나 근사치이며 모델링의 결과물임
하지만 우리의 눈 또한 마찬가지로 근사치일 뿐
(2가지 조금 다른 2차원 이미지로 3차원을 인식하는 등)
PBR이나 광원을 보존하는 것도 상당히 현실과 비슷하긴 하지만 근사치이다
또한 Loop 안에서 매 프레임당 이산된 처리의 특성을 가진다
1프레임 = 약 0.016초(인간의 인지의 한계는 약 0.1초)
이산된 연산(!)이라는 부분에서 물리 엔진의 태생적인 한계가 존재한다
Collision Detection 이후
키워드
충돌 이후의 물체의 움직임은 어떻게 되는가?
기본적인 물리에서 필요한 것은
운동 방정식 이상, 스프링 운동 미분 방정식 이하 정도의 수준
속력은 방향성이 없고, 속도는 방향성이 있음
속력 = 거리(의 변화량) / 시간
가속도 = 속도(의 변화량) / 시간
가속(도) 운동
어떤 물체의 속도 혹은 속력이 증가하는 운동을 의미한다
다음과 같이 분류할 수 있다
- 등속(도) 운동
- 가속(도) 운동
- 등가속(도) 운동
- 감속(도) 운동
등속(도) 운동
단위 시간 당 동일하게 움직이는 운동
정확한 의미의 등속 운동은 힘을 한 번 가하고 다시 가하지는 안 해야 해서
마찰력, 공기 저항, 코리올리
등가속 운동
속도의 변화량이 일정함(접선의 기울기의 변화량이 일정함)
(가속도 공식, 역학적 에너지)
하지만 우리가 하는 프로그래밍에서는 가속도 공식 등을 사용하지 않는다
왜냐하면 매 프레임마다 계산(즉 미분과 비슷)을 하기 때문이다
그래서 더하기 공식만으로 가속도 공식을 대체할 수 있다
물론 이산적으로 계산하지 않을 때는 공식을 써야 한다
(슈륙탄을 던질 때의 예측 궤도 등)
실제 게임을 만들 때의 공식은
Vetor = Vector + 가속도
position = position + Velocty
delta Vector
- 충돌 감지를 시도
- 충돌한다면, 서로 겹친 영역을 계산
- 겹친 영역을 기반으로 반사 벡터를 계산
- 반사 벡터로 대표되는 적절한 delta Vector 계산
- delta Vector를 각 물체의 속도에 더해줌?
Circle Collision
Circle Collision은 계산이 간단하다
중점과 중점의 벡터를 연산하면 된다
토크는 나중에 생각한다고 치고
운동량과 탄성까지는 설정할 수 있음
면과 원
문제는 원과 원의 충돌이 아닐 때(어려움)
게임에서의 물리 엔진
게임에서의 물리 엔진은 인과율에 적용되는 경우는 별로 없다
대부분은 이펙트를 위해 사용한다
물론 예외는 항상 있다
물리 엔진 자체가 게임의 핵심이 되는 게임 등(예: 비시즈)
그래도 상용 물리 엔진으로도 충분히 정교한 물리 엔진을 구현할 수 있다
Rigid Body
강체
물리학에서 형태가 고정되어 변하지 않는 물체
물리 엔진에서 구현하기 비교적 쉽다
강체에서 힌지, 문, 돌아가는 것, 사슬, 천...등등으로 발전함
Soft Body
연체
강체와 달리 형태가 변할 수 있는 물체를 의미한다
머리카락, 천, 지글본
지글본(Jiggle Bone)
물리 효과가 추가되어 실제와 같이 움직이는 본을 의미한다
예시) 머리카락의 본, 스커트의 본 등
이산(discrete), 연속(continuous)
물리적 체크를 어떻게 할 것인가
Bullet Through Paper Issue(Problem)
총알이 너무 빠르게 움직여서 종이의 충돌 감지 영역을 넘을 때 등등
최적화, 기타
Sleeping
Constraints
Contact Caching
참고 사이트
https://www.toptal.com/game/video-game-physics-part-i-an-introduction-to-rigid-body-dynamics
SSS
'게임 프로그래밍(학습 내용 정리) > 2D Game Programming' 카테고리의 다른 글
Transform (0) | 2022.01.12 |
---|---|
Collision Detection (0) | 2022.01.07 |
Direct2D (0) | 2022.01.06 |
2D 게임 프로그래밍의 간략한 역사 (0) | 2022.01.05 |