Unity 검색

다루는 주제
공유

현재 터레인 전담팀이 운영되고 있으며, 팀의 첫 번째 성과로 업데이트된 터레인 시스템이 Unity 2018.3에 적용되어 공개될 예정입니다! 이번 업데이트에서는 GPU 활용도를 높여 툴과 성능이 개선되었습니다. 또한 고해상도(HD)경량(LW) 렌더 파이프라인에 대한 지원이 추가되며, 빌트인 렌더 파이프라인과 Unity의 기존 터레인 시스템과도 호환됩니다.

지금 Unity 2018.3 베타 버전을 다운로드해서 업데이트된 기능을 먼저 이용해 보세요! 단, 베타 버전은 아직 개발 단계이기 때문에 사용자 인터페이스 및 API는 추후 변경될 수 있습니다.

성능

성능 향상을 위해 터레인에 GPU 인스턴싱이 적용된 렌더 경로가 추가되었습니다. 대부분의 경우 인스턴싱을 사용하면 발생되는 드로우 콜의 수가 급격히 감소합니다. 유니티에서 자체적으로 진행한 여러 테스트 결과 CPU 비용이 50% 이상 절감되었습니다. 단, 실제 수치는 플랫폼과 사용 사례에 따라 다를 수 있습니다. 이번에 소개되는 렌더 경로를 선택하려면 Terrain 설정에서 ‘Draw Instanced'를 활성화하면 됩니다.

이 옵션을 활성화하면 하이트맵(height map), 스플랫맵(splat map)과 같은 무거운 터레인 데이터가 모두 GPU에서 텍스처로 변환됩니다. 또한 CPU에서 각 터레인 패치에 대한 커스텀 메시를 작성하는 대신 GPU 인스턴싱을 사용하여 단일 메시를 리플리케이트하고 하이트맵 텍스처를 샘플링하여 올바른 지오메트리를 생성할 수 있습니다. 이렇게 하면 인스턴스화된 드로우 콜 수가 적어도 수천 개의 커스텀 메시 드로우를 대체할 수 있으므로 터레인에 대한 CPU 워크로드가 크게 감소합니다.

또한 로드 시간도 단축됩니다. 커스텀 메시를 모두 빌드하는 과정을 스킵하고 GPU로 베이스맵(사전 블렌드된 LOD 텍스처)을 빌드할 수 있습니다. 이러한 유형의 작업은 GPU가 훨씬 빠르게 처리할 수 있습니다. 따라서 자체 커스텀 터레인 셰이더가 있는 경우 '빌드 베이스맵' 셰이더를 오버라이드하고 일치하는 베이스맵 LOD 텍스처를 생성할 수 있습니다.

터레인 비주얼

인스턴싱을 사용하면 터레인 노멀의 시각적 품질이 개선됩니다. 하이트맵에서 생성되고 픽셀 셰이더에서 샘플링된 노멀 맵 텍스처에 터레인 메시 노멀을 저장하면 지오메트리에서 노멀을 분리합니다. 즉, 노멀은 메시 LOD 레벨과 별개로 관리됩니다. 따라서 '픽셀 에러율'을 높이면 버텍스 비용이 감소하여 결함도 줄어듭니다.

기존의 버텍스 단위 노멀(왼쪽)과 새로운 픽셀 단위 노멀(오른쪽)의 모습. 삼각형 수는 동일합니다.

또한 HD 렌더 파이프라인과 LW 렌더 파이프라인에 모두 적용할 수 있는 터레인 셰이더를 개발하고 인스턴스화된 렌더링에 대한 지원을 추가했습니다. 더욱 향상된 성능을 갖춘 HD 셰이더는 픽셀 단위 노멀을 비롯해 높이 및 밀도 블렌드 모드, 노멀 스케일링, 텍스처를 활용한 표면 금속성 및 평활도(smoothness) 등과 같은 다양한 신규 기능을 지원합니다. HD 터레인 셰이더는 단일 패스(pass)로 제한되지만, 한 개의 패스에서 최대 8개의 터레인 레이어 블렌딩을 지원합니다.

스크립터블 GPU 툴

에디터의 경우 커스텀 터레인 툴을 직접 제작할 수 있는 스크립트 API를 공개했으며, 다양한 유틸리티 함수를 제공하여 GPU에서의 원활한 타일 간 조형(sculpting) 및 페인팅 작업을 쉽게 구현할 수 있습니다. 새로운 TerrainAPI에는 터레인 툴의 기본 클래스인 TerrainPaintTool<T0>과 터레인 데이터 수정을 위한 유틸리티 함수가 있는 TerrainPaintUtility가 포함되어 있습니다.

