머티리얼을 매우 가까이에서 봤을 때 머티리얼에 사용된 텍스처가 깨지고 픽셀화되어 보인 적이 있었을 것입니다. 퍼포먼스를 최적화하기 위해 적당한 거리에서는 괜찮아 보이지만 가까이에서 살펴보면 그렇지 않은 해상도로 텍스처가 스케일 조절되는 경우가 있습니다.
이 문제를 해결하기 위해 디테일 텍스처 로 알려진 방법을 사용하여 매우 가까이에서 머티리얼이 픽셀화되어 보이는 것을 방지할 수 있습니다.
디테일 텍스처링
디테일 텍스처링(Detail texturing) 은 오브젝트의 원본 디퓨즈 및 노멀 텍스처에 많이 반복되는 디퓨즈 및 노멀 텍스처를 레이어링함으로써 텍스처를 보다 디테일해 보이도록 합니다. 이를 통해 근거리에서의 디테일을 일반적으로 가능한 수준보다 훨씬 뛰어나게 연출할 수 있습니다.
다음은 디테일 텍스처링의 실전 사용 예시입니다.

좌측(1번) 머티리얼의 경우 디테일 텍스처를 사용하여 표면에 높은 빈도의 디테일을 추가했습니다. 우측(2번) 머티리얼의 경우 디테일 텍스처를 사용하지 않았습니다. 왼쪽 이미지가 오른쪽 이미지보다 더 선명하고 디테일하게 보이는 것을 확인할 수 있습니다.
Detail Texturing 노드 살펴보기
팔레트(Palette) 또는 컨텍스트 메뉴에서 'detail texturing'을 검색하면 Detail Texturing 머티리얼 함수를 찾을 수 있습니다. 머티리얼에 디테일 텍스처를 적용하는 유일한 방법인 것은 아니지만, 모든 로직이 머티리얼 함수 내에 포함되어 있으므로 워크플로 관점에서 가장 빠릅니다. 텍스처 입력만 제공하면 되기 때문입니다.

프로퍼티 | 설명 |
---|---|
Scale (S) | 디테일 텍스처의 스케일을 설정합니다. 숫자가 클수록 더 많이 타일링되고, 숫자가 작을수록 더 적게 타일링됩니다. |
Diffuse (V3) | 디퓨즈 텍스처의 입력입니다. |
DetailDiffuse (T2d) | 디퓨즈 디테일 텍스처의 입력입니다. 이 입력은 텍스처 오브젝트만 수락할 수 있습니다. |
DiffuseIntensity (S) | 디테일 디퓨즈 텍스처의 강도를 제어합니다. |
Normal (V3) | 노멀 맵 텍스처의 입력입니다. |
DetailNormal (T2D) | 노멀 맵 디테일 텍스처의 입력입니다. 이 입력은 텍스처 오브젝트만 수락할 수 있습니다. |
NormalIntensity (S) | 디테일 노멀 맵 텍스처의 강도를 제어합니다. |
텍스처 샘플을 텍스처 오브젝트로 변환하기
Detail Texturing 머티리얼 함수가 올바르게 작동하기 위해서는 디테일 텍스처로 사용하고자 하는 텍스처를 일반 텍스처 샘플에서 텍스처 오브젝트로 변환해야 합니다. 다음 단계를 따라 변환합니다.
-
디테일 텍스처로 사용하고자 하는 텍스처 샘플을 찾습니다.
-
Texture Sample 노드를 우클릭하고 컨텍스트 메뉴에서 텍스처 오브젝트로 변환(Convert To Texture Object) 을 선택합니다.
-
텍스처 샘플이 텍스처 오브젝트로 변환됩니다.
머티리얼에 디테일 텍스처링을 사용하는 방법
머티리얼이 디테일 텍스처링을 사용하도록 환경설정할 수 있는 두 가지 방법이 있으며, 두 방법 모두 아래에 설명되어 있습니다. 두 방법 간의 주된 차이점은 사전 제작된 Detail Texturing 머티리얼 함수를 사용하는지, 아니면 머티리얼 그래프에서 직접 디테일 텍스처링 로직을 생성하는지 여부입니다. 두 옵션은 최종적으로 동일한 결과물을 만들어 내므로 둘 중 더 낫거나 나쁜 것은 없습니다. 어떤 방법을 선택할지는 특정 머티리얼 및 프로젝트의 요구 사항에 따라 다릅니다.
다음 섹션에서 사용되는 모든 콘텐츠는 언리얼 엔진 시작용 콘텐츠(Starter Content) 에서 제공됩니다. 여기에서 소개하는 기법은 어떤 텍스처에나 사용할 수 있지만, 그대로 따라해 보고 싶다면 프로젝트에 시작용 콘텐츠 가 포함되어 있어야 합니다.
테스트용으로 사용할 새 머티리얼을 생성합니다. 콘텐츠 브라우저 에서 우클릭 하고 컨텍스트 메뉴의 기본 에셋 생성(Create Basic Asset) 섹션에서 머티리얼(Material) 을 선택합니다. 머티리얼에 DetailTexturing 과 같이 머티리얼을 설명하는 이름을 지정합니다.

