다음을 통해 공유


VRS(가변 속도 음영)

VRS에 대한 동기 부여

성능 제약 조건으로 인해 그래픽 렌더러가 항상 출력 이미지의 모든 부분에 동일한 수준의 품질을 제공할 수 있는 것은 아닙니다. 가변 속도 음영 또는 거친 픽셀 음영은 렌더링된 이미지에 따라 다른 속도로 렌더링 성능/파워를 할당할 수 있는 메커니즘입니다.

경우에 따라 인식 가능한 출력 품질이 거의 또는 전혀 감소하지 않고 음영 속도를 줄일 수 있습니다. 기본적으로 무료인 성능 향상으로 이어집니다.

VRS가 없는 경우 - 슈퍼 샘플링을 사용한 다중 샘플 앤티앨리어싱

가변 속도 음영이 없으면 음영 속도를 제어하는 유일한 방법은 샘플 기반 실행(슈퍼 샘플링이라고도 함)을 사용하는 MSAA(다중 샘플 앤티앨리어싱)를 사용하는 것입니다.

MSAA는 기하학적 별칭을 줄이고 MSAA를 사용하지 않는 것에 비해 이미지의 렌더링 품질을 향상시키는 메커니즘입니다. 1x, 2x, 4x, 8x 또는 16x일 수 있는 MSAA 샘플 수는 렌더링 대상 픽셀당 할당된 샘플 수를 제어합니다. 대상이 할당될 때 MSAA 샘플 개수를 미리 알고 있어야 하며, 그 후에는 변경할 수 없습니다.

슈퍼 샘플링을 사용하면 픽셀 셰이더가 샘플당 한 번씩 호출되며, 픽셀당 실행에 비해 더 높은 품질뿐만 아니라 성능 비용도 높아집니다.

애플리케이션은 픽셀 기반 실행 또는 MSAA-with-supersampling 중에서 선택하여 음영 속도를 제어할 수 있습니다. 이러한 두 가지 옵션은 매우 세밀한 제어를 제공하지 않습니다. 또한 이미지의 나머지 부분에 비해 특정 개체 클래스에 대해 음영 속도를 낮출 수 있습니다. 이러한 개체에는 HUD 요소 뒤에 있는 개체 또는 투명도, 흐림 효과(필드 깊이, 동작 등) 또는 VR 광학으로 인한 광학 왜곡이 포함될 수 있습니다. 그러나 음영 품질과 비용이 전체 이미지에 걸쳐 고정되어 있기 때문에 불가능합니다.

가변 속도 음영 사용(VRS)

VRS(가변 속도 음영) 모델은 거친 음영 개념을 추가하여 MSAA와 함께 슈퍼 샘플링을 반대 방향인 "거친 픽셀"로 확장합니다. 여기서 음영은 픽셀보다 더 거친 빈도로 수행할 수 있습니다. 즉, 픽셀 그룹을 단일 단위로 음영 처리할 수 있으며 결과는 그룹의 모든 샘플에 브로드캐스트됩니다.

거친 음영 API를 사용하면 애플리케이션이 음영 처리된 그룹에 속하는 픽셀 수를 지정하거나 거친 픽셀 수 있습니다. 렌더링 대상을 할당한 후 거친 픽셀 크기를 변경할 수 있습니다. 따라서 화면의 다른 부분이나 다른 그리기 패스는 다른 음영 속도를 가질 수 있습니다.

다음은 거친 음영을 지원하는 플랫폼에 대해 어떤 거친 픽셀 크기로 지원되는 MSAA 수준을 설명하는 표입니다.

  • Y표시된 셀의 경우 해당 조합이 활성화됩니다.
  • cap 표시된 셀의 경우 해당 조합은 상한(AdditionalShadingRatesSupported)에 따라 조건부로 사용하도록 설정됩니다.
  • 비어 있는 셀의 경우 해당 조합은 지원되지 않습니다.
  • 하프톤 음영이 지정된 셀의 경우 해당 조합은 지원되지 않으며, 픽셀 셰이더 호출당 16개 이상의 샘플을 추적하는 작업이 포함됩니다. 16개 이상의 샘플을 추적하기 위해 다른 사례에 비해 지원해야 할 추가 하드웨어 맞춤 장벽이 있습니다.

표에는 M S A 수준의 거친 픽셀 크기가 표시됩니다. 거친 픽셀 크기

기능 계층

VRS 구현에는 두 개의 계층과 쿼리할 수 있는 두 가지 기능이 있습니다. 각 계층은 테이블 다음에 자세히 설명되어 있습니다.

표에는 계층 1 및 계층 2에서 사용할 수 있는 기능이 표시됩니다. VRS 계층

계층 1

  • 음영 속도는 그리기 단위로만 지정할 수 있습니다. 그보다 더 세분화되지 않습니다.
  • 음영 속도는 렌더링 대상 내에 있는 위치와 독립적으로 그려지는 항목에 균일하게 적용됩니다.

