Search Unity

Unity 프로젝트의 모든 요소는 카메라 렌즈를 거쳐 표현되므로 카메라를 최대한 활용해야 합니다. 광원, 그림자, 초점, 컬러와 같은 다양한 요소는 렌더 파이프라인을 통해 표현되지만, 카메라 포지션, 모션 및 타이밍 등 다른 중요한 요소들도 존재합니다.

시네머신은 Unity의 가상 카메라 오퍼레이터로, 적절한 시점에 필요한 곳에서 카메라가 액션을 정확히 포착하도록 지원하는 툴입니다. 2D와 3D로 제작된 게임과 애니메이션에 모두 활용 가능한 시네머신은 피사체의 행동뿐만 아니라 감정도 빠짐없이 렌즈에 포착되도록 카메라를 더욱 스마트하게 활용합니다.

이번 포스팅에서는 최근에 개발한 시네머신의 신규 기능을 소개합니다. 또한 시네머신이 정식 패키지로 추가되었음을 알려드립니다. (정식 패키지에 대한 자세한 내용은 아래를 참조하세요.) 흥미롭고 유용한 기능과 샘플이 포함된 새로운 버전도 출시될 예정이며, 자택에서 참석할 수 있는 Unite Now 라이브 세션도 진행됩니다.

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

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

Unite Now 프로그램은 라이브 세션을 놓치더라도 YouTube에서 녹화본을 시청하실 수 있습니다.

Unity 2020.1 버전에 정식 출시되는 시네머신 2.5

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

검증된 정식 패키지

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

또한 정식 출시와 함께 프로젝트 템플릿에 시네머신을 포함하고 더 유용한 교육 자료도 제공해드릴 수 있게 되었습니다.

시네머신 2.6 프리뷰 버전

시네머신 2.5가 완성되자마자 개발되기 시작한 시네머신 2.6의 프리뷰 버전이 출시되었습니다. 프리뷰 버전에는 새로운 기능뿐만 아니라 3인칭 슈팅 게임의 에이밍이나 듀얼 타게팅과 같은 주요 사용 사례를 알아볼 수 있는 새로운 샘플이 포함되어 있습니다.

시네머신과 새로운 샘플을 설치한 후 새로운 프로젝트를 만들어 보세요.

워크플로 개선: 씬 뷰에서 가상 카메라 생성

매우 간단하지만 유용한 개선 사항이 추가되었습니다. 이제 가상 카메라를 새로 만들 때마다 씬 뷰에 정확하게 배치됩니다.

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

새로운 기능: 임펄스 전파

주변 환경의 움직임으로 인해 카메라가 충격을 받아 시야가 흔들리는 연출은 디지털 카메라 작업에 사실적인 느낌을 더해주며 게임과 시네마틱스에 유용하게 쓰이는 효과입니다. 실제 촬영에서는 스테디캠 등을 사용하여 이러한 효과를 최소화하려고 노력하는 경우가 많습니다. 하지만 가상 세계에서는 환경에 보는 사람의 관점이 반영되지 않으면 경직되고 부자연스러운 느낌이 들 수 있습니다.

따라서 Unity에서는 몇 가지 방법을 통해 카메라 모션과 씬에서 벌어지는 물리적 움직임을 연계합니다. 이 중 하나는 임펄스(Impulse)로 노이즈 설정(흔들리는 효과를 생성하는 패턴), 임펄스 소스(가상 세계에서 방해가 발생한 위치)와 임펄스 리스너(방해의 영향을 받는 개체)로 구성됩니다. 리스너는 카메라가 아니어도 되며, 다른 오브젝트를 방해하는 데에도 활용할 수 있습니다(아래 예 참고). 시네머신 2.6에서는 사실적인 느낌이 추가되고 전파 속도가 더 빨라져 방해가 발생한 시점과 리스너에게 방해의 영향이 미치는 시점 사이의 시간을 조절할 수 있습니다.

아래 예에서는 효과가 확실하게 보이도록 먼저 전파 속도를 느리게 유지했다가 속도를 높여 실제 폭발 효과와 비슷한 느낌을 줍니다.

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

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

3인칭 슈팅 게임과 같은 게임에서 매우 까다로운 요소 중 하나는 캐릭터의 관점과 플레이어 카메라의 관점이 미세하게 분리되어 있다는 점입니다. 3인칭 슈팅 게임을 플레이하면서 코너나 장애물 뒤에 숨어 최적의 공격 시점을 기다려 본 사람이라면 누구나 이와 같은 이질감을 경험했을 것입니다. 반면 카메라의 움직임을 자연스럽게 구현한 게임에서는 이질감이 크게 느껴지지 않을 수 있습니다.

