Технические положения для моделей

Материал из BestWay wiki
Перейти к: навигация, поиск

Настройки 3dsmax и масштаб


Для получения правильных пропорций модели в игре необходимо установить в 3dsmax единицы измерения в метры (Customize→Units Setup: Display Unit Scale: Meters). Не меняйте System Unit Scale (Кнопка System Unit Setup) – это приведет к неправильному масштабу. System Unit Scale должен оставаться 1 Unit = 1 Inch.

Важно: после выполнения данных настроек размеры в 3dsmax должны отображаться в метрах (например 0,123 m). Все объекты в проекте «Out front-2» выполняются в масштабе «1:1» и с исторической достоверностью там, где это возможно. Если длина самолета 16,0 метров, то длина его модели должна быть равна 16,0 m в 3dsmax.

Исключение в соблюдении масштаба составляют случаи, когда нет достаточных исторических/технических сведений о данном объекте или на него накладываются игровые ограничения (например, реальное здание слишком велико, чтобы поместиться на игровой карте и его нужно уменьшить в N раз).



Технические ограничения


Для корректного экспорта и отрисовки модели в игре, а также для адекватной «реакции» модели на ваши действия в 3dsmax НЕЛЬЗЯ выполнять масштабирование (uniform scale (USc), non-uniform scale(NUSc)), а также зеркализацию (mirror) целой модели. Подобные операции допустимы только на уровне под-объектов (вертексы, полигоны) или при помощи модификаторов Mirror, XForm.

Задача моделера – аппроксимировать внешний вид объекта на концепте (чертеже) в низкополигональную сетку модели. Моделер должен уметь упрощать сложные формы. Например, волосы персонажа логично моделировать так же, как они выполнялись на античных статуях: сплошным объемом, составляющим единое целое с головой. Хвост павлина может быть представлен фрагментом конуса, на который нанесена текстура с прозрачными участками между перьями. Не нужно лишний раз усложнять геометрию!

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



Полигональная сетка


Модель может создаваться любым удобным для вас способом (box modeling, patch, NURBS, surface tools и т.п.), но в конечном итоге объект должен быть представлен сеткой полигонов (Editable Poly или Editable Mesh), поскольку 3d-модель экспортируется в игру как набор треугольников. Для этого нужно воспользоваться коллапсом стека модификаторов (КСМ).

