Вступление
Прежде всего, хочется отметить, что предлагаемый способ создания воды
ни в коем случае не претендует на универсальность. При его
использовании есть достаточно много ограничений, определяемых, в
основном, используемыми материалами. В конце изложения мы остановимся
на некоторых из них. Также хочется отметить, что некоторые нюансы
создания материалов в данной сцене были, при написании урока, опущены в
связи большим объемом получившегося материала.
1. Окружение
Так как в данном уроке мы будем рассматривать только создание воды, то
будем считать, что все остальное (небо, облака, камни и пр.) мы уже
сделали. Создание некоторого окружения (хотя бы частично) именно до
начала работы над водной поверхностью существенно облегчит задачу, так
как при работе над материалом воды мы должны видеть отражение в ней
чего-либо, причем (желательно) максимально реалистичного. При желании
можно даже использовать фотографию, помещенную в качестве фона
(горизонт фона и нашей сцены должны, конечно, совпадать), с последующей
заменой ее на что-то, сделанное собственными руками.
2. Вода у берега
Честно говоря, это оказалось самым сложным в работе. Сначала
определимся с материалом отражения. Мы хотим сделать воду, набегающую
на песок, на ней много маленьких волн, геометрическое задание которых
(с помощью сетки) приведет к очень большому количеству полигонов в
сцене. Последующее использование Raytrace в качестве отражения
повергнет в глубочайшую задумчивость (переходящую в летаргический сон)
самый современный процессор, поэтому от такого способа мы вынуждены
отказаться, хотя он и является наиболее универсальным. Мы же изберем
другой путь - представим воду в сцене как QuadPatch, а в качестве
материала отражения выберем Flat Mirror. Почему именно этот материал?
Благодаря его двум особенностям: возможности искажать отражение в
зависимости от Bump и с помощью Blur. Но, в тоже время, это нас очень
ограничивает - мы не сможем изменить геометрию воды, она останется
плоской, к тому же искажения отражений при использовании Bump не совсем
точны. Что ж, попробуем справиться с этим, создав для начала правильные
текстуры прозрачности и bump.
Текстуры
Для создания текстур нам не понадобиться каких-либо художественных
способностей, а только владение основами Photoshop и немного терпения.
Все, что будет нарисовано, получено опытным путем в результате проб и
ошибок, поэтому, наверняка, можно создать и более "правильные" с точки
зрения реалистичности текстуры.
Откроем Photoshop и создадим новое изображение где-нибудь 2000х1300.
Закрасим его белым и на отдельном слое нарисуем линию воды у берега.
Закрасим часть, соответствующую берегу, черным. Добавим несколько серых
пятен у берега для создания "отмелей". Это будет текстурой прозрачности.
В этом же проекте создадим bump карту. Для этого на новом слое проведем
мягкой кистью черную линию, повторяющую береговую, но выше, там, где у
нас уже будет вода. Это будем граница песка и воды. Сделаем белый noise
на этой линии, который будет задавать проступающий песок или неровности
воды на самой границе.
Теперь нарисуем волны. Каждая волна представляет из себя чуть
искривленную линию (у нас - серую), имеющую несколько неравномерную
толщину и прозрачность и плавно исчезающую к краям. Как ни странно, но
добиться нужной линии (волны) достаточно сложно.
Автор нарисовал огромное количество разнообразного вида червяков,
прежде чем добился, наконец, приемлемого результата. Создав несколько
различных волн, сдублируем их, получив:
Но волны идут не только параллельно берегу. Поэтому скопируем слой
волн, повернем его на 90 градусов, увеличим примерно в 2.5 раза и
сделаем его более прозрачным. Теперь опять сделаем тоже самое, но
увеличим уже гораздо сильнее и повернем под углом градусов 30 к линии
берега.
При этом получим следующее:
Назовем это Bump_map, и, в очередной раз, убедившись, что Айвазовского
из нас не получится, закрываем Photoshop и переходим в МAX.
Материал воды
И так, вода у берега будет у нас сделана из QuadPatch. Берег тоже будет
QuadPatch, но совсем чуть-чуть ниже и абсолютно черный. И то, и другое
наклоняем чуть-чуть в сторону моря.
Теперь начинается самое сложное. Создаем материал воды.
Начнем с прозрачности. Понятно, что мы ее уже нарисовали, но не все так
просто. Во-первых, прозрачность воды зависит от угла, под которым мы на
нее смотрим. Чем ближе к нам вода (начиная с некоторого угла или
расстояния), тем она прозрачней. Во-вторых (здесь я немного утрирую),
чем дальше от нас линия берега, тем она четче, а чем ближе - тем более
размыта. Осознав весь трагизм создавшейся ситуации с прозрачностью (а
ведь это далеко не самое сложное в нашем материале воды), приступим.
Создадим карту прозрачности Bitmap. В качестве изображения для нее
возьмем уже нарисованную нами прозрачность.
В зависимости от пропорций, которые имеет QuadPatch воды (полоска воды
у берега длинная), сделаем соответствующий tiling (у меня он равен 6)
по U-координате.
Зададим значение Blur = 10 (размытие линии берега вдали).
Теперь создадим Mix, взяв в качестве одной карты только что
получившуюся, в качестве второй - такую же, но с Blur = 70 (размытие
линии берега вблизи), а в качестве Mix Amount - карту Falloff.
Этим мы задали изменение размытия линии берега от расстояния.
Теперь полученный Mix мы берем в качестве map для карты Mask
В качестве маски берем опять карту Falloff, но с немного другими параметрами.
Таким образом, чем вода к нам ближе (начиная с некоторого расстояния), тем она прозрачней.
Теперь - Bump. Здесь все достаточно просто. В качестве Bump берем
нарисованные нами в Photoshop многочисленные кривые полоски по маске
noise. Tiling соответственно тоже = 6. Маска по noise делает наши волны
немного "неправильными". Bump Amount = 700.
Теперь создаем карту отражений. Как уже говорилось выше, в основе ее будет Flat Mirror.
Но чем выше волна (или близость кромки берега), тем меньше (слабее)
отражение. Поэтому опять делаем Mix. В качестве map1 берем Noise (как
бы рябь в местах большой волны и у берега), в качестве map2 - наш Flat
Mirror, в качестве Mix Amount - нарисованный нами Bump.
Так как сила отражения воды противоположна ее прозрачности, то берем
полученный нами материал по маске ранее сделанной нами прозрачности.
В принципе, то же самое надо сделать и с Specular Level - там, где вода
прозрачней, блик волны на ней слабее, но это не имеет большого
значения, потому что солнца как такового у нас нет.
Если кто-либо, кроме меня, не заснув на полпути, все же выполнил все
описанное выше (а в этом я очень сомневаюсь J ), то он получил бы
примерно следующее.
Поставим SuperSampling получше, нажмем Render и, в зависимости от
мощности нашего компьютера, пойдем пить кофе, смотреть телевизор, или
приляжем на часок поспать.
Вернувшись к компьютеру, получим:
3. Волны
Здесь все гораздо проще. Волны не могут быть плоскими, а,
следовательно, Flat Mirror мы применить не можем. Значит Raytrace. Но
геометрия волн может быть не очень сложной, к тому же они все-таки
далеко. Для создания одной волны возьмем Box с достаточным для
последующего Edit Mesh количеством точек. С помощью Edit Mesh зададим
основные выпуклости и впадины волны, а потом при помощи Displace
сделаем небольшие неровности. В качестве карты для Displace возьмем
опять Mix из двух noise_ов, различающихся размерами зерна. Если длины
волны не хватает, и мы видим ее край, то сдублируем ее и положим
"сбоку" еще одну такую же.
Материал волны гораздо прозаичнее, чем у воды. В качестве отражения - Raytrace(с глубиной трассировки = 1), Bump - dent
Считаем то, что у нас получается.
Таким же образом сделаем несколько "рядов" волн, при этом каждый
последующий ряд, делая больше предыдущего. Будем делать это до тех пор,
пока мы не дойдем до самого "горизонта".
В качестве заключительного штриха добавим две полоски чистой воды вдали
у берега. Сделаем это при помощи тех же QuadPatch. Материалом для них
будет сильно упрощенный материал воды без bump и прозрачности.
Ну и, наконец, для тех, кто дочитал до конца - финальный просчет (уже с облаками).
4. Недостатки метода
1. Невозможность задания "неплоской" прибрежной воды. Все волны, неровности ее задаются при помощи Bump.
2. Не совсем корректное отражение Flat Mirror. Например, в данной сцене
нельзя поставить камень близко к точке камеры - отражение его в воде
будет неправильным, так как угол между направлением камеры и
поверхностью воды будет достаточно большой.
3. Сложность анимации полученной воды.
Материал предоставлен:
Андрей Иванов aka KleSk
Урок взят с 3dmir.ru