Зазубренные края Direct X 11

Я создаю небольшой игровой движок в Direct X 11, который работает отлично, но я заметил, что 3D-объекты, а также 2D-объекты кажутся очень грубыми по краям при рендеринге. Раньше я переходил с Direct X 9, и этой проблемы там не было. Мне было интересно, как я могу правильно включить сглаживание или какую-то мультисэмплинг, чтобы мои текстуры не имели неровных краев.

swapChainDesc.SampleDesc.Count = 2;
swapChainDesc.SampleDesc.Quality = 0;

depthBufferDesc.SampleDesc.Count = 2;
depthBufferDesc.SampleDesc.Quality = 0;

Это комбинации количества и качества, но независимо от того, какая здесь настройка, визуальной разницы нет, иначе Direct3D не сможет создать устройство. Мой графический процессор ничего не перезаписывает, поскольку настройки предназначены для использования того, что решает приложение.


person user5901143    schedule 31.03.2016    source источник


Ответы (1)


В дополнение к включению количества выборок MSAA для цели рендеринга цепочки подкачки, вашего буфера глубины/трафарета и использования правильных значений для связанных представлений (D3D11_TEX2DMS_RTV, D3D11_DSV_DIMENSION_TEXTURE2DMS), вам необходимо фактически установить D3D11_RASTERIZER_DESC.MultisampleEnable в TRUE в состояниях вашего растеризатора:

CD3D11_RASTERIZER_DESC rastDesc(D3D11_FILL_SOLID, D3D11_CULL_NONE, FALSE,
    D3D11_DEFAULT_DEPTH_BIAS, D3D11_DEFAULT_DEPTH_BIAS_CLAMP,
    D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS, TRUE, FALSE,
    TRUE /*this is MSAA enable*/, FALSE);

См. урок Простой рендеринг для DirectX Tool Kit для более подробного примера.

Аппаратное обеспечение Direct3D Feature Level 10.1 или выше будет поддерживать 4x MSAA. Аппаратное обеспечение Direct3D Feature Level 11.0 или выше будет поддерживать 4x и 8x MSAA. Все должно поддерживать 2x MSAA.

person Chuck Walbourn    schedule 01.04.2016
comment
Кажется, это сработало для краев, но моя текстура все еще немного искажена. Например, простая текстура кольца немного искажена, и внутри нее виден прямоугольник. У меня есть скриншот, на котором исходное изображение сравнивается с тем, что на самом деле отображается в игре. dropbox.com/s/epkipy37o0b3yq7/comparison.png?dl=0 Может ли быть какая-то другая проблема? Этого не происходит ни в Direct3D 9, ни где-либо еще. - person user5901143; 01.04.2016
comment
В конвейере много состояний, поэтому причин может быть множество. У вас разные фоны на двух изображениях, так что это также способствует различиям в смешивании. Выполняете ли вы перемещение текселей в своем шейдеры? - person Chuck Walbourn; 01.04.2016
comment
Для исходного изображения я добавил черный фон с помощью gimp. Но так это должно выглядеть. Я не делаю никаких сдвигов, мой шейдер выполняет только базовое текстурирование без применения эффектов или модификаций. - person user5901143; 01.04.2016
comment
Искажение — это не то же самое, что алиасинг, и msaa работает только с ребрами треугольников, а не с поверхностями. Я могу представить эти вопросы, чтобы перепроверить для вас. 1, вы используете точечную фильтрацию и не идеально выравниваете пиксели и 2, ваш прямоугольник оконного клиента немного меньше, чем поверхность цепочки обмена, и на презентации применяется плохое масштабирование. - person galop1n; 01.04.2016
comment
А, я заметил, что предоставленные мной параметры AdjustWindowRect на самом деле ничего не делают, поэтому я посмотрел код, который был в моем движке DirectX 9, чтобы исправить это. Такая глупая ошибка. Спасибо. - person user5901143; 01.04.2016