Unity 검색

Cinemachine 2.6: 향상된 워크플로와 정밀도

2021년 11월 26일 엔진 & 플랫폼 | 11 분 소요
공유

Is this article helpful for you?

Thank you for your feedback!

Unity 프로젝트의 모든 요소는 카메라 렌즈를 거쳐 표현되므로 카메라를 최대한 활용해야 합니다. 광원, 그림자, 초점, 컬러와 같은 다양한 요소는 렌더 파이프라인을 통해 표현되지만, 카메라 포지션, 모션 및 타이밍 등 다른 중요한 요소들도 존재합니다. 시네머신은 Unity의 가상 카메라 오퍼레이터로, 적절한 시점에 필요한 곳에서 카메라가 액션을 정확히 포착하도록 지원하는 툴입니다. 2D와 3D로 제작된 게임과 애니메이션에 모두 활용 가능한 시네머신은 피사체의 행동뿐만 아니라 감정도 빠짐없이 렌즈에 포착되도록 카메라를 더욱 스마트하게 활용합니다. 이번 포스팅에서는 최근에 개발한 시네머신의 신규 기능을 소개합니다. 또한 시네머신이 정식 패키지로 추가되었음을 알려드립니다. 정식 패키지에 대한 자세한 내용은 아래를 참조하세요. 흥미롭고 유용한 기능과 샘플이 포함된 새로운 버전도 출시될 예정이며, 집에서 편안하게 참석할 수 있는 Unite Now 라이브 세션도 진행됩니다.

라이브 세션: 시네머신 최적화

5월 28일 목요일 오전 9시(태평양 표준시 기준)에 Zoom을 통해 진행된 라이브 세션을 확인하세요. 이 세션은 Unity의 무료 온라인 학습 세션, 데모, 크리에이터 스토리 등을 소개하는 Unite Now 프로그램 중 하나로,  이번 세션에서는 Unity에 높은 기대치를 갖고 있는 고객을 초청하여 각자 시네머신을 통해 원하는 결과물을 만들어낸 방법에 대해 이야기하고, 실시간으로 Q&A를 진행했습니다. 여기서 세션을 시청하세요. Unite Now 프로그램은 라이브 세션을 놓치더라도 YouTube에서 녹화본을 시청하실 수 있습니다.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

Unity 2020.1 버전에 정식 출시되는 Cinemachine 2.5

오래 전부터 Unity 패키지와 에셋 스토어의 에셋으로 출시되었던 시네머신이 QA와 사용자 검증 절차를 모두 통과해 정식 패키지로 제공됩니다.

검증된 정식 패키지

물론 한 가지 기능으로 모든 사용 사례에 대응할 수는 없지만, 정식 패키지를 출시했다는 것은 해당 기능의 사용 사례가 다수 파악되었으며 유니티에서 이러한 사례를 지원하기 위해 버그 수정을 우선적으로 제공한다는 의미입니다. 시네머신 팀은 항상 사용자를 지원하기 위해 최선을 다하고 있습니다. 도움이 필요할 경우 언제든지 포럼을 통해 문의하시기 바랍니다. 또한 정식 출시와 함께 프로젝트 템플릿에 시네머신을 포함하고 더 유용한 교육 자료도 제공해드릴 수 있게 되었습니다.

카메라가 씬 내에 정확하게 배치되면 훨씬 쉽고 직관적으로 블록 및 프레임을 지정할 수 있어 빠르게 작업할 수 있습니다.

새로운 기능: 임펄스 전파

주변 환경의 움직임으로 인해 카메라가 충격을 받아 시야가 흔들리는 연출은 디지털 카메라 작업에 사실적인 느낌을 더해주며 게임과 시네마틱스에 유용하게 쓰이는 효과입니다. 실제 촬영에서는 스테디캠 등을 사용하여 이러한 효과를 최소화하려고 노력하는 경우가 많습니다. 하지만 가상 세계에서는 환경에 보는 사람의 관점이 반영되지 않으면 경직되고 부자연스러운 느낌이 들 수 있습니다. 따라서 Unity에서는 몇 가지 방법을 통해 카메라 모션과 씬에서 벌어지는 물리적 움직임을 연계합니다. 이 중 하나는 임펄스(Impulse)로 노이즈 설정(흔들리는 효과를 생성하는 패턴), 임펄스 소스(가상 세계에서 방해가 발생한 위치)와 임펄스 리스너(방해의 영향을 받는 개체)로 구성됩니다. 리스너는 카메라가 아니어도 되며, 다른 오브젝트를 방해하는 데에도 활용할 수 있습니다(아래 예 참고). Cinemachine 2.6에서는 사실적인 느낌이 추가되고 전파 속도가 더 빨라져 방해가 발생한 시점과 리스너에게 방해의 영향이 미치는 시점 사이의 시간을 조절할 수 있습니다. 아래 예에서는 효과가 확실하게 보이도록 먼저 전파 속도를 느리게 유지했다가 속도를 높여 실제 폭발 효과와 비슷한 느낌을 줍니다.

