언리얼 엔진은 수년간 리얼타임 및 오프라인 건축 렌더링 제작에 사용되어 왔지만, 나나이트, 루멘 등 언리얼 엔진 5에서 공개된 신기능이 결과물의 스케일과 퀄리티를 어마어마한 수준으로 향상시켰습니다. 힐사이드(Hillside)는 사프디 아키텍츠(Safdie Architects)의 오리지널 디자인으로서 캐나다 몬트리올에 소재한 해비타트 67(Habitat 67) 커뮤니티를 홍보하기 위해 네오스케이프(Neoscape)와 협업하여 개발한 건축 시각화 샘플 씬입니다. 이 문서에서는 프로젝트 힐사이드를 간략하게 살펴보고, 대규모 건축 시각화 프로젝트를 제작하고 렌더링하는 데 사용된 주요 세팅과 고려 사항을 다룹니다.
대부분의 건축 시각화 프로젝트와 마찬가지로 힐사이드 역시 매우 그래픽 집약적인 프로젝트입니다. 안정적인 프레임 레이트로 최종 무비 렌더링을 하려면 RTX A6000을 권장하며, 최소 RTX 3080 이상의 그래픽 카드가 필요합니다.
구성
언리얼 엔진 마켓플레이스에서 Hillside 프로젝트를 다운로드합니다.
건축 템플릿
프로젝트 힐사이드는 UE5로 건축 시각화 템플릿을 사용하여 제작되었습니다. 이 템플릿은 데이터스미스, 무비 렌더 큐 등 흔히 사용되는 플러그인을 비롯하여 하드웨어 가속 레이 트레이싱이 활성화되어 있어 건축 프로젝트를 시작할 때 유용합니다.
프로젝트 구성
전체 힐사이드 프로젝트는 4개의 메인 레벨과 레벨별 레벨 시퀀스로 구성되어 있습니다. 레벨과 시퀀스는 건축 시각화 업계에서 일반적으로 행해지는 것처럼 애니메이션과 스틸 이미지를 만드는 데 사용했습니다. 목표는 커스텀 엘리먼트와 세팅이 거의 필요하지 않도록 최대한 작업을 단순화하는 것이었습니다.
4개의 메인 레벨은 콘텐츠 > Hillside > Maps 폴더에 있습니다.
-
[1]LV_Teaser 는 기존의 시각화 애니메이션과 동일한 엘리먼트 및 툴을 사용하여 UE로 모션 그래픽을 구현한 추상적인 콘셉트의 애니메이션입니다.
-
[2]LV_Exterior 에는 엑스포 67(Expo 67), 프로젝트 힐사이드를 위해 설계된 마스터플랜 원안이 포함되어 있습니다.
-
[3]LV_Interior 에는 모쉐 사프디(Moshe Safdie)가 제작한 해비타트 67의 인테리어 유닛과 완공된 해비타트의 단순한 사진측량 메시가 포함되어 있습니다.
-
[4]LV_Credits 에는 로고 애니메이션과 크레딧이 있습니다.
4개의 메인 시퀀스는 콘텐츠 > Hillside > Movies 에 있습니다.
-
[1]LS_Teaser 는 연출된 이동 메시, 라이트, 바람, 파티클 시스템, 포스트 프로세스 이펙트가 적용된 단일 카메라 애니메이션입니다.
-
[2]LS_Exterior는 건물의 클로즈업 디테일 샷부터 몬트리올을 배경으로 한 건물 조망까지, 익스테리어 샷을 모아 놓은 컬렉션입니다. 라이팅, 분위기, 세트 드레싱, 라이트 비저빌리티는 시퀀서로 제어합니다. 이 시퀀스는 나나이트와 VSM을 사용하여 디테일이 뛰어난 대규모 건축 익스테리어를 보여줍니다.
-
[3]LS_Interior 는 인테리어 샷 컬렉션으로, 복잡한 지오메트리 인테리어와 라이팅 조건을 처리하는 루멘의 기능을 보여줍니다.
-
[4]LS_Credits 는 데이터스미스를 사용하여 UE로 임포트한 단순한 모션 그래픽 애니메이션입니다.
씬 구성
각 샷에는 자체 시퀀스가 있습니다. 따라서 조리개의 뎁스 오브 필드, 머티리얼 함수, 특정 오브젝트의 비저빌리티와 같은 카메라 세팅 및 애니메이션은 물론, 필요한 경우 각 샷의 라이팅 세팅까지 제어할 수 있었습니다. 대부분의 포스트 프로세스 세팅은 레벨 전체에 적용되는 하나의 포스트 프로세스 볼륨에 의해 제어됩니다. 하지만 일부 샷은 카메라 포스트 프로세스 이펙트에서 제어되는 몇 가지 커스텀 조정이 필요하며, 그런 다음 메인 포스트 프로세스 볼륨을 오버라이드해야 합니다. 예를 들어, 아래 샷의 경우에는 씬에서 글로벌 일루미네이션이 잘 보이도록 루멘 씬 거리를 디폴트보다 약간 더 뒤로 밀어야 했습니다. 이처럼 샷 단위로 퍼포먼스나 아트 디렉션에 영향을 미쳤을 가능성이 있는 세팅만 조정했습니다.
시퀀서 내 시퀀스 예시. 이미지를 클릭하면 최대 크기로 볼 수 있습니다.
그 다음, 모든 샷 시퀀스를 카메라 컷 마스터 시퀀스로 컴파일하고 여름, 봄, 가을 계절별로 샷을 그룹화했습니다. 이 방식으로 각 샷이나 샷 그룹별로 비, 사람, 비히클의 비저빌리티와 같은 VFX를 편집하고 관리하기 위한 단순명료한 구조를 만들 수 있었습니다.
무비 렌더 큐로 시퀀스 렌더링하기
힐사이드의 최종 비디오와 이미지는 무비 렌더 큐 (Movie Render Queue, MRQ)를 사용하여 시퀀서에서 렌더링했습니다. 따라서 모든 단방향 콘텐츠를 한곳에서 관리하고 제작할 수 있었습니다.
무비 렌더 큐에서 시퀀스를 로드하려면 다음 단계를 따릅니다.
-
무비 렌더 큐 플러그인을 활성화합니다. 이 작업을 완료하는 데 추가로 도움이 필요하다면 플러그인으로 작업하기를 참조하세요,
-
플러그인이 활성화되면 메인 메뉴에서 창(Window) > 시네마틱(Cinematics) > 무비 렌더 큐(Movie Render Queue) 로 이동하여 무비 렌더 큐를 엽니다.
-
+렌더(+Render) 버튼을 클릭하고 로드할 시퀀스를 선택하여 로드합니다.
시퀀스가 MRQ로 로드되면 각 시퀀스에 사전 정의된 렌더 세팅을 할당할 수 있습니다. 이전에 저장한 렌더 큐를 로드할 수도 있습니다. 이렇게 하면 렌더링하고 싶을 때마다 다수의 렌더 세팅을 저장할 필요 없이 샷이나 시퀀스별 디폴트 렌더 세팅을 수정하고 커스텀 세팅을 유지할 수 있습니다.
예시에서는 콘텐츠 > Cinematics에 위치한 MRQ_Hillside_BaseConfigPreset 에 디폴트 세팅을 저장했습니다. 씬 내부의 모든 룩을 개발하기 위한 시작점으로 하나의 기본 포스트 프로세스 볼륨을 사용하는 것과 마찬가지로, 이 베이스 환경설정 역시 힐사이드의 전체 샷 가운데 95%에 적용됩니다. 그런 다음 렌더링하고 싶은 대상에 따라 명명한 렌더 큐를 저장했습니다. 예를 들어, 스틸 이미지를 래스터 모드로만 렌더링하고 싶은 경우 CVar 추가, 이미지 크기 지정 등 몇 가지 커스터마이제이션을 적용하여 MRQ 환경설정을 저장하면 됩니다.
씬이 복잡하기 때문에 LV_Teaser 의 경우 버추얼 섀도에 더 많은 메모리 리소스를 사용해야 하므로 CVar r.Shadow.Virtual.MaxPhysicalPages 12000
을 추가했습니다. 이 세팅에 대한 UE의 디폴트값은 4000입니다. 사용 중인 GPU와 가용 메모리에 따라 더 높은 값을 사용할 수 있습니다.
이 프로젝트에는 애니메이션, 스틸 래스터 및 스틸 패스 트레이스드에 대해 저장된 프리셋이 포함되어 있지만, 이 프리셋은 어디까지나 작업 내용을 한곳에서 확인하기 위한 시작점일 뿐입니다. 프리셋을 사용하면 테스트 렌더, 초안 렌더, 최종 렌더 등 다양한 씬과 퀄리티 레벨에 대한 세팅을 손쉽게 반복작업할 수 있습니다.

