UDN
Search public documentation:

TerrainAdvancedTexturesKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 터레인 시스템 > 터레인 고급 텍스처

터레인 고급 텍스처


문서 변경내역: David Green 원저.

개요


터레인 텍스처링은 광범위하게 다양한 방법과 해결책이 있는 방대한 주제입니다. 본 튜토리얼은 일반적인 비디오 게임의 터레인 텍스처링 문제를 관리하기 위해 Unreal Engine 3에서 사용할 수 있는 몇 가지 방법과 아울러 터레인 텍스처링의 질 향상과 세부묘사 증가 방법에 대해 다룰 것입니다. 본 튜토리얼은 다양한 텍스처링 문제에 대한 해결책을 보여주는, 점차 난위도가 증가하는 섹션으로 나뉘어집니다.

참고: 이것은 고급 레벨의 튜토리얼이고, 여러분께서 다음 사항에 대해 잘 알고 있다는 것을 가정합니다.

추가 정보가 필요하거나 이러한 주제 중 어떤 것에 대해 복습 이 필요한 경우, 그에 적절한 UDN 페이지를 검토해 주십시오.

터레인용 텍스처링 시스템을 디자인하는 경우 성능과 사실적인 세부묘사의 2가지 주요 고려사항이 있습니다. 대부분의 경우, 현재의 렌더링 하드웨어 및 소프트웨어와 위의 2가지 사항간에는 상반관계가 존재합니다. 성능을 강조하면 현실성이 낮아지고, 반면에 높은 비주얼 품질을 추구하면 성능이 상당히 저하됩니다.

DGTerrainExamples.jpg

터레인 텍스처링의 제한사항


지질적 터레인 스타일의 사실적인 시각적 표현을 제작하려 시도할 시, 레벨 디자이너를 괴롭히는 여러 기술적 및 예술적 문제가 있습니다.

텍스처 스케일

대부분의 경우, 터레인에 적용되는 텍스처용 UV 스케일은 근접장 뷰에서 텍스처 스타일이 비교적 정확하게 보이도록 조절됩니다. 풀잎과 작은 바위는 실제와 비슷한 크기로 스케일 조절됩니다. 이것과 관련된 문제점에는 원거리 뷰로 볼 시 타일링이 좀 더 확연히 나타나고, 특정 크기의 텍스처에는 일정한 양의 세부묘사와 다양성만이 포함될 수 밖에 없게됩니다. 일반적으로 텍스처의 해상도가 낮을수록 타일링은 더욱 분명해지고 세부묘사 또한 훨씬 감소됩니다.

텍스처 UV 스케일이 작게 설정되어 있다면 대부분의 경우 타일링은 아주 분명 해집니다.

텍스처 UV 스케일이 크게 설정된 경우, 타일링은 별로 눈에 띄지 않고 먼 장소의 세부묘사가 좀 더 다양하게 나타나지만, 일반적으로 카메라에 근접한 터레인은 희미하게 보이고 풀 또는 바위와 같은 해당 텍스처에 있는 객체의 세부묘사 스케일이 실제 현실에서 보다 크게 보이게 됩니다.

텍스처 타일링

터레인에서 사용할 목적으로 생성된 텍스처는 보통 512x512, 1024x1024, 또는 2048x2048 해상도이므로 광범위하게 다양한 세부묘사를 담고 있고 시각적 타일링 결함이 없는 표면에 걸쳐 매핑되는 텍스처를 얻는 것은 어려운 일입니다. 대부분의 경우, 텍스처 전반에 걸친 색조(hue) 또는 밝기의 변화와 같은 텍스처의 시각적인 차이 또는 텍스처 중간에 있는 큰 암석과 같은 특정 세부묘사는 카메라 뷰에 따라서 줌아웃하듯 멀리서 볼 시 타일링을 더 두드러지게 만드는 원인이 될 수 있습니다.

필레이트

터레인는 일반적으로 대형 야외 장면을 제작하는 데 사용되기 때문에 화면의 상당 부분(일반적으로 50%에서 75%)을 포함합니다. 터레인 머티리얼의 복잡도가 증가함에 따라, 화면에 렌더링되는 텍셀에 사용되는 텍스처링을 제작하기 위해 좀 더 강력한 프로세스 파워를 필요로할 수 있습니다. 비디오 어댑터의 GPU와 필레이트 속도가 느리면 렌더링 시간은 길어지고 성능도 떨어지게 됩니다.

The Unreal Engine

Unreal Engine의 터레인 시스템에는 적용될 수 있는 머티리얼의 수와 실행될 수 있는 쉐이더 명령의 수에는 구체적인 제한이 있습니다. 정확한 수는 레이어 디자인과 특정 비디오 어댑터 하드웨어의 제한사항에 따라 변합니다. Shader Model 2와 3의 비디오 어댑터는 16개의 텍스처 샘플러를 지원합니다. 각 터레인 머티리얼에 사용되는 각각의 고유 텍스처는 이러한 샘플러 중 하나를 필요로 합니다. 그러나 대개의 경우 Shader Model 2 비디오 어댑터는 Shader Model 3 비디오 어댑터만큼 복잡한 터레인 머티리얼 레이어 셋업을 렌더링할 수 없다는 것에 주의하십시오. 텍스처 샘플러에 대해서는 본 튜토리얼의 후반부에서 아주 상세하게 다뤄질 것입니다.

이러한 하드웨어 및 렌더링에서의 제한사항으로 인해 원하는 텍스처링 결과를 얻으려면 최소의 개별 텍스처와 머티리얼, 그리고 가능한 최소 개수의 명령을 사용하게 전체 터레인 머티리얼 셋업을 디자인 하는 것이 현명합니다.

인스턴싱에 대한 머티리얼 디자인하기


Unreal Engine 머티리얼 시스템은 머티리얼의 인스턴스화 라는 기능을 지원합니다. 이것은 원칙적으로 부모 머티리얼의 편차에 따른 새로운 머티리얼을 허용합니다. 부모 머티리얼은 1 개 이상의 매개 변수 스타일의 표현식을 포함하고, 이것은 머티리얼 인스턴스에 표출되어 다른 별도 머티리얼의 부하없이 부모 머티리얼 속성의 부분 집합을 변경할 수 있게 하여줍니다. 인스턴스화된 머티리얼은 많은 작업을 요구하는 머티리얼의 재컴파일을 필요로 하지 않습니다.

간단한 예로는 각기 다른 색상의 2 번째 머티리얼을 제공하는 부모 머티리얼과 머티리얼 인스턴스 가 있습니다. 간단히 부모 머티리얼에 매개 변수를 노출하여 부모 머티리얼의 인스턴스화된 복사본에서 RGB 색조을 변경할 수 있다면 2개의 별도 머티리얼을 만들어야 할 이유가 전혀 없습니다.

인스턴스화한 머티리얼매개 변수 표현식을 사용하여 1개의 부모 머티리얼은 다양한 색상, 불투명도, 블렌드 등을 가진 여러 인스턴스를 가질 수 있습니다.

머티리얼에 사용되는 가장 일반적인 매개 변수 스타일 표현식에는 ScalarParameterVectorParameter 표현식이 있습니다. ScalarParameter 표현식은 1 개의 부동 소수점 값을 가지므로 Constant 표현식과 비슷하며, VectorParameter 표현식은 4개의 부동 소수점 값인 ARGB를 가지므로 Constant4Vector 표현식과 비슷합니다.

각 매개 변수 스타일 표현식은 머티리얼의 모든 인스턴스에서 나타나는 매개 변수의 이름을 지정할 수 있는 "ParameterName" 속성을 가지고 있습니다. 일반적으로 "DiffuseColor" 또는 "BlendAmount"와 같이 설명이 붙은 이름을 사용하는 것이 좋습니다.

머티리얼 인스턴스 를 사용할 경우 각 머티리얼과 매개 변수는 반드시 고유한 이름을 사용해야 한다는 것에 주의하십시오. 그렇지 않으면, 터레인 구성 요소의 마지막 머티리얼이 컴파일될 경우, 결과적으로 렌더된 머티리얼은 올바르지 않을 수 있습니다. 예를 들어, 1개 이상의 매개 변수에 동일한 이름을 사용하면 컴파일된 머티리얼이 동일한 이름의 모든 인스턴스에 대해 해당 특정 이름의 첫 번째 발생을 사용하게 유발합니다.

UE3MatInstExample.gif

머티리얼 표현식의 기본 단위


터레인을 위해 디자인하는 복잡한 머티리얼 시스템의 대부분은 각 터레인 레이어 텍스처에 대해 일련의 공통된 "기본 단위"를 사용합니다. 따라서 먼저 이러한 머티리얼 섹션들의 기능에 대해 살펴보고 설명하겠습니다.

확산 텍스처 밝기와 틴트

터레인에서의 텍스처 샘플의 수와 게임 타이틀의 총 텍스처 개수를 줄이려면 밝기와 틴트 수정자를 제작하면 됩니다. 연한 갈색 및 진한 갈색의 모래에서와 같이 밝기 또는 틴트를 변화시켜 텍스처 파일의 여러 버전을 만드는 대신에, VectorParameter 표현식의 값을 사용하여 RGB 채널을 수정하는 Multiply 표현식을 사용하여 머티리얼내의 텍스처를 간단하게 수정할 수 있습니다.