계층 2

  • 음영 속도는 계층 1과 같이 그리기별로 지정할 수 있습니다. 또한 그리기별 기준 및 다음의 조합으로 지정할 수 있습니다.
    • 각 자극 꼭짓점의 의미 체계 및
    • 화면 공간 이미지
  • 세 소스의 음영 속도는 조합기 집합을 사용하여 결합됩니다.
  • 화면 공간 이미지 타일 크기는 16x16 이하입니다.
  • 애플리케이션에서 요청한 음영 속도는 정확하게 전달되도록 보장됩니다(임시 및 기타 재구성 필터의 정밀도).
  • SV_ShadingRate PS 입력이 지원됩니다.
  • 하나의 뷰포트가 사용되고 SV_ViewportArrayIndex 기록되지 않은 경우 도발별 꼭짓점(기본형별) 음영 속도는 유효합니다.
  • SupportsPerVertexShadingRateWithMultipleViewports 기능이 true설정된 경우 두 개 이상의 뷰포트에서 꼭짓점당 속도를 사용할 수 있습니다. 또한 이 경우 SV_ViewportArrayIndex 기록될 때 해당 속도를 사용할 수 있습니다.

기능 목록

  • AdditionalShadingRatesSupported
    • 부울 형식입니다.
    • 단일 샘플링 렌더링에 2x4, 4x2 및 4x4 거친 픽셀 크기가 지원되는지 여부를 나타냅니다. 및 2x MSAA에 대해 거친 픽셀 크기 2x4가 지원되는지 여부입니다.
  • SupportsPerVertexShadingRateWithMultipleViewports
    • 부울 형식입니다.
    • 꼭짓점당(기본형별) 음영 속도와 함께 뷰포트를 둘 이상 사용할 수 있는지 여부를 나타냅니다.

음영 속도 지정

애플리케이션의 유연성을 위해 음영 속도를 제어하는 다양한 메커니즘이 제공됩니다. 하드웨어 기능 계층에 따라 다양한 메커니즘을 사용할 수 있습니다.

명령 목록

이는 음영 속도를 설정하는 가장 간단한 메커니즘입니다. 모든 계층에서 사용할 수 있습니다.

애플리케이션은 ID3D12GraphicsCommandList5::RSSetShadingRate 메서드사용하여 거친 픽셀 크기를 지정할 수 있습니다. 해당 API는 단일 열거형 인수를 사용합니다. API는 렌더링 품질 수준(그리기당 음영 속도를 설정하는 기능)을 전반적으로 제어합니다.

이 상태의 값은 D3D12_SHADING_RATE 열거형을 통해 표현됩니다.

거친 픽셀 크기 지원

음영 속도 1x1, 1x2, 2x1 및 2x2는 모든 계층에서 지원됩니다.

AdditionalShadingRatesSupported디바이스에서 2x4, 4x2 및 4x4가 지원되는지 여부를 나타내는 기능이 있습니다.

화면 공간 이미지(이미지 기반)

계층 2 이상에서는 화면 공간 이미지를 사용하여 픽셀 음영 속도를 지정할 수 있습니다.

화면 공간 이미지를 사용하면 애플리케이션이 동작 흐림 효과, 깊이 필드 흐림, 투명 개체 또는 HUD UI 요소로 덮여 있는 영역과 같이 다양한 품질의 영역을 나타내는 "LOD(세부 수준) 마스크" 이미지를 만들 수 있습니다. 이미지의 해상도는 매크로 블록에 있습니다. 렌더링 대상의 해상도에 있지 않습니다. 즉, 음영 속도 데이터는 VRS 타일 크기로 표시된 대로 8x8 또는 16x16 픽셀 타일의 세분성으로 지정됩니다.

타일 크기

애플리케이션은 API를 쿼리하여 해당 디바이스에 대해 지원되는 VRS 타일 크기를 검색할 수 있습니다.

타일은 정사각형이며 크기는 타일의 너비 또는 높이(텍셀)를 나타냅니다.

하드웨어에서 계층 2 가변 속도 음영을 지원하지 않는 경우 타일 크기에 대한 기능 쿼리는 0을 반환합니다.

하드웨어 계층 2 가변 속도 음영을 지원하지 경우 타일 크기는 다음 값 중 하나입니다.

  • 8
  • 16
  • 32

화면 공간 이미지 크기

크기 {rtWidth, rtHeight}의 렌더링 대상의 경우 VRSTileSize명명된 지정된 타일 크기를 사용하여 이 크기를 포함할 화면 공간 이미지입니다.

{ ceil((float)rtWidth / VRSTileSize), ceil((float)rtHeight / VRSTileSize) }

화면 공간 이미지의 왼쪽 위(0, 0)는 렌더링 대상의 왼쪽 위(0, 0)에 잠겨 있습니다.

렌더링 대상의 특정 위치에 해당하는 타일의 (x,y) 좌표를 조회하려면 분수 비트를 무시하고 타일 크기로 (x, y)의 창 공간 좌표를 나눕니다.

화면 공간 이미지가 지정된 렌더링 대상에 필요한 것보다 크면 오른쪽 및/또는 아래쪽의 추가 부분이 사용되지 않습니다.

