Bender Bending

Max Payne: Экспорт и оптимизация уровней

Официальное Руководство пользователя Max Payne 2 Tools

Введение

Экспорт и сохранение оптимальной геометрии является более сложной задачей, чем в предыдущей версии MaxED. В какой-то момент, любой пользователь, работающий в MaxED2, вероятно, столкнётся с некоторыми трудностями. Большинство из возможных сценариев появления проблемы, связаны с необходимостью обнаружения столкновения и физической эмуляции в MP2: они быстры и гибки, но довольно "придирчивы". Для того что бы избежать проблем, возникающих во время игры, экспортёр MaxED2 был разработан, так же очень придирчивым, по этому, он сообщает о любых проблематичных областях уровня, перед тем как Вы сможете добавить уровень в игру. Сначала это может немного расстроить Вас (сорвать планы), но это для вашего же, собственного блага. Не волнуйтесь, со временем, после небольшой практики, Вы узнаете, как работает эта система, и все эти вещи станут для вас вполне естественными.
Давайте прямо сейчас приступим к делу; ниже приведены сценарии ошибок, которые возможно могут появиться во время экспорта:
Can't export! There are N top level entities that are not grouped to a room!
Эта ошибка появляется в случае, если есть объекты, которые не сгруппированы в какие-либо комнаты. Для начала нажмите Ctrl-E, но если это не поможет, значит на Вашем уровне, существует объект, который физически не расположен в какой-либо комнате. Вы можете увидеть проблемный объект, в списке иерархии, который по умолчанию находится в левой части экрана. В корне списка иерархии перечислены все комнаты и ниже их - объекты, не сгруппированные ни в одной комнате.
Если в списке есть проблемный объект (объект типа player – это игровой FSM и он должен присутствовать в корне списка, так что не обращайте на него внимание), то кликните на нем и выберите в контекстном меню пункт "Goto Node", тем самым перемещая камеру таким образом, чтобы Вы видели выбранный объект. Затем Вы можете вручную сгруппировать этот объект в соответствующую комнату или удалить его или сделать все что необходимо в конкретном случае.
Object is concave or flipped (Havok Geometry Error)
Ну, это довольно просто. Удостоверьтесь что упомянутый объект, не перевернут. Перевернутый объект имеет грани, обращённые вовнутрь, что в свою очередь является неестественным состоянием для динамического объекта. Столкновение Havok не может взаимодействовать с таким объектом. Вогнутость - это неправильная форма для динамического объекта. Посмотрите руководство Динамические объекты и их анимация для того, что бы узнать, как сделать объект выпуклой формы.
Geometry contains zero area triangles
Это наиболее распространенная ошибка, которую можно легко профиксить. Выберите объект (или что бы, не рисковать выберите их все, нажав Ctrl-A) в режиме F5 и нажмите F. Значения по умолчанию 0.0005 будет вполне достаточно, нажмите OK.
Если проблема не исчезла, значит что-то не в порядке с геометрией. При попытке профиксить ошибку, будет получено сообщение с индексом проблемного полигона, запишите его и, перейдя в режим F4, нажмите клавишу L. Введите номер индекса полигона в текстовое поле появившегося окна и нажмите OK. Поврежденные полигоны должны будут отмечены с помощью иконки локатора. Вы можете попробовать исправить геометрию при помощи разъединения и соединения булевыми операциями и/или попробовать исправить ее посредством повышения значения форматирования.
Some vertices used less than three times
Подразумевается проблема с полигонами, которая может быть исправлена, точно таким же способом, как и при ошибке "Geometry contains zero area triangles".
Some edges are invalid
Материал типа dummy используется вместе с нормальными материалами в динамическом объекте. Грани, которые имеют материал типа dummy, не обрабатываются вообще. Таким образом, если в таком меше присутствует еще и обычный материал, это приводит к повреждению ребер между нормальными и невидимыми гранями. Если динамически объект полностью состоит из материала типа dummy, это работает.
Если на вашем динамическом объекте, есть полигоны, которые вы бы не хотели отображать, используйте категорию "collision_nodraw".
Uses materials with inconsistent collision flags
Динамический объект не может иметь грани с различными атрибутами столкновений. Например, вы не можете иметь материал стекла и материал металла в одном и том же объекте, поскольку стекло пропускает пули сквозь себя, а металл нет. Это так же относиться и к статичным дочерним объектам. Таким образом, вы не можете иметь динамичный металлический меш со сгруппированным в нем, статичным стеклянным мешем. Но если вы сделаете дочерний меш динамичным, это сработает. Если есть отдельные дочерние стекла, сделайте одно динамическим, и сгруппируйте остальные статичные стеклянные меши к нему.