텍스처의 밝기와 틴트를 변경하려면 VectorParameter RGB 속성을 변경하십시오. 1.0,1.0,1.0이 기본값입니다. VectorParameter 표현식의 A(알파) 속성 값은 변경하지 않고 기본값인 1.0을 그대로 사용할 수 있습니다.

UE3MatBrightTint.gif

확산 디테일 텍스처의 밝기

대형 스케일 확산 텍스처의 근접장 뷰 품질을 보완하기 위해 회색조 디테일 텍스처를 사용할 시, 해당 확산 텍스처의 전반적인 밝기를 변경시키지 않게 디테일 텍스처의 밝기 레벨을 조절하는 것이 종종 필요합니다. UnpackMax에 대한 디테일 텍스처의 속성을 설정하여 이것을 이루어내는 것이 가능하지만 밝기는 해당 값으로 고정됩니다. ScalerParameter식의 값으로 RGBA 채널을 변경하는 Multiply 표현식을 사용하여 디테일 텍스처의 모든 인스턴스에 대한 밝기를 필요에 따라 변경할 수 있습니다.

텍스처의 밝기를 변경하려면 ScalerParameter 속성을 변경합니다. 1.0이 기본값입니다.

UE3MatDetailBright.gif

NormalMap 디테일 텍스처의 블렌드와 강도

대부분의 경우 NormalMaps는 험준한 바위 절벽 면과 바위산과 같은 터레인에 사용되는 대형 바위 텍스처의 현실감을 대폭 향상시킬 수 있습니다. 텍스처 크기 제한과 1024x1024 또는 2048x2048의 일반적인 텍스처 해상도로 인해 확산 암석 텍스처는 실제 상황의 시각적인 모습을 시뮬레이션하기 위해 TerrainMaterial에서 큰 크기로 종종 스케일 조절됩니다. 플레이어가 이러한 암석 텍스처에 접근할 수 있는 경우, 대형 텍스처 스케일은 일반적으로 희미하고 큰 픽셀된 암석처럼 보여집니다. 확산 암석 텍스처에 디테일 텍스처를 사용하는 것 이외에 디테일 텍스처는 또한 NormalMap에서도 사용될 수 있습니다.

2개의 NormalMap 텍스처를 혼합할 경우, 한 텍스처의 Blue 채널을 반드시 제거해야 합니다. 그렇지 않으면 범프 렌더링을 기본적으로 감소시킵니다. VectorParameter와 Multiply 표현식은 주요 NormalMap 텍스처와 디테일 NormalMap 텍스처를 혼합하기 전에 디테일 NormalMap 질감에서 Blue 채널을 제거합니다. VectorParameter 표현식의 R과 G 채널 또한 디테일 텍스처의 범프 강도를 증가시키기 위해 1.0 이상으로 조정될 수 있습니다.

UE3MatNormalDetailStrength.gif

마스크 블렌드 레벨

아래에서 설명된 사용자 지정 머티리얼의 일부는 텍스처 블렌딩과 같은 여러 기능을 수행하기 위해 회색조 스케일 마스크를 활용합니다. Multiply 표현식을 제어하는 ScalerParameter 표현식을 활용하여 단순화된 값 조정 및 인스턴스화를 위해 블렌드 가중치(weight) 마스크가 머티리얼에서 직접 변경될 수 있습니다. Clamp 표현식과 최대 노드에 연결된 상수인 1은 마스크의 범위가 항상 0.0과 1.0 사이에 있도록 합니다.

UE3MatMaskBlendLevel.gif

Desaturation 표현식

Desaturation 표현식은 색상 채도를 감소시키려 기존의 텍스처를 변경하는 데 사용됩니다. 이것은 중간색의 바위 또는 시든 풀처럼 터레인 지질 시스템에 좀 더 자연스러운 음영의 조화를 제공하기 위해 터레인 텍스처를 변경하는 데 사용될 수 있습니다. 또한, 색상, 채도, 명도 등을 변경시키기 위해 Materials에서 수정된 유사한 텍스처를 재사용하여 출시된 비디오 게임 타이틀 또는 맵에 필요한 텍스처의 총 수를 감소시킬 수 있습니다.

UE3MatDesaturate.gif

복합 머티리얼 디자인 노트


명명 규칙

패키지 구성을 개선하고 엔진 객체의 재사용을 더욱 쉽게하기 위해 간단하지만 엄격한 명명 규칙이 만들어진 모든 에셋에 대해 사용되야 합니다. 권장되는 명명 규칙 시스템은 다음과 같습니다.

TX_TextureName_D 확산 텍스처
TX_TextureName_DO 알파 채널에 불투명을 가진 확산 텍스처
TX_TextureName_DS 알파 채널에 반사(specular)를 가진 확산 텍스처
TX_TextureName_N 노멀맵(normalmap) 텍스처
TX_TextureName_O 불투명 텍스처
TX_TextureName_D 반사 텍스처
MAT_MaterialName 머티리얼
TM_MaterialName 터레인 머티리얼
TLS_SetupName 터레인 레이어 셋업

특정 사용자 정의 텍스처에 관해서는 다음 명명 규칙을 사용합니다.

TX_Detail[이름] 디테일 텍스처 8비트 회색조 또는 압축된 비트평면 예: TX_DetailRock1
TX_Macro[이름] 매크로 텍스처 8비트 회색조 또는 압축된 비트평면 예: TX_MacroDirt
TX_Mask[이름] 마스크 텍스처 8비트 회색조 또는 압축된 비트평면 예: TX_MaskRandom

디테일, 매크로, 마스크 텍스처들의 압축된 비트평면 버전을 사용하는 경우, 더 쉬운 자체 문서화를 위해 각 비트평면의 내용에 따라 텍스처를 명명하는 것이 일반적으로 현명합니다. 예를 들면, 디테일 텍스처인 TX_DetailRockGrassDirt는 R=Rock(바위), G=Grass(풀), B=Dirt(흙)에 대해 RGB 비트평면에 압축된 3개의 8 비트 텍스처를 포함합니다. 이 예제에서는 알파 채널은 사용되지 않고 실제로 4번째 디테일 텍스처를 제공할 수 있습니다.

주석 그룹 및 표현식 설명

복잡한 머티리얼 시스템을 구성할 때, 머티리얼 표현식인 Description 기능과 Comment 객체를 사용하는 것이 현명한 선택입니다. 이것은 복잡한 머티리얼 레이아웃의 구성 및 가독성(readability)을 대폭 개선시킬 것입니다. 각 표현식은 "Desc"라는 설명 속성을 포함합니다. 이 속성은 특정 표현식의 함수 또는 값에 주석을 달기 위해 텍스트 문자열로 설정될 수 있습니다.

머티리얼 편집기 작업 공간에서 마우스 오른쪽 버튼을 클릭하고 팝업 메뉴에서 Comment 를 선택하거나 "c"를 눌러 주석 객체를 추가할 수 있습니다. 주석 객체는 머티리얼 함수 섹션의 그래픽적 그룹 상자 를 제공하기 위해 기존의 여러 표현식 주위를 둘러쌀 수 있습니다. 새로운 주석 객체를 추가하면 현재 선택된 표현식 세트 주위를 둘러싸기 위해 자동으로 크기를 조정합니다.

표현식 설명:

UE3ExpressionDesc.gif

주석 상자:

UE3CommentBox.gif

지정된 셋업 변경하기

터레인 객체에 할당된 TerrainLayerSetup에 배열에서의 머티리얼 항목의 삽입 및 삭제, 배열에서의 항목 순서 변경, 1개 이상 머티리얼 항목의 Noise, Height, Slope 속성을 변경하는 것과 같은 상당한 변경을 실행할 시, 먼저 터레인 객체에서 TerrainLayerSetup의 지정을 해제하여 상당한 성능적 향상이 실현될 수 있습니다. 따라서 렌더된 터레인 뷰의 화면상의 시각적 피드백을 잃어 버리기 때문에, 일반적으로 항목의 삽입이나 삭제 또는 Noise, Height, Slope 속성의 올바른 변화 값을 이미 알고 있는 경우에 이용하는 것이 좋습니다. 그러나 여러 머티리얼 항목의 삭제와 같은 상당한 변경 사항의 경우, 터레인 객체에서 TerrainLayerSetup의 할당을 해제시키고 변경 사항을 실행한 다음, TerrainLayerSetup을 다시 할당시키는 것이 종종 더 빠릅니다.

맵 파일에 직접 에셋을 저장하는 경우, 맵을 저장하기 전에 터레인 객체에 TerrainLayerSetups를 다시 할당하도록 하십시오. 그렇지 않으면, 사용되지 않은 자동 에셋 컬링 이 맵 파일에서 사용되지 않는 에셋을 제거합니다.

터레인 머티리얼 다시 캐시화시키기

Materials, TerrainMaterials, TerrainLayerSetups, 이러한 객체의 레이아웃 순서를 변경하는 것과 같이 터레인 머티리얼 시스템을 변경하면, 현재 편집기 뷰포트에서 렌더된 터레인은 이러한 변경 사항을 나타내기 위해 업데이트하지 않을 수 있습니다. 터레인 편집 대화 상자를 표시하기 위해 왼쪽 도구 상자 아이콘에서 Terrain Editing Mode 버튼을 클릭한 다음, Recache Terrain Materials "RM" 버튼을 클릭하여 재캐시화를 강행합니다. Recache terrain shaders 프롬프트 메시지가 사라지자 마자 터레인 시스템은 업데이트된 머티리얼 셋업을 사용할 수 있습니다.

UE3RecacheMaterials.gif

