Перемещающийся уровень воды
Движок Source поддерживает изменяемый объём воды как объект func_water_analog, который может перемещать поверхность уровня воды подобно func_movelinear .
Ограничения
Основное ограничение изменяемого уровня воды заключается в невозможности использования оттенения воды Water; способ его реализации требует разделения областей видимости на границе поверхности воды, а области видимости не могут изменяться в процессе игры. Однако все остальные оттенения и эффекты, совместимые с элементами карты, будут работать.
Valve предоставила несколько материалов для воды с перемещающимся уровнем в
Half-Life 2 и других играх, но все они выглядят довольно ужасно из-за того, что являются плоскими текстурами, иногда даже без карты нормалей! Для создания материалов, более похожих на поверхность воды, можно использовать оттенение Refract, так как оно способно перемещаться. Пример материала для перемещающегося уровня воды с использованием оттенения Refract. Можно воспроизвести отражения в игровом процессе с помощью объекта func_reflective_glass, расположенного непосредственно под поверхностью воды, и объекта func_brush с нанесенным на него преломляющим материалом. Пример можно посмотреть здесь.
Кроме того, существуют следующие ошибки.
- Объекты на стороне клиента, например, останки объектов или куклы трупов, не плавают в такой воде.
- Всплески воды не перемещаются вместе с поверхностью уровня воды, поэтому будут отображаться неправильно (висеть над уровнем воды или погружаться в неё), если уровень воды движется в момент, когда в неё падают объекты. Скорее всего, они будут появляться на начальном уровне воды, чем на конечном.
- Под водой не происходит замутнение, из-за чего вода выглядит "яркой", чем внутри объёма воды из элементов карты.
Обходной приём: Поместите переключатель на расстоянии 64 единицы (высота глаз игрока) под поверхностью воды, что переключит активный env_fog_controller на другой с "подводными" настройками.
Создание
Чтобы добавить на карту воду с перемещающимся уровнем, выполните следующие действия:
Создание элемента для воды
- Создайте элемент в размере необходимого объёма воды, используя инструмент Элемент.
- Откройте Обозреватель текстур нажав на кнопку Browse (Обзор) в панели текстур.
- Дважды кликните
tools\toolsnodrawматериал в Texture Browser. - Теперь нажмите на кнопку Apply Current Texture (Применить текущую текстуру), чтобы применить текстуру
tools\toolsnodrawко всем граням элемента. - Выберите Texture Application Tool (инструмент Применение текстуры), который откроет диалог Face Edit (Редактор граней).
- Кликните левой кнопкой мыши на верхнюю грань элемента воды в 3D виде, чтобы выделить её.
- Нажмите Browse (Обзор), чтобы перейти в Texture Browser (Обозреватель текстур).
- Введите
movingplaneв поле filter и выберите текстуруnature/water_movingplane. - Нажмите кнопку Apply (Применить) в диалоге Face Edit (Редактор граней).
Настройка объекта func_water_analog
- Теперь, после создания объёма воды, нажмите Ctrl+T, чтобы превратить элемент карты в объект. Выберите
func_water_analogиз списка. - Чтобы управлять объектом воды, необходимо указать его имя. Введите название для воды в поле
Name (Имя). - Выберите направление перемещения поверхности воды в поле
Move Direction (Направление). В большинстве случаев достаточно выбрать Up (Вверх) или Down (Вниз) из выпадающего списка. - Введите скорость перемещения поверхности воды. 55 - наглядное значение, но естественно указывается необходимая.
- Ключ-параметр
Move Distance (Расстояние)определяет, на какое расстояние будет перемещаться поверхность воды. Если ввести высоту исходного объёма воды, она полностью поднимется над начальным положением (нижняя грань элемента будет находиться там, где изначально была верхняя грань). - Звуки, которые будут воспроизводиться в начале или при прекращении движения, выбираются с помощью ключ-параметров
Sounds played... (Звук ...).
Изменение уровня воды
Объект func_water_analog можно перемещать с помощью двух входов: Open и Close. Дополнительную информацию смотрите в разделе Входы и выходы.
Карты окружения и перемещаемый уровень воды
Так как вода с перемещающимся уровнем не может использовать оттенение Water, динамические отражения недоступны, поэтому вместо них необходимо использовать предварительно рассчитываемую карту окружения из env_cubemap.
Чтобы применить env_cubemap к поверхностям воды:
- Добавьте объкт env_cubemap использовав инструмент Объект.
- Разместите env_cubemap над поверхности воды, около центра.
- Дважды кликните на env_cubemap в 3D виде, чтобы открыть окно Object Properties (Свойства объекта).
- Кликните на ключ-параметр Brush faces (Грани элементов) в окне Object Properties (Свойства объекта).
- Нажмите кнопку Pick... (Взять). Курсор мыши смениться на иконку пипетки.
- Кликните на верхнюю грань воды, чтобы выделить её. Связанные с объектом env_cubemap грани будут подсвечиваться красным цветом.
- Закройте окно Object properties (Свойства объекта).
Теперь элемент воды настроен на использование определенной карты окружения. Для того чтобы отражения отображались во время игры, необходимо создать карты окружения cubemaps.
- Скомпилируйте и запустите вашу карту. Когда карта загрузилась, откройте терминал разработчика и введите
buildcubemaps. Игра рассчитает карту окружения для каждого объекта env_cubemap и сохранит информацию в BSP-файл.