UV 및 UVW 매핑은 정확히 무엇입니까?


26

기본적인 3D 개념을 이해하려고 노력하는 순간, 텍스처가 실제로 어떻게 작동하는지 알아 내려고 노력하고 있습니다. UV와 UVW 매핑은 2D 텍스처를 3D 오브젝트에 매핑하는 기술이라는 것을 알고 있습니다. 설명을 검색했지만 이미 그 내용을 알고 있다고 가정 한 자습서 만 찾았습니다.

내 이해에서 각 3D 모델은 점으로 만들어지며 여러 점이면을 생성합니까? 각 점 또는면에 2D 텍스처의 ax / y 위치에 매핑되는 보조 좌표가 있습니까? 또는 언 래핑은 어떻게 모델을 조작합니까?

또한 UVW의 W는 실제로 어떤 역할을합니까? 내가 알기로, W는 Z 좌표에 매핑되지만 어떤 상황에서 동일한 X / Y 및 다른 Z에 대해 다른 질감을 가지게된다면 Z 부분이 보이지 않습니까? 아니면 이것을 완전히 오해하고 있습니까?


1
두 가지 질문을 별도로 해보십시오
Noob Game Developer

1
나는 @NoobGameDeveloper와 같은 사람들을 미워합니다. 다른 사람들은 질문에 대답하고 있으며 그들이하는 일은 질문에 잘못된 것을 찾으려고 노력하고 있습니다. 그들에게 질문을하자. 나는 아무도 규칙을 따라야한다고 말하지는 않지만 이와 같은 질문은 여기에 게시해도 괜찮습니다.
Daniyal Azram 2016 년

답변:


23

당신의 이해는 가깝습니다. 각 3D 모델은 꼭짓점으로 만들어집니다. 각 정점은 일반적으로 공간에서 점의 위치, 법선 (조명 계산에 사용) 및 1 개 이상의 텍스처 좌표를 정의합니다. 이들은 일반적으로 텍스처의 수평 부분에 대해 u 로, 수직에 대해 v 로 지정됩니다.

오브젝트가 텍스처 될 때이 좌표는 텍스처에서 어떤 텍셀이나 픽셀을 그릴 지 찾는 데 사용됩니다. 텍스처의 왼쪽 가장자리 ( u = 0)와 텍스처의 오른쪽 가장자리 ( u = 1.0) 사이의 비율 또는 텍스처 의 상단 ( v = 0)과 하단의 비율 또는 비율로 생각하는 것이 가장 쉽다는 것을 알았습니다 그것의 ( V= 1.0). 정점 사이에 보간되어 렌더링되는 각 화면 픽셀을 찾습니다. 이 범위보다 크거나 작을 수 있으며 객체를 렌더링 할 때 설정되는 렌더 상태는 어떤 일이 발생하는지 지정합니다. 이에 대한 옵션은 CLAMP 및 REPEAT입니다. 클램핑은 좌표를 0 또는 1로 제한하여 범위를 벗어난 곳에서 텍스처가 번질 수 있습니다. 반복은 텍스처가 범위를 벗어날 때 반복되도록합니다. 좌표의 소수 부분 만 잡고 그 자리에서 사용하는 것과 사실상 동일합니다.

텍스처 좌표를 오브젝트에 적용하기 전에 텍스처 매트릭스를 곱하여 스케일링, 평행 이동 또는 회전과 같은 변형을 적용합니다. 이 효과는 때때로 게임에서 애니메이션을 적용하여 오브젝트 자체를 움직이지 않고 물체를 가로 질러 움직이는 것처럼 보이게합니다. 텍스처는 단순히 스크롤됩니다. 텍스처 매트릭스에 텍스처 좌표를 곱하면, 텍셀을 찾아서 플롯하는 데 사용되는 2 개의 값이 생성됩니다 ( st 라고 부름 ). 텍스처 매트릭스가 설정되지 않은 경우에도 uv 에서 자동으로 생성됩니다 . uv 에 항등 행렬 을 곱하는 것과 같습니다 .

이것이 자주 사용되지는 않지만 w 좌표가 나오는 곳 입니다. 텍스처 매트릭스를 곱하는 추가 매개 변수이며 일반적으로 원근감을 고려할 때 사용됩니다 (예 : 그림자 매핑 ). 월드 뷰 프로젝션 매트릭스를 통해 객체 공간의 위치를 ​​화면 공간으로 변환 할 때와 동일하게 작동합니다. UVW에 투영 변환을 곱하면 2 개의 좌표가 생겨 st 가 2D 텍스처에 매핑됩니다.


OpenGL은 v0을 맨 아래로, v1.0을 맨 위로 취급한다고 언급 할 가치가 있습니다. 텍스처가 이상하게 보일 때 버그를 찾을 수 없었던 과거에는 많은 시간이 걸렸습니다.
tkausl

8

삼각형을 고려하십시오.