GPU 쉐이더 지원

최종 사용자 하드웨어의 이전 설치 기반에 대한 지원이 필요한 경우, 적당한 시각적 품질을 가진 작업 가능한 렌더 시스템을 유지하기 위해 레벨 디자인과 터레인 복잡도는 반드시 감소되야 합니다. 본 튜토리얼에서 소개된 다수의 기술들은 8 이하의 Texture Mapping Units(TMU’s: 텍스처 매핑 단위)를 가진 Shader Model 2.0인 비디오 하드웨어에 대해서는 너무 복잡하고 성능적으로 무리가 따릅니다.

ATI 시리즈에서 이것은 Rage의 9600에서 X800 시리즈까지의 어댑터입니다. X1000 시리즈와 그 이상은 Shader Model 2.0b 또는 그 이상을 지원하지만 X1000과 HD2000에서의 낮은 모델은 4 또는8 TMU로 제한될 수 있습니다.

NVidia 시리즈에서 이것은 Riva의 GeForce 4에서 GeForce 5000 시리즈까지의 어댑터입니다. 6000 시리즈 이상은 Shader Model 3.0 이상을 지원하지만, 6000, 7000, 8000 시리즈에서의 낮은 모델은 2, 4 또는 8 TMU로 한정되어질 수 있습니다.

DirectX D3DCAPS는 픽셀 쉐이더 관련 작동에 대한 레벨 지원을 반환합니다.

장치의 기능 설명
PixelShader1xMaxValue 레지스터에 저장될 수 있는 값의 범위는 [-PixelShader1xMaxValue, PixelShader1xMaxValue]입니다. 이것은 버전 ps_1_1부터 ps_1_4까지에만 영향을 미칩니다.
MaxSimultaneousTextures 고정된 함수 파이프라인의 경우, 텍스처 샘플러의 수는 MaxTextureBlendStages를 MaxSimultaneousTextures로 나눈 값입니다. 픽셀 쉐이더에 대한 텍스처 샘플러의 수는 다음 표에서 나열됩니다.
PixelShaderVersion 하드웨어에서 지원하는 픽셀 쉐이더의 버전. 이 값과 동일하거나 그 보다 작은 버전 넘버를 가진 픽셀 쉐이더를 지원합니다.

픽셀 쉐이더 버전 텍스처 샘플러의 수
ps_1_1에서 ps_1_3 4개의 텍스처 샘플러
ps_1_4 6개의 텍스처 샘플러
ps_2_0에서 ps_3_0 16개의 텍스처 샘플러
고정된 함수 픽셀 쉐이더 MaxTextureBlendStages/MaxSimultaneousTextures 텍스처 샘플러

머티리얼의 복잡도: 텍스처 샘플러 수를 초과하거나 너무 많은 명령의 수

Unreal Engine 3의 터레인 시스템은 GPU를 사용하여 메쉬 렌더링 및 텍스처링을 수행합니다. 따라서, 렌더링 능력은 필레이트, 픽셀 쉐이더 버전, 픽셀 쉐이더 엔진의 수, 텍스처 샘플러의 수, 텍스처 매핑 단위(TMU’s)등의 기능 목록과 GPU 단위의 성능에 따라 제한됩니다.

터레인 메쉬는 Terrain.MaxComponentSize 속성에 따른 패치의 사각형 블록으로 나뉘어집니다. 예를 들면, 16 MaxComponentSize는 개별 메쉬 렌더링 호출(DrawMesh 호출)로 관리되는 터레인에서의 16x16 패치의 각 블록을 초래하게 됩니다. 각 개별 메쉬 렌더링 호출은 또한 GPU의 총 텍스처 샘플러 수에 의해 관리될 수 있는 텍스처의 수로 제한됩니다. 따라서, 픽셀 쉐이더 버전의 텍스처 샘플러의 총 개수가 각 터레인 구성 요소내에서 렌더링될 수 있는 텍스처의 수를 결정합니다. 이 사용 가능한 텍스처 샘플러의 수가 터레인 구성 요소에서 초과되면, 터레인은 멀티컬러 오류 텍스처를 렌더합니다.

각 터레인 레이어 설치에 대해 항상 3개의 텍스처 샘플러가 표준 라이트맵(노멀 맵을 지원하는 3개의 빛의 방향) 또는 PC 전용의 낮은 디테일의 고장 시 운용(fallback)되는 경우의 “간단한” 라이트맵에 1개의 텍스처 샘플러를 예비 할당합니다. 콘솔에서는 간단한 라이트맵이 지원되지 않으므로 항상 3개의 텍스처 샘플러가 라이트맵에 대해 필요합니다. 이것 이외에도, TerrainLayerSetup의 각 터레인 TextureMaterial 항목은 특정 텍스처 레이어가 터레인 패치 어디에서 렌더될 지 결정하는 가중치 맵(weight map) 을 필요로 합니다. 각 가중치 맵은 8 비트 회색조 마스크이므로 ARGB 32 비트 텍스처의 비트평면을 1개 필요로 하고, 이러한 것들은 텍스처에 ARGB 채널로 압축된 4개의 비트평면입니다. 따라서, 단일 복합 가중치 맵 텍스처는 최대 4개의 텍스처 레이어에 대한 가중치 맵을 관리할 수 있습니다.

6가지 다른 텍스처 레이어와 같은 터레인 설치의 예는 다음의 텍스처 샘플러 개수를 필요로 합니다.

  • 3개의 라이트맵 텍스처 샘플러
  • 6개의 텍스처 레이어 텍스처 샘플러
  • 2개의 가중치 맵 텍스처 샘플러. 하나는 4개의 비트평면을 모두 사용하고, 다른 한 개는 2개의 비트평면을 사용함.

저급 비디오 시스템에서 터레인 레이어링은 1개의 라이트맵과 단순화된 대체 텍스처를 사용하는 낮은 디테일 버전으로 대체된다는 것에 주의하십시오.

터레인 레이어 설치 프로그램을 디자인할 시 터레인이 오류 텍스처를 나타낼 경우, 해결하는 방법은 구성 요소 별 별도 텍스처의 수를 감소시키는 것입니다. 이것은 하나 이상의 다음과 같은 방법을 사용하여 실행될 수 있습니다.

  • 불필요한 디테일 텍스처를 제거함.
  • 여러 회색조 디테일 텍스처를 단일 ARGB 텍스처의 비트평면으로 합침.
  • 불필요한 노멀 맵 텍스처를 제거함.
  • 하나 이상의 확산 텍스처 레이어를 제거함.
  • 2 개의 별도 텍스처 변형을 사용하는 대신에 추가 색상 또는 밝기를 제공하기 위해 1개의 모래 텍스처만을 사용하지만 Material 표현식을 사용하는 것처럼 하나 이상의 확산 텍스처를 재사용하여 별도 확산 텍스처의 총 개수를 감소시킴.
  • 매크로와 알파맵에 사용된 사용자 지정 회색조 마스크를 단일 텍스처의 비트평면으로 결합시킴.
  • 여러 텍스처를 아래의 기술 중 하나에서 설명된 것처럼 단일 텍스처 사분면으로 결함시킴.
  • 총 명령 개수를 감소시키기 위해 머티리얼 표현식 디자인을 단순화시킴.
  • 전반적인 텍스처 개수가 감소될 수 있게 절벽에서 처럼 적절한 경우, 일부 터레인 디테일을 정적메쉬로 교체시킴.

디테일 텍스처 및 마스크를 비트평면으로 압축시키기

텍스처 샘플러를 절약하려면 터레인 머티리얼 설치 프로그램이 여러 회색조 디테일 텍스처, 사용자 정의 텍스처 매크로 마스크 또는 수퍼 마스크를 포함하는 경우, 이러한 것들은 4개의 압축된 텍스처를 제공하는 단일 32 비트 ARGB 텍스처를 가진 텍스처의 비트평면으로 압축될 수 있습니다.

Corel PhotoPaint에서는 Image 메뉴에서 Combine Channels 를 선택하여 3개의 8 비트 이미지를 1개의 24 비트 이미지로 압축시킬 수 있습니다. 3개의 이미지에서 각각을 선택하여 R, G, B 채널에 할당시킵니다. Mask 메뉴에서 Load from disk 를 선택하여 4번째를 Mask로 로딩시켜 4번째 8비티 이미지를 단일 32비트 이미지로 압축시킬 수 있습니다. .tga 형식과 같은 32비트 파일로 저장할 시, Mask는 알파 채널이 됩니다.

CPPCombine.gif

Adobe PhotoShop에서는 Channels Palette 플라이아웃에서 메뉴에서 Merge Channels 함수를 선택하여 3개의 8 비트 이미지를 1개의 24 비트 이미지로 압축시킬 수 있습니다. 모드와 색상 채널의 수를 선택한 다음, 그 어떤 이미지를 R, G, B 채널에 할당할지 지정하십시오.

APSMerge.gif

압축된 디테일 텍스처의 UV 타일 값이 모두 동일한 경우에만 8 비트 회색조 디테일 텍스처는 단일 텍스처의 비트평면으로 한 번에 최대 4개씩 압축될 수 있습니다. 디테일 텍스처는 보통 8x 또는 16x처럼 모든 터레인 머티리얼에 대해 비슷하게 스케일 조정되므로 압축은 필요한 텍스처 샘플러를 4 대 1까지 일반적으로 감소시킵니다.

DGPackBitplanes.gif DGPackBitplanesMat.gif

