기글 하드웨어 뉴스 리포트
출처: : | http://www.4gamer.net/games/210/G021013/20150722033/ |
---|
Game Developers Conference 2015에서 공개된 언리얼 엔진 4로 만든 실시간 시네마틱 데모인 Kite Demo를 보신 분들이 계실 겁니다. 에픽 게임의 데모 중 처음으로 평화로운 분위기인지라 누구든지 가볍게 볼 수 있는데요.
이 데모는 16x16km의 방대한 오픈 월드를 무대로 삼았습니다. 여기에선 그걸 어떻게 만들었는지를 알아 보도록 하지요.
에픽 게임 일본 지사의 커뮤니티 매니저인 이마이 츠바사가 설명했습니다. 미국에선 오프라인 CG 제작 일을 했던 적도 있다네요. 덕분에 자신이 경험했던 것과 지식을 섞어서 해설을 진행했습니다.
디지털 사진으로 소재를 만들어내다
카이트 데모는 2015년 3월의 GDC 2015에서 공개하는 걸 목적으로 제작된 단기 프로젝트입니다. 2014년 11월에 제작이 시작됐기에 개발 기간은 3개월 정도. 할당된 인원은 10명이며 대부분이 게임 업계가 아니라 VFX 아티스트(오프라인 CG 제작 디자이너)라고 합니다.
16x16km의 광대한 공간을 실시간 CG로 구현하는 데 저런 조건이라면 너무 부족하지요. 그래서 어떤 지형을 만들 것인지를 정하는 로케이션 헌팅은 해당 장소를 방문하지 않고 가상으로 이루어졌습니다. 가상이라고 하면 그럴싸해 보이지만 그냥 구글 어스나 풍경 사진을 봤다는 소리죠.
그래서 스코틀랜드의 한 호수를 골랐습니다. 다음은 이 지역의 경관을 이룬 특징적인 자연물을 잡아야 하는데요.
이건 실제로 현지를 방문해 촬영한 사진을 보면서 특징을 잡아갔습니다.
이와 함께 수작업으로 텍스처를 디자인해야 할 소재를 촬영하는 작업도 동시에 진행했습니다.
여기서 한가지 큰 문제가 발생했습니다. 영국 스코틀랜드는 위도가 높고 겨울엔 일조 시간이 매우 짧다는 것. 그래서 소재를 촬영하는 데 쓸 수 있는 시간이 매우 한정됐다고 하네요. 그래서 비슷한 경치가 나오는 뉴질랜드에서도 사진을 찍어 경치를 합쳤다고 합니다.
촬영에 사용한 장비를 봅시다.
PL 필터는 표면 반사를 줄여줍니다.
대기의 산란을 줄여주고 반사광을 막아주지요.
촬영한 사진의 화이트 밸런스를 잡기 위해 컬러 체크를 썼습니다. 사진을 찍을 때의 빛이 계속 바뀌니까 나중에 색을 맞추기 위해 같이 촬영.
촬영에 사용한 렌즈의 화각은 50-70mm입니다.
광각 렌즈는 피사체가 옆으로 퍼지고 망원 렌즈는 세로로 길어지는지라 고른 선택이라네요.
센서 노이즈를 줄이기 위해 ISO는 100~125로 찍고,
조리개를 최대한 조여 빛망울을 죽였습니다. 물론 그렇게 하면 셔터 스피드 확보가 안되니 삼각대는 필수.
그렇게 해서 촬영된 사진입니다.
촬영한 사진을 참고해서 모델링한 식물입니다. 텍스처는 사진에서 따다 썼다네요.
여러 장의 디지털 사진으로 3D 모델링을 하는 포토 그래메트리 기술이란?
오프라인 CG에서 최근 사용되는 기술 중에는 포토 그래메트리라는 게 있습니다. 그려내려는 오브젝트를 모든 각도에서 촬영해 3D 모델 데이터로 반자동 생성하는 기술이지요.
이론적으로는 촬영된 사진을 일종의 동영상으로 간주하고, 연속된 사진 속에서 특징 부분이 움직이는 걸 감지, 그 운동 시차를 통해 3D 데이터를 구축해서 포인트 클라우드 기반 3D 모델링을 하는 것입니다.
운동 시차는 오브젝트를 둘러보면서 생기는 위치의 어긋남이기에, 삼각 측량법으로 입체감을 만들 수 있습니다. 포인트 클라우드는 입체 오브젝트를 폴리곤이 아닌 점의 집합체로 표현하는 방법이지요.
여기에서 포토 그래메트리에 사용한 장비를 소개하면서 경험과 함께 설명을 했습니다.
풀프레임 카메라를 필요로 합니다. 특히 이번 작업에선 캐논 EOS 5D Mark III를 썼는데요.
그 이유는 어안 렌즈를 이용한 Image Based Lighting (IBL)의 HDR 큐브 맵 소재 촬영을 같이 했기 때문이라고 합니다. 왼쪽의 시그마 렌즈를 썼지요.
풀프레임에 8mm 어안 렌즈를 찍으면 180도 화각의 사진이 나옵니다. APS-C 크롭 바디에서는 좌우가 짤린 부분이 나옵니다. 뭐 이건 센서보다는 렌즈의 화각 문제기도 하지만요.
IBL용 HDR 큐브맵은 어안 렌즈로 두번 찍어 360도를 찍어 만듭니다.
높이 6m의 대형 삼각대도 썼습니다. IBL HDR 큐브맵을 찍을 때는 위에서 내려다봐야 하는 경우도 있거든요. 물론 그럼 뷰파인더나 화면을 볼 수 없으니 무선 뷰파인더 시스템도 썼습니다.
전동 파노라마 시스템도 필요합니다. 리모콘으로 카메라를 회전시켜 파노라마를 찍을 수 있는데요.
그냥 회전하는 게 아니라 렌즈의 초점을 고려해 일주 사진의 중심을 유지하면서 회전하는 게 특징입니다. 이걸 수작업으로 하기란 매우 어렵지요.
HDR 이미지를 만들려면 서로 다른 노출값으로 여러장을 촬영하는 브라켓팅이 필요합니다. 한 장면을 4단계로 나눠 촬영하는데, 이 때도 파노라마 삼각대가 유용합니다. 이 4장의 사진으로 rGB 각각 32비트 총 96비트의 HDR 큐브맵을 생성, 실제 영상과 게임 큐브맵에선 RGB 16비트로 조절됩니다.
포토 그래메트리로 만들어 내려는 피사체가 어떤 조건의 조명에서 촬영됐는지를 기록하는 컬러 체커와 회색 공입니다.
그걸 피사체와 같이 촬영하는 것이 중요합니다. 회색 공은 주변 풍경을 그대로 비추는 것으로 빛의 강약을 나타내는 데 씁니다.
나중에 포토 그래메트리 과정에서 사진의 조명 효과를 무시하는 정보로 활용합니다.
모델링 오브젝트의 사진은 모든 각도에서 촬영합니다. 특징점을 추적해서 모델링해야하니 사진마다 30% 정도는 서로 겹치는 부분이 있어야 합니다.
7일 동안 28000장의 사진을 찍었는데 사진 한장이 5700만 화소니 용량은 1TB가 넘습니다. 이걸로 246개의 3D 모델 데이터를 만듭니다.
이렇게 촬영한 사진으로 3D 모델을 만드는 데 사용한 포토 그래메트리 툴은 Agisoft의 포토스캔입니다. http://www.oakcorp.net/photoscan/
오토데스크의 123D Catch도 무료로 사용 가능. http://www.123dapp.com/catch
이렇게 만들어진 3D 모델은 오브젝트의 크기에 따라 다르지만 700~2000만 폴리곤 정도 됩니다. 동시에 텍스처도 만들 수 있는데 16384x16384 텍셀 정도 됩니다. 이건 5700만 화소 사진 열장 정도로 만든 것이네요.
그렇게 반자동 모델링 과정으로 만들어 낸 3D 모델입니다.
데이터 프로세스 과정을 통해 포인트 클라우드를 만들었습니다. 용량이 엄청날 수밖에 없지요. 그래서 티가 나지 않을 정도로 단순화시키는 후처리 과정이 들어갑니다.
폴리곤을 줄이기 위해 미세한 요철 표현은 폴리곤이 아닌 노말 맵(범프 맵) 표현으로 바꾸며, 포토 그레매트리만으로 완벽한 3D 모델이 나오지 않기도 하니까 수작업으로 수정할 필요가 있습니다. 그래서 자동이 아닌 반자동 모델링인 것입니다.
다른 문제도 있습니다. 자연 풍경을 찍은 사진이다보니 태양의 빛이 그대로 들어오게 되는데요.
햇빛을 직접 받은 부분도 있고.
반사광을 받은 부분도 있습니다.
그러다보니 그림자도 생깁니다. 즉 불필요한 조명 효과가 들어가는 것이지요. 그래서 이걸 제거해야 합니다.
여기서 사용하는 것이 아까의 그레이 볼과 IBL용 HDR 큐브맵입니다. 우선 포토 그래메트리에서 만든 3D 모델을 텍스처가 씌워지지 않은 폴리곤 상태에서 조명으로 비춥니다. 조명은 미러 볼이나 그레이 볼의 촬영 정보를 사용해서 만든 IBL용 HDR 큐브맵의 방향에 맞춰 비춥니다.
그리고 여기에 포토 그래메트리에서 만든 텍스처 데이터를 씌우면 오브젝트 본래의 질감만 남게 됩니다. 여기에선 오토데스크의 마야에 전용 스크립트를 만들어서 이 과정을 반 자동화했다고 하네요.
광대한 지형은 NASA의 지형 정보로 생성
그럼 이렇게 광대한 공간은 또 어떻게 만들었을까요.
노이즈 함수를 이용해서 만들 수도 있지만 여기에선 나사가 제공하는 지형 정보를 활용했습니다. 다만 이 데이터는 지구의 동그란 모양에 맞춰져 있거나, 하나의 지역이 여러 파일로 나뉘어져 있기도 한데요.
이런 원시 데이터의 특이성을 성형하는 무료 소프트웨어로 VTBuilder와 http://vterrain.org/Doc/VTBuilder/overview.html
World Machine를 이용했습니다. http://www.world-machine.com/
나사의 지형 정보는 위성 궤도에서 찍은 것이라 윗부분에 가려진 지형은 나오지 않습니다. 그런 부분은 수작업으로 절벽과 계곡을 더했다고 하네요. 작업을 하다보니 스코틀랜드에서 찍은 지형에 뉴질랜드에서 찍은 소재를 활용하는 게 아니라, 뉴질랜드의 소재가 더 늘어나게 됐지만.
또 위성 궤도에서 찍은 이미지다보니 세밀한 정보는 없습니다. 그래서 노이즈 함수를 사용해서 디테일을 늘렸습니다.
넓은 지형에 3D 오브젝트를 배치하는 방법
이렇게 만든 넓은 지형 포토 그래메트리에 오브젝트를 배치해야 합니다. 이때 각각의 오브젝트 비율을 변수 형태로 텍스처에 넣는 것이 가능합니다.
빨간색이 잔디, 녹색이 바위, 검은색이 높.
월드 엔진에서 생성된 지형에 할당된 자연 오브젝트(나무, 풀, 바위, 물 등등)을 시각화한 것입니다. 이렇게 설정만 하면 나무나 풀 등이 절차에 맞춰 생성됩니다.
여러 재질이 섞인 마스크 합성은 높이 정보를 고려해서 구현했습니다. 이건 자갈인데요.
거기에 풀을 섞으면 자갈이 튀어나와 보입니다.
물가를 만들 때도 자갈이 물 위로 나오게 그려집니다.
이러한 합성을 통해 여러 오브젝트가 겹치는 부분도 자연스럽게 그려집니다.
나무가 얼마나 빽빽하게 들이차는지를 변수로 정하기만 하면, 그변수에 맞춰 나무의 수가 조절됩니다.
이러한 생성법은 언리얼 엔진 4.8의 표준 기능이라서, 넓은 자연을 표현하는 게임도 언리얼 엔진 4에서 개발할 수 있게 됐습니다.
또 Level of Detail과 특수 조명 기술이 구현된 것도 특징입니다. 시점의 멀고 가까움에 따라 3D 모델의 디테일을 전환해서 드로잉하는 구조지요.
멀리 떨어진 곳의 나무는 폴리곤 수를 줄여 작고 간단하게 그리고, 가장 멀리 떨어져 있다면 사각형 폴리곤에 나무 텍스처를 붙이는 스프라이트로 만들어버립니다. 여기에선 4단계 LoD를 구현하며, LoD 레벨을 바꿀 때 모델이 갑작스럽게 바뀌는 현상을 줄이도록 나무의 형상을 유지해서 LoD 모델을 만들었습니다.
조명은 양면 그림자 기능을 나뭇잎에 구현했습니다. 역시 언리얼 엔진 4.8의 표준 기능이지요. 두게가 얇아 투과성을 지닌 오브젝트는 조명이 반대편으로 투영되도록 렌더링합니다. 예를 들어 설명하면 잎이 햇빛을 받았을 때 줄기가 잎의 뒷면에 비춰 보이도록 그리는 것이 가능하지요.
이것은 언리얼 엔진 4에서 구동되는 카이트 데모의 오픈 월드를 일부 잘라낸 것입니다. 설명에 포함된 것은 아니나 동물과 새까지 구현됐네요.
이걸 실행해 보고 싶다면 5.35GB짜리 https://s3.amazonaws.com/unrealengine/marketplace_samples/KiteDemo_Runtime.zip 이 파일을 받아보세요.
결론
카이트 데모 이후의 언리얼 엔진에 탑재되는 새로운 기능도 소개했습니다. 피부를 표현할 때 현실감을 높여주는 SSSS(Screen Space Subsurface Scattering). 블리자드의 Jorge Jimenez가 만들어 스퀘어 에닉스의 Agni 's Philosophy에 적용된 기술이기도 합니다.
모션 블러 효과를 쓸 때 산발적 흐림 효과를 확산시켜 자연스러운 구현도 가능합니다. 다이렉트 X 10 이상에서만 사용 가능합니다.
광학 시뮬레이션 기반 피사계 심도 표현도 가능합니다.
언리얼 엔진 4는 앞으로도 기능을 더해 나갈 것이며, 4.9 이상 버전에선 사용성을 향상시키고 최적화를 추진해 성능을 높일 것이라고 하네요. 윈도우 10에 맞춰 다이렉트 X 12를 완벽 지원하기도 합니다.
또 언리얼 엔진 4로 만든 영상 컨텐츠는 로열티를 받지 않는다는 것도 흥미로운 점입니다. 게임이 아닌 영상 컨텐츠 분야에서 언리얼 엔진 4가 보급될지도 모를 일입니다.