MRQ에서 베이스 환경설정 프리셋으로 사용한 CVar 목록
무비 렌더 큐에 대한 자세한 정보는 언리얼 엔진 문서의 무비 렌더 큐 섹션을 참조하세요.
로드가 모두 완료되었다면 다음 옵션 중 하나를 사용하여 무비 렌더 큐 창에 시퀀스를 렌더링할 수 있습니다.
- 렌더(로컬)(Render (Local)): 엔진 실행 중에 렌더링하려는 경우 클릭합니다.
- 렌더(원격)(Render (Remote)): 엔진의 헤드리스 인스턴스를 열어 렌더링 작업을 실행하려는 경우 클릭합니다. 이 옵션은 열려 있는 엔진을 동시에 처리하기에 GPU의 VRAM이 충분하지 않을 때 유용합니다.
MRQ로 스틸 렌더링하기
모든 스틸 카메라 레벨 시퀀스는 Engine > Plugins > MovieRender Queue Content > Editor > Stills 에 위치한 스틸 이미지 렌더링 툴을 사용하여 생성되었습니다. 카메라를 배치했다면 이 위젯을 실행할 수 있으며, 위젯이 자동으로 적절한 시퀀스를 생성하여 이미지를 일괄 렌더링합니다. 또한, 각 시퀀스별로 액터의 세트 드레싱 비저빌리티를 커스터마이징하고, 라이팅을 변경하고, 포그나 포스트 프로세스 세팅 등 환경적인 특성을 수정할 수 있습니다.
애니메이션 시퀀스와 마찬가지로 필요한 요소를 MRQ로 로드하고, 콘텐츠 > Cinematics 에서 래스터나 패스 트레이서에 맞는 올바른 렌더 프리셋을 선택한 뒤 렌더(Render) 를 클릭하면 됩니다. 렌더링한 모든 스틸 시퀀스는 콘텐츠 > Hillside > Renders 에서 확인할 수 있습니다.
초고해상도 이미지의 경우 이미지를 작은 청크로 나누어 메모리를 절약하는 MRQ의 고해상도(High Resolution) 기능을 사용할 수 있습니다. MRQ_Hillside_Ext_StillRaster 프리셋은 2개의 타일을 사용하여 타깃 GPU의 VRAM이 부족할 일 없이 6000x6000 렌더를 안정적으로 수용합니다.
루멘 vs 패스 트레이서
루멘의 가장 큰 장점 중 하나는 속도와 정확성입니다. 이 프로젝트에는 몇몇 패스 트레이스드 이미지가 포함되어 있습니다. 모두 동일한 머티리얼, 라이팅, 카메라 세팅을 사용하되 차이점을 확인할 수 있도록 MRQ에서 렌더링만 래스터 방식에서 패스 트레이스드 방식으로 전환하였습니다. 이미지를 렌더링하는 방식은 하드웨어와 씬 복잡도에 따라 크게 좌우되므로 잘 결정해야 합니다. 여기서는 속도가 훨씬 빠르면서 충실도 역시 매우 높은 래스터 방식으로 프로젝트 전체를 렌더링했습니다.
아래에서 패스 트레이서와 루멘으로 렌더링한 야외 샷을 확인할 수 있습니다.