시네머신 2.6에는 Assets > Samples > Cinemachine > 2.6.0-preview.5 > Cinemachine Example Scenes > Scenes > AimingRig > AimingRig에 샘플 씬이 추가되었습니다(버전 번호는 업데이트될 수 있음). 예시에서는 에이밍 릭(aiming rig)의 일반적인 사용 사례를 AAA급 품질로 구현할 수 있는 설정을 보여줍니다.

3인칭 슈팅 게임과 같은 게임에서 매우 까다로운 요소 중 하나는 캐릭터의 관점과 플레이어 카메라의 관점이 미세하게 분리되어 있다는 점입니다. 3인칭 슈팅 게임을 플레이하면서 코너나 장애물 뒤에 숨어 최적의 공격 시점을 기다려 본 사람이라면 누구나 이와 같은 이질감을 경험했을 것입니다. 반면 카메라의 움직임을 자연스럽게 구현한 게임에서는 이질감이 크게 느껴지지 않을 수 있습니다.

시네머신 2.6에는 Assets > Samples > Cinemachine > 2.6.0-preview.5 > Cinemachine Example Scenes > Scenes > AimingRig > AimingRig에 샘플 씬이 추가되었습니다(버전 번호는 업데이트될 수 있음). 예시에서는 에이밍 릭(aiming rig)의 일반적인 사용 사례를 AAA급 품질로 구현할 수 있는 설정을 보여줍니다.

새로운 샘플: 듀얼 타겟 릭

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

이 예는 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 포럼에서 사용자가 제안한 이 사용 사례는 실제로 활용도가 높습니다. 카메라가 특정한 관심 지점에 가까워질 때까지 목표물(플레이어의 아바타 등)을 따라가며, 해당 지점에 도달하면 카메라가 관심 지점을 향해 이동하게 합니다. 아래 동영상을 먼저 확인해 보세요.

이 예에서 가상 카메라의 초점은 단일 오브젝트가 아닌 CinemachineTargetGroup을 향합니다. 목표 그룹은 매우 다양하게 활용이 가능한 시네머신의 추상화입니다. 그룹을 사용하면 카메라가 하나의 피사체를 바라보는 대신 여러 개의 피사체를 바라보도록 할 수 있습니다. 이 기능은 예를 들어 서로 흩어져서 행동하는 여러 명의 캐릭터를 하나의 샷에 들어오도록 해줍니다.

그룹의 각 목표물에는 가중치가 있으므로 가중치가 더 큰 오브젝트를 카메라가 집중적으로 비추도록 할 수 있습니다. 이 예에서는 이러한 가중치를 동적으로 활용함으로써 오브젝트에 다가갈수록 ‘자석처럼 끌어당기는’ 효과를 보여줍니다.

이러한 효과는 CameraMagnet 게임 오브젝트에 연결된 CameraMagnetTargetContoller와 각 CameraMagnet 게임 오브젝트에 연결된 CameraMagnetProperty라는 두 개의 단순한 클래스를 통해 만들어집니다. 각 CameraMagnetProperty는 목표 그룹 내 가중치를 조절하기 위해 근접성과 강도를 설정합니다. 그런 다음 CameraMagnetTargetContoller가 모든 자석을 반복 실행합니다. 여기에 가중치 값이 1로 고정된 플레이어 아바타가 추가되며, 카메라를 끌어당기는 자석이 없으면 카메라는 아바타를 집중적으로 비춥니다. 하지만 플레이어가 다가올수록 자석이 끌어당기는 힘이 강해지며, 이에 따라 카메라의 관점도 주요 포지션을 향하게 됩니다.

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

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

개선된 입력 시스템

이전에는 시네머신의 카메라를 제어하기 위해 커스텀 입력 시스템이나 타사 입력 시스템을 사용했으며, 결과물이 다소 어색할 뿐 아니라 사용 방법도 쉽지 않았습니다. 이전 버전에서는 전역 델리게이트 CinemachineCore.GetInputAxis(스트링 이름)를 오버라이드해야 커스텀 입력 제공자 함수를 지정할 수 있었습니다. 물론 이 방법도 여전히 사용할 수 있지만, 더 효율적인 방법이 있습니다.

이제 새로운 인터페이스인 Cinemachine.AxisState.IInputProvider가 지원됩니다. 가상 카메라에서 이 인터페이스를 구현하는 동작을 사용하면 표준 CinemachineCore.GetInputAxis(스트링 이름) 델리게이트 대신 해당 동작이 입력됩니다.

