Ru/Half-Life: Alyx Workshop Tools/Introduction

Данная статья должна помочь Вам лучше понять некоторые аспекты работы инструментария Half-Life: Alyx и движка в целом. Пользователям будет немного проще, так как в обоих проектах используется схожая версия движка. Однако, в Half-Life: Alyx Workshop Tools было переработано и улучшено , значительно обновлён редактор моделей (Model Editor) под названием ModelDoc, базовые шейдеры также различаются. в HLA намного больше различных энтити (сущностей) и самого контента. Но всё-таки, ознакомление с официальной документацией во многом поможет легче усвоить многие механики из нового инструментария. 
== Запуск Half-Life: Alyx Workshop Tools ==
Следуйте краткому руководству по !
== Дополнения, контент и папки игры ==
Дополнение (англ. Addon) — это набор файлов, которые размещаются поверх основной игры. По своей сути похож на моды из Source 1, а также на режим дополнений из Left 4 Dead 2, но позволяет обменивать дополнения во время выполнения. Ваши файлы будут разделены на два типа - исходный контент (необработанные файлы) и скомпилированный контент (обработанные или скомпилированные файлы).
Местоположение исходного контента:
* 
Местонахождение скомпилированного контента:
* 
Папка с контентом не будет перераспределена, пока сами данные в папке с игрой будут упакованы в архивы, называемые VPK, когда вы загружаете свое дополнение в Мастерскую Steam.
== Компиляция контента ==
Исходный контент редко подходит для быстрой загрузки и хорошей оптимизации. Например, если текстура является PSD документом из Photoshop, то она может хранить в себе десятки слоёв и сотни мегабайт ненужной информации, которая при компиляции (конвертировании) будет сжата или удалена за ненадобностью. Таким образом, правильное портирование контента может ускорить его загрузку, улучшить рендер и общую производительность проекта за счёт встроенных в движок шейдеров.
Для удобства пользователей, все исходные файлы игры лежат отдельно от созданных вами. Это сделано для того, чтобы Вам было удобней удалять/обновлять свои наработки без риска стереть что-то очень важное для загрузки игры. Как правило, после того, как Вы обновили свою текстуру в Photoshop (к примеру), она будет автоматически перекомпилирована и обновлена в Material Editor. На случай, если это не происходит автоматически, есть средство для ручной перекомпиляции нужного файла. 
== Основные файлы - текстуры, материалы, модели и карты ==
* Текстуры – Изображение, визуализирующее поверхность чего-либо (например, исходное изображение стены с её собственным цветом, карта нормалей и т.д.). Текстуры обычно создаются в таких программах как Adobe Photoshop, GIMP и тому подобных. При добавлении их в проект, они будут автоматически перекомпилированы, но для отображения в игре им нужен навигационный материал (аналог VMT из Source 1).
* Материалы – Хранят в себе описание свойств поверхности. Например, указывают на наличие карты нормалей, оттенков, шероховатостей и прочего. У вас может быть несколько версий текстур, но с разными настройками, например одна стена может иметь блики, а другая нет. Для этого и нужны материалы.
** Материалы настраиваются в .
* Модели – Создаются в программах для 3D-моделирования. Например, Autodesk Maya, Modo или Blender. Это трехмерные фигуры, сделанные из треугольников. Примерами могут быть: мебель, деревья, детали зданий и персонажи или существа. Многое из того, что вы видите в Half-Life: Alyx, основано на 3D-моделях. Поверхности, из которых сделаны эти модели, относятся к определенным материалам, которые, в свою очередь, указывают на соответствующие текстуры для использования. В то время, как базовые файлы модели обычно создаются с помощью внешнего программного обеспечения, их использование в движке будет настроено в ModelDoc.
** Автоматическое перекомпилирование при изменении исходника – аспекты итоговой скомпилированной модели могут определяться используемыми ей материалами. Например, модель с плоским, неосвещённым материалом может автоматически скомпилироваться без вершинных нормалей для сохранения пространства – но Вам нужно будет принудительно перекомпилировать модель, если впоследствии Вы измените материал, чтобы применить правильное освещение. Также, при изменении своего материал для использования вторичных UV карт для чего-нибудь, скорее всего, потребуется перекомпилировать модель для корректного отображения.
* Карты – Думайте о карте, как о контейнере для всего в мире, который вы создаете. Карты содержат данные об освещении, где размещены #D модели, звуки для воспроизведения, и даже основные скрипты (сценарии), связывающие поведение всех объектов воедино.
Все, что вы видите в Half-Life: Alyx в конечном итоге помещается на карту. Это и декорации, на которых происходит сюжет, так и сцены с персонажами.
** Half-Life: Alyx Workshop Tools включает в себя - редактор уровней для игры. 
**Карты не перекомпилируются автоматически и всегда требуют компиляции для просмотра изменений в игре. К примеру, это могут быть изменения в или геометрии.
Все используемые исходные файлы, такие как звуки, частицы и прочее - находятся в папке "content" для вашего аддона и после компиляции лежат в папке "game" вашего аддона.
=== Исключения из правил ===
Существует несколько типов файлов, например, различные файлы скриптов, используемые движком напрямую. Эти текстовые файлы размещаются где-то в папке с игрой и не компилируются. К ним относятся такие вещи, как Soundscape, локализация и т.д.
== Сущности (энтити), геометрия, логика сущности и не только ==
Пустая карта в Hammer - это абсолютно чистый холст, для создания VR опыта в Half-Life: Alyx. Это место, куда Вы размещаете практически всё, что угодно, и, пока не добавите что-то на свою карту, уровень будет совершенно пустым.
* Сущности – Каждый из них фактически представляет собой пользовательские биты кода, написанные для выполнения определенного набора инструкций, позволяющие пользователям в сочетании с другими "сущностями" для создания различного игрового опыта. Они почти всегда будут иметь видимое (и/или слышимое) представление в мире, а также будут реагировать на вещи определенным образом. Физический объект является примером "сущности", где пользователь может указать, как модель должна отображаться, как физический объект, как этот объект должен реагировать при броске игроком и т.д. Некоторые из этих данных содержатся в редакторе Hammer и могут быть отредактированы, в то время, как другие данные, относящиеся к модели, содержатся в непосредственно её файлах. Другим примером могут быть NPC (Хедкрабы, солдаты Комбайн), источники света или невидимый триггер, который говорит объекту что делать, когда он проходит через него.
* Геометрия – в основном применяется как фиксированная архитектура, на которой всё происходит. Вы также можете привязать определенные участки геометрии карты к определенным объектам – это говорит объекту (например, раздвижной двери или вращающейся платформе), чтобы использовать эту геометрию карты в качестве своего видимого представления. В случае этого невидимого объёмного триггера, блок геометрии карты будет определять пространство, которое он заключает в себе.
* Логика сущности – это главное связующее поведения различных сущностей на карте. Созданная на основе определений для сущности система, как "Ввод" и "Вывод", объект может испытывать определенное событие (например, игрок кладет руку в заданный триггер), которое заставляет его запускать метод "OnTrigger", описанный в "Выводе" этой сущности. Это связывается с "Вводом" на другой объект, который говорит ему сделать что-то еще, например, включить свет. Более подробно об этом написано в статье . Учтите, что эти главы затрагивают работу с движком Source 1, поэтому некоторые ссылки и особенности могут часто упоминаться в разделах, неприменимых для Half-Life: Alyx, но ключевые идеи остаются теми же.
== Освещение ==
Движок использует имитацию того, как свет ведёт себя в реальной жизни для визуализации объектов, позволяя поверхностям реалистично отражать поступающий на них свет. Объекты могут отбрасывать тени на себя и другие объекты. Освещение - очень важная составляющая карты, правильное освещение миров является искусством само по себе. Больше об освещении Вы можете узнать из статьи , которую можете прочитать, чтобы получить лучшее представление о его возможностях и ограничениях.
== Командная консоль ==
Называемая просто "консоль", это интерфейс командной строки, который передает журналы (логи, logs) и различные сообщения обратно пользователю, а также принимает множество текстовых команд для управления внутренними функциями движка. Он принимает форму отдельной программы, и при запущенных инструментах можно вызвать его, нажав клавишу тильда ( ~ ) чуть ниже клавиши Escape в левом верхнем углу клавиатуры или из вкладки "Tools" в правом верхнем углу большинства окон инструментов.
== Производительность ==
VR очень капризен к системным требованиям, поэтому при создании контента внутри Half-Life: Alyx нужно идти на различные компромиссы. Одним из самых больших вычислительных затрат является рендеринг сцены. В этом случае для VR движок обрабатывает сцену одновременно на два глаза с некоторыми различиями в высоком разрешении со скоростью обновления 90 кадров в секунду. Всегда рендеринг для VR шлема требует больше вычислительных мощностей, чем рендеринг для одного монитора, из-за чего могут происходить "проседания" (дропы) кадров куда чаще. Это может вызвать мерцание, в лучшем случае, или болезненное дрожание, в худшем случае. Система шейдеров вместе с системой рендеринга в Half-Life: Alyx специально спроектированы так, чтобы быть максимально эффективными, но все еще возможно их перегрузить.
В Half-Life Alyx используется особая система адаптирования, когда в реальном времени изменяется разрешение обрабатываемого изображения в зависимости от степени нагрузки на оборудование. Однако, есть некий рубеж, ниже которого качество картинки падать не будет. Эта возможность отключается при работе в режиме инструментов и включается только в игровом режиме. Правильная проверка производительности вашего аддона должна проводиться в игровом режиме (в отличие от запуска игры с инструментами, загруженными в фоновом режиме).
Вот некоторые примеры с потенциально высокой нагрузкой:
* Слишком много геометрии - Когда в поле зрения игрока слишком много геометрии или статических объектов (static prop). Используйте в качестве ориентира исходники разработчиков игры. 
* Дорогое освещение – При наличии множества индексируемых (предварительно просчитанных, "baked") источников света могут потребоваться более высокие вычислительные мощности компьютера. В то время как система освещения в Half-Life: Alyx эффективна, недоразумения и завышенные ожидания могут вызвать значительные проблемы. Общее эмпирическое правило состоит в том, чтобы не иметь слишком много индексированных источников света, которые генерируют свет на любой поверхности. Лимит составляет четыре источника. Хоть это и предел, игра будет работать более эффективно, если есть один или два индексированных источника света, попадающих на поверхность. Хотя динамические источники света можно использовать, они обычно применяются для узкоспециализированных случаев использования (например, фонарик) и должны использоваться консервативно. 
** Если вы можете, найдите для тестирования пользователя с графическим процессором начального уровня вроде Nvidia GeForce GTX 1060 или AMD Radeon RX 580 с 6 ГБ VRAM в качестве хорошей основы для оценки вашей карты.
Для просмотра текущей информации о требовании для рендеринга картинки, откройте окно для отображения тайминга через SteamVR : (Настройки) Settings : (Производительность) Performance : (Отобразить тайминг кадра) Display Frame Timing. На очень упрощенном уровне, график GPU внизу должен оставаться ниже 11 мс для дисплея с частотой 90 Гц, без какой-либо ненулевой красной линии, появляющейся внизу – если он работает в игровом режиме, адаптивная точность должна стараться максимизировать использование GPU, но она редко должна превышать 11 мс.
Если ваш график CPU занят скачками выше 11 мс, то, возможно, существуют и другие затраты на обработку. Вот некоторые потенциальные вещи, влияющие на процессор:
* Слишком многом объектов – Гораздо более вероятно, что это будет какой-то аспект конкретных "сущностей", расположенных на Вашей карте, а не общее количество всех "сущностей", но если у расположено больше обычного различных вещей, возможно, стоит исследовать дальше. Например, простая карты-коробки с сотней солдат Комбайн может быть сложной для рендеринга, но еще сложнее обрабатывать ИИ каждого NPC, вычисление путей перемещения, цели, места укрытия и столкновения с миром.
* Комплексный рендеринг – Вопреки интуиции, Вы можете иметь высокие требования для рендеринга, даже если графический процессор не используется на полную благодаря вызовам отрисовки. Если у Вас есть много отдельных моделей (и/или материалов), процессор должен сказать графическому процессору, чтобы он отрендерил каждую из них, что влечет за собой затраты, которые растут с большим количеством вещей.
* Комплексная физика – Наличие слишком большого количества физически смоделированных объектов в сцене одновременно может быть значительной вычислительной затратой и, в частности, наличие сложного столкновения объекта с другим может ударить по производительности, вызывая серьезные падения в частоте кадров. В то время как карты-примеры могут содержать сотни физических объектов, не все они активны одновременно. Имейте это в виду при создании ваших аддонов.
== Примеры карт ==
Некоторые примеры карт приведены в разделе .
* содержит несколько аннотированных примеров различных функций Half-Life: Alyx.
* содержит полные исходники всех карт, поставленных в финальной версии игры.
Вы не должны пытаться перекомпилировать финальные карты игры. Полный расчет освещения и звука, скорее всего, займет слишком много времени на домашнем компьютере , но Вы сможете добавлять готовый контент, используя новую функцию .
== Документация ==
Наконец, добро пожаловать в Вики-сообщество разработчиков Valve! Эта документация является нескончаемой работой в процессе разработки и частично создается такими людьми, как Вы. На каждой странице есть раздел для обсуждения, и каждую страницу можно редактировать и расширять по своему усмотрению. Если у вас есть какие-либо вопросы, пожалуйста, напишите их, и если у вас есть какие-либо ответы, то отправьте их тоже!