화면 공간 이미지가 지정된 렌더링 대상에 비해 너무 작으면 실제 익스텐트를 초과하여 이미지에서 읽어온 모든 시도는 기본 음영 속도 1x1을 생성합니다. 이는 화면 공간 이미지의 왼쪽 위(0, 0)가 렌더링 대상의 왼쪽 위(0, 0)에 잠겨 있고 "렌더링 대상 익스텐트 이상으로 읽는 것"은 x 및 y에 대해 너무 큰 값을 읽는 것을 의미하기 때문입니다.

형식, 레이아웃, 리소스 속성

이 표면의 형식은 단일 채널 8비트 표면(DXGI_FORMAT_R8_UINT)입니다.

리소스가 TEXTURE2D차원입니다.

배열하거나 미핑할 수 없습니다. 명시적으로 하나의 밉 수준이 있어야 합니다.

샘플 개수 1과 샘플 품질 0이 있습니다.

알 수 없는 질감 레이아웃이 있습니다. 어댑터 간은 허용되지 않으므로 암시적으로 행 주 레이아웃이 될 수 없습니다.

화면 공간 이미지 데이터가 채워지는 예상 방법은 다음 중 하나에 해당합니다.

  1. 컴퓨팅 셰이더를 사용하여 데이터를 작성합니다. 화면 공간 이미지가 UAV로 바인딩되거나
  2. 데이터를 화면 공간 이미지에 복사합니다.

화면 공간 이미지를 만들 때 이러한 플래그가 허용됩니다.

  • 없음
  • ALLOW_UNORDERED_ACCESS
  • DENY_SHADER_RESOURCE

이러한 플래그는 허용되지 않습니다.

  • ALLOW_RENDER_TARGET
  • ALLOW_DEPTH_STENCIL
  • ALLOW_CROSS_ADAPTER
  • ALLOW_SIMULTANEOUS_ACCESS
  • VIDEO_DECODE_REFERENCE_ONLY

리소스의 힙 유형은 UPLOAD 또는 READBACK일 수 없습니다.

리소스는 SIMULTANEOUS_ACCESS 수 없습니다. 리소스는 크로스 어댑터로 사용할 수 없습니다.

데이터

화면 공간 이미지의 각 바이트는 D3D12_SHADING_RATE 열거형의 값에 해당합니다.

리소스 상태

화면 공간 이미지로 사용할 경우 리소스를 읽기 전용 상태로 전환해야 합니다. 읽기 전용 상태인 D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE이 용도로 정의됩니다.

이미지 리소스가 해당 상태에서 전환되어 다시 쓰기 가능해집니다.

이미지 설정

셰이더 속도를 지정하기 위한 화면 공간 이미지가 명령 목록에 설정됩니다.

음영 속도 원본으로 설정된 리소스는 셰이더 단계에서 읽거나 쓸 수 없습니다.

셰이더 속도를 지정하기 위해 null 화면 공간 이미지를 설정할 수 있습니다. 이는 1x1이 화면 공간 이미지의 기여로 일관되게 사용되는 효과가 있습니다. 화면 공간 이미지는 처음에 null설정되는 것으로 간주될 수 있습니다.

승격 및 부패

화면 공간 이미지 리소스는 승격 또는 감쇠와 관련하여 특별한 영향을 미치지 않습니다.

기본형별 특성

기본형별 특성은 셰이딩 속도 용어를 자극하는 꼭짓점의 특성으로 지정하는 기능을 추가합니다. 이 특성은 플랫 음영입니다. 즉, 현재 삼각형 또는 선 기본 형식의 모든 픽셀에 전파됩니다. 기본형별 특성을 사용하면 다른 음영 속도 지정자에 비해 이미지 품질을 보다 세밀하게 제어할 수 있습니다.

기본형별 특성은 SV_ShadingRate명명된 설정 가능한 의미 체계입니다. SV_ShadingRate HLSL 셰이더 모델 6.4일부로 존재합니다.

VS 또는 GS가 SV_ShadingRate설정하지만 VRS가 활성화되지 않은 경우 의미 체계 설정은 적용되지 않습니다. SV_ShadingRate 대한 값이 기본 형식별로 지정되지 않은 경우 1x1의 음영 속도 값은 기본 단위 기여도로 간주됩니다.

음영 속도 요소 결합

음영 속도의 다양한 소스는 이 다이어그램을 사용하여 순서대로 적용됩니다.

다이어그램은 프로보킹 꼭짓점 음영 속도, 레이블이 지정된 B, 결합자에서 적용된 다음, 결합자에서 적용된 이미지 기반 음영 속도, 레이블이 지정된 B라는 레이블이 지정된 파이프라인 상태를 보여줍니다.

A와 B의 각 쌍은 결합자를 사용하여 결합됩니다.

* 꼭짓점 특성별로 셰이더 속도를 지정하는 경우

  • 기하 도형 셰이더를 사용하는 경우 이를 통해 음영 속도를 지정할 수 있습니다.
  • 기하 도형 셰이더를 사용하지 않으면 셰이딩 속도는 자극 꼭짓점으로 지정됩니다.

