Water in Unity
Unity includes several water Prefabs (including the necessary Shaders, scripts and art Assets) within the Standard Assets packages. Separate daylight and nighttime water Prefabs are provided.
Note that the water reflections described in this document do not work in VR.
Setting up water
Place one of the existing water Prefabs into your Scene. Make sure you have the Standard Assets installed:
- В Unity есть Daylight Simple Water и Nighttime Simple Water в Standard Assets->Water.
- В Unity Pro есть Daylight Water и Nighttime Water в Pro Standard Assets->Water (но также требуются некоторые ассеты из Standard Assets->Water). Режим воды (Simple (простая), Reflective (отражающая), Refractive (преломляющая)) можно изменить в инспекторе.
Для воды префаб использует меш в форме овала. Если вы желаете использовать другой меш, то проще всего просто поменять его в Mesh Filter у объекта воды:
Создание воды с нуля (для продвинутых пользователей)
Простая вода в Unity требует добавления скрипта на плоский меш и использования шейдера воды:
- Подберите меш для воды. Это должен быть горизонтально ориентированный плоский меш. UV координаты не требуются. GameObject с водой должен использовать слой (layer) Water, который вы можете установить в инспекторе.
- Добавьте на объект скрипт WaterSimple (из Standard Assets/Water/Sources).
- Используйте шейдер FX/Water (simple) в материале, или подстройте один из предоставленных материалов воды (Daylight Simple Water или Nighttime Simple Water).
Отражающая/преломляющая вода в Unity Pro требует аналогичных шагов для настройки с нуля:
- Подберите меш для воды. Это должен быть горизонтально ориентированный плоский меш. UV координаты не требуются. GameObject с водой должен использовать слой (layer) Water, который вы можете установить в инспекторе.
- Добавьте на объект скрипт Water (из Pro Standard Assets/Water/Sources).
- Используйте шейдер FX/Water в материале, или подстройте один из предоставленных материалов воды (Daylight Water или Nighttime Water).
Свойства в материалах воды
Эти свойства используются в шейдере отражающей и преломляющей воды. Большинство из них также используется и в шейдере простой воды.
Свойство: | Функция: |
---|---|
Wave scale | Изменение масштаба карты нормалей волн. Чем меньше значение, тем больше будут волны у воды. |
Reflection/refraction distort | Как сильно отражение/преломление будет искажаться картой нормалей волн. |
Refraction color | Дополнительный оттенок отражения. |
Environment reflection/refraction | Render текстуры для отражения и преломления в реальном времени. |
Normalmap | Определяет форму волн. Итоговые волны производятся путём совмещения этих двух карт нормалей, каждая из которых смещается в разном направлении, с разным масштабом и скоростью. Вторая карта нормалей в два раза меньше первой. |
Wave speed | Скорость смещения для первой (1е и 2е числа) и второй карты нормалей (3е и 4е числа). |
Fresnel | Текстура с альфа-каналом, управляющим эффектом Fresnel — количество видимого отражения против количества видимого преломления, в зависимости от угла зрения. |
Остальные свойства не используются отражающим и преломляющим шейдером, но должны быть настроены в случае, если графический ускоритель пользователя не поддерживает его и вынужден откатиться на более простой шейдер.
Свойство: | Функция: |
---|---|
Reflective color/cube and fresnel | Текстура, которая определяет цвет воды (RGB) и эффект Fresnel (A), в зависимости от угла зрения. |
Horizon color | Цвет воды на горизонте (используется только в шейдере простой воды). |
Fallback texture | Текстура для отображения воды на очень старых видео картах, если не может работать ни один из более красивых шейдеров. |
Как сделать воду в Unity3D?
проблема такая, я делаю 3Д игру и мне необходимо сделать физику воды, ну чтоб персонаж плавал на данный момент я пользуюсь методом OnTriggerEnter и OnTriggerExit в середине метода OnTriggerEnter находится if (other.tag == «Water»)
isSwimming = true;
rb.useGravity = false;
>
а в OnTriggerExit находится if (other.tag == «Water»)
isSwimming = false;
rb.useGravity = true;
>
потом я проверяю в Update (): if (Input.GetKey (KeyCode.Space) && isSwimming)
transform.Translate (0, SwimmingForse * Time.deltaTime 0)
>
и появляются следующие баги которые надо пофиксить, когда я всплыл меня перемещает обратно в воду по пояс при этом скорость сохраняется и меня тянет на дно если всплить несколько раз то скорость суммируется и даже если я держу пробел я все равно падаю в низ
а если снизу какая-то косая поверхность я лечу в сторону. Я понял что использовать отключение гравитации плохая идея подскажите как лучше сделать
- Вопрос задан более трёх лет назад
- 1181 просмотр
Как мне работать с водой?
Важно: содержимое этой страницы применимо только к настольному режиму редактора.
В Unity включены некоторые префабы с водой (включая необходимые шейдеры, скрипты и ассеты с графикой) в пакетах Standard Assets и Pro Standard Assets. Unity содержит обычную простую воду, в то время как Unity Pro содержит воду с отражениями в реальном времени и преломлениями. В обоих случаях вода поставляется в качестве отдельных дневных и ночных префабов.
Настройка воды
В большинстве случаев вам достаточно просто разместить один из существующих префабов в вашей сцене (убедитесь, что у вас установлен набор стандартных ассетов):
- В Unity есть Daylight Simple Water и Nighttime Simple Water в Standard Assets->Water .
- В Unity Pro есть Daylight Water и Nighttime Water в Pro Standard Assets->Water (но также требуются некоторые ассеты из Standard Assets->Water ). Режим воды (Simple (простая), Reflective (отражающая), Refractive (преломляющая)) можно изменить в инспекторе.
Для воды префаб использует меш в форме овала. Если вы желаете использовать другой меш, то проще всего просто поменять его в Mesh Filter у объекта воды:
Создание воды с нуля (для продвинутых пользователей)
Простая вода в Unity требует добавления скрипта на плоский меш и использования шейдера воды:
- Подберите меш для воды. Это должен быть горизонтально ориентированный плоский меш. UV координаты не требуются. GameObject с водой должен использовать слой ( layer ) Water, который вы можете установить в инспекторе .
- Добавьте на объект скрипт WaterSimple (из Standard Assets/Water/Sources ).
- Используйте шейдер FX/Water (simple) в материале, или подстройте один из предоставленных материалов воды ( Daylight Simple Water или Nighttime Simple Water ).
Отражающая/преломляющая вода в Unity Pro требует аналогичных шагов для настройки с нуля:
- Подберите меш для воды. Это должен быть горизонтально ориентированный плоский меш. UV координаты не требуются. GameObject с водой должен использовать слой ( layer ) Water, который вы можете установить в инспекторе .
- Добавьте на объект скрипт Water (из Pro Standard Assets/Water/Sources ).
- Используйте шейдер FX/Water в материале, или подстройте один из предоставленных материалов воды ( Daylight Water или Nighttime Water ).
Свойства в материалах воды
Эти свойства используются в шейдере отражающей и преломляющей воды. Большинство из них также используется и в шейдере простой воды.
Свойство: | Функция: |
---|---|
Wave scale | Изменение масштаба карты нормалей волн. Чем меньше значение, тем больше будут волны у воды. |
Reflection/refraction distort | Как сильно отражение/преломление будет искажаться картой нормалей волн. |
Refraction color | Дополнительный оттенок отражения. |
Environment reflection/refraction | Render текстуры для отражения и преломления в реальном времени. |
Normalmap | Определяет форму волн. Итоговые волны производятся путём совмещения этих двух карт нормалей, каждая из которых смещается в разном направлении, с разным масштабом и скоростью. Вторая карта нормалей в два раза меньше первой. |
Wave speed | Скорость смещения для первой (1е и 2е числа) и второй карты нормалей (3е и 4е числа). |
Fresnel | Текстура с альфа-каналом, управляющим эффектом Fresnel — количество видимого отражения против количества видимого преломления, в зависимости от угла зрения. |
Остальные свойства не используются отражающим и преломляющим шейдером, но должны быть настроены в случае, если графический ускоритель пользователя не поддерживает его и вынужден откатиться на более простой шейдер.
Свойство: | Функция: |
---|---|
Reflective color/cube and fresnel | Текстура, которая определяет цвет воды (RGB) и эффект Fresnel (A), в зависимости от угла зрения. |
Horizon color | Цвет воды на горизонте (используется только в шейдере простой воды). |
Fallback texture | Текстура для отображения воды на очень старых видео картах, если не может работать ни один из более красивых шейдеров. |
Аппаратная поддержка
- Отражающая + преломляющая вода работает на видео картах с поддержкой pixel shader 2.0 (GeForce FX и новее, Radeon 9500 и новее, Intel 9xx). На более старых адаптерах используется отражающая вода.
- Отражающая вода работает на видео картах с поддержкой pixel shader 1.4 (GeForce FX и новее, Radeon 8500 и новее, Intel 9xx). На более старых видео картах используется простая вода.
- Простая вода работает практически везде, с различными уровнями детализации, в зависимости от аппаратных возможностей.
Фишки unity3d или unity3d по-русски
Данный пост является переводом статьи, взятой из раздела Demos, Tutorials and Tips официального блога unity3d.
Этот пост расскажет вам как создать воду с помощью специально подготовленного меша, откорректировать настройки и сделать так, чтоб вода выглядела лучше. Чтобы быть в курсе новинок, в данном посте будет рассказано о новых компонентах воды в Unity3d Pro, а затем будут рассмотрены некоторые моменты, которые будут интересны всем.
Какие элементы составляют воду?
Водород и кислород.
А в Unity3d?
- скрипт 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 и затем добиться нужного эффекта.
- Если у вас выпуклый меш (такой как водопад/бортик бассейна), добавьте деталей к кривой, чтоб помочь воде «изогнуться».
В следующий раз рассмотрим пену на воде и угасание глубины.
Примечание переводчика: если есть какие-то неточности перевода, смело обращайтесь в комментариях, исправлю.