Карты-кубы

From Valve Developer Community
Jump to: navigation, search
English
Env cubemap.png
Зеркальные отражения.

Чтобы движок Source правильно показывал многочисленные отражающие материалы, они должны быть объединены с внешними данными. Эти данные хранятся в виде карты-куба (cubemap), то есть кубической текстуры, которая представляет собой трехмерное изображение определенной области. Для этого движок Source использует точечные сущности env_cubemap в качестве образцов, с помощью которых создает текстуры и сохраняет их в файл с разрешением .bsp. При обработке зеркальных и других окружающих материалов он использует кубы для получения более точного окружения. Другими словами, куб создаёт текстуры, которые будут моделировать отражающую поверхность.

Примечание:Portal 2 и Team Fortress 2 имеют проблемы с построением кубов. Они описаны в конце статьи.

Размещение

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

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

  • Если куб предназначен для NPC или игрока, env_cubemap следует размещать на уровне головы (как правило, 64 единицы программы Hammer). Таким образом, она наиболее точно передаст мир с точки зрения стоящего.
  • Если куб предназначен для статичной геометрии мира, то справедливым, как правило, будет расстояние в 16 единиц от всех поверхностей.
  • В каждой зоне с визуальным контрастом должна быть своя карта-куб. Коридор с ярко-желтым светом требует своей env_cubemap, особенно, если она расположена рядом с комнатой, где горит тускло-голубой свет. Если в одном их этих мест не будет env_cubemap, то отражения и блики на сущностях и геометрии будут моделироваться неправильно.

Построение кубов

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

Note:До запуска команды buildcubemaps, установите значение mat_specular в 0, иначе это приведёт к неправильным отражениям!
Note:Созданные кубы сохраняются в файл bsp, который помещается в папку игры, а не в то место, где вы скомпилировали карту.
Note:Если после создания кубов вы переименуете файл bsp, то их нужно строить заново.

HDR

Если карта скомпилирована с включённой опцией HDR в программе VRAD, кубы необходимо построить как в режиме HDR, так и LDR (не-HDR). Создание кубов только в одном из этих режимов будет означать, что кубы не представлены в другом режиме. Информацию о том, как строить кубы под HDR см. в Основах освещения HDR.

Кубы должны быть построены для карт LDR и HDR. Предположим, вы уже находитесь в режиме HDR и загрузили свежескомпилированную карту (в программе VRAD должен быть включен параметр '-both'). Перейдите в консоль и выполните следующие команды:

buildcubemaps
mat_hdr_level 0 (для перехода в LDR)
restart (для перезагрузки карты)
buildcubemaps
mat_hdr_level 2 (для перехода обратно в HDR)
restart (для перезагрузки карты)
Note:Это не относится к CS:GO, т.к. HDR не может быть отключен.

Игры Team Fortress 2 / Source 2012+

Team Fortress 2 по-умолчанию не применяет кубы к отражающим поверхностям. (Аналогичные проблемы также имеются и в некоторых установках Portal 2, когда кубы просто не появляются). Все текстуры светятся чёрно-розовыми шашечками. Если вы построите кубы, и один из них увидит большую сверкающую поверхность, то зафиксирует её в 6 изображениях. Это значит, что некоторые объекты будут бликовать так, будто рядом с ними находится розовая и чёрная сверкающая текстура. Для решения проблемы, кубы нужно строить с отключенной зеркальностью. Чтобы построить кубы для карты TF2, загрузите её через "Create Server". Затем, откройте консоль и выполните следующие команды:

Создание кубов только для LDR или HDR:

mat_specular 0
buildcubemaps
mat_specular 1
disconnect
sv_cheats 1
mat_reloadallmaterials
sv_cheats 0

При создании кубов для HDR требуется, чтобы вы повторили эти шаги после загрузки карты с включённым HDR.

Note:Если при постройке кубов игра вылетает, то скорее всего вы установили слишком низкое разрешение экрана. Убедитесь, что высота и ширина экрана игры более 512 пикселей. Это означает, что минимальное стандартное разрешение должно составлять 800X600. Разрешение можно поменять на кладке Видео в меню игры Параметры.
Note:Если после построения кубов вы переименуете файл .bsp, они перестанут работать и куб неба сбросится в стандартные настройки. Каждый раз после переименования карты кубы нужно создавать заново. Однако, в этом случае старые кубы не удаляются, что приводит к разрастанию размера файла. Если вы желаете избежать проблем с загрузкой вашей карты, не переименовывайте её после компиляции.
Note:В некоторых играх на многопользовательских картах перед запуском команды buildcubemaps потребуется включить читы (sv_cheats 1).

Кубы после обновления SteamPipe

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

Баг:Редактирование непосредственно файла карты имеет неприятные последствия! Включая глюки графики и потери теней от статичных моделей! данный метод может предотвратить это.

  1. Поместите энтити env_cubemap в доступных местах вашей карты, и скомпилируйте её. Важно: Название карты должно быть не длиннее 30 символов, (включая расширение .bsp), иначе .bsp не запишется! Также, не меняйте название карты после создания кубов, иначе они не будут работать!
  2. Возьмите ваш любимый редактор файлов .bsp (Например, VIDE или Pakrat. Работа с этими инструментами не входит в данную статью.), и загрузите ваш .bsp.
  3. Удалите все файлы "Texture" или "Texture (HDR) ". (Не файлы "Material", только .vtf!)
  4. Сохраните отредактированный .bsp.
  5. Скопируйте эту карту назад в каталог карт вашей игры.
  6. Откройте консоль и введите: "map -название карты-". (В моём случае, "ttt_mars_colony_cubemap".)
  7. В игре, снова откройте консоль и введите это: "mat_specular 0" и "buildcubemaps".
  8. Подождите, пока построятся кубы, и снова включите зеркальность с помощью "mat_specular 1", а затем перезагрузите ваши материалы командой "mat_reloadallmaterials".
