Лучшие практики по устранению эффекта ступенчатости
Qt Quick 3D предоставляет несколько способов борьбы со ступенчатостью (рваными краями) при отрисовке 3D-моделей. Каждый метод обладает своими преимуществами и ограничениями. Можно комбинировать несколько методов, но это приведет к снижению производительности.
Причины возникновения ступенчатости
Хотя ступенчатость полезна в графическом рендеринге, она может негативно повлиять на производительность приложения, если её не использовать разумно. В следующих разделах рассматриваются различные методы устранения ступенчатости. Понимание того, какой метод лучше всего подходит для вашей задачи, поможет сбалансировать качество визуализации и скорость рендеринга.
Ступенчатость геометрии
По умолчанию вся геометрия отрисовывается по одному пикселю на экране. Как вы можете видеть слева на изображении ниже, это приводит к резким краям, которые могут быть легко заметны в случаях с высокой контрастностью (особенно в черно-белом случае).
Эффективные методы уменьшения ступенчатости геометрии
Наиболее корректным решением является использование многократной выборки, так как оно собирает больше геометрических деталей только по мере необходимости. Использование временной антиалиасинга или постепенного антиалиасинга также может эффективно устранить проблему.
Наконец, в некоторых случаях можно использовать маску непрозрачности силуэта, чтобы сгладить края выбранной геометрии.
Ступенчатость текстур
При субдискретизации текстуры отображается меньшее количество пикселей, чем в оригинале, что приводит к нежелательным артефактам, в зависимости от выбора пикселей. Этот эффект ухудшается при движении модели, так как в разные моменты времени выбираются разные пиксели. На изображении ниже обратите внимание, как линия между E3 и F3 отсутствует, сильно видна между G3 и H3, затем исчезает на следующие 5 столбцов и так далее.
Эффективные методы уменьшения ступенчатости текстур
Самым простым (и, пожалуй, лучшим) решением этой проблемы является использование MIP-картирования в самой текстуре изображения. Альтернативными решениями являются использование временного антиалиасинга или постепенного антиалиасинга для получения большей информации о текстуре.
Использование многократной выборки не решит эту проблему.
Ступенчатость отражений
Подобно ступенчатости текстур, материал, отражающий окружение, будет субдискретизировать изображение. В некоторых случаях, как показано слева на изображении ниже, это становится очевидным, когда пропущены мелкие детали.
Эффективные методы уменьшения ступенчатости отражений
Наиболее корректным решением в этом случае является использование временного антиалиасинга или постепенного антиалиасинга для получения дополнительной информации.
Простым альтернативным решением, которое может быть приемлемым, является уменьшение блеска материала и повышение шероховатости. В этом случае автоматически используются MIP-карты меньшего разрешения окружающей среды, что сглаживает резкие детали.
Методы устранения эффекта ступенчатости
Ступенчатость возникает, когда в исходном изображении больше информации, чем мы можем отобразить в пикселях на экране. Методы устранения ступенчатости можно разделить на три категории:
- Методы, которые находят дополнительную информацию для отдельного пикселя и представляют её всю одновременно.
- Эффекты изображения, которые пытаются определить, где возникают проблемы, и устранить их.
- Методы, используемые художниками, которые пытаются обойти ограничения.
Методы поиска дополнительной информации
Многократная выборка
Многократная выборка (MSAA) работает с целым слоем. Края геометрии сверхдискретизируются, что приводит к более плавным контурам. Однако этот метод не влияет на материалы внутри геометрии.
- Преимущества: Хорошие результаты для контуров геометрии, где ступенчатость часто наиболее заметна. Работает с быстрой анимацией без проблем. Многие современные графические процессоры поддерживают 2x или 4x MSAA без проблем с производительностью.
- Недостатки: Может быть затратным в использовании. Не помогает с проблемами текстур или отражений.
Временной антиалиасинг
Временной антиалиасинг работает с целым слоем. Камера слегка смещается между кадрами, а результат каждого нового кадра смешивается с предыдущим кадром.
- Преимущества: Благодаря смещению камеры он находит реальные детали, которые были потеряны. Низкое влияние на производительность.
- Недостатки: Быстро движущиеся объекты могут оставлять следы на одном кадре.
Постепенный антиалиасинг
Постепенный антиалиасинг (PAA) работает с целым слоем. Когда всё содержимое слоя перестаёт двигаться, камера слегка смещается между кадрами, а результат каждого нового кадра смешивается с предыдущими кадрами. Чем больше кадров вы накопите, тем лучше будет результат.
- Преимущества: Обеспечивает детальные статичные изображения без потери производительности.
- Недостатки: Не действует, если происходят какие-либо визуальные изменения. 8x PAA занимает одну восьмую секунды для завершения рендеринга (при 60 кадрах в секунду), что может быть заметно.
MIP-карты
MIP-карты хранят текстуру вместе с предварительно вычисленными версиями меньшего разрешения. Когда текстура отображается в меньшем размере, система рендеринга автоматически использует эти изображения с меньшим разрешением (которые объединяют много деталей в один пиксель), смешивая их по мере необходимости.
- Преимущества: Очень малое влияние на производительность. Значительно улучшает качество изображения для текстур. Подталкивает к использованию сжатых текстур, которые загружаются и рендерятся быстрее, чем несжатые изображения.
- Недостатки: Требует использования внешних инструментов для оптимизации изображений. Использует на 33% больше памяти видеокарты, чем то же изображение без MIP-карт.
Сверхдискретизация
Сверхдискретизация (SSAA) работает с целым слоем или даже несколькими слоями. Она не упоминается и не сравнивается выше, потому что накладные расходы на производительность могут быть значительными, а также из-за необходимости дополнительной работы художника. Этот метод следует использовать в крайних случаях.
- Преимущества: Обеспечивает антиалиасинг для всей сцены без ограничений на анимацию.
- Недостатки: Может сильно снизить производительность, когда сцена уже ограничена скоростью заполнения буфера графического процессора, что часто бывает.
Хитрости художников
Маски непрозрачности силуэта
Если ваша модель имеет постоянный силуэт, вы можете применить маску непрозрачности, которая делает внешний край геометрии прозрачным. Использование градиента для непрозрачности позволит краю объекта плавно исчезать. Однако, даже если ваша маска непрозрачности переходит непосредственно от полностью непрозрачной к полностью прозрачной на протяжении одного пикселя, результат всё равно будет с антиалиасингом, как показано в примере выше. Это происходит потому, что карты изображений, включая маски непрозрачности, используют билинейную интерполяцию.
- Преимущества: Может показывать более плавные переходы, чем обычный антиалиасинг. Может применяться для каждой модели вместо всего слоя.
- Недостатки: Не может использоваться, если силуэт объекта будет изменяться. Несколько перекрывающихся моделей, использующих прозрачность, потребляют вычислительные ресурсы графического процессора, которые часто ограничены.
Изменение материалов или геометрии
Как показано на изображении для ступенчатости отражений выше, иногда самым простым решением проблем является изменение визуальных элементов. Если у вас появляются отвлекающие блики на углу вашей модели, задайте себе вопрос: Могу ли я сделать материал мягче? Могу ли я изменить геометрию, чтобы сгладить или изменить угол отражения? Могу ли я изменить карту окружающей среды, чтобы уменьшить резкие переходы?
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/quick3d-asset-conditioning-anti-aliasing.html