패스 트레이서와 루멘으로 렌더링한 실내 샷을 비교한 것입니다.


라이팅 및 레벨 관리
서브레벨
힐사이드 비디오에는 다양한 계절과 시간대를 볼 수 있는 여러 라이팅 및 날씨 시나리오가 포함되어 있습니다. 날씨나 시간대와 같은 조건을 효과적으로 제어하고 토글할 수 있도록 태양 및 스카이, 볼류메트릭 클라우드, 익스포넨셜 하이트 포그가 포함된 단순한 디폴트 라이팅 레벨을 만들었습니다. 그리고 이 디폴트 레벨을 바탕으로 다양한 시간대, 컬러, 강도, 클라우드, 포그 베리에이션을 사용한 사본을 생성했습니다. 사본은 메인 레벨로 로드하여 제어할 수 있습니다.
모든 라이팅 서브레벨은 LV_Exterior 퍼시스턴트 레벨에 존재하며, 레벨 패널이나 시퀀서를 통해 언제든 하나의 서브레벨만 표시됩니다. 이론적으로는 시퀀서 내에서 각 액터의 모든 라이팅과 룩 개발을 관리할 수 있지만, 서브레벨을 사용하면 샷마다 조건을 재생성할 필요 없이 여러 번 재사용할 수 있습니다.
라이팅 레벨 비저빌리티. 하나만 표시되고 다른 하나는 숨겨져 있습니다. 이미지를 클릭하면 최대 크기로 볼 수 있습니다.
루멘은 패스 트레이서와 달리 한 번에 256개의 라이트만 지원하는데, 이 프로젝트에는 야간 샷에서 보이는 가로등을 비롯하여 수많은 인공 광원이 있었습니다. 이 한계를 극복하기 위해 모든 인공 라이팅을 현지화된 그룹으로 나누고, 다양한 환경 라이팅 조건을 로드 및 언로드한 방식과 동일하게 시퀀서에서 샷별로 로드할 수 있도록 했습니다.
야간 라이트 비저빌리티. 이미지를 클릭하면 최대 크기로 볼 수 있습니다.
레벨 인스턴스
프로젝트를 여러 요소로 나눌 수 있도록 많은 레벨 인스턴스를 사용했습니다. 덕분에 룩 개발 작업이 이루어지던 메인 레벨에서의 소스 컨트롤 액세스를 차단하지 않고도 여러 아티스트가 각자의 모델이나 작업을 수행할 수 있었습니다.
아래 예시는 힐사이드의 모든 레벨 인스턴스 구조와 그룹화 방식을 나타낸 것입니다.
이 워크플로의 또 다른 장점은 편집(Edit) 버튼을 클릭하여 레벨 인스턴스를 빠르게 수정 또는 조정하거나 레벨로 직접 이동한 뒤 레벨 인스턴스를 열고 조정할 수 있기 때문에 메인 레벨의 시각적 노이즈를 처리할 필요가 없다는 점입니다.
각 레벨에는 아래 이미지와 같이 드로 콜을 최소화하고 퍼포먼스를 높여주는 ISM이나 HISM이 포함되어 있습니다.