각 모서리에는 UV 좌표가 있습니다. 이들 사이를 보간하여 각 픽셀에 대한 UV 좌표 세트를 얻습니다. (여기서 플레이에 대한 관점도 있지만 잠시 무시하자.)

그런 다음 좌표 U와 V의 텍스처에서 텍셀을 가져옵니다. 즉, 텍스처 좌표의 픽셀 x, y-같은 것, 텍스처에 대해 이야기하고 있기 때문에 약간 다른 용어가 있습니다.

텍스처가 실제로 3 차원 텍스처이면 세 번째 좌표 W도 필요합니다.

이것을 시각화하는 한 가지 방법은 나무 블록을 생각하는 것입니다. 어떻게 든 그것을 자르면 블록 내부의 각 평면에 2D 텍스처가 포함되어 있음을 알 수 있습니다.

3d 텍스처는 너무 드물기 때문에 당분간 잊어 버릴 수 있습니다.


드문? 그들은 무엇을 위해 사용됩니까? AAA 타이틀의 맥락에서 몇 가지 예를 보여줄 수 있습니까?
Quazi Irfan

아니요, 일반적으로 사용되지 않기 때문입니다. 항상 같은 일을하는 더 싼 방법이 있습니다. Wii 스포츠 플러스에서 다진 물건을 생각하십시오. 원하는 방식으로 항목을 깰 수 있으며 "내부"를 볼 수 있습니다. 하드웨어를 지원한다고 가정하면 3D 텍스처를 만들어 엄청난 양의 메모리를 낭비했을 수 있지만 대신 2D 텍스처 몇 개로 시뮬레이션하는 것이 훨씬 저렴합니다.
Jari Komppa

그래서 그들은 독점적이지 않습니까? 또는 이것은 잘 알려진 게임 엔진에 필요한 기능이 많지 않습니까?
Quazi Irfan

무슨 말인지 모르겠어요 3d 텍스처는 단순한 텍스처가 아닌 다른 용도에 유용 할 수 있습니다. 일부 데이터가 셰이더에 편리하게 3D 배열로 매핑되어야하는 경우 한 번의 사용이 될 것입니다. 그러나 "정상적인"텍스처로서 일반적으로 메모리 낭비 일뿐입니다.
Jari Komppa

Jari가 말했듯이 3D 텍스처의 하나의 응용 프로그램은 거리 매핑입니다. [link] http.developer.nvidia.com/GPUGems2/gpugems2_chapter08.html
Jackalope

7

종이 접기를 생각하십시오.

UV 맵은 3D 메시 (쉘)의 평평한 (비포장) 2D 스킨과 같습니다.

맵을 잘라내어 메쉬 선을 따라 접 으면 3d 모델이됩니다.

(U, V) 부동 소수점 값의 범위는 (0,0)에서 (1,1)입니다. UV 맵의 왼쪽 위 모서리는 (0,0)입니다. 오른쪽 아래 모서리는 (1,1)입니다.

다각형 (tris / quads) 메쉬의 각 정점에는 렌더러에 사용할 맵 부분을 알려주는 (U, V) 값이 있습니다.

GPU 파이프 라인에서 정점 셰이더는 이러한 3D 다각형에서 각 픽셀의 2D 투영을 계산 한 다음 UV 맵을 사용하여 조각 셰이더의 색상을 지정합니다.

다음과 같은 그림이 없으면 완전히 이해할 수 없습니다.

UV 메쉬

다른 주석가가 언급했듯이 렌더러는 W 구성 요소를 그림자 매핑과 같은 더 멋진 효과에 사용하지만 UV 맵은 이해의 기초입니다.

꼭짓점 셰이더는 채색해야하는 모든 픽셀마다 적어도 한 번 조각 셰이더를 호출해야합니다. 따라서 GPU는 수십 개의 코어가있는 병렬 프로세서이므로 셰이더 파이프 라인이 매우 까다 롭습니다.

CPU 통합 GPU는 모바일 장치 용으로 설계되었으며 유사한 외부 GPU보다 코어 수의 10 분의 1 미만으로 제한됩니다. 이는 모바일 전력 및 냉각 제약 때문입니다. 무어의 법칙은 둔화되는 것처럼 보이지만 성능은 여전히 ​​향상되고 있습니다 (여기 저기 이상한 붕괴로 ..)

초당 240 개 이상의 프레임에서 수십억 화소의 UV 매핑을 수행하면 실제 핫 엉망이 발생할 수 있습니다!


0

uv 맵은 메시의 점 (x, y, z)을 텍스처 이미지의 점 (u, v)에 매핑합니다. 이미지가 (u, v) 색상으로 매핑되므로 두지도를 연결하여 메쉬 공간에서 색상 공간으로 매핑 할 수 있습니다.

         uv map       color map
 (x,y,z)   ->   (u,v)    ->     color
 mesh           Texture
 space          space
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.