Многие из нас любят спорт, ходят на стадион, болеют за любимые команды. Мы, например, болеем за футбольный клуб «Шахтер» из Караганды =) А вы когда-нибудь задумывались о том, каких трудов стоит расставить сидения на трибунах? А что, если требуется визуализировать стадион на 44 000 зрителей???

44K_stadium_chairs

Мы все знаем, что существуют инструменты разбрасывания (scatter)… Но как насчет использования PFlow и наслаждения от роскошно-быстрой интерактивности (изменение форм, материалов и т.д.)?

В этом уроке мы имеем дело с Particle Flow в 3ds max, а также с небольшим кусочком MAXScript. Мы расставим на стадион 44 000 сидений с 4 различными материалами. Я попытаюсь объяснить все нюансы, поэтому начинающие могут легко следовать моему уроку. Нам понадобятся 3ds max (версия 5.1 и выше) и MaxScript.

Шаг 1: Прежде всего создаем систему частиц в ParticleView (Graph Editor > Particle >View, или при помощи горячей клавиши “6”).

particleView

Шаг 2: Из хранилища (Depot) в нижней трети окна просто перетаскиваем событие Standard Flow в окно (На всякий случае, если ваше хранилище (Depot) не отображается, откройте пункт меню “Display” и нажмите “Depot”).

Весь этот процесс мы пройдем вместе ;)

Безусловно, это не самый «модный» процесс, но очень эффективный! Так что же это, в кратце?
BirthScript рассаживает по одной частице на вершину полигонального объекта. Затем мы указываем как должен выглядеть поток частиц, определяем его форму, масштаб и шейдеры. В большинстве случаев нам может потребоваться, чтобы рассаженные объекты были повернуты в определенном направлении, поэтому добавляем ограничитель «Look at».

          depot           flow

Шаг 3: Прежде чем мы начнем строить весь поток, нам необходимо нарисовать сплайны. Они представляют собой направляющие, по которым мы хотим рассадить объекты. Имейте в виду, что необходимо указать шаг интерполяции каждого сплайна равный 0, в противном случае у вас будет чертовски много вершин! ;)

Теперь добавляем модификатор Normalize Spline из списка модификаторов.

normalize_spline

Щелкаеам правой кнопкой мыши по каждому из всех наших сплайнов и проверяем галочку Vertex Ticks в свойствах экрана. Теперь мы можем видеть каждую вершину сплайнов. Расстояние между каждой вершиной определяется длиной сегментов (Segment Length) в модификаторе Normalize Spline, поэтому мы нуждаемся в нем!

Теперь конвертируем сплайн в Edit Poly, щелкнув правой кнопкой мыши и используя операцию «Convert To».

Теперь, если вы не установили шаг интерполяции равный 0, то у вас будет мнооооого вершин, а мы этого не хотим! Шаги интерполяции разбивает линию на количество сегментов, указанных в интерполяции…

properties

Шаг 4: Давайте вернемся к потоку… ;) В первую очередь, необходимо добавить событие birth script и поменять событие birth на уже существующие. Напишем такой скрипт:

script

Замените «$guide» на название вашего направляющего сплайна, оставляя знак $ в качестве первого символа.

Краткое пояснение:
Скрипт циклично проходит по каждой вершине в сетке ($guide) и рассаживает частицы на каждую вершину.

Шаг 5: Заменяем событие Shape на Shape Instance и выбераем объект, который хотим рассадить на направляющие, которые мы только что создали. В нашем случае – стулья для стадиона.

Я добавил также событие Scale, чтобы иметь полный контроль над масштабированием в пределах потока частиц. Может быть, вам требуется более случайное масштабирование, тогда вы должны увеличить размер вариации, например.

Совет: Установим значение «BoundingBox» в событии Display, так чтобы мы могли видеть актуальное направление без необходимости расчета всех вариантов геометрии!

shape_instance

Шаг 6: Если мы хотим создать экземпляры, имеющие различные материалы в определенных местах, то должны добавить событие Material Static. Если мы не добавим это событие, то все частицы будут иметь материалы, назначенные к определенному экземпляру.

В нашем случае я хотел, чтобы лишь каждое четвертое сидение имело тот же материал, поэтому я выбрал Multi / Sub Material с четырьмя подматериалами в событии Material Static. Я отметил «галочкой» Assign Material ID и Show в окне просмотра, чтобы иметь визуальное представление. Так как я хотел, чтобы материал был зацикленным, я выбрал цикл и ввел 4 в поле суб-материалов.

Мы должны расположить событие Material Static ПОД событием Shape Instance, иначе умный материал, примененный к событию Shape Instance заменит ваше событие Material Static.

material

Шаг 7: На всякий случай, если вы хотите, чтобы частицы смотрели в определенном направлении, вы должны добавить событие find target под birth script. В моем случае я смоделировал прокси всех частиц, которые должны смотреть в определенную точку.

Используйте те настройки, которые использовал я. Здесь важна очень низкая скорость! Потому что мы не хотим, чтобы частицы перемещались. Я отметил «галочкой» Mesh Object и затем ткнул на свой прокси.

Теперь каждая частица направлена на прокси, но это чертовски медленно :)

findtarget

Шаг 8: Перетаскиваем событие Rotation под Find target и указываем ему Speed Space Follow. Это заставит наш LookAt найти обходное решение! Поскольку частицы имеют катастрофически низкую скорость, они ЛИШЬ повернутся в направлении прокси и не будут больше двигаться.

ПРИМЕЧАНИЕ: экземпляры формы частиц повернутся к Find Target только на 1 кадре, потому они должны быть «сигналом» (триггированны). В 0 кадре они все будут смотреть в первоначальном направлении.

rotation

ЗАКЛЮЧИТЕЛЬНАЯ УЛОВКА: Если вы довольны результатом, то переместите иконку потока частиц в начало координат 0,0,0 (что не окажет никакого влияния на ваши частицы!). Теперь используем Mesher Compound Object (так же расположенный в начале координат) и выбираем нашу систему частиц. Это преобразует частицы в редактируемые многоугольники, которые могут быть модифицированы, так же как и другие объекты сетки. ВНИМАНИЕ! Может быть, после этого шага ваш 3ds max «вылетит», если у вас не хватает оперативной памяти и расчет займет некоторое время!!!

Теперь вы можете свернуть Mesher Compound Object в Editable Poly и работать с ним как обычно.

stadium_PFlow

Автор: Ансельм фон Зеер-Тосс, Германия
Источник: cgarena.com
Перевод: RAIT.kz – статьи о компьютерной графике

  • tdulat

    Отличная идея, интересные статьи, в кз пока вроде таких ресурсов не встречал… Здорово! Удачи в начинаниях!

    • Спасибо! Будем стараться подбирать самые интересные материалы по 3д!
      Если кого-то интересуют другие темы, касательно CG. Пишите не стесняйтесь!
      Мы рассмотрим все предложения и будем публиковать, действительно, нужные уроки и статьи.