마찬가지로, 여러 Macro 텍스처와 Super Masks 는 개별 텍스처의 수와 필요한 텍스처 샘플러의 수를 감소시키기 위해 단일 텍스처의 비트평면으로 또한 압축될 수 있습니다. 이것은 비트평면으로 압축된 4개의 Super Masks 세트의 예입니다. 터레인 스크린샷은 본 튜토리얼의 Super Masks 섹션에서 찾아볼 수 있습니다.

DGSuperMasks.gif

디테일 텍스처: 근접 거리 세부묘사 추가


2보다 큰 TerrainMaterial.Material.MappingScale 값처럼 큰 타일 스케일 크기 를 가진 터레인 텍스처를 적용할 경우, 이러한 머티리얼이 페인트 된 터레인 영역에 플레이어가 접근할 때 시각적으로 흐리게 보일 수 있습니다.

머티리얼에 디테일 텍스처를 추가하면 타일 형식의 미세 해상도 세부묘사가 도입되어 해당 텍스처의 모습이 향상됩니다. 디테일 텍스처는 일반적으로 이음새 없이 타일화될 수 있는 보통 128x128 해상도의 8비트 회색조 이미지입니다.

다음은 Epic의 Unreal Engine 콘텐츠로부터의 몇 가지 디테일 텍스처들의 예입니다.

UE3DetailExamples.gif

이 터레인 예제의 경우, 디테일 텍스처를 16의 TerrainMaterial.Material.MappingScale 값을 가진 Rock 확산 텍스처에 추가하겠습니다. 따라서 근접 거리에서 볼 시, 매우 희미하게 보입니다.

UE3DetailRock.gif

선택된 표현식은 이 머티리얼에 설정된 디테일 텍스처를 제공합니다.

  • Texture Sample = 디테일 텍스처.
  • TexCoord = 주요 확산 암석 텍스처에 대한 디테일 텍스처의 타일링 양. 조절 가능.
  • ScalarParameter "Detail Brightness" = 디테일에 대한 밝기의 혼합 값. 이것이 머티리얼의 인스턴스 화를 지원합니다. 인스턴스화를 사용하지 않을 경우, 이 표현식은 상수로 교체될 수 있습니다.
  • Multiply = 머티리얼 혼합에서 디테일의 전반적인 밝기를 조절하기 위해 사용되는 세부 조정 멀티플라이어.

디테일이 포함된 머티리얼의 밝기가 디테일이 없는 머티리얼의 밝기와 동일하게 ScalarParameter와 Multiply 표현식 조정합니다. 2번째 Multiply 표현식(Diffuse * Detail)은 Rock 확산 텍스처를 디테일 텍스처와 혼합합니다.

위에서 언급한대로, UnpackMax에 대한 디테일 텍스처의 속성은 머티리얼의 ScalarParameter과 Multiply 표현식을 사용하는 대신에 2 또는 3으로 조정될 수도 있습니다. 이것이 이 매개 변수에 대한 머티리얼 인스턴스화의 손실의 절충으로 머티리얼의 지시 명령 개수를 약간 감소시킵니다.

UE3DetailMaterial.gif

아래의 전/후 스크린샷에서 볼 수 있듯이, 머티리얼에 추가된 디테일 텍스처는 터레인 텍스처의 시각적 품질을 상당히 향상시킵니다.

DGDetailOff.jpg

DGDetailOn.jpg

NormalMap 텍스처: 범프 디테일 추가


장면의 모든 머티리얼에 사실감을 추가하는 것에 대한 Unreal Engine의 가장 유용한 기능 중 하나는 NormalMaps입니다. NormalMaps는 텍스처에 3D 추가시킵니다. 바위, 자갈, 풀 등의 터레인 텍스처에서 사용될 경우, 결과적으로 시각적 세부묘사가 상당히 증가합니다.

NormalMap 텍스처는 여러 소스에서 만들어질 수 있습니다. NormalMaps는 NVidia Texture Tools 또는 ATI NormalMapGenerator와 같은 유틸리티를 사용하여 확산 텍스처 자체에서부터 제작될 수 있습니다. NormalMaps는 또한 이런 동일한 NVidia와 ATI 도구를 사용하는 대부분의 페인트 응용 프로그램에서 제작된 8비트 회색조 heightmap 이미지로부터 만들어질 수 있습니다.

DGNormalFromDiffuse.gif

이 테레인 예제에서는 다음의 Sand 확산 텍스처와 머티리얼 이외에 NormalMap과 Detail NormalMap을 모두 보여드리겠습니다. 표준 NormalMap는 확산 텍스처와 같은 동일한 해상도에 3D 느낌을 주지만, Detail NormalMap은 타일 형식의 미세한 해상도 세부묘사를 NormalMap에 추가합니다.

UE3NormalSand.gif

머티리얼의 표준 NormalMap 버전에서 NormalMap 텍스처는 Texture Sample표현식으로 Normal 노드에 연결되어 있을 뿐입니다.

UE3NormalMaterial.gif

머티리얼의 디테일 NormalMap 버전에서는 다음의 선택된 표현식에서 보여지듯이, 디테일 NormalMap 셋업이 추가된 표준 NormalMap 텍스처 샘플로 구성된 일반 NormalMap 믹서를 만듭니다.

  • Texture Sample = 디테일 NormalMap 텍스처
  • TexCoord = 표준 NormalMap 텍스처에 대한 디테일 NormalMap 텍스처의 타일링 양. 조절 가능.
  • VectorParameter "Detail NM Strength" = 디테일 NormalMap에 대한 강도 믹스 값. 이것은 머티리얼의 인스턴스화를 지원함. 인스턴스화를 사용하지 않을 경우, 이 표현식은 Constant3Vector로 교체될 수 있습니다.
  • Multiply = 머티리얼 믹스에서 전반적인 디테일 NormalMap의 믹스를 조정하는 데 사용되는 세부 조정 멀티플라이어

VectorParameter과 Multiply 표현식은 2개의 NormalMap 텍스처간의 상대적 NormalMap 3D 심도를 조정하게 하여줍니다. 또한, 디테일 NormalMap 텍스처 샘플의 B 구성 요소를 제거하는 매우 중요한 역할을 담당하고 있습니다. 이것이 제거되지 않을 경우, 머티리얼의 총 NormalMap 심도가 감소됩니다. 따라서, VectorParameter 표현식의 B 구성 요소는 반드시 항상 0.0으로 설정되야 합니다.

Add 표현식은 표준 NormalMap 텍스처와 디테일 NormalMap 텍스처를 혼합합니다.

UE3NormalMaterialDetailed.gif

아래의 전/후 스크린샷에서 볼 수 있듯이, 머티리얼에 추가된 NormalMap 텍스처는 터레인 텍스처의 3D 시각적 품질을 상당히 향상시킵니다. 디테일 NormalMap 버전은 세밀한 세부묘사를 추가함으로써 이것의 시각적 품질을 한 단계 더 향상시킵니다.

DGNormalOff.jpg

DGNormalOn.jpg

DGNormalOnDetailed.jpg

터레인 머티리얼 셋업에서 텍스처 샘플러의 수를 초과하게 되는 경우, 먼저 제거될 항목은 NormalMaps과 디테일 NormalMaps 중 하나가 될 수 있습니다. 확산 디테일 텍스처는 보통 NormalMaps 및 Detail NormalMaps 보다 좀 더 효과적인 시각적 효과를 추가합니다.

터레인 시스템에서 사용되는 엔진 버전에서 Specular(반사)가 활성화된 경우, 모든 터레인 머티리얼에서 Specular를 비활성화시키도록 하십시오. 이런 구체적인 경우, NormalMaps는 터레인을 반들반들 또는 플라스틱처럼 보이게 만들어 버립니다. 터레인에서의 Specular 기능은 성능상의 이유로 엔진에서 비활성화되어 있습니다.

멀티-UV 믹싱: 스칼라 믹싱을 통해 타일링 감소시키기


터레인 텍스처를 개선시키고 명백한 타일링을 감소시키는 저비용의 방법 중 하나는 1개의 텍스처를 2가지 UV 크기로 혼합시키는 것입니다. 동일한 텍스처를 2번 사용함으로써 얻어지는 장점은 컴파일 때 1개의 텍스처 샘플러만이 필요하다는 점입니다. 이 기술이 쉐이더 명령 개수를 소량 증가시키지만, 가장 먼저 없어질 자원인 텍스처 샘플러를 추가로 필요로 하지 않습니다.

이 방법은 대개 진흙, 풀, 모래 등의 섬세한 세부묘사를 포함하는 텍스처에서 가장 잘 그 효과를 발휘합니다. 절벽 암석과 같은 강한 세부묘사를 가진 텍스처와 깊은 자국을 포함하는 텍스처에 이 기술을 사용하면 자연적으로 보일지 않을 수 있습니다.

UE3MultiuvGrass.gif

머티리얼은 표준 확산 텍스처와 UV 스케일을 예를 들어 2내지 4 배로 늘리도록 설정된 UV 노드에 연결된 TexCoord 표현식을 가진 동일한 텍스처 샘플의 2번째 복사본으로 구성되어 있습니다. TexCoord 표현식의 경우, 값이 0.5이면 스케일을 2 배로 증가되고, 값이 0.2이면 스케일이 4 배로 증가합니다.