Коллизии

Столкновения стали более сложными, чем в прошлой игре. У объекта, есть два типа свойств столкновения: Character collisions (Столкновения персонажа) и bullet collisions (Столкновения пули).
Если у объекта включены только character collisions, все пули будут проходить сквозь него, но персонажи, рэгдолы и физические объекты будут сталкиваться с ним. Например, кровь и обоймы не будут сталкиваться с объектом без bullet collisions.
Прямо противоположный результат вы получите, если поменять свойства столкновения местами.
Когда вы группируете объекты с динамическими объектами, родительский объект определяет, какие флажки столкновений могут, использовать дочерние объекты, а какие не могут. Если вы снимите флажок с параметра Collisions в свойствах родительского объекта, но оставите параметры bullet collisions и character collisions затененными, дочерние объекты будут иметь эти свойства и столкновения будут активны. Но если в свойствах родительского объекта, все флажки отвечающие за столкновения будут сняты, дочерние объекты не будут иметь никаких столкновений.
У статичных объектов, все флажки столкновений, индивидуальны для каждого меша и они не влияют друг на друга.

Оптимизация уровня

Вы должны обратить особое внимание на оптимизацию столкновений. Когда рэгдол ударяется об очень сложный статический объект, это может привести к огромным перегрузкам физического движка и замедлить игру. Есть несколько приемов оптимизации объектов.
Прежде всего, в свойствах объекта для статичных мешей есть функция "Generate Bounding Box Hull". Она делает то, о чем говорит ее название, то есть генерирует невидимый ограничивающий столкновения прямоугольник, вокруг меша, который только сталкивается с персонажем. Это великолепно оптимизирует столкновения, но форма всегда будет в виде бокса, которая довольно груба. Например, для объекта следующим образом:
На расположенном рисунке, изображена красная линия, которая показывает, как выглядит область столкновения для объекта с L - формой. Таким образом, вы действительно не можете ее здесь использовать. Но этой идеально для примера с трубой, которая имеет множество углов.
Для примера давайте возьмем эту трубу. Это труба может быть например лестничными перилами.
Геометрия столкновения у такого объекта очень сложная, и множество таких объектов, может привести значительно перегрузке системы. К счастью, функция "Generate Bounding Box Hull" приходит к нам на помощь. Сначала мы должны открыть свойства трубы и поставить флажок напротив параметра "Generate Bounding Box Hull", в зависимости от точки опоры, может получиться не совсем правильно. Например, вот так:
В этом случае нам надо настроить точку опоры, таким образом, что бы она была выровнена в соответствии с направлением объекта.. Просто выровняйте сетку относительно одной из сторон трубы:
Затем выберите его в режиме F5 и нажмите P. Bounding box будет выглядеть примерно вот так:
Данная оболочка похожа на носок.
Прелесть данной функции в том, что столкновение пуль останется на основном объекте, так же это касается и декалей, все это будет отлично взаимодействовать с объектом, но если на него упадет рэгдол, для просчета столкновения будет использован простой объект bounding box, что позволит ускорить процесс расчета. Вы должны использовать bounding boxes для большинства статичной геометрии, форма которой похожа на коробку.
В свойствах динамических объектов есть флажок "Generate Convex Hull", который является более продвинутым вариантом. Данная функция создает выпуклую оболочку, которая по возможности повторяет форму динамического объекта. Проблема данной функции в том, что bullet collisions в расчет не берутся. По этому, вы не можете использовать данную функцию так же свободно как bounding box для статичных объектов. Хотя, вы изначально должны избегать создания вогнутых динамических объектов.
Изложенные выше правила оптимизации, не являются строгими. Оптимизируйте уровень насколько это возможно, до тех пор, пока вас не будет устраивать полученный результат и качество картинки.

Просмотров: 2 161

Комментарии пока отсутcтвуют