Представления, упорядоченные средством программной прорисовки
Упорядоченные по растеризатору представления позволяют коду пиксельного шейдера помечать привязки неупорядоченного представления доступа (UAV) объявлением, которое изменяет обычные требования к порядку результатов графического конвейера для БПЛА. Это позволяет работать алгоритмы прозрачности, независимые от порядка (OIT), которые дают гораздо лучшие результаты отрисовки, когда несколько прозрачных объектов находятся в одном представлении друг с другом.
Общие сведения
Стандартные графические конвейеры могут испытывать проблемы с правильным объединением нескольких текстур, содержащих прозрачность. Такие объекты, как проволочные заборы, дым, огонь, растительность и цветное стекло, используют прозрачность для получения желаемого эффекта. Проблемы возникают, когда несколько текстур, содержащих прозрачность, находятся в соответствии друг с другом (дым перед забором перед стеклянным зданием, содержащим растительность, как пример). Упорядоченные по растеризатору представления (ROV) позволяют базовым алгоритмам OIT использовать функции оборудования, чтобы попытаться правильно разрешить порядок прозрачности. Прозрачность обрабатывается пиксельным шейдером.
Упорядоченные по растеризатору представления позволяют коду пиксельного шейдера помечать привязки UAV объявлением, которое изменяет обычные требования к порядку результатов графического конвейера для БПЛА.
РОВ гарантируют порядок доступа К БПЛА для любой пары вызовов перекрывающихся пиксельных шейдеров. В этом случае "перекрытие" означает, что вызовы создаются теми же вызовами draw и используют одну и ту же пиксельную координату в режиме выполнения с частотой пикселей, а также одну и ту же координату пикселя и образца в режиме частоты выборки.
Порядок, в котором выполняются перекрывающиеся ROV-доступы вызовов шейдера пикселей, идентичен порядку отправки геометрии. Это означает, что для перекрывающихся вызовов шейдера пикселей операции записи ROV, выполняемые вызовом шейдера пикселей, должны быть доступны для чтения последующим вызовом и не должны влиять на операции чтения предыдущим вызовом. Операции чтения ROV, выполняемые вызовом пиксельного шейдера, должны отражать операции записи предыдущим вызовом и не должны отражать записи последующим вызовом. Это важно для БПЛА, так как они явно опущены в гарантиях инвариантности вывода, которые обычно задаются фиксированным порядком результатов графического конвейера.
Сведения о реализации
Представления, упорядоченные растеризатором (ROV), объявляются со следующими новыми объектами HLSL и доступны только для пиксельного шейдера:
RasterizerOrderedBuffer
RasterizerOrderedByteAddressBuffer
RasterizerOrderedStructuredBuffer
RasterizerOrderedTexture1D
RasterizerOrderedTexture1DArray
RasterizerOrderedTexture2D
RasterizerOrderedTexture2DArray
RasterizerOrderedTexture3D
Используйте эти объекты так же, как и другие объекты UAV (например RWBuffer
, и т. д.).
Сводные данные API
RoV — это конструкция, предназначенная только для HLSL, которая применяет разную семантику поведения к БПЛА. Все API, относящиеся к БПЛА, также относятся к РОЛ. Обратите внимание, что следующие методы, структуры и вспомогательный класс ссылают на растеризатор:
- D3D12_RASTERIZER_DESC : структура, содержащая описание растеризатора.
- D3D12_FEATURE_DATA_D3D12_OPTIONS : структура, содержащая логическое значение, указывающее на поддержку.
- CheckFeatureSupport : метод для доступа к поддерживаемым функциям.
- CD3DX12_RASTERIZER_DESC : вспомогательный класс для создания описаний растеризатора.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : структура, содержащая состояние конвейера.