Градиентное текстурирование — это методика оптимизации 3D-текстурирования, в первую очередь предназначенная для мобильных видеоигр. В ней используются текстурные карты низкого разрешения и градиентные цвета, позволяющие снизить ресурсную нагрузку на игровые без ущерба качеству графики. Благодаря применению градиентов в низкополигональных 3D-моделях симулируются такие эффекты, как освещение, тени и глубина, позволяя избавиться от необходимости в текстурах высокого разрешения, потребляющих больше ресурсов.
Эта методика обеспечивает эффективный баланс между производительностью и визуальным качеством, оптимизирует время загрузки и улучшает игровой процесс. Кроме того, она позволяет гибко менять цветовые палитры и может адаптироваться под разные 3D-модели, снижая размеры файлов и оптимизируя использование памяти.
3D-рендеринг
Процесс 3D-рендеринга в игровых движках необходим для преобразования 3D-моделей в видимые изображения в реальном времени. Этот процесс состоит из множества ключевых этапов, выполняемых с заданной частотой кадров в неизменных циклах в движках наподобие Unity и Unreal Engine. Сначала создаются экземпляры 3D-моделей и при помощи геометрических преобразований корректно размещаются в игровом пространстве. Затем на поверхности моделей накладываются текстуры, а шейдеры обрабатывают отображение цветов и деталей, определяя окончательный внешний вид каждого пикселя.
После наложения текстур треугольники модели при помощи растеризации преобразуются в пиксели, а буферизация глубин управляет глубиной для предотвращения визуального наложения объектов друг на друга. На этапе расчёта освещения и затенения движок вычисляет взаимодействия освещения с объектами в сцене, применяя такие эффекты, как тени, отражения и более сложные методики освещения. В конце применяются эффекты постобработки, например, сглаживание и motion blur, после чего готовое изображение отображается на экране.
Каждый из этих этапов требует эффективного управления графическими ресурсами. Основные факторы оптимизации 3D-моделей — это плотность геометрии и разрешение текстур. Большое количество полигонов способно перегрузить GPU и снизить производительность игры, а текстуры высокого разрешения занимают большие объёмы графической памяти, замедляя процесс рендеринга. В этом контексте оптимизация текстур при помощи техник наподобие градиентного текстурирования оказывается более эффективной, чем упрощение геометрии моделей. Сжатая текстура с разрешением 1K способна занимать такой же объём памяти, как 40 тысяч с лишним вершин, поэтому уменьшение размеров текстур снижает нагрузку на графическую память и увеличивает скорости обмена данными между CPU GPU без ущерба качеству графики.
Текстурирование сплошными цветами
Текстурирование сплошными цветами (Flat Color Texturing) — методика-предшественница градиентного текстурирования, предназначенная для снижения размера карты текстур с помощью упрощённого подхода. Хотя в нём также используется карта цветового альбедо, как в традиционном рисовании текстур от руки, оно отличается тем, что разрешение карты чрезвычайно снижено, обычно до 32x32px или 64x64px. Эта карта используется в качестве цветового атласа, в котором UV-острова смещены в направлении требуемых базовых цветов, создавая оттенки на каждой части модели без необходимости сложных деталей или вариаций.
В примере ниже показано, как эту методику можно комбинировать в игровом движке с интеллектуальным освещением при помощи направленных или точечных источников освещения, улучшая взаимодействие света с моделью и существенно повышая её визуальное качество:
При использовании этой методики очень важно уделять внимание сжатию текстур в движке. Из-за уменьшенного размера карты излишнее сжатие может размыть границы между цветами и вызвать размытие в игре, ухудшая чёткость цветовой палитры и отрицательно влияя на резкость и визуальное качество.
В примере ниже в карте альбедо используется более широкая цветовая палитра для симуляции эффектов освещения без внешних источников освещения. Модель обрабатывается в конвейере рендеринга движка при помощи Unlit-шейдера, устраняя вычисления освещения и теней в реальном времени. При этом отображаются только сплошные цвета и нужное освещение или тень на разных частях модели настраиваются вручную. Хотя работа с UV-картой, которая должна учитывать разные вариации освещения и тени, может быть сложной, эта методика успешно выполняет свою задачу.
Особенность этой методики заключается в том, что она может усложнить процесс моделирования, когда требуется высокий уровень детализации. В отличие от традиционного текстурирования с рисуемыми вручную текстурами, при котором детали накладываются непосредственно на текстуру, в этой методике геометрия должна обеспечивать точность. Поэтому необходимо увеличить количество полигонов в меше и модифицировать модель, добавляя вершины и грани, которые были бы не нужны, но необходимы здесь для разделения цветов и создания деталей на каждой части 3D-модели. Хотя такая зависимость от геометрии может показаться недостатком по сравнению с моделью, созданной для традиционного текстурирования, эта проблема не так важна. Так как эта техника позволяет уменьшать размеры текстурных карт, небольшое увеличение количества полигонов не влияет отрицательно на производительность. Как было показано выше, геометрия меньше влияет на движок, чем текстуры высокого разрешения, поэтому этот компромисс вполне приемлем при оптимизации графики.
Эта методика стала одной из первых попыток минимизации размеров текстурных кат, накладываемых на 3D-модели. Хоть она и позволяет достигать интересных результатов в оптимизации ресурсов, исключительное использование сплошных цветов делает её слишком простой и ограниченной, снижая визуальное качество.
Градиентное текстурирование
Градиентное текстурирование, как и текстурирование сплошными цветами, использует для оптимизации скорости обработки графики альбедо-текстуры низкого разрешения. Однако эта методика вносит важное отличие в распределение цветов в текстурной карте, обеспечивая возможность более точного контроля и улучшенных графических результатов. Вместо использования сплошных цветов с равномерным распределением, текстурная карта при этой методике упорядочивает цвета в градиенты, сгруппированные в строки или столбцы, если карты расположены горизонтально. UV-острова размещаются и растягиваются вдоль этих строк, чтобы соответствовать цветовым переходам, реализуя на модели оптимальные эффекты. Такая методика обеспечивает более практичный контроль над цветовой схемой, позволяя плавнее и непрерывней отображать вариации освещения, яркости и теней. Она может применяться к широкому спектру моделей с разными формами и цветовыми палитрами, адаптируясь под различные визуальные требования.
Для реализации градиентного текстурирования первым делом нужно создать текстурную карту низкого разрешения без сжатия, предпочтительно с использованием цветового профиля sRGB для сохранения точности цветов. Далее задаётся цветовая палитра на основании конкретных референсов или требований проекта. Затем эта палитра упорядочивается в текстурной карте в столбцы, группирующие цвета в определённом порядке. После задания палитры создаются градиенты применением в цифровом графическом редакторе маски слоя к каждой строке текстурной карты при помощи инструмента «Градиент».
Очень важно размещать самые насыщенные и яркие цвета наверху, а тёмные, менее насыщенные оттенки — внизу. После завершения текстурной карты и подготовки 3D-модели редактируются UV. Сначала выполняется общая проекция модели на текстурную карту. Затем UV-острова разделяются и привязываются к соответствующему столбцу на основании требуемого для каждой части модели цвета. После привязки цветов UV-острова растягиваются вдоль строк градиентов для имитации на модели эффектов освещения и теней. Грани, образующие углы примерно в 90 градусов с остальными, необходимо тщательно настраивать, разделяя и растягивая UV-острова в градиенте, чтобы обеспечить их освещённость или затенённость. Под конец углы модели, получившие фаски в процессе моделирования, растягиваются в направлении градиента, чтобы создать в этих областях эффект осветления.
Этот процесс можно также применять по частям для каждого столбца цветов:
Одно из главных преимуществ градиентного текстурирования — возможность генерации цветовых переходов, более эффективно имитирующих эффекты освещения без использования освещения, рассчитываемого движком в реальном времени. Обеспечив возможность градации цветов непосредственно в текстурной карте, эта методика открывает новые возможности создания мелких и детализированых эффектов, например, мягких теней или смены оттенков на кривых поверхностях, не изменяя существенно размер файла текстуры. В примере ниже яркость на кромках обеспечивается отделением и перемещением угловых граней вверх в UV-карте, что позволяет получить эффект сияния:
Кроме того, более упорядоченная структура цветов в градиентах упрощает работу с UV, обеспечивая больше контроля и точности в процессе текстурирования. Это методика превосходит текстурирование сплошными цветами, предлагая высокую гибкость при изменении цветовой палитры, поскольку это позволяет с лёгкостью менять градиент в строках текстурной карты. Благодаря этому можно создавать бесчисленные вариации цвета на одной и той же модели без необходимости переделывать UV.
Аналогично текстурированию сплошными цветами, эта методика может усложнять процесс моделирования в случаях, когда требуется высокий уровень детализации, потому что точность зависит от геометрии, а не от текстуры. Для реализации отдельных эффектов может потребоваться увеличение количества полигонов в меше, то есть изменение модели добавлением новых вершин и граней. Однако снижение производительности остаётся минимальным, поскольку уменьшение размеров текстурных карт компенсирует небольшое усложнение геометрии, создавая баланс с точки зрения оптимизации графики.
Стоит отметить, что эта методика может применяться не только к низкополигональным моделям, но и к моделям с более высокой плотностью геометрии, обеспечивая гибкость на разных уровнях детализации. Сложность заключается в управлении UV и их адаптации к методике градиентного текстурирования.
Оптимизированное градиентное текстурирование
Оптимизированное градиентное текстурирование (Optimized Gradient Texturing) — логическое продолжение стандартной методики градиентного текстурирования, предназначенное для максимальной оптимизации без ущерба качеству графики. Основное отличие заключается в существенном снижении размеров текстурных карт, при котором каждый столбец градиента сжимается в одну строку пикселей. Эта методика упорядочивает текстурную карту горизонтально и каждому градиенту отводится одна строка. UV модели масштабируются до 0 по горизонтальной оси, корректно выравниваясь в этих строках. Хотя процесс модификации UV отвечает тем же принципам, что и в стандартном градиентном текстурировании, эта оптимизированная версия позволяет существенно снизить объём используемой памяти, сохраняя при этом функциональность и контроль за представлением освещения и теней на модели.
Благодаря этой методике можно достичь чрезвычайно высокого уровня оптимизации, что особенно выигрышно в контекстах ограниченных графических ресурсов, например, в разработке мобильных игр. Несмотря на существенное снижение размеров текстурных карт, визуальный результат остаётся идентичным оригиналу, подтверждая эффективность этой методики в обеспечении оптимизации с сохранением качества.
Сфера применения методики
Градиентное текстурирование предоставляет множество преимуществ как разработчикам, так и потребителям мобильных видеоигр. Оно демократизирует разработку, позволяя мелким и средним студиям с ограниченными ресурсами получить доступ к мощным инструментам, не требуя при этом больших инвестиций. Оно снижает затраты, связанные с созданием сложной графики, упрощая продакшен благодаря повышению эффективности использования графических ресурсов, в том числе уменьшением размеров текстурных карт и оптимизацией использования памяти, ускорением разработки и снижением требований к вычислительным ресурсам.
С точки зрения потребителей эта методика оптимизирует производительность, позволяя запускать даже на слабых устройствам игры с высококачественной графикой без ущерба качеству игрового процесса. Она расширяет доступ к цифровым развлечениям, особенно в регионах, где потребителям мобильные телефоны доступнее, чем консоли.
Более подробную информацию можно найти в научной работе, написанной мной в качестве дипломной университетской работы (на степень бакалавра дизайна и разработки игр и интерактивных сред Политехнического университета Валенсии): https://drive.google.com/file/d/1S-hSax4sdAtsZVh8wPFnjM3KNo0U5x0d/view
О моей работе опубликовал статью ресурс 80 Level: https://80.lv/articles/watch-the-magic-of-gradient-texturing-on-this-spaceship-in-blender/