Разница между Texture2D и Texture2DMS в DirectX11

Я использую SharpDX и хочу выполнить сглаживание в буфере глубины. Мне нужно сохранить буфер глубины как текстуру, чтобы использовать его позже. Так что это хорошая идея, если эта текстура является Texture2DMS? Или я должен использовать другой подход?

Чего я действительно хочу добиться, так это:

1) Масштабирование буфера глубины

2) Суперсэмплинг теста глубины

(термины, которые я нашел в разделе 3.2 этой статьи: http://gfx.cs.princeton.edu/pubs/Cole_2010_TFM/cole_tfm_preprint.pdf


person c4sh    schedule 21.10.2013    source источник
comment
Не могли бы вы пояснить, что вы имеете в виду в пунктах 1 и 2? Что вы имеете в виду под масштабированием? Что касается суперсэмплинга, MSAA по своей природе всегда имеет глубину суперсэмплирования.   -  person MooseBoys    schedule 22.10.2013
comment
Мне трудно объяснить это, потому что я видел это в газете и точно не знаю, что это значит, и я подумал, что, возможно, это общепринятый термин. Я нашел его здесь, в конце раздела 3.2 (Тестирование видимости): gfx.cs .princeton.edu/pubs/Cole_2010_TFM/cole_tfm_preprint.pdf   -  person c4sh    schedule 22.10.2013
comment
Вы пытаетесь реализовать технику рендеринга линий, описанную в статье? Если да, уточните это в тексте вопроса. Если нет, то какую технику рендеринга вы пытаетесь реализовать, требующую буфера глубины с более высоким, чем обычно, разрешением?   -  person MooseBoys    schedule 22.10.2013
comment
Да, я! Но я думаю, что это большая задача для вопроса. Это действительно добавляет к вопросу?   -  person c4sh    schedule 22.10.2013
comment
Это действительно помогает, так как этот хороший подход требует контекста конечной цели, а особенности (1 и 2) слишком расплывчаты, чтобы дать хороший ответ.   -  person MooseBoys    schedule 22.10.2013


Ответы (1)


В документе содержится призыв к глубинному предварительному проходу. Поскольку этот проход не требует цвета, вы должны оставить цель рендеринга несвязанной и использовать «пустой» пиксельный шейдер. Для глубины вы должны создать Texture2D (не MS) в 2x или 4x (или в каком-то другом 2Nx) ширине и высоте конечной цели рендеринга, которую вы собираетесь использовать. На самом деле это не «суперсэмплинг» (поскольку предварительный проход - это независимая фаза без фактического вывода пикселей), но это похоже.

На втором этапе документ призывает сделать несколько выборок буфера глубины высокого разрешения из предварительного прохода. Если вы следовали указанному выше размеру, каждый пиксель будет соответствовать некоторым (2N)^2 значениям глубины. Вам нужно будет прочитать эти значения и усреднить их. К счастью, есть способ сделать это с аппаратным ускорением (называемый PCF) с использованием SampleCmp с СРАВНЕНИЕ тип семплера. Это выборка штампа 2x2, каждое значение сравнивается с указанным значением (передайте здесь расчетную глубину второго этапа и не забудьте добавить некоторое значение эпсилон (например, 1e-5)) и возвращает усредненный результат. Сделайте 2x2 штампа, чтобы покрыть всю площадь буфера глубины первой фазы, связанного с этим пикселем, и усредните результаты. Окончательный результат показывает, какая часть хребта текущей линии соответствует максимальной глубине предварительного прохода. Из-за плавного поведения фильтрации PCF, когда линии становятся видимыми, они будут медленно исчезать, в отличие от эффекта наложенных «точечных» линий, описанного в статье.

person MooseBoys    schedule 22.10.2013
comment
Я немного не понимаю, как визуализировать текстуру и помещать туда информацию о глубине. Не могли бы вы указать мне учебник по ресурсам, который может мне помочь? Я видел это: rastertek.com/dx11tut22.html... кажется довольно хорошим но он отображает нормальную сцену, а не глубину. - person c4sh; 23.10.2013
comment
@ c4sh Дело не столько в том, что вы визуализируете глубину текстуры. Скорее, вы выполняете стандартный проход рендеринга с только привязкой вида глубины. Это приводит к тому, что глубина записывается как обычно, без накладных расходов на рендеринг цвета. Это то же самое, что и рендеринг обычной сцены один раз, только без использования полученных данных цели рендеринга, но с более высокой производительностью. - person MooseBoys; 23.10.2013