як додати води в єдності


Відповідь 1:

Зробити воду досить складно, якщо ви хочете зробити це з нуля. Я поясню, як, але спочатку дозвольте мені запропонувати або використовувати збірні води, які входять до стандартних активів Unity, або завантажити об’єкт із магазину Asset. Добре, хороші речі. Попереджаємо, буде багато технічного жаргону.

Щоб приготувати воду, вам потрібно всього 4 речі: сітка, шейдер, звичайна карта та сценарій.

(1) Сітка Сітка - це сама вода, але без шейдера та сценарію вона не буде схожа на воду, а буде виглядати як аркуш. Зробити це досить просто, безумовно, найпростіший із чотирьох. Ви можете використовувати просту програму моделювання, щоб зробити сітку відповідно до обраної вами форми.

(2) (3) Шейдер і нормальна карта У шейдері відбувається більша частина магії. У шейдері потрібно визначити кілька властивостей, щоб сітка мала вигляд води.

Звичайні карти відіграють величезну роль у шейдерах, особливо в шейдерах. Звичайна карта водяного шейдера визначає форму хвиль.

Приклад карти нормальної води. Люб'язно надано FilterForge.

У багатьох випадках для об’єктів, що не є водою, ви можете уникнути однієї звичайної карти. Воді потрібно два. Дві нормальні карти рухаються (за допомогою сценарію) в різних напрямках. (Є три канонічні схеми спрямування). Дві карти також мають різні масштаби і можуть мати однакову або різну швидкість. Хвильовий масштаб визначає масштаб кожної хвилі на нормальній карті. Шкала хвилі та швидкість хвилі встановлюються в шейдері.

Ви також повинні змусити воду реагувати на світло, про що ви дбаєте в шейдері. Справжня вода може або відбивати, або заломлювати світло, тому, щоб імітувати це, вам доведеться розрахувати показники відбиття та заломлення для того, де світло потрапляє відносно нормалей поверхні. Це іноді називають умовами Френеля (вимовляється як «френнель»).

Приклад того, як світло відбивається від нормальної карти (що, для цього посту, є реалізацією зіставлення). Курсова робота О.Г.Л.Дева.

Це ускладнюється, не хвилюйтеся. Коли світло проходить через воду і, таким чином, заломлюється, вода глибше вниз стає тонованою. Тож ви можете врахувати це для досягнення найкращих результатів.

Крім того, залежно від того, звідки ви переглядаєте, показники відбиття та заломлення можуть змінюватися. Хороший шейдер може мати функції для обчислення матричних перетворень світу в простір камери для кутів огляду френелівських умов

(4) Сценарій Сценарій - це ключ, який запускає машину. Він переносить шейдер в переносному значенні і буквально приводить в рух звичайні карти. У сценарії ви можете змінювати деякі значення шейдера на льоту, якщо це необхідно.

Сценарій також обробляє багато матеріалів з камери. З одного боку, це повинно мати справу з випадком, коли камера потрапляє всередину води. Але що більш важливо, він може викликати функції перетворення матриці для кутів огляду.

Приклад готового продукту. Надано блогом Unity.


Вам слід імпортувати стандартні об’єкти водних збірних конструкцій та переглянути код шейдера та код C #.

PS Якщо ви хочете отримати справді технічні засоби, вам слід врахувати плавучість.