Проблемы связанные с аппаратным обеспечением
В этом разделе руководства описаны типичные проблемы рендеринга 3Д-графики, связанные с аппаратным обеспечением и драйверами, и которые могут возникнуть во время разработки ВебГЛ-приложений.
- Проблемы со сглаживанием при использовании процедурных текстур
- Артефакты пересечения, когда два объекта расположены близко друг к другу
- Артефакты-полосы при использовании градиентов или тёмных сцен
- Слишком много атрибутов
Проблемы со сглаживанием при использовании процедурных текстур
Иногда при использовании процедурных текстур могут возникать проблемы со сглаживанием. Например, при использовании карты Checker:
Это происходит, когда в настройках экспорта Anti-Aliasing установлено значение MSAA или Auto (которое по умолчанию использует МСАА 4x на любом совместимом оборудовании). Техника МСАА (мультисемпловое сглаживание) обеспечивает достойное качество изображения и имеет низкое влияние на производительность, однако она не очень хорошо работает для процедурных текстур с резкими изменениями цвета объектов.
Переключение метода Anti-Aliasing на FXAA устраняет проблему:
FXAA использует пост-процессинговый рендеринг для уменьшения ступенчатости и хорошо работает для таких "граней", создаваемых процедурными картами.
Артефакты пересечения, когда два объекта расположены близко друг к другу
Иногда вы можете столкнуться с артефактами, подобными этим:
Это так называемый z-fighting (техническая документация на «Википедии») и происходит он, когда разные полигоны имеют равную дистанцию до камеры, или их дистанция отличается очень незначительно.
Чтобы исправить это, вам нужно сделать одно из следующих действий:
- Самое простое решение - расположить объекты дальше друг от друга.
- Увеличьте дистанцию near (или clip start) камеры и/или уменьшите дистанцию far (или clip end) камеры. Это сделает диапазон расстояний камеры меньше и тем самым повысит точность значений, хранящихся в буфере глубины.
- Если вам нужно разместить текстуру билборда над какой-либо поверхностью — отключите Depth Test на материале билборда и увеличьте параметр Rendering Order на объекте. Билборд будет отображаться после объекта поверхности и будет игнорировать глубину, сохраненную этим объектом. Это эффективно устраняет z-fighting, который может произойти между этими двумя объектами.
Артефакты-полосы при использовании градиентов или тёмных сцен
При использовании градиентов и затемнённых сцен возможно возникновение следующих артефактов в виде полос:
Эти артефакты вызваны ограничением точности цветовых буферов и могут быть устранены (или существенно уменьшены) посредством использования дитеринга:
Инструкции по включению дитеринга находятся в соответствующих разделах: «Блендер», «3дс Макс», or «Майя».
Слишком много атрибутов
Время от времени при работе над сценой вы можете столкнуться с проблемой, когда некоторые объекты не отрисовываются вообще, а в консоли браузера появляется следующая ошибка:
Эта ошибка означает, что некоторые объекты (очевидно те, которые не смогли быть отрисованы) превышают максимальное количество вертексов, которые могут быть использовать в одном шейдере.
То, сколько атрибутов использует объект, зависит от различных факторов: наличие и количество shape keys (Блендер) / morph targets (3дс Макс) / blend shapes (Майя), наличие скиннинга, определенных нод материалов и т.д.
Вот таблица, которая объясняет, как рассчитать количество используемых атрибутов:
Число атрибутов | Описание |
---|---|
3 | Обязательные атрибуты: position, normal, uv. |
+2x | Добавляется за каждый shape key (Блендер) / morph target (3дс Макс) / blend shape target (Майя). Максимальное количество атрибутов для для этой категории ограничено +12. |
+2 | Добавляется если объект использует скиннинг |
+1x |
Добавьте для каждой из следующих нод материала объекта,
которые используют различные*
вертексные цвета:
|
+1x |
Добавьте для каждой из следующих нод материала объекта,
которые используют различные*
карты нормалей кроме первой (она уже покрыта обязательным атрибутом uv, см. первую строку):
|
+1 |
Добавьте, если материал объекта имеет одну из следующих нод:
|
+1 |
Добавьте, если материал объекта имеет одну из следующих нод:
|
* Если несколько узлов используют один и тот же вертексный цвет или карту нормалей, то все эти ноды считаются как одна.
Как правило, достаточно оставаться в пределах 16 вертексных атрибутов (хотя некоторые старые/низкокачественные устройства могут поддерживать только 8). Чаще всего вам следует беспокоиться только об объектах, использующих несколько ключей формы. В остальном количество вертексных атрибутов обычно не превышает лимит для типичного объекта/материала.
Остались вопросы?
Задайте их на нашем форуме!