본문 바로가기

카테고리 없음

[UnityShader] 벡터, 행렬

https://sunsimu1018.tistory.com/21

 

[Unity Shader] 좌표계, 벡터

오늘 주제는 공간, 위치, 방향 등등 입니다. 머리가 딱딱해져서 잘 안돌아가네요. 좌표계란? 아래 이미지는 3D 툴을 이용한 적이 있다면 자주 본적 있는 모습입니다. 씬 내에, 어느 공간에 오브젝

sunsimu1018.tistory.com

 

이어서 벡터에 대해 더 자세하게 배워봅시다.

 

벡터의 덧셈 (A+B)

 

시점이 일치하는 벡터는

A벡터와 B벡터를 변으로 하는 평행사변형을 그리면 생기는 꼭짓점과 시점을 연결하면 A+B값이 나오게 됩니다.

 

또는 B벡터의 종점에 A벡터의 시점을 이을 경우 마찬가지로 A+B값이 나옵니다.

 

 

 

벡터의 뺄셈 (A-B)

벡터의 -는 방향이 역으로 뒤집히게 됩니다. 좌표로 보면 1에서 -1로 이동한 것과 같죠.

 

 

벡터에는 위치값이 상관없기 때문에 위와 아래의 값은 같게 됩니다.

결과를 보면 B가 바라보는 방향이 나오게 되었습니다. 순서에 따라 A가 바라보는 방향이 나올수도 있겠죠.

 

이와 같이 벡터의 뺄셈은 오브젝트가 바라보는 방향이 됩니다.

3차원 벡터에서 수평 벡터를 구하려면?

높이를 나타내는 z축을 0으로 만들어줍니다.

이후 정규화 하고, 벡터에 길이를 곱해주면 위로 향하던 벡터와 같은 길이를 구할 수 있습니다.

 

정규화 Normalize
 길이가 1이 아닌 벡터를 강제로 1로 조정하는 것

 


벡터의 내적 Inner Product

 

 

A · B= cosθ

 

벡터는 크기와 방향을 가지고 있어 일반적인 곱셈과 다릅니다. 

벡터의 내적은 스칼라곱(scalar product) 또는 내적을 구할 때 기호 ( · )을 사용해 dot Product라고 부르기도 합니다.

 

노말 벡터(n)와 라이트 벡터(d)의 크기가 1이라 가정하고 라이트 벡터를 뒤집어(1-x) 내적을 구하면 0도에서 180도 까지의 값이 나오게 됩니다.

 

 

 

그 후 구해진 내적의 값과 노말 벡터의 값을 통해 float1의 값이 나옵니다.

0˚=1  

90˚=0   

180˚=-1

숫자를 색으로 봤을 때 흰색에서 검정까지 나타나게 되죠. 

 

 

 

유의해야 할 점은 코사인 그래프의 곡선을 보면 알 수 있습니다. 45˚에서 그래프는 0.5의 위치에 있지 않습니다. 45˚에서 값은 0.7정도로 나오게 됩니다.

 


 

행렬 (공간변환)

더보기
아직 머리가 복잡복잡 합니다. 이해가.....매트릭스에 대해 이해가 되지 않습니다.

 

행렬 자체는 행과 열을 이용한 배열. 쉐이더에서는 4x4float4 (x,y,z,w) 를 주로 사용한다고 합니다.

 

 

벡터의 MVP 변환

MVP? Model(객체), View(카메라), Projection(공간)의 약자입니다.

 

좌표 공간의 종류는 순서대로

로컬 스페이스> 월드 스페이스> 뷰 스페이스> 클립 스페이스> 씬 스페이스

로 나눠집니다. 

공간 변환이 적용될 시 그 오브젝트의 로컬 스페이스에서 이동, 회전, 스케일한 값만큼 곱하게 됩니다. 

 

유니티에서 변환 작업을 계산해주는 내장 쉐이더 변수가 있습니다.

https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html