2015년 12월 3일

완전함을 위한 불완전함 2부: 사진 재구성/디라이팅

저자: Min Oh

완전함을 위한 불완전함 튜토리얼 2부에 오신 것을 환영합니다! 이번 포스팅에서 우리는 일반적인 사진 재구성(Photo Reconstruction) 과정을 돌아볼 것입니다. 우리는 Agisoft PhotoScan을 이용해서 진행을 하고, 텍스쳐 디라이팅(Delighting) 과정에서 제가 오픈월드 카이트 데모를 만들 때 배운 팁들을 알려 드리도록 하겠습니다.

준비

여러분은 Agisoft PhotoScan으로 3D 모델과 텍스쳐를 제작하기 전에 필터를 걸어야 할 것입니다. 사진을 처리하기에 앞서서 몇 가지 고려할 사항이 있습니다. 사진들은 충분히 선명해야 합니다. 여러분의 사진이 만약 흐릿하다면, 떡진 3D 메쉬와 흐릿한 텍스쳐가 만들어 질 것입니다. 또한 사진들이 오브젝트의 모든 방향에서 촬영되도록 하고, 동시에 사진간에 너무 오버랩이 많이 되지 않도록 합니다. 소스가 많다고 해서 무조건 결과물이 잘 나온다는 보장은 없습니다. 가능한 적은 사진으로 시작해서 필요한 부분을 더 추가하는 방법을 사용하는 것이 더 좋습니다. 사진을 한 장 한 장 확인하고, 필요한 사진을 선택하시기 바랍니다. 사진을 필터하는 데 소요하는 시간은 실제 3D 모델을 만드는 데 걸리는 시간을 줄여주고 결론적으로 제작 효율이 더 상승하게 됩니다.

시스템과 Agisoft PhotoScan 설정

Agisoft PhotoScan 은 CPU, GPU, 램에 많이 구애됩니다. 여러분은 OpenCL 가속을 지원하는 GPU로 사진 재구성 과정을 빠르게 만들 수 있습니다. 여러분에게 만약 좋은 그래픽 카드가 있다면 (NVIDIA GeForce 8xx 이후 시리즈), 여러분은 OpenCL GPU가속을 사용해서 사진 재구성 과정을 함께 가동시켜 처리 시간을 줄일 수 있습니다.

벤치마킹 프로그램도 있습니다. 여러분의 프로젝트에 가장 적합한 설정을 찾기 위해 자유롭게 사용해 보시기 바랍니다.
(영문위키) 벤치마킹 프로그램 비교 Comparison_of_photogrammetry_software

포토스캔 후 사진 재구성 일반적 워크플로우

1. 사진 정렬하기

첫 번째 단계는 사진을 정렬하는 것입니다. ‘사진 정렬’ 단계는 기본적으로 사진의 위치와 방향을 알아내려고 하는 것입니다. ‘사진 정렬’은 전반적인 작업 과정에 비교해 볼 때 상대적으로 짧은 과정입니다. 여러분은 ‘사진 품질 예측’과 사진의 품질 값을 확인할 수 잇습니다. 만약 품질이 0.5 이하이면, 사진을 사용하지 않는 것이 더 좋습니다.

각 파란 사각형은 카메라의 위치를 의미합니다.

2. 덴스 포인트 클라우드(Dense Point Cloud) 만들기

둘째로, 여러분은 ‘덴스 포인트 클라우드 만들기’를 할 것입니다. 3D 좌표계에서의 X, Y, Z값의 데이터 세트인데, 제가 알아낸 사실로는‘최소’품질의 덴스 포인트 클라우드를 먼저 사용하는 것이 시간을 더 절약해 주고 더 효율적이라는 것입니다. 최소 설정을 하면, 여러분은 어떤 것이 처리될 것인지를 볼 수 있습니다. 여기서, 여러분은 불필요한 포인트 클라우드 섹션을 삭제할 수 있습니다. 이렇게 하면 처리 시간을 줄여주는 것 뿐만이 아니라 높은 폴리곤이 있는 부분을 집중해서 처리를 할 수 있습니다. 덴스 포인트 클라우드의 첫 번째 패스가 끝나면, 여러분이 얻고자 하는 높은 품질로 두 번째 처리를 하시기 바랍니다. ‘울트라 하이’옵션은 다른 설정에 비해 최고로 좋은 결과물을 가져다 주지는 않습니다. 그리고 디테일 보다는 노이즈를 많이 생기게 할 것입니다. 또한 ‘울트라 하이’옵션을 다른 설정보다 많은 처리 시간을 필요로 할 것입니다. 저희는 덴스 클라우드 과정에서 거의 ‘하이’ 옵션을 사용하였습니다.

3. 메쉬 제작

덴스 포인트 클라우드 설정이 만족스럽게 완성되면, 메쉬를 제작할 수 있습니다. 여러분은 두 개의 표면 타입 중에서 선택할 수 있습니다. 바위나 나무처럼 면이 닫힌 오브젝트들은 ‘아비터리 서피스 타입(Arbitary surface type)’을 사용하셔야 합니다. ‘하이트 필드 서리스 타입(Height field surface type)’은 지형과 같이 평평한 표면에 적합합니다.

여러분은 원하는 정도로 폴리곤의 숫자를 조절할 수 있습니다. 여러분은 여러분의 컴퓨터나 소프트웨어가 선택한 폴리곤의 숫자를 처리할 수 있는지를 확인하셔야 합니다. 2015년 초반 에픽게임즈는 GDC 카이트 데모 작업을 하고 있었고, 1천5백만 폴리곤 이상을 익스포트 할 때는 매우 힘든 ZBrush 32비트 버전밖에 없었습니다. 지금 64비트버전이 있어서 행복하네요.

