텍스처 마스크 사용법

머티리얼에 텍스처 마스킹을 사용하는 방법 안내입니다.

Choose your operating system:

Windows

macOS

Linux

3D 애셋 제작시 같은 머티리얼 내 여러가지 표면 유형을 정의하는 기능이 있었으면 싶을 때가 있습니다. 간단하고 저렴한 해결책은, Texture Mask (텍스처 마스크)를 사용하여 어느 표면이 머티리얼의 어느 부분에 영향받도록 할 것인지 정의하면 됩니다. 이번 하우투에서는 언리얼 엔진 4 (UE4) 머티리얼 안에서 텍스처 마스킹을 사용하는 법에 대해 다뤄보겠습니다.

텍스처 마스크

텍스처 마스크란 머티리얼 내부의 효과 범위를 제한시키기 위해 사용되는 회색조 텍스처, 또는 한 텍스처의 (R, G, B, 또는 A) 채널 하나를 말합니다. 꽤나 자주, 마스크는 다른 텍스처의 채널 하나에 포함되어 있는데, 디퓨즈나 노멀 맵의 알파 채널 이 그 예입니다. 머티리얼에 미사용 채널을 활용하거나 샘플링되는 텍스처의 수를 최소한으로 유지시키기에 좋은 방법입니다. 기술적으로, 어떤 텍스처의 어떤 채널도 텍스처 마스크로 간주하여 사용할 수 있습니다.

시작용 콘텐츠에서 SM_Chair 스태틱 메시에 텍스처 마스크를 적용한 예제는 이렇습니다.

TM_Chair_Mask_Texture.png

텍스처 마스크 생성하기

텍스처 마스크 생성은 아무 2D 이미지 편집 프로그램에서나 가능합니다. 그러기 위해서는, 마스크를 적용하고자 하는 부분은 흰색 으로 칠하고 나머지 부분은 검정 으로 놔둡니다. 다음 그림에서 실제 예를 확인할 수 있습니다.

TM_Mask_Break_Down.png

오른편에 초록색 윤곽선 부분은, 마스크 텍스처의 모습입니다. 약간만 흰색 으로 칠해져 있고, 다른 부분은 검정 으로 되어 있습니다. 왜냐면 흰색 부분에만 영향을 끼치고 싶기 때문입니다. 왼편에는 의자 메시에 마스크 텍스처가 적용된 부분을 확인할 수 있습니다.

텍스처 마스크 생성시에는 검정 또는 흰색 이외 색 정보는 사용해서는 안됩니다. 다른 색을 사용했을 경우 UE4 에서 마스크 사용시 이상한 부작용이 생길 수 있습니다.

텍스처 마스크로 익스포트하기

마스크 텍스처 페인트 작업이 완료되면, 단일 이미지로 익스포트하거나, 다수의 마스크를 단일 이미지의 R, G, B, A 채널에 묶어 익스포트할 수도 있습니다. 이를 흔히 RGB 마스크 패킹이라 일컬으며, 아주 약간의 추가 작업으로 엄청난 퍼포먼스와 메모리가 절약되기에 마스크 텍스처 제작시 선호되는 방법입니다.

텍스처의 알파 채널에 무언가를 패킹해 넣을 때, 어떤 2D 이미지 편집 프로그램을 사용하든지 익스포트할 때 알파를 포함시키도록 해야 합니다. 그러지 않으면, 텍스처 익스포트시 알파 채널이 포함되지 않을 위험이 있습니다.

텍스처 마스크 사용하기

마스크 텍스처는 UE4 머티리얼 에디터에서 다양한 방식으로 사용할 수 있습니다. 이는 이미시브 라이트 소스를 정의하는 것에서 러프니스 텍스처로 사용하는 것까지 다양합니다. 다음 부분에서는 UE4 에서 텍스처 마스크가 가장 자주 쓰이는 방법을 살펴보도록 하겠습니다.

이미시브 마스크