텍스처를 뒤집기(flip)하고 텍스처에서의 전반적으로 명백한 타일링을 추가 감소시키기 위해서 TexCoord 타일링에 음수 값을 사용할 수 있음에 주의하십시오. 이 예제에서는 스케일 조절된 텍스처에 반전된 4 배 크기를 추가시키기 위해 - 0.25 값이 사용됩니다.

3 번째 방법은 시각적 타일링을 감소시키는 것을 도모하기 위해 스케일 조절된 텍스처를 90도 또는 270도 회전시키는 것입니다. 이것은 아래에서 설명된 것처럼 Rotator 표현식을 사용하여 실행할 수 있습니다.

밝은(brightening) 멀티플라이어를 표준 확산 및 해당 텍스처의 스케일 조절된 복사본에 모두 추가합니다. 예를 들면 0.5 회색에 0.5 회색을 곱하면 0.25(0.5 * 0.5 = 0.25)의 어두운 회색이되기 때문에 이것은 전반적인 머티리얼의 밝기를 확산 텍스처 자체의 밝기로 조절하기 위함입니다.

"Brighten Amount" Constant 표현식은 각 텍스처 샘플을 얼마나 밝게할지 그 양을 지정합니다. 그 값에는 4가 일반적입니다. 모든 머티리얼 인스턴스 버전이 이러한 값들을 갖도록 할 경우, 이러한 Constant 표현식은 ScalarParameter 표현식으로 교체될 수 있습니다.

본 특정 예제에서 녹색 풀 텍스처는 2개의 녹색 텍스처가 서로 곱해질 시 색상적으로 과도하게 녹색이 되기때문에 이 예제에서 텍스처의 스케일 조절된 복사본은 또한 텍스처의 채도를 25% 감소시키도록 설정된 Desaturation 표현식을 사용합니다.

UE3MultiuvMaterial.gif

단순히 텍스처를 반전시키는 대신에 스케일 조절된 텍스처의 Rotator 버전을 사용하려면 텍스처 샘플의 UV 입력 노드로 연결된 단일 TexCoord 표현식의 자리에 Rotator, TexCoord, Constant 표현식을 추가합니다.

Rotator.CenterX와 .CenterY 속성을 텍스처의 중심(50 %)인 0.5로 설정하고 Rotator.Speed를 1.0으로 설정하십시오.

TexCoord.UTiling과 .VTiling을 원하는 스케일 크기로 설정하십시오. 예를 들어, 0.5는 2배, 0.25는 4배, 등등입니다.

이제 Constant 표현식은 텍스처의 고정된 회전의 양을 결정합니다. Rotator.Speed 값이 1.0인 경우, 완벽한 360도 회전의 Constant 값은 2 *π, 즉 약 6.28318입니다. 따라서, 90도 회전에서는 1.570795, 180도 회전에서는 3.14159, 270도 회전에서는 4.712385입니다.

참고: Rotator.Speed가 텍스처 회전의 Constant 범위를 결정합니다. 2.0 Speed는 0.0에서 π(3.14159)의 Constant 값을 가진 0에서 360도의 회전을 초래합니다. 0.5 Speed는 0.0에서 4*π(12.56636)의 Constant 값을 가진 0에서 360도의 회전을 초래합니다.

UE3MultiuvMatRotate.gif

아래의 예제 스크린샷에서 볼 수 있듯이, 첫 번째 이미지에서 풀 텍스처의 타일링은 아주 분명하게 드러납니다. 4배 스케일의 해당 텍스처를 다시 동일한 텍스처로 혼합시키면 타일링을 감소시키고, 또한 머티리얼이 근접 및 원근 카메라 거리 모두에서 시각적으로 자연스러워 보입니다.

DGMultiuvOff.jpg

DGMultiuvOn.jpg

DGMultiuvOnNear.jpg

랜덤 타일링 마스크: 타일링을 감소시키기 위해 텍스처 매핑 랜덤화


이 방법은 다중 오버레이드된 UV 스케일을 사용하는 것이 옵션 사항에 있지 않는 텍스처 스타일에서의 원하지 않는 반복적 시각적 타일링을 감소시킵니다. 이것은 모래와 진흙과 같은 색상적으로 좀 더 일관적인 텍스처에서 가장 잘 작동합니다. 특히, 콘크리트 석판 또는 금속판과 같은 인조 타일 텍스처에서 그 효과가 뛰어납니다. 이 기술의 한가지 제한점으로는 텍스처가 반드시 모든 면에서 이음새 없이 매끄러워야 한다는 것입니다.

머티리얼은 필요한 텍스처 샘플러 개수를 줄이기 위해 소스 텍스처를 2번 사용합니다. 첫 번째 소스 TextureSample은 보통과 마찬가지로 사용되고 두 번째 소스 TextureSample은 Rotator 셋업을 사용하여 TextureSample을 90, 180, 또는 270도 회전시킵니다.

이 머티리얼 셋업에 필요한 다음 사항은 검정색 배경에 흰색 픽셀이 무작위로 스프레이된 것을 포함한 마스크 텍스처입니다. 텍스처가 터레인 표면 전체에 렌더링되기 때문에 소스 텍스처의 일반 또는 회전된 버전이 사용될 여부를 결정하는데 머티리얼에서 흰색과 검은색 픽셀 값이 사용됩니다.

마스크 텍스처는 64x64 크기의 8 비트 회색조 또는 24 비트 컬러 이미지이어야 합니다. 가져오기할 시, CompressionNoAlpha = true로 그리고 Compression Settings = TC_Default 또는 TC_Grayscale로 설정되어야 합니다. 마스크 텍스처를 가져오기한 후, Texture Viewer에서 텍스처의 속성을 편집하고, Filter에 대한 속성을 TF_Nearest로 설정합니다. 필터가 이 값으로 설정되지 않으면 텍스처는 흐릿하게 되고 머티리얼은 필요한 대로 작동하지 않습니다.

UE3RandomTileMask.gif

첫 번째 소스 TextureSample은 일반적으로 사용됩니다.

두 번째 소스 TextureSample의 경우, Rotator.CenterX와 .CenterY 속성을 텍스처의 중심(50 %)인 0.5로 설정하고 Rotator.Speed를 1.0으로 설정하십시오. TexCoord.UTiling과 .VTiling을 모두 1.0으로 설정하십시오.

이제 Constant 표현식은 텍스처의 고정된 회전의 양을 결정합니다. Rotator.Speed 값이 1.0인 경우, 완벽한 360도 회전의 Constant 값은 2 *π, 즉 약 6.28318입니다. 따라서, 90도 회전에서는 1.570795, 180도 회전에서는 3.14159, 270도 회전에서는 4.712385입니다.

마스크 TextureSample의 UV 입력에 연결된 TexCoord 표현식은 1/texture_size로 설정되야 합니다. 이 경우에는 1/64 또는 0.015625입니다. 원하시는 경우, 16x16(1/16 = 0.0625) 또는 32x32(1/32 = 0.03125) 마스크 텍스처를 사용할 수도 있습니다. 128x128 텍스처를 사용하지 않는 이유는 1/128 = 0.0078125이고 Unreal Engine 표현식은 소수점 6자리 까지 밖에 지원하지 않기 때문입니다. 따라서, 1/128 값에 대한 TexCoord는 0.007813으로 반올림되어 시각적인 배치 오류를 유발할 수 있습니다.

머티리얼의 LinearInterpolate(Lerp) 표현식은 알파 입력 값에 따라 A:B 입력을 교환시킵니다. 알파 입력에 무작위적인 픽셀 마스크를 사용하여 Lerp가 픽셀이 흰색 또는 검정색인지 여부에 따라 일반적인 또는 회전된 소스 텍스처 버전을 선택하게 합니다.

또한, 이 기능을 사용하여 마스크 텍스처에 그려진 흰색 대 검정색 픽셀 디자인에 따라 일반적 및 회전된 특정 패턴의 머티리얼 오버레이를 제작할 수도 있습니다.

UE3RandomTileMaterial.gif

아래의 전/후 스크린샷에서 보여진 것처럼, 진흙 텍스처에서는 선을 좀 더 불문명하게 보이게 하기 위해 드러난 타일링 선이 무작위로 회전되었습니다.

DGRandomTileOff.jpg

DGRandomTileOn.jpg

매크로 텍스처: 다양성을 위한 텍스처 블렌딩


매크로 텍스처 시스템은 머티리얼의 시각적 타일링을 감소시키고, 또한 매크로 마스크에 따라 2 개의 텍스처간에 블렌딩시켜 터레인 전체에 걸쳐 텍스처의 다양성을 증가시킵니다. 매크로 셋업의 주요 요구 사항으로는 풀과 흙 또는 흙과 바위에서처럼 서로 잘 블렌드된 2가지 소스 텍스처와 매크로 블렌드 마스크로 사용되는 이음새 없이 매끄럽게 타일링될 수 있는 회색조 텍스처가 있습니다.

매크로 블렌드 마스크는 해당 프로젝트에서 사용 가능한 할당된 리소스 크기와 블렌드되는 전체 터레인 영역에서의 원하는 다양성의 정도에 따라 128x128에서 1024x1024의 모든 텍스처 크기가 될 수 있습니다. 매크로 블렌드 마스크 텍스처는 모든 페인트 응용 프로그램에서 제작될 수 있는 8비트 회색조 이미지입니다. 전체 8비트 심도의 사용이 선호됩니다. UnrealEd에 DXT1 또는 G8 8 비트 회색조로 가져오기될 수 있습니다. 본 튜토리얼의 앞부분에서 설명한 귀중한 텍스처 샘플러를 절약하지만 1개의 TexCoord 매크로 크기 로만 제한된 비트평면 압축 기술을 사용하여 최대 4개의 매크로 마스크를 단일 텍스처로 결합시킬 수 있다는 것을 명심하십시오.