결합자 목록

다음 조합기가 지원됩니다. 결합자(C) 및 두 개의 입력(A 및 B)을 사용합니다.

  • 통과. C.xy = A.xy.
  • 재정의합니다. C.xy = B.xy.
  • 고품질. C.xy = min(A.xy, B.xy).
  • 낮은 품질 . C.xy = max(A.xy, B.xy).
  • 기준으로 비용 B를 적용합니다. C.xy = min(maxRate, A.xy + B.xy).

여기서 maxRate 디바이스에서 허용되는 가장 큰 거친 픽셀 차원입니다. 다음과 같습니다.

  • AdditionalShadingRatesSupported가 false경우 D3D12_AXIS_SHADING_RATE_2X(즉, 값 1)입니다.
  • AdditionalShadingRatesSupported가 true경우 D3D12_AXIS_SHADING_RATE_4X(즉, 값 2)입니다.

가변 속도 음영에 대한 결합자 선택은 ID3D12GraphicsCommandList5::RSSetShadingRate통해 명령 목록에 설정됩니다.

조합기가 설정되지 않은 경우 기본값인 PASSTHROUGH에 유지됩니다.

결합자의 원본이 지원 테이블에서 허용되지 않는 D3D12_AXIS_SHADING_RATE경우 입력은 지원되는 음영 속도로 삭제됩니다.

결합자의 출력이 플랫폼에서 지원되는 음영 속도에 해당하지 않는 경우 결과는 지원되는 음영 속도로 삭제됩니다.

기본 상태 및 상태 지우기

모든 음영 속도 원본, 즉

  • 파이프라인 상태 지정 속도(명령 목록에 지정됨)
  • 화면 공간 이미지 지정 속도 및
  • 기본 특성당

기본값은 D3D12_SHADING_RATE_1X1. 기본 결합자는 {PASSTHROUGH, PASSTHROUGH}입니다.

화면 공간 이미지를 지정하지 않으면 해당 원본에서 1x1의 음영 속도가 유추됩니다.

기본 단위 특성을 지정하지 않으면 해당 원본에서 1x1의 음영 비율이 유추됩니다.

ID3D12CommandList::ClearState 파이프라인 상태 지정 속도를 기본값으로 다시 설정하며 화면 공간 이미지 선택은 기본값인 "화면 공간 이미지 없음"으로 다시 설정합니다.

SV_ShadingRate 사용하여 음영 속도 쿼리

지정된 픽셀 셰이더 호출에서 하드웨어에서 선택한 음영 속도를 아는 것이 유용합니다. 이렇게 하면 PS 코드에서 다양한 최적화를 사용할 수 있습니다. PS 전용 시스템 변수인 SV_ShadingRate음영 속도에 대한 정보를 제공합니다.

이 의미 체계의 유형은 uint입니다.

데이터 해석

데이터는 D3D12_SHADING_RATE 열거형의 값으로 해석됩니다.

VRS를 사용하지 않는 경우

거친 픽셀 음영을 사용하지 않는 경우 SV_ShadingRate 1x1 값으로 다시 읽혀 미세 픽셀을 나타냅니다.

샘플 기반 실행의 동작

픽셀 셰이더는 SV_ShadingRate 입력하고 샘플 기반 실행을 사용하는 경우(예: SV_SampleIndex입력하거나 샘플 보간 키워드를 사용하는 경우) 컴파일에 실패합니다.

지연 음영에 대한 설명

지연된 음영 애플리케이션의 조명 패스는 화면의 어느 영역에 어떤 음영 속도가 사용되었는지 알고 있어야 할 수 있습니다. 이렇게 하면 조명 패스 디스패치가 거친 속도로 시작될 수 있습니다. SV_ShadingRate 변수는 gbuffer에 기록된 경우 이를 수행하는 데 사용할 수 있습니다.

깊이 및 스텐실

거친 픽셀 음영을 사용하는 경우 깊이와 스텐실 및 커버리지는 항상 전체 샘플 해상도에서 계산되고 내보내집니다.

요청된 음영 속도 사용

모든 계층의 경우 음영 속도가 요청되고 디바이스 및 MSAA 수준 조합에서 지원되는 경우 하드웨어에서 제공하는 음영 속도입니다.

요청된 음영 속도는 콤비너의 출력으로 계산되는 음영 속도를 의미합니다(이 항목의 섹션에 음영 비율 결합 참조).

샘플 수가 4보다 작거나 같은 렌더링 작업에서 지원되는 음영 속도는 1x1, 1x2, 2x1 또는 2x2입니다. AdditionalShadingRatesSupported 기능이 true경우 2x4, 4x2 및 4x4도 일부 샘플 수에 대해 음영 속도를 지원합니다(이 항목의 VRS(가변 속도 음영) 섹션의 표 참조).

화면 공간 파생

