gksrudtlr
|2025. 1. 23. 10:08
슬라이딩 벡터란?
- 게임 개발에서 물리기반 캐릭터 움직임, 물체 충돌, 경사면상에서 이동을 처리할 때 사용
- 물체가 어떤 표면에 충돌했을 때, 그 표면의 법선(Normal) 벡터를 기준으로 물체가 반동하지 않고 표면을 따라 미끄러지는 방향을 계산하는데 활용
- 캐릭터 컨트롤러나 물리 시뮬레이션에서 경사면을 걸어 올라가거나 내려갈 때, 물체가 벽이나 장애물에 부딪힐 때 자연스러움 움직임을 구현하는데 매우 중요
필요한 이유
- 물리적 충돌 처리
- 물체가 표면에 부딪힌 후 반사나 정지하는 대신 표면에 붙어서 이동하도록 만들기 위해 필요
- EX) 캐릭터가 경사면을 걸어 올라갈 때, 벽이나 지면과 부딪히는 상황에서 현실감 있는 이동 시뮬레이션
- 캐릭터 이동 제어
- 벽이나 장애물에 부딪힐 때 움직임이 비정상적으로 끊기거나 멈추지 않도록 부드럽게 흘러가도록 도와줌
- EX) FPS 게임에서 플레이어가 벽을 스치듯이 달릴 때 자연스러운 미끄러짐
수학적 계산
- 기본 벡터 정의
- 입사 속도 벡터 V : 물체의 현재 속도를 나타냄
- 표면 법선 벡터 N : 충돌한 표면의 수직 벡터를 나타냄, N은 반드시 단위 벡터여야 함
- 슬라이딩 벡터 계산 공식
- 슬라이딩 벡터는 속도 벡터 V를 표면 법선 N에 대해 분해한 결과를 사용해 계산함
$V_slide = V - (N\cdot V)N$
- $(N \cdot V)$ : 법선 벡터 N과 속도 벡터 V의 스칼라 곱(내적)
- $(N \dot V)N$: 법선 방향으로 투영된 벡터(표면 법선에 수직인 성분을 제거)
- $V_slide$ : 슬라이딩 방향의 최종 벡터
- 결과
- 슬라이딩 벡터 $V_slide$는 물체가 표면 위에서 미끄러지는 방향과 크기를 나타냄
게임에서의 활용
- FPS 게임의 캐릭터 충돌
- 캐릭터가 벽에 부딪혔을 때, 정지하거나 반사되는 대신 벽을 따라 미끄러지도록 만들어 더 자연스러운 움직임 구현
- 경사면 위 이동
- 캐릭터가 경사로 올라가면 내려갈 때, 중력이나 다른 힘이 캐릭터를 표면에 따라 미끄러지도록 구현
- 중력 벡터를 표면에 대해 슬라이딩 벡터로 변환하여 캐릭터가 경사면에 붙어 이동하도록 구현
- 충돌반응
- 물체가 벽에 부딪힐 때 반사각 대신 슬라이딩 방향을 계산해 더 부드러운 퉁돌 효과를 만듦
슬라이딩 동작 조정
- 마찰 계수 : 슬라이딩 속도를 줄이거나 제어하려면 마찰 계수를 곱하여 감속을 적용할 수 있음
- 클램프 속도 : 속도가 너무 느려지면 슬라이딩을 멈추도록 최소 속도 제한을 추가
- 중력 반영 : 경사면 위에서 중력 방향 벡터를 계산하여 표면에 수직이 아닌 방향으로 캐릭터를 밀도록 설