슬라이더를 사용하여 여러 이미지를 탐색하세요.
CAD 데이터로 작업하기
모델 생성 및 임포트
사프디 아키텍츠는 Rhino로 힐사이드 모델을 디자인했고, 이 과정에서 그룹화, 명명 방식, 메타데이터를 깔끔하고 체계적으로 유지하기 위해 노력했습니다. 덕분에 작업 후반에 최종 렌더를 위해 씬을 정리하고 최적화나 데이터 프렙을 자동화하는 데 있어 활용성과 유연성을 극대화할 수 있었습니다.
모델은 씬 계층구조 전체를 그대로 유지하며 기본 머티리얼과 메타데이터를 모두 가져올 수 있는 [데이터스미스]working-with-content\datasmith)를 통해 Rhino에서 익스포트하여 언리얼 엔진으로 임포트했습니다.
디폴트 씬은 잘 작동했습니다. 하지만 씬의 모듈식 디자인은 창문 수천 개를 비롯한 수만 개의 작은 조각으로 이루어져 있었고, 각 조각은 다시 여러 메시로 구성되어 있었습니다.
퍼포먼스 최적화를 위해서는 드로 콜의 수를 줄여야 했습니다. 먼저 건물 모델을 큰 청크로 접어서 압축할 수 있는 커스텀 스크립트 세트를 만들었습니다. 결과적으로 콘텐츠 브라우저가 체계적으로 정리되고 아웃라이너가 깔끔해졌을 뿐 아니라 드로 콜도 적당히 낮출 수 있었습니다. 그리고 이렇게 얻게 된 모듈 조각을 한층 최적화하기 위해 다른 스크립트를 사용해 인스턴스드 스태틱 메시와 계층형 인스턴스드 스태틱 메시로 변환하여 렌더링 프로세스를 최대한 간소화했습니다. 나나이트 역시 드로 콜과 메시 렌더링 비용 측면에서 큰 도움이 되었습니다. 이러한 식의 모델 구성은 예비 메시만 렌더링할 수 있는 플랫폼과 디바이스의 퍼포먼스를 최적화할 수 있다는 또 다른 장점이 있습니다.
시각적 충실도를 한층 높이기 위해 최적화가 완료된 이후 추가 모델링 작업도 진행했습니다. 모듈 조각을 에디터에서 익스포트하고, 원본 CAD 드로잉이라면 필요하지 않았을 챔퍼와 디테일을 3ds Max에 추가했습니다. 그리고 수정한 엘리먼트를 제자리로 리임포트했습니다.
앞서 설명한 최적화 과정을 통해 이 건물 컴포넌트의 스태틱 메시를 579개에서 18개로 줄였습니다. 이미지를 클릭하면 최대 크기로 볼 수 있습니다.
에디터 스크립트
계층구조 병합 및 관리

Hillside Utilities 위젯
콘텐츠 > Hillside > Blueprints 에 있는 Hillside _Utilities_v5 에디터 유틸리티 위젯은 임포트한 지오메트리의 최적화 속도를 높이기 위해 개발된 커스텀 툴키트입니다. 이 툴은 구조 내 모든 모듈 조각에 수많은 중첩 메시를 사용하는 Rhino 모델의 '블록' 패러다임 작업을 위해 설계되었습니다. 이 툴을 사용하여 그룹을 손쉽게 접고 씬 전체의 신규 메시를 다시 인스턴싱하여 아웃라이너 체계뿐만 아니라 퍼포먼스 또한 향상할 수 있었습니다.
HISM

메시 투 HISM 툴
메시 투 HISM(Mesh to HISM) 툴은 힐사이드에 있는 대량의 스태틱 메시 인스턴스를 관리하기 위해 만들어진 다용도 커스텀 에디터 유틸리티 위젯입니다. 이 위젯을 사용하면 선택한 스태틱 메시를 인스턴스 컴포넌트(ISM 또는 HISM)로 자동 압축하여 에디터 오버헤드를 줄이고 렌더링 퍼포먼스를 높일 수 있습니다.
여기서는 서브오브젝트 데이터 서브시스템을 사용하여 에디터 내 액터 컴포넌트를 동적으로 생성하고 수정했습니다. 인스턴싱 툴과 더불어, 선택한 모든 액터에 대해 음의 스케일링을 수정하고, 필요에 따라 회전과 스케일을 랜덤으로 설정하여 자연스럽고 다양한 폴리지 및 세트 드레싱을 연출해 주는 편리한 버튼도 몇 개 추가했습니다. 또한, 불투명 또는 마스크드 머티리얼을 사용하는 나나이트용 트라이앵글과 반투명 머티리얼을 사용하는 나나이트 미지원 트라이앵글을 분리하여 나나이트를 위해 스태틱 메시 에셋을 분할하는 기능도 추가했습니다.