4. 모델 텍스쳐 제작

텍스쳐 제작 또한 상대적으로 짧은 처리 시간을 요합니다. 여러분은 모든 세부적 표현이 살아 있도록 텍스쳐 크기를 크게 해야 합니다. 엄지손가락의 법칙: 가능한 텍스쳐를 크게 확보하고 나중에 줄이시오.

포토스캔의 기본적인 성질 때문에, UV의 효율이 높지 않으며, 나중에 정리하는 과정에서 많은 데이터가 사라질 것이라는 것을 알고 있어야 합니다.

5. 저장/익스포트

마지막으로, 여러분의 모델가 텍스쳐가 익스포트 될 준비가 되었습니다. 대상 파일 형식과 결과물을 꼭 확인해 주시기 바랍니다. FBX나 OBJ가 모델용으로 잘 동작합니다. 텍스쳐 설정에서 디라이팅을 가능하게 하기위해 16비트 Tiff형으로 저장하시기 바랍니다. 컬러 정보를 더 가지고 있는 포맷입니다.

디라이팅

언리얼 엔진 4의 PBR 랜더링의 이점을 모두 취하기 위해서, 라이트 정보를 텍스쳐에서 제거해야 합니다. 그렇지 않으면, 여러분은 애셋에 이미 그림자가 들어간 상태의 애셋이 생성될 수 밖에 없고, 씬에 놓았을 때 이상해 보이게 됩니다. (역주: 라이팅이 이미 들어간 상태를 사진으로 찍어서 다시 광원이 있는 PBR 랜더 엔진에서 보면 광원이 두 군데에서 있는 것 처럼 보이기 때문에 매우 어색해 집니다. 그래서 사진 속 광원 정보를 삭제해서 랜더 엔진속의 광원만으로 결과물이 나오도록 디라이팅 과정을 거치는 것입니다.) 텍스쳐에서 디라이팅을 하는 방법은 몇 가지가 존재합니다. 첫 번째 방법은 HDR/Grey-Chrome ball 정보를 가지고 3D 스페이스의 광원을 측정하여 쉽게 포토샵으로 제거하는 것입니다.

HDR/Grey-Chrome ball 사용하기

HDR/Grey-Chrome ball 설정의 기본은 3D 프로그램에서 동일한 광원을 재현해 내는 것입니다. HDR 이미지로 씬을 먼저 밝게 합니다. 그리고 나서 Grey Ball을 이용해서 라이팅 세기를 일치시키고, Chrome Ball을 이용해서 광원 방향을 정합니다. 대성 오브젝트는 (이번 경우에는 돌덩어리) 라이팅의 정교한 수정을 위해 실물 크기가 되어야 했습니다. 여러분은 미리 계획을 세워서 크기를 재거나 오브젝트의 크기를 가늠할 수 있는 다른 물체와 함께 사진을 찍습니다. 저희는 Gray, Chrome Ball의 크기를 참조하였습니다. 대상 오브젝트는 20%의 회색(대략 회색의 중간값인 Gray Ball의 색 18%에 맞도록 합니다.) 으로 맞춰서 라이팅 정보를 올바르게 구울 수 있도록 합니다.

3D 프로그램에 라이팅 설정을 하고 났으면, 다음 단계는 씬에서 메쉬로부터 라이팅 정보를 굽는 것입니다. 구워진 라이트맵은 원래 텍스쳐를 이용해서 디라이트 텍스쳐를 만드는 데 쓰일 것입니다. 합쳐진 단계는 아래와 같습니다.

원래 텍스쳐 / (구워진 라이트 정보 * 5) = 디라이트 텍스쳐

이 단계를 따라오시면, 특별한 문제 없이 디라이팅을 하실 수 있습니다.

HDR/Grey-Chrome ball이 없는 경우,

Grey-chrome ball 과 HDR처럼 라이팅 정보를 가져올 방법이 없는 경우, 디라이팅 텍스쳐를 만들기 위한 또 다른 방법은 그냥 포토샵에서 ‘High pass’필터를 사용하는 것입니다.

그냥 원본 사진을 다른 레이어에 복사하고 ‘High pass’필터를 적당한 반경을 지정해서 적요합니다. 이 필터는 원래 텍스쳐에서 고대비인 지점의 값을 없애 줍니다. High pass 필터를 적용하고 나면 원래 사진과 블랜딩할 수 있습니다. 블랜드 모드와 투명도는 각 사진마다 다를 수 있습니다. 실험적으로 High pass 필터 반경과 블랜드 모드를 이용해 최선의 결과를 얻어내 보세요.

다음 포스팅

저는 사진 재구성이라는 주제에 관심을 갖고 계시는 커뮤니티의 많은 분들을 알게 되어 기쁩니다. 이 튜토리얼은 사진 재구성에 있어 카이트 데모를 만들 때 얻은 팁들과 함께 아주 일반적인 워크플로우를 보여줍니다. 이 팁들이 여러분에게 도움이 되고 여러분의 시간을 절약해 주기를 바랍니다.

다음 포스팅에서 우리는 다량의 폴리곤을 갖으며 디라이팅 된 포토스캔 모델로 게임에 사용가능한 애셋을 만드는 방법을 배워 보도록 하겠습니다. 다음 포스팅에서 만나요!