샘플을 다운로드한 후 프로젝트를 열고 Assets > Samples > Cinemachine > 2.6.0-preview.5 > Cinemachine Example Scenes > Scenes > Impulse > ImpulseWave에서 샘플 씬을 살펴보세요. 버전 번호는 변경될 수도 있습니다.

새로운 샘플: 3인칭 시점 에이밍 릭

3인칭 슈팅 게임과 같은 게임에서 매우 까다로운 요소 중 하나는 캐릭터의 관점과 플레이어 카메라의 관점이 미세하게 분리되어 있다는 점입니다. 3인칭 슈팅 게임을 플레이하면서 코너나 장애물 뒤에 숨어 최적의 공격 시점을 기다려 본 사람이라면 누구나 이와 같은 이질감을 경험했을 것입니다. 반면 카메라의 움직임을 자연스럽게 구현한 게임에서는 이질감이 크게 느껴지지 않을 수 있습니다. Cinemachine 2.6에는 Assets > Samples > Cinemachine > 2.6.0-preview.5 > Cinemachine Example Scenes > Scenes > AimingRig > AimingRig에 샘플 씬이 추가되었습니다(버전 번호는 업데이트될 수 있음). 예시에서는 에이밍 릭(aiming rig)의 일반적인 사용 사례를 AAA급 품질로 구현할 수 있는 설정을 보여줍니다.

위의 동영상은 3인칭 따라가기(3rd Person Follow) 동작과 Cinemachine 3rd Person Aim 컴포넌트를 사용하여 릭을 구성하는 방법을 보여줍니다. 이 컴포넌트는 스프라이트를 참조하여 캐릭터가 바라보는 곳을 나타내며, 레이캐스트를 사용하여 십자선의 위치를 지정합니다. 동영상에서는 카메라의 관점(큰 원)과 캐릭터가 바라보는 곳(작은 원)의 차이를 알아볼 수 있습니다. 미미한 차이지만, 플레이어가 목표를 겨냥할 때는 상당한 영향을 줄 수 있습니다. 또한 Cinemachine 3rd Person Aim 컴포넌트는 레이캐스트에서는 간과하는 요소에 대한 필터를 제공하며, 레이캐스트 거리를 제한할 수 있는 거리 설정도 지원합니다.

새로운 샘플: 듀얼 타겟 릭

또 다른 일반적인 사용 사례는 탱크, 자동차나 아바타와 같은 게임 오브젝트를 따라가며 카메라의 위치를 이동하되 탱크의 조준점 등 관심 지점에 해당하는 또 다른 오브젝트를 겨냥하는 경우입니다. 여기서도 에이밍 릭과 마찬가지로 십자선을 설정합니다. 단, 이 경우에는 몇 가지 제한 조건 안에서 마우스로 간접 추적을 실행하며, 가상 카메라는 십자선을 따라갑니다. 아래의 동영상을 참조하세요.

이 예는 Assets > Samples > Cinemachine > 2.6.0-preview.5 > Cinemachine Example Scenes > Scenes > DualTarget > DualTarget에서 이용하실 수 있습니다(버전 번호는 업데이트될 수 있음). 위 예는 시네머신과 간접 동작을 함께 활용하여 복잡한 동작을 생성하는 경우를 잘 나타냅니다. 여기서 다음과 같은 몇 가지 요소가 움직입니다.

  • CM Dual Target 가상 카메라는 Player 오브젝트를 따라가지만, AimTarget Moved by Mouse 오브젝트를 바라봅니다.
  • Gun Points at AimTarget 오브젝트는 PointAtAimTarget이라는 간단한 스크립트를 포함하여 총구가 AimTarget Moved by Mouse 오브젝트로 향하게 합니다.
  • 마지막으로 모든 오브젝트가 바라보는 AimTarget Moved by Mouse 오브젝트는 MoveAimTarget 스크립트를 포함합니다.

Player 오브젝트를 따라가는 카메라의 원리는 간단합니다. 카메라는 적절한 오프셋을 적용하여 Player가 움직이는 곳으로 따라갑니다. 이와 비슷한 원리로, Player가 특정한 지점을 바라보면 카메라도 해당 십자선을 바라봅니다. Dead Zone 파라미터와 Soft Zone 파라미터는 십자선이 모션을 만들지 않고 스크린 공간 내에서 자유롭게 이동할 수 있도록 활짝 열려 있게 설정되었으며 서로 값이 동일합니다. 카메라는 십자선이 모서리에 가까워질 때만 반응합니다. 총에 포함된 PointAtAim Target 스크립트는 이름처럼 총이 목표물을 겨냥하게 합니다. MoveAimTarget 스크립트만 유일하게 약간 복잡합니다. 3인칭 애니메이션 설정과 마찬가지로 스프라이트(십자선)에 대한 참조, 레이캐스트 거리 및 캐스트에서 필터링할 레이어와 태그에 관한 정보가 포함되어 있습니다. 또한 십자선 동작을 미세하게 조정하기 위한 디테일도 추가했습니다. 여기에는 동작을 유발할 입력 위치도 포함됩니다.

