사자의 서: 사진 측량 에셋, 나무, VFX

이 블로그 시리즈에서는 데모 '죽은 자의 책' 제작의 모든 측면을 살펴봅니다. 오늘은 사진 측량 에셋, 나무, VFX에 초점을 맞춥니다. 이번 블로그는 시리즈의 네 번째 블로그이며, '사자의 서'의 캐릭터와 콘셉트 아트 제작 과정을 다룬 지난 두 개의 블로그를 다시 살펴보세요.
안녕하세요, 저는 VFX, 비디오 합성, 편집, 그래픽 디자인에 대한 배경 지식을 갖춘 CG 및 VFX 아티스트 Zdravko Pavlov입니다. 저는 2014년부터 유니티 데모 팀과 함께 일하며 데모 '바이킹 마을', '대장장이', '아담'에 다양한 파티클, 리지드 바디 다이내믹스, 클로스 시뮬레이션을 기여했습니다.
'죽은 자의 책' 데모는 조금 달랐습니다. 이 프로젝트에서 제 역할은 사진 측량 방식을 사용하여 다양한 환경 자산을 만드는 것이었기 때문에 저에게는 완전히 새로운 영역이었습니다. 야외 사진 촬영이 취미인 저는 이런 작업을 기꺼이 맡았습니다. 나무 만들기? 얼마나 어렵겠어요? 다음 블로그 게시물에서는 프로젝트의 사전 제작 및 개발 단계에서 제가 배운 모든 것을 설명하려고 합니다.
다행히도 이 시점에서는 인터넷에 그 과정에 관한 유용한 정보가 넘쳐나기 때문에 거기서부터 제 학습이 시작되었습니다. 대부분의 기사에서 말하는 것은 50mm 단초점 렌즈가 장착된 DSLR 카메라만 있으면 된다는 것입니다. 당시에는 그런 장비가 없었기 때문에 대신 16mm-35mm 줌 렌즈가 장착된 24MP 미러리스 소니 a7II로 초기 테스트를 진행하기로 결정했습니다. 그리고 바로 말씀드리자면 잘 작동합니다! 렌즈가 넓을수록 더 많은 왜곡이 발생하지만, 예를 들어 라이트룸에서 언제든지 수정할 수 있지만 실제로는 그렇지 않은 것이 더 좋습니다! 사진 측량 소프트웨어는 이를 우아하게 처리합니다. 단초점 렌즈는 더 단단하며 이론상 더 선명한 이미지를 제공해야 합니다. 통제된 스튜디오 환경에서 스캔하는 경우 정말 훌륭하며, 그런 시나리오에서 적극 추천합니다. 하지만 현장에서는 고품질 빌드 줌 렌즈로 원하는 피사체의 구도를 제대로 잡을 수 있으면 유리합니다.






시중에 나와 있는 대부분의 사진 측량 소프트웨어를 사용해 본 결과, 몇몇 소프트웨어는 꽤 잘 작동했습니다. 저는 훨씬 더 나은 성능과 RAM 부족 없이 많은 양의 사진을 처리할 수 있는 기능 때문에 RealityCapture를 선택했습니다. 사진에서 재구성하는 디테일의 양이 놀랍습니다! 때로는 최대 1억 8,500만 개의 트라이앵글을 포함한 모델을 가져와 지오메트리를 PLY 형식으로 내보내는 데 성공했습니다.


물론 이 정도면 충분하고 조금 극단적인 표현이기도 합니다. 제가 재구성한 대부분의 트라이앵글은 대략 5천만에서 9천만 개 정도였습니다. 처음에는 GF980TI를 사용했지만 나중에 GF1080으로 업그레이드하면서 성능이 약간 향상되었습니다.
언젠가 저는 카메라를 4,200만 화소 소니 aRII와 Planar T* FE 50mm f/1.4 ZA 렌즈로 업그레이드하기도 했습니다. 하지만 해상도를 두 배로 높이고 우수한 초광각 단렌즈를 사용해도 기대했던 '와우' 수준의 결과물을 얻지는 못했습니다. 우선, 더 길고 좁은 단렌즈는 성공적인 재구성에 필요한 이미지 겹침을 얻기 위해 몇 걸음 뒤로 물러나야 한다는 것을 의미합니다. 다른 모든 나무와 관목 등이 있는 숲 한가운데에 있을 때는 항상 그런 것이 가능하지 않습니다. 또한 두 배나 많은 기가바이트의 이미지 데이터를 관리, 저장, 처리해야 한다는 의미이기도 합니다. 하지만 그렇다고 해서 반드시 고해상도 스캔으로 이어지는 것은 아닙니다. 이미지가 많을수록 더 많은 정보를 얻을 수 있으며, 24MP로 촬영하면 관리하기 쉽습니다. 당연하게 들릴 수도 있지만, 실제로 직접 사용해보기 전까지는 이런 생각이 들지 않았습니다.