픽셀-인접 픽셀 그라데이션의 계산은 거친 픽셀 음영의 영향을 받습니다. 예를 들어 2x2 거친 픽셀을 사용하는 경우 그라데이션은 거친 픽셀을 사용하지 않는 경우와 비교하여 크기가 두 배가 됩니다. 애플리케이션은 원하는 기능에 따라 이를 보정하도록 셰이더를 조정할 수 있습니다.

밉은 화면 공간 파생을 기반으로 선택되므로 거친 픽셀 음영을 사용하는 것은 밉 선택에 영향을 줍니다. 거친 픽셀 음영을 사용하면 거친 픽셀을 사용하지 않는 경우와 비교하여 세부적인 밉이 더 적게 선택됩니다.

특성 보간

픽셀 셰이더에 대한 입력은 원본 꼭짓점을 기반으로 보간될 수 있습니다. 가변 속도 음영은 픽셀 셰이더의 각 호출에 의해 작성된 대상 영역에 영향을 주므로 특성 보간과 상호 작용합니다. 보간의 세 가지 유형은 중심, 중심 및 샘플입니다.

거친 픽셀의 중심 보간 위치는 전체 거친 픽셀 영역의 기하학적 중심입니다. SV_Position 항상 거친 픽셀 영역의 중심에 보간됩니다.

도심

MSAA와 함께 거친 픽셀 음영을 사용하는 경우 각 미세 픽셀에 대해 대상의 MSAA 수준에 할당된 전체 샘플 수에 대한 쓰기가 계속 진행됩니다. 따라서 중심 보간 위치는 거친 픽셀 내의 미세 픽셀에 대한 모든 샘플을 고려합니다. 즉, 중심 보간 위치는 샘플 인덱스의 순서가 증가하는 첫 번째 검사 샘플로 정의됩니다. 샘플의 유효 적용 범위는 래스터라이저 상태 SampleMask의 해당 비트를 사용하여 AND로 처리됩니다.

메모

계층 1에서 거친 픽셀 음영을 사용하는 경우 SampleMask는 항상 전체 마스크입니다. SampleMask가 전체 마스크가 되지 않도록 구성된 경우 계층 1에서 거친 픽셀 음영을 사용할 수 없습니다.

샘플 기반 실행

샘플 보간 기능의 사용으로 인해 발생하는 샘플 기반 실행 또는 슈퍼 샘플링거친 픽셀 음영과 함께 사용할 수 있으며 샘플당 픽셀 셰이더를 호출할 수 있습니다. 샘플 개수 N의 대상에 대해 픽셀 셰이더는 미세 픽셀당 N번 호출됩니다.

EvaluateAttributeSnapped

풀 모델 내장 함수는 계층 1의 거친 픽셀 음영과 호환되지 않습니다. 계층 1에서 거친 픽셀 음영이 있는 풀 모델 내장 함수를 사용하려고 하면 거친 픽셀 음영이 자동으로 비활성화됩니다.

내장 EvaluateAttributeSnapped 계층 2에서 거친 픽셀 음영과 함께 사용할 수 있습니다. 구문은 항상 그동안의 구문과 동일합니다.

numeric EvaluateAttributeSnapped(	
    in attrib numeric value, 
    in int2 offset);

컨텍스트의 경우 EvaluateAttributeSnapped 두 개의 필드가 있는 오프셋 매개 변수가 있습니다. 거친 픽셀 음영 없이 사용하는 경우 전체 32개 중 하위 4비트만 사용됩니다. 이러한 4비트 범위 [-8, 7]을 나타냅니다. 이 범위는 픽셀 내의 16x16 그리드에 걸쳐 있습니다. 범위는 픽셀의 위쪽 및 왼쪽 가장자리가 포함되고 아래쪽 및 오른쪽 가장자리는 포함되지 않습니다. 오프셋(-8, -8)은 왼쪽 위 모서리에 있고 오프셋(7, 7)은 오른쪽 아래 모서리에 있습니다. 오프셋(0, 0)은 픽셀의 중심입니다.

거친 픽셀 음영과 함께 사용하는 경우 EvaluateAttributeSnapped오프셋 매개 변수는 더 넓은 범위의 위치를 지정할 수 있습니다. 오프셋 매개 변수는 각 미세 픽셀에 대해 16x16 그리드를 선택하고 여러 개의 미세 픽셀이 있습니다. 표현 가능한 범위와 그에 따른 비트 수는 거친 픽셀 크기에 따라 달라집니다. 거친 픽셀의 위쪽 및 왼쪽 가장자리가 포함되며 아래쪽 및 오른쪽 가장자리는 포함되지 않습니다.

아래 표에서는 각 거친 픽셀 크기에 대한 EvaluateAttributeSnapped오프셋 매개 변수의 해석에 대해 설명합니다.

EvaluateAttributeSnapped의 오프셋 범위