렌더링 최적화
나나이트 최적화
이 프로젝트에서는 반투명 머티리얼을 사용한 표면, 워터 바디, 랜드스케이프를 제외하고 가능한 모든 스태틱 메시에 나나이트를 활성화했습니다. 개별 에셋에 폴리곤이나 머티리얼 수가 많지는 않았지만, 나나이트의 클러스터 렌더링 접근법을 사용하고 버추얼 섀도 맵과 루멘을 탄탄히 지원하여 전반적인 퍼포먼스가 향상되었습니다.
(w:700)
검사용 뷰 모드 - 나나이트 시각화 | 마스크, 초록색 = 나나이트, 빨간색 = 비나나이트
나나이트 + 월드 포지션 오프셋(WPO)
힐사이드의 모든 폴리지 에셋은 바람에 흔들리며 씬에 생동감을 줄 수 있도록 머티리얼에 월드 포지션 오프셋(World Position Offset, WPO)을 사용했습니다. 나나이트와 VSM에 맞춰 퍼포먼스를 최적화할 수 있도록 씬에서 WPO를 사용하는 방식에 특히 유의했습니다.
또한, 콘솔 변수 r.OptimizedWPO=1
를 활성화하고 DefaultEngine.ini
환경설정 파일에 저장하여, 디테일 패널의 월드 포지션 오프셋 평가(Evaluate World Position Offset) 옵션이 활성화되어 있지 않은 나나이트 메시에 대한 WPO 평가를 비활성화했습니다. 에디터의 퍼포먼스 절약을 위해 폴리지에는 이 설정을 껐습니다.
최종 무비 렌더에서는 무비 렌더 큐에서 OptimizedWPO
변수를 비활성화하여 바람 WPO 이펙트가 폴리지에 나타나도록 했습니다. 이와 더불어 카메라와 가장 가까운 폴리지 에셋에만 이 이펙트가 적용되도록 World Position Offset Disable Distance
를 사용하여 WPO 평가를 위한 컬링 디스턴스를 설정했습니다.

검사용 뷰 모드 - 나나이트 시각화 | WPO 평가, 빨간색 = WPO 꺼짐 | 초록색 = WPO 켜짐
액터 모빌리티 및 VSM
모든 스태틱 메시 액터의 모빌리티는 VSM 인밸리데이션을 방지하기 위해 프로젝트 내 기능을 바탕으로 섬세하게 설정했습니다. 사실상 거의 모든 액터가 스태틱으로 설정되었습니다.
엔진 퀄리티 세팅
다른 프로젝트와 마찬가지로 힐사이드 역시 최대의 퀄리티와 안정적인 퍼포먼스 사이에서 균형을 맞추는 것이 중요했습니다. 목표로 한 결과물은 기본적으로 단방향 비디오였지만, 개발자들은 여전히 씬을 편안하게 탐색하길 원했습니다. 섬세한 렌더 세팅 컨트롤은 다른 결과물을 만들 수 있는 새로운 가능성의 문을 열어 주기도 했습니다.
타깃 머신에서 최대 30FPS의 퍼포먼스를 달성하는 데 도움이 되었던 이번 프로젝트의 DefaultScalability.ini 파일 변경사항을 아래에서 확인할 수 있습니다.
폴리지 컬 디스턴스 (foliage.CullDistanceScale)
는 폴리지 타입 에셋에 설정된 최소/최대 컬링 거리에 대한 배수입니다. 프로젝트에는 최종 시네마틱이 아니면 전체 렌더링이 굳이 필요하지 않은 잔디와 폴리지가 꽤 많았기 때문에 필요에 따라 컬 디스턴스 변수를 다음과 같이 조정했습니다.
-
낮음 -
foliage.CullDistanceScale=0.05
-
중간 -
foliage.CullDistanceScale=0.2
-
높음 -
foliage.CullDistanceScale=0.3
-
에픽 -
foliage.CullDistanceScale=0.5
-
시네마틱 -
foliage.CullDistanceScale=1.0
이러한 폴리지 인스턴스는 섀도 뎁스에도 큰 비용을 유발했기 때문에 ‘에픽’ 엔진 퀄리티 레벨의 경우 버추얼 섀도 맵 해상도 를 낮췄습니다.
-
원본:
r.Shadow.Virtual.ResolutionLodBiasDirectional=-1.5
-
힐사이드:
r.Shadow.Virtual.ResolutionLodBiasDirectional=-0.5
각 프레임의 렌더링 비용은 특히 루멘 GI와 루멘 리플렉션에 있어 스크린 해상도에 따라 크게 달라졌습니다. 퍼포먼스 최적화를 위해 디폴트 스크린 퍼센티지 값을 줄이고 템포럴 슈퍼 해상도를 사용하여 이미지 퀄리티 손실을 메우기로 했습니다.
-
원본 -
PerfIndexValues_ResolutionQuality="50 71 87 100 100"
-
낮음 - 50%
-
중간 - 71%
-
높음 - 87%
-
에픽 - 100%
-
시네마틱 - 100%
-
-
힐사이드 -
PerfIndexValues_ResolutionQuality="50 60 68 75 100"
-
낮음 - 50%
-
중간 - 60%
-
높음 - 68%
-
에픽 - 75%
-
시네마틱 - 100%
-
선택한 엔진 퀄리티 레벨에 따라 비용이 많이 드는 기능을 비활성할 수 있는 머티리얼 퀄리티 스위치도 모든 메인 머티리얼에 추가했습니다.

