Проблемы связанные с аппаратным обеспечением

В этом разделе руководства описаны типичные проблемы рендеринга 3Д-графики, связанные с аппаратным обеспечением и драйверами, и которые могут возникнуть во время разработки ВебГЛ-приложений.

Проблемы со сглаживанием при использовании процедурных текстур

Иногда при использовании процедурных текстур могут возникать проблемы со сглаживанием. Например, при использовании карты Checker:

Это происходит, когда в настройках экспорта Anti-Aliasing установлено значение MSAA или Auto (которое по умолчанию использует МСАА 4x на любом совместимом оборудовании). Техника МСАА (мультисемпловое сглаживание) обеспечивает достойное качество изображения и имеет низкое влияние на производительность, однако она не очень хорошо работает для процедурных текстур с резкими изменениями цвета объектов.

Переключение метода Anti-Aliasing на FXAA устраняет проблему:

FXAA использует пост-процессинговый рендеринг для уменьшения ступенчатости и хорошо работает для таких "граней", создаваемых процедурными картами.

Артефакты пересечения, когда два объекта расположены близко друг к другу

Иногда вы можете столкнуться с артефактами, подобными этим:

Артефакты z-файтинга

Это так называемый z-fighting (техническая документация на «Википедии») и происходит он, когда разные полигоны имеют равную дистанцию до камеры, или их дистанция отличается очень незначительно.

Чтобы исправить это, вам нужно сделать одно из следующих действий:

Артефакты-полосы при использовании градиентов или тёмных сцен

При использовании градиентов и затемнённых сцен возможно возникновение следующих артефактов в виде полос:

Рендеринг без дитеринга

Эти артефакты вызваны ограничением точности цветовых буферов и могут быть устранены (или существенно уменьшены) посредством использования дитеринга:

Рендеринг с включённым дитерингом

Инструкции по включению дитеринга находятся в соответствующих разделах: «Блендер», «3дс Макс», or «Майя».

Слишком много атрибутов

Время от времени при работе над сценой вы можете столкнуться с проблемой, когда некоторые объекты не отрисовываются вообще, а в консоли браузера появляется следующая ошибка:

Ошибка "Too many attributes" в консоли браузера

Эта ошибка означает, что некоторые объекты (очевидно те, которые не смогли быть отрисованы) превышают максимальное количество вертексов, которые могут быть использовать в одном шейдере.

То, сколько атрибутов использует объект, зависит от различных факторов: наличие и количество shape keys (Блендер) / morph targets (3дс Макс) / blend shapes (Майя), наличие скиннинга, определенных нод материалов и т.д.

Вот таблица, которая объясняет, как рассчитать количество используемых атрибутов:

Число атрибутов Описание
3 Обязательные атрибуты: position, normal, uv.
+2x Добавляется за каждый shape key (Блендер) / morph target (3дс Макс) / blend shape target (Майя). Максимальное количество атрибутов для для этой категории ограничено +12.
+2 Добавляется если объект использует скиннинг
+1x Добавьте для каждой из следующих нод материала объекта, которые используют различные* вертексные цвета:
  • Блендер: Attribute, Vertex Color
+1x Добавьте для каждой из следующих нод материала объекта, которые используют различные* карты нормалей кроме первой (она уже покрыта обязательным атрибутом uv, см. первую строку):
  • Блендер: UV Map
  • 3дс Макс: Bitmap (только если "Mapping Type" выставлен на "Texture") Gradient Ramp, Noise (только если "Mapping" выставлен на "Explicit Map Channel")
  • Майя: place2dTexture
+1 Добавьте, если материал объекта имеет одну из следующих нод:
  • Блендер: Normal Map, Tangent (только в режиме "UV Map")
  • 3дс Макс: Normal Bump
  • Майя: aiNormalMap, bump2d (только во вход "Bump Interp" > 0), samplerInfo
+1 Добавьте, если материал объекта имеет одну из следующих нод:
  • 3дс Макс: Vertex Color

* Если несколько узлов используют один и тот же вертексный цвет или карту нормалей, то все эти ноды считаются как одна.

Как правило, достаточно оставаться в пределах 16 вертексных атрибутов (хотя некоторые старые/низкокачественные устройства могут поддерживать только 8). Чаще всего вам следует беспокоиться только об объектах, использующих несколько ключей формы. В остальном количество вертексных атрибутов обычно не превышает лимит для типичного объекта/материала.

Остались вопросы?

Задайте их на нашем форуме!