거친 픽셀 크기 인덱싱 가능한 범위 표시 가능한 범위 크기 {x, y}에 필요한 비트 수 사용할 수 있는 비트의 이진 마스크
1x1(미세) {[-8, 7], [-8, 7]} {16, 16} {4, 4} {000000000000xxxx, 0000000000000xxxx}
1x2 {[-8, 7], [-16, 15]} {16, 32} {4, 5} {000000000000xxxx, 000000000000xxxxx}
2x1 {[-16, 15], [-8, 7]} {32, 16} {5, 4} {00000000000xxxxx, 000000000000xxxx}
2x2 {[-16, 15], [-16, 15]} {32, 32} {5, 5} {00000000000xxxxx, 000000000000xxxxx}
2x4 {[-16, 15], [-32, 31]} {32, 64} {5, 6} {000000000000xxxxx, 00000000000xxxx}
4x2 {[-32, 31], [-16, 15]} {64, 32} {6, 5} {0000000000xxxxxx, 000000000000xxxxx}
4x4 {[-32, 31], [-32, 31]} {64, 64} {6, 6} {0000000000xxxxxx, 00000000000xxxx}

아래 표는 고정 소수점에서 소수점 및 소수 표현으로 변환하기 위한 가이드입니다. 이진 마스크에서 사용할 수 있는 첫 번째 비트는 부호 비트이고 나머지 이진 마스크는 숫자 부분으로 구성됩니다.

EvaluateAttributeSnapped 전달된 4비트 값에 대한 숫자 체계는 가변 속도 음영과 관련이 없습니다. 완전성을 위해 여기에 반복됩니다.

4비트 값의 경우

이진 값 십진법 분수의
1000 -0.5f -8 / 16
1001 -0.4375f -7 / 16
1010 -0.375f -6 / 16
1011 -0.3125f -5 / 16
1100 -0.25f -4 / 16
1101 -0.1875f -3 / 16
1110 -0.125f -2 / 16
1111 -0.0625f -1 /16
0000 0.0f 0 / 16
0001 -0.0625f 1 / 16
0010 -0.125f 2 / 16
0011 -0.1875f 3 / 16
0100 -0.25f 4 / 16
0101 -0.3125f 5 / 16
0110 -0.375f 6 / 16
0111 -0.4375f 7 / 16

5비트 값의 경우

이진 값 십진법 분수의
10000 -1 -16 / 16
10001 -0.9375 -15 / 16
10010 -0.875 -14 / 16
10011 -0.8125 -13 / 16
10100 -0.75 -12 / 16
10101 -0.6875 -11 / 16
10110 -0.625 -10 / 16
10111 -0.5625 -9 / 16
11000 -0.5 -8 / 16
11001 -0.4375 -7 / 16
11010 -0.375 -6 / 16
11011 -0.3125 -5 / 16
11100 -0.25 -4 / 16
11101 -0.1875 -3 / 16
11110 -0.125 -2 / 16
11111 -0.0625 -1 / 16
00000 0 0 / 16
00001 0.0625 1 / 16
00010 0.125 2 / 16
00011 0.1875 3 / 16
00100 0.25 4 / 16
00101 0.3125 5 / 16
00110 0.375 6 / 16
00111 0.4375 7 / 16
01000 0.5 8 / 16
01001 0.5625 9 / 16
01010 0.625 10 / 16
01011 0.6875 11 / 16
01100 0.75 12 / 16
01101 0.8125 13 / 16
01110 0.875 14 / 16
01111 0.9375 15 / 16

6비트 값의 경우

이진 값 십진법 분수의
100000 -2 -32 / 16
100001 -1.9375 -31 / 16
100010 -1.875 -30 / 16
100011 -1.8125 -29 / 16
100100 -1.75 -28 / 16
100101 -1.6875 -27 / 16
100110 -1.625 -26 / 16
100111 -1.5625 -25 / 16
101000 -1.5 -24 / 16
101001 -1.4375 -23 / 16
101010 -1.375 -22 / 16
101011 -1.3125 -21 / 16
101100 -1.25 -20 / 16
101101 -1.1875 -19 / 16
101110 -1.125 -18 / 16
101111 -1.0625 -17 / 16
110000 -1 -16 / 16
110001 -0.9375 -15 / 16
110010 -0.875 -14 / 16
110011 -0.8125 -13 / 16
110100 -0.75 -12 / 16
110101 -0.6875 -11 / 16
110110 -0.625 -10 / 16
110111 -0.5625 -9 / 16
111000 -0.5 -8 / 16
111001 -0.4375 -7 / 16
111010 -0.375 -6 / 16
111011 -0.3125 -5 / 16
111100 -0.25 -4 / 16
111101 -0.1875 -3 / 16
111110 -0.125 -2 / 16
111111 -0.0625 -1 / 16
000000 0 0 / 16
000001 0.0625 1 / 16
000010 0.125 2 / 16
000011 0.1875 3 / 16
000100 0.25 4 / 16
000101 0.3125 5 / 16
000110 0.375 6 / 16
000111 0.4375 7 / 16
001000 0.5 8 / 16
001001 0.5625 9 / 16
001010 0.625 10 / 16
001011 0.6875 11 / 16
001100 0.75 12 / 16
001101 0.8125 13 / 16
001110 0.875 14 / 16
001111 0.9375 15 / 16
010000 1 16 / 16
010001 1.0625 17 / 16
010010 1.125 18 / 16
010011 1.1875 19 / 16
010100 1.25 20 / 16
010101 1.3125 21 / 16
010110 1.375 22 / 16
010111 1.4375 23 / 16
011000 1.5 24 / 16
011001 1.5625 25 / 16
011010 1.625 26 / 16
011011 1.6875 27 / 16
011100 1.75 28 / 16
011101 1.8125 29 / 16
011110 1.875 30 / 16
011111 1.9375 31 / 16

