Забиваем гол средствами Reactor

Часто после просмотра футбольного матча болельщики горячо обсуждают голевые моменты игры и чуть ли не до драки спорят о том, мог ли футболист тогда забить или нет. В определенном смысле ответ на этот вопрос можно получить, создав трехмерную модель ситуации на футбольном поле. При помощи модуля reactor можно просчитать, куда улетит мяч, если ударить по нему под определенным углом и с некоторой силой с заданного расстояния. Попытаемся воссоздать такую сцену в 3ds Max.

Как это ни парадоксально, футболист нам не понадобится. Для имитации голевого момента нам нужны будут только модели мяча, футбольных ворот с сеткой и условного пола, от которого должен отскочить мяч. На первый взгляд может показаться, что эта сцена очень проста, однако ее создание сопряжено с некоторыми трудностями. Например, при помощи инструментов моделирования очень сложно воссоздать анимацию сетки после того, как мяч залетит в ворота. Поэтому необходимоискать другие пути решения такой задачи. Один из вариантов — использование модуля для просчета динамики reactor. Если бы вместо сетки на воротах висела ткань, то ее движения после столкновения с мячом были бы точно такие же, как и при столкновении с сеткой. Поэтому мы можем просчитать анимацию столкновения мяча с тканью с помощью reactor, а затем придать ей вид сетки средствами моделирования или наложив соответствующий материал. Просчитывать анимацию сетки нецелесообразно хотя бы потому, что ее геометрия сложнее, чем геометрия ткани, и это займет больше времени. Вначале создадим модель ворот. Для этого используем стандартный примитив Box с подходящими размерами. Включим режим Edged Faces, чтобы видеть полигональную структуру объекта. Увеличим число сегментов. Ребра образованных полигонов — это будущая сетка. Поскольку нам нужно отредактировать форму ворот, применим к объекту модификатор Edit Poly. Переключимся в режим редактирования полигонов. Выберем тип выделения Paint Selection. Выделим все полигоны, лежащие в тех гранях, которые нужно удалить. Нажмем клавишу Delete, чтобы удалить их.

Внутренняя часть ворот нам не видна потому, что по умолчанию отображается только одна сторона модели. Чтобы видеть вторую сторону, назначим двусторонний материал. Для этого создайте материал типа Standard и установите в свитке настроек Shader Basic Parameters флажок 2-Sided. Изменим тип выделения на прямоугольный. Перейдем в окно проекции Left. В режиме редактирования полигонов выделим ту область, которая должна превратиться в сетку. Нажмем кнопку Detach, чтобы отсоединить ее от основного объекта. Теперь новый объект можно увидеть в списке объектов сцены под именем object. Добавим в сцену футбольный мяч, который сделаем на основе объекта Geosphere. Зададим для него радиус 6. Расположим мяч напротив ворот. В сцене должна быть земля, на которую упадет мяч после того, как залетит в ворота. Поскольку мы будем просчитывать анимацию при помощи модуля reactor, используем специальный объект Plane, который определяет уровень земли. Для его создания нажмем кнопку Create Plane на панели инструментов reactor. Перейдите в окно проекции Front. Если объект Geosphere расположен ниже уровня земли, выровняйте его относительно плоскости. Для этого выделите мяч, выполните команду Tools > Alignили воспользуйтесь сочетанием клавиш Alt+A, после чего щелкните на плоскости. В окне Align Selection установите флажки Z Position и Y Position, а переключатели Current Object и Target Object — в положение Minimum. Нажмите кнопку OK. Для того чтобы reactor мог просчитать поведение ткани, необходимо выполнить два действия: назначить будущей ткани модификатор reactor Cloth, после чего создать коллекцию Cloth.

