3D 에셋을 제작할 때, 동일한 머티리얼 내에서 여러 가지 표면 타입을 정의하는 기능이 필요할 때가 있습니다. 간단하고 저렴한 방법은 텍스처 마스크(Texture Mask) 를 사용하여 표면의 어떤 부분이 머티리얼의 어떤 부분에 영향을 받도록 할지 정의하는 것입니다.
이 튜토리얼에서는 언리얼 엔진 머티리얼 내에서 텍스처 마스크를 사용하는 방법을 살펴봅니다.
텍스처 마스크
텍스처 마스크 는 머티리얼 내부의 효과 범위를 제한하는 데 사용되는 그레이스케일 텍스처 또는 텍스처의 단일 채널(R, G, B 또는 A)입니다.
마스크는 다른 텍스처의 단일 채널에 포함되는 경우가 많은데, 디퓨즈나 노멀 맵의 알파 채널(Alpha Channel) 이 그 예입니다. 그 외, 단일 이미지 파일에 러프니스, 메탈릭, 앰비언트 오클루전 마스크가 포함되는 경우가 종종 있는데, 각 요소는 단일 채널을 차지합니다.
이를 채널 패킹이라고 하며, 머티리얼에 요구되는 텍스처 샘플의 수를 줄여 머티리얼 퍼포먼스를 개선하는 좋은 방법입니다. 기술적으로 텍스처의 채널은 텍스처 마스크로 간주하여 사용할 수 있습니다.
다음은 시작용 콘텐츠에서 SM_Chair 스태틱 메시에 텍스처 마스크를 적용한 예시입니다.

이 이미지 파일에는 4개의 컬러 채널(RGBA) 각각에 다른 검은색과 흰색 마스크가 포함되어 있습니다.

텍스처 마스크 생성하기
어떤 2D 이미지 편집 프로그램에서든 텍스처 마스크를 생성할 수 있습니다. 주로 사용하는 콘텐츠 제작 프로그램의 지오메트리에서 직접 마스크를 굽거나, Marmoset Toolbag, Xnormal, Substance Painter/Designer와 같은 전용 텍스처링 툴을 사용할 수도 있습니다.
수작업으로 마스크를 생성할 경우 일반적으로 메시의 UV 레이아웃을 보여주는 이미지로 시작하게 됩니다. 이 예시에서는 시트 쿠션을 마스킹하는 것이 목표입니다. 해당하는 UV가 아래 이미지에서 하이라이트됩니다. 모델의 특정한 부분을 마스킹하려면 이미지의 해당 영역은 순수한 흰색으로, 나머지 다른 영역은 모두 검은색으로 페인팅해야 합니다.

위와 같이, 이 방법을 사용하면 마스크가 적용된 영역에 특정한 표면 프로퍼티를 적용할 수 있습니다. 이 경우 마스크는 쿠션에 오렌지색을 입히는 데 사용되었습니다.

