[유나이트 서울 2018 발표자 소개] 댄 밀러 유니티 에반젤리스트는 리비드 인터렉티브, 헬리오스 인터렉티브, 일본의 VR 개발 스튜디오인 콜로플 NI 등 다양한 VR, AR 게임 개발 스튜디오에서 근무했다. 현재 그는 유니티의 XR 분야(VR, AR)에서 에반젤리스트로 활동하고 있으며, 유니티를 활용해서 VR, AR 콘텐츠를 제작하는 방법을 개발자들에게 알려주고 있다.

한 때 360도 카메라가 화제가 됐던 적이 있었다. 일반 카메라와 달리 전후좌우는 물론 상하까지 한 번에 담아낼 수 있는 360도 카메라는 이전의 카메라를 통해서는 볼 수 없었던 새로운 방식의 영상을 제공했던 것이다.

일반 소비자들 사이에서 360도 카메라는 아직까지 폭넓게 사용되고 있진 않지만, 현재 360도 카메라와 360도 영상은 다양한 분야에서 활용되고 있다. 대표적으로 사용되고 있는 곳이 VR이다. VR은 유저가 HMD를 통해서 전후좌우 상하 모든 환경을 보게 되는 구조다. 자연히 360도 모든 시야각을 고려해서 오브젝트의 이미지를 구현해야 하고, 이를 쉽게 하기 위해서는 360도 카메라와 360도 영상의 노하우도 필요했던 것이다.

그렇다면 유니티에서는 360도 영상과 카메라를 사용하기 위해서 어떤 기능을 갖추고 있을까? 댄 밀러 유니티 에반젤리스트는 유니티에서 새로 적용된 360도 영상과 카메라를 위한 옵션과 유니티 에셋 스토어에 올라온 플러그인을 활용해서 360도 영상과 카메라를 어떻게 활용하는지 강연했다.

※ 기사는 편한 전달을 위해 강연자의 시점에서 서술했습니다




일단 360도 이미지의 기본적인 원리를 설명하자면, 간단하다. 원리는 이렇게 길게 늘어진 이미지를 이어붙여서, 360도에 활용될 이미지로 만드는 것이다. 마치 펼쳐진 지도를 이어붙여서, 지구본을 만드는 것과 유사하다고 보면 된다.

5.6 버전 이상부터는 네이티브 비디오도 지원하게 되며, 2017.3버전 이후부터는 스카이박스 파노라마 2D, 3D 비디오 쉐이더도 지원을 하게 된다. 스카이박스 쉐이더는 또한 VR이 가능한 환경에서는 스테레오 렌더링을 지원하도록 변경됐다. 또한 4K뿐만 아니라 8K 이상의 해상도도 지원하게 됐다.


360도 영상, 이미지와 관련해서 오늘 오전에 추가된 유니티의 기능 중에 스테레오라는 기능이 있다. 이것은 스테레오 스코픽이라는 의미로, 즉 우리가 양안으로 사물을 입체적으로 보는 것을 구현했다는 의미다. 이 비디오를 통해서 보면, 우리가 스테레오, 즉 양안으로 어떻게 물체를 보는가 알 수 있다. API도 런타임 간에 활용할 수 있고, 자신이 갖고 있는 다양한 텍스처, 코드를 활용할 수 있게 됐다. 프레임 레코더도 에디터 안에서 컨피그할 때 사용할 수 있는 360개의 옵션이 구현됐다. 다만 이와 같은 기능은 현재까지는 PC와 에디터 안에서만 가능하며, 맥에는 지원하지 않고 있다.


이런 기술을 활용해서 360도 영상을 만들었다. 그렇다면 이런 360도 영상이 어떤 곳에 사용될 수 있을까? 단순히 고도의 하드웨어에서만 사용되는 것들이 아니다. 유튜브, 페이스북 같은 곳에 올라오는 몰입형 영상으로도 사용할 수 있을 것이다. 이 말인 즉슨 360도 영상은 고도의 하드웨어에서만 구동 가능한 게 아니라, 로우엔드 하드웨어에서도 충분히 돌아갈 수 있는 컨텐츠라는 것이다.