미세 픽셀과 동일한 방식으로 평가 가능한 위치의 EvaluateAttributeSnapped그리드는 거친 픽셀 음영을 사용할 때 거친 픽셀 중심을 중심으로 합니다.

SetSamplePositions

API ID3D12GraphicsCommandList1::SetSamplePositions 거친 음영과 함께 사용하면 API는 미세 픽셀에 대한 샘플 위치를 설정합니다.

SV_Coverage

SV_Coverage 계층 1에서 셰이더 입력 또는 출력으로 선언된 경우 거친 픽셀 음영을 사용할 수 없습니다.

계층 2에서 거친 픽셀 음영으로 SV_Coverage 의미 체계를 사용할 수 있으며, MSAA 대상의 샘플이 작성되는 것을 반영합니다.

여러 원본 픽셀이 타일을 구성할 수 있도록 거친 픽셀 음영을 사용하는 경우 검사 마스크는 해당 타일에서 제공되는 모든 샘플을 나타냅니다.

거친 픽셀 음영이 MSAA와 호환되는 경우 지정해야 하는 검사 비트 수가 달라질 수 있습니다. 예를 들어 D3D12_SHADING_RATE_2x2사용하는 4x MSAA 리소스의 경우 각 거친 픽셀은 4개의 미세 픽셀에 쓰고 각 미세 픽셀에는 4개의 샘플이 있습니다. 즉, 각 거친 픽셀은 총 4 * 4 = 16개의 샘플에 씁니다.

필요한 검사 비트 수

다음 표에서는 거친 픽셀 크기와 MSAA 수준의 각 조합에 필요한 검사 비트 수를 나타냅니다.

표에는 거친 픽셀 크기, 미세 픽셀 수 및 M S A 수준이 표시됩니다.

표에 표시된 것처럼 Direct3D 12를 통해 노출되는 가변 속도 음영 기능을 사용하여 거친 픽셀을 사용하여 한 번에 16개 이상의 샘플에 쓸 수 없습니다. 이 제한은 거친 픽셀 크기로 허용되는 MSAA 수준에 대한 Direct3D 12의 제약 조건 때문입니다(이 항목의 VRS(가변 속도 음영) 섹션의 표 참조).

검사 마스크의 비트 순서 지정 및 형식

검사 마스크의 비트는 잘 정의된 순서를 준수합니다. 마스크는 왼쪽에서 오른쪽으로 픽셀, 위쪽에서 아래쪽(열 주) 순서로 구성됩니다. 검사 비트는 커버리지 의미 체계의 낮은 순서 비트이며 조밀하게 함께 압축됩니다.

아래 표에서는 거친 픽셀 크기와 MSAA 수준의 지원되는 조합에 대한 검사 마스크 형식을 보여 줍니다.

표에는 거친 픽셀 크기, 거친 픽셀 다이어그램 및 1 x M S A 검사 비트가 표시됩니다. 1x 적용 범위

다음 표에서는 각 픽셀에 인덱스 0과 1의 두 샘플이 있는 2x MSAA 픽셀을 나타냅니다.

픽셀에 대한 샘플 레이블의 위치는 설명을 위한 것이며, 해당 픽셀에 샘플의 공간 {X, Y} 위치를 반드시 전달하지는 않습니다. 특히 샘플 위치를 프로그래밍 방식으로 변경할 수 있습니다. 샘플은 0부터 시작하는 인덱스로 참조됩니다.

표에는 거친 픽셀 크기, 거친 픽셀 다이어그램 및 2 x M S A 검사 비트가 표시됩니다. 2x 적용 범위

다음 표에서는 각 픽셀에 인덱스 0, 1, 2 및 3의 4개 샘플이 있는 4x MSAA 픽셀을 보여 줍니다.

표에는 거친 픽셀 크기, 거친 픽셀 다이어그램 및 4 x M S A 검사 비트가 표시됩니다. 4배 적용 범위

버리다

HLSL 의미 체계 discard 거친 픽셀 음영과 함께 사용하면 거친 픽셀이 삭제됩니다.

TIR(대상 독립적 래스터화)

거친 픽셀 음영을 사용하는 경우 TIR이 지원되지 않습니다.

래스터 순서 뷰(ROV)

ROV 인터록은 미세 픽셀 세분성에서 작동하는 것으로 지정됩니다. 음영이 샘플별로 수행되는 경우 연동은 샘플 세분성에서 작동합니다.

보수적 래스터화