앞서 언급했듯이 저는 엄청나게 밀집된 지오메트리를 익스포트하기 위해 PLY 형식을 사용했습니다. 리얼리티 캡처의 PLY 익스포터에는 스케일 및 축 방향 컨트롤이 없어서 FBX와 달리 PLY의 스케일이 맞지 않고 회전이 되지 않음에도 불구하고 저는 FBX보다 이를 선호했습니다. FBX를 사용하여 텍스처를 구울 때 약간의 오류가 발생했기 때문에 이 문제를 해결하기로 결정했습니다. 또한 바이너리 FBX 익스포트는 나중에 구현되었습니다.
그 정도의 폴리곤을 처리할 수 있는 소프트웨어는 많지 않기 때문에 파일을 저장하고 RC의 데시메이션 기능을 사용하여 동일한 모델의 로우 폴리 버전을 만들었습니다. 보통 1m 정도의 삼각형입니다. 그리고 ZBrush, MeshLab 또는 기타 모델링 소프트웨어에서 열어서 다시 토폴로지화하거나 래핑을 해제할 수 있습니다. 모델에 따라 리토폴로지에 다른 기법을 사용했습니다. 종종 Z리메셔로, 때로는 수작업으로 작업합니다.



그런 다음 텍스처를 구울 때 xNormal을 사용했습니다. 수억 개의 트라이앵글에 신경 쓰지 않고 쉽게 처리하는 것 같습니다. 버텍스 컬러 정보를 사용하여 디퓨즈 텍스처를 구웠습니다. 하이폴리의 버텍스 밀도는 버텍스 간 보간 없이도 깨끗하고 선명한 텍스처를 만들기에 충분했습니다. 저는 RC의 통합 언래핑 및 텍스처링 기능을 사용해 본 적이 없습니다.
즉, 어떤 이유로 조밀한 구름이 충분히 조밀하지 않거나 아래 이미지와 같이 일부 영역이 누락된 경우 사진에서 텍스처를 투사하면 해당 영역에 디테일을 더할 수 있습니다.

대부분의 사진 측량 튜토리얼에서 가르치는 것은 물체를 스캔할 때 직접적이고 거친 조명과 그림자를 피하는 것이 가장 좋다는 것입니다. 작은 바위를 촬영하려는 경우, 그늘이나 스튜디오로 가져와 소프트박스와 턴테이블을 사용할 수 있습니다. 하지만 나무는 그렇게 할 수 없으니 일기예보를 보며 흐린 날씨가 오기를 바랐어요. 하지만 흐린 환경에서도 약간의 그림자와 앰비언트 오클루전이 발생했습니다. 이 문제는 유니티의 디라이팅 툴로 해결할 수 있습니다. 노멀 맵, 구부러진 노멀 맵, 구운 AO만 있으면 됩니다. 그림자를 제거하면서 디퓨즈 값은 그대로 유지합니다.

그런 다음 결과 에셋을 Unity로 임포트하여 다이내믹 라이팅과 셰이더를 테스트했습니다.