Detail Texturing 머티리얼 함수 사용하기
-
콘텐츠 브라우저에서 에셋을 더블클릭 하여 머티리얼을 엽니다. 머티리얼 에디터가 열립니다.
-
시작용 콘텐츠에서 다음과 같은 4개의 텍스처를 찾아 콘텐츠 브라우저에서 머티리얼 그래프로 드래그합니다.
- T_Brick_Clay_Old_D
- T_Brick_Clay_Old_N
- T_Ground_Gravel_D
- T_Ground_Moss_N
완료되면 머티리얼 그래프는 다음과 같아 보일 것입니다.
-
머티리얼 그래프를 우클릭 하고 컨텍스트 메뉴에서 'Detail Texturing'을 검색합니다. 기타(Misc) 카테고리의 DetailTexturing 을 클릭하여 그래프에 이 머티리얼 함수를 추가합니다.
-
머티리얼 그래프에 DetailTexturing 머티리얼 함수가 생성됩니다.
-
이 예시에서는 T_GroundGravel_D 및 T_Ground_Moss_N 이 디테일 텍스처로 사용됩니다. 디테일 텍스처를 머티리얼 함수에 연결하기 위해서는 텍스처 오브젝트로 변환해야 합니다. T_GroundGravel_D 및 T_Ground_Moss_N 을 우클릭하고 텍스처 오브젝트로 변환합니다.
-
아래와 같이 모든 노드를 연결합니다. 2개의 벽돌 텍스처를 Diffuse 및 Normal 입력에 연결하고, 2개의 텍스처 오브젝트를 DetailDiffuse 및 DetailNormal 핀에 연결해야 합니다. Diffuse 출력을 메인 머티리얼 노드의 Base Color 입력에, Normal 출력을 메인 머티리얼 노드의 Normal 입력에 전달합니다.
-
텍스처의 스케일과 강도를 제어하려면 추가 값이 필요합니다. 이러한 입력에는 Constant 머티리얼 표현식 또는 스칼라 파라미터 중 하나를 사용할 수 있습니다. 이 예시에서는 Scale, Diffuse Intensity, Normal Intensity 로 명명된 스칼라 파라미터 3개를 사용합니다. 이러한 3개 노드의 디폴트값을 모두 1 로 설정합니다.
-
스칼라 파라미터를 해당 입력에 연결합니다. 완료 시 머티리얼 그래프는 다음과 같은 모습입니다.
-
스칼라 파라미터의 값을 조정하여 디테일 텍스처의 외관을 수정할 수 있습니다. 스케일 값을 1, 5, 10으로 설정했을 때 텍스처가 어떻게 다른지 보여주는 예시입니다. 디테일 텍스처가 메시 전반에 더 많이 타일링되어 텍스처 자체가 작거나 촘촘하게 나타납니다.
디테일 텍스처링 수동 구성
어떤 이유로든 Detail Texturing 머티리얼 함수를 사용할 수 없는 경우 아래의 머티리얼 표현식 노드 및 지시를 통해 머티리얼 그래프 내에서 이 함수 기능을 빌드할 수 있습니다.
-
섬네일을 우클릭하고 컨텍스트 메뉴에서 복제(Duplicate) 를 선택하여 콘텐츠 브라우저 에서 첫 번째 머티리얼을 복제합니다. 새 머티리얼의 이름을 DetailTexturing_02 로 변경하고 더블클릭하여 머티리얼 에디터에서 엽니다.
-
텍스처 4개를 제외하고 모두 삭제합니다. 또한 2개의 텍스처 오브젝트는 텍스처 샘플로 다시 변환해야 합니다. 각 Texture Object 노드를 우클릭하고 컨텍스트 메뉴에서 텍스처 샘플로 변환(Convert to Texture Sample) 을 선택합니다.
- 다음 머티리얼 표현식 노드는 수동으로 디테일 텍스처를 생성하는 데 필요합니다. 팔레트 에서 검색하거나 우클릭 컨텍스트 메뉴의 검색창을 사용하여 다음과 같은 노드를 찾을 수 있습니다.
- Texture Coordinate x 1
- Clamp x 1
- Scalar Parameter x 2
- Add x 2
- Multiply x 3
완료 시 머티리얼 그래프는 다음과 같은 모습입니다.
-
그래프에 모든 노드를 추가한 후 표시된 대로 연결합니다. 아래 이미지는 그래프의 Base Color 부분에 대한 올바른 환경설정을 보여줍니다. 완료 시 머티리얼 그래프는 다음과 같은 모습입니다.
이미지를 클릭하면 확대됩니다.
-
텍스처 스케일을 제어하기 위해 Base Color 섹션에서 생성한 로직을 노멀 맵에 재사용할 수 있습니다. 아래와 같이 노드를 연결합니다.
이미지를 클릭하면 확대됩니다.
-
Base Color와 Normal 맵이 모두 연결되었다면, 머티리얼을 이제 컴파일, 저장, 사용할 준비가 된 것입니다.
이미지를 클릭하면 확대됩니다.
디테일 텍스처링 팁 & 트릭
다음 섹션에서는 머티리얼에 디테일 텍스처를 사용할 수 있는 다양한 방법에 대한 몇 가지 팁 & 트릭을 다룹니다.
거리 기반 디테일 텍스처링
터레인과 같이 거대한 표면을 처리하는 경우 텍스처가 끊김없이 타일링되어 있더라도 특히 원거리에서 볼 때 반복되는 부분이 눈에 띄어 텍스처의 외관이 저하시킬 수 있습니다.
이 문제를 해결하려면 이전에 생성된 디테일 머티리얼을 수정하여 카메라가 가까이 있을 때는 하나의 텍스처를 표시하고 카메라가 멀리 있을 때는 또 다른 텍스처를 표시하도록 하면 됩니다. 이는 거리 기반 텍스처 블렌딩이라고도 하며, 다음 인스트럭션에 따라 구현할 수 있습니다.
-
먼저 DetailTexturing_02 머티리얼을 복제하여 DistanceFade 로 이름을 변경하고 머티리얼을 엽니다.
-
원본 머티리얼에서 대부분의 노드 연결을 삭제해도 되지만, 4개의 텍스처는 삭제해서는 안 됩니다. 또한 섹션 이름을 아래와 같이 Scale Controls 로 유지해야 합니다. 다음 머티리얼 표현식을 검색하여 그래프에 추가합니다.
- World_Position x 1
- Camera_Position_WS x 1
- Distance x 1
- Divide x 1
- Power x 1
- Clamp x 1
- Constant x 2
완료 시 머티리얼 그래프는 다음과 같은 모습입니다.
-
두 Constant 머티리얼 표현식의 값을 512 및 4 로 변경한 다음, 아래 구성처럼 노드를 연결합니다. 텍스처 블렌드가 일어나는 거리는 Divide 머티리얼 표현식에 연결된 첫 번째 Constant 에 의해 제어됩니다(예시 이미지에서 512로 설정됨). 아래 머티리얼 그래프는 거리에 기반한 텍스처를 블렌딩하는 데 필요한 모든 로직을 제공합니다.
-
이제 그래프의 나머지 부분에 거리 페이드 로직을 연결할 수 있습니다. 먼저, 그래프에 Linear Interpolate (Lerp) 노드 2개를 추가합니다. Lerp 노드의 알파 입력이 두 텍스처 간의 트랜지션을 구동합니다. 아래와 같이 머티리얼 와이어 연결을 완료합니다.
-
이펙트를 프리뷰하려면 머티리얼 프리뷰 뷰포트에서 오른쪽 마우스 버튼 을 누른 채 마우스를 위/아래로 움직여 줌 인/줌 아웃을 수행합니다. 카메라가 스피어로부터 512유닛만큼 멀리 떨어지면 머티리얼이 벽돌에서 자갈로 전환됩니다. 트랜지션이 일어나지 않는다면 Divide 노드에 연결된 Constant 의 값을 조정하면 됩니다. 값을 512보다 작게 줄이면 트랜지션이 더 빨리 일어납니다.
결론
디테일 텍스처링은 높은 빈도로 반복되는 디테일 텍스처로 베이스 텍스처를 보충하여 머티리얼 외관을 향상할 수 있는 매우 강력한 툴입니다. 디테일 텍스처는 픽셀화 현상을 어느 정도 숨기는 데만 도움이 될 뿐이며, 플레이어의 카메라를 오브젝트에 지나치게 줌 인하면 디테일 텍스처의 장점이 무색해질 수 있다는 점에 유의하세요. 또한 디테일 텍스처를 추가하면 2개 이상의 텍스처 룩업이 머티리얼에 추가되는데, 이로 인해 특히 모바일 플랫폼에서 퍼포먼스 또는 메모리 문제가 있을 수 있습니다.