22년 3월 2일 개발노트
지난번 만들었던 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 내 작성한 그래프를 하나의 그룹으로 묶어서 다른 그래프에도 활용할 수 있게 해주는 기능이다.
이제 이 Material을 Landscape에 적용하면 Seamless라는 말이 무색할 정도로 엄청난 Tiling 현상이 일어나서 우리의 눈을 아프게 한다.
Ben씨는 세가지 방법으로 이 Tiling을 최소화 할 수 있는 방법을 소개해준다.
일일히 자세한 정보를 기록해두는 건 시간낭비인 것 같아서,(튜토리얼 보면 되니까) 큼지막하게 나열을 하자면
- 텍스처를 회전시킨 다음에 Noise Texture을 마스크로 활용하여 랜덤으로 대체시킨다.(기본 텍스처는 유지한채로!)
- 원거리용 텍스처를 제작한다(Substance Designer의 Make it Tile Patch 기능을 활용) 그리고 카메라 거리 값을 마스크로 활용하여 카메라와 먼 거리에 있는 부분에는 원거리용 텍스처를 적용하는 작업.
- 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을 몇개 제거하니 이 문제가 해결이 되는 것 아닌가 ㅡㅡ
그래서 결국 한 숨 돌렸다. 결국 언제 어디서나 짜잘한 문제는 생기는 법이다.
어제 하루 종일 이 문제 때문에 고생했는데, 그래도 결과를 찾아서 다행이다.