Обучающее упражнение - Оптимизация

Содержание

1.  Начало Оптимизации

1.1.  Вступление

1.2.  Инструменты оптимизации

1.2.1.  Маркеры комнат

1.2.2.  Портал

1.2.3.  Множество границ

1.2.4.  Заслоняющие плоскости

1.3.  Шаг 1: Создание трех маркеров комнат

1.4.  Шаг 2: Создание двух порталов

1.5.  Шаг 3: Присоединение порталов к маркерам комнат

2.  Главные советы по оптимизации

Начало оптимизации

Вступление

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

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

Чтобы помочь игре определить необходимость в визуализации подобных "не нужных" объектов, у нас есть специальные инструменты, которые позволяют оптимизировать саму комнату. Благодаря этим инструментам игра может тратить меньше ресурсов на решение какой предмет визуализировать, а какой можно исключить из процесса визуализации, и при этом не тратить время на выполнение сложных подсчетов сканирования или калькуляции случаев, когда один предмет закрывает собой другой. Инструменты, которые есть в нашем распоряжении это: Portals (Порталы), Room Markers (Маркеры комнат), Multibounds (Множество границ) и Occlusion Planes (Заслоняющие панели). В этом упражнении мы будем оптимизировать наше Убежище. Перед тем как мы начнем, давайте я вкратце объясню инструменты, которые есть в нашем распоряжении.

НЕ нашли? Не то? Что вы ищете?

Инструменты оптимизации

Маркеры комнат

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

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

Порталы

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

На диаграмме сверху оранжевая линия, подписанная как "а", представляет собой портал, соединяющий маркеры комнат "А" и "В". Портал "b" представляет собой портал в неограниченную область. Так как портал "а" находится в поле зрения игрока, содержание маркеров комнат "А" и "В" будет визуализироваться. А из-за того, что портал "b" игроку не виден, объекты после него визуализироваться не будут (они заслоняются).

Множество границ

Аналогично Маркерам Комнат, такие границы герметизируют группу объектов, которую система отсечения будет воспринимать как один объект для процесса визуализации. Если одна из частей такого объекта будет видимой, все объекты в этой группе становятся видимыми для визуализатора. Объект "Множество границ" используется в основном при наружном моделировании и не будет рассматриваться в деталях в этом упражнении.

Заслоняющие плоскости

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

Шаг 1: Создание трех маркеров комнат

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

На приведенной иллюстрации зеленым цветом показано область, которую мы будем оптимизировать.

Обратите внимание, что выделенная область, в основном представляет собой три большие "комнаты":

·  Область пещеры

·  Большая комната с дверью убежища

·  Прямой коридор с лестницами

Давайте сделаем маркер комнаты для каждой из этих областей. Перед созданием первого маркера нам нужно сделать две вещи:

·  Проверьте активизацию Привязки к Сетке . Этим мы гарантируем правильное размещение между собой маркеров комнат и порталов.

·  Проверьте отображение маркеров комнат и порталов. Для этого перейдите в меню View и щелкните Show/Hide. Должен отобразиться диалог Show/Hide. Флажки Room Markers и Portals должны быть установлены. Заодно проверьте активизацию Multibounds и Occlusion Planes.

1а: Размещение меню Show/Hide

в главном меню

1b: Диалог Show/Hide

Если радиуса осветителей вас отвлекают, можете нажать клавишу L, чтобы отключить их. Так же, вы можете отключать маркеры геометрии клавишей М.

Щелкните на иконке Room Marker на панели инструментов для включения режима Room Marker.

Когда иконка активизируется, вы переключитесь в режим создания примитивов. Щелкните левой кнопкой мышки на любой поверхности и перетащите курсор в любом направлении окна визуализации, определяя размеры маркера по осям XY. Отпустите кнопку мышки и переместите курсор вверх, установив размер маркера по оси Z. Чтобы закончить создание примитива, еще раз щелкните левой кнопкой мышки (процесс аналогичен созданию примитивов типа box в программе 3ds Max - прим. авт. перевода).

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

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

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

Для масштабирования Маркера Комнаты выделите этот объект и ухватитесь курсором за любую сторону на контейнере преобразования, после чего, перетащите в нужном направлении. Для каждой оси назначен свой цвет. На рис. 2b показан мой маркер комнаты, покрывающий всю область пещеры. Не волнуйтесь, если у вас не получится точно так.

Рис. 2а: Начальные размеры Маркера Комнаты перед масштабированием

Рис. 2b: Масштабирование Маркера Комнаты для охвата области пещеры

Рис. 2с: Масштабирование Маркера Комнаты по высоте

Рис. 2с отображает тот же маркер комнаты, но только под другим углом, чтобы вы увидели масштабирование этого объекта по оси Z.

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

Выделите существующий маркер комнаты и скопируйте его, нажав Ctrl+D. Переместите новый маркер и масштабируйте его по размерам комнаты в убежище. Еще раз повторите процесс, накрыв область коридора. Когда закончите, у вас должно быть три маркера комнаты, которые накрывают три основные области: пещеру, комнату убежища и коридор. Ваши маркеры должны быть похожи на приведенные на рис. 3а.