이 경우 장점은 인터페이스 호출이 스트링 기반이 아니며 자체 데이터를 포함할 수 있는 가상 카메라당 구현을 호출하므로 더욱 효율적인 설정과 특정 플레이어에 대한 매핑이 가능하다는 것입니다.

시네머신 2.6은 새로운 Unity 입력 시스템용 구현 예시와 함께 제공됩니다. 구현 예시는 그대로 사용하거나 직접 커스텀 입력 제공자를 만들기 위한 템플릿으로 활용할 수 있습니다.

새로운 입력 시스템 패키지를 설치하면 가상 카메라에 새로운 CinemachineInputProvider 컴포넌트를 추가할 수 있습니다. 그러면 카메라의 입력을 입력 행동(Input Action) 레퍼런스에 간단하고 손쉽게 매핑하여 멀티플레이어 요구 사항을 지원할 수 있습니다.

새로운 소식을 받아보세요

시네머신은 게임, 영화 또는 컷씬의 완성도를 높이는 데 유용한 툴입니다. 시네머신의 새로운 기능, 개선 사항과 샘플을 유용하게 활용해 게임의 퀄리티를 최고의 수준으로 끌어올려 보세요. 지금 바로 시네머신 2.6 프리뷰 버전을 다운로드하세요.

시네머신 포럼에서 유용한 기능, 개선할 만한 부분과 기타 의견을 공유하고 궁금한 점을 물어보세요.

5월 28일 목요일 오전 9시(태평양 표준시 기준)에 Unite Now에서 진행한 라이브 시네머신 세션은 여기에서 시청하실 수 있습니다.

29 replies on “시네머신 2.6: 향상된 워크플로와 정밀도”

Wow! really nice stuff!

I think Cinemachine is the best thing unity have right now and I like to see that it is improving even more.

Really hoping the 2D Confiner constraint can get some love soon. It’s…pretty janky with Confine Screen Edges on, or at least unintuitive beyond my grasping. ANd the docs don’t help… :/

Hi Sirius,

Thanks for the feedback. Give us a post over on the forum (https://forum.unity.com/forums/cinemachine.136/) and lay out the problem you’re facing. We take problems of usability (and indeed jankiness!) pretty seriously. If we understand the nature of the jank we can either help you understand it and/or prioritize an appropriate fix.

Looks promising, as always with Cinemachine.
I suppose tho, that it’s gonna be exclusive to 2020 ? No plans for backport to 2019.3/4 ? That’s also the point of packages, not to be too much bound by the need to update to core engine update right ? :)

I’ll start with this warning: you should always be careful with unverified packages. 2.5 is verified for 2020.1, and we expect 2.6 to be verified for 2020.2. Choosing to work outside those boundaries for production work is a risk. That said, our testing so far suggests that the risks of using 2.6 in 2019.3 are relatively low. We tend to do a lot of testing/playing in 2019.3 and as of this writing our sense is that 2.6 and 2019.3 play very well together.

I’m on Unity 2020.1.0b9 and have Cinemachine 2.6.0-preview.5 and Input System 1.0.0 verified installed. How do I get the Cinemachine Input Provider script? I don’t see it anywhere in the packages.. I also don’t see the Cinemachine.AxisState.IInputProvider interface…..

Sorry, this should have been made explicit in the main text. The addition of the input management is super new. So new, in fact, that the version of 2.6 that includes that code hasn’t yet hit our production servers. Look for it in 2.6.0-preview.6.

Cinemamachine really needs a virtual camera input that is my phone, where I control its position, rotation, and gives me remote video.

This looks pretty awesome.

Is it possible to use Cinemachine for Virtual Cinematography in the sense that the virtual camera’s pose (position and rotation) is based on data from a real-world input device? If so, how?

My idea is to use either a 6 degree of freedom VR Controller/Trackers, AR Trackers/Markers, or simply a mobile device using AR/gyroscope as the pose input for the Cinemachine camera.

Thank you.

Indeed it is. We have made some internal projects that do just that. Virtual cameras can be configured to be “passive” – i.e. without procedural positioning logic. Then, their transform can be controlled externally like any 3D object, either through script, or transform hierarchy, or whatever.

Where Cinemachine brings in extra magic is that these passive virtual cameras, by virtue of being part of the Cinemachine ecosystem, can participate in blends, have procedural noise added, respond to impulses, have custom postprocessing effects, etc.

Looks cool! But the explanation for finding the samples will be super confusing for beginners. If this is installed through package manager, the samples need to be imported through package manager first (on the Cinemachine package) before they can be found in the hierarchy.

Love seeing updates about these things, makes me wanna try cinemachine again. But most of those videos were useless when sped up so much

Comments are closed.