Post Processing은, 게임화면이 최종출력되기 전에 Camera의 Image Buffer 에 삽입하는 추가 처리이다.
적은 노력으로 뛰어난 영상미를 구현할 수 있다.
유니티는 Post-processing Stack 패키지를 제공한다. v1과 v2 중 v2가 최신이니 v2를 사용한다.
렌더링경로추가
Main Camera의 Rendering Path를 Deffered로 변경한다.
-> 렌더링 처리순서와 방법을 결정하는 옵션인데, 기본값인 Forward Rendering 옵션은 가볍지만 라이팅표현이 간략하고 왜곡된다. 따라서 Deffered Shading 을 사용하여 빛을 온전하게 표현하기로 한다.
- Forward Rendering
- 각 오브젝트를 그릴 때마다 해당 오브젝트에 영향을 주는 모든 lighting도 함께 계산.
- 메모리사용량이 적고, 저사양에서도 잘 동작한다.
- 그러나 연산속도가 느리고, 오브젝트와 광원이 움직이거나 수가 많아질수록 연산량이 급증한다.
- 1개의 Game Object에 대해 4개까지의 광원만 제대로 개별연산한다. 따라서 라이팅 효과가 실제와 다르게 표현될 수 있다.
- Deffered Rendering
- Lighting 연산을 미뤄서(Deffered) 수행한다.
- 첫 번째 패스에서는, Object 매시를 그리되 라이팅계산/채색을 하지 않는다.
- 두 번째 패스에서 라이팅계산/채색을 한다.
- 광원개수 제한이 없다. 또한 모든 광원의 효과가 올바르게 표현된다.
- 단, MSAA같은 일부 Anti-aliasing(계단현상제거)가 제대로 지원되지 않아서 체크해제한다.
Post-Processing 적용
먼저 MainCamera에, Post-process Layer 컴포넌트를 추가한다.
Layer를 PostProcessing으로 변경한다.
Anti-Aliasing 모드를 FXAA로 변경한다.
그리고 MSAA는 Off한다.
- Post-process Layer는, Post-process Volume을 감지하고, 이것으로부터 설정을 얻어와 카메라에 적용한다.
- 그러나 모든 씬의 Game Object로부터 Post-process Volume을 찾으려고 한다면 성능에 악영향이 미치므로, 특정 Layer에 대해서만 Post Processing Volume을 감지하도록 한다. 지금의 경우, PostProcessing이라는 레이어를 가진 Game Object에 대해서만 Post Processing Volumen 을 감지하도록 처리하였다.
- FXAA는 전반적 품질은 낮지만 연산이 빠른 방식이다.
이제 Post Processing Volume을 추가하자.
Post-process Volume 게임오브젝트를 생성하고, Layer를 PostProcessing으로 변경하고, isGlobal을 체크한다.
Post-process Volume은 Trigger Collider과 함께 사용된다.
Post-process Volume 의 Trigger Collider과, Post-Process Layer의 Trigger 필드에 할당된 Game Object의 위치가 겹치면,해당 Post-process Volume의 효과가 Post-process Layer component를 거쳐서 카메라에 적용된다.
우리는 카메라 위치가 어디든지 일괄적으로 효과를 적용하고 싶다.
따라서, Post process volume component 의 isGlobal 을 체크하였다.
이렇게 하면, 위치와 상관없이 효과를 전역으로 사용하게 된다.
여기서, Post-process Volume 의 Profile에, 미리 제공된 Global Profile을 넣어보자.
적용한 Post Process Profile 은 사용할 효과목록을 기록한 프리세파일이다.
다음과 같은 설정이 있다.
- 모션블러: 고속이동시 잔상
- 블룸: 밝은 물체 경계에서 빛이 산란되는 효과(뽀샤시)
- 컬러그레이딩: 최종컬러/대비/감마 교정
- Chromatic Aberration: 독 중독같은 효과 -> 이미지의 경계가 번지고, 삼원색이 분리되는 효과
- Vignette: 화면 가장자리의 채도와 명도를 낮춤. 차분한 느낌에 사용.
- Grain: 화면에 노이즈입자 추가 -> 공포분위기
이제, BGM넣고 빌드하자.
BGM 넣고 빌드
GameManger에 Audio Source로 BGM 넣으면 된다. Loop을 체크하자.
인텔맥이라서 느린지, 한 4분쯤 걸렸다.
Future Work
- 멀티플레이어 구현(강의에 있는거 따라갈 예정)
- 체력바 땅에 붙어있는 버그 수정
'Development > Unity Engine' 카테고리의 다른 글
[Retro유니티] 아이템 생성기 및 Item 구현 (1) | 2024.12.29 |
---|---|
[Retro유니티] 적 생성기 (0) | 2024.12.29 |
[Retro유니티] HUD Canvas 및 GameManager.cs (0) | 2024.12.28 |
[Retro유니티] NavMesh를 통한 길찾기 구현 및 Enemy.cs 완성 (0) | 2024.12.28 |
[Retro유니티] PlayerHealth.cs 완성 (0) | 2024.12.25 |