*벡터의 내적에 대한 자세한 설명은 인터넷에 잘 정리된 글이 많기 때문에 설명하지 않겠습니다.
여기서는 핵심 정리만 하고 예제를 한두개만 살펴보도록 할 겁니다.
벡터의 내적 Dot값 계산하기
언리얼 엔진의 DOT 노드는 벡터의 내적을 말합니다. Dot을 치면 바로 나옵니다.
Dot 은 말 그대로 곱셈입니다.
벡터 x y z 값에 임의의 숫자를 입력해 보겠습니다.
결과값은,
X = 5 * 2 = 10
Y = 4 * 3 = 12
Z = 2 * 4 = 8
최종적으로 Dot의 결과값(float)은 10 + 12 + 8 = 30 이 됩니다.
그렇다면 이 Dot은 언제 유용할까?
그 전에 우리가 알고 있는 것들을 정리해보면,
이 정리를 활용해서, 영벡터가 아닌 두 벡터가 수직일 때
이므로
이다. 따라서
언리얼 엔진에서 확인해 보기
1. 벡터1과 벡터2가 같은 방향을 가리키는 벡터라면?
벡터1과 벡터2가 같은 방향을 바라보는 벡터라면 Dot 값은 1이 출력된다.
2. 벡터1과 벡터2가 각각 다른 방향을 본다면?
벡터1과 벡터2가 다른 방향 opposite(180도)을 바라보고 있다면 Dot 값은 -1이 출력된다.
3. 벡터1과 벡터2가 Tangential 하다면? (수선의 발을 내렸을 때 접하고 있다면?)
벡터1과 벡터2가 tangential 탄젠트, 즉 음 접선을 내렸을 때 직각이 되는 경우에 그 Dot값은 0이다.
위의 정리와 동일한 결과값을 확인할 수 있다.
*항상 속도 등 벡터를 활용할 때 Normalize 까먹지 말고 해주기!
*언리얼 Dot의 직접적인 예제 하나
예를 들어 주황색 세로축이 플레이어 (카메라)가 바라보는 방향(곳)이라고 가정하고(what the players are looking at),
빨간 가로축은 이아폰(임의의 물체)이 전방을 가리키는 각도라고 가정해 보자. (forward facing angle of a Iphone)
Dot내적을 활용해서 플레이어가 아이폰을 바라보는지 아닌지 수치로 나타낼 수 있다.
주황섹 세로축이 바라보는 점(방향)을 우측으로 움직여 보면,,
아이폰의 전방을 바라보는 각도(방향)와 플레이어가 전방을 바라보는 각도(방향)이 같으면 Dot값은 1
이제 점을 반대편으로 움직여서
플레이어가 바라보는 방향(점)이 반대로 가면 갈수록 수치는 작아져서,
딱 정 반대 방향을 가리키면,
아이폰이 바라보는 방향과 플레이어가 바라보는 방향이 정반대이므로 Dot값은 -1
이 수치는 굉장히 유용하다!
예시를 하나 들어보면, 이렇게 활용해 볼 수 있다. Github에 올라온 소스 파일 중에 하나인데,
https://github.com/MWadstein/wtf-hdi-files
이런 식으로 메테리얼 노드를 만들고 상자에 적용하면,
상자를 내 카메라가 정면으로 바라보면 녹색
정면에서 멀어질수록 (노란색을 거쳐) 빨간색이 되어 버린다!
완전 반대 방향이 되면 절대값 abs를 사용해서 1이 되므로 다시 녹색이 되는데 카메라에 보이지 않으니 확인할 방법은 없으나 맞을 것이다.