새로운 샘플: 카메라 마그넷

카메라 마그넷은 새로운 기능처럼 보일 수 있지만, 사실 CinemachineTargetGroup의 가중치 사용을 보다 정교하게 업그레이드한 예시입니다. Unity 포럼에서 사용자가 제안한 이 사용 사례는 실제로 활용도가 높습니다. 카메라가 특정한 관심 지점에 가까워질 때까지 목표물(플레이어의 아바타 등)을 따라가며, 해당 지점에 도달하면 카메라가 관심 지점을 향해 이동하게 합니다. 아래 동영상을 먼저 확인해 보세요.

This time, our virtual camera is not focused on a single object, but rather on a Cinemachine Target Group. Target Groups are an incredibly useful and versatile abstraction in Cinemachine. Instead of pointing a camera at one thing, a group allows you to point it at multiple things. This comes in handy when keeping a spread-out party of adventurers all in the shot.

But each target in the group also has a weight, so you can bias the camera toward objects with weights greater than others. In this example, we demonstrate how playing with that weight allows us to dynamically “magnetize” objects as we approach them.

Two simple classes make this magic happen: Camera Magnet Target Controller (attached to the Camera Magnet GameObject), and Camera Magnet Property (attached to each of the Camera Magnet GameObjects). Each Camera Magnet Property sets a proximity and strength to control its weight in the Target Group. The Camera Magnet Target Controller then loops through all of the magnets. 

Added into the mix is the player avatar itself, which has a constant weight value of one. If there are no magnets attracting the camera, the avatar “owns” the camera’s attention. But as the player approaches, the magnets pull strongly, drawing the attention toward these key positions.

개선 사항: 향상된 룩어헤드 기능

더욱 매끄럽고 예측 가능하며 효율적으로 개선된 룩어헤드(Lookahead)는 타겟이 이동하는 방향을 더 정확하게 표현할 수 있는 강력한 기능입니다. 더욱 사실적인 느낌을 연출할 수 있는 이 기능이 더욱 널리 활용되기를 바랍니다.

개선된 입력 시스템

이전에는 시네머신의 카메라를 제어하기 위해 커스텀 입력 시스템이나 타사 입력 시스템을 사용했으며, 결과물이 다소 어색할 뿐 아니라 사용 방법도 쉽지 않았습니다. 이전 버전에서는 전역 델리게이트 CinemachineCore.GetInputAxis(스트링 이름)를 오버라이드해야 커스텀 입력 제공자 함수를 지정할 수 있었습니다. 물론 이 방법도 여전히 사용할 수 있지만, 더 효율적인 방법이 있습니다. 이제 새로운 인터페이스인 Cinemachine.AxisState.IInputProvider가 지원됩니다. 가상 카메라에서 이 인터페이스를 구현하는 동작을 사용하면 표준 CinemachineCore.GetInputAxis(스트링 이름) 델리게이트 대신 해당 동작이 입력됩니다. 이 경우 장점은 인터페이스 호출이 스트링 기반이 아니며 자체 데이터를 포함할 수 있는 가상 카메라당 구현을 호출하므로 더욱 효율적인 설정과 특정 플레이어에 대한 매핑이 가능하다는 것입니다. Cinemachine 2.6은 새로운 Unity 입력 시스템용 구현 예시와 함께 제공됩니다. 구현 예시는 그대로 사용하거나 직접 커스텀 입력 제공자를 만들기 위한 템플릿으로 활용할 수 있습니다. 새로운 Input System 패키지를 설치하면 가상 카메라에 새로운 CinemachineInputProvider 컴포넌트를 추가할 수 있습니다. 그러면 카메라의 입력을 입력 행동(Input Action) 레퍼런스에 간단하고 손쉽게 매핑하여 멀티플레이어 요구 사항을 지원할 수 있습니다.

새로운 소식을 받아보세요

시네머신은 게임, 영화 또는 컷씬의 완성도를 높이는 데 유용한 툴입니다. 시네머신의 새로운 기능, 개선 사항과 샘플을 유용하게 활용해 게임의 퀄리티를 최고의 수준으로 끌어올려 보세요. 지금 바로 Cinemachine 2.6 프리뷰 버전을 다운로드하세요.  유용한 기능, 개선할 만한 부분과 기타 의견을 공유해 주세요. 시네머신 포럼에서 질문에 대한 답을 찾을 수 있습니다. 5월 28일 목요일 오전 9시(태평양 표준시 기준)에 Unite Now에서 진행한 라이브 시네머신 세션은 여기에서 시청하실 수 있습니다.

Stay connected

We want to know what works for you, and how we can do even better. If you have any questions, feedback, or feature requests that can help guide the future of Cinemachine, please keep us posted on the forums.

2021년 11월 26일 엔진 & 플랫폼 | 11 분 소요

Is this article helpful for you?

Thank you for your feedback!