Создание более сложных естественных материалов Создание материала поверхности океана В данном рецепте мы создадим материал поверхности океана, имитирующий красивые волны или рябь, а также пену от волн на поверхности. Подобное можно часто наблюдать на отмелях, где взаимодействие волн с камнями, покрытыми планктоном, производит крохотные воздушные пузырьки, поднимающиеся на поверхность вблизи береговой линии. Это добавит приятный контраст материалу и придаст имитации полупрозрачность. Подготовка Вам понадобится large-scale-water-05.blend, сохранённый в конце последнего рецепта. Можете распаковать его из архива large-scale-ocean.zip, скачанного в начале этой главы. Как это делается Первым делом мы зададим нашему материалу поверхности волн цвет и отражающую способность. 1. Откройте файл large-scale-water-05.blend и выберите объект seacloseup на слое 2. 2. На панели Materials создайте новый материал и назовите его waves. 3. На вкладке Diffuse измените цвет на R 0.052, G 0.107, B 0.185. Убедитесь, что тип шейдера Lambert, а Intensity равно 0.800. 4. На вкладке Specular измените цвет на белый R, G, B 1.000. Выберите тип шейдинга CookTorr и присвойте Intensity значение 0.821, с Hardness равным 164. 5. На вкладке Mirror отметьте чекбокс Mirror и присвойте Reflectivity значение 0.100. Выставьте Fresnel в 0.400, а Color сделайте белым R, G, B 1.000. Задайте Blend значение 1.250. Присвойте Depth значение 4, а Amount — 1.000. 14 Создание более сложных естественных материалов Сохраните работу, увеличив имя файла до large-scale-water-06.blend. Быстрый рендер покажет неправдоподобно блестящие волны. Нужно будет при помощи пары текстур добавить к поверхности больше деталей. Мы начнём с добавления нескольких малых и крошечных волн. 6. Выбрав объект sea-closeup, перейдите на панель Textures, создайте новую текстуру типа Clouds и назовите её tiny-waves. 7. На вкладке Clouds выберите Grayscale с Noise/Soft, Basis Blender Original, и присвойте Size значение 1.46, а Depth значение 2. 8. На вкладке Mapping выставьте Coordinates в Generated, Projection Flat, а Size X, Y и Z в значение 50.00. 9. На вкладке Influence снимите выбор со всего, кроме Geometry/Normal, и задайте ему значение 0.100. Сохраните работу, увеличив имя файла до large-scale-water-07.blend, и выполните быстрый рендер. Вы должны увидеть, что на поверхности появились не- 15 Создание более сложных естественных материалов большие изломы. Мы можем добавить ещё ряби, чтобы сильнее раздробить поверхность. 10. На панели Texture выберите следующий свободный текстурный слот, создайте новую текстуру типа Clouds и назовите её small-waves. 11. Сделайте все настройки как в tiny-waves, кроме Size X, Y, Z на вкладке Mapping, значения которых должны равняться 25.00. Сохраните работу, ещё раз увеличив имя файла, которое должно равняться large-scale-water-08.blend. Если вы отрендерите картинку сейчас, то увидите, что поверхность ранее созданных волн покрылась дополнительной мелкой рябью. Всё это хорошо, но нам нужно, чтобы эти мелкие волны также изменялись с течением времени. В противном случае вода будет выглядеть полузамёрзшей. Вместо того, чтобы создавать дополнительную пустышку для анимации этих текстур, мы применим подход с непосредственной анимацией установок на панели текстуры. 12. Перейдите к кадру 1 на временной шкале Timeline, выберите объект seacloseup, перейдите на панель Texture и выберите текстуру tiny-waves. 13. На вкладке Mapping измените значение Offset Z на 0.75, щёлкните правой кнопкой мыши по настройке и выберите Insert Single Keyframe. 14. Перейдите к кадру 250 на временной шкале, после чего на вкладке Mapping измените значение Offset Z на 0.25, щёлкните правой кнопкой мыши по настройке и выберите Insert Single Keyframe. 15. Смените тип большого окна на Graph editor и поменяйте значения Key на Linear Extrapolation, чтобы получить прямую линию. 16 Создание более сложных естественных материалов То же самое нужно сделать с текстурой small-waves. Но для неё мы выберем другое направление наклона. 16. Повторите шаги с 12 по 15 для текстуры small-waves и измените значение Offset Z в кадре 1 на -0.75, и на -0.25 в кадре 250. Не забудьте сменить значения Key на Linear Extrapolation. Ещё раз сохраните работу, увеличив имя файла до large-scale-water09.blend. Пока не нужно делать анимированный рендер. Сперва мы добавим оставшиеся текстуры для получения поверхности воды. 17. Откройте файл large-scale-water-09.blend, выберите объект seacloseup и перейдите на панель Texture, где в следующем свободном текстурном слоте нажмите на клетчатую иконку Browse ID Data и загрузите в этот слот текстуру wave-bump. Её мы использовали для исходного смещения. 18. На вкладке Influence выберите Geometry/Warp и задайте ему значение 0.500. Все остальные методы влияния не должны быть выбраны. Однако в качестве типа смешивания (Blend) выберите Mix и отметьте RGB to Intensity, Negative и Stencil. 19. В следующем свободном текстурном слоте создайте новую текстуру типа Clouds и назовите её wave foam. 20. На вкладке Clouds выберите Grayscale и Hard, Basis Blender Original, значение Size сделайте равным 1.00, а Depth 6. 21. На вкладке Colors выберите Ramp и создайте новые ключевые точки, как описано далее. 22. Точка 0 на Position 0.000, со значениями RGB и Alpha, равными 1.000. 23. Точка 1 на Position 0.512, со значениями RGB и Alpha, равными 1.000. 24. Точка 2 на Position 0.712, со значениями R 0.000, G 0.570 и B 0.257, где значение Alpha равно 0.36. 25. Точка 3 на Position 1.000, со значениями RGB и Alpha, равными 0.000. 26. Настройте (Adjust) значения Brightness 1.900, Contrast 1.800 и Saturation 1.000. 17 Создание более сложных естественных материалов 27. На вкладке Influence отметьте Diffuse/Intensity 1.500 и Color 1.500. Также отметьте Shading/Emit 1.000 и Ray Mirror 1.000. Значение Specular/Intensity сделайте равным -2.000 и отметьте RGB to Intensity со значениями цвета RGB 1.000. В конце мы добавим дополнительную настройку анимированной текстуры, чтобы придать движение пене волн. 28. Перейдите к кадру 1 на временной шкале, на вкладке Mapping для этого текстурного слота щёлкните правой кнопкой мыши на Z Offset, которое должно равняться 0.00 и выберите Insert a Single Keyframe. 29. Перейдите к кадру 50, измените значение Z Offset на 0.10, щёлкните правой кнопкой мыши и выберите Insert a Single Keyframe. 30. Перейдите в Graph editor и сделайте Key Linear Extrapolation. Сохраните работу как large-scale-water-10.blend. Небольшой анимированный рендер данной сцены отобразит как движение волн и пены, так и небольшие 18 Создание более сложных естественных материалов изменения цвета. Однако на данный момент море простирается совсем недалеко от скал, где обрывается. Настоящий океан продолжается до самого горизонта. Мы можем добавить эту его особенность очень быстро без необходимости создавать новые материалы или удлинять рендер. 31. Перейдите на слой 4 и увидите ещё одну плоскость, называющуюся seadistance. Она увеличена до 100 единиц Blender. 32. Выберите её и назначьте ей материал waves, щёлкнув по иконке выбора материала на панели Materials, находящейся слева от имени материала. Выберите материал waves и он будет назначен этому объекту. Сохраните последний вариант работы, увеличив имя файла до large-scalewater-11.blend. Как это работает В материал можно добавить текстуру, управляющую смещением. Однако смещение это вы увидите только после рендера. Стек модификатора Displace позволяет в реальном времени видеть, как текстура искривляет меш. Управление её движением с помощью пустышек становится замечательным инструментом для экспериментов с таймингом и движением. Это особенно важно при создании сложных поверхностных структур, наподобие воды. Возможность видеть результаты без рендеринга может сберечь огромное количество времени. Однако это смещение обеспечивает только движение крупных волн. Для создания воды, похожей на океанскую, необходимо добавить мелкие детали, имитирующие порывы ветра над поверхностью. Мы использовали текстуры Cloud с довольно маленькими значениями глубины для имитации мелкой вогнутой ряби и просто анимировали настройки этих текстур. Вы можете вспомнить, что я говорил раньше насчёт масштабирования текстур, наложенных в текстурном пространстве объекта. В результате проявляются проблемы, когда мы накладываем тот же материал на гораздо большие объекты, такие как sea-distance. Однако, хотя маленькие и крошечные волны будут растянуты по этой поверхности, они будут так далеко, что мы не заметим неточностей. Мы использовали ту же текстуру смещения wave-bump, чтобы создать искривление для всех остальных текстур нашего материала. Поскольку она будет перемещаться с помощью пустышки, искривление будет динамически варьироваться. Это добавит дополнительные вариации на поверхности и, фактически, произведёт эффект поверхности под текстурой пены, которая следует за ней. Эта текстура также обладает высоким значением светимости (Emit), поскольку цвет пены такого типа, обычно, светлее цвета окружающей воды. Добавление такой светимости означает, что она также будет просвечивать сквозь тёмные участки воды, опять же создавая впечатление пены под поверхностью. Дополнительное преимущество в том, что когда эта текстура применяется к объекту sea-distance, значения светимости 19 Создание более сложных естественных материалов пены создают иллюзию отдалённого освещения, вроде глобального освещения без дополнительной нагрузки на рендер. Хотя этот рецепт был один из наиболее нагружающих рендер, вы можете заметить, что время рендера 50% HD-изображения не слишком долгое. Рендеринг Blender с трассировкой лучей уже допилен до состояния, когда его можно использовать для таких задач. Большая часть этих доработок была выполнена в последние несколько месяцев в ходе выполнения проекта Durian (Sintel) и разработки Blender 2.5. См. также Этот рецепт основан на одном из моих более ранних рецептов, который вышел несколько лет назад. Однако этот рецепт, как и следующий, использует новые техники для получения более реалистичного результата. Если вам стало интересно почитать про старый подход к созданию океана в Blender, можете скачать урок в формате PDF на сайте http://www.cogfilms.com/ 20 Создание более сложных естественных материалов Создание ряби вокруг объектов в воде На данном этапе поверхность океанской воды выглядит довольно реалистично. Однако скалы не создают ряби и встречных волн при взаимодействии с водой. Это было бы нормально для озера или пруда, где волны не так сильно разрушаются, но в океане там, где волны разбиваются о скалы, образуются клочья пены. Конечно, поскольку это не физически точная имитация, материалы скал и воды не знают друг о друге. Чтобы создать видимость такого взаимодействия, мы пойдём на хитрость: сделаем карту пересечения обоих поверхностей, с помощью которой поднимем воду, как если бы она расплескивалась о скалы, и добавим пену, которая будет искажаться так, будто волны поднимают и опускают её поверхность. Подготовка Этот рецепт логически следует из предыдущего. Следовательно, вам нужно открыть файл large-scale-water-11.blend. Если вы не выполняли предыдущий рецепт, то распакуйте этот blend-файл из архива, скачанного по инструкциям из начала главы. Как это делается Нам необходимо применить две текстуры: одну в качестве второго модификатора смещения, а другую в качестве текстуры пены в рамках предыдущего материала. Но сперва мы сделаем их доступными, временно создав текстуры внутри материала. 1. Откройте в Blender файл large-scale-water-11.blend, выберите объект sea-closeup и перейдите на панель Texture. 2. Выберите свободный текстурный слот, создайте новую текстуру типа Image or Movie и назовите её surface-tension. 3. На вкладке Image откройте (Open) изображение foam-mask-bump2.png, которое должно находиться в папке Textures там, куда вы распаковали файл large-scale-ocean-default.zip. Других настроек эта текстура не требует, она будет использоваться только в модификаторе смещения. 4. Перейдите на панель Modifier, добавьте модификатор Displacement и назовите его surf-ten. 5. Нажмите на клетчатый значок под Texture и выберите текстуру surfacetension. 6. Выберите Direction Normal и Texture Coordinates Object. Из выпадающего списка внизу выберите surfaceT-POS. Задайте Midlevel значение 0.100, а Strength значение 0.005. 21 Создание более сложных естественных материалов 7. Из Outliner выберите пустышку surfaceT-POS и переместите её на слой 5. Вы увидите, что выбранная пустышка находится на некотором расстоянии от скал и больше, чем обычная. 8. В 3D-виде нажмите клавишу N, чтобы вызвать панель Transform. Вы заметите, что Location зафиксировано в значениях X 0.155, Y 0.504 и Z 8.348. Параметр Scale также зафиксирован в значениях XYZ 3.400. Это наилучшие значения положения и масштаба, подобранные методом проб и ошибок так, чтобы изображение находилось точно под скалами. 9. Включите слои 1, 2, 3, 4 и 5. 10. Выберите объект sea-closeup и перейдите на вкладку Textures. 11. Теперь мы можем удалить текстуру surface-tension, так как она используется в модификаторе. Для этого выберите текстуру и нажмите на X рядом с названием текстуры. 12. Выберите текстуру wave foam и при помощи стрелок перемещения текстуры переместите последнюю текстуру ниже на один слот, чтобы между текстурами wave-bump и wave foam был промежуток. 13. В этом свободном слоте создайте новую текстуру типа Image or Movie и назовите её foam. 14. На вкладке Image откройте (Open) файл foam-mask-4.png, который должен находиться в папке текстур там, куда вы распаковали файл large-scaleocean-default.zip. 15. На вкладке Mapping выберите Coordinates Object и там из списка объектов выберите camera.002. Оставьте Projection в значении по умолчанию (Flat) но измените Offset Y на 0.05. Также измените Scale XYZ на 0.29. 16. На вкладке Influence выберите Diffuse/Intensity со значением 1.500 и Color со значением 1.500. Выберите Shading/Emit со значением 0.628 и Ray Mirror со значением 1.000. В качестве типа Blend выберите Add и RGB to Intensity с белым цветом (значения RGB равны 1.000). 17. Наконец, на вкладке Image Mapping измените тип Extension на Extend. Сохраните работу, увеличив имя файла до large-scale-water-12.blend. Теперь настало время отрендерить статический кадр для проверки готовой сцены! Как это работает В целом, мы просто использовали два изображения, чтобы представить вспененную область вокруг скал. Эти изображения были сделаны в Blender и модифицированы в Gimp. В главе 8 мы рассмотрим, как можно провернуть такое же, пользуясь исключительно Blender*. * К сожалению, здесь автор вводит читателей в заблуждение. В восьмой главе такого нет, там рассматривается постобработка кадров, полученных из рецептов этой главы, а не создание текстур для пены средствами Blender. 22 Создание более сложных естественных материалов Наложение изображений стандартными способами (плоское, кубическое, сферическое и т.д.) создаёт в данном случае некоторые проблемы. В первую очередь, мы можем увидеть изображение, спроектированное на поверхность, только после рендера. Не существует иного способа подобрать положение и масштаб, кроме как рендерить картинку всякий раз после изменения Loc X, Y, Z или Size. Изображение было получено с камеры, подвешенной сверху, и рендерящей океан сплошным чёрным цветом, а скалы — белым. После этого картинку размыли в графическом редакторе, чтобы получить размытое пятно пены на чёрном фоне. Методом проб и ошибок был подобран нужный масштаб для обоих изображений. С положением было проще: мы просто привязали текстуру пены к камере camera.002, которой делался снимок. Пустышка surfaceT-POS находится в том же месте, что и камера, но для правильной работы текстуры смещения нам потребовалось изменить масштаб пустышки. Казалось бы логичным использовать для привязки объект камеры, но масштабировать камеру — не очень хорошая идея (хотя Blender и позволяет такие фокусы). Вот почему мы воспользовались пустышкой, расположенной там же, где и камера, но отмасштабированной для получения нужных пропорций накладываемого изображения*. Ещё один плюс использования текстуры пены в этом положении в текстурных слотах в том, что она будет искривляться движением текстуры wave-bump. Это придаст пене вокруг скал незначительное, но реалистичное движение, которое вы можете увидеть вокруг скал реального моря. Этот рецепт лучше всего выглядит отрендеренным в анимацию. Я советую выставить размер рендера в 50% HDTV 1080 p. Отрендерите последовательность PNG* К сожалению, у меня не вышло правильно подобрать настройки. Буду благодарен, если кто-то поделится своим вариантом. 23 Создание более сложных естественных материалов файлов в особый подкаталог, такой как animations. На моей системе 250 кадров рендерились две ночи. См. также Глава 8 • «Постобработка отрендеренных изображений в Blender (анимация океана)» 24