Note:Если вы хотите упаковать в карту пользовательский контент, сделайте это после создания кубов.

Source Filmmaker

Сегодня создание кубов в Source Filmmaker не работает, и отрисовывает только одну поверхность с одним кубом. Чтобы правильно создавать кубы в Source Filmmaker, скопируйте файл карты вместе с принадлежностями (текстурами, моделями, и т.д.) в Alien Swarm. Движок не требует перекомпиляции карты, достаточно её перенести. Загрузите вашу карту в Alien Swarm и введите в консоль команду "buildcubemaps". После отрисовки поверхностей, ваша карта будет содержать кубы, которые можно скопировать обратно в Source Filmmaker. Это работает только с новыми версиями карт, при загрузке карт из TF2 или Garry's Mod игра будет вылетать.

Откройте 'не скопированную' версию в Хаммер и постройте её с помощью дополнительного режима поиска 'чужих' (относительных) путей содержимого sfm. todo: абсолютные пути.

Пример для 'общего' расположения:

	"SearchPaths"
	{
		"Game"	"|gameinfo_path|."
		"Game"	"swarm"
		"Game"	".\..\SourceFilmmaker\game\tf_movies"
		"Game"	".\..\SourceFilmmaker\game\tf"
		"Game"	".\..\SourceFilmmaker\game\usermod"
		"Game"	".\..\SourceFilmmaker\game\hl2"
		"Game"	"swarm_base"
		"Game"	"platform"
	}

Portal 2

Если вы хотите создавать кубы для карт, расположенных в "Portal 2/portal2/maps" (Hammer копирует карты туда по-умолчанию), Portal 2 вылетит, потому что ищет карты в разделе "portal2_dlc2/maps". Так что, если вы хотите избежать сбоя, скопируйте вашу карту в "Portal 2/portal2_dlc2/maps" (или каталог карт вашего мода), перезагрузите её и создайте кубы снова. Это должно работать.

Тестирование

Лучше всего карты-кубы тестировать с помощью консольной команды impulse 81. Введите её в консоль. Затем, впишите give weapon_cubemap.

Note: Можно привязать эти команды на разные клавиши, чтобы не вводить их каждый раз.

Это заменит текущую модель оружия с "cubemap weapon" на несколько сфер, каждая со своей отражающей поверхностью. Путешествуя по карте, вы увидите, где и как применяются кубы в пространстве, а также, на сколько верно куб описывает зону освещения и цвета.

Note:Вы можете скопировать cubemap weapon из Steam\SteamApps\common\Half-Life 2\hl2\models\shadertest\envballs.mdl и добавить в свой мод, если он этого не имеет.
Note:Если перекомпилировать карту без перезапуска игры, кубы от предыдущей версии останутся в кэше, создавая иллюзию, что их не надо создавать заново. Этих кубов нет в карте, что покажет запуск карты на другом компьютере или её перезагрузка. Каждая новая компиляция стирает упакованные материалы, включая кубы.

Производительность

Сущность env_cubemap позволяет задавать разрешение связываемой с ней текстуры. С одной стороны, чем больше разрешение, тем точнее и “резче” результат, но с другой – сильнее расход памяти. В основном, кубы должны иметь разрешение по умолчанию (32x32 пикселя для каждой поверхности). Обычно это дает удовлетворительный результат. Некоторые исключения возможны для областей с высокой отражающей способностью или, например, для детализации определенных частей действия.

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

Чтобы определить вес кубов в той или иной зоне, загляните в категорию World Rendering с помощью консольной команды +showbudget. Если категория регистрирует необычайно высокую загрузку, значит в зоне слишком много кубов. Простой сценарий решения проблемы – скрыть все кубы в программе Hammer, перекомпилировать и запустить карту. Если производительность стала заметно лучше, значит надо уменьшить плотность или разрешение кубов. Наконец, проверить загрузку можно, отключая кубы командой mat_specular 0, но это требует подтверждения.

Баги

Note:Для некоторых игр (L4D<Left 4 Dead>/L4D2<Left 4 Dead 2>) после построения кубов требуется полный перезапуск игры.
Bug:
В Team Fortress 2 по-умолчанию нет кубов, поэтому все отражающие поверхности будут показывать отсутствующий материал текстур, напоминающих чёрно-розовые шашечки. Во избежание проблемы, создавайте кубы вручную.
Bug:
Создание кубов в Portal 2 вызовет ошибку игры, если карта будет загружаться из папки по-умолчанию common/portal 2/portal2/maps. Этот сбой возникнет при перезапуске карты после создания кубов. Во избежание ошибки, в строке 'Place compiled maps' закладки Build Programs впишите 'common/portal 2/portal2_dlc2/maps', затем перекомпилируйте карту, после чего создайте кубы.

См. также