Game Developers Conference 2015에서 공개된 언리얼 엔진 4로 만든 실시간 시네마틱 데모인 Kite Demo를 보신 분들이 계실 겁니다. 에픽 게임의 데모 중 처음으로 평화로운 분위기인지라 누구든지 가볍게 볼 수 있는데요.

 

 

이 데모는 16x16km의 방대한 오픈 월드를 무대로 삼았습니다. 여기에선 그걸 어떻게 만들었는지를 알아 보도록 하지요.

 

001.jpg

 

에픽 게임 일본 지사의 커뮤니티 매니저인 이마이 츠바사가 설명했습니다. 미국에선 오프라인 CG 제작 일을 했던 적도 있다네요. 덕분에 자신이 경험했던 것과 지식을 섞어서 해설을 진행했습니다.

 

 

디지털 사진으로 소재를 만들어내다

 

002.jpg

 

카이트 데모는 2015년 3월의 GDC 2015에서 공개하는 걸 목적으로 제작된 단기 프로젝트입니다. 2014년 11월에 제작이 시작됐기에 개발 기간은 3개월 정도. 할당된 인원은 10명이며 대부분이 게임 업계가 아니라 VFX 아티스트(오프라인 CG 제작 디자이너)라고 합니다.

 

003.jpg

 

16x16km의 광대한 공간을 실시간 CG로 구현하는 데 저런 조건이라면 너무 부족하지요. 그래서 어떤 지형을 만들 것인지를 정하는 로케이션 헌팅은 해당 장소를 방문하지 않고 가상으로 이루어졌습니다. 가상이라고 하면 그럴싸해 보이지만 그냥 구글 어스나 풍경 사진을 봤다는 소리죠.

 

004.jpg

 

그래서 스코틀랜드의 한 호수를 골랐습니다. 다음은 이 지역의 경관을 이룬 특징적인 자연물을 잡아야 하는데요.

 

005.jpg

 

이건 실제로 현지를 방문해 촬영한 사진을 보면서 특징을 잡아갔습니다.

 

006.jpg

 

이와 함께 수작업으로 텍스처를 디자인해야 할 소재를 촬영하는 작업도 동시에 진행했습니다.

 

007.jpg

 

여기서 한가지 큰 문제가 발생했습니다. 영국 스코틀랜드는 위도가 높고 겨울엔 일조 시간이 매우 짧다는 것. 그래서 소재를 촬영하는 데 쓸 수 있는 시간이 매우 한정됐다고 하네요. 그래서 비슷한 경치가 나오는 뉴질랜드에서도 사진을 찍어 경치를 합쳤다고 합니다.

 

008.jpg

 

촬영에 사용한 장비를 봅시다.

 

009.jpg

 

PL 필터는 표면 반사를 줄여줍니다.

 

010.jpg

 

대기의 산란을 줄여주고 반사광을 막아주지요.

 

011.jpg

 

촬영한 사진의 화이트 밸런스를 잡기 위해 컬러 체크를 썼습니다. 사진을 찍을 때의 빛이 계속 바뀌니까 나중에 색을 맞추기 위해 같이 촬영.

 

012.jpg

 

촬영에 사용한 렌즈의 화각은 50-70mm입니다.

 

013.jpg

 

광각 렌즈는 피사체가 옆으로 퍼지고 망원 렌즈는 세로로 길어지는지라 고른 선택이라네요.

 

014.jpg

 

센서 노이즈를 줄이기 위해 ISO는 100~125로 찍고,

 

015.jpg

 

조리개를 최대한 조여 빛망울을 죽였습니다. 물론 그렇게 하면 셔터 스피드 확보가 안되니 삼각대는 필수.

 

016.jpg

 

그렇게 해서 촬영된 사진입니다.

 

 

촬영한 사진을 참고해서 모델링한 식물입니다. 텍스처는 사진에서 따다 썼다네요.

 

 

여러 장의 디지털 사진으로 3D 모델링을 하는 포토 그래메트리 기술이란?

 

017.jpg

 

오프라인 CG에서 최근 사용되는 기술 중에는 포토 그래메트리라는 게 있습니다. 그려내려는 오브젝트를 모든 각도에서 촬영해 3D 모델 데이터로 반자동 생성하는 기술이지요.

 