모델의 모든 부분을 캡처할 수 없는 경우가 있습니다. 장애물이 있어 모든 각도를 담을 수 없는 경우. 때로는 바쁘거나 배터리가 방전되어 무언가를 놓치고 집에 돌아와서 데이터 처리를 시작할 때까지 깨닫지 못하는 경우도 있습니다. 그런 실수를 많이 했지만 서브스턴스 페인터를 사용하여 스탬프를 복제하고 누락된 데이터를 수정하여 일부 작업을 복구할 수 있었습니다.
사자의 서 제작 기간 대부분 동안 데모 팀에는 환경 아티스트가 없었기 때문에 저희는 환경 아티스트를 구하고 있었습니다. 일부 작업은 외부 환경 아티스트인 티호미르 냐골로프(Tihomir Nyagolov)가 초기 탐색과 환경 화이트박스 작업을 맡았지만, 주요 작업은 크리에이티브 및 아트 디렉터인 베셀린 에프레모프와 제가 맡았습니다. 각자 가까운 숲으로 나가 사진 측량 데이터를 캡처했고, 그 작업은 자연스럽게 필요한 최종 게임 에셋 제작으로 이어졌습니다. 저는 환경 아트에 대한 배경 지식도 없고 게임 최적화, LOD 등을 다뤄본 경험도 전혀 없었습니다. 그 당시에는 이미 티호미르가 GrowFx의 도움을 받아 만든 플레이스홀더 트리가 있었기 때문에 저는 거기서부터 배우면서 일을 진행했습니다.
GrowFX는 모든 종류의 식물을 제작할 수 있는 강력하고 다재다능한 툴이라는 것이 입증되었습니다. 씬의 다른 오브젝트와 상호 작용하여 독특하고 자연스러운 결과물을 얻을 수 있습니다. 게임 에셋 제작을 염두에 두고 제작되지는 않았지만 충분히 제어할 수 있으며 작업에 사용할 수 있습니다. 3DS Max 플러그인입니다. 저는 20년 이상 3DS Max를 사용해왔고, 정말 집처럼 편안하게 사용하고 있습니다. 안타깝게도 GrowFX는 커브 편집 대화창과 같은 구식 3DS Max 구성 요소에 의존하고 있어 편리하지는 않지만, 그래도 당면한 작업에 적합한 툴이었기 때문에 그냥 사용해야 했습니다.

사자의 서의 숲은 주로 침엽수림으로 의도되었습니다. 집 근처에 아름다운 숲과 공원이 몇 군데 있어서 '사냥'을 나가서 몇 군데를 스캔했습니다. 그런 다음 스캔한 모델에 GrowFX 제작물을 스티칭하는 작업을 진행했습니다. 최종 트리 트렁크는 스캔한 지오메트리와 고유한 텍스처로 구성된 하단 부분을 절차적으로 생성된 트렁크에 스티칭하고 나머지 부분은 타일링 가능한 텍스처를 사용하여 상단까지 구성했습니다.
바닥의 작은 패치를 텍스처 상단에 클론으로 찍어 타일링할 수 있게 만들었습니다.
바위와 나무 줄기를 사진 측량하는 것과 솔잎을 스캔하는 것은 완전히 다른 문제입니다. 바로 이 지점에서 퀵셀이 나서서 아름답게 스캔한 지도를 제공했습니다. 데모 팀과 협업하여 '사자의 서'를 위해 특별히 제작한 풀, 관목, 파편 등 수많은 작은 에셋을 제작했습니다.
서두에서 언급했듯이 저는 CG 프로덕션에 종사한 경험이 있고, 멀티스캐터나 포레스트 팩 프로를 사용해 대규모 숲을 만들고 V-ray로 렌더링한 적이 있습니다. 이러한 작업에서는 퀵셀 메가스캔 지도를 그대로 사용할 수 있지만, 사자의 서와 같은 실시간 프로젝트의 경우 약간의 최적화를 수행해야 했습니다. 여기에는 더 큰 요소(나뭇가지, 나무 꼭대기 등)를 만들고 이를 새로운 텍스처로 배열하고 노멀 맵, 변위, 전송 등을 위해 초기 스캔 데이터를 전송하는 작업이 포함되었습니다.


기존 메가스캔의 일반 데이터를 약간 수정하여 전체적인 볼륨감을 가짜로 표현했습니다.


노멀 도둑과 같은 다양한 노멀 편집 기법과 기타 커스텀 빌드 3DSMax 스크립트를 사용하여 가지를 트렁크와 블렌딩했습니다.
버텍스 노멀을 트렁크와 블렌딩할 수 있도록 변경하기
이 접근 방식을 사용하여 다양한 종류의 소나무를 제작할 수 있었습니다.


저희는 숲이 '살아 있는' 느낌을 주길 원했고, 바람은 우리에게 중요한 요소였습니다. 버텍스 셰이더 기반 바람 애니메이션 솔루션의 나무는 환경 아티스트 줄리엔 헤이만스가 설정했습니다.
벡터 필드를 만드는 방법에는 여러 가지가 있으며, 저는 여러 가지 옵션을 찾아보았습니다. 카오스그룹의 유체 솔버인 PhoenixFD에 익숙했기 때문에 어떤 종류의 유용한 데이터를 얻을 수 있는지 알아보고 이를 Unity로 가져와야겠다고 생각했습니다. 씬 지오메트리를 익스포트하고 3DS Max에서 FBX로 가져와서 유체를 실행하면 초목 주위를 소용돌이치며 난류 바람 효과를 만들 수 있었습니다. 큰 나무가 작은 초목을 가려서 그 효과가 덜 두드러졌습니다.


