Популярно о NURBS-моделировании. На примере Maxon Cinema4D

В процессе освоения пакетов трехмерного моделирования, анимации и визуализации начинающие очень часто сталкиваются с ситуацией, которую можно объяснить фразой: "Передо мной стена, за которой темный лес". Во многом это происходит благодаря тому, что данный спектр деятельности насыщен сложнопереводимой терминологией, а каждая крупная программа максимально эгоистична. Это проявляется не только в подходах к эргономике интерфейсов и внутренней начинки… Каждая программа имеет собственную терминологию сверх того. Кстати, разработчики это прекрасно понимают, поэтому, например, очень часто документация доступна только при условии онлайн-регистрации. А пересесть с LightWave3D на Maya, или Softimage|XGI, или Maxon Cinema 4D, не говоря уже о других "навороченных системах", очень сложно. Появилась интересная штуковина в профессии — узкая "пакетная" специализация. Кстати, софт нового поколения уже исправляет сложившуюся ситуацию.

Вашему покорному слуге пришло сразу несколько читательских писем и даже звонков на мобильный, в которых очень просили рассказать о NURBS так, чтобы это было понятно. ОК…Приступим.

В качестве основополагающей программы мы возьмем не 3ds MAX, по которому у нас идет серия, а Maxon Cinema4D. Почему выбрана именно эта программа? Ведь работа с NURBS представлена на очень высоком уровне в 3ds MAX, Maya и так далее. Дело в том, что Cinema4D является наиболее сильным инструментом NURBS-моделирования среди всех с точки зрения практики, хотя некоторые моменты в такой работе немецкими разработчиками просто отметены в сторону. Все сделано, прежде всего, для удобства самого процесса и максимально быстрого получения качественного результата. И это не только мое мнение. Если вы хотите приобрести самые полноценные навыки работы с NURBS, можно порекомендовать менее известную у нас программу Rhinoceros. Там используется только NURBS-моделирование, и все представлено в чистом виде без всяких "примесей". Только есть одна загвоздка в освоении не очень простого интерфейсного подхода. А как хороший вариант практики, причем с интерактивной формой обучения, можно назвать EOVIA Amapi Pro.

Cinema4D… о ней можно рассказывать долго. Почему-то у нас эта программа считается новым поколением и альтернативой 3ds MAX, Maya и LightWave3D. На самом деле это, опять же, ровесники. Cinema4D не так широко известна, и это одно время сработало в плюс — разработчики не почивали на лаврах, а делали дело.

Перед работой с моделированием иногда необходимо установить схемы как фон для окон проекций.

NURBS

Существует правильное разграничение на два основных применимых типа трехмерного моделирования: полигональное и NURBS. Хотя есть еще и третий, промежуточный, называется "динамической геометрией", и встретить его вы можете во французском пакете Amapi Pro (там представлены все три типа) и некоторых других профессиональных системах.

NURBS — аббревиатура от Non-Uniform Rational B-Splines (классический перевод — неоднородные рациональные В-сплайны). И хотя слову "сплайны" в учебниках также выводятся определения, на самом деле прямой перевод "spline" — "математическое представление плавных кривых" (в математике есть и такое понятие, как сплайн). При расчетах в NURBS-моделировании оперируют не полигонами, а кривыми. "При расчетах", потому как при визуализации все равно идет преобразование в полигональное представление. Хотя внутри системы моделирования они остаются чистыми кривыми, то есть математическими конструкциями. Допустим, вам нужно представить некую сложную трехмерную поверхность, например, естественного природного происхождения. Если ее описывать вершинами, разбивать на примитивы или образовывать из простых фигур и т.д., уйдет очень много времени. Мало того, когда вы захотите внести изменения кривизны поверхности, то в полигональном виде это вообще неудобно. К тому же, нужно придумывать ряд модификаторов и ухищрений, чтобы хоть как-то автоматизировать процесс. Да, для этих случаев изобретено множество деформаторов, специальных технологий, связанных с переходом на субуровень и т.д. Например, в LightWave3D существует промежуточный вариант — SubPatches (подразделенные поверхности), NURBS там представлено не совсем явно в рамках работы с кривыми и их сопряжениями. В 3ds MAX'е, особенно в русскоязычной документации к нему, вы можете встретиться с понятием "сплайнового моделирования" либо "surface modelling" — это тоже NURBS. Мало того, такие частоиспользуемые инструменты, как Extrude (вдавливание), Lathe (вращение), Sweep (отливание по формам), также имеют непосредственное отношение к NURBS. Хотя многие, особенно 3ds MAX'овцы, думают, что, поскольку использование таковых предлагает дробление на сегменты (полигоны), то и инструменты полигональны… Отнюдь.