여기서 말하고자 하는 것은 유니티 안에서 레이어를 구성하거나, 혹은 다양하게 응용하는 방법이다. 실제로 유니티 안에서 360도 영상이나 이미지를 활용해서 다방면으로 사용이 가능하기 때문이다. 기본적으로 360도로 캡처한 영상이나 이미지를, 3D로 빌딩을 할 수 있는 기능을 유니티에서 지원한다. IPD라고 알려진, 스테레오 세퍼레이터가 있는데 이것을 활용해서 빌드를 할 수 있기 때문이다. 다만 하드코드 방식이기 때문에, 밸류 값을 맞춰야만 적용이 된다는 것에 유의해야 한다. 어떤 플랫폼이냐에 따라서 그 밸류 값도 달라질 수 있고, 이미지에 따라서 달라질 수 있기 때문에 이 부분은 주의할 필요가 있다.


또 한 가지 유의할 점은 MP4 코덱이 렌더링에서 4K까지밖에 지원이 안 된다는 점이다. 즉 좀 더 높은 해상도로 렌더링하고자 한다면, 다른 코덱을 활용해야 한다는 것이다. 프레임 레코더 GUI는 플레이모드 시작부터 바로 진행된다는 점도 인지해두는 것이 좋다.

예시로 든 프로젝트의 경우에는 에셋스토어에서 받을 수 있으니 참고하길 바라며, 일단 하나의 예시를 통해서 360도 이미지와 영상을 활용하는 방법을 보여주고자 한다. 예시로 들고자 하는 프로젝트는 높은 해상도에, 액션 게임에 활용되는 씬들이다. 캐릭터들이 등장하고, 그 캐릭터가 몬스터를 물리친다는 그런 컨셉을 갖고 있는 게임에 삽입될 것들이라고 보면 되겠다.


VR에 활용될 컷과 씬을 360도 카메라와 영상 기법을 활용해서 렌더링하려면 어떻게 해야 할까? 먼저 스크립트가 필요하다. 이 스크립트는 카메라에 관련된 스크립트다. 카메라를 각각의 눈에 맞춰서 설정하고, 렌더를 할 수 있도록 하는 것이 필요한데 그 기능을 스크립트를 통해서 활용할 수 있기 때문이다. 즉 심플한 API 방식인 셈이다. 유의할 점은 각 카메라가 각각의 맵에 반영될 수 있도록 구성해야 한다는 점이다.

스크립트를 러닝하면 에디터에서 진행된다. 렌더가 된 텍스쳐가 어떤 식으로 적용되는지는 앞서 설명한 것과 같다. 길게 늘어놓은 이미지가, 하나의 구처럼 완성되는 방식이다. 이런 이미지를 API를 통해서 렌더를 한다고 보면 되는 것이다.

▲ 이 방식은 카메라에 스크립트를 넣어서 적용하는 방식이다

구를 활용해서 사용하는 방식도 있다. 사실은 이 방식이 더 편하다. 에셋스토어에 프레임 레코더 중 제너럴 레코더 플러그인이 있는데, 이를 활용하면 좀 더 편하다. 프레임 레코더는 원래 비디오 렌더링을 위해서 만들어졌는데, 360도 영상이 인기가 많아지면서 이를 활용하는 경우가 많아졌다. 자연히 360도 영상을 위한 많은 옵션들이 필요해졌기 때문에, 이런 옵션을 지원하는 플러그인들도 생겨난 것이다.

▲ 360도 영상이 평면에서 구체로 전환되는 과정을 거친다는 점에 착안해서

▲ 구체를 활용한 캡처 방식도 있다

유니티에서 지원하는 옵션들을 보려면 윈도우창에서 리코더창을 클릭한 뒤 비디오를 클릭하면 볼 수 있다. 거기에서 컨피규레이션 창을 통해서 비디오를 어떤 식으로 세팅할 수 있을지 정할 수 있다.

기본적으로 캡처 메소드, 콜렉션 메소드를 정하고, 카메라를 지정한 뒤에 해당 이미지의 크기, 영상 등을 조절하는 과정을 거친다. 이것이 두 눈에는 어떤 식으로 인지되는가를 확인할 수 있는 스테레오 렌더링 창도 하단에 나와있다. 프레임 레이트, 바이트레이트 모드를 활용해서 이것이 사용될 특정 플랫폼이나, 타겟의 프레임을 정할 수도 있다.

