Добавление воды

From Valve Developer Community
Jump to: navigation, search
English 简体中文

Вода - очень сложный шейдер в движке Source: она анимированная, отражающая, мутная, искажающая отражение и использует бамп, поэтому нужно знать определенные правила и ограничения по размещению воды, и какую воду использовать в разных случаях.


"Дорогая" вода

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

Примечание:"Дорогая" вода будет только корректного отображения, если эти требования будут выполнены.

"Легкая" Вода

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

Требования

Чтобы вода правильно работала, имеется несколько правил по её размещению и использованию на карте.

  • Может быть только один уровень высоты воды в PVS, если вода "дорогая".
  • "Дорогая" и "Дешевая" вода не может использоваться одновременно в одном PVS.
  • Поверхность воды никогда не должна склоняться по оси Z, она всегда должна быть параллельна линии горизонта на карте.
  • Вода создаётся с помощью применения водного материала к верхним поверхностям браша, когда другие стороны должны быть закрашены материалом tools\toolsnodraw
  • Энтити water_lod_control контролирует дистанцию, на которой дорогая вода переходит в дешевую.
  • Энтити env_cubemap:ru должна присутствовать над водной поверхностью, чтобы правильно отображать на аппаратных средствах sub-DX9
  • Areaportals никогда не могут пересекать поверхность воды.
  • Вода не запечатывает карту.
  • Только верх браша отображается правильно, если смотреть. Бока и дно не отображаются.

Вода не работает с брашевыми энтити и не должна к ним привязана. Водные браши, привязанные к любым брашевым энтити, не будут отображаться правильно.

Изготовление

Для добавления толщи воды на ваш уровень, следуйте этим шагам:

  1. Создайте браш размера водной массы используя Block Tool.
  2. Откройте Texture Browser нажав на кнопку Browse на Texture Bar.
  3. Дважды кликните tools\toolsnodraw материал в Texture Browser.
  4. Теперь нажмите на кнопку Apply Current Texture чтобы применить текстуру nodraw на браш.
  5. Выберете Texture Application Tool, который откроет режим Face Edit.
  6. Кликните левой кнопкой мыши на верхний фейс водного браша в 3D виде, чтобы выделить его.
  7. Нажмите Browse, чтобы снова отобразить Texture Browser.
  8. Введите water в поле filter. Это отобразит вам все материалы с ключевым словом water в названии.
  9. Выберите водный материал для применения, дважды щелкнув по нему. Один из материалов можете попробовать nature/water_canals_water2.
  10. Нажмите кнопку Apply на панели Face Edit
  11. Браш должен иметь правильно созданную воду. Скомпилируйте и запустите вашу карту (с включенными VVIS и VRAD) для тестирования.

Для правильного отображения водных поверностей, браш должна иметь прямоугольною форму, и необходимо карте иметь скайбокс. Водныя браш может пересекаться с другими брашами. Если вода не правильно отображается (невидимая), то в карте находится утечка.

Конкретные игровые предупреждения

  • <Left 4 Dead 2> L4D2 карты также требуют env_fog_controller.
  • <Alien Swarm> Все водные браши в Alien Swarm должны быть присоединены func_brush, названному "structure_seal".
  • [Portal] Чтобы создать ядовитую воду в Portal, вы должны использовать текстуру nature/hazard_liquid.

Cubemaps и вода

Cubemaps важны для использования с водными поверхностями. На видеокартах, которые работают на DX меньше чем 9, невозможно отображать в реальном времени отражения водной поверхности. Для этих карт создаётся энтити env_cubemap, которая предварительно просчитывает карту отражений.

Добавляем env_cubemap к водным поверхностям:

  1. Добавьте энтити env_cubemap используя Entity Tool.
  2. Разместите env_cubemap выше поверхности воды, около центра.
  3. Дважды кликните на env_cubemap в 3D виде,чтобы отобразить Object Properties.
  4. Кликните на ключ Brush faces в Object Properties.
  5. Кликните кнопку Pick.... Курсор мыши смениться на иконку пипетки.
  6. Кликните на верхний фейс воды, чтобы выделить его с пипеткой. Он выделиться красным, чтобы показать ассоциацию фейса с энтити env_cubemap.
  7. Закройте Object properties
  8. Скомпилируйте и запустите вашу карту. Когда карта загрузилась, откройте консоль разработчика и введите buildcubemaps. Движок просчитает карту окружения для каждой энтити env_cubemap , и сохранит информацию в BSP файл.

См. также