가변 속도 음영과 함께 보수적인 래스터화를 사용할 수 있습니다. 거친 픽셀 음영과 함께 보수적인 래스터화를 사용하는 경우 거친 픽셀 내의 미세 픽셀은 전체 범위가 부여되어 보수적으로 래스터화됩니다.

보도

보수적인 래스터화를 사용하는 경우 적용 범위 의미 체계에는 적용되는 미세 픽셀에 대한 전체 마스크가 포함되고, 0은 적용되지 않은 미세 픽셀에 대해 포함됩니다.

번들

번들에서 가변 속도 음영 API를 호출할 수 있습니다.

렌더링 패스

렌더링 패스가변 속도 음영 API를 호출할 수 있습니다.

VRS API 호출

다음 섹션에서는 Direct3D 12를 통해 애플리케이션에서 가변 속도 음영에 액세스할 수 있는 방법을 설명합니다.

기능 쿼리

어댑터의 가변 속도 음영 기능을 쿼리하려면 D3D12_FEATURE::D 3D12_FEATURE_D3D12_OPTIONS6ID3D12Device::CheckFeatureSupport 호출하고 함수가 채울 D3D12_FEATURE_DATA_D3D12_OPTIONS6 구조체를 제공합니다. D3D12_FEATURE_DATA_D3D12_OPTIONS6 구조체에는 열거형 형식 D3D12_VARIABLE_SHADING_RATE_TIER 멤버(D3D12_FEATURE_DATA_D3D12_OPTIONS6::VariableShadingRateTier)와 백그라운드 처리가 지원되는지 여부를 나타내는 멤버(D3D12_FEATURE_DATA_D3D12_OPTIONS6::BackgroundProcessingSupported)를 포함한 여러 멤버가 포함됩니다.

예를 들어 계층 1 기능을 쿼리하려면 이 작업을 수행할 수 있습니다.

D3D12_FEATURE_DATA_D3D12_OPTIONS6 options;
return 
    SUCCEEDED(m_device->CheckFeatureSupport(
        D3D12_FEATURE_D3D12_OPTIONS6, 
        &options, 
        sizeof(options))) && 
    options.ShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_1;

음영 속도

D3D12_SHADING_RATE 열거형 값은 셰이딩 속도를 두 축으로 쉽게 분해할 수 있도록 구성됩니다. 여기서 각 축의 값은 D3D12_AXIS_SHADING_RATE 열거형따라 로그 공간으로 간결하게 표시됩니다.

매크로를 작성하여 다음과 같이 두 축 음영 속도를 음영 속도로 작성할 수 있습니다.

#define D3D12_MAKE_COARSE_SHADING_RATE(x,y) ((x) << 2 | (y))
D3D12_MAKE_COARSE_SHADING_RATE(
    D3D12_AXIS_SHADING_RATE_2X, 
    D3D12_AXIS_SHADING_RATE_1X)

플랫폼은 d3d12.h정의된 이러한 매크로도 제공합니다.

#define D3D12_GET_COARSE_SHADING_RATE_X_AXIS(x) ((x) >> 2 )
#define D3D12_GET_COARSE_SHADING_RATE_Y_AXIS(y) ((y) & 3 )

SV_ShaderRate해부하고 이해하는 데 사용할 수 있습니다.

메모

이 데이터 해석은 셰이더에서 조작할 수 있는 화면 공간 이미지를 설명하는 데 사용됩니다. 위의 섹션에서 자세히 설명합니다. 그러나 명령 수준 음영 속도를 설정할 때를 포함하여 모든 곳에서 사용할 거친 픽셀 크기에 대한 일관된 정의를 가지고 있지 않을 이유가 없습니다.

명령 수준 음영 속도 및 조합기 설정

음영 속도 및 선택적으로 결합자는 ID3D12GraphicsCommandList5::RSSetShadingRate 메서드를 통해 지정됩니다. 기본 음영 속도에 대한 D3D12_SHADING_RATE 값과 D3D12_SHADING_RATE_COMBINER 값의 선택적 배열을 전달합니다.

화면 공간 이미지 준비

사용 가능한 음영 속도 이미지를 지정하는 읽기 전용 리소스 상태는 D3D12_RESOURCE_STATES::D 3D12_RESOURCE_STATE_SHADING_RATE_SOURCE정의됩니다.

화면 공간 이미지 설정

ID3D12GraphicsCommandList5::RSSetShadingRateImage 메서드를 통해 화면 공간 이미지를 지정합니다.

m_commandList->RSSetShadingRateImage(screenSpaceImage);

타일 크기 쿼리

D3D12_FEATURE_DATA_D3D12_OPTIONS6::ShadingRateImageTileSize 멤버에서 타일 크기를 쿼리할 수 있습니다. 위의 기능 쿼리 참조하세요.

가로 및 세로 차원은 항상 동일하기 때문에 한 차원이 검색됩니다. 시스템의 기능이 D3D12_SHADING_RATE_TIER_NOT_SUPPORTED경우 반환되는 타일 크기는 0입니다.