Перемещающийся уровень воды

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Русский (ru)Translate (Translate)

Движок Source поддерживает изменяемый объём воды как объект func_water_analog(en), который может перемещать поверхность уровня воды подобно func_movelinear(en) .

Ограничения

Основное ограничение изменяемого уровня воды заключается в невозможности использования оттенения воды Water(en); способ его реализации требует разделения областей видимости на границе поверхности воды, а области видимости не могут изменяться в процессе игры. Однако все остальные оттенения и эффекты, совместимые с элементами карты, будут работать.

Valve предоставила несколько материалов для воды с перемещающимся уровнем в Half-Life 2 Half-Life 2 и других играх, но все они выглядят довольно ужасно из-за того, что являются плоскими текстурами, иногда даже без карты нормалей! Для создания материалов, более похожих на поверхность воды, можно использовать оттенение Refract(en), так как оно способно перемещаться. Пример материала для перемещающегося уровня воды с использованием оттенения Refract. Можно воспроизвести отражения в игровом процессе с помощью объекта func_reflective_glass(en), расположенного непосредственно под поверхностью воды, и объекта func_brush(en) с нанесенным на него преломляющим материалом(en). Пример можно посмотреть здесь.

Нужно сделать: Figure out whether LightmappedReflective allows to change the opacity of the reflection using Fresnel ranges. If not, then the func_reflective_glass method cannot be used in multiplayer games where the player can see their own playermodel in a reflection, as the playermodel will clip through the reflection, which looks wonky.

Кроме того, существуют следующие ошибки.

  • Объекты на стороне клиента, например, останки объектов или куклы трупов, не плавают в такой воде.
  • Всплески воды не перемещаются вместе с поверхностью уровня воды, поэтому будут отображаться неправильно (висеть над уровнем воды или погружаться в неё), если уровень воды движется в момент, когда в неё падают объекты. Скорее всего, они будут появляться на начальном уровне воды, чем на конечном.
  • Под водой не происходит замутнение, из-за чего вода выглядит "яркой", чем внутри объёма воды из элементов карты.
PlacementTip.pngОбходной приём: Поместите переключатель на расстоянии 64 единицы (высота глаз игрока) под поверхностью воды, что переключит активный env_fog_controller на другой с "подводными" настройками.

Создание

Чтобы добавить на карту воду с перемещающимся уровнем, выполните следующие действия:

Создание элемента для воды

Шаг 1
  1. Создайте элемент в размере необходимого объёма воды, используя инструмент Элемент(en).
  2. Откройте Обозреватель текстур(en) нажав на кнопку Browse (Обзор) в панели текстур.
  3. Дважды кликните tools\toolsnodraw(en) материал в Texture Browser.
  4. Теперь нажмите на кнопку Apply Current Texture (Применить текущую текстуру), чтобы применить текстуру tools\toolsnodraw ко всем граням элемента.
  5. Выберите Texture Application Tool (инструмент Применение текстуры), который откроет диалог Face Edit (Редактор граней).
  6. Кликните левой кнопкой мыши на верхнюю грань элемента воды в 3D виде, чтобы выделить её.
  7. Нажмите Browse (Обзор), чтобы перейти в Texture Browser (Обозреватель текстур).
  8. Введите movingplane в поле filter и выберите текстуру nature/water_movingplane.
  9. Нажмите кнопку Apply (Применить) в диалоге Face Edit (Редактор граней).

Настройка объекта func_water_analog

Шаг 2
  1. Теперь, после создания объёма воды, нажмите Ctrl+T, чтобы превратить элемент карты в объект. Выберите func_water_analog из списка.
  2. Чтобы управлять объектом воды, необходимо указать его имя. Введите название для воды в поле Name (Имя).
  3. Выберите направление перемещения поверхности воды в поле Move Direction (Направление). В большинстве случаев достаточно выбрать Up (Вверх) или Down (Вниз) из выпадающего списка.
  4. Введите скорость перемещения поверхности воды. 55 - наглядное значение, но естественно указывается необходимая.
  5. Ключ-параметр Move Distance (Расстояние) определяет, на какое расстояние будет перемещаться поверхность воды. Если ввести высоту исходного объёма воды, она полностью поднимется над начальным положением (нижняя грань элемента будет находиться там, где изначально была верхняя грань).
  6. Звуки, которые будут воспроизводиться в начале или при прекращении движения, выбираются с помощью ключ-параметров Sounds played... (Звук ...).

Изменение уровня воды

Объект func_water_analog можно перемещать с помощью двух входов: Open и Close. Дополнительную информацию смотрите в разделе Входы и выходы(en).

Карты окружения и перемещаемый уровень воды

Так как вода с перемещающимся уровнем не может использовать оттенение Water, динамические отражения недоступны, поэтому вместо них необходимо использовать предварительно рассчитываемую карту окружения из env_cubemap(en).

Чтобы применить env_cubemap к поверхностям воды:

  1. Добавьте объкт env_cubemap(en) использовав инструмент Объект(en).
  2. Разместите env_cubemap(en) над поверхности воды, около центра.
  3. Дважды кликните на env_cubemap(en) в 3D виде, чтобы открыть окно Object Properties (Свойства объекта).
  4. Кликните на ключ-параметр Brush faces (Грани элементов) в окне Object Properties (Свойства объекта).
  5. Нажмите кнопку Pick... (Взять). Курсор мыши смениться на иконку пипетки.
  6. Кликните на верхнюю грань воды, чтобы выделить её. Связанные с объектом env_cubemap(en) грани будут подсвечиваться красным цветом.
  7. Закройте окно Object properties (Свойства объекта).

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

  1. Скомпилируйте и запустите вашу карту. Когда карта загрузилась, откройте терминал разработчика и введите buildcubemaps. Игра рассчитает карту окружения для каждого объекта env_cubemap и сохранит информацию в BSP-файл.