커스터마이즈드 UV

버텍스 셰이더에서 계산을 수행하여 픽셀별 실행 퍼포먼스를 향상할 수 있는 기능입니다.

Choose your operating system:

Windows

macOS

Linux

GPU 상에서 버텍스 셰이더는 모든 버텍스를 대상으로, 픽셀 셰이더는 모든 픽셀을 대상으로 실행됩니다. 언리얼 엔진 4의 거의 모든 머티리얼 노드는 모든 픽셀을 대상으로 실행됩니다. UV Coordinate 노드는 버텍스/픽셀 셰이더에 모두 속할 수 있는 반면, CustomizedUVs 기능은 버텍스 셰이더를 대상으로만 실행되며 같은 계산을 픽셀 셰이더에서 할 때보다 높은 퍼포먼스를 보입니다. 덕분에 텍스처 타일링 속도만 올릴 때도 탁월한 효율을 보입니다. 이 시스템이 UV 상에서 수행하는 수학 연산에 제한되지는 않지만, 결과는 메시의 테셀레이션에 따라 달라집니다.

참고: CustomizedUVs는 스태틱 메시, 스켈레탈 메시, BSP, 랜드스케이프, 메시 파티클 등 특정 컴포넌트 타입에만 구현된 상태입니다. 스프라이트 파티클은 아직 CustomizedUVs를 지원하지 않습니다.

프로퍼티

머티리얼 에디터(Material Editor) 에서 메인 머티리얼 노드를 선택한 다음, 머티리얼(Material) 카테고리에 있는 Num Customized Uvs 프로퍼티를 편집하여 Customized UVs 의 입력 핀 수를 설정할 수 있습니다. Num Customized UVs 가 0보다 큰 수치로 설정되면 메인 머티리얼 노드에 Customized UVs 핀이 표시됩니다.

비선형 수학 연산

일반적인 법칙상 수행 중인 연산이 상수(카메라 위치, 시간, 벡터 파라미터 등)를 사용하거나 버텍스별 어트리뷰트에 따라 선형으로 변하는 경우, 버텍스 셰이더에서 연산하더라도 픽셀 셰이더와 결과가 같습니다. 선형으로 변화한다는 것은 곱하기나 더하기처럼 연산 결과가 곡선이 아니라 선형으로 증감한다는 뜻입니다. 변수를 거듭제곱하거나, 사인 또는 코사인을 사용하거나 length 같은 연산은 비선형 방정식이 됩니다.

비선형 수학 연산이 바람직한 결과를 도출하는지는 적용될 메시의 디테일에 따라 다릅니다.

CUVs_highVsLowDetailMesh.png

왼쪽의 메시는 9x9 폴리곤 그리드, 오른쪽의 메시는 4x4 폴리곤 그리드입니다.

선형 수학 연산

UV를 파라미터로 스케일 조절(곱셈)하는 연산은 양쪽 모두 동일하게 진행됩니다. UVs는 버텍스별 어트리뷰트이며 스케일 조절은 선형 연산입니다. 다음 그림은 선형 연산 수행 시 버텍스 셰이더에서 계산되는 CustomizedUVs가 픽셀 셰이더에서 같은 계산을 할 때와 같은 효과를 내는 모습입니다.

작동 원리

CustomizedUV 핀은 기본적으로 메시의 텍스처 좌표(UVs)를 통과합니다. 이후 Texcoord 노드를 (BaseColor 같은) 픽셀 셰이더 입력에 배치하면 메시의 텍스처 좌표를 계속 구할 수 있습니다. 대신 CustomizedUV0에서 작업을 수행한 뒤 BaseColor 입력의 Texcoord 0을 사용하면 변경된 UV 값을 얻습니다. 참고로 Texture Sample 노드는 기본적으로 TexCoord 0을 사용합니다.

PC의 셰이더 모델 5(Shader Model 5) 는 8개의 커스텀 UV를 사용할 수 있지만, 모바일 기기의 OpenGL ES2 는 3개만 사용할 수 있습니다.

이 예제에서는 원본 머티리얼에서 월드 스페이스 Y/Z를 사용해 텍스처를 매핑합니다.

CUVs_EX01.png

이 머티리얼 역시 같은 작업을 하는데, Customized UV 0 의 로직이 Texcoord0을 통과해 BaseColor의 픽셀 셰이더 입력으로 넘어갑니다. 그러나 Texcoord0에 대한 계산은 버텍스 셰이더에서 이루어집니다.

CUVs_EX02.png

Texture Sample 노드 안에는 TexCoord0 노드가 있습니다.

일반적인 퍼포먼스

대부분의 경우 버텍스는 픽셀보다 훨씬 적기 때문에, 어떤 수학 연산이든 버텍스 셰이더에서 진행하면 퍼포먼스를 크게 절감할 수 있습니다. 참고로 폴리곤 수가 높은 메시를 만들거나 하이 폴리 메시를 포함한 LOD를 전혀 사용하지 않는 경우, 추가 버텍스 셰이더 작업이 병목을 유발할 수 있습니다. 메시가 4픽셀만큼 떨어져 있든, 화면 전체를 덮고 있든, 버텍스 셰이더 작업은 동일하기 때문입니다.

모바일 관련

모바일에서는 방식에 상관없이 텍스처 좌표를 조작하는 모든 텍스처 샘플이 느린 경로를 통과합니다 . 이를 종속적 텍스처 페치라고 합니다. 하지만 Customized UV 입력을 사용할 경우, 모든 텍스처가 빠른 경로를 이용하는 독립적 페치를 유지하는 동안 타일링 및 월드 스페이스 텍스처 매핑을 구현할 수 있습니다.

또한 모바일에서는 픽셀 셰이더의 모든 대상이 반정밀 부동 소수점(Half Precision Float) 방식으로 계산됩니다. 이 때문에 텍스처 좌표에서 픽셀 셰이더 수학 연산이 이루어질 때 텍스처가 각져 보이거나 다른 부작용이 생깁니다. 그러나 Customized UV 입력은 최대 정밀도(Full Precision)로 계산되기에 이 문제를 피할 수 있습니다.

다음은 타일링 비율이 다른 동굴 머티리얼 세팅으로, 여전히 서로 독립된 텍스처 샘플을 사용합니다.

CUVs_independentTiling.png

언리얼 엔진의 이전 버전을 위해 작성된 페이지입니다. 현재 언리얼 엔진 5 버전을 위해 업데이트되지 않았습니다.