Создание реалистичной травы в Blender

Приветствую любителей компьютерной графики, OpenSource-разработок и Blender в частности. В этой статье я расскажу о том, как, используя Блендер версии 2.49 (в принципе, этот метод без особых поправок применим и к 2.50 alpha-версии — отличия будут заключаться в месторасположении некоторых инструментов), создать красивую реалистичную траву. Данный урок не очень сложен, но желательно уверенно владеть интерфейсом Блендера — информацию об этом можно почерпнуть из моих прошлых статей (ищите в архиве на сайте КГ), в виде комиксов на сайте blender-empire.ru (очень наглядные и доступные иллюстрации), а также в недавно переведенном на русский язык учебнике «Blender Basics учебное пособие», онлайн-версия которого находится по адресу сайт — имеется еще и PDF-вариант этого пособия, которое, как я считаю, для человека, решившего изучить Блендер, должно стать настольной книгой, так как материал преподносится очень методично и доступно.

А теперь приступим непосредственно к делу.

Сначала создадим плоскость, которая будет представлять собой поверхность земли, покрытую травой. Увеличиваем созданную плоскость в несколько раз, в режиме редактирования выполняем операцию Subdivide Multi Fractal (W), указав количество разрезов 10, а значение Rand Fract устанавливаем около 5. Установите режим отображения как Smooth и примените несколько раз операцию Subdivide Smooth, для сглаживания резких неровностей. Возвращаемся в режим объектов.

Теперь в окне кнопок переходим в раздел Objects и в заголовке жмем кнопку Particle Buttons. Надо заметить, что в Блендере присутствуют два типа частиц — непосредственно частицы, свободно перемещающиеся в пространстве согласно указанным правилам и физическим законам, и тип hair, предназначенный для создания волос, шерсти, травы и т.п. Так вот, в окне кнопок на панели Particle System жмем кнопку Add new, в появившемся рядом выпадающем списке меняем тип частиц с Emitter на Hair. Для того чтобы трава выросла вверх, увеличиваем значение AccZ на панели Physics (нужное значение будет зависеть от масштаба плоскости-источника — в моем случае хватило значения 0.05). Видно, что отдельные травинки распределены как будто под линейку — для добавления случайности в распределении на панели Particle System жмем на кнопки Random и Even, в выпадающем списке у кнопки Even выбираем пункт Random. Далее стоит увеличить количество травы — поднимаем значение Ammount в несколько раз, но все равно стоит оставить недостаточную плотность, ибо позже будет использован один интересный прием, позволяющий сэкономить вычислительные ресурсы компьютера и при этом увеличить количество отображаемых элементов во много раз.

Для того чтобы травинки выглядели реалистично, а не рядами одинаковых прямых линий, перпендикулярных к поверхности земли, нужно отрегулировать еще несколько параметров. Для начала добавим случайности в длину травинок — на панели Visualisation установите значение RLenght с помощью слайдера в крайнее правое положение (значение 1) — это приведет к тому, что длина каждой травинки будет вычисляться случайно от 0 до установленного Normal значения. Там же рядом со слайдером RLenght находятся две кнопки, которые стоит нажать: B-Spline и Strand render – их активация приведет к использованию более оптимальных алгоритмов рендеринга, что позволит сэкономить время. Далее на панели Physics в самом низу нужно слегка увеличить параметр Brown – это добавит некоторый эффект «растрепанности» травинкам.

Все травинки, что сейчас находятся в созданной трехмерной сцене, уникальны, каждую из них процессор рассчитывает индивидуально, но дальнейшее увеличение плотности травы за счет добавления еще большего количества уникальных объектов весьма расточительно и не оптимально с точки зрения расхода компьютерных ресурсов. Можно ведь просто скопировать каждую травинку некоторое количество раз, затем трансформировать и сместить случайным образом в пространстве — с количеством травинок в тысячи и десятки тысяч никто и не заметит «клонов». Для реализации этого трюка на панели Children в выпадающем списке Children from выбираем пункт Faces. Значение Ammount показывает, сколько копий будет создано для каждой отдельной травинки во вьюпорте, а Render Ammount — количество копий при рендере. Для того чтобы «клоны» трансформировались и отличались друг от друга, слегка (совсем чуть-чуть!) увеличьте значение параметров Rough2, Size2 и Tresh. На этом настройка непосредственно частиц, образующих траву, закончена. Теперь займемся постановкой света.

Применять «честные» методы расчета освещения от солнца, неба и т.п. не будем, так как это было бы чересчур ресурсоемко, трудновыполнимо (в Блендере), а разницу между честным расчетом и использованным в данном случае методом заметить весьма сложно. Вся суть заключается в использовании двух источников света — ярко-желтого Sun, имитирующего прямой солнечный свет, и синего Hemisphere, представляющего собой рассеянный свет небосвода. Если требуется получить пасмурные погодные условия, то стоит поиграть с цветом ИС, Sun можно будет заменить на Hemisphere или убрать совсем. Отключим у ИС Sun опцию отбрасывания теней — их мы будем имитировать непосредственно материалом травы, к настройке которого сейчас и перейдем.