이론적으로는 촬영된 사진을 일종의 동영상으로 간주하고, 연속된 사진 속에서 특징 부분이 움직이는 걸 감지, 그 운동 시차를 통해 3D 데이터를 구축해서 포인트 클라우드 기반 3D 모델링을 하는 것입니다.

 

운동 시차는 오브젝트를 둘러보면서 생기는 위치의 어긋남이기에, 삼각 측량법으로 입체감을 만들 수 있습니다. 포인트 클라우드는 입체 오브젝트를 폴리곤이 아닌 점의 집합체로 표현하는 방법이지요.

 

018.jpg

 

여기에서 포토 그래메트리에 사용한 장비를 소개하면서 경험과 함께 설명을 했습니다.

 

019.jpg

 

풀프레임 카메라를 필요로 합니다. 특히 이번 작업에선 캐논 EOS 5D Mark III를 썼는데요.

 

020.jpg

 

그 이유는 어안 렌즈를 이용한 Image Based Lighting (IBL)의 HDR 큐브 맵 소재 촬영을 같이 했기 때문이라고 합니다. 왼쪽의 시그마 렌즈를 썼지요.

 

021.jpg

 

풀프레임에 8mm 어안 렌즈를 찍으면 180도 화각의 사진이 나옵니다. APS-C 크롭 바디에서는 좌우가 짤린 부분이 나옵니다. 뭐 이건 센서보다는 렌즈의 화각 문제기도 하지만요.

 

022.jpg

 

IBL용 HDR 큐브맵은 어안 렌즈로 두번 찍어 360도를 찍어 만듭니다.

 

023.jpg

 

높이 6m의 대형 삼각대도 썼습니다. IBL HDR 큐브맵을 찍을 때는 위에서 내려다봐야 하는 경우도 있거든요. 물론 그럼 뷰파인더나 화면을 볼 수 없으니 무선 뷰파인더 시스템도 썼습니다.

 

024.jpg

 

전동 파노라마 시스템도 필요합니다. 리모콘으로 카메라를 회전시켜 파노라마를 찍을 수 있는데요.

 

025.jpg

 

그냥 회전하는 게 아니라 렌즈의 초점을 고려해 일주 사진의 중심을 유지하면서 회전하는 게 특징입니다. 이걸 수작업으로 하기란 매우 어렵지요.

 

026.jpg

 

HDR 이미지를 만들려면 서로 다른 노출값으로 여러장을 촬영하는 브라켓팅이 필요합니다. 한 장면을 4단계로 나눠 촬영하는데, 이 때도 파노라마 삼각대가 유용합니다. 이 4장의 사진으로 rGB 각각 32비트 총 96비트의 HDR 큐브맵을 생성, 실제 영상과 게임 큐브맵에선 RGB 16비트로 조절됩니다.

 

027.jpg

 

포토 그래메트리로 만들어 내려는 피사체가 어떤 조건의 조명에서 촬영됐는지를 기록하는 컬러 체커와 회색 공입니다.

 

028.jpg

 

그걸 피사체와 같이 촬영하는 것이 중요합니다. 회색 공은 주변 풍경을 그대로 비추는 것으로 빛의 강약을 나타내는 데 씁니다.

 

029.jpg

 

나중에 포토 그래메트리 과정에서 사진의 조명 효과를 무시하는 정보로 활용합니다.

 

030.jpg

 

모델링 오브젝트의 사진은 모든 각도에서 촬영합니다. 특징점을 추적해서 모델링해야하니 사진마다 30% 정도는 서로 겹치는 부분이 있어야 합니다.

 

031.jpg

 

7일 동안 28000장의 사진을 찍었는데 사진 한장이 5700만 화소니 용량은 1TB가 넘습니다. 이걸로 246개의 3D 모델 데이터를 만듭니다.

 

032.jpg

 

이렇게 촬영한 사진으로 3D 모델을 만드는 데 사용한 포토 그래메트리 툴은 Agisoft의 포토스캔입니다. http://www.oakcorp.net/photoscan/

 

