UV 채널은 스태틱 메시 내 데이터 세트로, 각 메시의 버텍스를 2D 스페이스 좌표에 매핑합니다. 이러한 매핑은 메시가 렌더링될 때 2D 텍스처가 3D 지오메트리를 어떻게 래핑할지 정의합니다.
UV 매핑은 일반적으로 스태틱 메시의 지오메트리를 생성하는 데 사용되는 것과 동일한 툴인 전용 모델링 툴에서 생성 및 관리됩니다. 하지만 스태틱 매시 에디터는 모델의 UV 채널을 사용한 작업이 가능하도록 몇 가지 기능을 제공합니다.
언리얼 엔진에서 UV 채널은 주요 목적은 두 가지입니다.
-
머티리얼 내 텍스처 좌표: 텍스처 맵을 샘플링하여 스태틱 메시의 표면에 적용하는 머티리얼을 생성하는 경우 텍스처 좌표 또는 Texcoord 노드를 사용하여 UV 채널을 지정할 수 있습니다. 머티리얼은 선택된 UV 채널에 포함된 2D 좌표와 3D 버텍스 위치 간 매핑을 사용하여 3D 모델에서 각 트라이앵글을 셰이딩할 때 어떤 텍스처 영역을 사용해야 할지 결정합니다.
예를 들어 이 단순한 평면 스태틱 메시의 UV 채널 0(다음 이미지의 오른쪽 위에 표시됨)은 메시의 두 트라이앵글인 A와 B를 텍스처 공간으로 매핑하는 가장 간단한 방법을 보여줍니다. TexCoord 노드의 좌표 인덱스(Coordinate Index) 프로퍼티에 의해 설정된 이 UV 채널을 사용하는 경우 머티리얼은 텍스처의 전체 너비와 높이를 평면에 적용합니다.
전체 크기로 보려면 이미지를 클릭하세요.
반면에 아래 이미지에서는 UV 채널 1이 트라이앵글과 UV 텍스처 공간 간의 매핑을 회전하고 왜곡하는 모습을 보여줍니다. 동일한 이미지 텍스처가 스태틱 메시에 적용될 때는 스태틱 메시의 각 부분에 적용되는 텍스처의 부분을 변경합니다.
전체 크기로 보려면 이미지를 클릭하세요.
UV 매핑에서 트라이앵글은 오버랩할 수 있습니다. 오버랩이란 텍스처의 동일한 부분이 3D 스태틱 메시 지오메트리의 여러 부분에 적용된다는 의미입니다.
'UV 채널'의 U는 텍스처의 가로 축을, V는 세로 축을 가리킵니다. 텍스처 좌표는 보통 0~1 사이로 유지되며 (0,0)은 텍스처의 왼쪽 하단을 나타내고 (1,1)은 오른쪽 상단을 나타냅니다. 하지만 이것이 항상 맞는 것은 아닙니다. 기본적으로 U 또는 V 값이 1을 초과하거나 0 미만일 경우, 머티리얼은 텍스처의 다른 면을 '래핑'하게 됩니다. 예를 들어 V 값 1.25는 보통 0.25로 취급됩니다. 하지만 머티리얼에서 이 값의 범위를 제한하여 최솟값을 0, 최댓값을 1로 제한할 수도 있습니다.
-
라이트맵: UV 채널은 라이트맵을 저장하고 적용하는 데도 사용됩니다. 라이트맵은 스태틱 메시의 미리 계산된 라이팅 정보를 저장하는 특수한 텍스처입니다. '모빌리티(Mobility)' 세팅이 '스테이셔너리(Stationary)' 또는 '스태틱(Static)'으로 설정된 라이트가 레벨에 있고 레벨에 해당 라이팅을 빌드하면 라이트매스 툴은 간접광 및 스태틱 라이트의 직접광을 라이트맵 텍스처에 저장하고 UV 채널을 사용하여 스태틱 메시의 3D 지오메트리와 2D 텍스처 공간 간의 매핑을 결정합니다.
라이트맵에 사용되는 UV 채널은 다음과 같은 특별한 규칙을 따라야 합니다. 오브젝트의 모든 부분은 서로 다른 양의 라이팅을 받기 때문에 메시 트라이앵글은 2D 텍스처 공간에서 서로 오버랩될 수 없습니다. 각 트라이앵글은 텍스처에서 각자의 영역을 커버합니다. 또한 모든 UV 좌표 값은 반드시 0~1 사이에 있어야 합니다. 라이트맵 텍스처는 일반 텍스처 매핑과 동일한 방식으로 '래핑'하는 것이 불가능합니다. 이러한 이유로 인해 라이트맵 UV는 보통 더 단순한 UV에서 생성되거나 패킹 됩니다.
예를 들어 이 기둥의 텍스처 매핑 UV 채널은 각 4면의 지오메트리를 텍스처의 동일 오버랩 영역에 매핑합니다. 이 UV 채널을 사용하여 지오메트리에 텍스처를 적용하면 각 면이 텍스처의 동일한 부분을 사용하게 됩니다.
전체 크기로 보려면 이미지를 클릭하세요.
하지만 오브젝트의 라이트맵 UV에서는 각 면이 제각기 2D 공간의 고유한 영역을 커버해야 합니다.
전체 크기로 보려면 이미지를 클릭하세요.
라이트맵 UV와 이를 생성하는 방법에 대한 자세한 내용은 언리얼 엔진의 라이트매핑 이해 및 라이트맵 UV 생성을 참고하세요.
언리얼 엔진의 각 스태틱 메시는 최대 7개의 UV 채널을 가질 수 있으므로 서로 다른 머티리얼 또는 단일 머티리얼 내의 서로 다른 샘플링 노드에 대해 텍스처를 래핑하는 다양한 방법을 구성할 수 있습니다.
스태틱 메시 에디터에서의 UV 채널
스태틱 메시 에디터(Static Mesh Editor) UI에서는 UV 채널을 나열, 시각화 및 제거할 수 있습니다.
UV 채널 나열하기
스태틱 메시 에디터에서 열린 스태틱 메시 에셋이 있는 경우 툴바의 UV 버튼으로 현재 스태틱 메시에서 사용 중인 UV 채널을 모두 나열할 수 있습니다.
전체 크기로 보려면 이미지를 클릭하세요.
UV 채널 시각화하기
목록에서 아무 UV 채널이나 선택하면 '뷰포트(Viewport)'에서 메시의 트라이앵글이 2D 텍스처 공간에 오버레이로 매핑되는 것이 시각화됩니다.
전체 크기로 보려면 이미지를 클릭하세요.
목록 상단의 없음(None) 을 선택하면 UV 오버레이가 숨겨집니다.
UV 채널 제거하기
목록에서 선택한 채널을 제거할 수도 있습니다. 각 UV 채널은 각 버텍스의 텍스처 좌표를 스태틱 메시의 일부로 저장하므로 사용하지 않는 매핑을 삭제하면 런타임 메모리를 어느 정도 절약할 수 있습니다.
전체 크기로 보려면 이미지를 클릭하세요.
전체 크기로 보려면 이미지를 클릭하세요.
목록에 있는 UV 채널 중 삭제된 채널 뒤에 있는 다른 모든 UV 채널은 한 칸씩 위로 올라가 제거된 채널로 인한 공백을 채웁니다.
전체 크기로 보려면 이미지를 클릭하세요.
스태틱 메시 에셋이 라이트맵 UV를 생성하도록 구성되어 있고 선택한 UV 채널이 이미 라이트맵 UV의 소스나 대상 채널로 사용되고 있는 경우에는 UV 채널을 삭제할 수 없습니다. 빌드 세팅(Build Settings) > 라이트맵 UV 생성(Generate Lightmap UVs) 옵션을 비활성화하거나 빌드 세팅 > 소스 라이트맵 인덱스(Source Lightmap Index) 및빌드 세팅 > 대상 라이트맵 인덱스(Destination Lightmap Index) 세팅을 변경하여 다른 UV 채널을 가리키도록 해야 합니다.
UV 매핑 생성하기
머티리얼이 텍스처를 해당 채널의 소스 데이터(베이스 컬러, 노멀 맵, 러프니스 등)로 사용할 때는 주로 모델의 UV 매핑을 사용하여 해당 텍스처의 어떤 부분이 지오메트리의 어떤 부분을 래핑할지 결정하게 됩니다. 따라서 모델에 UV 매핑이 전혀 없거나 제대로 레이아웃되지 않은 UV 매핑이 있다면 텍스처가 적용된 머티리얼을 사용하려고 할 때 시각적인 문제가 종종 나타나게 됩니다. 예를 들어 UV 매핑에 이음새 , 즉 메시 지오메트리와 인접한 트라이앵글이 UV 매핑과는 인접하지 않는 곳이 많다면 텍스처는 해당 이음새에 뚜렷한 조인트를 표시하게 됩니다. 또는 UV 매핑 시 UV 공간 영역을 메시 트라이앵글에 고르지 않게 할당하고 이로 인해 메시의 큰 트라이앵글이 텍스처의 작은 영역에 할당되거나 그 반대의 경우가 발생한 경우에는 메시의 다양한 부분에서 텍스처가 스트레치되거나 왜곡된 모습을 띄게 됩니다.
예술적으로 최적의 결과를 얻으려면 3D 오브젝트의 UV 매핑을 항상 전용 모델링 툴에서 생성하는 것이 좋습니다. 하지만 이것이 항상 가능한 것은 아닙니다. 예를 들어 특정 유형의 CAD 모델링 애플리케이션에서 언리얼 엔진으로 데이터를 임포트하는 경우 소스 애플리케이션에서 높은 퀄리티의 UV 매핑을 생성할 방법이 없을 수도 있습니다. 이러한 경우에는 언리얼 에디터에서 UV 매핑을 생성할 수 있습니다.
언리얼 에디터에서는 다음과 같은 두 가지 방식을 통해 스태틱 메시에 대해 UV 매핑을 생성할 수 있습니다.
프로젝트 구성: 아래에 설명된 UV 채널 생성 방법 중 어떤 것을 사용하든 언리얼 엔진 프로젝트에 UV 에디터(UV Editor) 플러그인을 설치해야 합니다.
전체 크기로 보려면 이미지를 클릭하세요.
옵션 1: 메시 지오메트리 언랩
이 접근법에서는 스태틱 메시 지오메트리를 구성하는 트라이앵글이 자동으로 펼쳐지고 평탄화됩니다. 트라이앵글의 표면 영역은 근처에 있는 트라이앵글의 인접성을 보존하기 위해 자동으로 조정되며, 인접한 표면 간의 각도가 설정된 한계치와 교차하는 모든 위치에는 이음새가 생깁니다.
스태틱 메시를 새 UV 매핑으로 언랩하려면 다음 단계를 따릅니다.
-
언랩할 스태틱 메시를 선택하고 다음 작업 중 하나를 수행합니다.
- 콘텐츠 브라우저(Content Browser) 에서 스태틱 메시를 우클릭하고 컨텍스트 메뉴에서 UV 언랩(Unwrap UV) 을 선택합니다.
전체 크기로 보려면 이미지를 클릭하세요.
- 스태틱 메시 에디터에서 생성할 스태틱 메시를 엽니다. 그런 다음 스태틱 메시 에디터 상단 툴바에서 UV > UV 언랩 을 클릭합니다.
전체 크기로 보려면 이미지를 클릭하세요.
메뉴 옵션이 보이지 않는 경우에는 프로젝트에 대해 폴리곤 편집(Polygon Editing) 플러그인이 활성화되어 있는지 확인합니다.
- 언랩 결과를 제어할 파라미터를 구성합니다.
전체 크기로 보려면 이미지를 클릭하세요.
세팅 | 설명 |
---|---|
채널 선택(Channel Selection) | 언랩 프로세스가 새 UV 매핑을 저장할 채널을 선택하는 방식을 결정합니다. 자동 라이트맵 구성(Automatic Lightmap Setup): 해당 스태틱 메시에 설정된 채널에 언랩된 UV 매핑을 라이트맵 UV의 소스로 저장하고 새 UV 매핑에서 새 라이트맵 UV를 생성합니다.
|
UV 채널(UVChannel) | 채널 선택 이 채널 지정(Specify Channel) 으로 설정되어 있는 경우 이 세팅을 사용하여 언랩된 UV가 저장될 UV 채널의 인덱스를 결정합니다. |
각도 한계치(Angle Threshold) | 언랩 후에도 연결되어 있는 면에 맞닿은 두 면 사이의 최대 각도를 결정합니다. 이 값을 올리면 별도의 UV '아일랜드' 수가 최소화되어 인접성을 유지하는 트라이앵글의 수를 늘리고 텍스처 매핑이 끊길 수 있는 이음새의 수를 줄입니다. 하지만 이 경우 트라이앵글의 인접성을 유지하려면 2D 공간에서 트라이앵글 크기를 보다 극적으로 바꿔야 할 수 있기 때문에 래핑된 텍스처에 더 많은 디스토션을 유발할 수도 있습니다. |
- 진행(Proceed) 을 클릭합니다.
옵션 2: UV채널에 메시 지오메트리 프로젝션하기
프로젝션 볼륨을 사용하여 스태틱 메시의 3D 지오메트리를 2D 텍스처 공간에 프로젝션할 수 있으며, 프로젝션 볼륨은 평면, 박스 또는 구체가 됩니다. 이 접근법에서 스태틱 메시의 각 면이 바깥쪽으로 향하여 프로젝션 볼륨의 면을 향한 후 프로젝션 볼륨이 2D 텍스처 공간으로 언랩됩니다.
-
스태틱 메시 에디터에서 생성할 스태틱 메시를 엽니다.
예를 들어 콘텐츠 브라우저 에서 스태틱 메시 에셋을 더블클릭합니다.
-
스태틱 메시 에디터 툴바에서 UV > UV 생성(Generate UVs) 을 클릭합니다.
메뉴 옵션이 보이지 않는 경우 프로젝트에 대해 폴리곤 편집 플러그인이 활성화되어 있는지 확인합니다.
- UV 프로젝션 결과를 제어할 수 있는 컨트롤 세트를 제공하는 UV 생성 패널이 표시됩니다.
전체 크기로 보려면 이미지를 클릭하세요.
또한 '뷰포트'에서 스태틱 메시 주변에 표준 언리얼 에디터 매니퓰레이터 기즈모와 함께 녹색 볼륨이 나타나는 것을 볼 수 있습니다.
볼륨과 매니퓰레이터가 바로 나타나지 않는 경우 UV 생성 패널 아래에 있는 기즈모 표시(Show Gizmo) 버튼을 토글합니다.
-
프로젝션 유형(Projection Type) 세팅에서 스태틱 메시 치수에 가장 적합한 볼륨을 선택합니다.
-
볼륨의 크기, 위치 및 회전을 조정하여 스태틱 메시의 치수에 맞춥니다.
여기에는 UV 생성 패널에서 '뷰포트' 또는 텍스트 필드의 매니퓰레이터를 사용할 수 있습니다. 또한 맞추기(Fit) 버튼을 사용하여 스태틱 메시 지오메트리 치수에 볼륨을 자동으로 맞추는 것도 좋은 출발점이 될 수 있습니다.
-
타깃 채널(Target Channel) 세팅에서 프로젝션된 UV 매핑을 저장할 채널 인덱스를 설정합니다.
대부분의 머티리얼은 텍스처 좌표를 채널 0에서 받습니다. 스태틱 메시 지오메트리 주변의 텍스처 매핑 방식을 개선할 UV 매핑을 생성하는 경우에는 보통 이 부분을 0
으로 설정해야 합니다.
- 적용(Apply) 을 클릭하여 UV 매핑을 생성하고 스태틱 메시의 타깃 채널에 저장합니다.
다음 표에서는 UV 생성 패널의 모든 세팅을 설명합니다.
세팅 | 설명 |
---|---|
프로젝션 유형 | 스태틱 메시 지오메트리가 프로젝션되는 볼륨입니다. |
크기(Size) | 프로젝션 볼륨의 치수입니다. |
위치(Position) | 스태틱 메시의 피벗 포인트를 기준으로 하는 프로젝션 볼륨의 위치입니다. |
회전(Rotation) | 스태틱 메시의 피벗 포인트를 기준으로 하는 프로젝션 볼륨의 회전입니다. |
UV 타일링 스케일(UV Tiling Scale) | UV 공간 내 프로젝션의 스케일입니다. 값이 클수록 텍스처 공간에서의 프로젝션도 커지므로 텍스처 디테일이 메시 표면 주변을 래핑할 때 더 작게 나타납니다. |
UV 오프셋(UV Offset) | 2D 텍스처 공간 내 프로젝션의 배치를 제어합니다. X축의 값이 작을수록 프로젝션은 UV 매핑에서 왼쪽으로 이동하고 값이 클수록 프로젝션은 오른쪽으로 이동합니다. Y축의 값이 작을수록 프로젝션은 UV 매핑에서 위쪽으로 이동하고 값이 클수록 프로젝션은 아래쪽으로 이동합니다. |
타깃 채널 | 프로젝션이 저장되는 UV 채널 인덱스입니다. 스태틱 메시 에디터가 생성된 라이트맵 UV를 저장하기 위해 사용하는 채널과 동일한 채널이어서는 안 됩니다. 타깃 채널에 이미 데이터가 포함되어 있는 경우 에디터는 계속 진행하기 전에 맞는지 확인하는 메시지를 표시합니다. |
기즈모 표시 | '뷰포트'에서 매니퓰레이터 기즈모 및 프로젝션 볼륨 렌더링을 토글합니다. |
적용 | 위 세팅에 따라 UV 프로젝션을 생성하고 그 결과를 타깃 채널 에 저장합니다. |
맞추기 | 스태틱 메시의 전체 지오메트리를 완전히 덮도록 프로젝션 볼륨의 크기를 조정합니다. |
에디터 스크립팅에서의 UV 채널
언리얼 에디터에서 실행하는 블루프린트 및 Python 스크립트에서 UV 채널을 사용하여 작업하는 것도 가능합니다. 스태틱 메시 에디터에서 수행할 수 있는 모든 작업은 물론, 새 채널을 추가하고 새 UV 매핑을 생성하는 것도 가능합니다.
선행 단계: 에디터 스크립팅 유틸리티 플러그인(Editor Scripting Utilities Plugin)이 아직 설치되지 않은 경우 설치해야 합니다. 자세한 내용은 에디터 자동화 및 스크립트 작성을 참고하세요.
에디터 스크립팅(Editor Scripting) > 스태틱 메시(Static Mesh) 카테고리에서 UV 채널을 관리하는 데 필요한 노드를 찾을 수 있습니다.
이 노드를 사용하려면 블루프린트 클래스가 PlacedEditorUtilityBase 클래스와 같이 에디터 전용 클래스에서 파생되어야 합니다. 자세한 내용은 블루프린트를 사용한 스크립팅 및 에디터 페이지를 참고하세요.
이러한 함수는 모두 일반적으로 에디터 스크립팅 > 에셋 라이브러리(Asset Library) > Load Asset 노드를 호출하여 로드해야 하는 스태틱 메시 에셋과 함께 작동합니다.
UV 채널을 변경하면 에셋도 변경됩니다. 유지해야 하는 변경 사항이 있는 경우 에디터 스크립팅 > 에셋 라이브러리 > Save Asset 또는 Save Loaded Asset 같은 노드를 사용해야 할 수도 있습니다. 자세한 내용은 아래의 예시를 참고하세요.
UV 채널 나열하기
Get Num UVChannels 노드를 사용하여 지정된 스태틱 메시 에셋에 현재 UV 채널이 얼마나 많이 있는지 확인할 수 있습니다.
예를 들면 다음과 같습니다.
전체 크기로 보려면 이미지를 클릭하세요.
UV 채널 제거하기
각 UV 채널은 각 버텍스의 텍스처 좌표를 스태틱 메시의 일부로 저장하므로 사용하지 않는 매핑을 삭제하면 런타임 메모리를 어느 정도 절약할 수 있습니다.
UV 채널을 제거하려면 Remove UV Channel 노드를 호출합니다. 그런 다음 제거하려는 스태틱 메시 에셋과 UV 채널 인덱스를 전달합니다.
예를 들면 다음과 같습니다.
전체 크기로 보려면 이미지를 클릭하세요.
목록에 이미 있는 UV 채널 중 지정된 인덱스 다음에 있는 다른 모든 UV 채널은 한 칸씩 위로 올라가 제거된 항목으로 인한 공백을 채웁니다.
스태틱 메시 에셋이 라이트맵 UV를 생성하도록 구성되어 있고 선택한 UV 채널이 이미 라이트맵 UV의 소스나 대상 채널로 사용되고 있는 경우에는 UV 채널을 삭제할 수 없습니다. 빌드 세팅 > 라이트맵 UV 생성 옵션을 비활성화하거나 빌드 세팅 > 소스 라이트맵 인덱스 및빌드 세팅 > 대상 라이트맵 인덱스 세팅을 변경하여 다른 UV 채널을 가리키도록 해야 합니다.
새 UV 채널 추가하기
스태틱 메시 에셋에는 다음 노드 중 아무 노드나 호출하여 새 UV 채널을 추가할 수 있습니다.
- Add UV Channel - 기존 채널 목록 끝에 새 채널을 추가합니다.
- Insert UV Channel - 지정한 인덱스에 새 채널을 추가하고 다른 UV 채널은 목록에서 한 칸씩 아래로 내립니다. UV 채널의 배열은 분산시킬 수 없습니다. 즉, 새 채널은 목록에서 기존의 다른 채널 옆에만 삽입할 수 있습니다. 예를 들어 목록에 UV 채널이 3개(인덱스 0, 1, 2) 있는 경우, 새 채널을 인덱스 3으로 추가할 수는 있지만 인덱스 4로는 추가할 수 없습니다.
전체 크기로 보려면 이미지를 클릭하세요.
새 매핑은 비어 있습니다. 새 매핑을 사용하려면 메시 지오메트리를 프로젝션(아래 참고)하거나 이 매핑을 라이트맵 생성 대상으로 사용하여 먼저 채워야 합니다.
UV 채널에 메시 지오메트리 언랩하기
스태틱 메시 에디터를 사용하여 스태틱 메시 지오메트리를 구성하는 트라이앵글을 자동으로 펼치고 평탄화하여 새 UV 매핑을 생성할 수 있습니다. 트라이앵글의 표면 영역은 근처에 있는 트라이앵글의 인접성을 보존하기 위해 자동으로 조정되며, 인접한 표면 간의 각도가 설정된 한계치와 교차하는 모든 위치에는 이음새가 생깁니다.
프로젝트 구성: 아래에 설명된 UV 채널 생성 방법을 사용하려면 언리얼 엔진 프로젝트에 폴리곤 편집 플러그인을 설치해야 합니다.
Generate Unwrapped UVs 노드를 사용합니다. 이 노드에는 다음을 지정해야 합니다.
- 수정하려는 스태틱 메시 에셋에 대한 참조
- 언랩된 UV를 저장할 채널 인덱스. 이 채널이 아직 없는 경우 언랩 프로세스 중에 생성됩니다.
- 언랩 후에도 연결되어 있는 면에 맞닿은 두 면 사이의 최대 각도. 이 값을 올리면 별도의 UV '아일랜드' 수가 최소화되어 인접성을 유지하는 트라이앵글의 수를 늘리고 텍스처 매핑이 끊길 수 있는 이음새의 수를 줄입니다. 하지만 이 경우 트라이앵글의 인접성을 유지하려면 2D 공간에서 트라이앵글 크기를 보다 극적으로 바꿔야 할 수 있기 때문에 래핑된 텍스처에 더 많은 디스토션을 유발할 수도 있습니다.
예를 들면 다음과 같습니다.
전체 크기로 보려면 이미지를 클릭하세요.
UV 채널에 메시 지오메트리 프로젝션하기
스태틱 메시 내 트라이앵글을 2D 평면이나 단순 3D 볼륨으로 프로젝션하여 새 UV 매핑을 생성할 수 있습니다.
아래 설명된 각 노드는 자신이 생성하는 UV 매핑을 지정된 UV 채널에 저장합니다. 이 UV 채널은 반드시 있어야 하며, 없는 경우 함수에서 UV 채널을 생성하지 않습니다.
평면 프로젝션
Generate Planar UV Channel 노드를 사용하여 스태틱 메시 지오메트리를 평면에 프로젝션합니다. 이 유형의 프로젝션은 스태틱 메시의 한 면만 텍스처를 래핑하는 경우에 사용합니다.
예를 들면 다음과 같습니다.
전체 크기로 보려면 이미지를 클릭하세요.
원기둥 프로젝션
Generate Cylindrical UV Channel 노드를 사용하여 스태틱 메시 지오메트리를 원기둥 측면과 윗면, 밑면에 프로젝션합니다.
예를 들면 다음과 같습니다.
전체 크기로 보려면 이미지를 클릭하세요.
박스 프로젝션
Generate Box UV Channel 노드를 사용하여 스태틱 메시 지오메트리를 큐브의 각 면에 프로젝션합니다.
예를 들어 다음 스크립트는 스태틱 메시와 거의 같은 크기의 박스를 만든 후 스태틱 메시의 지오메트리를 박스의 측면에 프로젝션하여 새로운 UV 매핑을 만듭니다.
전체 크기로 보려면 이미지를 클릭하세요.
unreal.EditorStaticMeshLibrary
클래스에서 LOD 관리 함수를 찾을 수 있습니다.
이 함수는 전부 스태틱 메시 에셋과 함께 작동하며, 주로 unreal.EditorAssetLibrary.load_asset
과 같은 함수를 호출하여 로드해야 합니다.
UV 채널을 변경하면 에셋도 변경됩니다. 변경 사항을 유지하려는 경우에는 unreal.EditorAssetLibrary.save_asset
또는 unreal.EditorAssetLibrary.save_loaded_asset
등의 함수를 사용해야 합니다.
UV 채널 나열하기
또 unreal.EditorStaticMeshLibrary.get_num_uv_channels
함수를 사용하여 주어진 스태틱 메시 에셋에 현재 UV 채널이 얼마나 많이 있는지 확인할 수도 있습니다.
예를 들면 다음과 같습니다.
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# 스태틱 메시 에셋을 로드합니다.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# 에셋에 저장된 UV 채널 수를 구합니다.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Number of UV channels: " + str(num_uv_channels))
UV 채널 제거하기
각 UV 채널은 각 버텍스의 텍스처 좌표를 스태틱 메시의 일부로 저장하므로, 사용하지 않는 매핑을 삭제하면 런타임 메모리를 어느 정도 절약할 수 있습니다.
UV 채널을 제거하려면 unreal.EditorStaticMeshLibrary.remove_uv_channel
함수를 호출합니다. 그런 다음 제거하려는 스태틱 메시 에셋과 UV 채널 인덱스를 전달합니다.
예를 들면 다음과 같습니다.
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# 스태틱 메시 에셋을 로드합니다.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# 에셋에 저장된 UV 채널 수를 구합니다.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
# 목록의 마지막 항목을 제거합니다.
channel_to_remove = num_uv_channels - 1
unreal.EditorStaticMeshLibrary.remove_uv_channel(asset_name, channel_to_remove)
# 변경된 에셋을 저장합니다.
unreal.EditorAssetLibrary.save_asset(asset_name)
목록에 이미 있는 UV 채널 중 지정된 인덱스 다음에 있는 다른 모든 UV 채널은 한 칸씩 위로 올라가 제거된 항목으로 인한 공백을 채웁니다.
스태틱 메시 에셋이 라이트맵 UV를 생성하도록 구성되어 있고, 선택한 UV 채널이 이미 라이트맵 UV의 소스나 대상 채널로 사용되고 있는 경우에는 UV 채널을 삭제할 수 없습니다. **빌드 세팅 > **라이트맵 UV 생성 옵션을 비활성화하거나, 빌드 세팅 > 소스 라이트맵 인덱스 및 빌드 세팅 > 대상 라이트맵 인덱스 세팅을 변경하여 다른 UV 채널을 가리키도록 해야 합니다.
새 UV 채널 추가하기
스태틱 메시 에셋에는 다음 함수 중 아무 거나 호출하여 신규 UV 채널을 추가할 수 있습니다.
unreal.EditorStaticMeshLibrary.add_uv_channel
- 기존 채널 목록 끝에 새 채널을 추가합니다.unreal.EditorStaticMeshLibrary.insert_uv_channel
- 지정한 인덱스에 새 채널을 추가하고, 다른 UV 채널은 목록에서 한 칸씩 아래로 내립니다. UV 채널의 배열은 분산시킬 수 없습니다. 즉, 새 채널은 목록에서 기존의 다른 채널 옆에만 삽입할 수 있습니다. 예를 들어 목록에 UV 채널이 3개(인덱스 0, 1, 2) 있는 경우, 새 채널을 인덱스 3으로 추가할 수는 있지만 인덱스 4로는 추가할 수 없습니다.
예를 들면 다음과 같습니다.
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# 스태틱 메시 에셋을 로드합니다.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# 에셋에 저장된 UV 채널 수를 구합니다.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Number of UV channels before: " + str(num_uv_channels))
# 목록 끝에 하나를 추가합니다.
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
# 목록 처음에 하나를 추가합니다.
unreal.EditorStaticMeshLibrary.insert_uv_channel(asset_name, 0)
# 에셋에 저장된 새 UV 채널 수를 구합니다.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Number of UV channels after: " + str(num_uv_channels))
# 변경된 에셋을 저장합니다.
unreal.EditorAssetLibrary.save_asset(asset_name)
새 매핑은 비어 있습니다. 새 매핑을 사용하려면 메시 지오메트리를 프로젝션(아래 참고)하거나 이 매핑을 라이트맵 생성 대상으로 사용하여 먼저 채워야 합니다.
UV 채널에 메시 지오메트리 언랩하기
스태틱 메시 에디터를 사용하여 스태틱 메시 지오메트리를 구성하는 트라이앵글을 자동으로 펼치고 평탄화하여 새 UV 매핑을 생성할 수 있습니다. 트라이앵글의 표면 영역은 근처에 있는 트라이앵글의 인접성을 보존하기 위해 자동으로 조정되며, 인접한 표면 간의 각도가 설정된 한계치와 교차하는 모든 위치에는 이음새가 생깁니다.
프로젝트 구성: 아래 설명된 UV 채널 생성을 사용하려면, 반드시 자신의 언리얼 엔진 프로젝트에 폴리곤 편집 플러그인을 설치해야 합니다.
unreal.UVGenerationFlattenMapping.generate_flatten_mapping_u_vs()
함수를 사용합니다. 그리고 다음을 전달합니다.
- 수정하려는 스태틱 메시 에셋에 대한 참조
- 언랩된 UV를 저장할 채널 인덱스. 이 채널이 아직 없는 경우 언랩 프로세스 중에 생성됩니다.
- 언랩 후에도 연결되어 있는 면에 맞닿은 두 면 사이의 최대 각도(도 단위)입니다. 이 값을 올리면 별도의 UV '아일랜드' 수가 최소화되어 인접성을 유지하는 트라이앵글의 수를 늘리고 텍스처 매핑이 끊길 수 있는 이음새의 수를 줄입니다. 하지만 이 경우 트라이앵글의 인접성을 유지하려면 2D 공간에서 트라이앵글 크기를 보다 극적으로 바꿔야 할 수 있기 때문에 래핑된 텍스처에 더 많은 디스토션을 유발할 수도 있습니다.
예를 들면 다음과 같습니다.
import unreal
asset_name = '/Game/Meshes/StaticMesh'
# 스태틱 메시 에셋을 로드합니다.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# 저장할 UV 채널을 지정합니다.
channel_index = 2
# 각도 한계치를 설정합니다.
angle_threshold = 55
# 메시를 UV 채널에 언랩합니다.
unreal.UVGenerationFlattenMapping.generate_flatten_mapping_u_vs(loaded_asset, channel_index, angle_threshold)
# 변경된 에셋을 저장합니다.
unreal.EditorAssetLibrary.save_asset(asset_name)
UV채널에 메시 지오메트리 프로젝션하기
스태틱 메시 내 트라이앵글을 2D 평면이나 단순 3D 볼륨으로 프로젝션하여 새 UV 매핑을 생성할 수 있습니다.
이 기능은 현재 언리얼 에디터 스크립팅 API에만 노출되어 있으며 스태틱 메시 에디터의 UI에는 노출되어 있지 않습니다. 하지만 3ds Max 등에서 제공하는 메시 프로젝션 비주얼 툴에 이미 익숙한 경우 해당 API에 필요한 프로세스 및 세팅은 비교적 쉽게 이해할 수 있습니다. 관련된 배경 지식은 3ds Max 도움말의 UVW 맵 모디파이어를 참고하세요.
아래에 설명된 각 함수는 사용자가 생성하는 UV 매핑을 지정된 UV 채널에 저장합니다. 이 UV 채널은 반드시 있어야 하며, 없는 경우 함수에서 UV 채널을 생성하지 않습니다.
평면 프로젝션
unreal.EditorStaticMeshLibrary.generate_planar_uv_channel
함수를 사용하여 스태틱 메시 지오메트리를 평면에 프로젝션합니다. 이 유형의 프로젝션은 스태틱 메시의 한 면만 텍스처를 래핑하는 경우에 사용합니다.
예를 들면 다음과 같습니다.
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# 스태틱 메시 에셋을 로드합니다.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# 프로젝션할 LOD를 지정합니다.
lod_index = 0
# 프로젝션에 새 채널을 추가합니다.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# 프로젝션 평면 또는 "기즈모"를 구성합니다.
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Find the center of the object's bounding box.
# 회전 각도(각도 단위)을 설정합니다.
pitch = 0 # Around the X axis
yaw = 0 # Around the Y axis
roll = 0 # Around the Z axis
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# 값을 높이거나 낮추면 프로젝션도 커지거나 작아집니다.
tiling = unreal.Vector2D(1, 1)
# 스태틱 메시 지오메트리를 UV 채널에 프로젝션합니다.
unreal.EditorStaticMeshLibrary.generate_planar_uv_channel(loaded_asset, lod_index, channel_index, gizmo_pos, gizmo_orientation, tiling)
# 변경된 에셋을 저장합니다.
unreal.EditorAssetLibrary.save_asset(asset_name)
원기둥 프로젝션
unreal.EditorStaticMeshLibrary.generate_cylindrical_uv_channel
함수를 사용하여 스태틱 메시 지오메트리를 원기둥 측면과 윗면, 밑면에 프로젝션합니다.
예를 들면 다음과 같습니다.
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# 스태틱 메시 에셋을 로드합니다.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# 프로젝션할 LOD를 지정합니다.
lod_index = 0
# 프로젝션에 새 채널을 추가합니다.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# 프로젝션 원기둥 또는 "기즈모"를 구성합니다.
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Find the center of the object's bounding box.
# 회전 각도(각도 단위)을 설정합니다.
pitch = 0 # Around the X axis
yaw = 0 # Around the Y axis
roll = 0 # Around the Z axis
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# 값을 높이거나 낮추면 프로젝션도 커지거나 작아집니다.
tiling = unreal.Vector2D(1, 1)
# 스태틱 메시 지오메트리를 UV 채널에 프로젝션합니다.
unreal.EditorStaticMeshLibrary.generate_cylindrical_uv_channel(teapot, lod_index, channel_index, gizmo_pos, gizmo_orientation, tiling)
# 변경된 에셋을 저장합니다.
unreal.EditorAssetLibrary.save_asset(asset_name)
박스 프로젝션
unreal.EditorStaticMeshLibrary.generate_box_uv_channel
함수를 사용하여 스태틱 메시 지오메트리를 큐브의 면에 프로젝션합니다.
예를 들어 다음 스크립트는 스태틱 메시와 거의 같은 크기의 박스를 만든 후 스태틱 메시의 지오메트리를 박스의 측면에 프로젝션하여 새로운 UV 매핑을 만듭니다.
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# 스태틱 메시 에셋을 로드합니다.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# 프로젝션할 LOD를 지정합니다.
lod_index = 0
# 프로젝션에 새 채널을 추가합니다.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# 프로젝션 볼륨 또는 "기즈모"를 구성합니다.
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Find the center of the object's bounding box.
# 회전 각도(각도 단위)을 설정합니다.
pitch = 0 # Around the X axis
yaw = 0 # Around the Y axis
roll = 0 # Around the Z axis
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# 박스 크기를 구합니다.
gizmo_size = bbox.max - bbox.min
# 스태틱 메시 지오메트리를 UV 채널에 프로젝션합니다.
unreal.EditorStaticMeshLibrary.generate_box_uv_channel(box, channel_index, lod_index, gizmo_pos, gizmo_orientation, gizmo_size)
# 변경된 에셋을 저장합니다.
unreal.EditorAssetLibrary.save_asset(asset_name)