Unity Engine

Cinemachine - Noise

Aostols 2022. 12. 29. 09:11
반응형

시네머신에서 카메라 흔들림을 주는것은 주로 2가지로 줄 수 있습니다.

- Noise

- Impulse

Noise

노이즈는 주로 방향성이 없는 혹은 일정한 주기를 지니고 있는 진동등에서 사용 합니다.

우선 이전 예제에서 사용하고 있던 VirtualCamera 입니다.

Noise 항목을 클릭하게 되면 Basic Multi Channel Perlin이 있습니다.

선택해 줍니다.

Noise항목 내용이 변경되는데 이중에서 Noise Profile을 열어보면 다양한 항목들이 있습니다.

테스트용이기 때문에 일단 아무거나 (6D Shake) 선택 해 줍니다.

그리고 게임 플레이를 해보게 되면 카메라가 흔들리는 모습을 볼 수 있습니다.

 

기본적인 컨트롤 방법은 제작된 노이즈에 배율을 정해 주는 것 입니다.

기본적인 강도조절은 2가지 항목으로 처리 합니다.

Amplitude Gain: 얼마나 강하게 할것인지

Frequency Gain : 주파수인데 적당한 단어가 떠오르지 않습니다. 잦은 빈도 정도로 생각할 수 있을것 같습니다.

 

이제 실제 노이즈를 구성하는 방법을 알아 보겠습니다.

Project 창에서 적당한 폴더에 우클릭하여 노이즈를 추가 해 줍니다.

Create -> Cinemachine -> NoiseSettings 

 

노이즈 자체를 구성하는 것으로 위쪽은 Position, 아래쪽은 Rotation 입니다.

RotationX를 추가 한다고 했을때 확장시켜보면 List형태로 구성 할 수 있고 이 속에 Frequency, Amplitude를 설정 할 수 있습니다.

기본적으로 랜덤인 값이고 랜덤을 없애려면 항목의 가장 우측 체크박스를 체크하면 됩니다.

 

이제 VirtualCamera 항목에서 Noise Profile을 보게되면 추가했던 노이즈가 있습니다.

이것을 적용해 보면 실제 카메라가 흔들리는 것을 볼 수 있습니다.

 

요약 해 보자면 작업 순서는

1. CinemachinVirtualCamera 세팅

2. 노이즈 제작

3. 노이즈 할당

4. 테스트 후 VirtualCamera의 강도 조절

 

이러한 순서로 처리 할 수 있을 것 같습니다.

 

런타임 컨트롤

Noise적용을 대부분의 경우에는 런타임에서 처리해야 할 것입니다.

이럴떄 노이즈는 기본적으로 Amplitude를 0으로 세팅하고 시작합니다.

노이즈를 할당하지 않을 수도 있긴 하지만 조금 귀찮은 문제이기 떄문에 해당 값만 0으로 설정합니다.

 

[SerializeField] private List<CinemachineVirtualCamera> _cameras;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        DoShake();
    }
}

private void DoShake()
{
    CinemachineBasicMultiChannelPerlin perlin =
        _cameras[0].GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>();
    perlin.m_AmplitudeGain = 1;
    perlin.m_FrequencyGain = 1;
}

GetCinemachineComponent로 CinemachineBasicMultiChannelPerlin을 얻어 올 수 있고 여기서 Amplitude 와 Frequency를 설정 할 수 있습니다.

물론 NoiseProfile도 설정할 수 있습니다.

반응형