3D для каждого. Оптимизация модели. Часть 2, практическая

uqgnpuebekzqfbc7oy9d1qxso0e.png

Доброго времени суток, господа и господарочки!


Прошлая статья знакомила вас с одной из фундаментальных проблем современного 3D-моделирования и игростроения — с оптимизацией. Мы разбирали причины непомерного объема игровых файлов и архивов с моделями и то, к чему это приводит.

Теперь же мы переходим непосредственно к практике оптимизации. Каждый, кто хочет войти в индустрию 3D-графония и геймдева в частности, должен как минимум иметь представление о том, как содержать архивы (личные и рабочие) в порядке, да еще так, чтобы они не занимали лишнего пространства и с ними было удобно работать. Конечно, некоторые, кто прочел предыдущую часть, уже поняли, как это можно сделать. Однако не сочтите за дерзость и дайте мне шанс прояснить некоторые моменты.

Возможно, над некоторыми способами оптимизации вы никогда не задумывались, а какие-то просто не до конца понимали. Что-то будет интересно только новичкам, а что-то поможет расширить арсенал и профессионалу.
Если вы готовы, то поехали!

В посте могут встречаться упоминания программ, игр, фильмов и студий. Не сочтите это за рекламу — всего лишь иллюстративный материал для понимания контекста.Текст написан на основе личного опыта автора. Пост рассчитан на тех, кто еще только начинает свой путь в 3D или хочет освежить давно забытые воспоминания. Профессионалы, скорее всего, итак знают большую часть хитростей и приемов. Но, быть может, какие-то интересные штучки и они найдут для себя.
Микрословарик для новичков
Под 3D в данном посте понимается система визуализации трехмерной системы представления программного кода. 3D-модели, которые вы видите в играх с трехмерной графикой, в мультиках, в фильмах наподобие Аватара — это 3D-модели, о которых мы говорим. Принципиальной разницы между моделями для игр, кино, рекламы и мультиков, нет. Все различия заключаются в подробности модели и наличии дополнительных «аксессуаров» — текстур, костей, физики, анимации — и качестве финального рендеринга.

Рендеринг (render, rendering)  — процесс визуализации 3D-моделей. В зависимости от нужд и настроек, рендеринг может включать только саму модель, модель с текстурой, шейдеры, а также один статичный кадр или серию кадров в формате видео или гиф-анимации.

Меш (mesh)  — «кожа» или «ткань» модели, состоящая из вершин (axis, point), соединяющих их ребер (ribs, edges) и заполняющих пространство между ребрами граней — полигонов (polygons).

Скелет или риг, а также кости (bones, rig, skeleton, armature)  — «каркас» модели, служащий для удобства позирования и анимации модели.

UV-карта (UV-map) координаты наложения текстур на меш модели в формате двумерной проекции-мозаики. Напоминает выкройку. Определяет, как и в каком масштабе текстура накладывается на модель. Создание данной карты называется разверткой.

Текстуры (map, texture) — файлы изображений, определяющих цвет (diffuse/color), имитацию рельефа (normal), блика (specular), объема (displacement), прозрачности (alpha) и так далее.

Физика (physic) — имитация физических взаимодействий (столкновения, ветра, жидкости).

Хайполи (high-poly model, high res) подробная высокополигональная модель, которая имеет более 500 тысяч полигонов. В некоторых случаях хайполи признаются и менее полигональные модели либо, наоборот, сдвигают границу высокого полигонажа вверх. Но, как правило, счет идет с миллиона полигонов и более. Хайполи нужны для создания вручную нарисованных текстур и запечения объемов в normal map.

Лоуполи (low poly) — модель с небольшим количеством полигонов (обычно до нескольких тысяч) и невысокой детализацией. Лоуполи часто используют для игр, особенно для мобильных и инди.


Как оптимизировать?


Разрежаем сетки и начинаем оптимизацию. А с чего её нужно начать делать? Конечно, с без текстур, чем с текстурами. В зависимости от вашего софта и любимых методов и объектов моделирования (полигональное, лепка, проекция, сканирование и т. д.), у вас будет разная полигональность — разный поликаунт (polycount).
Примечание: именно разрежаем, а не разряжаем. Разряжение или разрядка — снятие заряда (напряжения). Разрежение — процесс уменьшения плотности (тот же корень, что и проредить — сделать более редким).