텍스처 마스크를 생성할 때 순수한 검은색이나 흰색만 사용해야 하고, 그 외의 색 정보는 사용하면 안 됩니다. 다른 색을 사용할 경우 언리얼에서 마스크를 사용할 때 이상한 아티팩트가 생길 수 있습니다.
텍스처 마스크 익스포트하기
마스크 텍스처 페인팅이 완료되면 마스크를 단일 이미지로 익스포트하거나, 다수의 마스크를 단일 이미지의 R, G, B, A 채널에 묶어 익스포트할 수 있습니다. 이를 흔히 RGB 채널 패킹이라고 하며, 약간의 추가 작업만으로도 상당한 퍼포먼스와 메모리를 절약할 수 있어 마스크를 제작할 때 선호되는 방법입니다.
텍스처의 알파 채널에 무언가를 패킹할 경우, 어떤 2D 이미지 편집 소프트웨어를 사용하든 알파 익스포트를 활성화해야 합니다. 그렇지 않으면 텍스처를 익스포트할 때 알파 채널이 포함되지 않을 위험이 있습니다.
텍스처 마스크 사용하기
언리얼 머티리얼 에디터에서는 다양한 방식으로 마스크 텍스처를 사용할 수 있습니다. 일반적으로 마스크 텍스처는 이미시브 광원을 정의할 때나 메시의 메탈 부분과 메탈이 아닌 부분을 정의할 때, 의자의 예시에서 본 것처럼 서로 다른 색을 모델의 서로 다른 부분에 매핑할 때 사용됩니다.
다음 섹션에서는 언리얼 엔진에서 텍스처 마스킹을 사용하는 가장 일반적인 방법 몇 가지를 살펴보겠습니다.
이미시브 마스크
가장 흔한 마스크 텍스처 사용법 중 하나는 머티리얼의 이미시브(발광) 부분을 제어하는 것입니다. 주로 이미시브 마스크 텍스처를 처음 생성할 때 이루어지는 작업으로, 순수한 흰색을 사용하여 머티리얼에서 빛을 발해야 하는 부분을 정의합니다. 일반적으로 이미시브 마스크에는 다음과 같은 두 파라미터가 수반됩니다.
- 발광의 색을 변경하려면 이미시브 마스크에 벡터 파라미터(Vector Parameter) 로 정의된 색을 곱합니다.
- 발광의 강도를 변경하려면 스칼라 파라미터(Scalar Parameter) 를 곱합니다. 스칼라 파라미터의 값을 높이면 발광의 밝기를 높일 수 있습니다.
아래의 그래프에서 하이라이트된 4개의 노드는 빛의 색과 밝기를 제어하는 파라미터를 곱한 이미시브 마스크를 보여줍니다. 스피어는 이미시브 마스크의 흰색 부분에 해당하는 영역에서만 발광합니다. 스피어의 나머지 부분에는 베이스 컬러 텍스처가 나타납니다.
머티리얼 마스킹
두 번째로 흔한 텍스처 마스크 사용법은 텍스처의 R, G, B 및 알파 채널마다 서로 다른 종류의 텍스처 정보를 저장하는 것입니다. 시작용 콘텐츠에서 제공하는 SM_Chair 스태틱 메시의 머티리얼이 이 방법의 완벽한 예시입니다.
SM_Chair와 그에 관련된 모든 콘텐츠는 콘텐츠 브라우저(Content Browser) 에서 StarterContent 폴더를 선택한 다음 검색창에 ‘chair’를 입력하면 찾을 수 있습니다. 그러면 의자에 관련된 모든 콘텐츠가 표시됩니다. 의자가 보이지 않는다면, 프로젝트에 시작용 콘텐츠가 포함되지 않았기 때문일 수 있습니다. 이 문제를 해결하려면 새 프로젝트를 만들거나 에셋 이주 툴을 사용하여 다른 프로젝트에서 의자 콘텐츠를 옮겨오면 됩니다.
M_Chair 의자 머티리얼을 열면 텍스처 매핑의 완벽한 실전 예시를 확인할 수 있습니다.

이 머티리얼에서 마스크 텍스처인 T_Chair_M 은 메시의 서로 다른 영역에 특정한 표면 프로퍼티를 매핑하는 데 사용되었습니다. 텍스처 마스크는 메탈 부분과 메탈이 아닌 부분을 정의하도록 도와주며, 의자의 서로 다른 부분에 다양한 러프니스 및 컬러 값을 할당하는 데 사용되기도 합니다.
다음 이미지는 마스크 텍스처의 각 채널이 어떻게 사용되는지 보여주는 해부도입니다. 왼쪽은 컴포짓 RGB 이미지로, 하나의 텍스처로 볼 때 이미지가 어떻게 보이는지를 나타냅니다. 가운데 열은 각 컬러 채널(위에서부터 R, G, B, A)에 포함된 검은색 및 흰색 마스크를 보여줍니다. 맨 오른쪽은 마스크가 의자의 어떤 부분에 영향을 미치는지 보여주는 이미지로, 의자의 흰색 부분이 마스크의 흰색 부분에 해당합니다.
의자 마스크 텍스처의 각 채널 안에 어떤 타입의 정보가 저장되는지에 대한 분석입니다.
-
빨강 채널(Red Channel): 앰비언트 오클루전 정보입니다. 머티리얼에서 두 표면이 가까워질 때 생기는 약간의 컨택트 섀도를 더할 때 사용됩니다.
-
초록 채널(Green Channel): 메탈릭 마스크입니다. 머티리얼에서 어떤 부분이 메탈인지 정의하는 데 사용됩니다. 메탈 부분의 색 정의를 돕기 위해서도 사용됩니다. !
-
파랑 채널 : 논메탈릭 마스크입니다. 머티리얼에서 어떤 부분이 메탈이 아닌지 정의하는 데 사용됩니다. 이 마스크는 메탈이 아닌 부분의 색 정의를 돕기 위해서도 사용됩니다.
-
알파 채널 : 전체 오브젝트 마스크입니다. 현재 머티리얼에 사용되고 있지 않습니다.
모두 합쳤을 때 언리얼 레벨 안에 배치된 의자의 모습은 다음과 같습니다.