통합된 PhoenixFD 재생 컨트롤을 사용하여 시뮬레이션된 시퀀스를 반복했습니다.
그런 다음 벡터 정보를 PhoenixFD 텍스맵을 통해 읽고 정규화하여 절차적으로 생성된 아이소서피스 위에 디퓨즈 텍스처로 연결했습니다.


그런 다음 렌더링된 이미지 시퀀스를 Unity로 다시 임포트하여 최종 텍스처 아틀라스를 조립했습니다. 과거에는 After Effects에서 이 작업을 수행했지만, 이제 Unity에는 거의 자동으로 이 작업을 수행할 수 있는 매우 편리한 이미지 시퀀서 툴이 있습니다. 파리에 있는 유니티의 GFX 팀에서 개발 중인 새로운 VFX 툴 중 하나입니다.

생성된 텍스처 아틀라스가 씬에 배치되었습니다. 시뮬레이션 경계를 정의하기 위해 간단한 상자를 만들고 이를 위치 참조로 사용했습니다.
분명히 말씀드리자면, 이 실험을 통해 시네마틱 티저에서 보여준 일부 장면의 비주얼을 더욱 강화할 수 있었습니다. 영화 제작에 Unity를 사용하는 경우 추천할 수 있는 방법입니다. 이 솔루션은 테크 리드인 토르비욘 라에드레(Torbjorn Laedre)가 프로젝트를 위해 개발한 프로시저럴 버텍스 셰이더 기반 바람 애니메이션 솔루션으로, 티저의 대부분의 장면과 GDC에서 선보인 콘솔 버전의 프로젝트에 사용되었습니다.
다음 블로그 게시물에서 줄리엔과 토르비욘이 Wind를 처리한 방법과 최종 솔루션에 대해 자세히 설명할 예정입니다.

저는 일찍부터 하이브에 대한 몇 가지 아이디어를 차단하기 시작했습니다.


초기 디자인이 끝나면 다양한 게임 준비 요소를 구축하여 Unity 에셋을 제작하기 시작했습니다.



스크류를 좋아하는 분들을 위해 바디 변형에 대한 탐색을 해봤습니다. 이번에도 Chaosgroup의 PhoenixFD를 사용하여 유체 연기 시뮬레이션을 실행했습니다. 그런 다음 나사 모양을 잘라내고 유체 온도에 따라 아이소서페이스를 만들었습니다.
PhoenixFD로 만든 일부 모양 탐색
이 방법을 통해 다양한 모양을 빠르게 미리 볼 수 있었고 일반적인 참고 자료로 사용했습니다. 최종 스크류 캐릭터 모델은 플라멘 (파코) 탐네프가 만들었으며, 이에 대한 자세한 내용은 그의 블로그 게시물에서 확인할 수 있습니다.
스크류의 얼굴에 떨어지는 수액을 표현하기 위해 PhoenixFD를 다시 사용했습니다. 저는 고밀도 점성 액체로 어떤 기능을 구현할 수 있는지 간단한 개념 증명부터 시작했습니다.

전체적인 결과물과 유연한 모션이 상당히 만족스러워서 실제 모델을 설정하는 작업을 진행했습니다. 목표는 시뮬레이션에서 너무 많은 분리된 조각과 물방울이 형성되는 것을 방지하는 것이었습니다.

이를 통해 생성된 지오메트리 시퀀스에서 단일 프레임을 가져와 리토폴로지화하여 UV를 만든 다음 WRAP3를 사용하여 시퀀스의 나머지 모양에 투영할 수 있었습니다. 그 결과 동일한 토폴로지를 사용하는 일련의 블렌드 셰이프가 생겼습니다.

또한 일부 나무 줄기에 수액 시뮬레이션을 실행해 보았습니다.



최종 프로젝트에는 사용하지 않았습니다. 하지만 스캔한 모델에 디테일을 더할 수 있는 좋은 방법이라고 생각합니다.
---
시리즈의 다음 블로그 포스팅을 기대해 주세요. 줄리엔 헤이만스와 함께 사자의 서에 사용된 환경 아트에 대해 자세히 알아보겠습니다.
6월 19일 유나이트 베를린에서 사자의 서 환경을 콘솔로 직접 살펴보고, 데모에서 환경 아트를 소개하는 줄리엔 헤이만스의 프레젠테이션에 참여해 보세요. 전체 일정은 여기에서 확인하세요.