고급 머티리얼 기법
볼류메트릭 클라우드
여러 계절, 시간대, 카메라 각도에 따라 매우 다양한, 아름다우면서도 사실적인 하늘을 만들기 위해 볼류메트릭 클라우드에 사용되는 표준 머티리얼을 크게 향상했습니다. 하늘에는 HDRI를 사용하지 않았습니다.

커스텀 볼류메트릭 클라우드 머티리얼을 사용하면 패킹된 텍스처 맵을 통해 손쉽게 아트 디렉션을 내릴 수 있는 4가지 클라우드 레이어(R = 층적운, G = 고층운, B = 권층운, A = 난층운)에 대한 세팅을 설정할 수 있습니다. 단순한 WindVector 파라미터, 폭풍우(Stormy) 뿐만 아니라 하늘 전체를 회전하고, 특정 영역에 마스크를 적용하고, 커버리지를 미세조정할 수 있는 다양한 옵션이 있습니다. 구름 속 번개를 활성화하여 폭풍우 치는 날씨를 연출할 수도 있습니다. 여러 샷에 걸쳐 하늘 등의 머티리얼을 글로벌 수준으로 함께 수정할 수 있는 Hillside_MaterialParameters 0머티리얼 - 파라미터 컬렉션도 활용했습니다.
이 머티리얼은 자신의 프로젝트로 이주시켜 커스터마이징할 수 있으며, 콘텐츠 > Hillside > Effects > Clouds > Materials > M_VolumetricCloud_Hillside 에서 찾을 수 있습니다.

월드 단위의 전반적인 레이아웃 텍스처 스케일을 손쉽게 설정할 수 있습니다.

커버리지와 밀도는 볼륨 셰이더에 영향을 미칩니다.
패럴랙스 오클루전 매핑을 사용한 나무 데크 바닥
야외 데크에는 의사 랜덤 마스크 생성 기법과 인스턴스드 스태틱 메시별 랜덤 값을 사용하여 모든 나무판자에 자연스러운 베리에이션을 만들어내는 머티리얼이 사용되었습니다. 두 가지를 모두 사용하면 색조, 색상, 채도 등의 이펙트를 판자별로, 인스턴스별로 구동할 때 타일링 반복을 줄일 수 있습니다.

판자 사이에 뎁스와 오클루전을 부여하기 위해 패럴랙스 오클루전 매핑(Parallax Occlusion Mapping, POM)도 사용했습니다. 켜켜이 쌓인 먼지, 얼룩, 웅덩이, 낙엽이 원하는 룩을 완성하는 데 도움이 됩니다.