Вызовем список объектов сцены и выделим ткань-сетку. Назначим ей соответствующий модификатор. Не снимая выделения с объекта, нажмем кнопку Create Cloth Collection на панели инструментов reactor. После этого в окне проекции появится значок, показывающий, что в сцене имеется группа объектов, обладающих свойствами ткани. Поскольку перед нажатием кнопки Create Cloth Collection мы выделили сетку ворот, она была автоматически добавлена в эту группу. Выделим сетку, перейдем на вкладку Modify и переключимся в режим работы с вершинами модификатора reactor Cloth. Используя прямоугольное выделение, в окне проекции Left выделим все вершины объекта, кроме крайних. Инвертируем выделение. Теперь у нас выделены вершины только по периметру объекта.Перейдем в свиток Constraints и нажмем кнопку Fix Vertices, чтобы зафиксировать положение выделенных вершин. В сцене также должна присутствовать группа твердых тел, состоящая из мяча и земли. Выделим объекты Plane и Geosphere и нажмем кнопку Create Rigid Body Collection. В окне проекции появится вспомогательный значок, в свойствах которого можно увидеть объекты, автоматически добавленные в список твердых тел. Зададим мячу массу. Для этого выделим его, перейдем на вкладку Utilities и запустим утилиту reactor. В свитке Properties укажем массу, равную одному килограмму.

Подкорректируем положение мяча. Нам необходимо, чтобы он влетел в ворота. Если на данном этапе просчитать анимацию с помощью модуля reactor, мяч просто упадет на землю. Для того чтобы придать ему движение, создадим анимацию мяча на первых трех кадрах в режиме автоматического создания ключевых кадров, после чего просчитаем анимацию модулем reactor начиная со второго кадра. Если вы используете анимацию с большим числом промежуточных кадров, вы можете запускать просчет модуля reactor начиная с любого промежуточного кадра, который не является ключом анимации. Нажмем кнопку Autokey и создадим анимацию мяча так, чтобы он двигался по направлению к воротам. Укажем, с какого и по какой кадр нужно считать анимацию модулем reactor. Обратите внимание на то, что временная шкала начинается с нулевого кадра, поэтому в нашем случае промежуточный кадр будет кадром номер один. Нажмем кнопку Preview in Window, чтобы посмотреть, как будет выглядеть наша сцена после просчета (рис. 1). Можно запускать просчет. Нажмем кнопку Create Animation. Мяч влетает в ворота и отскакивает от ткани. Теперь необходимо превратить ткань в сетку. Выделим этот объект и назначим ему модификатор Lattice. В его настройках установим переключатель в такое положение, при котором будут видны только прутья решетки (Struts Only From Edges). Уменьшим радиус прутьев до 0,3. Поскольку на воротах сетка должна быть натянута по бокам и вверху, выделим другую часть ворот и применим к ней модификатор Lattice с теми же настройками.

Для превращения ткани в сетку можно использовать альтернативный способ — не применять к объектам модификатор Lattice, а назначить соответствующий материал. Откройте Material Editor и создайте новый материал на основе Standard. Перетащите материал на сетку в окне проекции. В свитке Blinn Basic Parameters настроек материала установите в качестве карты Opacity карту Tiles. Значение параметра Amount, определяющего степень влияния на материал карты, установите равным 100. В области Tiles Setup свитка Advanced Controls выберите черный цвет текстуры, а в области Grout Setup — белый. Подберите значения параметров Horiz. Count и Vert. Count. Чтобы видеть, как текстура лежит на объекте, нажмите кнопку Show Map in Viewport. Материал превратил ткань в сетку, однако сетка плоская и похожа скорее на переплетенные ленты. Чтобы добавить рельефность, вернитесь к настройкам основного материала. Щелкните на кнопке созданной карты параметра Opacity правой кнопкой мыши и выберите пункт Copy, чтобы скопировать созданную карту. Щелкните правой кнопкой мыши на кнопке None напротив Bump в свитке Maps и выберите пункт Paste (Instance). Значение параметра Amount, определяющее степень влияния на материал карты, установите равным 100. После этого сетка станет объемной (рис. 2). Осталось смоделировать штанги, и сцена готова (рис. 3).

Сергей и Марина Бондаренко, http://www.3domen.com


Компьютерная газета. Статья была опубликована в номере 23 за 2006 год в рубрике софт

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