탄젠트 공간 노말맵을 공부하는데 '3D 게임 프로그래밍' 이란 책에서 이런 글이 있습니다.
탄젠트 공간 노말맵이란 모든 법선 벡터를 각 정점의 접선 공간으로 변환하여 보관하는 방식으로,
이렇게 하면 모든 법선 벡터는 값이 항상 1.0인 벡터로 변환된다. 그래서 이렇게 만들어진 법선맵은
값이 항상 1.0, 즉 RGB 중에서 B값이 255이므로 전체적으로 푸른색을 띠게 된다.
이게 무슨 뜻인지 잘모르겠습니다.
제가 이해한 노말맵이란 법선 벡터의 XYZ값을 RGB값으로 표현한 맵이라고까지만 이해했습니다.
그리고 탄젠트 공간 노말맵이란 노말벡터값을 텍스쳐 상에서 뽑아낸 맵이라고 알고 있습니다.
근데 위에서 빨간 글씨로 된것들은 무슨 뜻인지 이해가 가질 않습니다.
탄젠트 공간 노말맵 질문...
Moderator: 류광
-
- Posts: 26
- Joined: 2008-02-05 15:36
질문에 대한 정확한 답이 될련지는 모르겠지만 제가 아는 한도내에서 설명해드리겠습니다.
먼저 탄젠트 공간(접선 공간)이라 함은, 어떤 물체의 각 정점들에서 법선벡터가 항상 양의 z축을
가르키도록, 각 정점에서 표면에 접하는 두개의 접선벡터를 이용하여
직교기저(3개의 직교 하는 x,y,z축을 말합니다)를 만들어 구성한 좌표계를 말합니다.
말만 좀 어려운데, 위의 사항은 3D 게임 프로그래밍& 컴퓨터그래픽을 위한 수학 책의 접선공간부분을
보시면 더 자세히 아실수 있을듯 합니다.
그럼 아래에서 질문하신 부분에 대해서만 간단히 설명 드리겠습니다.
일단 쉽게 말하자면, 탄젠트공간(접선 공간)은 좌표계라고 볼수 있습니다.
그렇기 때문에 로컬->월드 좌표계 변환같은 좌표계 변환을 생각해 보시면 이해가 쉬울듯 합니다.
어떤 좌표계안에 있는 법선벡터 P(0,0,1) 를, 그 좌표계를 나타내는 월드기준 축 3개(X,Y,Z 라 하겠습니다)
로 구성된 3x3행렬 M 에 다음과 같이 곱하면 값은 (Zx, Zy, Zz) 가 나오게 됩니다.
Xx Yx Zx
Xy Yy Zy * P(0,0,1)
Xz Yz Zz
여기서 이 어떤 좌표계가 탄젠트공간(접선공간) 이고,
위의 행렬 M은 탄젠트 공간 -> 월드 공간으로 바꾸는 행렬이라 볼수 있습니다
자 이젠 법선값들이 이런 탄젠트 공간안에 있다고 생각하고, 그 법선값들을 법선맵에 기록합니다
그런데 위에서 말했듯 이 좌표계안에서는, 아무 굴곡이 없다 했을때 즉 평평하다 했을때
법선벡터가 (0, 0, 1) 입니다.
그렇다면 이 좌표계에서의 법선값의 범위는 (-1.0~1.0, -1.0~1.0, 0.0 ~ 1.0 ) 이겠지요?
그러므로 법선맵은 B 값이 진하므로 푸른빛을 띄게 됩니다.
그리고 M의 역행렬은 월드 공간 -> 탄젠트 공간으로 바꾸는 행렬입니다.
실제로 사용될때는 Light의 방향을 M의 역행렬과 곱해 Light 방향을 탄젠트 공간으로 바꾼후
법선맵에 있는 법선값들과 라이트 연산을 합니다.
또 각정점별로 위의 행렬 M을 구하기 위해 각 정점별 탄젠트 공간의 축 3개(T,B,N)을 구해야 하는데
이것도 위의 책이나 구글링을 해보면 자료를 얻으실수 있습니다.
설명을 간단히 하느라 중요한 부분들을 빼먹어 오히려 잘못 전달될까 걱정이 되네요
그럼 다른분들이 더 좋은 의견을 꾸벅-
먼저 탄젠트 공간(접선 공간)이라 함은, 어떤 물체의 각 정점들에서 법선벡터가 항상 양의 z축을
가르키도록, 각 정점에서 표면에 접하는 두개의 접선벡터를 이용하여
직교기저(3개의 직교 하는 x,y,z축을 말합니다)를 만들어 구성한 좌표계를 말합니다.
말만 좀 어려운데, 위의 사항은 3D 게임 프로그래밍& 컴퓨터그래픽을 위한 수학 책의 접선공간부분을
보시면 더 자세히 아실수 있을듯 합니다.
그럼 아래에서 질문하신 부분에 대해서만 간단히 설명 드리겠습니다.
일단 쉽게 말하자면, 탄젠트공간(접선 공간)은 좌표계라고 볼수 있습니다.
그렇기 때문에 로컬->월드 좌표계 변환같은 좌표계 변환을 생각해 보시면 이해가 쉬울듯 합니다.
어떤 좌표계안에 있는 법선벡터 P(0,0,1) 를, 그 좌표계를 나타내는 월드기준 축 3개(X,Y,Z 라 하겠습니다)
로 구성된 3x3행렬 M 에 다음과 같이 곱하면 값은 (Zx, Zy, Zz) 가 나오게 됩니다.
Xx Yx Zx
Xy Yy Zy * P(0,0,1)
Xz Yz Zz
여기서 이 어떤 좌표계가 탄젠트공간(접선공간) 이고,
위의 행렬 M은 탄젠트 공간 -> 월드 공간으로 바꾸는 행렬이라 볼수 있습니다
자 이젠 법선값들이 이런 탄젠트 공간안에 있다고 생각하고, 그 법선값들을 법선맵에 기록합니다
그런데 위에서 말했듯 이 좌표계안에서는, 아무 굴곡이 없다 했을때 즉 평평하다 했을때
법선벡터가 (0, 0, 1) 입니다.
그렇다면 이 좌표계에서의 법선값의 범위는 (-1.0~1.0, -1.0~1.0, 0.0 ~ 1.0 ) 이겠지요?
그러므로 법선맵은 B 값이 진하므로 푸른빛을 띄게 됩니다.
그리고 M의 역행렬은 월드 공간 -> 탄젠트 공간으로 바꾸는 행렬입니다.
실제로 사용될때는 Light의 방향을 M의 역행렬과 곱해 Light 방향을 탄젠트 공간으로 바꾼후
법선맵에 있는 법선값들과 라이트 연산을 합니다.
또 각정점별로 위의 행렬 M을 구하기 위해 각 정점별 탄젠트 공간의 축 3개(T,B,N)을 구해야 하는데
이것도 위의 책이나 구글링을 해보면 자료를 얻으실수 있습니다.
설명을 간단히 하느라 중요한 부분들을 빼먹어 오히려 잘못 전달될까 걱정이 되네요
그럼 다른분들이 더 좋은 의견을 꾸벅-
-
- Posts: 322
- Joined: 2006-01-18 13:25
-
- Posts: 52
- Joined: 2008-01-16 12:18
- Location: 일반인
일반적인 노말맵의 개념은 그레이오거님 링크가
아주 설명이 잘 되어 있군요.
그리고 ..
제 생각에도 존 님의 가설 (?) 이 맞는 거 같아요.
% 항상 존님 따라서 글을 쓰는 경향이 있네요.
실제로 노말맵 텍스쳐 에서 tex2D 를 한 담에 그 rga 값에
플러그인에서 부터 버텍스 쉐이더 타고 넘어온 후 월드로 환산된
inWorldNormal, inWorldBasis, InWorldTanget 로 만든
3*3 매트릭스를 만든 담에 그걸 노말맵rga 값에 곱하면
픽셀당 월드 노말 벡터값 이 되더군요.
전 게임브리오 쉐이더 기준인데
거기는 모든걸 월드 좌표로 환산해서
광학을 계산하더군요.
일반적인 샘플은 존님 말씀처럼 거꾸로 월드 라이트 위치 등을
탄젠트 스페이스로 환산해서 하기도 하구요.
아주 설명이 잘 되어 있군요.
그리고 ..
제 생각에도 존 님의 가설 (?) 이 맞는 거 같아요.
% 항상 존님 따라서 글을 쓰는 경향이 있네요.
실제로 노말맵 텍스쳐 에서 tex2D 를 한 담에 그 rga 값에
플러그인에서 부터 버텍스 쉐이더 타고 넘어온 후 월드로 환산된
inWorldNormal, inWorldBasis, InWorldTanget 로 만든
3*3 매트릭스를 만든 담에 그걸 노말맵rga 값에 곱하면
픽셀당 월드 노말 벡터값 이 되더군요.
전 게임브리오 쉐이더 기준인데
거기는 모든걸 월드 좌표로 환산해서
광학을 계산하더군요.
일반적인 샘플은 존님 말씀처럼 거꾸로 월드 라이트 위치 등을
탄젠트 스페이스로 환산해서 하기도 하구요.
////////////////////////////////////////////////////
// 나의 드래곤나이트 언제 만렙되나 !
////////////////////////////////////////////////////
// 나의 드래곤나이트 언제 만렙되나 !
////////////////////////////////////////////////////