В идеале для рендера сетка должна состоять из правильных (равносторонних) треугольников, но такая ситуация практически невозможна (за исключением очень редких случаев). Потому нужно стремиться к тому, чтобы треугольники модели составляли как можно более «правильную» сетку там, где это возможно (не полигоны, а именно треугольники, которые можно увидеть, отключив в свойствах объекта Display Edges Only – в окне Properties). Что имеется в виду?

  1. Следует избегать длинных и узких треугольников, поскольку они создают самые неприятные проблемы при отрисовке, например визуальные дефекты освещения модели, хотя математически все верно. Выглядит такой артефакт как затемненный или осветленный участок модели, это можно увидеть даже во вьюпорте 3dsmax, если используется графический драйвер OpenGL или DirectX. Кроме этого узкие треугольники усугубляют визуальную деформацию текстуры, нанесенной на объект.
  2. Ребра полигонов должны быть сориентированы в соответствии с поверхностью объекта (нужно следить за перегибами полигонов «не в ту сторону»). Иногда для соблюдения правил 1 и 2 приходится вводить дополнительные вертексы, разделяющие ребра треугольников в том месте, где требуется коррекция поверхности.
  3. В объекте не должно быть разрывов между полигонами в тех местах, где поверхность предполагается цельной. Пример: корпус техники выполнен из двух начальных боксов, которые были визуально состыкованы, но вертексы не были склеены между собой. В результате в видимой сплошной поверхности имеется ненужный разрыв, приводящий к дублированию вертексов и увеличению памяти, занимаемой моделью в игре. Часто помогает профилактическое сшивание всех вершин в модели по заданному порогу (Weld Selected Vertices с Weld Threshold = от 0,001 до 0,01) – тогда случайные разрывы, скорее всего, будут устранены. Как частный случай разрывов можно рассмотреть следующее соединение полигонов:
    Ошибка создания миниатюры: Не удаётся сохранить эскиз по месту назначения
    это приводит к возникновению визуальных разрывов в виде тонких нитей по шву под определенным углом зрения, к тому же впустую расходуются вертексы, поэтому такое соединение в модели недопустимо.
  4. Группы сглаживания на модели должны быть так или иначе назначены. Не должно быть полигонов без группы сглаживания! Кроме того, слишком дробное разделение на группы также недопустимо, поскольку каждая пара различных соседних групп ведет к дублированию вертексов при экспорте модели. Желательно полигоны объединять в одну группу везде, где угол между полигонами допускает такое объединение. Контроль над подобной операцией – только визуально. И, разумеется, следить за количеством групп сглаживания (на простых поверхностях – 1-4, на сложных – как правило, не более 20).
  5. Детальность сетки объекта должна быть логически обоснованной. Можно и нужно жертвовать равномерностью сетки там, где может образоваться очень много ненужных полигонов (типично для больших плоских поверхностей). Лучше оставить минимум полигонов на плоской броне танка и детализировать контур люков, чем делать более равномерную сетку – в данном случае это неоправданно. Исключением является ситуация, где дополнительные вертексы нужны для более равномерного освещения или же для специфической раскладки текстуры (например, линия симметрии модели, выполненная для зеркального наложения одного и того же фрагмента текстуры). Необходимо также ликвидировать те полигоны, которые никогда не будут видны при допустимых положениях камеры и объекта (нижние полигоны полов зданий можно убрать, а вот днище техники оставить нужно, если эту технику можно перевернуть взрывом).
  6. Изолированные вершины (те, которые не формируют ни одного полигона) в модели недопустимы. В модификаторе Edit Mesh (Poly) нужно включать (если сброшен) флажок «Delete Isolated Vertices». Желательно по окончании работы над моделью проверять наличие изолированных вершин и удалять их кнопкой # Если объект не предполагается делать полупрозрачным или окрашенным в какие-то цвета, нужно выделить все вертексы и проверить их состояние в Edit Mesh→Surface Properties: в группе Edit Vertex Colors должны быть белыми Color и Illumination, а Alpha = 100,0. Если же объект должен иметь изменения цветов или прозрачности вертексов, в его свойствах (Properties) желательно для контроля ситуации включить Vertex Channel Display и выбрать Shaded и Vertex Color (Vertex Alpha).
  7. Очень полезна проверка модификатором STL Check. Там должны быть включены вариант Everything и флажок Check. Выполняется проверка открытых ребер (ситуация 3), длинных полигонов (ситуация 1), множественных ребер и дублированных полигонов (иногда это проявляется из-за неаккуратности моделера, склеившего две копии объекта в одну, получив дубликат полигонов, а также из-за последовательных неконтролируемых булевских операций с объектом).



Детальность модели и ее оптимизация


Ограничения на детальность модели диктуются ее размерами на игровом экране. Примеры:

  1. Дома обычно являются вариациями на тему более-менее похожих коробок, но они имеют большой размер на экране, поэтому имеет смысл детализировать какие-то части зданий (карнизы, решетки, трубы и т.п.) геометрически. Кроме этого, улучшения внешнего вида больших объектов можно добиться за счет применения лайтмап плюс неуникальных текстур общего назначения, которые в некоторых случаях минимальными затратами позволяют достичь максимального разнообразия внешнего вида таких объектов.
  2. Техника меньше домов по размеру, но все равно довольно заметна на экране. Ее детализация должна быть умеренной, но подчеркнутой (т.к. это игровой юнит). Основная масса деталей может быть выполнена на текстурах, хотя в каждом конкретном случае следует решать этот вопрос отдельно. Почти наверняка каждая модель техники несет на себе уникальную текстуру и потому отдельная текстура лайтмапы не нужна, а при использовании методики глобального освещения, применяющейся для лайтмап, результирующая текстура совмещается с базовой в Photoshop.
  3. Люди и животные являются довольно мелкими объектами на экране, поэтому высокая детализация их геометрии и текстуры не имеет смысла, если камера не приближается достаточно, чтобы игрок увидел низкую детальность. Для людей и животных рекомендуется выполнять совмещение текстур по классам объектов (например, все советские солдаты – на одной текстуре, все немецкие – на другой). В любом случае, люди должны быть хорошо видны, т.к. являются игровыми юнитами.
  4. Мелкие объекты: оружие, прочий инвентарь, отдельно устанавливаемые на карте детали механизмов (вентили, рычаги) и т.п. должно быть минимально детализировано и, по возможности, текстуры таких объектов должны быть совмещены хотя бы по классам (ручное оружие, боеприпасы, и т.п.) .