Мы должны плотно приставить каждый маркер комнаты к соседнему маркеру. Включите "Ортографический" вид, нажав "0" (ноль). Нажмите Т, чтобы перейти на вид сверху/снизу. Теперь вы должны увидеть все в ортографическом виде - вы можете заметить недостаток в исчезновении точек и в очень плоском виде плана. Выравнивание маркеров комнаты в таком виде намного легче. Обратите внимание на рис. 3b, в котором мои маркеры еще не выровнены друг с другом.

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

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

Рис. 3а: Три маркера комнат после чернового масштабирования

Рис. 3b: Ортографическая проекция показывает перекрытия

Рис. 3с: Три масштабированные и привязанные Маркера Комнат

Шаг 2: Создание двух порталов

Теперь, когда наши маркеры комнат настроены, нам нужно создать порталы между каждым маркером, чтобы визуализатор понимал как соединены эти комнаты.

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

Перед созданием портала нам нужно сделать следующее:

·  Выделить маркер комнаты

·  Включить режим создания портала с помощью Ctrl+P или иконкой

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

С выделенным маркером комнаты перейдите в режим создания порталов, щелкнув на иконке.

Когда включен режим создания портала и выделен маркер комнаты, мы можем создать наш портал. Щелкните на иконке Рисования Портала.

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

Обратите внимание на белую линию, исходящую из портала в маркер комнаты, который был выделен. Это означает, что портал "присоединен" к этому маркеру.

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

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

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

Я переместил вид в окне проекции так, чтобы хорошо видеть область портала и масштабировал его до таких размеров, чтобы он был достаточно большим, для покрытия крайних ребер видимой области. Этот портал довольно большой, так как находится во входе в пещеру. Большинство ваших порталов будут находиться в местах дверных проемов и поэтому будут намного меньше. Так что, продолжайте работу и масштабируйте портал до нужного, по вашему мнению, размера, после чего он должен выглядеть как на рис. 4b.

Если созданный вами портал повернут не в ту сторону и не соответствует маркерам комнат, щелкните на нем дважды и измените его положение. В нашем примере он должен быть на -90 градусов по оси Z.

Перед тем как мы перейдем к следующему шагу, выделите существующий портал и сделайте его копию. Переместите новый портал, пока что, на край уровня. Мою копию и перемещение моего портала вы можете увидеть на рис. 4с.

Рис. 4а: Вновь созданный портал

Рис. 4b: Масштабирование портала до проема пещеры

Рис. 4с: Перемещение скопированного портала

Если с выделением портала у вас проблемы, перейдите в режим Создания портала, выделив Маркер Комнаты и нажав Ctrl+P или , после чего, выделите портал. В режиме портала вы можете только выделять портал. Это становится полезно, когда у вас много ссылок, блокирующих вид в окне проекции.

Шаг 3: Соединение Порталов с Маркерами Комнат

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

Переместитесь портал к дверному проему между входом в убежище и коридором, как показано на рис. 5а. Вам нужно будет повернуть его. Для этого вы можете включить Snap Rotate и повернуть его или вы можете изменить вращение объекта другим способом - изменив его свойства вручную. Но помните, порталы должны быть выровнены с маркерами комнат. Ваши порталы скорее всего будут повернуты по оси Z на 0, 90, -90, -180 или 180 градусов.

Вы, возможно заметили, что мой портал все еще указывает белой линией на маркер комнаты входа в пещеру. Не переживайте, мы позже позаботимся об этом. В данный момент нам нужно масштабировать портал так, чтобы он соответствовал дверному проему. Продолжайте работу и масштабируйте свои порталы, если вы еще этого не сделали. Сравните свой портал с порталом на рис. 5b. (Я скрыл двери убежища, чтобы вам было лучше видно границы портала).

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

Нам нужно разорвать эту связь. Чтобы сделать это, войдите в режим Портала и выделите портал, над которым мы работаем. Когда он будет выделен, вам нужно выключить режим Портала и щелкнуть при нажатой клавише Ctrl на маркере комнаты пещеры. В данный момент у вас должны быть выделены и портал и маркер комнаты пещеры, как показано на рис. 5с. (я бы устал так долго описывать три щелчка мышки - автор перевода).

Чтобы разорвать связь щелкните на иконке Break Portal Link . Белая линия должна исчезнуть.

Теперь нам снова нужно выделить портал и в этот раз вместе с маркером комнаты коридора. Запомните последовательность: входите в режим Портала , выделяете портал, выходите из режима Портала , щелкаете при нажатой клавише Ctrl на маркере комнаты коридора. Как на рис. 5d у вас должен быть выделен портал и маркер комнаты коридора.

Рис. 5а:

Выравнивание портала с Маркерами Комнат

Рис. 5b:

Голубая линия показывает связь портала с маркером комнаты

Рис. 5с:

Подготовка к удалению не нужной связи

Рис. 5d:

Подготовка к связи маркера коридора с соответствующим порталом

