노멀맵핑
픽셀들의 노말값을 가지고있는 노말맵의 이미지를 이용해서 명암을 연산하면 명암값이 디테일하게 들어갈수있다.
3D상의 노말을2D로 옮기면 다른 노말이 같은 노말로 표현될수있다.
그냥 노말값을 가져와서 곱해주는것은 안된다.
현재 픽셀의 정점으로 받아온 노말을 Z축의 양의 방향으로 인지한다.
좌표계를 기준으로 노멀을 만들어서 텍스처에 저장한다.
이를 월드로 가져와서 빛연산을하자.
탄젠트 스펙이스 라업룩을 좌표로 정의된 노말을 월드스페이스로 가져오는 연산을 수행하자.
라업룩 세개로 라업룩 월드행렬을 만들고 이미지로부터 받아온 노말을 곱한다.
-> 이미지로부터 받아온 노말을 월드스페이스로 변환하기위한 연산.
로컬스페이스의 라업룩을 월드로 치환 라업룩으로 월드행렬을 만들고 정점들에 다곱해주면 월드스페이스로 이동한걸로볼수있다.
이 방식으로 접선공간의 노말벡터를 월드스페이스로 옮기기위한 행렬을 만들자.
하이어라키로더에서 Element[]에 탄젠트를 정의해주자.
pMeshCotainer->pSkinInfo가 변경된 정점정보를 알고있어야한다.
SetDeclaration에 Element를 인자로 전달해서 호출해주자.
CloneMeshFVF를 CloneMesh로 수정해주자(FVF는 수정하지않았기때문)
D3DXComputeTangent함수로 탄젠트를 계산해서 넣어주자.
ShaderMesh에서 VS에서 탄젠트와 바이노말 추가해주자.
탄젠트와 바이노말 연산해주자.
탄젠트는 월드매트릭스 곱해주고
바이노말은 노말과 탄젠트 순으로 외적해주자.
PS에서 행렬을 만들어주자.
탄젠트 바이노말 노말로 TBN행렬을 만들어주자.
이행렬을 노말텍스처를 통해 노말값을 받아와서 곱해주자.
이 노말도 0~1로 보간되어있다.
오브젝트들에서 텍스처가 있을경우만 던져주자.