레코드 버튼을 클릭하면, 그 씬을 이니셜라이즈할 수 있으며, 프레임 레코드를 통해서 몇 개의 프레임과 씬이 레코드됐는지도 확인할 수 있다. 타임라인으로 들어가서 트랙을 선택해서 특정 타임라인을 보고, 어느 시점부터 레코드가 시작됐는지 볼 수 있다. 리코더 클립을 불러와서 타임 라인과 엘리멘트들이 어떤 식으로 리코딩이 되어있는지 확인할 수도 있으며, 타임라인을 늘렸다가 줄이면서 레코드 타임 등을 조절할 수 있다.

이 과정에서 우측 하단 윈도우창을 통해서 레코드 스피어의 렌더를 윈도우를 통해서 볼 수 있다는 것도 확인할 수 있다. 여기에서 베리어블만 조절하면 렌더링할 순서도 바꿀 수 있다.

이런 과정을 통해서 360도 비디오를 유니티 안에서도 캡처할 수 있다는 것을 확인할 수 있었다. 그렇다면 이것을 이젠 어떻게 활용하는가, 하는 문제가 남아있다.

우선 빈 프로젝트를 하나 만들고, 여기에 여러 가지 만들어야 한다. 가장 기본적인 것은 카메라인 만큼, 일단 카메라를 설치한다. 그리고 나서 카메라 에디터 컨트롤을 통해서 카메라의 위치나 방향을 조절한다.

가장 기본적으로 스테레오 캡처를 하는 방법은, 일단 구체를 먼저 만드는 것이다. 여기에서 컨피규레이션 창을 가고, 메시에서 비디오 플레이어를 추가한다. 그러면 비디오 정보가 나오게 될 것이다. 여기에 미리 준비했던 비디오 클립을 넣고, 이것이 적용됐나 보기 위해서 카메라를 구체 안에다 넣어보면 된다. 제대로 적용됐다면 카메라로 비디오 클립 속 이미지가 투사된 것을 확인할 수 있다.

▲ 구체에 메시를 넣고, 비디오클립을 적용한 상태에서 카메라를 집어넣으면 이런 화면이 나온다

다만 지금 이 단계에서 바로 사용하기엔 무리가 있다. 너무 어둡기 때문이다. 자연히 라이팅이 필요한데, 여기서는 쉐이딩을 쓴다. 쉐이딩을 적용하는 방법은 일단 새로운 마테리얼을 만들고, 스피어에 마테리얼을 넣은 뒤에 언릿을 하는 것이다. 그렇게 적용해보면 더 밝은 영상을 볼 수 있다. 렌더링도 보다 자연스럽지만, 더 자연스럽게 하기 위해서는 더 다양한 마테리얼과 기능을 요구한다. 다만 이런 방식으로 만들 수 있다는 것을 보여주고자 한 것이다.

유니티에서 이렇게 360도 영상을 구현하는 것의 장점이라고 한다면, 이렇게 만들어진 것들을 다이나믹 엘리먼트로 활용할 수 있다는 것이다. 애니메이션, 파티클도 자유자재로 사용할 수 있기도 하다. 다만 이를 잘 활용하기 위해서는 렌더링에 대한 이해가 필요하다.

앞서 말한 스피어 방식은 한계가 있다. 일단 이해를 돕기 위해서 큐브를 만들어서 구체에 넣어보면 된다. 큐브가 완전히 안에 들어가 있을 때도 이질적이긴 하지만, 구체와 외부에 걸쳐있을 때 단면을 보면
더 선명하게 문제점들이 보일 것이다. 큐브와 구체 사이의 절단면이 보이기 때문에 이질적으로 느껴질 수밖에 없는 것이다.

▲ 단순히 이미지만 캡처할 땐 모르지만, 별도 오브젝트가 들어간 순간 이질감이 느껴진다

이런 문제점을 해결하기 위해서 스카이박스 안에서 렌더링을 하는 방식이 있다. 비디오 플레이를 먼저 셋업하고, 렌더 텍스쳐로 렌더링을 한다. 이 과정에서 비디오를 아웃풋해야 하는데, 비디오 클립을 우선 선택해야 한다. 여기에서 타겟과, 비디오 RT의 사이즈가 맞아야만 정상적으로 아웃풋이 되므로 이를 확인해야 한다. 이는 우측 하단 소스 인포메이션을 통해서 확인할 수 있다. 사이즈뿐만 아니라 픽셀도 확인 가능하므로 이 점을 잘 체크하는 게 좋다.