이러한 변경 작업을 통해 기존의 모든 터레인 툴이 GPU 작업으로 전환되었습니다. 따라서 작업 속도가 크게 개선되었을 뿐만 아니라 브러시 크기가 더욱 커지고, 브러시 프리뷰가 개선되었으며, 자동으로 경계 부분을 부드럽게 처리해주는 심 스티칭(seam-stitching) 기능을 이용해 터레인 타일 경계면 전체를 페인트할 수 있습니다.

새로운 스탬프 터레인 툴(라이브 프리뷰)을 사용한 예시(2018.3b 6 버전에 포함 예정)

또한 브러시 회전, 랜덤화 옵션과 같은 브러시 기능뿐만 아니라 하이트맵 및 메시 스탬핑, 클론 브러시 등과 같은 고급 페인팅 툴에 대한 테스트를 시작했습니다. 2018.3에는 이러한 페인팅 툴이 아직 포함되지 않지만, 곧 출시될 예정이니 Unity 베타 페이지에서 소식을 확인하세요!

다중 터레인 지원

다중 터레인 타일에 대한 작업이 한결 쉬워졌습니다. 터레인 간 페인팅 작업을 원활하게 진행할 수 있을 뿐만 아니라, 인접한 터레인을 자동으로 연결할 수도 있습니다. 이전에는 스크립트를 작성하여 인접한 터레인을 수동으로 연결해야 했습니다.

터레인 설정에서 'Auto connect'를 활성화하면 그룹 ID가 동일한 인접 터레인이 자동으로 연결됩니다.

기존 터레인을 확장하는 경우 새로 추가된 '인접 터레인 생성(Create Neighbor Terrain)' 툴을 사용하면 빈 경계면을 따라 일치하는 터레인 타일을 빠르게 추가할 수 있습니다.

또한 크기를 조정하고 해상도를 변경하는 작업으로 인해 발생하는 문제를 줄이기 위한 작업이 진행되고 있습니다. 이전에는 해상도를 변경하면 데이터가 삭제되고 모든 작업이 손실되었지만, 2018.3 버전에서는 하이트맵과 스플랫맵이 리샘플링됩니다. 모든 크기 조정 작업에 대한 개선도 빠른 시일 내에 이루어질 예정입니다.

새로운 에셋 유형

워크플로를 간소화하기 위해 터레인과 관련된 새로운 에셋 유형 두 가지, TerrainLayer 에셋과 Brush 에셋을 만들었습니다.

TerrainLayer를 이용하면 터레인 오브젝트와 상관없이 터레인 머티리얼을 정의할 수 있기 때문에 터레인이 여러 개라도 동일한 머티리얼을 쉽게 추적할 수 있습니다. 이렇게 하면 페인팅과 머티리얼 수정 작업이 원활해집니다. 또한 TerrainLayer 에셋을 확장하여 임의의 셰이딩 작업에 사용할 수 있는 '마스크맵(mask map)' 텍스처를 지원하고, TerrainLayer 에셋에 대한 셰이더에 기반한 커스텀 GUI를 사용할 수 있는 스크립트 인터페이스를 지원합니다.
여기 보이는 브러시는 페인팅 및 조형 툴에서 사용하는 GPU 브러시 셰이프로, 이제 텍스처와 방사 감쇠 커브로 정의됩니다. 이렇게 하면 브러시 셰이프를 간편하게 만들고 조정할 수 있습니다. 이전에는 이름이 별도로 지정된 폴더에 복잡하게 제작된 이미지 파일을 붙여 넣어야만 했습니다.

또한 R16 텍스처 포맷(단일 채널 16비트 포맷)에 대한 지원도 추가되었습니다. 이를 통해 브러시 셰이프에 대한 8비트 양자화(quantization)를 방지할 수 있습니다. 즉, 하이트맵 스탬프로 사용될 경우 원치 않는 '테라싱(terracing, 계단 현상)' 효과가 발생하지 않습니다.

'테라싱' 결함을 보이는 8비트 브러시 스탬프(상단)와 16비트 브러시 스탬프(하단).

유니티의 터레인 전담팀은 이제 막 한 걸음 내디디기 시작했으며, 앞으로도 개선 작업을 꾸준히 진행할 예정입니다. 피드백이 있으시면 언제든지 월드 빌딩(World Building) 관련 포럼에 글을 남겨주세요!

2018년 10월 10일 테크놀로지 | 5 분 소요
다루는 주제