Max Export - 3

반응형

얼추 노드에서 메시를 얻어 필요한 정보들을 얻는 방법들을 이전 글에서 정리 했었다.

이전 글에서 노드에서 얻은 값들은 아래와 같다.
posWorld : 월드상의 위치값
normal : 노말값
uvVert : 텍스쳐 좌표값
texName : 사용하는 텍스쳐 이름
color : 정점 색깔
vertexIndex : 정점의 인덱스값

ase export를 해본 사람은 알겠지만 max와 directx와의 좌표계는 다르다.
max는 오른손 좌표계를 쓰고 dx는 왼손 좌표계를 사용한다.

왼손좌표계와 오른손 좌표계에 대한 설명은 아래 링크중 ASE Animation에
그림으로 잘 나와있다.
늘 써오던 dx의 왼손좌표계를 기준으로 오른손 좌표계는 y와 z만 바꿔주면 된다.

그리고 좌표가 바뀌면서 face의 인덱스 순서도 같이 바꿔줘야 한다.

max에서의 이미지 좌표또한 dx와 다르다.
dx는 2차원으로 보면 x는 오른쪽으로, y는 아래로 갈수록 + 지만
max에서 사용하는 st좌표계는 y값이 위로 갈수록 +이다.
즉, y축이 반대로 되어 있다.

swap(posWorld.y, posWorld.z)
swap(faceindex[2], faceindex[1])
texCoord.y = 1.0f - texCoord.y;

위의 의사코드처럼 처리해 주면 된다.

이제 슬슬 탄젠트 값도 구해줘야 겠다.
노말없이 걍 대충할거면 그다지 필요가없겠지만...쩝..
노말맵을 사용하기 위해서는 탄젠트 공간과 오브젝트 공간 사이의 변환이 필요하다.
노말맵에 저장된 값은 탄젠트 공간에 있고 light 벡터등은 object나 월드 공간에 있기 때문에
같은 공간상의 값으로 변환해야 한다.

공간을 맞추는건 보통 탄젠트 공간을 기준으로 하는데
light 벡터나 view 벡터등을 탄젠트 공간으로 변환하는 건 vertex shader에서 한번 변환이지만
노말맵의 값을 object로 변환시키는건 pixel shader에서 매 픽셀마다 해주어야 하기 때문이다.

탄젠트 스페이스 또는 탄젠트 공간이라 불리는 이것은 간단하게 텍스쳐에서의 좌표계로 이해하면 된다. 
그냥 텍스쳐가 사용하는 좌표계이며 노말맵을 모델에 입힐때 사용된다.
노말맵을 모델에 입히려면 텍스쳐 위에 있는 벡터들이 탄젠트 공간인 관계로
이걸 모델 공간으로 변환해야 하는데 이때 필요한 것이 탄젠트 벡터, 바이노말 벡터이다.
모델 표면에서 접선 방향으로의 벡터가 탄젠트 벡터라면 노말벡터와 탄젠트 벡터의 외적이 바이노말 벡터가 된다.

탄젠트 및 바이노말을 계산하는건 아래링크를 참조하면 되므로 패스.

데이터 저장을 위해 삼각형의 데이터 구조를 만들어야 하는데
diffuse map, normal map, position, normal, tangent, binormal, texcoord, color이 전부이다.
나중에 애니메이션이 들어가면 좀 많이 복잡해 지지만 static mesh는 간단간단.ㅇㅇ.

ASE Animation
: http://3dapi.com/bs00_ppt/3d_program11.pdf

3ds max 카메라를 direct3d 카메라로 변환하기
: http://zho.pe.kr/doc/ConvertMaxCamToD3DCam.htm

이미지 좌표계(uv, st)
: http://blog.daum.net/pss_notepad/109

tangent 공간 <=> Object 공간 변환
: http://blog.daum.net/rockeracer/56

tangent space normal map : 노말맵의 필요성, 탄젠트 공간 계산법.
: http://hwixlab.tistory.com/48

탄젠트 스페이스 만들기
: http://mgun.tistory.com/124 (이건 내가 어디서 펌질했는지 기억이 안나네..원문링크도 없고...ㅡㅡ;..)

GPG의 탄젠트 스페이스 관련 글
: http://mgun.tistory.com/828

탄젠트 공간
: http://blog.naver.com/elsacred/50015540325

임의의 mesh를 위한 tangent space basis vector들 계산하기
: http://blog.naver.com/lifeisforu/80116090012

Tangent와 Bitangent를 위한 선형 대수 유도
: http://blog.naver.com/lifeisforu/80117400047

역행렬 계산법 (탄젠트 계산시 필요)
: http://kin.naver.com/qna/detail.nhn?d1id=11&dirId=110403&docId=129076523&qb=7Jet7ZaJ66Cs&enc=utf8&section=kin&rank=3&search_sort=0&spq=0&pid=gwPdzc5Y7uwsscsuZ/4ssc--222645&sid=TweL2dV9B08AAEM6CSE

'Study > Character' 카테고리의 다른 글

Max Export - 4  (1) 2012.01.06
Max Export - 2  (0) 2012.01.05
Max Export - 1  (0) 2012.01.01
유용한 링크들  (0) 2012.01.01
max importer만들기 exporter 만큼이나 쉬운 importer  (0) 2011.05.27
TAGS.

Comments