본문 바로가기

언리얼 개발자

[Unreal] Camera epic Learning

[ Unreal Learning ]

https://dev.epicgames.com/community/learning/courses/RRr/unreal-engine-camera-framework-essentials-for-games/wv7n/unreal-engine-camera-framework-essentials-for-games-overview

 

Camera Framework Essentials for Games | Course

In this course from the Epic Online Learning team, use C++ and Blueprints to create polished in-game Cameras. Examine some types of Cameras in Unreal En...

dev.epicgames.com

 

 이 글은 Epic Dev Community의 카메라 관련 Learning 개인적인 정리 글입니다. 모든 강의 내용이 들어있지는 않습니다.

위의 링크를 통해 예제 프로젝트를 다운받고 강의를 들을 수 있습니다.

 

관련 Actor

Camera Actor

 * 카메라 컴포넌트의 래퍼 클래스. 카메라 컴포넌트를 월드에 배치할 수 있도록 합니다.

Camera Component

 * 실제적인 카메라 기능이 담겨져 있으며 Scene Component를 상속하여 Transform을 가지고 있습니다.

 * 에디터 관련 Component 들을 가지고 있습니다.

        1. UDrawFrustumComponent

            : 카메라가 비추고 있는 부분을 그려줍니다.

            : 에디터 뷰포트 메뉴 중 Show > Advanced > Camera Frustums 를 클릭하면 확인할 수 있습니다.

        2. UStaticMeshComponent

            : 카메라 메시를 그려주어 월드 상에 위치를 눈으로 확인할 수 있게 합니다.

 

 

카메라 종류

* 아래의 단어들은 사람마다 정의가 다를 수 있습니다. 강의 상의 정의입니다.

* Static/Fixed : 가만히 한 곳을 바라보는 카메라

 > Camera Actor를 레벨에 배치한 후 APlayerController의 SetViewTarget 혹은 SetViewTargetWithBlend 함수를 이용하여 ViewTarget을 변경하면 빙의를 변경하지 않은 채 고정된 카메라의 뷰를 이용할 수 있습니다.

 

* Dynamic : 기본적으로 Static 하지만 ViewTarget을 바라보는 등 특정 조건에 의해 움직이는 카메라

* Active : 유저의 조작, 인풋 등에 의해 동작하는 카메라

 

 

Spring Arm

[ 관련 옵션 ]

* Socket Offset : 어태치한 컴포넌트에 상대적인 Offset\

* Target Offset : 월드 스페이스 상의 Offset

 

* Use Pawn Control Rotation : Roll, Pitch, Yaw 값이 소유한 액터로부터 상속받는지 여부

                                               : 체크해제되어 있을 경우 캐릭터 회전에 정확히 스냅됩니다.

                                               : 캐릭터 회전과 별개로 동작하고 싶다면 체크해야 합니다.

 

* Camera Lag Speed : 값이 낮을수록 보다 지연이 더 길어집니다.

                                   : 값이 높을수록 더 빠르게 접근합니다.

* Draw Debug Lag Markers : Lag 디버깅

 

* Probe Size : ViewTarget과 카메라 사이의 콜리전 테스트를 할 때 사용할 충돌 크기입니다.

 

 

Camera Shake

* 언리얼에서 만들어져있는 Shake의 종류는 3가지 입니다.

1. UCameraShakeBase

    - RootShakePattern ( UCameraShakePattern* ) 변수에 어떤 Shake Pattern이 들어가냐에 따라 Shake가 동작합니다.

2. UDefaultCameraShakeBase

    - UCameraShakeBase와 완전히 동일합니다. 다만 RootShakePattern에 UPerlinNoiseCameraShakePattern가 디폴트로 세팅되어 있습니다.

3. UMatineeCameraShake

    - Legacy Camera Shake로, 기존 사용자는 이 클래스가 더 익숙할 수 있다고 합니다. UCameraShakeBase를 상속했기 때문에 UCameraShakeBase 포인터로 관리할 수 있습니다.

    - Oscillation Duration : 흔들림 지속 시간

    - Oscillation Blend in/out time : 흔들림 시작 시간과 끝 시간의 블렌딩 시간

    - Amplitude : 진폭, 흔들림 세기

    - Frequency : Duration동안 카메라가 얼마나 자주 흔들릴지

    - Initial Offset : 초기 시작 오프셋

    - Waveform : Sine wave(통제된 웨이브), Perlin Noise(원하는 정도에 따라 완전히 랜덤화 )

 

* UCameraShakePattern를 상속하는 몇 가지 Shake Pattern 클래스가 있습니다. 자주 쓰이는 두 가지를 살펴보면,

1. UPerlinNoiseCameraShakePattern

    - 무작위성 흔들림

2. UWaveOscillatorCameraShakePattern

    - 정돈된 흔들림

 

* 사용 방식

- Play World Camera Shake

블루프린트 노드로도 있으며, c++로 접근하려면 UGameplayStatics 클래스에 있습니다.

Epicenter : Camera Shake 발원지 위치 ( 카메라가 어태치되어 있는 Actor가  아닌 카메라 기준으로 거리가 체크 됩니다 )

Inner Radius : Camera Shake의 영향을 가장 크게 받는 부분

Outer Radius : 거리에 따라(float) 영향을 받는 부분

 

- PlayerCameraManager

APlayerCameraManager::StartCameraShake(), APlayerCameraManager::StopCameraShake() 를 통해 제어

 

* 플레이하지 않고 에디터에서 테스트할 수 있습니다.

1. 레벨에 Camera Shake Source Actor 생성

2. 생성된 Camera Shake Source Actor 에 테스트하려는 Camera Shake 등록, 반경 세팅

3. 뷰포트 메뉴의 Realtime, Allow Camera Shake 체크

4. Window > Cinematics > CameraShakePreviewer

5. Play를 통해 테스트 ( 뷰포트의 시점이 곧 위치이므로, Camera Shake Source Actor 근처로 가야합니다 )

 

 

동적 ViewTarget 변경

* 동적인 ViewTarget 변경으로 static/dynamic camera 와 active camera 를 자유롭게 변경할 수 있습니다.

1. 레벨에 camera actor 배치

2. overlap trigger를 통해 begin overlap 시에 view target을 레벨에 배치된 camera actor로 변경

3. end overlap 시에 view target을 원래대로 되돌려 active camera로 세팅

 

* view target 전환 함수는 APlayerController::SetViewTargetWithBlend(), APlayerController::SetViewTarget() 이 있으며, 내부에서는 APlayerCameraManager의 함수를 호출합니다.