Draw Calls and Materials

От Tony_Hilliam, Октябрь 13 2017 (Перевод Dimokus)


На прошлой неделе мы говорили о том, как обновляется Level of Detail (LOD), чтобы разработчики контента могли получить максимальную отдачу от движка. В то время как добавление LOD уменьшит количество полигонов вашей сцены, и есть другие факторы, которые влияют на производительность. Итак, на этой неделе мы рассмотрим, как оптимизировать ваш контент, чтобы избежать чрезмерных вызовов отрисовки.

Draw Calls

Что такое Draw Call? В основном Draw Call посылает всю информацию о текстурах, материалах и шейдерах в графический движок. При каждом вызове есть накладные расходы, поэтому чем меньше число, тем лучше.
Каждый раз, когда новый материал используется в вашей модели, он потенциально может стоить еще одно количество вызовов отрисовки (Draw call count) (если только он не является общим материалом, но мы это получим позже). Чем больше обращений требует движок, тем выше вероятность того, что вы достигнете «узкого места», и производительность пострадает.
Также стоит отметить, что преимущества сокращения призывов к обращению уменьшаются по мере увеличения количества полигонов. Фактически, вы не можете иметь мешь размером 100к с одним вызовом отрисовки - игра не позволит этого.

Материалы

Материалы определяют, что отображается на сетке. Каждый материал состоит из типа материала, текстур и других параметров конфигурации. Если вы измените любой из этих параметров, вам необходимо использовать новый материал.
Сейчас у нас есть много типов материалов в Trainz, и мы расширяем этот набор с новыми материалами (“PBR” materials) для следующего продукта Trainz:
В приведенном ниже примере мы будем использовать новый материал PBR - m.pbrmetal.
Здесь вы можете увидеть, что наш материал состоит из трех текстур. (См. Эту ссылку в разделе Типы материалов для получения более подробной информации)

Мы применили этот материал к нашей меши (в данном случае куб), и теперь, если мы сделаем это в игре, у него будет один призыв на призыв, так как у нас есть ровно один материал, который отображается.

Теперь мы продолжим и добавим еще один материал с одной стороны куба:

Вы можете увидеть внутриигровую игру, и теперь она обошлась нам в 2 отрисовках (Draw Call), так как мы теперь применили 2 материала к меши:

ПРИМЕЧАНИЕ: Trainz использует систему под названием «mesh-stitching», которая позволяет некоторым сеткам в сцене использовать один и тот же материал для сшивания вместе. Существуют определенные условия для определения того, будут ли активы включены в процесс сшивания. Ты можешь прочитать больше про mesh-stitching тут.

Общие материалы

Когда несколько файлов меши в одном дополнении используют одни и те же имена материалов, эти материалы «разделяются» между сетками. Это повышает эффективность, позволяя mesh-stitching между различными мешами и уменьшая количество вызовов отрисовки. Без разделяемых материалов каждая мешь может сшить (stitching) индивидуально, но не против других мешей. Даже там, где mesh-stitching неприменимо, есть некоторые выгоды от повышения эффективности за счет использования нескольких экземпляров одного и того же материала, а не для использования нескольких отдельных материалов.
В следующем примере я взял кубическую сетку и сферическую сетку и применил один и тот же материал к обеим сеткам. Как вы можете видеть при рендеринге в Trainz, все еще остается только один вызов к отрисовки, потому что оба дополнения (или меши) разделяют 1 материал.

При включении «Статистика производительности» в Surveyor (Настройки -> Общие настройки -> Показать статистику производительности в Surveyor) мы можем видеть, что Stitched Materials = 1, что означает только один вызов к отрисовки. Помните, что это работает только в том случае, если сетки передают набор условий, указанных в пригодность mesh-stitching.

На следующей недели

На следующей неделе мы рассмотрим еще пару дополнительных оптимизаций, которые еще больше улучшат производительность вашего контента. Оставайтесь с нами, чтобы узнать об использовании Textures Atlases и Mesh Libraries.

Для получения дополнительной информации о будущей разработке Trainz обязательно ознакомьтесь с http://trainzportal.com или просмотрите все статьи
Все создатели контента, которые хотят начать изучать технику, найдут некоторую исходную информацию в вики-каталоге Trainz