Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

가변 비율 셰이딩

가변 비율 셰이딩이란 무엇입니까?

최신 3D 렌더링 엔진에서 셰이더는 이전에 비해 훨씬 더 복잡합니다. 물리 기반 렌더링, 실시간 전역 조명 및 화면 공간 효과의 출현으로 각 프레임을 렌더링하기 위해 수행해야 하는 픽셀당 음영 처리 수가 증가했습니다. 또한 화면 해상도도 많이 증가하여 이제 1440p와 4K가 일반적인 목표 해상도가 되었습니다. 결과적으로 씬 렌더링의 총 셰이딩 비용은 일반적으로 각 프레임을 렌더링하는 데 걸리는 시간의 상당 부분을 나타냅니다.

VRS(가변 비율 셰이딩)는 픽셀당 셰이딩(조각 셰이딩이라고도 함)의 해상도를 줄이면서 지오메트리 렌더링을 위한 원래 해상도를 유지하여 이러한 셰이딩 비용을 줄이는 방법입니다. 이는 형상 가장자리가 VRS가 없을 때처럼 선명하게 유지됨을 의미합니다. VRS는 모든 3D 안티앨리어싱 기술(MSAA, FXAA, TAA, SSAA)과 결합될 수 있습니다.

VRS를 사용하면 로컬 방식으로 셰이딩 품질을 지정할 수 있으므로 뷰포트의 특정 부분이 다른 부분보다 더 자세한 셰이딩을 받도록 할 수 있습니다. 이는 가상 현실(VR)에서 뷰포트의 중심이 가장자리보다 더 세부적인 *포비티드 렌더링*을 달성하는 데 특히 유용합니다.

다음은 이 페이지 하단에 링크된 밀도 맵을 사용하여 비율 음영 처리를 비활성화한 후 활성화하여 렌더링된 씬입니다.

질감 있는 씬에서 가변 속도 음영 처리가 비활성화되었습니다.

질감 있는 씬에서 가변 속도 음영 처리가 비활성화되었습니다.

질감이 있는 씬에서 가변 속도 음영 처리가 활성화되었습니다(품질은 낮지만 성능은 높음).

질감이 있는 씬에서 가변 속도 음영 처리가 활성화되었습니다(품질은 낮지만 성능은 높음).

빈도가 낮은 세부 묘사가 있는 장면(예: 스타일화된/낮은 폴리 미학이 있는 장면)에 사용하면 비슷한 성능 향상을 얻을 수 있지만 시각적 품질은 덜 저하됩니다.

질감이 없는 씬에서는 가변 속도 음영이 비활성화되었습니다.

질감이 없는 씬에서는 가변 속도 음영이 비활성화되었습니다.

텍스처링되지 않은 씬에서 가변 속도 셰이딩 활성화(품질은 낮지만 성능은 높음)

텍스처링되지 않은 씬에서 가변 속도 셰이딩 활성화(품질은 낮지만 성능은 높음)

하드웨어 지원

가변 비율 셰이딩은 특정 GPU에서만 지원됩니다:

데스크톱:

  • NVIDIA Turing 이상 (GTX 1600 시리즈 포함)

  • AMD RDNA2 이상 (통합 및 전용 GPU 모두 – Steam Deck 포함)

  • Intel Arc Alchemist 이상 (전용 GPU만)

    • Intel 통합 그래픽은 가변 비율 셰이딩을 지원하지 않습니다.

모바일 SoC:

  • Snapdragon 888 이상

  • MediaTek Dimensity 9000 이상

  • ARM Mali-G615 이상

2023년 1월 현재 Apple과 Raspberry Pi GPU는 가변 비율 셰이딩을 지원하지 않습니다.

Godot에서 가변 비율 셰이딩 사용하기

참고

Forward+ 및 모바일 렌더러 모두 가변 속도 음영 처리를 지원합니다. VRS는 팬케이크(비XR) 및 XR 디스플레이 모드 모두에서 사용할 수 있습니다.

호환성 렌더러는 가변 속도 음영 처리를 지원하지 않습니다. XR의 경우 :ref:`foveation level <doc_openxr_settings_foveation_level>`을 대안으로 사용할 수 있습니다.

고급 프로젝트 설정에서 렌더링 > VRS 섹션은 루트 뷰포트에서 가변 속도 음영 처리를 제어하는 설정을 제공합니다.

  • 모드: 가변 비율 셰이딩 모드를 제어합니다. **비활성화**는 가변 속도 음영 처리를 비활성화합니다. **텍스처**는 수동으로 제작된 텍스처를 사용하여 음영 밀도를 설정합니다(아래 속성 참조). **XR**은 가상/증강 현실에서 포비티드 렌더링에 적합한 텍스처를 자동으로 생성합니다.

  • 텍스처: 루트 뷰포트의 음영 밀도를 제어하는 데 사용하는 텍스처입니다. **모드**가 **텍스처**인 경우에만 사용됩니다.

사용자 정의 뷰포트의 경우 VRS 모드 및 텍스처를 수동으로 Viewport 노드로 설정해야 합니다.

참고

지원되지 않는 하드웨어에서는 가변 속도 음영이 활성화되어도 시각적 차이가 없습니다. --verbose :ref:`명령줄 인수 <doc_command_line_tutorial>`을 사용하여 편집기나 프로젝트를 실행하여 하드웨어가 가변 속도 음영 처리를 지원하는지 확인할 수 있습니다.