Для создания связи, просто нажмите иконку Portal Link . Должна появиться белая линия, идущая от портала к маркеру комнаты коридора, как показано на рис. 6а.

(блин, этому чуваку нужно романы писать, а не руководства.. прим. авт. перевода. В двух словах - для создания и удаления связи пользуйтесь иконкой Portal Link, а чтобы выделить несколько объектов, удерживайте нажатой клавишу Ctrl - ВСЕ БЛИН!!! Когда говорят: "Краткость - сестра таланта" - это явно не про него).

Повторите процесс и свяжите этот портал с маркером комнаты убежища. Когда закончите, результат должен быть похож на рис. 6b.

Заметьте, когда вы выделяете портал и маркер комнаты (для связывания), они остаются выделенными после связывания друг с другом. Чтобы увеличить скорость процесса связывания портала с другой комнатой, просто щелкните левой кнопкой мыши на маркере комнаты коридора, удерживая клавишу Ctrl. Из выделения уберется уже не нужный Маркер Комнаты. Теперь сделайте Ctrl+щелчок на маркере комнаты убежища. После это, все что вам нужно сделать, это щелкнуть на иконке связывания Portal Link.

Свяжите портал около пещеры с двумя смежными маркерами комнат (маркеры комнат убежища и пещеры). Когда закончите, у вас должно быть два портала и три маркера комнат, связанных так, как показано на рис. 6с. Увидеть только связи порталы/комнаты вы можете просто щелкнув Shift+C, скрыв всю статику, после чего выделение всех порталов (будет легче с помощью фильтра) отобразит связующие линии. На рис. 6d вы можете увидеть пример этой техники.

Рис. 6а:

Связь Портала и Комнаты коридора

Рис. 6b:

Две связи между порталом и смежными маркерами

Рис. 6с:

Белые связи показывают соединение наших комнат/порталов

Рис. 6d:

Использование Shift+C при выделенных порталах скрывает все неиспользуемое в данный момент, облегчая настройку оптимизации уровня

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

Когда вы добавляете в уровень такой объект как Маркер Комнаты, любая область за пределами таких маркеров, обозначается как "Безграничное пространство". Такое пространство расценивается как особенный Маркер Комнаты, по этому, портал требуется поставить в переходе из созданного Маркера Комнаты в такое пространство.

Для этого нужно выделить портал, скопировать его и переместить в нужный дверной проем. Включите режим Портала , выделите портал около маркера комнаты коридора (или вы можете создать новый как примитив, для практики) и используйте Ctrl+D для копирования. Переместите вновь созданный маркер в дверной проем. Не смотря на то, что портал уже связан (белая линия) с маркером комнаты, нам нужно обезопасить себя и установить связь еще раз.

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

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

Загрузите игру и походите по созданному убежищу. Теперь вы должны видеть большое хранилище через дверной проем. Возле созданного портала пройдитесь медленно и посмотрите сквозь него под разными углами.

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

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

◄◄◄ Назад Дальше ►►►

Главные советы по оптимизации

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

Для более близкого ознакомления с созданием примитивов, типа порталов, маркеров комнат, триггеров и т. п. щелкните ЗДЕСЬ.

Для знакомства с техникой системы отсечения, щелкните ЗДЕСЬ.

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

(1) Я создаю один маркер комнат, и копирую его столько раз, сколько маркеров мне нужно для покрытия всего уровня.

(2) После этого я перехожу в ортографический вид проекции ('0' - ноль) и включаю вид сверху ('Т'), чтобы выровнять все маркеры комнат.

(3) Дальше, я создаю один портал. Потом я копирую этот портал и разрываю связь. Это дает мне портал без связи, который я могу скопировать и переместить в другие места на уровне.

(4) После того, как у меня будут выровнены все порталы и маркеры комнат, я нажимаюShift+C для скрытия всех статических объектов. Все что остается в окне визуализации, это мои маркеры комнат и порталы. Дальше я прохожу через каждый из порталов, связывая их с соответствующими маркерами комнат. Когда заканчиваю создание связей, снова нажимаюShift+C для отображения статики и мой уровень можно считать оптимизированным.

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

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

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

ВНИМАНИЕ: Движок физики Havok и маркеры комнат вместе не очень правильно работают. Избегайте размещения двигаемых объектов возле порталов, чтобы они (объекты) не столкнулись сквозь эти порталы. [Если объект находится, скажем, в комнате А, то отображение этого объекта ограничено для тех персонажей, которые находятся в этой же комнате или для того, кто видит этот объект через портал в комнату А. Если движок Havok вызывает перемещение объекта (если игрок поднял этот объект с помощью клавиши Z или его задел взрыв) то объект будет продолжать отрисовываться до тех пор, пока он находится в движении под управлением системы Havok. Однако, как только этот объект перешел в состояние покоя, он передается в нормальный процесс визуализации и следующий раз будет отрисовываться только если в комнате А находится главный герой... даже, если в этот момент, данный предмет уже находится в комнате В. И наконец, если вы войдете в комнату В, в которой будет этот объект, вы его не увидите!!!]