вернуться на beanet.ru вернуться к списку проектов вернуться на главную страницу сборника

Тема: Отражения и кубмапы


Ключевые слова: отражения поверхностей, производительность

См. также: env_cubemap
Список используемых понятий, сокращений и обозначений

перейти к общему списку

Для прорисовки большинства отражающих материалов подразумевается наличие некоторой дополнительной информации (не зависящей от свойств материала). Такую информацию предоставляет кубмап, специальная текстура с рендерингом окружающей среды в 360° (полная сфера). Используя кубмап в качестве образца, материалы гораздо точнее и реалистичнее отражают окружающую среду, приобретают эффект рельефности (если он задан в свойствах материала).
При расстановке кубмапов на карте (см. далее) важно придерживаться баланса: малое (или нулевое) количество кубмапов или неправильная их расстановка вызывает некрасивые и несоответствующие отражения окружающей среды, зато часто расположенные кубмапы прибавляют значительный объем к Вашей карте (после генерации их командой buildcubemaps) и отнимают больше ресурсов в игре.


Расстановка кубмапов

Для расстановки кубмапов на карте используйте энтити env_cubemap (каждая энтити определяет один кубмап). Если карта компилируется с VBSP, каждая поверхность автоматически использует ближайший кубмап для отражения.
Обратите внимание, что положение кубмапа на карте зависит также от его назначения (для брашей, неподвижных объектов, оружия игрока, NPC и пр.). Для получения наилучшего визуального эффекта используйте несколько простых правил при расстановке кубмапов:
  • если кубмап предназначен для отражений оружия игрока или NPC, а также для мест карты, в которые может попасть игрок, его следует располагать на высоте 64 юнита от поверхности (можно использовать info_player_start для контроля). При этом окружающая среда наиболее точно отражается на уровне глаз (стоящего игрока);
  • если кубмап предназначен для отражений на брашах и прочих статичных поверхностях, он должен быть не ближе 16 юнитов к любой поверхности;
  • кубмапы необходимо размещать во всех визуально контрастных областях. Например, кубмап необходим в комнате, залитой ярким желтым светом, особенно если рядом есть комната с темно-синим освещением (которая также нуждается в установке кубмапа). Граница визуально контрастных областей должна совпадать с границей областей действия кубмапов. Если не придерживаться этого правила, появляются неприятные эффекты - светлые объекты в темной комнате, и наоборот.

Пример-иллюстрация:
Кубмапы в светлой и темной комнатах Пояснения к примеру

Желтым цветом обозначена светлая комната (1), синим - темная (2), белый прямоугольник - дверь между комнатами. c1 и c2 - кубмапы, стрелками показаны расстояния с условными обозначениями (a1...e2).

Кубмапы c1 и c2 расположены по возможности в центрах комнат 1 и 2. Это даст естественные отражения.
Если все же не удается подобрать оптимальное положение кубмапов, можно вручную назначить им поверхности-стены комнат (стены комнаты 1 для c1, стены комнаты 2 для c2).


Компиляция карт с кубмапами

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

Замечание: если при построении кубмапов игра "вылетает" в Windows, возможно, у Вас слишком низкое разрешение экрана. Перед вводом команды buildcubemaps установите игровое разрешение с высотой и шириной экрана более 512 точек (как минимум 800х600).


Кубмапы и HDR

Если карта откомпилирована с опцией HDR, кубмапы должны быть сгенерированы как с включенным HDR, так и с выключенным (режим LDR).


Проверка работы кубмапов

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


Влияние кубмапов на производительность в игре

Вы можете регулировать разрешение текстур, используемых для создания кубмапа. Текстуры с большим разрешением обеспечивают более четкие ("резкие") отражения, однако они и занимают больше места в памяти, отведенной под текстуры. Старайтесь для большинства env_cubemap оставлять разрешение текстур по умолчанию, которое приемлемо для большинства карт. Исключение составляют области с сильно отражающими поверхностями или высокой детализацией (например, доступная для игрока область).
Слишком много кубмапов в маленькой области приводят к визуальным артефактам (искажениям, ошибкам) при изменении направления взгляда. В области с большим количеством сильно отражающих поверхностей рекомендуется ставить только один кубмап - около центра отражающей поверхности. В противном случае возможно появление "швов" и "прыгающих" отражений.
Чтобы определить, сколько ресурсов отнимают кубмапы в конкретной области, для начала используйте консольную команду +showbudget и проверьте категорию World Rendering. Если в ней отображены слишком высокие затраты, возможной причиной являются кубмапы в данной области.
Попробуйте скрыть их в редакторе Hammer и заново откомпилировать карту. Если затраты заметно ниже - необходимо уменьшить количество кубмапов или разрешение текстур этих кубмапов. При этом можно перераспределить кубмапы на карте.



Статьи (рус):
Статьи (eng): http://developer.valvesoftware.com/wiki/Cubemaps

перейти к общему списку

Номер статьи: 6

Сборник полезной информации по созданию модификаций на движке Valve Source Engine (игры Half-Life 2, Episode One, Episode Two)