Development/Unity Engine

[Retro유니티] PostProcessing과 최종빌드

사이바 미도리 2024. 12. 29. 15:20

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

  • 멀티플레이어 구현(강의에 있는거 따라갈 예정)
  • 체력바 땅에 붙어있는 버그 수정