Переключите режим просмотра материала на Strand, отключите опцию Shadbuf (трава не будет генерировать тени), для корректного расчета прозрачности на вкладке Links and Pipeline включите ZTransp, там же отключите все остальные опции (для повышения скорости рендеринга), значение Alpha (A – на вкладке Material) установите в ноль. Нажмите на кнопку Strands и настройте дополнительные опции отрисовки травинок: включите Surface diffuse для более реалистичного рендеринга и установите значение Dist в 4 (это что-то аналогичное параметру Specularity для обычной геометрии). Параметры Start и End показывают толщину отрисовки травинок в начале и конце травинки соответственно, параметр Shape отвечает за характер изменения толщины (при Shape<<<0 травинки получатся вогнутыми, Shape>>>0 – выпуклыми). Значения Start и End задаются в экранных пикселях (т.е. если Start=10, то это значит, что при любом разрешении рендеринга основание травинки будет занимать 10 пикселей на картине), что может привести к некоторым проблемам при рендере в разных разрешениях. Если необходим четкий контроль – нажимайте Use Blender Units для использования стандартных единиц измерения Блендера в качестве значений параметров. А сейчас установите Start примерно в 1.5-2 (пикселя), а End – в 0.25 (при использовании пикселей это минимально возможное значение).

Добавьте текстуру, на вкладке Map Input выберите Strand, это приведет к корректному отображению текстуры на UV-координаты травы — цвет будет назначаться не в зависимости от положения травинки на геометрии, а в зависимости от расположения точки на самой травинке, что позволит определить цвет от корня до кончика травинки. На вкладке Map To кроме пункта Col отметьте еще и Alpha. Для этого переключаем тип текстуры на Blend и приводим градиент к виду, показанному на рисунке. В самом начале стоит насыщенный темно-зеленый, практически черный цвет со значением альфы (параметр, отвечающий за непрозрачность объекта – Alpha) равным 0, затем, на позиции 0.1-0.2 тот же цвет, но со значением Alpha примерно 0.7 – это позволит создать ощущение затемненных своей собственной тенью стеблей травы у самой земли. Далее, примерно в середине, устанавливаем яркий зеленый цвет и значение альфы 1. К концам травинок (позиция 0.7-0.9) постепенно ослабляем насыщенность цвета и сдвигаем оттенок к желтому, альфу понижаем до нуля (в позиции 1) – это даст эффект тонких, слегка высушенных солнцем кончиков травинок. Да, не забудьте переименовать материал соответствующим образом (всегда старайтесь называть все осмысленными названиями – в сложных проектах эта привычка поможет вам сохранить много времени)!

Итак, материал травы настроен – теперь надо назначить материал для поверхности земли. Перейдите на панель Editing и на вкладке Link and Materials нажмите правую кнопку New (Add a new Material index) – это действие добавит еще один материал для объекта (если бы добавили новый материал на вкладке Shading, то он бы просто заменил собой ранее созданный). Перейдите на панель Shading и там сделайте только что созданный материал черным и матовым (Spec=0). Для того чтобы материал назначился на геометрию поверхности (сейчас и геометрии, и частицам назначен первый созданный материал травы), перейдите в режим редактирования, выделите всю геометрию и на панели Editing на вкладке Link and Materials нажмите Assign. Вернитесь к настройкам частиц и на вкладке Visualisation внизу нажмите кнопку Emitter – это включит отображение геометрии при рендеринге.

Если требуется распределить растительность каким-либо определенным образом, то наиболее простой способ сделать это – использовать группы вершин. Перейдите в режим Weight Painting и пройдитесь кисточкой по геометрии в местах, где должна быть трава. Синим цветом обозначены области, где травы не будет совсем, а красным – где ее количество будет максимально. При выходе из режима Weight Painting будет создана группа вершин, с полученными в результате рисования весами. На вкладке Extras (панель редактирования частиц) внизу в выпадающем списке Vertex Group выберите Lenght (веса вершин влияют на длину травы) и соответствующую группу вершин. Затем можно вернуться в режим Weight Painting и откорректировать распределение травы, при этом система частиц будет обновляться одновременно с редактированием группы вершин.

Собственно, на этом можно и закончить – запускайте рендер, смотрите на итог, экспериментируйте с различными значениями. Применение нескольких систем частиц для засевания территорий различными типами травы (в низинах густая, высокая, на возвышенности – редкая) может дать очень интересные, реалистичные результаты. С незначительными изменениями описанным способом легко и быстро можно создать не только траву, но и шерсть, волосы и т.п.

По возникшим вопросам обращайтесь на azazeo.ainamart@gmail.com

Дмитрий Az Табакеров


Компьютерная газета. Статья была опубликована в номере 06 за 2010 год в рубрике soft

©1997-2022 Компьютерная газета