오토데스크의 123D Catch도 무료로 사용 가능. http://www.123dapp.com/catch

 

033.jpg

 

이렇게 만들어진 3D 모델은 오브젝트의 크기에 따라 다르지만 700~2000만 폴리곤 정도 됩니다. 동시에 텍스처도 만들 수 있는데 16384x16384 텍셀 정도 됩니다. 이건 5700만 화소 사진 열장 정도로 만든 것이네요.

 

 

그렇게 반자동 모델링 과정으로 만들어 낸 3D 모델입니다.

 

034.jpg

 

데이터 프로세스 과정을 통해 포인트 클라우드를 만들었습니다. 용량이 엄청날 수밖에 없지요. 그래서 티가 나지 않을 정도로 단순화시키는 후처리 과정이 들어갑니다.

 

폴리곤을 줄이기 위해 미세한 요철 표현은 폴리곤이 아닌 노말 맵(범프 맵) 표현으로 바꾸며, 포토 그레매트리만으로 완벽한 3D 모델이 나오지 않기도 하니까 수작업으로 수정할 필요가 있습니다. 그래서 자동이 아닌 반자동 모델링인 것입니다.

 

035.jpg

 

다른 문제도 있습니다. 자연 풍경을 찍은 사진이다보니 태양의 빛이 그대로 들어오게 되는데요.

 

036.jpg

 

햇빛을 직접 받은 부분도 있고.

 

037.jpg

 

반사광을 받은 부분도 있습니다.

 

038.jpg

 

그러다보니 그림자도 생깁니다. 즉 불필요한 조명 효과가 들어가는 것이지요. 그래서 이걸 제거해야 합니다.

 

039.jpg

 

여기서 사용하는 것이 아까의 그레이 볼과 IBL용 HDR 큐브맵입니다. 우선 포토 그래메트리에서 만든 3D 모델을 텍스처가 씌워지지 않은 폴리곤 상태에서 조명으로 비춥니다. 조명은 미러 볼이나 그레이 볼의 촬영 정보를 사용해서 만든 IBL용 HDR 큐브맵의 방향에 맞춰 비춥니다.

 

040.jpg

 

그리고 여기에 포토 그래메트리에서 만든 텍스처 데이터를 씌우면 오브젝트 본래의 질감만 남게 됩니다. 여기에선 오토데스크의 마야에 전용 스크립트를 만들어서 이 과정을 반 자동화했다고 하네요.

 

 

광대한 지형은 NASA의 지형 정보로 생성

 

043.jpg

 

그럼 이렇게 광대한 공간은 또 어떻게 만들었을까요.

 

044.jpg

 

노이즈 함수를 이용해서 만들 수도 있지만 여기에선 나사가 제공하는 지형 정보를 활용했습니다. 다만 이 데이터는 지구의 동그란 모양에 맞춰져 있거나, 하나의 지역이 여러 파일로 나뉘어져 있기도 한데요.

 

045.jpg

 

이런 원시 데이터의 특이성을 성형하는 무료 소프트웨어로 VTBuilder와 http://vterrain.org/Doc/VTBuilder/overview.html

 

046.jpg

 

World Machine를 이용했습니다. http://www.world-machine.com/

 

047.jpg

 

나사의 지형 정보는 위성 궤도에서 찍은 것이라 윗부분에 가려진 지형은 나오지 않습니다. 그런 부분은 수작업으로 절벽과 계곡을 더했다고 하네요. 작업을 하다보니 스코틀랜드에서 찍은 지형에 뉴질랜드에서 찍은 소재를 활용하는 게 아니라, 뉴질랜드의 소재가 더 늘어나게 됐지만.

 

048.jpg

 

또 위성 궤도에서 찍은 이미지다보니 세밀한 정보는 없습니다. 그래서 노이즈 함수를 사용해서 디테일을 늘렸습니다.

 

 

넓은 지형에 3D 오브젝트를 배치하는 방법

 

049.jpg

 

이렇게 만든 넓은 지형 포토 그래메트리에 오브젝트를 배치해야 합니다. 이때 각각의 오브젝트 비율을 변수 형태로 텍스처에 넣는 것이 가능합니다.

 

050.jpg

 