이 예제 머티리얼은 여기에서 소개한 매크로 텍스처를 사용하고 있지만 아무 이음새 없이 매끈한 패턴이 사용될 수 있습니다. 사용하는 패턴은 터레인의 높은 부분에서부터 보이게될 수 있다는 점을 명심하십시오. 따라서, 마스크의 패턴이 랜덤할 수록 더 좋습니다.

UE3MacroTexture.gif

매크로 머티리얼은 비교적 간단하고, 현재 아래의 스크린샷에서 선택된 2개의 소스 TextureSamples와 Macro 셋업 표현식으로 구성되어 있습니다. Macro 셋업은 LinearInterpolate 표현식의 Alpha 입력 노드에 연결되어 있어 매크로 텍스처에서의 0부터 255 사이의 회색조 값은 2개의 소스 텍스처 사이에서 렌더할 블렌드 양을 결정합니다.

Macro 셋업 자체에서는 다음의 표현식이 사용됩니다.

  • TextureSample = 매크로 텍스처를 포함합니다.
  • TexCoord = 터레인과 연관되기 때문에 매크로의 크기를 결정합니다. 블렌드 타일링은 터레인의 작은 영역에서 큰 영역의 범위까지 이를 수 있습니다. 이것은 일반적으로 0.25(4배), 0.125(8배), 또는 이 보다 더 작은 값으로 설정됩니다.
  • Multiply and its Constant = "Macro Mix Level"은 회색 값을 높게 또는 낮게 조절하여 회색조 매크로 텍스처의 세밀한 튜닝이 가능하게 합니다. 이 머티리얼을 인스턴스화하여 사용하고 싶은 경우, Constant 표현식은 ScalarParameter표현식으로 교체될 수 있습니다.
  • Clamp and its Constant = 매크로 출력 레벨이 0.0에서 1.0 사이의 값만이 되게 고정합니다. 1.0 이상의 값을 사용하면 터레인에서의 머티리얼이 희미해집니다.

UE3MacroMaterial.gif

아래의 전/후 스크린샷에서 볼 수 있듯이, 흙 텍스처가 풀 텍스처 주위에 블렌드될 경우 풀 텍스처의 타일 처리가 좀 덜 눈에 띕니다. 3번째 스크린샷은 터레인을 위에서 아래로 내려다 보는 뷰로써 두 텍스처의 블렌딩을 좀 더 쉽게 볼 수 있습니다.

DGMacroOff.jpg

DGMacroOn.jpg

DGMacroOnTop.jpg

수퍼 마스크: 버텍스 레벨 이상으로 터레인의 묘사 증가시키기


현재의 터레인 레이어 페인팅 시스템은 터레인 메쉬 버텍스의 해상도로 제한됩니다. 터레인 메쉬 버텍스의 개수는 기초가 되는 터레인 하이트맵과 동일하며, 각각의 레이어 weightmap 은 따라서 하이트맵의 해상도와 동일합니다. 즉, 257x257 하이트맵을 포함하는 256x256 패치 터레인은 257x257 크기의 소극적인 블렌딩 픽셀의 레이어 페인트 해상도를 가능하게 합니다. 이것은 대부분의 터레인 레이어 페인트 디테일에서는 아무 문제 없지만, 보다 세밀한 텍스처링을 필요로 하는 경우가 있을 지 모릅니다. weightmap 은 흔히 알파맵 으로 참조된 다는 것에 유의하십시오. 이것은 터레인 레이어 블렌딩 시스템에서 32 비트 이미지 또는 PhotoShop 등의 페인트 응용 프로그램의 알파 채널과 유사한 기능을 제공합니다.

이 터레인 시스템의 세부 사항과 구현을 추가로 살펴보면, 버텍스에서의 전체 명암도 블렌드는 아래의 모습처럼 페인트 된 버텍스 부분에 다이아몬드 모양으로 가중치가 걸린 직사각형 패턴입니다. 이것은 터레인 버텍스가 superimpose된 회색 텍스처 레이어에 흰색 텍스처 레이어가 페이트된 터레인 레이어 셋업의 이미지입니다. 페인트 된 버텍스는 255의 weightmap 값을 갖는 반면에, 주위의 모든 버텍스는 0의 weightmap 값을 갖습니다.

제한이 시작되는 부분은 페인트되는 레이어 텍스처의 실제 해상도안에 있습니다. 아래 그림에서 보이는 것과 같이, 텍스처는 버텍스에서 2x2 패치 영역에 걸쳐 블렌드 아웃하기 때문에 레이어 텍스처의 최소 페인트된 너비는 2 x DrawScale3D.X,.Y가 됩니다. 따라서, 256[Unreal 단위]의 DrawScale3D.X, Y를 가진 터레인의 경우, 1 Unreal 단위 = 2cm의 기본 엔진 스케일에서 레이어 텍스처가 페인트된 최소 폭은 10.24 m(2 x 5.12m) 또는 33.6 ft(2 x 16.8 ft)입니다.

이것을 원근 및 스케일에 입력하려면 2개의 3.5 미터 차선 및 추가 비상 차선 폭으로 구성된 일반 2차선 고속도로를 건설할 수 있습니다. 상대적으로 256 DrawScale 터레인에서의1개의 페인트된 버텍스는 2 차선 고속도로의 폭과 거의 동일합니다. 이것은 샛길, 도랑, 개울 등의 터레인 레이어 디테일에 대해 폭이 너무 넓습니다. 터레인 DrawScale3D를 줄여 레이어 weightmap 크기 문제를 해결하려고 하면 밀도가 너무 높은 터레인이 되고, 절두체에서 렌더링되는 패치의 수가 너무 많기 때문에 프레임 속도에 영향을 주는 원인이됩니다.

UE3SuperMaskDefault.gif

완전히 페인트된 터레인의 weightmap 텍스처 파일을 살펴보면,이 256x256 터레인 예제와 절벽에 대한 256x256 weightmap과 비슷한 점을 볼 수 있습니다( 패치는 약 30도에서 90도 사이의 경사가 있음). 이것의 해상도와 페이지 하단의 Super Mask 텍스처 예제 해상도와 비교해 보십시오. 이 1개의 고해상도 Super Mask는 이 페이지에 맞추기 위해 1024x1024에서 880x880으로 축소되어다는 것에 유의하십시오.

DGSuperMaskUE3.gif

DGSuperMask.gif

최신 3D 비디오 어댑터는 8192x8192까지의 텍스처 해상도를 지원합니다. 이것은 현재 터레인 시스템의 256x256 weightmap의 가능한 디테일에 1024 (32x32)배입니다. 한 예로, 8192 Super Mask를 표준 256x256 터레인에 비교하면 레이어 텍스처링 디테일이 10.24m에서 0.32m(33.6 피트에서 1.05 피트)로 증가됩니다.

일반적으로 리소스의 사용이 오래 걸리며, 이러한 고해상도 파일에서 작업하는 것이 쉽지 않으므로, 1024x1024 또는 2048x2048 Super Mask를 가지고 작업하는 것이 더 쉽습니다. 그래도 대부분의 터레인 셋업보다 높은 레벨의 디테일을 제공합니다. 예를 들어, 1024x1024 Super Mask는 128x128 크기의 터레인보다 64 배나 높은 디테일을 갖습니다.

Suyper Mask는 어느 특정 텍스처 레이어가 렌더링되는 것인가를 결정하는 고해상도 8비트 회색조 텍스처입니다. 이것은 알파 채널 또는 불투명 마스크와 아주 비슷합니다. Super Mask 파일은 뛰어난 PhotoShop 능력이 있는 아티스트에 의해 손으로 페이트될 수 있거나, 또는 다양한 소프트웨어 응용 프로그램을 사용하는 다수의 방법을 통해 알고리즘적으로 만들 수 있습니다.

이 터레인 예제에서는 터레인 3개의 독특한 지질 부분에 대해3개의 고해상도의 1024x1024 마스크가 알고리즘적으로 만들었습니다. 이러한 지질 부분은 바위가 많은 능선, 침식에 의한 패임, 물의 부분을 둘러싸고 있는 해변입니다. 1 개의 RGB 24비트 텍스처의 비트평면으로 압축할 시, 이러한 3개의 마스크는 다음과 같은 이미지처럼 보입니다. 그런 다음 이 텍스처는 표준 CompressionNoAlpha DXT1로 UnrealEd에 가져오기 되었습니다. 아래 그림은 이 웹 페이지에 맞게 실제 텍스처의 512x512 버전으로 축소되어 있다는 것에 유의하십시오.

DGSuperMasks.gif

일단 Super Mask 텍스처가 만들어졌고 UnrealEd로 가져오기 되었으면, 각 Super Mask 비트 플레인에 대한 각 표현식의 블록 은 기본적으로 동일하기 때문에 이것을 사용하기 위해 필요한 머티리얼 설치는 비교적 간단합니다. 아래 머티리얼 이미지에서 볼 수 있듯이:

  • LinearInterpolate 표현식은 Base와 Ridge 텍스처를 Super Mask의 R 비트평면에 따라 블렌드합니다.
  • LinearInterpolate 표현식은 Super Mask의 R 비트평면에 따라 Erosion 텍스처에 블렌드 됩니다.
  • LinearInterpolate 표현식은 Super Mask의 R 비트평면에 따라 Beach 텍스처에 블렌드 됩니다.
  • TextureSamples의 UV 입력 노드에 연결된 TexCoord 표현식은 TerrainMaterial 객체의 UTiling, VTiling 속성과 비슷한 타일의 양을 지정합니다.