그 조건이 맞다면 렌더링 텍스처로 렌더하게 된다. 그리고 마테리얼을 새로 넣고, 360도 렌더링을 위해서 파노라믹 쉐이더를 사용해보면 된다. 우측의 검은 박스가 보일 텐데, 이는 렌더링을 위해서 나오는 것이다. 렌더링 후에 스카이박스 오버라이드를 적용하고, 렌더링을 하게 되면 무언가 이상한 점이 느껴질 것이다. 이펙트가 작다거나, 오프셋은 위에서 보이는 것만 보여주고 있기 때문이다.

이런 현상이 발생하는 이유는, 아직 쉐이더를 컨피규레이션하지 않았고 3D 비디오로 렌더링하는 과정을 거치지 않았기 때문이다. 그래야 위와 아래, 좌우가 같이 맞춰지게 되면서 마치 실사로 보는 것처럼 렌더링이 된다. 그러기 위해서는 컨피규레이션 창에서 레이아웃을 사이드 바이 사이드, 혹은 오버 언더로 바꿔줘야 한다. 그래야 스테레오 360도로 돌리면서 캡처한 영상, 이미지를 볼 수 있다.

▲ 이런 화면이 보이는 이유는, 아직 컨피규레이션과 3D 비디오 렌더링을 안 거쳤기 때문이다

이제 이를 활용해서 영상을 캡처하게 될 텐데, 여기에서 유니티가 빛을 보게 된다. 다른 프로젝트에 나온 것들도 얼마든지 활용해서 다양하게 영상을 만들어낼 수 있기 때문이다. 일단 씬을 하나 더 만들고, 여기에 3D 모델을 몇 개 추가해보자. 다른 프로젝트에서 따온 것들인데, 유니티 안에서 얼마든지 활용이 가능한 것들이다.

이것을 배치하고, 카메라를 움직이고, 라이팅에 일부 수정을 가해보자. 실제로는 이 필드와의 여러 면에서 차이가 있지만, 아래 카메라 뷰를 통해서 보면 오브젝트가 실제로 필드에 존재하는 것처럼 느껴지게 된다. 3D 엘리멘트를 좀 더 넣고, 세부적인 조정을 조금만 해주면 얼마든지 현재 있는 로우엔드 하드웨어에서 사용되는 VR 콘텐츠처럼 만들어낼 수 있다.

예를 들자면 나비나 반딧불 등, 미리 만들어둔 오브젝트를 넣고 위치를 정해보면 된다. 또는 안개 같은 이펙트를 넣고 위치를 정한 뒤에 카메라 뷰를 보면 된다. 실제로는 전 필드에 이펙트에 깔리거나 하지 않았고, 나비나 반딧불들을 실제 필드에 비해서 턱없이 작지만 카메라 뷰로 봤을 때는 그렇지 않다. 안개 같은 경우에는 오프셋 화면에서 볼 때 필드 위쪽에 깔려있지만, 카메라 뷰에서는 필드 바닥에 잔잔하게 깔려있는 것 같은 효과가 연출된다. 카메라의 위치를 기준으로 세팅을 잡아가는 것이기 때문이고, 카메라보다 약간 하단에 두면 그런 식으로 잡을 수 있기 때문이다.

▲ 실재와 카메라 뷰에 비치는 오브젝트와 필드 백그라운드의 위치는 다르다

▲ 실제로 찍은 사진을 백그라운드로 하고

▲ 오프셋에 오브젝트를 추가하자

▲ 카메라와 라이팅의 조정을 통해서 실사 배경에 캐릭터가 있는 듯한 연출을 할 수 있다

이런 부분은 유니티를 활용해서 360도 영상을 캡처하거나, 활용하는 가장 기초적인 방법들이다. 유니티에는 그 외에도 다양한 기능이 있으며, 또한 에셋 스토어 등에 있는 플러그인을 활용해서 자신이 원하는 기능을 추가할 수 있다. 다만 도구를 잘 사용하기 위해서는, 도구에 대한 기본적인 이해가 필요하다. 이번 강연이 그 도구를 사용하는 데 있어서 도움이 되었으면 한다.