Version: 2018.1
모니터
HDR 렌더링

포스트 프로세싱 효과 작성

포스트 프로세싱은 Unity에서 렌더링된 이미지에 효과를 적용하는 방법입니다.

OnRenderImage 함수를 사용하는 모든 Unity 스크립트는 포스트 프로세싱 효과를 낼 수 있습니다. 포스트 프로세싱을 수행하는 스크립트를 카메라 게임 오브젝트에 추가합니다.

OnRenderImage 함수

OnRenderImage Unity 스크립팅 API 함수는 두 개의 인수를 받습니다.

  • RenderTexture인 소스 이미지

  • 렌더링되어야 할 대상(RenderTexture와 같은)

포스트 프로세싱 효과는 셰이더를 사용하는 경우가 많은데 이 효과는 소스 이미지를 읽고 이미지에 대한 산출을 수행하고 그 결과를 대상으로 렌더링합니다(예를 들어, Graphics.Blit 사용). 포스트 프로세싱 효과는 대상의 모든 픽셀을 완전히 대체합니다.

카메라는 각각 컴포넌트로 여러 포스트 프로세싱 효과를 가질 수 있습니다. Unity는 먼저 렌더링된 인스펙터 상단에 있는 포스트 프로세싱 컴포넌트가 있는 인스펙터에 나열된 순서대로 스택으로 이를 실행합니다. 이 상황에서 첫 번째 포스트 프로세싱 컴포넌트의 결과는 “원본 이미지”로 다음 포스트 프로세싱 컴포넌트에 전달됩니다. 내부적으로 Unity는 이러한 중간 결과를 유지하기 위해 하나 이상의 임시 렌더링 텍스처를 만듭니다.

포스트 프로세싱 스택의 포스트 프로세싱 컴포넌트 리스트에는 적용되는 순서가 지정되어 있지 않는다는 점에 유의하십시오.

유의할 점은 다음과 같습니다.

  • 대상 렌더 텍스처는 “화면에 렌더링하는 것”(즉, 백 버퍼)을 의미하는 null일 수 있는데 카메라의 마지막 포스트 프로세싱 효과에서 발생합니다.

  • OnRenderImage가 완료되면 대상 렌더 텍스처가 사용 중인 렌더 타겟이 됩니다. 즉, 일반적으로 Graphics.Blit 또는 대상 텍스처로의 수동 렌더링이 마지막 렌더링 동작이 되어야 합니다.

  • 포스트 프로세싱 효과 셰이더에서 뎁스 버퍼 쓰기 및 테스트를 끕니다. 이렇게 해야 Graphics.Blit이 의도하지 않은 값을 대상 Z 버퍼에 쓰지 않게 됩니다. 거의 모든 포스트 프로세싱 셰이더 패스는 Cull Off ZWrite Off ZTest Always 상태를 포함해야 합니다.

  • 오리지널 씬 렌더링의 스텐실이나 뎁스 버퍼 값을 사용하려면 Graphics.SetRenderTarget을 사용하여 오리지널 씬 렌더의 뎁스 버퍼를 뎁스 타겟으로 명시적으로 바인딩합니다. 첫 번째 소스 이미지 이펙트 뎁스 버퍼를 뎁스 버퍼로 전달하여 바인딩합니다.

불투명한 포스트 프로세싱 효과 작성

기본적으로 Unity는 전체 씬을 렌더링한 후 포스트 프로세싱 효과를 실행합니다. 경우에 따라 씬에서 불투명한 오브젝트를 모두 렌더링한 다음 포스트 프로세싱 효과를 렌더링하는 것을 선호할 수도 있겠지만, 예를 들어, 스카이박스 또는 투명도와 같은 다른 것을 렌더링하기 전에 수행해야 합니다. 피사계심도와 같은 뎁스 기반의 효과는 이를 자주 사용합니다.

이렇게 하려면 OnRenderImage Unity 스크립팅 API 함수에 ImageEffectOpaque 속성을 추가합니다.

플랫폼별 텍스처(Texture) 좌표

포스트 프로세싱이 다른 화면 관련 텍스처를 한 번에 샘플링하는 경우 다른 플랫폼에서 텍스처 좌표를 사용하는 방법을 알아야 할 수도 있습니다. 일반적인 시나리오는 안티앨리어싱 설정에 따라 효과 “원본” 텍스처와 카메라의 뎁스 텍스처가 서로 다른 수직 좌표를 필요로 한다는 것입니다. 자세한 내용은 Unity 사용자 매뉴얼 플랫폼 차이점 페이지를 참조하십시오.

관련 주제

  • 뎁스 텍스처는 화면의 각 픽셀에 대해 가장 가까운 불투명 표면까지의 거리를 얻기 위해 이미지 포스트 프로세싱에 자주 사용됩니다.

  • HDR 렌더링의 경우 ImageEffectTransformsToLDR 속성은 톤 매핑 사용을 나타냅니다.

  • 커맨드 버퍼를 사용하여 포스트 프로세싱을 수행할 수도 있습니다.

  • RenderTexture.GetTemporary를 사용하여 임시 렌더 텍스처를 얻고 포스트 프로세싱 효과에서 산출을 수행합니다.

  • Unity 매뉴얼의 셰이더 프로그램 작성 페이지를 참조하십시오.


  • 2017–05–24 편집 리뷰 없이 페이지 게시됨

  • Unity 5.6의 새로운 기능

모니터
HDR 렌더링