
카메라와 포스트 프로세싱
Tutorial
Beginner
+10XP
20 mins
(148)
Unity Technologies

플레이어 캐릭터와 환경을 생성했으니 이제 게임에 활용할 카메라를 설정해 보겠습니다.
이 튜토리얼에서 배울 내용은 다음과 같습니다.
- Unity에서 Camera 컴포넌트를 살펴봅니다.
- 시네머신을 사용하여 가상 카메라를 설정합니다.
- 여러 종류의 포스트 프로세싱 효과를 추가합니다.
이 튜토리얼에서는 카메라 설정을 변경하여 시각적으로 흥미로운 게임을 구현해 봅니다.
Languages available:
1. Camera 컴포넌트 살펴보기
이전 튜토리얼에서는 게임의 레벨을 생성했습니다. 이제 캐릭터는 씬을 돌아다닐 수 있지만, 때로는 캐릭터가 카메라를 벗어나기도 합니다. 이 튜토리얼에서는 카메라 설정을 조정하여 캐릭터가 카메라 밖으로 벗어나지 않도록 합니다.
Unity의 씬은 여러 컴포넌트가 연결된 게임 오브젝트로 구성되어 있습니다. 플레이어가 씬을 보는 방식 역시 동일한 방식으로 구성됩니다.
씬을 보려면 씬의 게임 오브젝트가 Camera 컴포넌트를 반드시 포함하고 있어야 합니다. 새로운 씬이 생성되면 Camera 컴포넌트가 포함된 Main Camera 게임 오브젝트가 추가됩니다.
카메라는 게임 오브젝트의 z축을 따라 향하며 다른 게임 오브젝트와 동일하게 작동합니다. 씬 뷰에서 카메라의 절두체를 나타내는 기즈모를 확인할 수 있습니다. 절두체는 피라미드 모양에서 상단을 바닥과 평행하게 잘라낸 모양을 나타냅니다. 이 모양은 원근 카메라로 보이고 렌더링되는 영역과 같습니다.
게임을 제작할 때 카메라가 플레이어 캐릭터를 따라가도록 하는 몇 가지 옵션이 있는데, 그중에는 스크립트를 작성하는 방법도 있습니다. 그러나 Unity에는 해당 문제를 해결해 주는 빌트인 솔루션인 시네머신이 포함되어 있습니다.
2. 시네머신은 어떻게 작동할까요?
시네머신은 게임 내 카메라에 관련된 모든 것을 다룹니다. 이 시스템의 기본 개요는 다음과 같습니다.
- 씬에서 하나 이상의 가상 카메라를 생성합니다.
- 이러한 가상 카메라는 Cinemachine Brain 컴포넌트에서 관리합니다.
- Cinemachine Brain 컴포넌트는 Camera 컴포넌트가 포함된 게임 오브젝트에 연결되며, 기본적으로 이는 Main Camera 게임 오브젝트가 됩니다.
- Cinemachine Brain에서 모든 가상 카메라를 관리하며 실제 카메라가 어떤 가상 카메라(혹은 가상 카메라의 조합)를 따라야 하는지를 결정합니다.
이 게임에서는 카메라가 JohnLemon만 따라가므로 하나의 가상 카메라만 필요합니다. 이 가상 카메라가 JohnLemon을 따라가는지, 그리고 Main Camera 게임 오브젝트가 여기에 잘 연결되는지 확인해야 합니다.
3. 시네머신을 사용하여 가상 카메라 설정
시네머신을 사용하여 가상 카메라를 설정하는 방법은 다음과 같습니다.
프로젝트 창에서 Assets > Scenes로 이동하여 MainScene을 더블 클릭합니다.
1. 계층 구조에서 JohnLemon 게임 오브젝트를 선택합니다.
2. 커서를 씬 창 위로 이동하고 F 키를 누릅니다.
3. 상단의 메뉴에서 Cinemachine > Create Virtual Camera로 이동합니다.
이렇게 하면 새로운 게임 오브젝트인 CM vcam1이 씬에 생성됩니다.
CM vcam1은 씬 창 카메라의 초점에 맞춰 생성되므로 JohnLemon 오브젝트의 바로 위에 생성됩니다. 하지만 이제 씬에 있는 가상 카메라로 인해 게임 창의 뷰가 옮겨졌으므로 더는 게임 창에서 JohnLemon을 볼 수 없습니다.
이를 해결하려면 Cinemachine Virtual Camera 컴포넌트 설정을 변경하여 가상 카메라가 캐릭터를 추적하도록 해야 합니다.
4. Cinemachine Virtual Camera 컴포넌트 설정 변경
가상 카메라가 JohnLemon을 추적하도록 설정하는 방법은 다음과 같습니다.
1. 계층 구조에서 CM vcam1을 선택합니다.
2. 인스펙터에서 Cinemachine Virtual Camera 컴포넌트를 찾습니다. 이 컴포넌트에는 많은 설정이 있지만, 현재는 세 가지 섹션(타겟 레퍼런스, 바디 및 목표)에만 중점을 두면 됩니다.
타겟 레퍼런스 섹션에는 Follow 및 Look At의 두 가지 설정이 있습니다. 이 설정은 게임 오브젝트의 Transform 컴포넌트에 대한 레퍼런스 옵션입니다.
가상 카메라를 이동하려면 가상 카메라의 이동 방법을 설정해야 합니다. 구체적으로 말하면, 가상 카메라는 따라가야 하는 트랜스폼 정보가 필요합니다. 마찬가지로 가상 카메라를 회전하려면 가상 카메라가 무엇을 보기 위해 회전해야 하는지를 설정해야 합니다.
다음 섹션은 Body 및 Aim의 두 가지 섹션입니다. 두 섹션은 각각 카메라의 이동 방법과 회전 방법을 설정합니다. 가상 카메라의 이동을 제한하여, 가상 카메라가 JohnLemon을 항상 시야에 두지만 실질적으로 캐릭터를 보지는 않도록 하겠습니다.
3. Aim 섹션에서 오른쪽 상단의 드롭다운 메뉴를 Composer에서 Do Nothing으로 변경합니다.
4. JohnLemon 게임 오브젝트를 계층 창에서 Cinemachine Virtual Camera 컴포넌트의 Follow 프로퍼티로 드래그 앤 드롭합니다. 이렇게 하면 Follow 설정이 JohnLemon의 트랜스폼을 참조하도록 변경됩니다.
5. Body 섹션에서 오른쪽 상단의 드롭다운을 Transposer에서 Framing Transposer로 변경합니다. Body를 Framing Transposer로 변경하면 화면에서 Follow 타겟의 위치에 관한 규칙을 지정하여 가상 카메라의 위치를 관리할 수 있습니다.
다양한 Body 설정 값을 자세히 알아보려면 시네머신 기술 자료를 확인하시기 바랍니다(상단의 메뉴 바에서 Cinemachine > About으로 이동).
이제 게임 창에 빨간색 상자와 파란색 상자가 몇 개 표시됩니다. 이 박스들은 화면에서 타겟이 있을 수 있는 위치를 알려 줍니다.
6. 이제 가상 카메라를 적절한 각도로 설정해 보겠습니다. 계층 구조에서 CM vam1 게임 오브젝트를 선택합니다. CM vam1 게임 오브젝트의 Transform 컴포넌트에서 x축을 기준으로 Rotation을 45로 설정합니다.
이제 가상 카메라가 기울어져 캐릭터를 위에서 내려다봅니다. 대략적으로 아래와 같이 보이면 됩니다. 회전 값만 변경했을 뿐인데 가상 카메라가 이동한 이유는 무엇일까요? 이것이 바로 시네머신의 기능입니다.
위에서 내려다보는 각도로 변경했을 때, 가상 카메라는 아래로 기울인 상태에서 화면에 타겟이 보이려면 더 높은 곳에 위치해야 한다는 것을 스스로 계산합니다.
7. 프레이밍 트랜스포저의 기본 설정은 대체로 그대로 사용할 수 있습니다. 여기서는 Camera Distance 설정만 변경하면 됩니다. 이는 화면에서 캐릭터가 너무 작게 나타나는 경우 가상 카메라를 더 가까이 이동하기 위해 사용하는 설정입니다.
Camera Distance 설정을 10에서 8로 변경합니다.
8. 계층 구조에서 CM vcam1을 선택하고 이름을 VirtualCamera로 변경합니다.
9. VirtualCamera 게임 오브젝트를 선택 해제하여 게임 창에서 가이드라인을 삭제합니다.
10. 상단의 메뉴에서 File > Save Scene으로 이동하거나 Ctrl+S(Windows) 또는 CMD+S(macOS)를 눌러 씬을 저장합니다.
11. 툴바에서 플레이 버튼을 클릭하고 지금까지 만든 게임을 테스트합니다. 테스트를 완료하면 다시 한번 플레이 버튼을 클릭합니다.
이제 가상 카메라 이동 설정을 완료했습니다. 카메라에 시각적 효과를 추가하면 게임을 더 재미있게 만들 수 있습니다.
5. 포스트 프로세싱 효과 추가
포스트 프로세싱이란 사진에 필터를 적용하듯이 게임 이미지를 화면에 렌더링하기 전에 필터 및 효과를 적용하는 작업입니다. 이 튜토리얼 섹션에서는 포스트 프로세싱의 작동 방식을 살펴본 다음 이를 게임에 적용합니다.
Unity에서 포스트 프로세싱이 작동하는 방식
일반적으로 포스트 프로세싱 효과는 그룹화되어 게임 월드에서 다양한 영역에 사용됩니다. 즉, 카메라가 특정 영역을 비추고 있을 때, 지정된 프로세스의 조합이 이미지에 적용됩니다.
예를 들어 어두운 방 안에서 문을 통과해 밝은 곳으로 걸어 나온다고 가정해 보겠습니다. 방에서 나오면 눈이 밝은 곳에 적응하는 데 시간이 걸리며, 모든 것이 평소보다 더 밝게 보입니다. Unity에서는 방 안과 밖에 서로 다른 포스트 프로세스 그룹을 적용하여 이러한 상황을 시뮬레이션할 수 있습니다. 포스트 프로세스의 그룹은 Post-processing Profile이라 불리는 에셋이며, 프로필이 할당된 게임 월드의 영역은 Post Process Volumes라고 하는 컴포넌트입니다.
카메라마다 서로 다른 포스트 프로세스가 포함될 때도 있습니다. 특정 카메라에 프로세스 조합을 연결하려면 Post Process Layer 컴포넌트를 Camera 컴포넌트가 포함된 게임 오브젝트에 추가합니다. 레이어를 사용하면 동작별로 게임 오브젝트를 구성할 수 있습니다.
Unity의 포스트 프로세싱에 대해 더 알아보기
이 튜토리얼에서는 Unity 에디터에서 특정 포스트 프로세싱 효과를 추가하기 위한 단계별 지침을 제공합니다. 포스트 프로세싱 효과에 대해 더 자세히 배우려면 아래 정보를 확인하시기 바랍니다.
6. 포스트 프로세싱 레이어 생성
포스트 프로세싱 레이어를 생성하는 방법은 다음과 같습니다.
1. 계층 구조에서 Main Camera 게임 오브젝트를 선택합니다.
2. 인스펙터에서 게임 오브젝트의 이름 아래 Layer 프로퍼티를 찾습니다.
하나의 게임 오브젝트는 하나의 레이어에만 속할 수 있습니다. Main Camera는 Default 레이어에 있습니다. 기본적으로 Unity에서 몇 가지 옵션을 제공하지만, Tags & Layers 관리자에서 나만의 레이어를 만들 수도 있습니다.
3. Layer 프로퍼티 드롭다운에서 Add Layer…를 선택합니다.
4. Tags & Layers 관리자에는 Layer 0에서 Layer 31까지 사용 가능한 32가지의 레이어가 있습니다.
처음 8개의 레이어(Layer 0~Layer 7)는 Unity의 기본 레이어이며, 나머지 24개의 레이어는 필요에 따라 사용할 수 있습니다. 포스트 프로세스 볼륨에 활용할 레이어가 필요하므로, 모든 포스트 프로세스 볼륨용 레이어를 생성합니다.
5. "PostProcessingVolumes"를 User Layer 8로 추가합니다.
6. 계층 구조에서 Main Camera 게임 오브젝트를 선택합니다. Main Camera 게임 오브젝트는 여전히 Default 레이어에 있습니다.
이는 Main Camera를 새 레이어에 다시 할당하지 않았기 때문입니다.
7. Post Process Layer 컴포넌트를 Main Camera에 추가합니다.
8. 드롭다운 메뉴를 사용하여 Layer 프로퍼티를 Nothing에서 PostProcessingVolumes로 변경합니다.
7. 안티앨리어싱을 통해 이미지 품질 개선
볼륨 및 프로필 설정으로 넘어가기 전에 빠르게 안티앨리어싱에 대해 짚고 넘어가겠습니다.
앨리어싱은 오브젝트의 가장자리가 거칠어 보이고 픽셀의 외곽선이 보이는 현상입니다.
안티앨리어싱이란 포스트 프로세싱 효과로, 중간 색조의 픽셀로 거친 선 주위를 에워싸서 울퉁불퉁한 선이 눈에 띄지 않도록 합니다. 어떤 픽셀이 얼마나 조정이 필요한지 유추하는 여러 가지 알고리즘이 있으며, 이 튜토리얼에서는 그중 가장 간단하고 효과적인 알고리즘을 사용하겠습니다.
1. 이 섹션에서 변경한 내용을 확인할 수 있도록 게임 뷰가 잘 보이는 상태여야 합니다.
2. Post Process Layer 컴포넌트에서 Mode 프로퍼티 드롭다운을 No Anti-aliasing에서 Fast Approximate Anti-aliasing(FXAA)으로 변경합니다.
3. 드롭다운 아래의 Fast Mode 체크박스를 활성화합니다.
이제 JohnLemon이 훨씬 깔끔해 보입니다.
포스트 프로세스 레이어를 제대로 설정했으니 볼륨 생성으로 넘어가 보겠습니다.
8. 포스트 프로세싱 볼륨 생성
포스트 프로세싱 볼륨을 생성하는 방법은 다음과 같습니다.
1. 계층 창에서 Create > Create Empty로 이동합니다.
2. 새 게임 오브젝트의 이름을 “GlobalPost”로 지정합니다.
3. 인스펙터에서 레이어를 PostProcessingVolumes로 설정합니다.
4. Transform 컴포넌트의 Position 프로퍼티를 (0, 0, 0)으로 변경합니다. 이 게임 오브젝트가 글로벌 포스트 프로세스 볼륨이 됩니다. 글로벌 볼륨은 영향을 받는 카메라에 대한 기본 프로필로 작용합니다. 기타 비글로벌 볼륨은 글로벌 볼륨의 효과를 오버라이드할 수 있지만, 지금 이 게임에는 추가 볼륨이 필요하지 않습니다.
5. GlobalPost에 Post Process Volume 컴포넌트를 추가합니다.
6. Is Global 체크박스를 활성화합니다.
7. Profile 프로퍼티의 맨 오른쪽에 있는 New 버튼을 클릭합니다. 이를 통해 새로운 포스트 프로세싱 프로필이 생성됩니다. 새로운 프로필의 에셋은 Assets > Scenes의 MainScene_Profiles라는 이름의 새 폴더에 저장됩니다.
8. 프로필이 설정되었으므로 Post Process Volume 컴포넌트에서 사용 가능한 더 많은 설정을 확인할 수 있습니다.
Overrides 하위 섹션은 카메라의 일반적인 렌더링 방식을 오버라이드할 수 있는 다양한 효과를 나타냅니다. 기본적으로 프로필에는 효과가 포함되어 있지 않아서 Overrides 하위 섹션에는 아무것도 표시되지 않습니다.
9. 컬러 그레이딩 효과 추가
컬러 그레이딩 효과를 추가하는 방법은 다음과 같습니다.
1. Add effect… 버튼을 클릭하고 Unity > Color Grading을 선택합니다.
컬러 그레이딩은 렌더링된 뷰의 밝기, 콘트라스트 및 컬러를 변경할 수 있는 방법입니다. 사진 편집 소프트웨어 또는 Instagram에서 필터를 적용하는 것과 같다고 생각하면 됩니다. 공포스러운 분위기를 연출하기 위해서 렌더링된 뷰의 컬러 및 밝기 레벨을 조정합니다.
참고: 이 컴포넌트 내의 설정은 프로필 에셋에 대한 간편 설정입니다. Overrides 하위 섹션에 대한 모든 변경 사항은 프로필 에셋만 변경하고, 컴포넌트에는 직접적인 영향을 주지 않습니다.
2. 해당 설정을 펼치려면 Color Grading 옆의 화살표를 선택합니다.
3. 우선 씬에 톤 매핑을 적용해야 합니다. 톤 매핑은 조명 및 그림자를 훨씬 손쉽게 관리하도록 최종 렌더링된 프레임의 출력을 변경합니다.
Tonemapping 하위 섹션에서 Mode 체크박스를 활성화합니다. 드롭다운 메뉴를 사용하여 프로퍼티를 None에서 ACES로 변경합니다. ACES 톤 매핑은 업계 표준 방식으로 이를 통해 프로젝트를 더욱 영화처럼 보이도록 할 수 있습니다.
4. 이제 씬이 매우 어두워 보입니다. 이는 ACES의 기본 노출이 0이기 때문입니다(자세한 내용은 기술 자료를 참조). 이를 해결하려면 사후 노출 기능을 사용하면 됩니다. 사후 노출은 기본 노출을 조정합니다.
Tone 하위 섹션에서 Post-exposure (EV) 체크박스를 활성화합니다. 씬의 밝기를 복구하려면 값을 1로 설정합니다.
5. 일부 컬러를 변경하여 씬을 더 무섭게 연출할 수도 있습니다. Color Grading 섹션의 중간 부분에서 Trackballs라는 컬러 휠을 찾습니다.
6. 각 트랙볼 아래의 Lift, Gamma 및 Gain 체크박스를 활성화합니다.
Lift는 그림자의 컬러에 영향을 주고, Gain은 가장 밝은 하이라이트를 변경하며 Gamma는 이미지의 중간(혹은 중간 범위) 컬러에 대한 모든 부분을 다룹니다.
7. 트랙볼 중앙의 원을 드래그하여 게임 뷰에서 보이는 컬러를 약간 조정합니다. 드래그해서 조정할 대상은 다음과 같습니다.
- Lift와 Gamma 트랙볼을 파란색 쪽으로 약간만 드래그합니다.
- Gain 트랙볼을 노란색 쪽으로 약간만 드래그합니다.
이를 통해 그림자에는 깊이감을, 조명에는 따뜻한 느낌을 추가할 수 있습니다.
8. Color Grading 효과 섹션을 접습니다.
10. 블룸 효과 추가
전보다 광원이 훨씬 더 효과적이지만, 아직 실제 광원처럼 보이지는 않습니다. 블룸 효과를 추가하면 광원에 멋지게 빛나는 효과를 줄 수 있습니다.
1. Add effect… 버튼을 클릭하고 Unity > Bloom을 선택합니다. Bloom 효과 섹션을 펼칩니다.
2. 섹션 제목 바로 아래의 All 바로가기를 선택하여 블룸에 대한 전체 설정을 활성화할 수 있습니다. 현재는 Intensity가 높지 않기 때문에 빛나는 물체가 없습니다.
3. Intensity 프로퍼티를 2.5로 설정하여 광원에 환하게 빛나는 효과를 생성합니다.
4. 다른 밝은 오브젝트도 빛나는 효과를 약간 더해 더 멋지게 보이도록 만들 수도 있습니다. Threshold 프로퍼티를 사용하여 오브젝트에 블룸 효과를 추가할 수 있습니다. 이 값을 낮추면 효과에 덜 밝은 픽셀을 추가합니다.
Threshold를 0.75로 설정하여 씬에 빛나는 효과를 조금 더 추가합니다.
5. Bloom 효과 섹션을 접습니다.
11. 앰비언트 오클루전 효과 추가
현재는 광원이 밝지만 유령의 집에 맞는 무서운 분위기를 위해 효과를 추가해야 합니다. 앰비언트 오클루전 효과를 활용하면 구석 및 좁은 틈을 어둡게 할 수 있습니다. 실제 광원이 좁은 구석까지 닿지 않는 것처럼 앰비언트 오클루전은 구석을 어둡게 하는 효과를 줍니다.
이 효과를 추가하는 방법은 다음과 같습니다.
1. Add effect… 버튼을 클릭하고 Unity > Ambient Occlusion을 선택합니다. Ambient Occlusion 효과 섹션을 펼칩니다.
2. Ambient Occlusion의 All 바로가기를 클릭하여 필요한 기능을 모두 활성화합니다.
3. 블룸 효과를 적용했던 방식과 같이 여기서도 Intensity를 설정해야 합니다. Intensity 프로퍼티를 0.5로 설정하면 구석에 아주 으스스한 그림자가 생성됩니다.
4. Thickness Modifier를 사용하여 방 전체에 효과를 분산할 수도 있습니다. Thickness Modifier 프로퍼티를 3.5로 설정합니다.
이제 씬의 일부 프랍 뒤에 어둑어둑한 효과가 분산된 것을 볼 수 있습니다.
5. Ambient Occlusion 효과 섹션을 접습니다.
12. 비네트 효과 추가
일부 효과는 실제 카메라가 씬을 비추는 방식을 모방합니다. 여기에서 소개하는 마지막 몇 가지 효과는 기존에 카메라 렌즈가 작동하는 방식을 변경합니다. 먼저 비네트(Vignette) 효과를 추가하여 카메라 렌즈 자체의 가장자리 부분을 어둡게 하겠습니다. 이를 통해 플레이어에게 초점을 맞추고 게임에서 조금 더 밀실의 공포감을 느끼도록 연출할 수 있습니다.
이 효과를 추가하는 방법은 다음과 같습니다.
1. Add effect… 버튼을 클릭하고 Unity > Vignette를 선택합니다. Vignette 효과 섹션을 펼칩니다.
2. Vignette의 All 바로가기를 클릭하여 필요한 기능을 모두 활성화합니다.
3. 블룸 효과 및 앰비언트 오클루전 효과에서와 동일하게 비네트 효과에서도 Intensity를 설정해야 합니다. 이는 화면 전반에 효과를 얼마나 분산할 것인지를 결정합니다. Intensity 프로퍼티를 0.5로 설정합니다.
4. 평활도를 높여 더욱 밀실의 느낌을 불러일으키고 공포감을 증가시킬 수 있습니다. Smoothness 프로퍼티는 화면 중앙을 향해 효과가 점점 사라지는 거리를 지정합니다. Smoothness 프로퍼티를 0.3으로 설정합니다.
5. Vignette 효과 섹션을 접습니다.
13. 렌즈 왜곡 효과 추가
마지막으로 추가할 효과는 바로 렌즈 왜곡 효과입니다. 이 효과는 최종 렌더링된 프레임을 왜곡하여 마치 스파이 카메라를 통해 게임 화면을 보고 있는 것처럼 만들어 줍니다.
이 효과를 추가하는 방법은 다음과 같습니다.
1. Add effect… 버튼을 클릭하고 Unity > Lens Distortion을 선택합니다. Lens Distortion 효과 섹션을 펼칩니다.
2. Lens Distortion의 All 바로가기를 클릭하여 필요한 기능을 모두 활성화합니다.
3. 다른 효과와 마찬가지로 Intensity는 효과의 강도를 조절합니다. Intensity 슬라이드를 앞뒤로 조절하여 효과가 어떻게 적용되는지 확인해 보세요. 그다음 Intensity 프로퍼티를 35로 설정합니다.
4. 이 효과를 사용하면 때때로 왜곡된 이미지로 인해 화면의 가장자리에 시각적인 글리치(glitch)가 생길 수도 있습니다. 이때는 렌더링된 프레임을 약간만 확대하여 뷰에서 해당 글리치가 보이지 않도록 할 수 있습니다.
Scale 프로퍼티를 1.1로 설정하여 해결합니다.
5. 씬을 저장합니다.
이제 포스트 프로세싱을 완료했습니다.
14. 요약
이 튜토리얼에서는 카메라의 이동 방법을 비롯하여 게임이 전문적으로 보이도록 비주얼을 변경하는 등 시각적인 부분을 중점적으로 다뤘습니다. 두 장면을 비교해 보세요.
전:
후:
다음 튜토리얼에서는 게임의 UI(사용자 인터페이스)를 탐색하고 게임의 엔딩을 제작하겠습니다.