Сначала рисуется кривая в трехмерном пространстве, после чего используется LoftNURBS (направляющие кривые не делались, поскольку подразумевалось редактирование форм на полигональном уровне).

Конкретный пример. Описание

Итак, чтобы все было максимально понятно, будем все рассматривать на конкретике. Да, в принципе, и любой специалист вам скажет, что главное в 3D- моделировании — это практика. В качестве примера возьмем модель, которую разработал ваш покорный слуга в 2006-м году. Передо мною тогда стояла задача придумать и реализовать концепт-модель одноместного экологически чистого автомобиля будущего для игры. Впрочем, он послужил прототипом для того, на чем будет "ездить" вокалист в новом видеоклипе нашей группы, а также для нескольких летательных аппаратов еще в одной разрабатываемой игре. Идея была простая — взять за основу природные формы и соединить их с современным дизайном плюс использование необычного материала. Причем хотелось реализовать вариант, когда двери отрываются, как распускается цветок или почка. Естественно, о полигональном моделировании речи быть не могло.

Ход работы. Создание шаблона

Изначально для того, чтобы быстро и успешно моделировать сложные объекты (особенно когда нужно много разных одного типа), требуется специальная подготовительная работа, которая делается только один раз — на фон каждой из проекций помещается чертеж, ей соответствующий. То есть наилучшим вариантом будет, когда у вас есть схематическое изображение автомобиля с видами: сверху, снизу, слева, справа, спереди и сзади. Это вам поможет наиболее эффективно использовать рабочее время, к тому же, все становится предельно понятным. Если же вы хотите конкретно повторить некий прототип, то такой вариант является обязательным, а в нашем случае он необходим для некоего абстрактного соблюдения пропорций. На базе такого подготовительного шаблона создаются еще дополнительные детали, которые свойственны для всех моделируемых объектов данного типа, и если мы говорим об автомобилях, это колеса, передние и задние фары, выхлопная труба. На самом деле они носят чисто декоративный информационный характер, потому как, вы сами понимаете, для каждой модели их потом нужно будет разрабатывать отдельно. Создаются эти элементы с помощью обычных фигур примитивов — труб, цилиндров и сфер (в разных пакетах у них различные названия).
Шаблон для работы готов. Приступаем.

"Голая модель".

Типы кривых

В любом программном пакете, зайдя в закладку инструментов spline, вы найдете несколько основных типов кривых и чуть больше готовых шаблонов (звезд, дуг и т.д.). Пока нас интересуют только основные. В варианте Maxon Cinema4D мы имеем:
. Linear (линейный) — вершины просто соединяются прямыми.
. Cubic (Кубический) — вершины обходятся криволинейным образом с определенным отклонением.
. Akima (Акима) — отличается от кубического варианта большей прямолинейностью, то есть этот вариант можно считать "сглаженным" прямолинейным путем.
. B-Spline (В-сплайн) — кривая не следует непосредственно через промежуточные вершины, последние влияют только на степень ее отклонения. . Bezier (Безье) — думается, что это такое, объяснять не нужно, речь идет о кривой с "ручками управления" (специфика Cinema4D — для того, чтобы "ручки" появились, нужно удержать нажатой кнопку мыши при выделении точки).

Помимо этого, кривые можно рисовать от руки (указателем мыши и т.п.), указывая параметр "толерантности", а характер соединения между точками или прохождения кривой в отдельной точке во всех случаях можно подправлять. Только не так, как в 3ds MAX, где вы указываете конкретно, какой тип линии там должен присутствовать, а несколько по-другому — меняя характер интерполяции (жесткий "hard" ведет к прямолинейности, мягкий "soft" — к более плавному характеру изменения). Если вы используете Безье, то управление соответственно. Кривые не являются объектами визуализации и отображаются только в окне редактора. Увидеть на экране просмотра их можно только после применения инструментов-модификаторов NURBS.

Инструменты NURBS

В закладке NURBS вы найдете 6 инструментов. Может показаться, что их мало, но на самом деле в простоте — сила, и сделать с их помощью можно практически все мыслимое.
. HyperNURBS — автоматическое разбиение и закругление низкополигональных форм. Хотя… сделать с его помощью можно очень многое и помимо этого. . ExtrudeNURBS — вдавливание объекта по определенному шаблону, описанному линиями.
. LatheNURBS — получение новой формы (поверхности) путем вращения контура, описанного линиями.
. LoftNURBS — создание объекта на основе опорных сечений. Как минимум это получение поверхности, очерченной кривой в трехмерном пространстве, а также перетекание из одной указанной формы в другую. Очень мощный инструмент.
. SweepNURBS — вы указываете две кривые, одна из которых будет контуром сечения, вторая является формой объекта. Можно указать и третий — "рельс" (управляющий масштабом по пути следования). Очень мощный инструмент.
. BezierNURBS — управление определенной поверхностью контрольными точками.
Супер! Хочется отметить, что Cinema4D — один из самых любимых продуктов вашего покорного слуги. Создаем машину.

