포워드 셰이딩 렌더러

포워드 셰이딩 렌더러를 사용하여 VR 퍼포먼스를 향상시키는 법입니다.

Windows
MacOS
Linux

기본적으로 언리얼 엔진 4 는 Deferred Renderer (디퍼드 렌더러)를 사용하는데, 유연성이 높고 보다 많은 렌더링 기능을 소화할 수 있기 때문입니다. 하지만 그에 따르는 디퍼드 렌더러의 단점으로 인해 모든 VR 체험에 적합하지는 않을 수도 있습니다. Forward Rendering (포워드 렌더링)은 보다 빠른 렌더링 패스로 보다 빠른 기반을 제공하기에 VR 플랫폼에서 더 나은 퍼포먼스를 보일 수 있습니다. 포워드 렌더링은 빠를 뿐만 아니라, 디퍼드 렌더러보다 나은 안티에일리어싱 옵션이 제공되어 보다 산뜻한 비주얼을 낼 수 있습니다.

포워드 셰이딩 켜기

포워드 셰이딩 렌더러를 켜려면:

  1. 편집 메뉴에서 프로젝트 세팅 을 엽니다.

  2. 왼편의 렌더링 탭을 선택하고 Forward Shading (포워드 셰이딩) 카테고리를 찾습니다.

  3. Forward Shading (포워드 셰이딩) 옵션을 켭니다.

EnableForwardShading.png

에디터를 재시작하겠냐고 묻는 창이 뜨는데, 재시작 후에는 포워드 렌더러 옵션과 기능을 사용할 수 있습니다.

멀티샘플 안티에일리어싱 켜기

멀티샘플 안티에일리어싱(MSAA)을 사용하려면:

  1. 편집 메뉴에서 프로젝트 세팅 을 엽니다.

  2. 왼편의 렌더링 탭을 선택하고 Default Settings (기본 세팅) 카테고리를 찾습니다.

  3. Anti-Aliasing Method (안티에일리어싱 메서드) 프로퍼티를 MSAA 로 변경합니다.

EnableMSAA.png

포워드 렌더러는 대부분의 경우 MSAA 와 템포럴 안티에일리어싱(TAA) 둘 다 지원합니다만, 지오메트리와 스페큘러의 계단현상을 제거해 주므로 TAA 가 낫습니다. 하지만 VR 에서는, 헤드 트래킹으로 인한 서브 픽셀의 지속적인 움직임으로 인해 원치않는 블러 현상이 생기므로, MSAA 쪽이 낫습니다. MSAA 를 사용하는 프로젝트는 MSAA 를 사용하여 콘텐츠를 만들어야 스페큘러 계단현상이 줄어들 것입니다. 추가적으로 Normal to Roughness (노멀을 러프니스로) 기능을 통해 디테일 노멀 맵과 자동 LOD 생성에서 발생되는 스페큘러 계단현상을 줄일 수 있는데, 스태틱 메시가 원거리의 메시에 있는 것들을 평탄화시켜 작은 트라이앵글에서의 계단현상을 줄이는 데 도움이 되기 때문입니다.

저희 쪽의 테스트에서, TAA 대신 MSAA 를 사용하니 GPU 프레임 시간이 약 25% 향상되었습니다 (실제 비용은 콘텐츠에 따라 다릅니다).

아래는 템포럴 AA 와 2X MSAA 의 효과 비교 예제입니다.

템포럴 AA

4X MSAA

r.MSAACount 콘솔 변수를 사용하여 모든 픽셀마다 MSAA 샘플을 몇이나 계산할지 조절할 수 있습니다. r.MSAACount 1 는 MSAA 를 끕니다. r.MSAACount 0 을 할당하면 템포럴 AA 로 예비 전환되므로, 안티에일리어싱 메서드를 편하게 전환할 수 있습니다.

퍼포먼스 및 기능

디퍼드 렌더러에서 포워드 렌더러로 전환하면 프로젝트의 퍼포먼스가 향상될 수 있습니다.

포워드 렌더러는 콘텐츠에 따라 디퍼드 렌더러보다 빠를 수 있습니다. 대부분의 퍼포먼스 향상은 머티리얼 단위로 끌 수 있는 기능에서 옵니다. 기본적으로는 머티리얼에서 하이 퀄리티 리플렉션을 선택하지 않는 한 가장 가까운 캡처만 시차 보정 없이 적용하고, 하이트 포그는 버텍스 단위로 계산하며, 플레이너 리플렉션은 그 옵션을 켠 머티리얼에만 적용합니다.