마스크 텍스처로 매우 자주 하는 작업 중 하나는, 머티리얼의 이미시브 (발광) 부분을 조절하는 데 사용하는 것입니다. 그 방법은 우선 머티리얼의 발광 부분을 흰색 으로 하는 이미시브 마스크 텍스처를 만든 다음, 머티리얼 에디터 안에서 그 마스크 텍스처에 컬러를 곱하는 것입니다. 이미시브 이펙트의 모양과 세기를 보다 세밀히 조절하고자 할 때 일반적으로 쓰이는 방법입니다. 이미시브 텍스처 마스크를 실제 활용한 예제는 다음과 같습니다.

TM_Emissive_Mask_Materail.png

위 예제에서 마스크 텍스처를 사용하여 머티리얼의 발광 부분을 정의하는 데 도움을 주고 있습니다. 이미시브에 사용되는 컬러는 마스크 텍스처에 Vector 3 Parameter 를 곱하는 데서 옵니다. 이미시브의 세기는 Scalar 값으로 제어되고 있습니다. 이런식으로 이미시브 마스킹을 사용할 때의 주요 장점은, 이미시브의 모양과 느낌에 관련된 무언가를 바꿀 필요가 있을 때마다 텍스처를 다시 임포트해서 업데이트할 필요 없이 머티리얼 안에서 파라미터만 바꿔주면 된다는 점입니다.

머티리얼 마스킹

마스크 텍스처로 매우 자주하는 작업 중 또다른 하나는, 각기 다른 종류의 텍스처 정보를 개별 R, G, B, A 채널에 저장하는 것입니다. 이 기법의 완벽한 예제라면 시작용 콘텐츠에 포함된 SM_Chair 스태틱 메시를 보면 됩니다.

SM_Chair 와 그에 관련된 콘텐츠 전부는 콘텐츠 브라우저 에서 Starter Content 폴더를 선택한 다음 검색창에 chair 라 입력하면 찾을 수 있습니다. 그러면 의자에 관련된 모든 콘텐츠가 표시됩니다. 의자가 보이지 않는다면, 프로젝트에 시작용 콘텐츠가 포함되지 않았기 때문일 수 있습니다. 해결을 위해서는 새 프로젝트를 만들거나

[애셋 이주](Basics/AssetsAndPackages/Migrate)
툴을 사용하여 다른 프로젝트에서 의자 콘텐츠를 옮겨 오면 됩니다.

M_Chair 의자 머티리얼을 열면, 텍스처 매핑의 완벽한 실전 예제를 확인할 수 있습니다.

TM_Chair_Material.png

이 머티리얼에서 T_Chair_M 마스크 텍스처는 의자의 외형 관련 모든 부분을 제어하는 데 사용됩니다. 어느 부분은 금속이고 어느 부분은 금속이 아닌지에서부터 그 부분의 색깔은 무엇인지, 마스크 텍스처가 그 모든 것을 정의하는 데 도움을 줍니다. 다음 그림은 SM_Chair 의 마스크 텍스처 각 채널이 어떻게 작동하는지에 대한 해부도입니다. 왼편 에는 마스크가 텍스처로 어떻게 보이는지 입니다. 오른편 의 작은 이미지 각각은 각 채널을 나타내며, 그 채널의 어떤 부분이 의자 스태틱 메시에 영향을 끼치는지 확인할 수 있습니다.

TM_Mask_Example.png

의자 마스크 텍스처의 각 채널 안에 어떠한 유형의 정보가 저장되는지에 대한 분석입니다.

  • 빨강 채널 : 앰비언트 오클루전 정보입니다. 머티리얼에서는 베이스 컬러에 약간의 표면 변화를 주기 위해 사용됩니다. TM_Red_Channel.png

  • 초록 채널 : 메탈릭 마스크입니다. 머티리얼에서는 어떤 부분이 금속인지 정의하는 데 사용됩니다. 금속 부분의 색 정의를 돕기 위해서도 사용됩니다. TM_Green_Channel.png

  • 파랑 채널 : 논메탈릭 마스크입니다. 머티리얼에서는 비금속 부분을 정의하는 데 사용됩니다. 이 마스크는 비금속 부분의 색 정의를 돕기 위해서도 사용됩니다. TM_Blue_Channel.png

  • 알파 채널 : 전체 오브젝트 마스크입니다. 현재 머티리얼에 사용되고 있지 않습니다.