콘크리트
해비타트 67은 대량의 콘크리트로 지어졌기 때문에 다용도의 콘크리트 셰이더를 만드는 데 많은 노력을 기울였습니다. 모든 각도에서 투영시키고 타일링을 제어하기 위해 커스텀 텍스처가 많이 사용된 머티리얼 함수와 TriPlanar UV를 사용했습니다. 또한, 인스턴스별 랜덤 기능으로 컬러와 러프니스에 베리에이션을 주었습니다. 실제로 프로젝트에는 환경에 따라 원하는 룩을 연출하기 위해 활성화할 수 있는 많은 기능이 포함되어 있습니다. 벽에는 때와 물자국을 만들 수 있고, 연안 근처에는 습기와 조류를 나타낼 수 있으며, 발코니 위에는 조약돌을 추가할 수 있습니다. 그 외에도 균열이나 정교한 디테일, 낙엽 등이 있습니다.
수면 주위로 조류, 물자국, 균열을 추가할 수 있는 연안 기능. 이미지를 클릭하면 최대 크기로 볼 수 있습니다.
그래스
넓은 잔디밭을 연출하기 위해 텍스처를 많이 사용하여 타일링을 방지했습니다. 소규모와 대규모 베리에이션, 파편과 낙엽은 환경을 풍부하게 만들고 타일링을 한층 세분화해 줍니다. 디테일한 스페큘러와 러프니스의 베리에이션으로 사실성을 더하고, 텍스처 컴포지팅을 활용한 러프니스 맵으로 거리에 따른 러프니스 강도를 조절할 수도 있습니다. 지표각에서 대비를 감쇠하는 퍼즈(fuzz) 기법도 사용했습니다.
잔디와 나무 뿌리를 블렌딩할 때는 풀잎과 흙을 정교하게 블렌딩해 주는 하이트 블렌드(height blend) 기법을 사용했습니다. 그리고 각 뿌리의 최종 블렌딩을 구동하고 베리에이션을 추가하는 디스턴스 필드로 마스크를 생성했습니다. 마지막으로 위에 낙엽을 얹어 연출을 마무리했습니다.
날씨 매니저 시스템
힐사이드의 수많은 머티리얼과 시스템에는 날씨와 계절 이펙트가 적용되어 있습니다. 따라서 모든 이펙트를 한곳에서 관리할 수 있는 커스텀 에디터 유틸리티를 만들었습니다. 이 유틸리티는 콘텐츠 > Hillside > WeatherManager 에서 WeatherControl_Editor 블루프린트를 더블클릭하여 열 수 있습니다.
블루프린트를 사용하려면 LV_Exterior 레벨에 추가해야 합니다. 파라미터는 에디터의 디테일 패널에서 직접 편집할 수 있습니다. 또는 생성되는 커스텀 위젯으로 에디터에서 플레이(play-in-Editor, PIE) 모드에서 세팅을 미리 볼 수 있습니다.
WeatherControl_Editor 블루프린트에는 다음과 같은 파라미터가 사용됩니다.
-
가을 스케일(Autumn scale): 잎이 무성한 가장 가까운 나무의 컬러를 업데이트하고 낙엽 파티클 시스템을 추가합니다(낙엽 파티클 시스템은 PIE 전용).
-
클라우드 파라미터(Cloud Parameters): 여러 컨트롤을 사용하여 클라우드의 시각적 요소를 업데이트합니다.
-
젖은 표면 스케일(Wet Surface Scale): 아스팔트, 콘크리트 등 일부 표면의 습기를 업데이트합니다.
-
태양 스카이(시간)(Sun Sky (time of day)): 월, 일, 시간, 태양시를 업데이트합니다.
-
인테리어 매핑(Interior Mapping): 창문 인테리어 매핑을 토글합니다.
-
윈드 활성화(Enable Wind): 폴리지 머티리얼의 윈드를 토글합니다(리얼타임 퍼포먼스에 영향을 미칠 수 있음).
창문에 흐르는 비
비를 연출할 때는 유리 머티리얼 내에서 사용할 렌더 타깃에 빗줄기와 물방울을 생성하는 프로시저럴 기법을 사용했습니다. 이를 통해 빗줄기의 양을 조절하거나 물방울을 병합하는 등, 비를 적절하게 미세조정했습니다. 물방울에는 보다 사실적인 룩을 연출하기 위해 상하 반전 이펙트를 만들어주는 리프랙션을 추가했습니다.

연못과 웅덩이
흡수, 스캐터링, 애니소트로피 계산의 복잡도를 낮추는 단일 레이어 물 셰이딩 모델을 사용하면 포토리얼한 물을 손쉽게 만들 수 있습니다. 머티리얼에는 흡수와 스캐터링 외에도 돌풍, 리프랙션, 부엽, 굴절 반사가 지원됩니다.
UE5.1부터 단일 레이어 물 셰이딩 모델에 패스 트레이싱을 지원합니다.
강
세인트로렌스강은 워터(Water) 플러그인으로 만들었습니다. 먼저 강 머티리얼을 베이스로 사용하여 약간의 거스너(Gerstner) 웨이브와 아티스트 친화적인 파라미터가 포함된 커스텀 셰이더를 만들었습니다. 강 본류 영역과 전반적인 플로에는 큰 스플라인 기반 워터 바디를 사용했고, 필요에 따라 섬 주변에 다른 스플라인 기반 워터 바디를 여러 개 추가하여 다양한 플로 방향, 플로 속도, 머티리얼 베리에이션을 정의했습니다.
스플라인으로 플로 구성하기
워터 바디의 뎁스는 작은 런타임 버추얼 텍스처를 사용하여 캡처했습니다. 덕분에 실제 랜드스케이프의 뎁스에는 영향을 미치지 않고 가짜 뎁스에 프리미티브를 사용하여 빠른 맵 반복작업으로 웨이브 진폭을 구동할 수 있었습니다. 이 방식을 사용하면 부둣가의 물은 비교적 잔잔하고 강 중심부의 물살은 거칠어 보이는 효과를 낼 수 있습니다. 연안에는 디스턴스 필드 기법으로 물거품도 추가했습니다.
패스 트레이싱에서 WPO로 물을 렌더링하려면 r.RayTracing.Geometry.Water 1
을 설정하여 레이 트레이싱에서 물을 활성화해야 합니다.
바위와 연안
연안의 습기를 연출하기 위해 젖은 바위 머티리얼과 함께 건조함, 습함, 조류라는 3가지 상태를 지원하는 월드 스페이스 블렌드를 생성했습니다. 그리고 연안의 높이와 블렌드 감쇠를 지정하여 원하는 룩을 얻었습니다.
가짜 인테리어
도시 샘플 건물에서 큐브맵 인테리어 머티리얼을 가져와 힐사이드에 맞게 단순화했습니다. 힐사이드에 적합한 필수 내부 공간과 가구 스타일을 만들기 위해 블루프린트로 만든 커스텀 시스템을 사용하여 각 3D 방의 큐브맵을 캡처한 다음, 가구의 컬러와 뎁스를 추가 레이어로 더했습니다. 이 과정에는 트윈모션에서 이주한 에셋과 머티리얼을 사용했습니다.