각 Super Mask 레이어에 대한 각 표현식의 블록 은 본 튜토리얼에서 설명하는 다른 텍스처링 기술을 활용하기 위해 강화될 수 있습니다. 원하는 경우, 디테일 텍스처는 각 TextureSample에 블렌드인 될 수 있습니다. 동일한 Super Mask Texture Sample RGB 노드 출력과 아울러 각 레이어 NormalMap에 대한 유사한 LinearInterpolate 설치 프로그램을 사용하여 NormalMaps를 모든 레이어를 구현할 수 있습니다.

UE3SuperMaskMaterial.gif

마지막 머티리얼은 원칙적으로 터레인 레이어 텍스처링의 오버헤드 1:1 레이아웃으로 일반 브라우저에서 볼 수 있습니다.

UE3SuperMaskMat.gif

새로운 TerrainMaterial를 만들고 Super Mask 머티리얼을 머티리얼 속성에 할당합니다. TerrainMaterial MappingScale 속성을 터레인과 동일한 해상도로 설정합니다(예 : 터레인 패치의 수). 이 예제에서는 256x256 패치 터레인을 사용합니다. 이것은 Super Mask 머티리얼을 1:1 스케일로 터레인에 렌더링합니다.

UE3SuperMaskTMat.gif

이것은 머티리얼 레이어링에 대한 1024x1024 Super Mask 시스템을 가진 최종 256x256 터레인입니다. 이것은 16배의 일반 페인팅 디테일을 제공합니다.

DGSuperMask.jpg

1:1 NormalMap을 사용하여 터레인 "해상도" 증가시키기

NormalMaps로 일반 메쉬 디테일을 증가시키는 것과 같은 방법을 사용하여, 1024x1024, 또는 그 이상의 세부적인 NormalMap을 추가하여 이 터레인 해상도의 디테일이 증가될 수 있습니다. 이 NormalMap 텍스처는 256x256 터레인 하이트맵에 비해 증가된 4x4 해상도로 알고리즘적으로 만들어졌습니다. NormalMap 텍스처는 가져오기되고 표준 NormalMap처럼 Material Normal 노드에 적용됩니다.

UE3SuperMaskNmap.gif

이러한 전/후 스크린샷은 NormalMap을 적용했을 때와의 차이점을 보여줍니다. NormalMap 심도는 효과를 위해 증가하였다는 것에 주목하십시오.

DGSuperMaskNoNorm.jpg

DGSuperMaskNorm.jpg

텍스처 패킹: 대형 텍스처 타일 세트 구현하기


사용 가능한 텍스처 샘플러의 수보다 많은 텍스처가 필요한 경우, 여러 하위 텍스처를 더 큰 타일 형식의 텍스처로 압축시킬 수 있습니다. 창의적인 머티리얼 표현식을 사용하면 개별 레이어 사용의 타일에서 개별 텍스처를 추출할 수 있습니다.

텍스처 타일을 구현할 시 발생하는 단점은 성능에 미치는 영향 및 머티리얼의 복합성입니다. 4 개의 서로 다른 텍스처는 텍스처 선택 에 대해 오버헤드를 가지지만, 반면에 텍스처 타일은 이것은 텍스처 좌표에서 대형 텍스처 타일로의 변환에 대한 오버헤드 가지고 있는 픽셀 쉐이더에서 하위 텍스처 선택 을 필요로 합니다. 또한, 가장자리 패딩 을 포함하기 위해 타일의 소스 텍스처를 수정하기 위해 추가 아트 시간이 필요합니다. 가장 큰 장점은 4 개의(또는 그 이상)의 텍스처는 1개의 텍스처로 압축될 수 있어, 텍스처 샘플러의 사용을 줄이고, 추가 터레인 텍스처 레이어의 사용이 가능해집니다.

이 기술로 인해 일반적으로 터레인에 걸쳐 다양한 위치에 작은 텍스처 이음새가 표시되는 결과를 일으키므로, 게임 디자인이 허용할 때에만 사용되야 합니다. 플레이어 또는 카메라가 표면에 너무 근접한 터레인의 경우, 이런 문제는 메쉬 또는 foliage가 이음새를 덮는데 사용하지 않는 한 너무 눈에 띌 것입니다.

타일의 각 개별 텍스처는 잘 일치하거나, 아니면 좌표 오류 블리딩을 일으키는 문제점을 방지하기 위해 가장자리 패딩을 갖게됩니다. 이것이 제대로 설명되지 않고 해결되지 않으면, 터레인에서 렌더링될 때 각 하위 텍스처의 가장자리를 따라 얇은 타일 선이 보일 수 있습니다. 이 문제에 대한 최선의 방법은 각 타일에 4개의 tarmac 변형(예 : 기본적인 포장 도로, 2개의 실선이 있는 포장 도로, 1개의 실선과 1개의 점선이 있는 포장 도로, 2 개의 점선이 있는 포장 도로)과 같은 유사한 텍스처를 사용하거나, 또는 가장자리 패딩의 최소한 1픽셀을 갖기 위해 텍스처를 편집하는 방법이 있습니다. 예를 들어, 1024x1024 텍스처는 1022x1022로 크기 조정한 후, 1개의 픽셀 가장자리를 바깥쪽으로 복제하여 가장자리 패딩을 실행하는 것입니다. Edge 패딩을 사용할 때, 1024 하위 텍스처보다 미묘하게 작아지는 영역이 추출되도록 Constant2Vector 값을 변경해야 합니다. 이것은 일반적으로 StartX, Y가 미묘하게 큰 값으로 되고 EndX, Y가 미묘하게 작은 값이 되는 것을 의미합니다. 조절의 양은 TexCoord 타일링 양에 의해 변합니다. 따라서 여기에서는 "요술 숫자"의 조절 값이 제공되지 않습니다. 더 잘 일치하는 하위 텍스처를 사용하는 것이 크게 다른 하위 텍스처 사이에서 발생하는 강한 블리딩 선을 제거하고자 시도하며 보내는 시간 보다 훨씬 쉽습니다.

이 텍스처 타일 예제에서는 4개의 1024x1024 텍스처가 1개의 2048x2048, 2x2 타일 이미지로 압축되었습니다. 이것은 단지 1개의 텍스처를 사용하여 바위, 흙, 풀, 이끼를 터레인에 레이어할 수 있게 하여줍니다.

가져오기되는 사면체 텍스처는 다음과 같습니다. 기본 설정에 의해 사용되는 낮은 mip 레벨을 방지하기 위해 더 큰 2048x2048 텍스처 크기에 대한 지원을 허용하는 적절한 LODGroup을 지정하도록 하십시오.

UE3QuadTex.gif

이 예제 터레인 셋업에서 사면체 텍스처는 4개의 별도 머티리얼에서 각 타일에 1 개씩 사용됩니다. 전체 터레인 레이어 셋업을 1개의 머티리얼 시스템으로 조합하기 위해 Super Masks와 같은 다른 터레인 레이어 방법과 함께 텍스처 타일 셋업을 사용할 수 있습니다.

다음은 이러한 4개의 머티리얼입니다.

UE3QuadMats.gif

각 머티리얼에 사용되는 표현식을 살펴 보면 하위 텍스처 U/VTiling 양을 설정하는 것과 어떤 하위 텍스처를 추출할지 여부를 지정하는 것에 일부 표현식 값이 다른 것 이외에는 기본적으로 모두 동일한 셋업입니다.

터레인에 대한 레이어 머티리얼 타일링은 TerrainMaterial.MappingScale 속성에 의해 설정되는 것이 아니라 이러한 머티리얼에 있는 TextureCoordinate에 의해 설정됩니다.

  • TexCoord: 텍스처로의 UTiling과 VTiling 양을 지정합니다. 일반적인 값은 4, 8, 또는 16입니다.
  • Frac: 좌표가 하위 텍스처에 의해서만 타일화되도록 TexCoord에서 지정한대로 소수 부분을 반복합니다.
  • Constant2Vector: 추출된 타일의 EndX, Y 좌표를 지정합니다. 2x2의 타일의 경우, 이것은 1/2 또는 0.5어야 합니다.
  • Constant2Vector: 추출된 타일의 StartX, Y 좌표를 지정합니다. 2x2의 타일의 경우 추출한 타일에 따라 이것은 0.0 또는 0.5에 있어야 합니다.
  • TextureSample: 텍스처 타일을 지정합니다.

추출한 타일의 Start X,Y 및 End X,Y 좌표를 지정하는 TexCoord UTiling,VTiling 값과 Constant2Vector 값이 유일한 차이점이라는 것에 유념하십시오. 여기에서 보여지고 있는 머티리얼은 상단-왼쪽(0.0,0.0), 상단-오른쪽(0.5,0.0), 하단-왼쪽(0.0,0.5), 하단-오른쪽(0.5,0.5)에 대한 것입니다.

UE3QuadMat0.gif

UE3QuadMat1.gif

UE3QuadMat2.gif

UE3QuadMat3.gif

