귀령단/개발노트

22년 3월 2일 개발노트

문종식[지마] 2022. 3. 10. 22:07

지난번 만들었던 Landscape에 원하는 Material 적용 접근법에 대한 노트를 남겨두고자한다.

Unity와는 접근법이 달라서 공부가 무조건 필요했던 부분이였다.

언리얼이 살짝 복잡해보이기는 한데,(노드기반으로 세팅이 필요함) 조금만 익숙해지면 그 활용도는 무궁무진할 것 같다.

특히 이번에 이쪽 관련 작업을 하면서, 그 가능성에 대해서 알게 될 수 있었다.

이 부분은 유튜브에 수 많은 튜토리얼 자료가 있지만,

나는 Ben Cloward 씨의 Landscape material 시리즈를 참고해서 제작했다. 엄청난 내용의 강좌자료가 있으니, 정말 추천한다.

https://www.youtube.com/watch?v=BN2UFlRt-RU&list=PL78XDi0TS4lHwqv_PmXAdedT2SH1qeRqK&index=5

첫번재 작업 : 텍스처 Preparation

위 튜토리얼에서 제공하는 방식이 적합하다고 판단해서 튜토리얼을 봐가면서 작업을 이어나갔다. 아래 노트는 그 부분들을 정리한 내용이다.

 

우선 Landscape에 적용되기를 원하는 텍스처를 Quixel을 통해서 바로 Import 시켜준다.

많이들 아는 사실이겠지만 이 곳에는 시간을 절약해 줄 수 있는 정말 무궁무진한, 좋은 퀄리티의 어셋들이 구비되어있다. 물론 공짜로.

그리고 이 준비됀  Texture을 최적화 하기 위해서 두 장으로 Packing을 한다.

보통 우리가 알고있는 이미지에는 기본적으로 RGB 그리고 필요시 + 알파 이렇게 4가지의 채널을 지원하는데,

이 부분을 활용해서 필요한 텍스처의 갯수를 줄일 수 있는 것이다.

CR MAP이라 명명되어있는 텍스처에는 → RGB 채널 (Albedo) A채널 (Roughness) 값들이

NOH MAP에는 → RG채널(Normal) B채널(AO) A채널(Heightmap) 값들이 들어간다.

이렇게 두 장의 맵으로 줄인다. 물론 필요한 이미지를 다 이렇게 세팅하는게 좀 많이 귀찮긴하지만

이렇게 작업함으로 인해 5장이 필요했던 이미지를 두장으로 줄일 수 있게됀다.

알파를 지원해야하기 때문에 확장자는 .tga 32bit로.

이 Packing 작업은 포토샵으로 해도되지만,

개인적으로는 Substance Designer을 활용하는 걸 추천한다.

언리얼로 해당 이미지를 import할 때에는 Compression settings를 BC7으로 변경해주고, srgb를 꺼줘야함

(NOH MAP만 해당됩니다.)

이렇게 필요한 텍스처들을 준비시켜준다. 나는 총 8세트의 텍스처들을 작업했다.


두번째 작업 : Landscape에 Material 임시적용 후, Tiling 느낌 없애기

앞서 작업한 텍스처를 제대로 적용하기 위해 설정이 필요하다.

여기서부터는 여러 과정이 필요하기 때문에 Function기능이 많이 활용됀다.

Function 기능은 material 내 작성한 그래프를 하나의 그룹으로 묶어서 다른 그래프에도 활용할 수 있게 해주는 기능이다.

우선 가장 기본적으로, 앞서 제작한 두가지 텍스처를 필요한 곳에 쓰일 수 있도록 알맞게 배치시켜주는 Function을 제작한다.
Function을 활용하면 위처럼 복잡한 노드를 이렇게 간단하게 줄여준다. 

  이제 이 Material을 Landscape에 적용하면 Seamless라는 말이 무색할 정도로 엄청난 Tiling 현상이 일어나서 우리의 눈을 아프게 한다.

이것은 마치 가지런히 배치된 배추같군

Ben씨는 세가지 방법으로 이 Tiling을 최소화 할 수 있는 방법을 소개해준다.

일일히 자세한 정보를 기록해두는 건 시간낭비인 것 같아서,(튜토리얼 보면 되니까) 큼지막하게 나열을 하자면

  1. 텍스처를 회전시킨 다음에 Noise Texture을 마스크로 활용하여 랜덤으로 대체시킨다.(기본 텍스처는 유지한채로!)
  2. 원거리용 텍스처를 제작한다(Substance Designer의 Make it Tile Patch 기능을 활용) 그리고 카메라 거리 값을 마스크로 활용하여 카메라와 먼 거리에 있는 부분에는 원거리용 텍스처를 적용하는 작업.
  3. Grain이 들어가있는 rgb를 활용해서 Landscape 전체적으로 색을 살짝 바꿔주는 작업.

위 작업으로 노드가 많이 복잡해지지만, 효과는 정말 좋은 것 같다.

모든 이미지에 위의 작업이 완료되면, 이제 Landscape에서 레이어로 활용할 수 있도록 연결시켜준다.


세번째 작업 : Tessellation [Displacement]

이제는 Tessellation 관련 작업 (Displacement)이 남았다.

거리에 따라 Tessellation을 조절해서 바닥을 Displace해주는 건데, 매우 값비싼 성능을 요구하지만

그 결과는 매우 뛰어나다. 헌데 내 작업에는 효과가 미비해서 크게 활용을 못하고 있다.

Tessellation 해상도가 낮아서 (Polygon이 많이 나눠지지 않아서) 그런 것인가 싶기도 하고

여러 추측이 되었으나 일단은 Displacement 자체가 큰 변화가 없는 Noise와 같은 느낌이 들어서

잘 적용이 되지 않는 것 같았다. 만약 큰 돌덩어리와 같은 부분이였으면 그 느낌이 좋았을텐데.

어쨌던 Displacement는 생각보다 결과를 그렇게 좋게 보여주지도 않고, 폴리곤만 왕창 늘리기 때문에 이 부분은 일단 제외하기로 했다. (차라리 중간중간 메쉬로 채워주는게 더 나은 방법일수도)

→ 하루만에 입장을 번복한다. ㅎㅎ displacement는 무겁지만 잘만 활용하면 매우 멋진 기능.

landscape에서 나눌수 있는 면이 한계가 있어서 제대로 적용이 안되고 있었다.

3월 8일자 노트에 방법을 자세히 기록해두겠다. 내가 어떻게 면을 더 dense하게 나눴는지 알수있다.

 

Tessellation 작업 이전에,텍스처가 너무 밋밋한 거 같아서 뭔가 불만족스러웠는데, 버퍼로 확인해보니(특정 파트만 렌더해서 화면에 보여주는 기능) Albedo와 Roughness만 제대로 적용이 되고, 노멀맵이 적혀 적용이 되고 있지 않은 상황이였던 것이다.

Function 자체에 뭔가 문제가 있는 것 같아서 수차례 바꿔보았지만 어디서부터 잘못된 건지 찾기 어려웠다.

 

구글링을 하다보니 Landscape material이 여러개 있을 경우 여러 이슈가 생긴다는 내용의 글들이 꽤 되었는데,

그래서 나도 혹시 몰라 material layer을 몇개 제거하니 이 문제가 해결이 되는 것 아닌가 ㅡㅡ

그래서 결국 한 숨 돌렸다. 결국 언제 어디서나 짜잘한 문제는 생기는 법이다.

어제 하루 종일 이 문제 때문에 고생했는데, 그래도 결과를 찾아서 다행이다.