노멀 vs 노멀 맵


17

Assimp 자산 가져 오기 도구 ( http://assimp.sourceforge.net/lib_html/index.html )를 사용하여 3D 모델을 구문 분석하고 있습니다.

지금까지 메쉬의 각 정점에 대해 정의 된 법선 벡터를 간단히 뽑았습니다. 그러나 노멀 맵에서 다양한 튜토리얼을 찾았습니다 ...

노멀 맵에서 알 수 있듯이 노멀 벡터는 노멀 맵의 각 텍셀에 저장되며 셰이더의 노멀 텍스쳐에서이 벡터를 가져옵니다.

법선을 얻는 두 가지 방법이있는 이유는 무엇이며 가장 좋은 방법은 무엇입니까?

답변:


31

짧은 답변

법선 맵과 법선은 서로 다른 두 가지입니다. 법선은 메쉬 / 표면의 기하학적 특성으로, 음영 및 조명 계산에만 사용되는 것이 아니라 실제로 물리학에서 다른 많은 용도로 사용됩니다. 법선 맵은 범프를 시뮬레이션하기 위해 컴퓨터 그래픽에 사용되는 대체 법선 벡터를 인코딩하는 텍스처입니다.

긴 답변

지오메트리의 법선 법선 법선 은 주어진 객체에 직교하는 벡터 또는 선입니다 (예 : 평면 법선, 정점 법선). 그래픽의 법선은 일반적으로 광 방향과 표면 법선 사이에서 내적 을 구하여 표면 전체의 산란 반사 를 계산하는 등의 광 계산에 사용됩니다 . 법선은 일반적으로 동일한 평면에있는 두 개의 비평 행 모서리의 교차 곱을 가져와 메쉬의 기하학적 특성 (면 / 정점)을 기반으로 계산됩니다.

OpenGL에서 법선은 정점마다 지정되므로 정점 속성이라고하는데,이 경우 각면에 대해서만 계산 될 수 있지만면의 각 정점에 대해 동일한 법선을 지정해야합니다. OpenGL은면 (삼각형)의 각 정점에 법선을 보간 할 수 있으므로 정점이 아닌 픽셀 당 반사광을 계산할 수있어보다 정확한 결과를 얻을 수 있습니다.

반면 노멀 매핑 : 텍스처 맵에서 노멀을 인코딩하는 컴퓨터 그래픽 기술입니다. 따라서 각 노멀은 텍셀마다 인코딩됩니다. 일반적으로 범프 및 덴트의 조명을 만드는 데 사용됩니다 (예 : 범프 매핑, 시차 매핑).

법선은 메쉬 / 표면의 기하학적 특성을 기반으로 계산되므로 법선 맵은 범프를 시뮬레이션하여 더 많은 다각형을 추가하지 않고 표면에 디테일을 추가 할 수있는 대체 법선을 제공합니다.

노멀 맵은 일반적으로 훨씬 더 상세한 3D 모델을 사용하여 생성 된 다음이 모델을 기반으로 노멀을 계산하고 노멀 맵으로 인코딩합니다.

왜 둘 다 필요합니까?

렌더링, 노멀 및 노멀 맵은 일반적으로 최종 조명 효과를 얻기 위해 함께 사용됩니다. 좋은 예는 범프 셰이더 일 수 있습니다. 여기서 범프 라이팅 효과를 얻으려면 노멀 맵 노멀이 필요합니다. 탄젠트 공간 을 계산하는 기하 법선 . 탄젠트 공간은 보통 노멀 맵에 재사용 성을 제공하는 데 사용됩니다.

법선은 표면의 기하학적 특성으로 간주되며 조명 계산보다 더 많은 용도가 있습니다. 반면 노멀 맵은 일반적으로 표면 효과에 사용됩니다.

접선 공간이 중요한 이유를 설명하기 위해 답을 확장합니다.

짧은 대답 : 탄젠트 공간은 기본 지오메트리와 독립적 인 노멀 맵을 만드는 데 사용됩니다.

[편집] 탄젠트 공간의 노멀 맵과 월드 공간의 노멀 맵을 나타내는 이미지가 추가되었습니다.

여기에 이미지 설명을 입력하십시오

긴 대답 : 아래 그림은 UV 평면과 탄젠트 공간을 정의하는 법선을 보여줍니다. 노멀 맵을 생성 할 때 사용 된 공간이 항상 Z 방향을 향하는 법선을 갖습니다 (그래서 노멀 맵은 파랗게 보입니다) 표면 곡률을 무시하는 데 도움이됩니다 **,.

탄젠트 스페이스는 노멀 맵 인코딩이 특정 메시 노멀에 바인딩되지 않는다는 이점을 제공합니다. 월드 또는 오브젝트 공간에서 노멀 맵을 인코딩한다고 가정하면, 인코딩하는 각 노멀은 월드 맵에서 원래 메쉬 노멀이 어떻게 변하는 지에 따라 방향을 가지게됩니다.

여기에 이미지 설명을 입력하십시오

위의 두 그림에서 접선 공간은 기본 지오메트리와 무관하게 법선 맵 (오른쪽)을 만드는 것이 분명합니다. 모든 법선은 작은 변형으로 거의 같은 방향으로 인코딩되어 범프의 효과를 시뮬레이션하기 때문입니다.

** 표면 곡률은 형상 객체가 선의 경우 평면 또는 직선에서 벗어나는 양으로 정의되지만 상황에 따라 다른 방식으로 정의됩니다.

탄젠트 공간 표현


1
정점별로 정의 된 노멀 및 탄젠트 필드가 없으면 노멀 텍스처 만 일관되게 사용할 수없는 방법을 묘사 한 이미지를 찾을 수 있다면 대부분의 초보자 그래픽 프로그래머에게이 수수께끼 문제에 대한 최상의 답변이 될 것입니다!
teodron

좋은 대답이지만 법선은 OpenGL에 의해 각면에 보간되지 않습니다. 직접 수행하고 보간 법선을 OpenGL (또는 셰이더 코드)에 제공해야합니다.
Anastasios G

1
@AnastasiosG 특정 프리미티브에 대해 프래그먼트가 계산 될 때마다 삼각형을 가로 지르는 다양한 데이터의 기본 동작에 대해 이야기하고 있다고 생각합니다. OpenGL에게 삼각형의 가능한 3 정점 법선 중 하나의 특정 법선을 사용하도록 지시하는 데 사용할 수있는 플래그가 있다는 것을 알고 있습니다. 그러나 이것이 내가 아는 기본 동작은 아닙니다.
teodron

1
@ AnastasiosG 나는 OpenGL을 사용하는 방법에 관한 것이 아니기 때문에 그러한 세부 사항은 아무런 대답도하지 않을 것이라고 생각했습니다. 그러나 그것이 도움이된다면, 고정 파이프 라인 시대에는 openGL에게 보간을 지시하기 위해 glShadeModel (GL_SMOOTH)이 필요했습니다. 프로그래밍 가능한 파이프 라인 시대에서는 OpenGL이 보간 할 수 있도록 쉐이더에서 변수를 가변 또는 인 / 아웃으로 정의합니다.
concept3d

범프 맵은 흑백 텍스처를 기반으로 올리거나 내린 단순한 (지오메트리) 노멀이라고 덧붙이고 싶습니다. :)
Entalpi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.