<aside> <img src="/icons/list_gray.svg" alt="/icons/list_gray.svg" width="40px" />

목차

</aside>


image.png

개요


랜드스케이프에서 쓰이는 랜드 스케이프 머티리얼과 블렌드 레이어, 랜드스케이프 UV 좌표를 가지고, 자동으로 레이어 블렌딩이 되고 거리 기반으로 텍스쳐가 좀 더 살아나게끔 구현했습니다.

랜드스케이프에서 고질적인 문제점으로는, 랜드스케이프 페인팅이 지원되지만 이는 절차적이지 못한다라는 점과 디테일한 묘사가 불가능하다는 점입니다.

때문에, 이를 해결하기 위해서는 자동으로 블렌딩되는 형태가 필요합니다.

구성


랜드스케이프 머티리얼 레이어[A-E]

A, B, C 머티리얼 레이어 블렌딩

랜드스케이프 레이어 결합 & 분리

글로벌 더티 적용

거리 기반 배리에이션 적용

폴리지 적용

함수 및 섹션


Prepare Materials


image.png

머티리얼 레이어를 각 머티리얼 함수 부분에서 연산하여 출력합니다. 이후, 블렌딩을 위해서 각 머티리얼을 경로 노드로 관리합니다.

랜드스케이프 레이어 머티리얼

랜드스케이프 레이어들도 기본 머티리얼과 마찬가지로, 기본 속성들의 수치값을 조절할 수 있도록 커스터마이징합니다. 때문에, 별다른 특징 없이 머티리얼에서 필요한 연산 파라미터를 꺼내놓습니다.

해당 머티리얼에서는 가장 중요한 기능은 다음과 같습니다.

거리 기반 블렌드

Before: 일반 UV 스케일

Before: 일반 UV 스케일

After: 거리 기반 블렌드가 적용된 UV

After: 거리 기반 블렌드가 적용된 UV

랜드스케이프와 같은 규모가 큰 메시의 경우, UV 타일링이 너무 촘촘한 나머지 살려야 할 노말 질감과 컬러가 표현이 안될 수 있습니다.

과정 중에서 알파 텍스쳐를 몇 개 추가하여, 질감을 살리도록 블렌드를 시도할 수 있습니다. 그러나, 이 경우 불필요한 텍스쳐 오브젝트가 늘어난다는 점과 더불어서 해당 레이어 머티리얼의 기존 질감을 기반하지 않기 때문에 한계가 존재합니다.

image.png

위와 같이 식을 구성한다면, 바라보는 월드 포지션에서 카메라 포지션이 가까울수록 $0$, 월드 포지션에서 카메라 포지션이 멀수록 $1$이 표현됩니다.

녹화_2025_02_23_23_10_41_295.gif

이와 같이 카메라 거리에 따라서 $0$~$1$ 값을 표현한다면, 선형 보간을 통해서 별도로 구성된 UV 스케일의 2개 텍스쳐 샘플과 블렌드를 진행할 수 있습니다.

녹화_2025_02_23_23_19_22_191.gif

이를 적용한다면, 월드 상에서 랜드스케이프 레이어 머티리얼이 카메라 거리에 따라서 점진적으로 블렌드되는 것을 확인할 수 있습니다.

위와 같이 거리 기반 블렌드를 진행하면 다음과 같은 이점을 얻을 수 있습니다.

image.png

각 디스턴스에 따른 UV 스케일을 각 파리미터로 관리하여 직관적으로 수정할 수 있습니다.

UV 타일링 셀 블렌드

규모가 큰 메시와 더불어서 반복적으로 적용해야 하는 UV타일링의 경우는 시각적으로 부자연스러움을 나타냅니다.

<aside> <img src="/icons/telescope_orange.svg" alt="/icons/telescope_orange.svg" width="40px" />

</aside>

제가 현재까지 연구된 바에 따르면, **“Voronoi Celling”**와 **“Hex Tiling”**을 이용하여 최대한 타일링에서의 부자연스러움을 줄이며 블렌딩할 수 있습니다.

이번 랜드스케이프 머티리얼에서는 기존에 개발할 때 참고했던 **“Voronoi Celling”**를 활용합니다.

<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" />

</aside>

캡처_2025_02_23_23_55_35_472.png

저는 참고 자료에서 타 개발자가 사전에 구성한 위 Voronoi Cell 텍스쳐를 가져와, 진행하였습니다.

image.png

가장 먼저 셀 블렌드 머티리얼 함수의 입력 값 섹션입니다.

image.png

보로노이 셀 텍스쳐를 샘플링하여 필요한 데이터를 준비합니다.

각 보로노이 데이터는 다음과 같습니다.

Voronoi RGB