이렇게 만들어진 맵을 텍스처 배열 파일에 추가하고, Per Instance Random 노드를 사용하여 각 방과 가구를 창문 머티리얼에서 랜덤으로 섞었습니다. 결과적으로 배열에 베리언트를 더 추가하여 라이팅 액센트, 블라인드, 커튼, 라이트 강도, 온도 등 모든 파라미터에 걸쳐 매우 다양하고 랜덤한 결과를 만들어낼 수 있었습니다.
심지어 90도 모서리의 창문도 가짜 인테리어였습니다. 큐브맵 캡처 툴로 흑백 마스크를 캡처한 뒤 소품 맵이 아닌 방 큐브맵에만 영향을 미치는 별도의 머티리얼 인스턴스에서 구성하는 방식으로 구현한 것입니다.
씬에 생동감 부여하기
고퀄리티 반투명 리플렉션
힐사이드에는 유리와 물이 많기 때문에 표면 리플렉션을 잘 살리는 것이 중요했습니다. 따라서 포스트 프로세스 볼륨의 루멘 세팅에서 고퀄리티 반투명 리플렉션 을 활성화했습니다.


나무와 소품
월드는 가능한 한 에픽 에코시스템 전반의 기존 콘텐츠를 사용하여 채웠습니다. 트리 에셋은 대부분 트윈모션에서 이주했거나 퀵셀에서 임포트했고, 인테리어 및 익스테리어 씬의 다양한 소품은 트윈모션에서 가져왔습니다. 일부 VFX와 비히클은 도시 샘플에서 이주한 것입니다. 이러한 에셋은 콘텐츠 > ExternalAssets 폴더에 정리되어 있습니다.
일부 트윈모션 나무는 언리얼 엔진에서 3ds Max로 익스포트하여 피벗 페인터로 작업한 덕분에 나뭇가지 계층구조에 걸쳐 충실도 높은 바람 시뮬레이션을 구현했습니다.


나이아가라 VFX
테크 아티스트들은 힐사이드의 사실성을 한층 높이고 시네마틱한 느낌을 살리고자 나이아가라로 다양한 특수 이펙트를 만들었습니다. 모든 나이아가라 시스템과 관련 에셋은 콘텐츠 > Hillside > Effects 에 그룹별로 정리되어 있습니다. 아래에서 일부 예시를 확인할 수 있습니다.

나이아가라의 메시 파티클로 만든 떨어지는 벚꽃 잎

나이아가라 플루이트 플러그인을 사용한 리얼타임 커피 스팀 플루이드 시뮬레이션

Houdini로 시뮬레이션하고 Alembic 파일에서 지오메트리 캐시로 임포트한 물거품 기능
비히클(Vehicle)
시퀀스에 등장하는 배경의 애니메이팅된 비히클은 도시 샘플 프로젝트에서 이주한 것으로 더 단순한 블루프린트로 축소하고 메시 수를 줄인 버전입니다. 도로를 채우고 비히클이 자동으로 주행하기 위해, 주어진 스플라인을 따라 주어진 밀도로 비히클 액터를 스폰하는 BP_SimpleTrafficGenerator 커스텀 블루프린트를 만들었습니다. 재생 또는 시뮬레이션하는 동안 커스텀 액터 컴포넌트 FollowSplineComponent 를 통해 비히클이 스플라인을 따라 주행합니다.

비히클은 재생 중에만 자동으로 움직이기 때문에 시퀀서 내에서는 애니메이션을 미리 보거나 미세조정하기가 쉽지 않았습니다. 샷별로 쉽게 스크럽하고 조작할 수 있는 애니메이션 시퀀스를 굽기 위해 테이크 레코더로 최대 100대의 비히클에 대해 약 20초 분량의 주행 게임플레이를 캡처한 뒤 서브시퀀스로 임베드했습니다.

원거리 이펙트
애트머스피어 및 라이팅 컨트롤 추가에는 원거리 포그와 빛나는 도시의 불빛을 가짜로 만들어주는 단순한 카드를 사용했습니다.

야간에 멀리 있는 건물의 창문 라이팅은 도시 샘플에서 이주한 머티리얼입니다.
또한, 원거리 오브젝트의 리플렉션을 정확하게 구현하고 건물의 먼 부분에 고퀄리티 섀도를 적용하기 위해 DefaultEngine.ini
파일에 r.RayTracing.Culling.Radius 80000
를 추가하여 리플렉션 거리를 디폴트 30,000cm보다 늘렸습니다.