카메라 셰이크와 애님
UCameraShakeBase 시스템과 Perlin Noise 기반 핸드헬드 효과를 마스터합니다
Camera Shake 시스템
UE5 카메라 셰이크 아키텍처
UE5에서 카메라 셰이크는 UCameraShakeBase를 상속하는 시스템으로,
UE4의 UMatineeCameraShake(구 UCameraShake)를 대체합니다.
셰이크 클래스 계층
UCameraShakeBase // 추상 베이스
UPerlinNoiseCameraShakePattern // Perlin Noise 기반 (UE5 권장)
UWaveOscillatorCameraShakePattern // 사인파 기반
USequenceCameraShake // 시퀀서 에셋 기반
UCompositeCameraShakePattern // 여러 패턴 조합
| 패턴 | 특징 | 용도 |
|---|---|---|
| Perlin Noise | 유기적이고 자연스러운 움직임 | 핸드헬드, 호흡, 바람 흔들림 |
| Wave Oscillator | 규칙적인 사인파 진동 | 폭발 충격, 지진, 기계 진동 |
| Sequence | 시퀀서 에셋으로 정밀 제어 | 키프레임 기반 복잡한 셰이크 |
| Composite | 여러 패턴을 레이어링 | 복합적인 셰이크 효과 |
Perlin Noise 셰이크
핸드헬드 카메라 효과 구현
주요 파라미터
| 파라미터 | 설명 | 권장 범위 |
|---|---|---|
| LocationAmplitudeMultiplier | 위치 진폭 배율 | 0.5 ~ 5.0 |
| LocationFrequencyMultiplier | 위치 주파수 배율 | 0.5 ~ 3.0 |
| RotationAmplitudeMultiplier | 회전 진폭 배율 | 0.3 ~ 2.0 |
| RotationFrequencyMultiplier | 회전 주파수 배율 | 0.5 ~ 2.0 |
| X/Y/Z Amplitude | 각 축별 진폭 | 축에 따라 다름 |
| X/Y/Z Frequency | 각 축별 주파수 (Hz) | 0.1 ~ 5.0 |
// 핸드헬드 카메라 셰이크 Blueprint/C++
UCLASS()
class UHandheldCameraShake : public UCameraShakeBase
{
GENERATED_BODY()
public:
UHandheldCameraShake()
{
// 루트 패턴을 Perlin Noise로 설정
auto* Perlin = CreateDefaultSubobject<UPerlinNoiseCameraShakePattern>(
"PerlinPattern");
// 위치 셰이크 (미세한 흔들림)
Perlin->LocationAmplitudeMultiplier = 1.0f;
Perlin->LocationFrequencyMultiplier = 1.0f;
Perlin->X.Amplitude = 0.5f; // 좌우
Perlin->Y.Amplitude = 0.3f; // 전후
Perlin->Z.Amplitude = 0.8f; // 상하 (호흡)
// 회전 셰이크 (미세한 틸팅)
Perlin->RotationAmplitudeMultiplier = 0.5f;
Perlin->Pitch.Amplitude = 0.3f; // 고개 끄덕임
Perlin->Yaw.Amplitude = 0.2f; // 좌우 회전
Perlin->Roll.Amplitude = 0.15f; // 기울기
RootShakePattern = Perlin;
}
};
자연스러운 핸드헬드 느낌을 위해 Z축(상하) 진폭을 가장 크게 설정합니다 (호흡 시뮬레이션). 주파수는 0.5~1.5Hz가 사람의 자연스러운 흔들림에 가깝습니다. Roll(기울기)은 극소량만 추가하면 효과적입니다.
시퀀서에서 셰이크 적용
Camera Shake 트랙 활용법
시퀀서에서 카메라 셰이크를 적용하는 방법은 두 가지입니다: Camera Shake 섹션으로 직접 추가하거나, Event 트랙에서 코드로 트리거하는 방식입니다.
방법 1: Camera Shake Source Actor
- 레벨에 Camera Shake Source Actor 배치
- 셰이크 소스의
CameraShake프로퍼티에 셰이크 클래스 할당 InnerAttenuationRadius,OuterAttenuationRadius로 감쇠 범위 설정- 시퀀서에서 셰이크 소스 액터를 트랙으로 추가하여 시간 제어
방법 2: C++ / Blueprint에서 직접 호출
// PlayerController를 통한 셰이크 재생
APlayerController* PC = GetWorld()->GetFirstPlayerController();
if (PC && PC->PlayerCameraManager)
{
PC->PlayerCameraManager->StartCameraShake(
UHandheldCameraShake::StaticClass(),
1.0f, // Scale (강도 배율)
ECameraShakePlaySpace::CameraLocal, // 카메라 로컬 공간
FRotator::ZeroRotator // 사용자 정의 재생 공간
);
}
// 셰이크 정지
PC->PlayerCameraManager->StopAllCameraShakes(true); // bImmediate
CameraLocal은 카메라 기준 상대 좌표로 셰이크합니다 (가장 일반적). World는 월드 좌표 기준, UserDefined는 사용자 지정 회전 기준입니다. 시네마틱에서는 보통 CameraLocal을 사용합니다.
카메라 애니메이션 기법
Post Process와 결합한 시각 효과
Post Process 볼륨 애니메이션
시퀀서에서 Post Process 관련 프로퍼티를 키프레임하여 시각적 연출을 강화할 수 있습니다. 카메라의 Post Process Settings 또는 레벨의 Post Process Volume을 활용합니다.
| 프로퍼티 | 효과 | 활용 예시 |
|---|---|---|
| Bloom Intensity | 밝은 영역 확산 | 꿈 시퀀스, 플래시백 |
| Vignette Intensity | 가장자리 어둡게 | 긴장감, 집중 유도 |
| Color Grading (LUT) | 전체 색감 변환 | 회상 장면, 분위기 전환 |
| Motion Blur Amount | 동작 흐림 | 고속 이동, 액션 씬 |
| Chromatic Aberration | 색수차 | 타격감, 데미지 피드백 |
| Scene Color Tint | 전체 색조 | 시간대 변환, 감정 표현 |
Camera Animation Sequence
USequenceCameraShake를 사용하면 별도의 Level Sequence를 카메라 셰이크 소스로 활용할 수 있습니다. 이 방식은 Perlin Noise보다 정밀한 키프레임 제어가 가능하며, 특정 타이밍에 맞춘 복잡한 카메라 흔들림을 구현할 때 유용합니다.
UCompositeCameraShakePattern으로 여러 셰이크를 레이어링하세요. 예: 기본 핸드헬드(Perlin, 저주파) + 폭발 충격(Wave, 고주파, 감쇠). 각 레이어의 강도를 시퀀서에서 독립적으로 제어할 수 있습니다.
핵심 요약
- UE5의 카메라 셰이크는 UCameraShakeBase 기반이며, Perlin Noise / Wave Oscillator / Sequence / Composite 패턴을 지원한다
- Perlin Noise는 유기적 움직임에 적합하며, 핸드헬드 효과에 가장 많이 사용된다
- 핸드헬드 효과는 Z축 진폭을 가장 크게(호흡), 주파수 0.5~1.5Hz로 설정한다
- 시퀀서에서 셰이크를 적용하려면 Camera Shake Source Actor 또는 Event 트랙을 사용한다
- Post Process 프로퍼티를 키프레임하여 Bloom, Vignette, Color Grading 등 시각 효과를 연출한다
- CompositeCameraShakePattern으로 여러 셰이크 패턴을 레이어링하여 복합 효과를 만든다
도전 과제
배운 내용을 직접 실습해보세요
Camera Shake 클래스를 생성하고 Duration, Amplitude, Frequency를 설정하세요. 시퀀서에서 폭발 시점에 Camera Shake를 트리거하는 Event Track을 추가하세요.
수동 키프레임 애니메이션과 셰이크를 블렌딩하여 현장감 있는 핸드헬드 느낌의 카메라 워크를 만드세요.
C++에서 캐릭터 이동 속도, 폭발 거리, 지형 충격에 따라 자동으로 셰이크 강도가 조절되는 프로시저럴 카메라 셰이크 시스템을 구현하세요.