В статье ставится задача рассмотреть основные виды оптимизации инструментов и технологий для создания трехмерных моделей.
Ключевые слова: трехмерная графика, поверхность, модель, полигон, полигональная сетка, PBR, трехмерное моделирование, карт нормалей, анимация, текстура, карт высот, полигональная модель, NVIDIA.
Трёхмерная компьютерная графика появилась сравнительно недавно, однако задолго до появления персональных компьютеров длительное количество времени предпринимались попытки воссоздания трёхмерного мира на фотографиях, картинах, кинопленке.
Процесс создания 3D-модели может осуществляться множеством способов. Все зависит от целей, сроков, сложности выполнения и прочих особенностей производства. Обычно основными стадиями подготовки трёхмерной графики являются: моделирование, текстурирование, анимация и сам рендер.
Трёхмерное моделирование — это процесс создания трёхмерной модели объекта. Его основная задача заключается в том, чтобы показать визуальный объем, создаваемого объекта. Можно создать статическую модель, которая будет иметь лишь привлекательный вид, но без какого-либо функционала, потому что для статики не важно, как сделана модель. А модель для анимации должна быть не только привлекательной внешне, но и быть оптимизированной для дальнейшей работы с ней. Основными критериями оптимизации 3D-модели для анимации являются: топология и количество полигонов. Полигон или полигональная сетка — представляет собой набор вершин, граней и рёбер, которые определяют форму многогранного объекта в трёхмерной компьютерной графике. Говоря простыми словами, когда мы смотрим на 3D-модель, то мы видим ту самую полигональную сетку, ведь составляющие полигонов и образуют те самые формы, которые мы создаём. Если мы посмотрим на уже завершённый и отрендеренный трёхмерный объект, то мы не увидим полигональную сетку. В большинстве случаев при создании самой модели, разработчики используют режим сетки (wire-frame), чтобы правильно выстроить форму объекта и его топологию. Когда работаешь в таком режиме, можно с лёгкостью манипулировать составляющими полигонов и тем самым создать 3D-модель нужным образом.
Существует несколько видов полигональной сетки:
– Полигон с тремя вершинами. Данный вид полигонов является самым простым из возможных, ведь он имеет минимально количество вершин и сторон. Также именуется как «треугольник» или «трис». На практике же данный вид полигональной сетки используется для создания 3D-моделей в сфере компьютерных игр, т. к. в большинстве своем модель должна быть триангулированной. При необходимости его с лёгкостью можно превратить в полигон с тремя вершинами.
– Полигон с четырьмя вершинами. Самый распространённый вид в трёхмерной графике. Он имеет четыре вершины и четыре стороны, что делает его крайне удобным для построения трёхмерных форм, а также при манипуляциях с полигональной сеткой. Данный вид является обязательным при построении 3D-моделей, которые в дальнейшем будут совершенствоваться, анимироваться и сглаживаться.
– Полигон с пятью вершинами или более (N-Gon). Является нежелательным полигоном в любом рабочем процессе, т. к. создаёт трудности в виде различных артефактов при текстурировании, рендере или анимации. Также из минусов — плохо поддаётся сглаживанию на изгибистых поверхностях.
Под топологией же понимается плавная и потоковая организованность полигонов. Говоря простыми словами, топология — аккуратность, правильность полигональной сетки и непрерывность каркаса. Так, например, под «правильной топологией» подразумевается равномерность и оптимальность сетки по количеству полигонов. На самой сетке не должно быть каких-либо пересечений и загибов. В идеальном варианте грани у полигонов должны идти непрерывными и плавными линиями (loop), т. е. либо от края до края, либо замкнутых в кольцах.
Топология в 3D-моделировании является ключевым аспектом правильной разработки трёхмерного объекта, т. к. от этого зависит, как в дальнейшем будут сглаживаться стыки полигонов, делаться развёртка и анимироваться объект.
В трёхмерном моделировании особенно твердых поверхностей важной функцией является Subdivision. В настоящем мире не существует идеальных углов. Все углы имеют скругления. Subdivision как раз визуально разбивает полигоны на более мелкие и разглаживает углы, создавая плавные переходы поверхности.
Трехмерные редакторы имеют функции создания сплайнов для рисования первичных форм, путей, или объектов визуально схожих с проводами и веревками.
Видеокарта, функция которой состоит в прорисовке объектов, умеет работать только с полигональными объектами и ничего не знает про сплайны и subdivision. Поэтому при выводе на экран эти объекты разбиваются на полигоны.
Скульптурное моделирование или 3D-скульптинг — особый вид моделирования объектов. Он значительно отличается от обычного полигонального моделинга. Основной метод создания 3D-скульптур — это деформация частей объекта. Она создается с помощью различных инструментов (так называемых кистей скульптинга), которые позволяют изменять вогнутость или выпуклость модели, удалять или добавлять материал, изменять углы и грани поверхности, а также производить множество дополнительных преобразований. 3D-скульптинг не является заменой трёхмерному моделированию. К нему приходят лишь для создания органических форм или любых других форм, которые гораздо легче создать из «виртуальной глины», чем двигать полигоны за точки. На этом этапе можно окунуться в творчество и лепить, не задумываясь о полигонах, которых будет достаточно много, поэтому будет необходимо дополнительно обработать модель с помощью инструментов, входящих в программы для моделирования. Данный процесс называется ретопология, т. е. преобразование правильной полигональной сетки.
Следующим этапом идёт текстурирование — один из важнейших этапов создания и визуализации трёхмерных объектов, который позволяет придать поверхности объёмной модели определенных параметров и свойств, для создания максимальной реалистичности. Перед тем как создавать текстуры, необходимо подготовить модель. Данный этап называется развертка или UV mapping. Маппинг представляет собой простой раскрой модели. По сути, мы условно разделяем нашу модель на отдельные части, которые проецируются на плоскость квадратного размера, равномерно растягиваются, выравниваются по размеру, выстраиваются максимально компактно и масштабируются, чтобы вписаться в квадрат. Плотное расположение необходимо для экономии памяти и возможности добиться наибольшей детализации текстуры на готовой модели. Если не получилось добиться нужного нам качества, модель разбивается на несколько UV-развёрток, для оптимизации.
Как только развёртка сделана, можно начинать создавать текстуры. В качестве графического редактора обычно используют Adobe Photoshop. В нём есть возможность рисовать вручную, либо накладывать готовые текстуры в места на квадрате, соответствующие необходимым полигонам на самой модели. Современные технологии позволяют использовать специальные программы, например, Substance painter или Substance Designer, где можно накладывать текстуры прямо на модель и сразу видеть результат с учетом физических параметров.
Для создания единообразия материалов была разработана система PBR (Physically based rendering). Благодаря тому, что художники, работающие с трёхмерной графикой, стремятся к реализму, была изобретена модель PBR. Она учитывает особенности каждого материала и с помощью математических формул, в которых указываются свойства рельефа его поверхности, высчитывает и отображает правильное поведение света, который столкнулся с объектом. Проще говоря, можно создать условия, которые позволят свету вести себя, как в реальном мире. Для правильного освещения поверхности каждая вершина модели хранит нормаль — вектор, направленный от поверхности. Благодаря тому, что все полигоны с общей вершиной задаются одной нормалью, их форма кажется плавной. Это называется плавным затенением (smooth shading). Если каждый треугольник имеет собственные нормали, то рёбра между полигонами становятся выраженными, а поверхность кажется плоской. Поэтому это и называется плоским затенением (flat shaded). Для более удобного использования были созданы определенные виды текстур, влияющие на взаимодействие материала со светом. Из-за разных подходов к созданию материалов в различных рендер-движках модель PBR имеет несколько видов рабочих подходов. Основными являются Metalness/Roughness и Specular/Gloss. В первом пользователь выбирает, является ли материал металлом или диэлектриком, а также шероховатость поверхности, что позволяет регулировать размытость отражений. Во втором пользователь может регулировать силу отражений и глянец. Выбор современных рендеров практически полностью пал на metal, потому что он экономичный и автоматизированный. Такие шейдеры берут на себя корректные расчёты. Физически корректный рендер основан на теории микроповерхностей, предполагающей, что поверхность состоит из хаотично ориентированных мелких плоскостей, называемых микроповерхностями. Каждая из этих маленьких плоскостей на основании собственной нормали отражает свет в единственном направлении.
Текстура Metal — чёрно-белое изображение, где белое — металл, а черное — диэлектрик. Оттенки серого используются для обозначения крашеного металла, грязного металла, коррозийного металла и т. д.
Текстура Roughness — чёрно-белое изображение. Оно буквально управляет тем, насколько шероховат материал. Грубый материал будет рассеивать отраженный свет в нескольких направлениях. Roughness чёрный (гладкий) является зеркальным отражением и Roughness белый (грубый) полностью матовый.
Текстура Bump — позволяет создать эффект рельефной поверхности с большей детализацией, чем полигональная. В основном эффект достигается за счёт освещения поверхности источником света и чёрно-белой картой высот. Это происходит путём виртуального смещения пикселя, за счёт чего таким же образом изменяется ориентация нормалей, использующихся для расчёта освещённости пикселя, в результате получаются по-разному освещённые и затенённые участки.
Текстура Normal — цветное изображение, которое необходимо для имитации искривления поверхности. Происходит это за счет изменения угла отражения света от поверхности, к которой применяется карта нормалей. Карта нормалей рассчитывается для каждого пикселя текстуры. Значения каждого из каналов RGB — это XYZ координаты нормали. Благодаря тому, что в карте нормалей задействуются 3 канала текстуры, этот метод даёт большую точность, чем Bump mapping, в котором используется только один канал и нормали, по сути, всего лишь интерпретируются в зависимости от «высоты».
Когда модель закончена, необходимо оснастить ее управлением, т. е. создать иерархическую структуру управления, которая индивидуально разрабатывается для анимации персонажей и различных подвижных объектов.
Можно выделить несколько способов создания трёхмерной анимации:
– Анимация по ключевым кадрам состоит из множества коротких сегментов. Каждый сегмент в анимации представляет начальное, конечное и промежуточное значения.
– Анимация по траектории. Траектория задается предварительно. При запуске цикла симуляции состояние объекта пересчитывается в каждом кадре, с применением линейной интерполяции для положения и масштабирования и сферической линейной интерполяции для кватернионов вращения.
– Создание анимации при динамических симуляциях — процесс просчета поведения объекта в условиях физически реальной окружающей среды.
– Анимация, полученная методом захвата движения (motion capture). Это довольно молодой способ реализации анимации, который быстро набирает популярность за счёт реалистичности, которую он позволяет получать. Как правило, для получения анимации данным способом нужна специально оборудованная студия для захвата движения, актер, с которого анимация будет захватываться и специальное программное обеспечение.
Рендеринг — завершающий этап создания трёхмерной графики. На данной стадии векторная пространственная модель превращается в растровую картинку. Как структура данных, изображение на экране представлено матрицей точек, где каждая точка определена, тремя числами: интенсивностью красного, синего и зелёного цвета. Таким образом, рендеринг преобразует трёхмерную векторную структуру данных в плоскую матрицу пикселей. Также стоит отметить, что нередко рендером называют не сам процесс рендеринга, а скорее уже завершенный этап данного процесса или его итоговый результат.
Есть два основных типа рендеринга, главными отличиями, которых является скорость, а также качество картинки:
– Рендеринг в реальном времени. Данный тип широко используется в игровой и интерактивной графике, где изображение должно просчитываться с максимально большой скоростью и выводиться в завершенном виде на дисплей монитора моментально. Поскольку ключевым фактором является интерактивность, то изображение приходится просчитывать без задержек и практически в реальном времени.
– Предварительный рендеринг. К нему прибегают тогда, когда скорость не стоит в приоритете, и нужды в интерактивности нет.
Таким образом, создание трёхмерной графики — это многоэтапный и сложный процесс, так как включает в себя пять компонентов: моделирование, развёртка, текстурирование, анимация и рендеринг. Перед началом создания 3D-моделей необходимо понимать, какой объем данных может обработать, имеющийся компьютер, и какой объем должен. При выявлении сложных для обработки моментов следует оптимизировать процессы.
Технический прогресс не стоит на месте, поэтому ежегодно разработчикам приходится повышать мощность ПК. Благодаря данным манипуляциям улучшается детализация, анимация, реалистичность освещения в графике. В большинстве случаев поставленная планка качества не соответствует возможностям пользователей, и чтобы повысить уровень приходится снижать настройки и приобретать новые компоненты для персонального компьютера. К сожалению, это выгодно только лишь производителям, но не самим разработчика. В связи с этим возникает потребность в снижении требований без потери качества визуальной составляющей и чтобы решить данную задачу можно воспользоваться различными методами оптимизации трёхмерных моделей, текстурирования и сцены в целом. Чтобы предоставить пользователю возможность увидеть высококачественную визуализацию без увеличения затрат, необходимо подбирать наиболее эффективные методы оптимизации.
Самый основной метод оптимизации трёхмерной графики — уменьшение количества полигонов в полигональной сетке. Данный метод позволяет снизить нагрузку на видеокарту, память и другие компоненты ПК, тем самым ускоряя загрузку объектов. При этом 3D-модель не должна потерять в детализации, иначе даже проработанные карты нормалей и красивые текстуры не смогут придать ей вид, который отвечает современным стандартам качества. Поэтому, оптимизация начинается уже с первых этапов трёхмерного моделирования. Исходя из этого, следует учитывать, что для корректной работы над дальнейшей оптимизацией объекта и наложению текстур его полигональная сетка должна обладать правильной топологией:
– уменьшение использования треугольных полигонов, которые могут выдавать артефакты при сглаживании объекта, а также других многогранников, кроме четырёхугольников с диагоналями, пересекающимися внутри фигуры;
– уменьшение использования булевых операций, которые искажают сетку;
– отсутствие двойных полигонов, пересечений. Объединение точек, обозначающих одну и ту же вершину;
– использование замкнутых контуров (loop), чтобы полученные низко полигональные модели при их малой детализации могли выглядеть не хуже своих высоко полигональных аналогов, существуют специальные подходы к текстурированию.
При создании объекта с нуля второй по качеству метод оптимизации — низко полигональное моделирование. Данный метод не требует обязательного наличия изначальной высоко полигональной модели, что является его главным преимуществом. Низко полигональное моделирование полностью зависит от желания и возможностей создателя, потому что имеет большую вариативность и детализацию при оптимизации. Для этого существует ряд инструментов, таких как «Insert», «Bridge», «Cut», «Extrude» и другие, каждый из которых обладает высоким уровнем кастомизации. Этот метод подходит для большинства моделей, однако есть значительный минус — медленность выполнения, т. к. большая часть операций совершается вручную.
Следующий популярный метод оптимизации 3D-объектов — редукция полигонов готовых моделей. Его суть заключается в том, чтобы уменьшить количество полигонов путём замены нескольких близлежащих полигонов одним схожим по форме. В большинстве случаев редакторы позволяют регулировать степень редукции, что даёт возможность найти баланс между детализацией и уровнем полигональности. Стандартный набор оптимизации путём редукции:
– модификатор Optimize. Он позволяет уменьшить число граней и вершин в объекте, что упрощает геометрию и ускоряет рендер. Данный модификатор делает расчёт на основе углов между гранями, поэтому для контроля детализации иногда лучше применять его к выделенным соседствующим подобъектам и избегать его применения к областям, где нужно сохранить геометрические детали.
– модификатор ProOptimizer позволяет выбирать и интерактивно оптимизировать объекты. Чтобы его активировать, необходимо просчитать объект, затем настроить уровень оптимизации, в интерактивном режиме устанавливая процент сохраняемых вершин (Vertex %) или устанавливая явное количество вершин для сохранения (Vertex Count). Дополнительные группы содержат параметры, которые позволяют контролировать, как оптимизируется модель. Эти параметры не являются интерактивными. Если настроить их после первоначальной оптимизации, нужно будет просчитать объект еще раз, чтобы увидеть эффекты.
К сожалению, не все модели могут быть оптимизированы автоматически. Сложные рельефы поверхности, неверно выстроенная геометрия полигональной сетки не позволят добиться точного результата при использовании модификаторов и плагинов. В данном случае применяется метод ретопологии. Ретопология представляет собой создание новой полигональной сетки, которая повторяет форму исходного объекта с меньшим количеством полигонов.
Метод ретопологии имеет ряд преимуществ, такие как доскональная проработка детализации, а также уровень оптимизации. Некоторые ограничения на вариативность могут накладывать особенности модели и необходимость последующей анимации, т. к. в основном метод используется для оптимизации персонажей. В целом ретопология подходит для большинства моделей. Так же, как и с low-poly моделированием, данный способ является ручным и может занимать достаточно длительное количество времени. Для ретопологии необходимо иметь высоко полигональную заготовку. К сожалению, данный метод не является универсальным, и он может быть использован только в симбиозе с другим методом и для отдельных участков модели.
Ещё один важный метод оптимизации 3D-моделей — оптимизация путем удаления невидимых частей объекта. Для автоматизации данного метода используют несколько типов алгоритмов:
– Алгоритмы, работающие в объектном пространстве, производят расчет в своей системе координатах относительно точки наблюдения пользователя.
– Алгоритмы, работающие в пространстве сцены относительно координат экрана, который их отображает.
– Алгоритмы, сочетающие в себе первые два варианта, анализирующие ситуацию и определяя наиболее эффективный способ действия.
Данные алгоритмы могут быть достаточно ресурсоемкими, в зависимости от количества объектов, поэтому не всегда приводят к желаемой оптимизации. Удаление невидимых граней также следует осуществлять вручную при моделировании, тогда в зависимости от структуры модели это может уменьшить количество полигонов до 50 %.
После того как удалось получить низко полигональную модель с правильной топологией возникает вопрос о реализации качественной визуализации. Для того чтобы придать модели требуемый внешний вид используются различные методы и способы работы с текстурами, которые также помогают оптимизировать объекты и сцену в целом. Важной частью оптимизации текстур является их объединение в текстурный атлас.
Атлас — большое изображение, которое содержит в себе более маленькие скомбинированные текстуры различных частей объекта, а однократная загрузка объекта чаще всего бывает гораздо выгоднее, нежели загрузка множества маленьких элементов. При использовании атласов нужно делать отступы между текстурами, чтобы не допустить наложения соседних текстур на объект.
Запекание карт нормалей и других карт текстурирования — это способ сохранения необходимого уровня визуализации для низко полигональных объектов. Карта представляет собой вид текстур, которые создают имитацию света и тени. Она позволяет создавать видимость рельефа и повышать качество визуализации. Иногда, одна и та же карта нормалей может быть использована в различных каналах, с разным уровнем силы действия и с наложением масок. Если у 3D-модели существует высоко полигональный прототип, то одним из способов будет запекание карт нормалей на нём, а затем наложение их на низко полигональную модель. Это поможет сохранить шейдинг и обеспечит наиболее качественное отображение объекта. Чтобы настроить вид будущих текстур с помощью нормалей, то нужно поменять их направление, а, следовательно, будет меняться и шейдинг. Также, расположение и углы наклона нормалей зависят от мягкости/жесткости ребер. Для того чтобы сделать рёбра жёсткими следует сделать разрыв в текстуре. Если отсутствует высоко полигональная модель карты нормалей, то её можно сгенерировать из текстур и карт высот с помощью сторонних программ и плагинов, или рисовать в редакторе вручную.
Основными программами для создания текстур являются:
– Плагин для Adobe Photoshop — NVIDIA Texture Tools. Он позволяет работать со сжатыми текстурами. Также этот плагин даёт возможность сгенерировать карты нормалей из карт высот, посредством NVIDIA Normal Map Filter, входящим в состав данного набора утилитов. Он создаёт копии текстуры с разной детализацией и разным размером, которые позволяют при текстурировании выбирать изображение с наиболее подходящим размером. Также есть возможность создавать кубические карты или кубические текстуры Cubemaps, в частности, использующиеся для создания окружения/неба, и состоящие из шести квадратных текстур, являющимися гранями куба. Данная программа не просто позволяет создавать карты нормалей из изображений, используя большое количество настроек, но и инвертированные карты нормалей, как если бы цвета текстуры предварительно были бы инвертированы. Также в этом плагине можно сделать предпросмотр карты нормалей на 3D-плоскости.
– SSBump Generator — один из представителей семейства генераторов карт нормалей и карт высот, который позиционирует себя как генератор Self-Shadowed Bump Maps карт нормалей. Помимо самозатененных и не самозатененных текстур SSbump Generator способен создавать простые карты нормалей, карты высот, а также добавлять карту затенения (ambient occlusion) к изображению.
– xNormal — представляет собой приложение для запекания большого выбора карт с высоко полигональной 3D-моделью на низко полигональную. Включает в себя запекание карт нормалей, карт высот, диффузных текстур (Albedo), карт затенения/освещения (Ambient occlusion) и т. д. Также в данном приложении имеется предпросмотр модели в 3D-пространстве в разрешении, которое выбрал пользователь. Причем как в high-poly версии, так и low-poly есть возможность наложения карты нормалей, текстуры, карты затенений, карты отражений (Reflect texture), текстуры блеска/глянцевости (Gloss texture), карты отражений (Reflect texture) и карты глобального освещения (DiffuseGI texture). Помимо работы с 3D-моделями приложение xNormal включает в себя набор утилитов для работы с изображениями и текстурами.
– Smartnormal — online приложение, которое создаёт карты нормалей с помощью инвертированного красного (R) канала. Отличительной особенностью данного приложения является поддержка изображений размером 8192*8192 пикселей, а также сохранение результата без компрессии изображения (в несжатом виде).
– CrazyBump — это приложение, которое создаёт карты нормалей, карты отражения, карты затенения, карты смещения с расширенными настройками для каждой из карт. Данное приложение содержит достаточно простой и мощный интерфейс, а также в нём можно сохранить и экспортировать все созданные карты одним кликом мыши. CrazyBump также работает с альфа каналом и сохраняет смещение в альфа-канале карты нормалей. Помимо всего прочего в данном приложении есть возможность сделать предпросмотр текстур в окне 3D-вида, а также можно использовать как существующие примитивы (шар, колонну, ролик, ящик), так и загрузить свою 3D-модель.
Один из широко используемых методов оптимизации трёхмерной графики — батчинг. Это объединение одинаковых объектов, состоящих из одного материала, в совместную полигональную сетку для едино разовой обработки видеокартой. Существует два вида батчинга:
– Статический — объединяет и просчитывает указанные статические объекты отдельно от остальных, чем уменьшает количество обращений к видеокарте, однако он очень сильно загружает память.
– Динамический — работает со всеми подвижными объектами и обрабатывает каждый кадр центральным процессором. Однако он имеет ограничения в виде сокращения количества вершин объектов, а также различных внешних воздействий.
Все объекты, которые перечислены выше, могут быть использованы для оптимизации сцены в зависимости от ситуации. Однако если использовать их без определённого порядка, то это будет не рационально, но также может и ухудшить всю ситуацию, снизив скорость загрузки. Для правильности деятельности следует подбирать нужный метод для того, чтобы повысить скорость работы и, в принципе, повышения общего повышения КПД.
На начальном этапе следует создать низко полигональные модели. В зависимости от конечной цели и имеющихся ресурсов, можно разделить данный пункт на три части:
– Создание низко полигональной модели. Это можно создать вручную из примитивов при помощи модификаторов и прочих инструментов. Данный метод используется для создания большинства объектов, которые имеют в основе примитивные фигуры или линии. Например, предметы мебели, строения, инструменты, узоры и пр.
– Редукция полигонов с помощью встроенных оптимизаторов. Данный метод подходит для оптимизации ландшафта, поверхностей, имитирующих ткань и других объектов. Т. е. он используется для моделей, которые не имеют строгого соблюдения изначальной формы.
– Ретопология. В большинстве случаев применяется для оптимизации сложных мест, которые требуют анимации. Например, при создании персонажа. После создания 3D-модели необходимо воспользоваться методом удаления невидимых граней.
Создание подходящего набора карт сильно влияет на количество используемых текстур. После того как подготовка закончилась, следует применить оптимизацию, если быть точнее, то использовать компрессию, чтобы не перегружать видеопамять. Если есть возможность, то стоит создать текстурные атласы, которые будут уменьшать количество запросов, а видеокарта будет работать быстрее. Когда объект уже создан и покрыт желаемой текстурой, то нужно настроить окружение и освещение. Для неподвижных объектов обычно используют статику, которая объединяет все одинаковые объекты с одинаковым материалом. Использование методов оптимизации без учета алгоритмов может привести к отсутствию результата или даже замедлить работу. А также, использование не входящих в алгоритм методов может быть не рациональным, и рекомендуется применять в определенных частных случаях.
Литература:
1. Джамбруно М. Трехмерная (3D) графика и анимация / М. Джамбруно. — М.: Вильямс, 2003. — 640 с.
2. Топология, ретопологоия, меш, сетка / Сборник статей 3Dyuriki. URL: http://3Dyuriki.com/2015/03/07/topologiya-retopologiya-mesh-setka-3D-slovarspravochnik
3. Цыпцын С. Понимая MAYA / С. Цыпцын. — М.: Самиздай, 2012. — 700 с.
4. Методы оптимизации высокополигональных 3D-моделей. URL: http://brainy.pro/ru/blog-ru/52-optimization_3d
5. Анимация в трехмерной графике. URL: http://www.maskedbrothers.ru/articles/animation_basic/
6. Для оптимизации 3D-моделей недостаточно считать полигоны. URL: https://habr.com/ru/post/433186/