본문으로 바로가기

법선 벡터의 변환

3D 물체의 버텍스 정보에는 위치정보와 함께 법선 벡터 정보가 들어갈 수 있다. 버텍스에 변환(이동, 회전, 스케일)을 적용할 때 위치정보는 변환을 그대로 적용하면 원하는 좌표로 이동이 가능하다. 하지만 버텍스 정보에 변환을 적용할 때 "비균등 스케일" 인 경우 변환 행렬의 "역전치 행렬"을 적용해야 한다. 이번 글에서는 이러한 이유를 다룬다.

법선 벡터의 비균등 스케일 적용 시 문제점

법선벡터에 비균등 스케일 변환 행렬\(A\)(\(x,y,z\) 의 크기가 다른 경우)를 적용하면 다음과 같이 표면에 대한 수직이 유지되지 않는다.

(a) u와 n은 수직. (b) 비균등 스케일 적용으로 u와 n이 수직하지 않음. (c) 법센 벡터에 역전치행렬 적용으로 새로운 법선 벡터 계산

역전치 행렬을 사용 이유

법선 벡터에는 변환 행렬\(A\)를 역전치를 적용 후 \((A^{-1})^T\) 곱하면 표면과 직각을 유지할 수 있다.

역전치 행렬을 사용할 경우 직각이 유지되는 이유를 아래의 유도과정으로 살펴본다.

유도 과정

법선 벡터를 적용할 새로운 변환행렬을 \(X\) 할 때 그 유도식은 다음과 같다.

 

 

\(uA \cdot nX = 0\)    
\(u \cdot v = 0 \)   표면 벡터와 법선 벡터가 직교
\(un^T = 0 \)   벡터 내적을 행렬 곱셈 형태로 표현
\(u(AA^{-1})n^T = 0 \)   단위 행렬 \(I = AA^{-1}\)
\((uA)(A^{-1}n^{T}) = 0\)   행렬곱셈의 배분 법칙
\((uA)((A^{-1}n^{T})^{T})^{T} = 0\)   전치 항등식 \((A^T)^T = A\) 적용
\((uA)(n(A^{-1})^T)^T = 0\)   전치 항등식 \((AB^T)^T = BA^T\) 적용
\(uA \cdot n(A^{-1})^T = 0\)   행렬 곱셈을 벡터 내적 형태로 표현
\( \therefore X = (A^{-1})^T\)    
     

위와 같은 이유로 법선 벡터에 변환 행렬을 적용할 때는 변환 행렬의 역전치 행렬을 적용해야 한다.


출처:

한빛미디어 출판: <DirectX 12를 이용한 3D 게임 프로그래밍 입문>