ForwardShading.png

이러한 옵션을 에픽의 VR 게임 신작 "로보 리콜"에서 활용했더니, NVIDIA 970 GTX 에서 디퍼드 렌더러보다 포워드 렌더러가 약 22% 빨랐습니다.

ExampleImage.png

포워드 렌더러 작동 방식은 라이트와 리플렉션 캡처를 컬링하여 프러스텀 스페이스 그리드에 넣습니다. 그런 다음 포워드 패스의 각 픽셀에 대해 영향을 끼치는 라이트와 리플렉션 캡처를 대상으로 반복처리하여, 머티리얼을 공유하는 것입니다. 스테이셔너리 라이트에 대한 다이내믹 섀도는 미리 계산하여 스크린 스페이스 섀도 마스크의 채널에 패킹해 넣는데, 이는 스테이셔너리 라이트는 4 개까지만 겹칠 수 있다는 한계 때문입니다.

게임을 디퍼드 렌더러에서 포워드 렌더러로 전환할 때의 퍼포먼스를 측정하려면 언리얼 엔진의 퍼포먼스와 프로파일링 툴을 사용하세요. 구체적으로 어디에 GPU 비용이 드는지에 대해서는 GPU 프로파일링 , 프로파일링 관련 지원은 Stat Commands 문서를 참고하세요.

현재 지원되는 기능

현재 포워드 렌더러에서 지원되는 기능은 다음과 같습니다:

  • 스테이셔너리 라이트 완벽 지원, 무버블 오브젝트의 동적 그림자와 미리 계산한 배경 그림자의 자연스러운 블렌딩

  • 시차 보정을 포함한 다중 리플렉션 캡처 블렌딩

  • 씬의 일부분에 대한 플레이너 리플렉션이 리플렉션 캡처에 합성

  • DBuffer 데칼

  • 프리컴퓨티드 비저빌리티 및 스카이 라이트

  • 그림자 없는 무버블 라이트 개수 무제한

  • 캡슐 섀도

  • 마스크드 머티리얼에 대한 알파-투-커버리지

  • 인스턴스드 스테레오 호환

  • 그림자를 드리우는 무버블 라이트 최대 4 중첩

  • 그림자를 드리우는 라이트에 라이트 함수

알려진 문제점 & 잦은 질문

포워드 렌더러에서 아직 지원되지 않는 기능은 다음과 같습니다:

  • 스크린 스페이스 기법 (SSR, SSAO, 컨택트 섀도)

  • 반투명에 동적 그림자

  • 스테이셔너리 라이트에서 배경 그림자를 받는 반투명

  • D-Buffer 데칼 및 모션 블러

포워드 렌더러의 실험단계 버전 사용시 발생할 수 있는 질문/문제점은 다음과 같습니다.

  • 포워드 렌더러로 전환할 때 제 머티리얼이 깨지는데, GBuffer 씬 텍스처 관련해서 무언가 있나요?

    • GBuffer 액세스는 포워드 렌더러에서의 텍스처 샘플링에 사용할 수 없으며, 디퍼드 렌더러에서만 사용할 수 있습니다.

  • 포워드 렌더러에서 디퍼드 렌더러보다 텍스처 샘플을 적게 하는 것이 가능한가요?

    • 포워드 랜더러는 모든 기능을 하나의 셰이더에 패킹하므로 머티리얼에서 사용할 수 있는 텍스처 샘플이 적습니다.

    • 보통 이 문제는 공유 샘플러를 사용하여 해결할 수 있습니다.

  • MSAA 가 애트머스페릭 포그에 대한 샘플을 찾지 못하는 문제가 왜 생기나요?

    • 애트머스페릭 포그는 아직 MSAA 를 제대로 처리하지 못합니다.

    • 하이트 포그의 경우, 버텍스 포그 기능으로 우회할 수 있습니다 (포워드 셰이딩을 켜면 기본으로 켜집니다).

    • 포워드 베이스 패스에서 계산하므로 안티에일리어싱이 제대로 나오는 것입니다.

    • 아직 애트머스피어 계산은 리졸브된 씬 뎁스와 떨어진 디퍼드 패스에서 이루어지므로 안티에일리어싱이 제대로 되지 않습니다 (앞으로 수정할 예정입니다).

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