Проблемы, вызванные буфером трафарета глубины, созданным по умолчанию

Я учусь на образце в DirectX SDK на карте теней. Этот образец создал поверхность трафарета во время инициализации и говорит:

 Create the depth-stencil buffer to be used with the shadow map

 We do this to ensure that the depth-stencil buffer is large
 enough and has correct multisample type/quality when rendering
 the shadow map.  The default depth-stencil buffer created during
 device creation will not be large enough if the user resizes the
 window to a very small size.  Furthermore, if the device is created
 with multisampling, the default depth-stencil buffer will not
 work with the shadow map texture because texture render targets
 do not support multisample.

Что это значит? Я попытался прокомментировать операторы, которые создают буфер трафарета и работают с ним, но получил довольно неустойчивые результаты: если я увеличиваю окно, тень работает хорошо, а тень перестает двигаться, когда я делаю окно намного меньше. Кто-нибудь может мне это объяснить? Большое спасибо!!!


person user2310794    schedule 24.04.2013    source источник


Ответы (1)


Буфер Main DepthStencil используется при рендеринге в Главное окно и, таким образом, будет иметь то же разрешение, что и Окно. Однако процесс затенения не обязательно должен использовать одно и то же разрешение, область просмотра и так далее. Вот почему они создают второй буфер DepthStencil с тем же разрешением, что и окно просмотра, используемое для рендеринга карты теней.

Кроме того, как говорится в цитате, может быть нежелательно использовать те же настройки формата, мультисэмплинга и т. Д., Которые вы используете для рендеринга своей сцены, для создания карты теней.

Редактировать:

Вы используете буфер трафарета, потому что хотите сохранить глубину ближайшего перекрывающего треугольника.

Буфер DepthStencil не «поддерживает отображение теней», это просто техника, которая нуждается в буфере глубины, желательно с определенными атрибутами (например, правильный размер, отсутствие MSAA и т. д.)

person Robert J.    schedule 24.04.2013
comment
Большое спасибо, но у меня все еще есть проблемы. Во-первых, почему я должен использовать трафаретный буфер в отображении теней, если моя цель — просто передать соотношение z/w из вершинного шейдера в пиксельный шейдер? Следующий вопрос: действительно ли буфер трафарета по умолчанию не поддерживает карту теней? Почему? только потому, что мультисэмплинг? - person user2310794; 25.04.2013
comment
Я добавил дополнительную информацию к своему ответу, было бы неплохо, если бы вы ее приняли. - person Robert J.; 25.04.2013