다음 단계는 각 머티리얼에 1개씩의 필요한 TerrainMaterial 객체와 TerrainLayerSetup을 만드는 것입니다.
TerrainMaterial.MappingScale은 패치의 테레인 크기로 반드시 설정되야 합니다.예: 256x256 터레인에 256. 이것은 TerrainMaterial에 대해 1:1 매핑을 초래합니다.

이 예제에서 TerrainLayerSetup은 4개의 TerrainMaterials에 대해 4개의 절차적 입력을 사용하며, Height과 Slope의 속성은 결과적으로 다양한 절벽과 평지 레이어 버라이어티가 되도록 설정됩니다.

UE3QuadTObjs.gif

최종 터레인 모습은 다음과 같습니다.

DGQuadTex.jpg

1:1 오버레이: 여러 고해상도 텍스처를 터레인 전체에 타일하기


현재 비디오 하드웨어와 차세대 게임 엔진은 2048, 4096, 8192 등의 대형 텍스처 해상도를 지원합니다. 이 기능 지원은 위성 DEMs (디지털 표고 모델) 및 고해상도 컬러 항공 사진의 수와 질 증가와 함께 활용될 수 있습니다.

DEM 하이트맵을 1개 이상의 컬러 항공 사진을 조합하여 내장된 TerrainLayerSetup 절차적 Height 및 Slope 시스템을 초월할 수 있는 디테일을 가진 현실적인 터레인 시스템을 만들 수 있습니다. 1개 이상의 고해상도 컬러 항공 사진을 이용하여 바위, 흙, 풀과 같은 4,5 개의 별도 텍스처를 단순히 사용하는 것보다 폭넓은 다양성을 가진 텍스처를 얻을 수 있습니다. 사용 가능한 DEM 하이트맵과 항공 사진이 단지 10m, 15m 또는 그보다 낮은 공간 해상도인 경우, 경기장 주위 산과 같은 주변 터레인에 잘 사용할 수 있습니다. 이 오버레이 텍스처 기능을 사용하기 위해 경계 주위에 낮은 해상도의 터레인과 경기장에서의 높은 해상도 터레인을 사용하여 2개의 터레인 셋업을 구축할 수 있습니다.

각 개별 터레인 액터는 1개의 1:1 오버레이 텍스처만을 사용하기 때문에 텍스처 샘플러가 고갈될 확률은 없고, 그 결과 이루어지는 터레인 렌더링은 일반적으로 멀티 텍스처 weightmap 구동의 레이어 셋업보다 빠릅니다.

샌프란시스코의 일부로 설정되는 중간 해상도의 DEM 하이트맵 데이터는 회사내 소프트웨어를 사용하여 구축하여, 513x513 크기로 재샘플화 시킨 다음, Unreal G16 형식으로 변환시켰습니다. 513x513 하이트맵은 512x512 패치인 터레인이 됩니다.

DGOverlayDem.gif

17254x15490의 고해상도 컬러 항공 사진은 온라인 서비스의 소스를 기반으로 했습니다. 이것은 표준 페인트 응용 프로그램에 로드되고 DEM 하이트맵 영역과 동일한 위치를 crop 되었습니다. Crop된 텍스처를 UnrealEd에서 사용하기에 적합한 2의 거듭제곱으로 다시 샘플화(이 경우는 2048x2048) 하였습니다. 고해상도 텍스처를 가져오기할 때, 최대 텍스처 mip 크기가 지원되도록 적절한 LODGroup을 선택하도록 하십시오.

UE3OverlayTex.jpg

원본 사진의 저작권은 Geosage.com에 있습니다

텍스처에 대한 기본 머티리얼이 생성되었습니다. TextureSample은 Diffuse 노드에 연결됩니다.

기본 TerrainMaterial은 생성되었고, 머티리얼은 그것에 할당되었습니다. TerrainMaterial.MappingScale은 패치의 테레인 크기로 반드시 설정되야 합니다.예: 512x256 터레인에 256. 이것은 TerrainMaterial에 대해 1:1 매핑을 초래합니다.

기본 TerrainLayerSetup은 생성되었고, TerrainMaterial 그것에 할당되었습니다. TerrainLayerSetup은 그런 다음 터레인 액터에 할당됩니다.

UE3OverlayMat.gif

이 예제 터레인는 샌프란시스코 항구에서 산을 향해 내륙을 보고있는 느낌입니다.

DGOverlay.jpg

확장된 오버레이 멀티 타일링

오버레이 기술의 확장된 버전은 거대한 16384x16384 터레인 텍스처링 시스템에 대한 8192x8192 텍스처의 2x2 레이아웃과 같은 여러 타일화된 고해상도 텍스처의 사용이 연관됩니다. 이 방법을 사용하면 GIS(지리 정보 시스템)와 다른 현실 세계 터레인 시각화와 유사한 매우 복잡하고 고해상도의 터레인 텍스처링이 가능합니다.

터레인 하이트맵은 렌더하려는 영역의 고해상도 DEM 데이터를 소스로 삼고 있습니다. 이 예제에서는 512x512 패치 터레인에 대해 513x513으로 크기 조절됩니다. 그런 다음, 하이트맵은 G16 형식으로 변환되며 터레인 편집 대화 상자를 통해 터레인로 가져오기됩니다.

터레인의 비주얼 디테일을 개선하기 위해 고해상도 DEM 하이트맵을 1:1 노멀 맵에 대한 소스로 사용할 수 있음을 명심하십시오. 예를 들어, 소스 DEM 데이터가 256x256의 최종 게임내 터레인을 가진 2048x2048인 경우, 해당 소스 DEM은 2048x2048 Normal 맵 텍스처로 변환될 수 있고 터레인의 1:1 오버레이에서 사용될 수 있습니다. 결과적으로, 터레인 해상도 디테일이 증가합니다.

DGOverlayTileDem.gif

하이트맵 데이터와 동일한 영역의 고해상도 위성 이미지는 오버레이 텍스처에 사용됩니다. 이 예제에서는 15m 이미지 집합은 사용하여 13,000x13,000 텍스처를 제공합니다. 그 후, 8192x8192로 다시 샘플화되고, 그런 다음 각 4096x4096 크기의 사면체 텍스처로 분할됩니다. 터레인 전역에 걸친 이음새를 제거하기 위해 2개의 내부 가장자리에서 2개의 외부 가장자리로 복사된 1개 이상의 픽셀 조각(strip)을 각 사면체 텍스처에 필요합니다. 8192x8192 텍스처는 머티리얼에서 1개의 텍스처 샘플로 사용될 수 있지만, 이것은 터레인을 최신 비디오 어댑터에서만 사용할 수 없게 제한합니다. 4096 텍스처를 사용하여 비디오 하드웨어 지원을 늘리는 것입니다.

고해상도 DEM에서 노멀맵 텍스처를 만들 때와 비슷한 방법으로 상대적으로 터레인에 직각인 빛 소스를 가진 선명한 고해상도 위성 사진에서 노멀맵을 파생해낼 수 있습니다.

DGOverlayTileTex.jpg

4개의 4096x4096 텍스처를 UnrealEd로 가져오기합니다. 그들은 4096 크기 텍스처를 지원하는 CompressionNoAlpha와 LODGroup으로 설정됩니다.

UE3OverlayTileTex.gif

다음 3개의 검정색 픽셀과 1개의 흰색 픽셀을 가진 2x2 질감인 사면체 마스크 텍스처가 페인트 소프트웨어에서 제작됩니다. 이것은 터레인의 어느 곳에서 각 소스 사면체 텍스처가 렌더링되는 지를 결정하는 마스크에 사용됩니다. 흰색 픽셀은 텍스처가 해당 위치에 렌더링된는지를 확인합니다. 3x3 또는 4x4 타일과 같은 대형 타일링 시스템이 구현될 것이었으면, 이 마스크는 필요에 따라 만들어집니다.

텍스처는 2x2의 크기이고 압축할 필요가 없기때문에 압축되지 않은 상태로 가져오기됩니다.

이 스크린샷에서 선명도를 위해 텍스처는 큰 크기로 확대되고 있습니다.

UE3OverlayTileMask.gif

실제 머티리얼은 필요한 2x2 타일링을 제공하기 위하여 UV 노드에 연결되어 있는 TexCoord를 가진 TextureSamples의 간단한 집합입니다.

사면체 마스크는 LinearInterpolate 표현식을 통해 각 TextureSample가 어느 사면체에 렌더되는 지를 설정하기 위해 알파 입력으로 사용됩니다. 사면체 마스크에서 마스크 UV 노드에 연결되어 있는 TexCoords는 흰색 픽셀이 원하는 사면체 위치에 존재하도록 텍스처를 적절하게 반전시키는 데 사용됩니다.

UE3OverlayTileMat.gif

TerrainMaterial가 생성되었습니다. Material.MappingScale에 대한 속성은 패치의 터레인 크기로 설정되며, 이 경우는 512입니다. 머티리얼은 Material.Material 속성에 할당됩니다.

TerrainLayerSetup이 생성됩니다. 배열에는 1개의 입력이 추가되고, TerrainMaterial은 Materials[0].Material property 속성에 할당됩니다.

그 다음, TerrainLayerSetup이 터레인 액터의 Layers 배열에 할당됩니다.

UE3OverlayTileTobj.gif

이 예제 터레인은 하와이의 카우아이 섬입니다. 하이트맵은 513x513, 타일 오버레이 머티리얼은 4개의 4096x4096 텍스처, 노멀 맵은 8192x8192 소스 오버레이 질감으로 파생한 4096x4096입니다.

DGOverlayTile.jpg