20 нояб. 2011 г.

Создание воды в Unity3d


Данный пост является переводом статьи, взятой из раздела Demos, Tutorials and Tips официального блога unity3d.

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


Какие элементы составляют воду?

Водород и кислород.

А в Unity3d?

Существует множество различных типов воды, которые вы можете создать из префабов. Я остановлюсь на ассетах Water4ExampleSimple, которые, по существу являясь парой 3D мешей, представляют поверхность воды вместе с:
  • скрипт WaterTile (WaterTile script),
  • шейдер воды (Water shader).
 Пустой объект, указывающий на положение в пространстве со следующими компонентами:
  • скрипт воды (water script), который отображает цвета, нормальные текстуры, и основные параметры эффекта;
  • скрипт отражения (reflection script);
  • опциональный скрипт освещения для зекрального эффекта (lighting script);
  • опциональный скрипт смещения (displacement script).

Как я могу сделать воду?

Самый простой способ - перетащить префаб на сцену и настроить меш:
  • Assets > Import Package > Water (только pro);
  • в окне проекта откройте папку  Standard Assets > Water (только pro);
  • откройте папку Water4;
  • перетащите префаб Water4Example (Simple) на сцену;
  • разместите примерно там, где требуется;
  • выберите один из tile-мешей, перейдите к компоненту меша в инспекторе (жмите на круглую иконку справа) и выберите ваш меш (должен быть у вас в проекте);
  • поверните родительский узел Water4ExampleSimple на 90 градусов, если ваш меш расположен не под тем углом (это может произойти, если вы экспортируете его из 3D-приложения с системой координат, отличной от системы unity3d);
  • отпозиционируйте ваш меш, двигая родительский узел;
  • удалите второй tile-меш.

Настройки

Теперь у вас есть меш воды и вы можете поиграть с настройками. Выберите узел Water4ExampleSimple и просмотрите параметры в инспекторе.

Основа воды

Плоское отражение

Этот скрипт для включения/отключения плоского отражения в реальном времени. Отражения вычисляются относительно высоты родительского меша к которому и привязан данный скрипт. Поэтому локальный Y transform дочерних мешей должен быть 0. Здесь вы также можете включить или отключить отражения неба (skybox).

Зеркальное освещение

Вы можете отрегулировать силу отражения и перетащить любой transform, чтобы обозначить источник зеркального освещения. Это может быть как ваш transform направленного освещения, так и любой другой объект (совсем не требуется, чтоб он был источником света).

Смещение Герстнера

Здесь вы можете отрегулировать настройки для генерации волны по алгоритму Герстнера.

Советы по созданию воды

  • Сходите и взгляните на настоящую воду - очень полезно изучать что-то визуально, прежде чем это сделать в unity3d. Снимите видео если есть такая возможность.
  • Вода поглащает красный свет из спектра, отражая больше зеленых и синих лучей в добавок к небу, это заставляет думать, что вода синяя, поэтому:
    • вы не можете сделать плоскость синей (да и не следует этого делать), но если вы используете синие и зеленые цвета в плоскостях под водой, таких как бассейн, к примеру, вы можете усилить иллюзию;
    • (думаю именно поэтому изготовители бассейнов используют зеленую/синюю/бирюзовую плитку);
    • чем темнее синий, тем глубже кажется вода - вы можете использовать более темный цвет и подкрашивать преломление темнее в глубине. 

Использование синих/зеленых цветов против использования серых/розовых
  • Изменяйте настройки эффектов, это может помочь побороть сомнение:
    • скорость сдвига нормалей (Scrolling speed of normals);
    • отражение (Reflection);
    • преломление (Refraction);
    • сила Фреснеля и нормальная сила (Fresnel and Normal strength);
    • смещение (Displacement).
  • Одним из полезных советов является выключить практически все, например, выкрутить все слайдеры в 0 и затем добиться нужного эффекта.
    • Если у вас выпуклый меш (такой как водопад/бортик бассейна), добавьте деталей к кривой, чтоб помочь воде "изогнуться".

В следующий раз  рассмотрим пену на воде и угасание глубины.

Примечание переводчика: если есть какие-то неточности перевода, смело обращайтесь в комментариях, исправлю.

6 комментариев:

  1. спасибо))) буду ждать продолжения)))

    ОтветитьУдалить
  2. Если не нырять, всё конечно хорошо, но когда глядишь из под воды то с отражениями творится нечто непотребное. Стандартная вода юнити никуда не годится, всё сделано, извиняюсь, через жопу.

    ОтветитьУдалить
  3. Подскажите автора (оригинал)

    ОтветитьУдалить
    Ответы
    1. Оригинал лежит вот по этой ссылке: http://blogs.unity3d.com/2011/10/07/top-tips-for-water-in-unity/
      Автор: Olly Nicholson

      Удалить