Всегда следует учитывать, в каком количестве на экране будут присутствовать те или иные объекты (например, много деревьев – детализацию растительности понижаем, одно уникальное здание скорее всего ограничений по детальности не имеет, в разумных пределах). При изготовлении модели иногда возникает необходимость увеличить детальность объекта (или его фрагмента) или же уменьшить ее. Вторая операция сложнее, поэтому для уменьшения детализации модели, без потерь ее геометрических габаритов и нарушения раскладки текстурных координат, нужно использовать модификатор MultiRes (см. документацию к 3dsmax).

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



Иерархия и пивот модели


Очень внимательно следует работать с пивотом модели, поскольку он является точкой привязки для сущности в игре, и, кроме того, используется самим 3dsmax, например при анимации поворота. В дальнейшем под ориентацией объекта (его локальных осей) будет пониматься ориентация его пивота. Модель в редакторе и в игре выставляется в указанное место именно пивотом и ориентирована по мировым осям координат в игре соответственно ориентации осей пивота.

Объекты сцены, относящиеся к одной модели, должны быть слинкованы в дерево (иерархию). При этом всю модель целиком представляет корневая кость, которая не должна иметь родительского линка. Локальная ориентация этой кости должна совпадать с ориентацией системы координат 3dsmax, а ее ось X направлена в сторону «лицевой» части модели. Каждому объекту в сцене сопоставляется кость в иерархии скелета модели. Исключение составляют объекты типа shape и объемы. Группа (group в 3dsmax) объектов идентифицируется как одна кость. Все объекты, относящиеся к одной модели, должны иметь уникальные имена. Исключение составляют объекты внутри групп.

Важно: если в модели есть одинаковые части, лучше выполнить их как instance, в таком случае они будут экспортированы не в несколько файлов, а в один файл-образец, что сократит расход памяти на модель. Типичная ситуация – окна в модели дома.



Вспомогательные объекты


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



Свойства объектов (игровые параметры)


Экспортер моделей автоматически получает данные о размерах, положении, материалах, полигонах и т.п. «стандартных» параметрах объектов, но некоторые параметры, специфичные для самой игры, не могут быть указаны средствами 3dsmax, поскольку привязаны к конкретным требованиям внутренних потоков данных в игре. Такие специфические параметры необходимо указывать в Properties→User Defined нужного объекта в виде текста, разделенного на строки (далее это будет именоваться просто «свойства объекта»).

Каждый параметр описывается отдельной строкой в свойствах. Например, для отрисовываемых частей модели соответствующие объекты должны иметь в своих свойствах признак полигонального вида: строку «Poly».

Важно: для правильного считывания игровых параметров экспортером нужно обязательно после последнего параметра ставить пустую строку. Регистр символов в названиях параметров имеет значение. Слова «Type» и «type» – разные.



Именование и нумерация объектов в составе модели


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

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

Нумерация костей, объемов и т.п. объектов начинается с 0. Причем в номерах некоторых объектов в силу сложившихся особенностей не допускается ведущий ноль, т.е. можно написать emit2, но нельзя emit02. Формат нумерации таких объектов будет указан как имя#, при этом нумерация всегда начинается с 0. Формат нумерации объектов, допускающих произвольную нумерацию – имя##. В каждом конкретном случае на количество объектов может накладываться ограничение.