[GPG 1 글 5.6] 법선 매핑에 관련하여 질문이 있습니다.

GPG 시리즈 관련 질답, 논의 공간.

Moderator: 류광

비회원

법선 매핑에 관련하여 질문이 있습니다.

Post by 비회원 »

노말 매핑을 위해 사용하는

Tangent, Binormal 벡터에 대해 궁금한 점이 있습니다.

Tangent벡터는 해당 정점의 Normal 벡터와 수직인 벡터인데 즉 한두개가 아니지 않습니까?

일반적으로 Tangent 벡터는 UV 좌표를 사용하여 구한 뒤 사용한다는것은 알고 있습니다만

이것은 편의를 위해서 인가요? 아니면 꼭 UV좌표를 통해 구한 Tangent 벡터와 Binormal 벡터를 사용해야 하는 건가요?..



이 질문을 하게된 원인은 현재 FBX 컨버터를 제작중인데 Max로 부터 Export한 fbx 파일에

한 정점에 대해 여러 Tangent와 Binormal 벡터가 들어있길래 여쭤보게 되었습니다.

Pos: 11.361383 1.868443 -1.638895
Normal: 0.881307 0.465190 -0.083045
UV: 0.745628 0.543674
Tangent: 0.462658 -0.885200 -0.048670
BiNormal: 0.096152 -0.004472 0.995357


Pos: 11.361383 1.868443 -1.638895
Normal: 0.881307 0.465190 -0.083045
UV: 0.745628 0.543674
Tangent: 0.109751 -0.993143 0.040275
BiNormal: -0.377275 -0.004136 0.926092

이런식으로 Pos, Normal, UV가 같은 동일한 정점에 대해 여러 탄젠트와 바이노말벡터가 들어가 있는데
Max에서 아마 인접한 점들로 부터 Tangent와 Binormal 벡터를 구하기 때문에 여러 값이 나오는게 아닐까 싶습니다.
처음에는 중복되는 데이터들중 임의로 하나를 정해 사용할까 했는데 뭔가 찜찜하여 질문을 드립니다 ㅠㅠ
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

fbx 파일은 잘 모르지만 그냥 추측해서 말씀드리면, 파일에 정점이 속한 삼각형(표면)마다 하나씩 정점 자료가 들어 있다면, 서로 다른 접선, 종법선들은 해당 삼각형의 접선 공간을 규정하는 벡터들이 아닐까요?
비회원

Post by 비회원 »

류광 wrote:fbx 파일은 잘 모르지만 그냥 추측해서 말씀드리면, 파일에 정점이 속한 삼각형(표면)마다 하나씩 정점 자료가 들어 있다면, 서로 다른 접선, 종법선들은 해당 삼각형의 접선 공간을 규정하는 벡터들이 아닐까요?
답변 주셔서 감사합니다. 가장 큰 문제는 Binormal과 Tangent를 추출하면서 버텍스 개수가 크게 증가했다는 점입니다.
컨버터에서 기본적으로 Index 데이터도 같이 출력되기 때문에
기존에는 '여러면에 공유되는 정점'의 경우 단 한개만 추출되고 인덱스를 통해 매쉬를 그렸으나
위와같이 탄젠트와 바이노말이 해당 정점에 대해 여러개 추출되면서 정점의 수가 크게 늘었습니다.
Vertex Count : 502 , Index Count : 2006 -> Vertex Count : 2004, Index Count : 2006
이런 식으로요. 이 모든 버텍스를 그대로 쉐이더에 넘길경우 렌더링은 잘 되겠지만 Index를 사용하는 것이
사실상 무의미할 정도로 비효율적인것 같아서 해당 데이터들을 어떻게 처리할지 고민중입니다.

데이터를 확인해보면 한 정점에 해당 정점이 포함되는 면의 개수만큼 데이터가 늘어나는 것 같은데
(예를 들어 사각뿔의 경우 네가지 면이 모이게 되는 꼭대기 정점에 대해 4개의 정점 데이터가 생성됩니다.
말씀드린것과 같이 Pos, UV, Normal 값은 동일하며 Tangent와 Binormal만 다른)

그렇다면 4개의 값중 임의로 하나만을 선정할 경우 모든 평면에 대해 정상적인 조명처리가 적용되나요?
아니면 여러 평면에 공유되는 정점의 노말벡터를 구할때 각 평면의 방향벡터를 구하고 평균값을 구해 처리하듯
추가적인 연산을 해주어야 하나요?

글재주가 없어서 질문의 의도가 정확히 전달됐는지 모르겠습니다.
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

아 제가 잠깐 헷갈렸는데 접선 등도 색상처럼 래스터화 과정에서 삼각형을 따라 보간되어서 픽셀 셰이더에 넘어가게만 하면 되니까 그냥 파일의 값들을 그대로(정점마다 따로) 사용하면 되겠습니다. 파일에 있는 접선, 종법선들이 제대로 계산된 것이라고 가정할 때, 정점 셰이더에서 정점 법선, 접선, 종법선 벡터를 (필요하다면 적절한 좌표계로 변환해서) 정점 출력에 포함시키기만 하면 나머지는 픽셀 셰이더에서 해결하면 되는 문제인 것 같습니다.
Post Reply