프로젝트 생성하기

텍스처 VRS 모드를 사용하는 경우 밀도 맵으로 사용할 텍스처를 반드시 설정해야 합니다. 그렇지 않으면 아무런 효과도 보이지 않습니다.

이미지 편집기를 사용하여 고유한 VRS 밀도 맵을 수동으로 생성하거나 다른 방법(예: CPU에서 이미지 클래스를 사용하거나 GPU에서 셰이더를 사용)을 사용하여 생성할 수 있습니다. 그러나 VRS 이미지를 동적으로 생성할 때는 성능에 미치는 영향에 주의하십시오. 동적 생성을 선택하는 경우 VRS 이미지 생성 프로세스가 VRS의 성능 향상을 능가하지 않을 만큼 충분히 빠른지 확인하십시오.

본 텍스트는 다음과 같습니다:

  • 색상이 정확하게 일치할 수 있도록 텍스처는 반드시 무손실 압축 형식을 사용해야 합니다.

  • 다음 VRS 밀도는 다양한 색상에 매핑되며 색상이 밝을수록 음영 정밀도 수준이 낮음을 나타냅니다.

밀도

색상

주석

1×1(가장 높은 디테일)

rgb(0, 0, 0) - #000000

1×2

rgb(0, 85, 0) - #005500

2×1

rgb(85, 0, 0) - #550000

2×2

rgb(85, 85, 0) - #555500

2×4

rgb(85, 170, 0) - #55aa00

4×2

rgb(170, 85, 0) - #aa5500

4×4

rgb(170, 170, 0) - #aaaa00

4×8

rgb(170, 255, 0) - #aaff00

대부분의 하드웨어에서는 지원되지 않습니다.

8×4

rgb(255, 170, 0) - #ffaa00

대부분의 하드웨어에서는 지원되지 않습니다.

8×8(가장 낮은 디테일)

rgb(255, 255, 0) - #ffff00

대부분의 하드웨어에서는 지원되지 않습니다.

예를 들어 다음 VRS 밀도 텍스처는 뷰포트 중앙에서 가장 높은 셰이딩 밀도를 제공하고 모서리에서 가장 낮은 셰이딩 밀도를 제공합니다.

포비티드 렌더링을 시뮬레이션하는 VRS 밀도 맵 텍스처 예

포비티드 렌더링을 시뮬레이션하는 VRS 밀도 맵 텍스처 예

VRS 밀도 텍스처에는 크기나 종횡비 요구 사항이 없습니다. 그러나 뷰포트 해상도를 GPU의 *타일 크기*로 나눈 것보다 큰 VRS 밀도 맵을 사용하면 이점이 없습니다. 타일 크기는 다른 타일과 별도로 음영 밀도를 변경할 수 있는 가장 작은 픽셀 영역을 결정하는 것입니다. 대부분의 GPU에서 이 타일 크기는 8×8 픽셀입니다. VRS 디버깅 정보에 인쇄된 대로 --verbose 명령줄 인수로 Godot를 실행하여 타일 크기를 볼 수 있습니다.

따라서 256×256(정사각형)이나 480×270(16:9) 등 상대적으로 낮은 해상도를 고수하는 것이 좋습니다. 사용 사례에 따라 프로젝트에서 가장 일반적인 뷰포트 종횡비(예: 16:9)와 일치하는 텍스처에 비해 정사각형 텍스처가 더 적합할 수 있습니다.

가변 속도 셰이딩을 사용할 때 음수 :ref:`texture Mipmap LOD 바이어스 <doc_solution_scaling_mipmap_bias>`를 사용하여 셰이딩 속도가 감소된 영역의 흐릿함을 줄일 수 있습니다.

텍스처 LOD 바이어스는 전체적으로 설정되므로 전체 셰이딩 속도로 뷰포트 영역에도 영향을 미칩니다. 너무 낮은 값을 사용하지 마십시오. 그렇지 않으면 텍스처가 거칠게 나타납니다.

성능

이론적으로 VRS가 성능을 얼마나 향상시킬 수 있는지에 대한 아이디어를 제공하기 위해 이 페이지 상단에 표시된 텍스처 예제 씬와의 성능 비교를 참조하세요. 이 페이지에 있는 VRS 밀도 맵 예제가 사용됩니다.

결과는 NVIDIA 525.60.11 드라이버가 설치된 GeForce RTX 4090에서 캡처되었습니다.

반사

VRS 비활성화

VRS 활성화

성능

1920×1080(풀 HD)

2832FPS

3136FPS

+10.7%

2560×1440(QHD)

2008FPS

2256FPS

+12.3%

3840×2160(4K)

1236FPS

1436FPS

+16.2%

7680×4320(8K)

384FPS

473FPS

+23.1%

성능 향상 측면에서 가변 속도 셰이딩은 더 높은 대상 해상도에서 더 유리합니다. 고해상도에서는 시각적 품질 저하도 눈에 띄지 않습니다.

참고

VR이 아닌 게임의 경우 이 예에서 사용된 것보다 덜 공격적인 VRS 텍스처를 사용해야 할 것입니다. 결과적으로 효과적인 성능 향상은 낮아집니다.