Неполадки, связанные с аппаратным обеспечением

В этом разделе руководства описаны типичные неполадки, связанные с аппаратным обеспечением и внедрением, которые могут возникнуть во время разработки приложения WebGL.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

z-fighting artifacts

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

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

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

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