탄젠트 스페이스, 종법선... 이 무엇인가요?

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
Tears of Chobo

탄젠트 스페이스, 종법선... 이 무엇인가요?

Post by Tears of Chobo »

게임 프로그래밍 책을 보다가 탄젠트 스페이스, 종법선 등이 나오는데요.
정확히 무엇을 말하는지 몰라 이렇게 질문을 드립니다.
탄젠트 스페이스와 종법선은 무엇인가요?
큐비

Post by 큐비 »

탄젠트 스페이스.. 이건 텍스쳐 스페이스라고도 부릅니다.

말그대로 좌표계가 텍스쳐위에서의 좌표계인데요..

노말맵을 모델에 입힐때 자주 나오는 용어죠.

노말맵을 모델에 입히려면.. 텍스쳐 위에 있는 벡터들이 탄젠트 스페이스인 관계로..

이걸 모델 스페이스로 바꿔줘야 합니다.

이때 필요한것이, 탄젠트 벡터, 바이노멀(binormal==종법선) 벡터인데요..

모델 표면에서 접선방향으로의 벡터가 탄젠트벡터.. (번역하면 접선 벡터임돠..)

노멀벡터와 탄젠트 벡터를 외적한것이 바이노멀 벡터임돠.

이때 탄젠트벡터와 바이노멀 벡터는 여러개가 될수 있는데요,

보통 텍스쳐 좌표를 참조해서 그 방향에 맞춰서 계산해주죠..

범프나 탄젠트 등으로 검색해보시면 좀더 심화학습을 할수 있습니다 ^^
전외솔
Posts: 518
Joined: 2002-07-03 01:24

추가로 .. 사인,코사인 같은 것이 아니라 탄젠트가 쓰이는 이유

Post by 전외솔 »

직각삼각형에서 빗변의 기울기는 높이를 밑변으로 나눈 값입니다.
그런데 이 값은 빗면과 수평선이 이루는 각도의 탄젠트 값입니다.
그래서 기울기를 나타내는 값과 그 각도는 탄젠트 함수를 통한 관계를 가지게 되고,
상호 변환하려 할 때 탄젠트 함수 또는 탄젠트의 역함수를 쓰기 때문입니다.
구재원

저도 추가적으로 말씀드리면...

Post by 구재원 »

우선 윗분들께서 자세히 설명해 주셨지만, 저도 한 말씀 올리겠습니다.

우선 공간(Space)라는 말은 주로 좌표계를 뜻합니다. 예를 들자면 모델 공간 또는 객체 공간등은

x, y, z 축을 가지고 있는 데카르트 좌표계(주로)를 말합니다.

그렇다면 접선공간(Tangent Space) 역시 하나의 좌표계를 말하는데...

간단히 설명하자면 표면의 점(정점X, 텍셀O)을 정의하는 3차원(3개의 축을 가진) 좌표계라고 말할 수 있습니다.

위 설명을 보면 접선공간이 왜 텍스쳐 공간으로 불리지는 이해가 될 것입니다.

그렇다면 표면의 점을 정의한다고 했는데.. 어떤 정보(축 정보)를 기준으로 정의하게 될까요?

바로 접선, 종법선, 법선 입니다. 그림이 있다면 좀 더 쉽게 설명드릴 수 잇지만... 그림이 없는 관계로

말로 최선을 다해 보겠습니다. ^^;;

우선 접선은 표면의 점의 기울기를 말합니다. 그리고 법선은 생각하신대로의 의미입니다. 이럴경우 법선은 접선과는 90도를 이루게 되죠(이해가 안 되셨으면.. 잘 생각해보세요..). 종법선은 말그대로 옆으로 뻗는 법선(?)입니다. 즉 접선과 법선의 외적으로 구하니 두 벡터와는 90도를 이루게 되겠네요.

자 그럼 대충 머리속에 그림이 그려질 것입니다.( 아.. 그림이 아쉽네요... )

탄젠트 공간, 종법선 자체는 그렇게 어려운 개념이 아니니 쉽게 이해 하실 수 있습니다.

그렇다면 이런것들이 쓰이는 이유는 무엇일까요? 바로 픽셀당 조명(Per-Pixel Lighting)을 구현하기 위해서 입니다.

한번 예를 들어 보겠습니다. NormalMap은 텍스쳐의 RGB 정보에 노말벡터 XYZ를 인코딩한 맵입니다.

하지만 그 노말 좌표들은 모두 접선공간을 기준으로 작성됩니다. 이러한 노말들을 객체공간으로 변환시키기 위해서는

정점마다 접선과 종법선, 그리고 법선 정보를 가지고 있어야 합니다. 정점쉐이더에서 접선과 종법선, 법선을 픽셀로 넘긴다음

픽셀 쉐이더에서는 그 정보를 가지고 적절히 보간한다음 객체공간으로 변환할 수 있습니다.

좀더 자세한것은 다른 서적을 참고하세요...

단번에 쓴것이라... 틀린게 많을게 같군요... 그럼 즐프하세요.
Locked