UE4

[UE4] 내적(DotProduct) 와 외적(CrossProduct)에 대한 이해

Honey Badger 2023. 5. 15. 23:40

게임 개발에 있어 벡터 연산은 물리엔진 쪽으로 깊게 들어가면 빼놓을 수 없는 요소다. 3D공간에서 특히 벡터는 직관적이며, 여러가지 문제를 훨씬 효율적으로 해결해준다. 그래서 속도, 바람, 충돌 등 많은 물리계산이 벡터로 표현된다. 

 

내적(DotProduct)

임의의 벡터 A와 B를 가정해보자. 벡터의 내적은 A와 B의 크기를 곱하고 사이각의 Cos값을 곱한 값이다. 결과값은 당연히 스칼라 값이 된다. 그렇다면 내적은 어디에 사용하는 것일까? 

1. 두 벡터의 사이각 구하기

  두 벡터의 사이각을 내적을 통해서 구할 수 있다. 게임에서 두 벡터의 값을 구하는 건 큰 문제가 아닐 것이다. 이 두 벡터를 내적하면 사이각을 구하고 이는 여러 게임 요소에 사용될 수 있다. 

2. 적이 내 앞에 있는지 뒤에 있는지

  나와 적의 벡터 간에 내적을 해서 각도가 -90~90 사이에 있으면 앞, 반대는 뒤로 판별할 수 있다. 즉, Cos값이 0보다 크면 앞, 0보다 작으면 뒤이다.

3. 적이 나의 시야각 안에 들어와 있는지?

내 벡터와 나와 적사이 벡터 간의 내적을 해서 나오는 각도 값이 내 시야각의 반값을 넘지 않으면 시야 내에 존재, 넘으면 시야 밖에 존재한다. 

 

 

외적(CrossProduct)

  벡터의 외적은 내적과 달리 스칼라 값이 아닌 벡터 값이다. 외적은 선형대수학에서 배운 것처럼 행렬식으로 계산할 수 있는데 이 계산은 컴퓨터에서 해줄테니 외적이 무엇인지 어디에 쓰이는지 알아보도록 하자. 먼저 이번에도 임의의 벡터 A와 B를 가정해보자. A와 B를 내적해 나온 결과벡터는 A,B 모두와 수직이라는 특성이 있다. 그렇다면 외적은 어디에 사용하는 것일까?

1. 평면에 수직인 방향을 구할 때 사용한다. 보통 모델링 데이터의 폴리곤 노멀벡터를 구할 때 많이 쓰인다고 한다. 

2. 적이 캐릭터의 오른쪽에 있는지 왼쪽에 있는지 판별할 때 사용할 수 있다. 월드좌표계의 Up방향 벡터를 Up, 캐릭터의 Forward 방향벡터를 F, 캐릭터와 적간에 생기는 벡터를 A라 하면 Det(Up, A, F)값이 0보다 크면 오른쪽, 0보다 작으면 왼쪽임을 판별할 수 있다. 

3. 벽에 부딧혀 미끄러지는 캐릭터의 방향을 계산할 때도 사용할 수 있다. 

 

 

이처럼 생각보다 많은 수학계산이 게임을 만들때 특히 3차원 공간을 정의한다면 발생한다. 지금은 워낙 좋은 게임엔진들이 계산과 구현을 다 해놓았기때문에 쓰일 일은 많이 없겠지만 그래도 이러한 매커니즘을 이해하고 사용하는 것과 아닌 것은 천차만별이다.