А так выглядели плакаты для игры. Отдельно стоит отметить, что для графической и видеопродукции, в т.ч. и для демо-роликов, используются самые качественные высокополигональные модели. Для игр их нужно готовить отдельно, уменьшая количество полигонов. В Cinema4D (а он хорошо подходит и для игр) есть специальный инструмент Polygon Reduce.

Начало… и конец

Итак, мне нужно создать половину кузова автомобиля по продольной оси — вторую добавим путем зеркальной симметрии (инструмент Symmetry). Упрощенный вариант будет состоять из боковой части и верха, которые прорисовываются по отдельности в виде замкнутых кривых.

1. Боковая часть. Прорисовываем в окне боковой проекции необходимый контур с помощью линии Акима. В некоторых местах подправляем характер соединения между точками. При этом прорисовка должна достаточно точно передавать форму. При необходимости добавляете промежуточные точки (меню правой кнопки мыши — Add Point) и меняете характер их соединения (меню правой кнопки мыши — Hard или Soft Interpolation).

2. После этого в окне проекций спереди и сзади смещаете эти точки на необходимую дальность от центра. Получается полноценная трехмерная плоскость.

3. Далее можно двигаться по двум направлениям — нарисовать дополнительные направляющие кривые (в этом случае форма-поверхность будет протекать и через них), которые покажут выпуклости, либо не делать этого, подразумевая другие варианты создания объемности. Выбираем второй вариант и безо всяких зазрений совести вызываем инструмент LoftNURBS, помещаем в него нашу боковину. В результате внутри нарисованной кривой
образовалась объемная плоскость.

4. Точно такие же операции производим и с верхней частью. В принципе, работа с кривыми достаточно кропотливая и, как многие верно отмечают, напоминает создание папье-маше. Особенно явно это прослеживается, если вы еще работаете и с направляющими. Если две полученные формы (поверхности) не совсем совпадают между собой, не беда — после это можно успешно поправить.

5. Соединяем два компонента в один с помощью булевой операции суммирования и делаем объект Boole редактируемым (Make Editable), то есть переходим к полигональной сетке (примерно то же самое можно сделать и через группирование объектов). В ее рамках мы стыкуем поверхности, добавляем необходимые неровности, исправляем полигоны, потому как после кривых они могут быть излишне представлены.

6. После этого производится ряд необходимых операций с деформациями объекта (стандартные деформаторы), можно делать зеркальную симметрию, и в конце я использовал для придания "природной схожести" HyperNURBS.

7. В рамках булевой операции вычитания с помощью цилиндров делаются отверстия для колес, а дальше идут остальные украшательства.
Одно замечание. При использовании HyperNURBS и переходе на высокую полигональность из NURBS программу в силу объективно объяснимых причин может застопорить, в результате она не позволит редактировать полигоны. Тогда сохраняйте объект в XML-файл и импортируйте из него. Все необходимые данные сохранятся. В итоге при хорошем знании инструментария можно добиться задуманного.

Подытожим

В принципе, от появления идеи до получения голой модели (а специалисты под "голыми моделями" подразумевают вот это вот:)) было затрачено 6 часов, причем 4 из них ушло на продумку того, что именно хотелось увидеть в итоге. То есть я хотел, чтобы машина совмещала в себе растение и современный автомобильный дизайн, а двери и крыша раскрывались как цветок: вверх и по бокам. Дальнейшая доводка включая внутреннее наполнение и прорисовку лицевой панели для игрового управления заняла 2 дня. То есть с кривыми работать очень удобно, и, если речь заходит о нетривиальных объемных поверхностях, альтернативы NURBS нет. Если бы пришлось все делать на полигональном уровне, то на подготовку только одного корпуса могло уйти несколько дней. И, кстати, если бы был выбран не Cinema4D с его мощными NURBS-модификаторами, то в других пакетах такое моделирование также было бы трудоемким. Вообще ситуация с обучением 3D-моделированию усложнена тем, что каждая программа предлагает свое собственное видение и управление. Начинающим стоит порекомендовать стартовать с чего-нибудь легкого и мощного — такого, как CyberMotion 3D Designer — он интуитивно- понятен, либо 3ds MAX и Maya, по которым есть много русскоязычных учебников.

Кристофер, christopher@tut.by


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

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