빨간색이 잔디, 녹색이 바위, 검은색이 높.

 

051.jpg

 

월드 엔진에서 생성된 지형에 할당된 자연 오브젝트(나무, 풀, 바위, 물 등등)을 시각화한 것입니다. 이렇게 설정만 하면 나무나 풀 등이 절차에 맞춰 생성됩니다.

 

052.jpg

 

여러 재질이 섞인 마스크 합성은 높이 정보를 고려해서 구현했습니다. 이건 자갈인데요.

 

053.jpg

 

거기에 풀을 섞으면 자갈이 튀어나와 보입니다.

 

054.jpg

 

물가를 만들 때도 자갈이 물 위로 나오게 그려집니다.

 

055.jpg

 

이러한 합성을 통해 여러 오브젝트가 겹치는 부분도 자연스럽게 그려집니다.

 

056.jpg

 

나무가 얼마나 빽빽하게 들이차는지를 변수로 정하기만 하면, 그변수에 맞춰 나무의 수가 조절됩니다.

 

057.jpg

 

이러한 생성법은 언리얼 엔진 4.8의 표준 기능이라서, 넓은 자연을 표현하는 게임도 언리얼 엔진 4에서 개발할 수 있게 됐습니다.

 

058.jpg

 

또 Level of Detail과 특수 조명 기술이 구현된 것도 특징입니다. 시점의 멀고 가까움에 따라 3D 모델의 디테일을 전환해서 드로잉하는 구조지요.

 

059.jpg

 

멀리 떨어진 곳의 나무는 폴리곤 수를 줄여 작고 간단하게 그리고, 가장 멀리 떨어져 있다면 사각형 폴리곤에 나무 텍스처를 붙이는 스프라이트로 만들어버립니다. 여기에선 4단계 LoD를 구현하며, LoD 레벨을 바꿀 때 모델이 갑작스럽게 바뀌는 현상을 줄이도록 나무의 형상을 유지해서 LoD 모델을 만들었습니다.

 

060.jpg

 

조명은 양면 그림자 기능을 나뭇잎에 구현했습니다. 역시 언리얼 엔진 4.8의 표준 기능이지요. 두게가 얇아 투과성을 지닌 오브젝트는 조명이 반대편으로 투영되도록 렌더링합니다. 예를 들어 설명하면 잎이 햇빛을 받았을 때 줄기가 잎의 뒷면에 비춰 보이도록 그리는 것이 가능하지요.

  

 

이것은 언리얼 엔진 4에서 구동되는 카이트 데모의 오픈 월드를 일부 잘라낸 것입니다. 설명에 포함된 것은 아니나 동물과 새까지 구현됐네요.

 

이걸 실행해 보고 싶다면 5.35GB짜리 https://s3.amazonaws.com/unrealengine/marketplace_samples/KiteDemo_Runtime.zip 이 파일을 받아보세요.

 

 

결론

 

061.jpg

 

카이트 데모 이후의 언리얼 엔진에 탑재되는 새로운 기능도 소개했습니다. 피부를 표현할 때 현실감을 높여주는 SSSS(Screen Space Subsurface Scattering). 블리자드의 Jorge Jimenez가 만들어 스퀘어 에닉스의 Agni 's Philosophy에 적용된 기술이기도 합니다.

 

062.jpg

 

모션 블러 효과를 쓸 때 산발적 흐림 효과를 확산시켜 자연스러운 구현도 가능합니다. 다이렉트 X 10 이상에서만 사용 가능합니다.

 

063.jpg

 

광학 시뮬레이션 기반 피사계 심도 표현도 가능합니다.

 

언리얼 엔진 4는 앞으로도 기능을 더해 나갈 것이며, 4.9 이상 버전에선 사용성을 향상시키고 최적화를 추진해 성능을 높일 것이라고 하네요. 윈도우 10에 맞춰 다이렉트 X 12를 완벽 지원하기도 합니다.

 

또 언리얼 엔진 4로 만든 영상 컨텐츠는 로열티를 받지 않는다는 것도 흥미로운 점입니다. 게임이 아닌 영상 컨텐츠 분야에서 언리얼 엔진 4가 보급될지도 모를 일입니다.

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.