Автоматическая ретопология


Для скульпторов обычное дело иметь в одном сабтуле (условном слое модели) миллионы полигонов. Поэтому у пользователей ZBrush кнопка ZRemesher быстро становится любимой. Конечно, топология, полученная таким методом, далеко не идеальна, однако Зремешер позволяет быстро сократить количество полигонов и при этом не потерять основные формы модели. Более того, ZRemesher поддерживает кнопки управления и цветовое маркирование областей для контроля плотности сетки.

b0d0a49cf1c1a22ebec4dddb9baadd62.png
При включенном режиме Use polypaint вы можете отметить красным области, на которых должна быть более плотная сетка, синий — участки с менее плотной сеткой.

Для продвинутых юзеров и тех, кому нужно быстро сократить полигоны, сохранив текстуры, существует плагин Decimation Master. Особенно он нужен тем, кто хочет как можно быстрее экспортировать свою поделку в игровой движок, так как сам анализирует сетку, пересчитывает ее и создает на ее основе новую треугольную топологическую карту. После препроцессинга вы можете ползунком регулировать параметр плотности и подробность. Данный плагин может сохранить края мешей, UV-карту и раскраску модели.

8481eeb52d7b90ae9967a2128e4a6e3e.png
Встроенный в ZBrush плагин Decimation Master быстро сокращает полигонаж, сохраняя UV-развертку, и позволяет работать сразу с несколькими сабтулами («слоями» модели)

Полезная инфа: треугольники и квадратики
Хотя в названии «полигон» не уточняется, сколько углов может быть у куска меша, как правило встречаются треугольники и четырехугольники.
Треугольная сетка может быть хороша для многих игровых движков, но не всегда удобна в случае, если вы захотите ее редактировать дальше. Все дело в том, что треугольники очень плохо воспринимаются программами для подразбиения — увеличения полигональности. Четырехугольники при применении divide/subdivide удобны: на каждой стороне фигуры в середине ребра формируется точка, соединяемая с аналогичной точкой на противоположной стороне фигуры и пересекающая аналогичную медиану прилегающего ребра. Таким образом из одного четырехугольника формируется 4 новых полигона.

40096b4f502ead8711ae30ec39791f70.png
Одно подразбиение увеличивает полигональность вчетверо и при этом сохраняет сетку относительно нетронутой, так как каждая линия «разреза» будет продолжаться на следующий полигон, и на следующий, и так далее.

ef8fae8b1f5feef058306b772c9849be.png
При попытке разбить сетку из треугольников, вы скорее всего увидите хаос: каждый треугольник может разбиться на 2, 3, 4 и сколько угодно еще полигонов, искажая основные формы модели. Проводить лепку на такой модели значит обречь себя на артефакты в виде «затяжек» поверхности.

Поэтому прежде чем увеличить полигональность подразбиением, такие модели сначала надо квадрангулировать — превратить треугольники в четырехугольники. Для этого во многих программах есть различные инструменты. В Зибраше вообще целый спектр: от того же Зремеша до Dynamesh.

А что с полигонами, у которых число углов больше 4? Они также плохо поддаются адекватному подразбиению. Более того, некоторые программы не способны воспринять фигуры с числом углов больше 5, 8 или 12. Некоторые разрезают полигоны автоматически (как Unity), некоторые не могут их даже открыть.


Ручная ретопология


Однако, кроме очевидного однокнопочного Зремеша и генерирующего треугольники дециматора, есть еще один инструмент, которым пользуются только профессионалы. Это ZModeler.

a06ef2e37c37891c12a6fa44131e2dcd.png
ZModeler находится в разделе Кисти (Brushes)