마스킹 팁 & 트릭
텍스처 마스킹은 매우 강력한 툴로, 특히 언리얼 엔진의 다른 툴과 함께 사용할 경우 더 그렇습니다. 다음 섹션에서는 작업 시 텍스처 마스킹을 최대한 활용할 수 있는 팁과 트릭 몇 가지를 소개합니다.
텍스처 마스킹 및 머티리얼 인스턴스
텍스처 마스킹과 머티리얼 인스턴스를 함께 사용하는 것은 에셋의 베리에이션을 무한히 만들 수 있는 매우 좋은 방법입니다. 예를 들어 텍스처 마스크를 사용하여 컬러와 같은 특정 프로퍼티를 지니는 부분을 정의한 뒤, 인스턴스 에디터에서 다양한 머티리얼 인스턴스를 사용하여 이러한 프로퍼티를 커스터마이징할 수 있습니다. 머티리얼 인스턴싱 문서에서 자세히 알아보세요.

머티리얼 마스크와 머티리얼 인스턴스를 함께 사용하면 아티스트가 머티리얼 내에서 손쉽고 빠르게 색과 다른 값을 변경할 수 있습니다. 이러한 접근 방법을 사용하면 위 이미지의 SM_Chair처럼 고도로 커스터마이징 가능한 에셋을 제작할 수 있습니다.
마스킹 및 채널 아티팩트
DirectX 특성으로 인해 종종 텍스처의 초록 채널 이 최고 압축을 제공하는 경우가 있습니다. 마스크의 압축 아티팩트가 심한 경우, 먼저 정보를 이미지의 초록 채널에 배치하여 도움이 되는지 확인해 보시기 바랍니다. 그래도 문제가 해결되지 않는 경우 알파 채널을 사용해서 마스크를 저장해 보세요.
텍스처의 알파 채널을 사용해서 마스크 정보를 저장할 때는 주의할 점이 있습니다. 텍스처에 알파 채널을 추가하면 해당 텍스처의 메모리 사용량이 크게 늘어납니다. 그 정도가 심할 경우 여러 마스크를 텍스처의 RGB 채널에 패킹해 넣어서 얻은 이점을 모두 잃을 수도 있습니다.
sRGB 및 마스크 텍스처
다수의 마스크 텍스처를 단일 텍스처로 패킹할 때는 마스크가 감마 보정되지 않도록 텍스처 에디터에서 sRGB 옵션을 꺼야 합니다.

머티리얼에서 이전에 샘플링된 텍스처의 sRGB를 비활성화할 경우, 기존의 2D Texture Sampler 노드에서 샘플 타입이 자동 업데이트되지 않습니다. 따라서 기존의 2D Texture Sampler 노드에서 노드 타입을 조정해야 합니다. 샘플러 타입(Sampler Type) 을 변경하지 않으면 머티리얼 컴파일이 실패하여 통계 로그에 다음과 같은 메시지가 표시될 것입니다.

이 오류를 해결하려면 샘플러 타입을 디폴트값인 Color에서 Linear Color로 바꾸면 경고가 사라질 것입니다. 그러나 안전을 위해서는 머티리얼을 다시 컴파일하고 변경 사항이 성공적으로 적용되었는지 확인해야 합니다. 완료하면 경고가 사라집니다.
결론
텍스처 마스킹은 익혀 두면 아주 약간의 소스 콘텐츠로 무한에 가까운 베리에이션을 만들 수 있는 매우 강력한 개념입니다. 어떤 이미지 파일이든 텍스처 마스크에 사용할 수 있는 채널은 4개뿐이므로, 각 채널을 현명하게 사용해야 합니다. 마스크 텍스처의 sRGB 옵션을 비활성화해야 마스크의 선명도가 크게 향상된다는 점도 잊지 마세요.