원문출처 : http://udn.epicgames.com/Three/LandscapeMaterialsKR.html
원문을 옮겨온것이며 작업하면서 첨언 및 수정할 생각으로 포스팅
개요
-------------------------------------------
어떤 언리얼 머티리얼도 랜드스케이프 터레인에 할당할 수는 있지만, 언리얼 엔진 3의 머티리얼 시스템에는 랜드스케이프 레이어의
웨이팅에 따라 여러 머티리얼 네트워크를 블렌딩하고, 그 네트워크를 랜드스케이프에 매핑시키기 위해 UV 좌표를 제어할 수 있는
랜드스케이프 전용 표현식이 제공됩니다. 추가로 전체 해상도의 랜드스케이프 노멀맵도 사용가능합니다. 이러한 기능을 통해 레벨에
사용되는 랜드스케이프에 특화된 머티리얼을 수월하게 만들어낼 수 있습니다.
랜드스케이프 머티리얼 생성
-------------------------------------------
레이어 블렌딩
레이어 블렌딩 기능이야말로 랜드스케이프 터레인 텍스처를 입히는 데 있어서 기본입니다. 이는 과거 언리얼에서 터레인 시스템이 작동하던 방식과 유사합니다만, 랜드스케이프 시스템에서 머티리얼 측면은 다르게 구현되어 있습니다.
랜드스케이프 레이어 블렌딩 기능은 몇 개의 TerrainLayerWeight 표현식 시리즈로 구성됩니다. 이들 각각의 표현식은 Parameter Name 프로퍼티에다 랜드스케이프 터레인 내 연결된 레이어 이름을 지정해야 합니다. 첫 레이어에 대해서는 Base 입력을 비워둬도 되지만, 후속 레이어에 대해서는 이전 레이어의 출력을 다음 레이어의 Base 에 연결해 주면 됩니다.
내부적으로 이 노드는 Static Switch Parameter 처럼 작동합니다. 랜드스케이프의 각 컴포넌트는, 주 랜드스케이프 머티리얼에서 생성되어 딱 그 컴포넌트에만 적용되는 MaterialInstanceConstant 를 자체적으로 갖습니다. 특정 랜드스케이프 컴포넌트에 특정 레이어가 사용되지 않는다면, 레이어에 연결된 노드의 서브 트리는 버려집니다. 이로써 전체적인 머티리얼 복잡도를 줄여, 개별 컴포넌트에 사용되는 샘플 수가 셰이더 모델 사양으로 지정된 최대치(SM 3.0 은 16) 를 넘지 않는 한도 내라면, 랜드스케이프에 적용된 머티리얼은 샘플을 몇 개든 가질 수 있습니다. 즉 랜드스케이프 어디서든 사용되는 텍스처나 네트워크가 모두 포함된 마스터 머티리얼을 구성하는 것도 가능합니다. 이로써 매우 복잡한 네트워크 집합체를 구성하면서도, 랜드스케이프 컴포넌트에 적용되는 최종 머티리얼의 비용을 하드웨어 허용 한도 내에 맞출 수 있습니다.
아래는 랜드스케이프의 4 레이어 디퓨즈 컬러를 블렌딩하기 위해 구성해 본 간단한 예제 머티리얼입니다.
주: TerrainLayerWeight 노드의 Preview Weight 프로퍼티를 변경하면 머티리얼의 다양한 웨이트 효과를 미리볼 수 있습니다. TerrainLayerCoords 노드는 랜드스케이프 레이어의 텍스처에 대한 타일링, 스케일 등의 파라미터를 지정하는 데 사용됩니다.
물론 어떤 표현식 네트워크도 단순한 TextureSample 대신 Layer 입력에 연결할 수 있습니다. 레이어 관찰자와의 거리에 따라 세밀한 텍스처에서 커다랗고 거친 텍스처로 전환하는 등의 복잡한 효과를 내는 것도 가능한 것입니다.
이 블렌딩 방법의 대안으로써 LandscapeLayerBlend 노드를 사용하는 방법도 있습니다. (아래 참고)
레이어 웨이트와 순서
랜드스케이프는 알파(투명도) 블렌딩보단 웨이트(가중치) 블렌딩을 사용하므로, 어느 위치에서도 모든 레이어의 블렌딩 인수는 최대 1.0 입니다. 이는 다른 것에 의존하지 않는다는 장점이 있습니다. 언제 어느 레이어를 칠한대도 그 웨이트는 늘어나고 기존의 다른 웨이트는 감소하는 것이지요. 단점은 한 레이어를 100% 로 칠해버릴 때인데, 그렇게 되면 다른 모든 레이어에 대한 웨이트 값이 0% 가 되기 때문입니다. 이미 100% 인 레이어에 언페인트 툴을 사용해 보면 확실히 알 수 있습니다. 벗겨낸 레이어를 어떤 레이어로 대체해야 할지, 툴은 알지 못하는 것입니다.
랜드스케이프 머티리얼 표현식
-------------------------------------------머티리얼 시스템에는 랜드스케이프 시스템에 사용하도록 특별히 고안된 표현식이 몇 가지 있습니다.
Terrain Layer Weight
TerrainLayerWeight (터레인 레이어 웨이트) 표현식은 머티리얼이 할당된 랜드스케이프에서 얻은 관련 레이어에 대한 웨이트에 따라 머티리얼 네트워크의 블렌딩을 가능하게 해 주는 표현식입니다.
Properties 속성
- Parameter Name 파라미터 이름 - 랜드스케이프에 속하는 레이어 이름으로, 이 표현식에 관련지을 것입니다. 이 레이어에 대한 웨이트는 두 입력 네트워크를 블렌딩하기 위한 알파 값으로 사용됩니다.
- Preview Weight 미리보기 웨이트 - 머티리얼 에디터에서 미리보기 용도로 사용할 웨이트입니다.
Inputs 입력
- Base 베이스 - 관련 레이어와 블렌딩할 네트워크입니다. 일반적으로 예전 레이어 블렌딩의 결과이나, 첫 레이어라면 비어있을 수도 있습니다.
- Layer 레이어 - 관련 레이어에 대해 섞어들어갈(blend in) 네트워크입니다.
Outputs 출력
- 관련된 레이어의 레이어 웨이트에 따라 Base 와 Layer 간의 블렌딩 결과를 출력합니다.
Terrain Layer Coords
TerrainLayerCoords (터레인 레이어 좌표) 표현식은 랜드스케이프 터레인에 머티리얼 네트워크를 매핑시키는 데 사용할 수 있는 표현식입니다.
Properties 속성
- Mapping Type 매핑 타입 - 랜드스케이프에 머티리얼(이나 네트워크)을 매핑시킬 때 사용할 기준(orientation)을 지정하는
ETerrainCoordMappingType
(E 터레인 좌표 매핑 타입) 입니다. - Mapping Scale 매핑 스케일 - UV 좌표에 적용할 균등 스케일입니다.
- Mapping Rotation 매핑 회전 - UV 좌표에 적용할 회전 값으로, 도 단위입니다.
- Mapping Pan [U/V] 매핑 [U/V] 패닝 - UV 좌표에 적용할 [U/V] 방향 오프셋입니다.
Outputs 출력
- 주어진 속성 값에 따라 랜드스케이프에 머티리얼을 매핑시킬 UV 좌표를 출력합니다.
Terrain Layer Switch
(2011년 10월 빌드서부터 지원)TerrainLayerSwitch (터레인 레이어 스위치)는 특정 레이어가 랜드스케이프 리전(region)에 공헌하지 않을 때, 일부 머티리얼 연산을 제외시키는 것입니다. 특정 레이어의 웨이트(가중치)가 0 일 때 불필요한 계산을 제거하여 머티리얼을 최적화시킬 수 있습니다.
Inputs 입력
- LayerUsed 사용 레이어 - 노드의 프로퍼티에 지정된 레이어가 현재 랜드스케이프 리전에 사용되고 있을 때 쓸 결과입니다.
- LayerNotUsed 미사용 레이어 - 현재 랜드스케이프 리전에 레이어가 사용되지 않아 웨이트가 0 일 때 쓸 결과입니다.
Outputs 출력
- 레이어가 랜드스케이프 리전에 공헌을 하느냐 마느냐에 따라 LayerUsed 와 LayerNotUsed 입력 둘 중 하나가 출력됩니다.
Landscape Layer Blend
(2011년 10월 빌드서부터 지원)TerrainLayerWeight 노드와 함께 레이어를 수동 블렌딩하기 위한 대안으로써, LandscapeLayerBlend 노드는 알파 블렌딩 또는 높이 기반 오프셋을 적용시킨 알파 블렌딩 중 한 가지 방법을 사용하여 다수의 레이어를 블렌딩합니다. 높이 기반 오프셋을 통해 레이어는 하이트맵 입력에 따라 다른 레이어와 블렌딩할 수 있습니다. 특정 레이어가 사용되지 않는 리전에서는 레이어를 제외시켜 셰이더 공헌을 없앰으로써 자동 최적화시킵니다.
Inputs 입력
- 각 레이어에는 서로 블렌딩하기 위한 입력이 추가됩니다.
- LB_HeightBlend 블렌딩된 레이어(아래 참고)에는 높이 입력도 있습니다.
Outputs 출력
- 서로 블렌딩된 레이어 결과입니다.
이 노드에 대한 프로퍼티에는 사용자가 서로 블렌딩할 레이어에 대한 정보를 입력할 수 있는 배열이 있습니다.
각 레이어에 대한 프로퍼티
- Layer Name 레이어 이름 - 랜드스케이프 편집 모드 창에서 사용되는 레이어 이름에 해당합니다.
- Blend Type 블렌드 종류 - LB_AlphaBlend 이거나 LB_HeightBlend (알파나 높이) 입니다. 자세한 내용은 아래 설명되어 있습니다.
- Preview Weight 미리보기 가중치 - 머티리얼 에디터에서 블렌딩을 미리보기 위해, 레이어에 대한 웨이트 값으로 사용됩니다.
아래는 서로 블렌딩된 여러 개의 레이어에 대한 프로퍼티 예제로, 위에 나타난 노드에 해당하는 것입니다.
다수의 LB_HeightBlend 레이어 사용시 주의점
LB_HeightBlend 는 지정된 높이 값을 사용하여 레이어에 대한 블렌드 인수(웨이트)를 변조시키는 식으로 작동합니다. 모든 웨이트의 합은 1.0 이 되어야 하기에, 이미 칠해진 다른 레이어는 보정을 위해 증폭됩니다. 한 지역에 칠해진 레이어가 여럿 있고 그 전부가 LB_HeightBlend 인 경우, 특정 지역에 칠해진 모든 레이어가 동시에 높이 값이 0 일 수가 있으므로, 각 레이어에 바람직한 블렌드 인수는 0 이 됩니다. 명시적이든 묵시적이든 순서가 없기 때문에, 공헌도가 있는 레이어가 없으니 결과는 검정 점이 됩니다. 노멀 맵을 블렌딩하는 경우라면 상황은 더욱 나빠집니다. (0,0,0), 즉 유효하지도 않은 노멀 값이 나와 라이팅과 계산 문제를 일으킬 것이기 떄문입니다. 이 문제를 해결하려면 레이어 중 하나에 LB_AlphaBlend 를 사용하면 됩니다. 그렇게 되면 항상 0 은 아닌 블렌드 인수가 준비되니까요.
왼쪽 이미지에서는 모든 레이어가 LB_HeightBlend 라 일부 지역이 까맣게 나옵니다. 오른쪽에서는 빨강 "1" 레이어를 LB_AlphaBlend 로 바꿔 문제를 해결했습니다.
지오메트리 노멀 맵
주: 2011년 5월 빌드 이후로 지오메트리 노멀 맵은 픽셀 단위로 자동 샘플링되므로, 머티리얼에 LOD-독립적 고해상도 라이팅을 얻기 위한 노드를 추가할 필요가 없습니다. 아래 정보는 2011년 4월 이전 버전을 사용할 때만 필요한 것입니다. 2011년 5월 이후 버전으로 업그레이드하실 때 꼭 랜드스케이프 머티리얼에서 하이트맵 샘플링 노드를 제거하시기 바랍니다.
머티리얼의 하이트맵 텍스처를 샘플링하여, 픽셀-별 지오메트리 노멀 정보에 접근할 수 있습니다. 이로써 원거리의 랜드스케이프가 LOD 아웃된 경우에도 일관된 고해상도 라이팅을 낼 수 있습니다.
랜드스케이프는 하이트맵 텍스처를 Heightmap 이라는 이름의 파라미터로 할당합니다. 지오메트리 노멀맵은 X / Y 컴포넌트가 하이트맵 텍스처의 Blue / Alpha 채널에 저장되는 월드-공간 노멀 벡터로 저장됩니다. Z 컴포넌트를 만들어도 올바르게 편향(bias)시킨 다음 월드공간에서 컴포넌트공간으로 변형(transform)시키는 등, 노멀 맵으로 쓰러면 약간의 머티리얼 노드를 통과시켜 줘야 합니다.
그런 작업을 하는 노드는 아래와 같습니다. Engine\Content\EditorLandscapeResources.upk 패키지의 LandscapeLightingMaterial 머티리얼 안에 이 예제가 있습니다.
이전 Normal 입력 구성에 연결된 것과 비슷한 레이어 블렌딩 구조를 사용하여 다수의 레이어에 대한 노멀 맵은 물론 지오메트리 노멀 맵도 함께 블렌딩할 수 있습니다.
Tessellation 과 Displacement
머티리얼의 TessellationFactors 와 WorldDisplacement 채널은 랜드스케이프 터레인과 함께 사용하여 디테일과 디포메이션(변형)을 더하는 데 사용할 수 있습니다. 이는 다른 표준 머티리얼과 함께 했을 때와 마찬가지로 작동할 것이며, 레이어 블렌딩도 디퓨즈, 노멀 등의 채널과 마찬가지로 함께 사용할 수 있습니다.
주: 이 기능은 DirectX 11 이 있어야 사용할 수 있는 기능입니다. 그러므로 DirectX 하드웨어만을 노린 것이 아니라면, 2차적인 폴리시 이펙트로만 사용해야 할 것입니다.
랜드스케이프에 머티리얼 할당하기
-------------------------------------------
머티리얼은 생성 후 맵의 랜드스케이프 액터에 할당해 줘야 합니다.
랜드스케이프 액터의 속성 Landscape 부분 아래 Landscape Material
(랜드스케이프 머티리얼)을 통해 머티리얼을 직접 할당할 수 있습니다. 콘텐츠 브라우저에서 머티리얼을 선택해 둔 다음 버튼을 누르면 할당됩니다.
'Technical Report > Unreal' 카테고리의 다른 글
UDK3 Blend Materials (0) | 2014.05.17 |
---|---|
Worldmachine으로 UDK3용 Landscape 제작 (0) | 2014.01.06 |
130320 Worldmachine을 활용한 3D Terrain 제작 테스트 (0) | 2013.03.20 |
Speed Tree 5.0 (0) | 2011.11.01 |
UDK lighting build error 메세지 (2) | 2011.10.10 |