Текстурные библиотеки и библиотеки мешей

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


Если вы пропустили блог на прошлой неделе, вы должны сначала прочитать это: Draw Calls and Materials. На этой неделе мы рассмотрим некоторые дополнительные методы оптимизации, которые помогут повысить производительность по всем направлениям.

Библиотеки текстур

Мы узнали, что совместное использование материалов - это хорошо, но часто для одного объекта меши требуется другой набор текстур для другого объекта меши (например, вы не будете делиться кирпичной текстурой Asset 1 на модели автомобиля Asset 2).
Вместо этого то, что мы делаем с дополнениями, которые регулярно появляются на одной и той же сцене, заключается в объединении нескольких текстур в один и переназначение UVs из меши, чтобы выглядеть правильно, используя эту новую комбинированную текстуру.
«Библиотеки текстур» - просто причудливое название этой техники упаковки нескольких текстур в одну большую текстуру.
В этом примере показано, что происходит, когда мы объединяем две отдельные текстуры 1024x1024 в одну текстуру 1024x2048.

В игре мы представляем кубическую сетку, которая имеет 1 материал с одной библиотекой текстур. У нас есть «UV mapped», большая часть куба с верхней половиной нашей библиотекой текстур и одной стороны нашего куба с нижней частью нашей части библиотеки текстур, но при этом генерирует только одну отрисовку (Draw Call Count).

Примечание. Объединение всего в одну большую текстуру не всегда является лучшим вариантом. Этот процесс лучше всего работает при использовании большого количества мешей, которые разделяют библиотеку в одной и той же сцене. Сцена здесь означает то, что делается в любой момент, а не то, что находится на всем маршруте.
Если мы создадим 60 дополнений, все используют одну библиотеку текстур, но затем используем только одно из этих дополнений в сцене; большая текстура загружается только для одного дополнения. Мы используем около 1/60-го текстурной библиотеки, поэтому 98% нашего пространства текстуры теряются в этом случае, поэтому отличный результат.
На оборотной стороне, если мы используем каждый из этих 60 различных дополнений в одной сцене, тогда для этого требуется только одна отрисовка. Это улучшение от 60 отрисовок к обращению к библиотеке текстур, и это также не требует дополнительного пространства текстуры!

Использование библиотеки текстур в LOD

Еще один эффективный способ использования библиотеки текстур - для более низких LOD. Вы по-прежнему будете использовать отдельные текстуры для своих LOD с большими деталями, поэтому у вас есть много текстоледов (texels), доступных для каждого актива при осмотре. Тогда ваш самый низкий LOD может использовать небольшую (например, 256x256 или 512 x 512) библиотеку текстур для целого ряда дополнений. Это означает, что если 60 дополнений самом низком LOD разделяют одна библиотека текстур, не только 60 дополнений выполняют только одну отрисовку, вы также имеете только одну небольшую текстуру.

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

Библиотека мешей

Чтобы позволить нескольким ресурсам Trainz ссылаться на одни и те же материалы, вам необходимо создать объект Mesh Library. Этот процесс очень прост.
Мы хотим, чтобы дополнение 1, дополнение 2 и дополнение 3 имели одинаковые текстуры. Решение состоит в создании четвертого актива под названием Asset 4 Lib, который содержит все меши и текстуры.

В контейнере mesh-таблицы config.txt вы добавите следующий тег, чтобы ваше дополнение знало, где найти меши в вашем ресурсе Mesh Библиотека:
Mesh-table
{
Default
{
Mesh-asset <LIBRARY-KUID-GOES-HERE>
Mesh “trainz-mesh-in-mesh-library.trainzmesh”
}

Another
{
Mesh-asset <LIBRARY-KUID-GOES-HERE>
Mesh “trainz-mesh-in-mesh-library.trainzmesh”
}
}

"No-Mesh" LOD

Одна из последних областей, которые нужно рассмотреть, прежде чем мы суммируем все, - это «No-mesh» LOD. Это используется для полного удаления элемента со сцены, когда он находится достаточно далеко от камеры, и вы даже не заметите, что он отсутствует.
Это достигается путем предоставления одного дополнительного расстояния перехода LOD в новом теге «mesh-table-lod-transition-distance-distance» в сравнении с количеством включенных мешей. Например. обеспечивают три расстояния перехода LOD (с указанием четырех уровней LOD), но не предоставляют запись ячейки сетки для окончательного уровня уровня.

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

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

Лучшая практика:

В примерах здесь используются четыре уровня LOD; при необходимости, в зависимости от вашего актива.
- Используйте библиотеку текстур, который делится с рядом других дополнений, которые могут быть использованы в одной и той же сцене, и используйте библиотеку мешей для хранения всех текстур и мешей.
- LOD0, LOD1 и LOD2 имеют один уникальный материал с высокой детализацией, уникальный для этого дополнения.
- LOD3 является самым низким LOD и будет использовать общий материал библиотеки.
- LOD0 использует мешь с высокой детализацией для близкого просмотра.
- LOD1 и LOD2 используют низкоуровневые меши на средней дистанции.
- Для больших объектов (больше, чем дома) LOD3 должен быть всего несколькими полигонами.
- Для небольших объектов LOD3 даже не требует меши.

Худшая практика:

- Используйте несколько материалов в одной меши, когда количество полигонов низкое.
- Используйте только небольшую часть большой текстуры.
- Невозможно использовать LOD или использовать слишком много полигонов на отдаленных (низкомолекулярных) мешах.
- Предоставить LOD, но не установить соответствующие расстояния.
- Используйте библиотеку текстур высокого разрешения для дополнений, которые вряд ли будут использоваться в одной и той же сцене.
- Используйте скрипт на сильно используемых объектах пейзажа.
- Используйте PFX для сильно используемых объектов декораций.
- Используйте анимацию на сильно используемых дистанционных (низкоуровневых) мешах.
- Используйте .LM на сильно используемых декоративных мешах без возврата к более низкому уровню детализации.
Спасибо за прочтение.

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