ZModeler — это попытка разработчиков войти в мир редактирования низкополигональных и hard surface моделей. Данная кисть активирует систему работы с ребрами, вершинами и полигонами. При активном Змоделере вы можете выбрать режим работы кисти, наведя ее на ребро, полигон или вершину (да, режимы будут отличаться в зависимости от того, на что вы навели) и зажав Shift.
08w4cc9fzfvkw9nl0v6nbrifcgo.png
При наведении на ребро и нажатии Shift вы увидите вот такое окно с выбором режима. Вверху режимы работы (движение, выделение, разрез, добавление, удаление и т.д.), внизу — режим выбора (с одним ребром или со всей линией соединенных последовательно ребер

Выбрав Delete в режиме работы с ребрами, вы можете удалять все сочлененные ребра в линии. Аккуратно работая с этим инструментом, вы можете вручную уменьшить плотность полигонов в определенных местах модели. Но будьте осторожны: инструмент может давать сбои в участках с неквадратичными (сильно искаженными и нечетырехугольными) полигонами и иногда давать осечки в виде треугольников.

ad84a149cc353e13fa23c839b7bd2880.png
Да, это долгий процесс, однако позволяющий точнее работать с моделью

Аналогичные режимы работы есть и в других программах. Кстати, есть ещё один способ — создание поверх хайполи новой модели, вручную добавляя полигоны, как будто рисуя по поверхности. После такого вы получите две модели — с более плотной сеткой и менее плотной. При необходимости всю детализацию можно спроецировать на новую модель в виде текстурных карт.

Для фоновых объектов, которые зритель или игрок никогда не увидит вблизи, можно применять экстремальную оптимизацию, оставляя менее 10 полигонов и микроскопическое разрешение текстур.
3fe9ef03d7cd0fd7ff63982cff7a464d.png
Толпа зрителей в Century. Во время боя верхом на драконе вам совершенно не интересно, какого разрешения человечки, которые орут вам с трибун

Какой из способов вам ближе, удобнее и будет хорош в конкретном случае, можно узнать только на практике. Разработчики крупных игр как будто бы вовсе не заботятся об этом, оставляя миллионы полигонов даже там, где это не нужно (здравствуйте, мегаполигональные маски в анимешной Code Vein и сверхдетальные модели Final Fantasy XVII).

Удаляем фрагменты меша


Вернемся к картинке из начала прошлой статьи. Самые внимательные уже поняли, в чем подвох:

trjdoprxjkxyzkqgmcsfwqbg5po.jpeg
А подвох в том, что все эти модельки не имеют дна. Только крышку.

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

4c3183ae2e9f10e2aeea6fd669e36f9d.png
Заготовка вентиляционных конструкций для крыши дома. Если у вас не паркур-клон Mirror«s Edge или Assassin«s Creed, то крышу игрок почти никогда не будет видеть. Следовательно, можно обойтись коробкой с текстурой. Если же ваш персонаж — ямакаси, то придется озаботиться не только коробкой, но и отверстиями в ней. Отверстия не могут находиться внутри цельного полигона, не соединяясь ребрами с другими полигонами — большая часть программ от этого вылетит с ошибкой, не в силах прочитать топологию.

В прошлой статье мы упоминали, что многие игры, в том числе Elden Ring, скрывают участки кожи под одеждой. Для своих моделей вы тоже можете удалять части, которые не видны из-за одежды или просто невидимы.

e15f69d17e2e1f82eb81f97e7fc6f92e.png
Модель персонажа для игры в процессе оптимизации. Когда вы закончили подгонять одежду по фигуре, тело-образец можно удалять.

Многие куски локаций в играх (скалы, фрагменты зданий, запчасти космических кораблей) также не имеют одну сторону для экономии на полигонах:

7c050c14b01a08ecd80229d639d65fd3.png
Большая часть скал в играх — односторонний кусок меша. Ведь при нормальных условиях игрок никогда не увидит изнанку.

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

Уменьшаем текстурки


Увеличение текстур в два раза увеличивает занимаемый ею объем памяти в 3–4 раза. Посмотрите на свою модель и решите: действительно ли вам нужны 4к-текстуры? Как это определить? Для начала обозначьте для себя целевое применение модели. Если она вам нужна для создания красивых статичных артов в высоком разрешении, то открытые и видимые участки моделей, конечно, должны быть в высоком разрешении. Но если у вас одетая моделька, то текстура кожи, кроме рук и головы, в большом разрешении не потребуется (а может и вовсе не нужна).

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

Лайфхак: вы можете оставить в высоком разрешении лишь одну из карт. Например, только диффузную, если вашей модели важнее цвет и рисунок, или только нормалмап, если вам важен рельеф (чешуя, например). Спекуляры зачастую не играют большой роли, поэтому некоторые сеты текстур могут выглядеть так: диффузная текстура — 1к, нормалмап — 2к, спекуляр — 512p.
ed32c526635328611f2d532a3b38983c.png
Модель для платформера от третьего лица. Большая детализация внутренностей ей не нужна, так как под крышку игрок заглядывать не будет, поэтому хватит мыльной фотки подделки под чип

Если у вас модель дракона, то, конечно, текстура шкуры должна быть хорошей. А вот на текстурах пасти можно сэкономить.

Сокращенная палитра цветов


Те, кто не работают редакторами изображений, и не догадываются о существовании такой настройки текстур, как битность или палитра. Битность картинки определяет, какими цветами будет записано изображение и сколько их будет использовано. Обычно используют палитры 8 бит, 16 бит и 32 бита. Соответственно, в каждой из них 8,16 и 32 цвета.

В большинстве своём этого достаточно для несложных текстур, например, поясных аксессуаров и фоновой утвари. Более того, вы, скорее всего, не заметите разницы между 16- и 32-битной картинкой в текстуре камня. Однако вес может отличаться разительно. Это, кстати, одна из причин огромного веса мегапаков серии ассетов Foliage огромные текстуры с высокой битностью.

Но с высоко детализированной текстурой расшитого кафтана или лица с макияжем это не прокатит. В таких случаях придётся жертвовать объёмом памяти ради более красивого результата.

В других случаях настроить разрешение и битность можно в любом продвинутом редакторе картинок при сохранении:

b5e700afe022825b1acec43431d3b369.png
Окно сохранения изображения в Adobe Photoshop

Форматное сжатие картинки


Картинки в разном формате имеют разный вес. Зависит это от многих факторов: разные кодировки, разные палитры, разные степени сжатия. Стандартный JPEG значительно меньше стандартного PNG при тех же настройках сторон, цветности и отсутствии альфа-канала. Стандартный TGA ещё больше. А стандартный DDS 5 меньше PNG, но прочесть его смогут «не только лишь все» графические редакторы.

DDS входит в линейку самых распространенных форматов для игровых текстур, так как позволяет сэкономить место на диске и при этом сохранить настройки альфа-канала (прозрачности) и некоторые другие.

5f66631835c37277bb029d4481f15c66.png
Одна и та же текстурная карта в разных форматах

Плитки (Tiled map)


Сэкономить место поможет и использование Tiled UV map, которую мы упоминали в предыдущей статье. Tiled, или плиточная текстура (а также бесшовная текстура — seamless), это такая текстура, которая при наложении на модель в любом масштабе будет, вы не поверите, бесшовной. Вы не увидите границ текстуры, как бы ни растягивали и ни уменьшали ее. Так, например, с помощью крохотной картинки кирпичной стены 512×512p вы можете затекстурить огромную стену целиком. И да, разработчики и 2D- и 3D-игр часто пользуются этим методом с незапамятных времён.

e89c80ebf143bc9f2c2476cb41892d70.png
Самодельная бесшовная текстура кирпича высокого разрешения на маленькой модельке в оригинальном масштабе и на большой модельке с сохранением масштаба. Без растяжений.

Шейдеры

Шейдеры — это программные настройки отображения поверхности модели. С их помощью вы можете контролировать вид, цветность, режим отображения и даже форму поверхности, в том числе покрывая её травой или меховыми прядями
Да, пушистые шарики в детских мультиках не вырисовываются по волоску — большинство из них используют предустановленные шейдеры типа fiber mesh — тонкие малополигональные сплайны (плоскатики) загружаются поверх основной модели. Однако фибер редко экономит ресурсы — хороший мех и травинки будут нагружать вашу память даже больше, чем высокотекстурная имитация. Особенно, если вы включите физику…

f224275c371ea04555beeedace08ee05.png
Шейдеры позволяют имитировать даже геометрическое искажение поверхности при рендере

К одному шейдеру можно подсоединить несколько десятков настроек и текстур. Но обычно хватает стандартного сета: цветная текстура, карта нормалей, карта металличности и альфа, если она необходима.

a1368f33f6f29397ba0ab55b673502a7.png
Пример шейдера с текстурами в блендере. Да, блендер позволяет назначать одну и ту же текстуру и как карту блеска, и как карту металличности, если это необходимо

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

981129eca5b82f5b6dcaa4f871e0d0cb.png
Пример простого стеклянного шейдера в Blender 3D. Как видите, в данном случае нам даже текстурные карты не понадобились — все чисто на нодовых элементах программы

Создаем LOD


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

ubgtzywidg9l-ior9goagnlxpuu.png
Скайрим стал источником многих мемов. Огнедышащий графон — один из них. Наряду с лицом из Uncharted

LOD это модели с пониженным разрешением, нужные для изображения далеких объектов. Скажем, вы видите вдалеке гору Высокий Хротгар, но пока вы не подошли к ней вплотную, вам не нужно видеть архитектурные изыски старейшин на ее вершине и тонкости рельефа скал. Вместо цельной локации горы загружается относительно малополигональная модель с «мыльными» текстурами. То же касается всех прочих объектов в игре — зданий, мостов и даже драконов. Это экономит ресурсы компьютера/консоли на прорисовку далеких объектов.
Но не Скайримом единым: любители Cyberpunk 2077 тоже имели честь лицезреть мыльные машинки и мыльных человечков. Ну, а игры на Unreal Engine вообще имеют возможность генерировать лоды «на ходу», сжимая высокополигональные модели. Хотя это работает далеко не всегда так, как надо.

9f81b5c519d1506987bc93266ae7fb88.png
В Lords of the Fallen модельки автоматически ретопологизируются до состояния LOD. Но порой не возвращаются обратно (внимание на щит статуи)

Упаковываем в пакеты


В прошлой статье я упомянула игровые архивы. Архивация игровых файлов служит двум целям — сжатие объема и защита от кражи и модификации. Некоторые движки позволяют сжать модели и текстуры более чем в 3 раза.

Но и домашний мамкин 3D-шник тоже может использовать сжатие. Помимо стандартного RAR/ZIP/7zip архива, вы можете упаковать свое творчество целиком и полностью — вместе с предустановками света и анимации. Не все движки имеют свои способы архивации. Но самые распространенные, как Blender, имеют.

af07dd790d4993c3b427ff259838c254.png
Сцена и ее текстуры без упаковки…

z7gs7l8lm6dllysuapwkcmc_9q0.png
Сцена с упаковкой текстур внутри нее и без упаковки

Блендер позволяет как сжать текстуры, так и сохранить их в общий файл без сжатия. Таким образом, сэкономить место не получится, однако удастся сохранить текстуры для пересылки и хранения на облачном диске.

Уязвимые места


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

34f3177de379c72e53d9a9dcbf1da4e6.png
Пример пережатых децимацией аксессуаров: крепежи воротника и застежка ремня «поломались

Для отригованных моделей сетка особенно важна. Если полигонов слишком много, вам придется попотеть, настраивая влияние костей так, чтобы меш не ломался слишком резко. Если полигонов слишком мало, меш будет деформироваться.

450e0cbb57232818b3138d103251006e.png
В некоторых случаях вам лучше позаботиться о том, чтобы освободить суставную область от лишних полигонов. Но если убрать их слишком много, то сустав сломается

Порой вам наоборот придется добавлять лишние ребра, чтобы сделать модель более удобоваримой. Например, если часть модели должна быть сглаженной, а часть — иметь жесткие грани.

7b3c0d2cb13e2801da12925abdb1475a.png
До добавления грани: движок пытается сгладить геометрию, из-за чего на краю крышечки появляется эффект линзым

4e00fd975de3ac2e3dee45552ac9fc9f.png
После добавления грани: линзирование исчезло и теперь при рендере нижний край крышки не будет неестественно изгибаться

Hard-surface-модели, которые предполагают наличие жестких граней и геометрических форм, в принципе невозможно сделать без полигонального излишества.
0a79b628c32a992090e3f5b44b4b6ce7.png
Попробуйте еще сильнее сократить полигональность этого колеса и потеряете все его прелести

Со зданиями и вообще архитектурой еще веселее: некоторые вещи вы физически не сможете убрать, не лишившись части фасада.

f1049a6b743b089589426fff51befb9e.png
Даже для фоновой лоу-поли коробки приходится имитировать дверные и оконные проемы, а это минимум + 5–8 полигонов

Хитрости и уловки


Где есть проблема, там обязательно найдется решение. Например, вот вы смоделировали фасад здания, используя только базовые формы и простые разрезы:

2e2432ad8091dfac390573f67051462d.png
346 полигонов. Это минимум при таком подходе. А ведь все они в движке скорее всего станут треугольниками, так что смело умножаем это число на 2.

Пример, возможно, покажется вам слишком примитивным. Ну какие 300 полигонов, кто над этим будет убиваться? Но во-первых, это иллюстрация, модельная ситуация, призванная продемонстрировать приемы 3D-шников. А во-вторых, для мобильных платформ часто счет полигонов идет на десятки.

Что мы можем сделать, чтобы уменьшить полигональность?

Поставьте себя на место игрока. Это здание будет лишь одной из десятка коробок в городе, в котором игроку доступна лишь тротуарная дорожка и трасса. Во дворы наш виртуальный челик заходить не будет. А значит, смотрим прямо на это здание. Вся его задняя поверхность нам не нужна.

d9309d65fd63cfadc5910128f3a7f798.png
Смело удаляем задник и дно, убираем лишнее с крыши и задней части декоративных плашек

Заднюю стенку убрали. Следом за ней в топку отправляем и пол — наше здание не будет висеть в воздухе, мы утопим его в грунт газона.Так много полигонов на крыше, как получилось при разрезе под окна, нам тоже ни к чему. Удаляем их, а оставшийся растягиваем до противоположной стены.

f57d6bddbb1d80b09a2ecc94d2ad21ec.png
Декоративные плашки в проемах «окон» сделаны из простых параллелепипедов. Игрок увидит лишь 3 из 6 граней каждого параллелепипеда, а, значит, заднюю, верхнюю и нижнюю их грани также можно удалить

После отсечения всего лишнего осталось лишь 160 полигонов из 350. Оптимизацию можно было продолжить и дальше, но мне было важно, чтобы этот дом использовал одну текстуру с другими двумя зданиями.

0f71392d06a57a8d01bfb137094e3d14.png
После оптимизации можно заняться расстановкой элементов UV-карты

Реюз текстурок — наше все. А вы навскидку можете сказать, сколько зданий на этой локации используют одни и те же карты?

f17b400582408c9ba8ee7a2a56d714cc.png
Лоу-поли коробочки зданий на фон для игры

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

Верно. Надо как-то разнообразить текстуру! И для этого есть два пути:

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

По такому принципу в играх организован, например, макияж. Или 100500 вариантов оружия в Borderlands и иже с ним — на базовую пушку натягивается маска с какой-нибудь грязью или граффити и немного подкручиваются цифры характеристик. Но далеко не все движки поддерживают работу с маской одинаково.

Сплайн или плоскатик — кусочек меша, чаще всего представляющий из себя прямоугольник со своей отдельной текстурой:

08662b9d59acb101596b9f6f69041384.png
В этом кадре пять сплайнов с граффити и около 30 сплайнов с сеткой для имитации ремонтных работ

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

НЛО прилетело и оставило здесь промокод для читателей нашего блога:
 — 15% на заказ любого VDS (кроме тарифа Прогрев) — HABRFIRSTVDS

© Habrahabr.ru