모두 합쳐 놓았을 때, UE4 레벨 안에 배치된 의자 모습은 다음과 같습니다.

TM_SM_Chair.png

마스킹 팁 & 정보

텍스처 마스킹은 특히나 UE4 의 다른 툴과 함께했을 때 매우 강력한 도구가 될 수 있습니다. 다음 부분에서는 여러분 작품에 텍스처 마스킹의 위력을 최대한 발휘하도록 하기 위한 팁과 정보를 몇 가지 다루도록 하겠습니다.

텍스처 마스킹 및 머티리얼 인스턴싱

텍스처 마스킹 및 머티리얼 인스턴싱을 함께 사용하는 것은 애셋의 변종을 무한히 만들 수 있는 매우 좋은 방법입니다. 예를 들어 텍스처 마스크를 사용하여 컬러와 같은 특정 속성을 지닌 부분을 정의한 뒤, 다양한 머티리얼 인스턴스를 사용하여 그 속성 각각을 변화시키면 거의 무한대의 옵션이 가능해지는 것입니다.

TM_TM_&_MI.png

예를 들어 SM_Chair Material 에서 머티리얼 인스턴스를 생성한 이후, 그 컬러와 다른 값을 조정하면 위 그림에서 보듯이 거의 무한대의 의자 변종을 공급할 수 있습니다.

마스킹 및 채널 부작용

DirectX 의 별난 점 때문에, 종종 텍스처의 초록 채널 은 압축율이 가장 좋게 나옵니다. 마스크가 압축 부작용을 심하게 겪는 경우, 우선 초록 채널 에 넣어서 도움이 되는지 확인해 보시기 바랍니다. 그걸로 문제가 해결되지 않는 경우, 알파 채널을 사용해서 정보를 저장해 보세요.

텍스처의 알파 채널을 사용해서 마스크 텍스처를 저장할 때는 주의할 점이 있습니다. 텍스처에 알파 채널을 추가하면 텍스처의 메모리 사용량이 크게 늘기에, 그 정도가 심하면 여러 마스크 텍스처를 하나의 RGB 채널에 패킹해 넣어서 얻은 이점을 모두 잃을 수도 있습니다.

sRGB 및 마스크 텍스처

다수의 마스크 텍스처를 하나의 텍스처에 패킹해 넣을 때는, sRGB 옵션을 꺼야 합니다. 마스크가 감마 보정되서는 안되기 때문입니다.

TM_Disable_sRGB.png

하지만 이 작업을 할 때는, 2D Texture Sampler 노드 유형을 조정해 줘야 하는데, sRGB 가 켜진 텍스처 입력을 받을 것을 기대하기 때문입니다. Sampler Type 을 변경하지 않는다면, 머티리얼 컴파일이 실패하여 통계 로그에 다음과 같은 메시지가 표시될 것입니다.

TM_sRGB_Sampler_Node_Error.png

이 오류를 고치려면, Sampler Type 을 기본값인 Color 에서 Linear Color 로 바꾸면 경고가 사라질 것입니다. 하지만 안전을 위해 머티리얼을 다시 컴파일하고 변화가 적용되었는지 확인하세요. 완료되면 경고가 사라지고 머티리얼을 사용할 수 있을 것입니다.

결론

텍스처 마스킹은 익혀두면 아주 약간의 소스 콘텐츠로 거의 무한대의 변종을 만들 수 있는 매우 강력한 개념입니다. 기억할 것은, 하나의 마스크 텍스처에 사용할 수 있는 채널은 4 개 밖에 없으니 채널을 현명하게 사용해야 합니다. 마스크 텍스처의 sRGB 옵션을 꺼야 마스크의 선명도 향상에 큰 도움이 될 수 있다는 점도 잊지 마시구요.

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
건너뛰기