둠3의 mancubus를 import해서 (
http://gpgstudy.cafe24.com/cafe24board/view.php3?code=t00323401&idx=181&mode=view&page=1) 자체 포맷으로 export 한 다음 노말맵을 적용한 화면이다.
export할 때 tangent space를 위한 tangent 값을 계산한다.
tangent space를 계산하는 방법은
http://www.terathon.com/code/tangent.html <- 이곳에 잘 나와있다.
normal, tangent, binormal 전부를 저장하지 않고 normal, tangent만 넣어주기 위해서 handedness 값으로 binormal의 방향을 결정해준다. (mirroring 된 normal map의 경우 손잡이 값이 음수가 된다.)
실제 쉐이더 코드를 사용할 때
float3 n = vi.normal;
float3 t = vi.tangent.xyz;
float3 b = cross(n, t) * vi.tangent.w;
이렇게 binormal 에 부호값을 곱해주고 있다.
참고로 'DirectX 9 셰이더 프로그래밍(타카시 이마가레)' 책에 나온 노말맵을 설명하는 부분을 보면 '행렬식값이 정규화할 때 사라져버리므로 신경 쓰지 않아도 괜찮습니다.' 이렇게 나와있는데, 신경 안쓰면 안된다.
왜냐하면 그 행렬식 값으로 부호가 바뀔 수 있기 때문이다.
행렬식값을 곱해주지 않고 바로 정규화 해버리면 부호가 정확히 나오지 않을 수 있다.