Version: 5.3 (switch to 5.4b)
Legacy Shaders
Семейство шейдеров нормалей (Normal Shader Family)

Использование и производительность встроенных шейдеров

Шейдеры в Unity используются через материалы, которые по существу комбинируют код шейдера с его параметрами, такими как текстуры. Глубокое объяснение связи шейдер / материал может быть найдено здесь.

Свойства материала показываются в инспекторе, когда будут выбраны или сам материал, или GameObject, который использует материал. Инспектор для материала выглядит так:

Каждый материал выглядит немного по другому в инспекторе, в зависимости о используемого в нем шейдера. Сам шейдер определяет какие свойства будут доступны для настройки в инспекторе. Инспектор материала описан в деталях на странице справочника по компоненту Material. Помните, что шейдер реализовывается через материал. Таким образом, в то время как шейдер определяет свойства, которые будут отображаться в инспекторе, материал содержит настроенные данные слайдеров, цветов и текстур. Наиболее важная вещь - помнить о том, что один шейдер может быть использован во многих материалах, но один материал не может использовать несколько шейдеров.

Вопросы производительности

Есть несколько факторов, которые могут воздействовать на общую производительность в игре. На этой странице мы поговорим о вопросах производительности для встроенных шейдеров. Производительность шейдеров наиболее зависит от двух вещей: самого шейдера и какой режим рендеринга используется проектом или конкретной камерой. Для советов по производительности при написании своего шейдера смотрите страницу Производительность шейдеров ShaderLab.

Режимы рендеринга и производительность шейдеров

Из режимов рендеринга, поддерживаемых Unity, режимы отложенного освещения и вершинного освещения имеют наиболее предсказуемую производительность. В отложенном освещении каждый объект обычно рисуется дважды не зависимо от количества освещающих его источников света. В вершинном освещении каждый объект рисуется один раз. Таким образом, производительность в шейдерах при этом будет зависеть от того, как много текстур они используют и какие совершают расчеты.

Производительность шейдеров при упреждающем режиме рендеринга

При упреждающем типе рендеринга, производительность шейдера зависит и от самого шейдера, и от источников освещения в сцене. Следующий раздел поясняет это в деталях. Существует две основных (с точки зрения производительности) категории шейдеров: Vertex-Lit (вершинная подсветка) и Pixel-Lit (пиксельная подсветка).

Шейдеры Vertex-Lit в упреждающем режиме рендеринга всегда менее ресурсоёмки, чем Pixel-Lit шейдеры. Эти шейдеры работают с помощью расчёта освещения на вершинах меша, используя сразу все источники освещения. Поэтому, неважно сколько источников освещения освещают объект, он всё равно будет отрисован только один раз.

Pixel-Lit шейдеры рассчитывают итоговое освещение для каждого отрисовываемого пикселя. Из-за этого, объект должен быть отрисован один раз для получения освещения от окружения и от одного главного направленного источника света, и по одному разу для каждого дополнительного источника освещения, который его освещает. Это увеличивает нагрузку на CPU для обработки и отправки на графический адаптер команд, и нагрузку на GPU для обработки вершин и отрисовки пикселей. Пространство, занимаемое на экране попиксельно освещаемым объектом, также влияет на производительность отрисовки. Чем больше объект, тем больше придётся обработать пикселей и тем медленней будет проходить отрисовка.

Так что использование pixel lit шейдеров требует дополнительных ресурсов, но, зато, позволяет реализовать некоторые изумительные эффекты с помощью теней, карт нормалей, красивых отражаемых бликов и источников света с cookie текстурами (это лишь некоторые из возможностей).

Запомните, что можно форсировать тип рендеринга у источников освещения в пиксельный (“important”) или вершинный/SH (“not important”). Любой вершинный свет, попадающий на Pixel-Lit шейдер будет рассчитываться на основе вершин объекта или всего объекта, и не будет потреблять дополнительных ресурсов и выдавать эффекты, ассоциируемые с пиксельными источниками освещения.

Основа производительности шейдеров

Рассматривая встроенные шейдеры, они идут по мере увеличения сложности:

  • Unlit.Это просто текстура, на которую не влияет какое-либо освещение.
  • VertexLit.
  • Diffuse.
  • Normal mapped. Это немного более ресурсоёмкий шейдер, чем Diffuse: в нём добавлена ещё одна текстура (карта высот) и несколько дополнительных шейдерных инструкций.
  • Specular. В этом добавлен расчёт зеркальных бликов.
  • Normal Mapped Specular. Опять же, несколько более ресурсоёмкий шейдер по сравнению со Specular.
  • Parallax Normal mapped. В этом добавлены расчёты параллаксового применения карт нормалей.
  • Parallax Normal Mapped Specular. В этом добавлены расчёты и параллаксового применения карт нормалей и зеркальных бликов.

Mobile simplified shaders

Кроме того, в Unity существует несколько упрощённых шейдеров для использования на мобильных платформах, они расположены в категории “Mobile”. Эти шейдеры работают и на других платформах, так что если вам не мешают упрощения, которые в них внесены (например, усреднённые отражения, нет поддержки цветов для каждого материала и т.д.), попробуйте использовать их!

To see the specific simplifications that have been made for each shader, look at the .shader files from the “built-in shaders” package and the information is listed at the top of the file in some comments.

Some examples of changes that are common across the Mobile shaders are:

  • There is no material color or main color for tinting the shader.
  • For the shaders taking a normal map, the tiling and offset from the base texture is used.
  • The particle shaders do not support AlphaTest or ColorMask.
  • Limited feature and lighting support - e.g. some shaders only support one directional light.
Legacy Shaders
Семейство шейдеров нормалей (Normal Shader Family)