Nurbs моделирование в 3d max уроки. Введение в NURBS моделирование

Сегодня я покажу еще одну технику создания моделей с помощью кривых. Начнем, как обычно, с небольшой теории, сначала рассмотрим NURBS-кривые, потом перейдем к NURBS-поверхностям. Далее попробуем сделать с помощью NURBS-кривых какую-нибудь модель. Ну и в завершающей части наложим на созданные объекты материалы.

Начнем с теории…

Сначала расшифруем аббревиатуру NURBS. NURBS - это Non-Uniform Rational B-Spline или по-русски неоднородные рациональные B-сплайны. NURBS-кривые обладают одной особенностью: они всегда имеют гладкую форму. В 3d max есть два вида NURBS-кривых: P-кривые и CV-кривые.

P-кривые (point curves) - такие кривые задаются вершинами, лежащими непосредственно на самой кривой. По сути они похожи на обычные сплайны.

CV-кривые (control vertices curves) - форма таких кривых задается управляющими вершинами, лежащих на вспомогательной кривой (на рисунке желтого цвета).

Чтобы создать одну их этих кривых, надо на вкладке Create перейти на вкладку Shape, затем в выпадающем списке выбрать NURBS Curves и нажать на одну из кнопок в зависимости от вида кривой:

Если убрать галку рядом с Start New Shape, то вы продолжите создавать выделенную кривую.

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

NURBS-поверхности формируются из NURBS-кривых и, так же как кривые, могут быть двух типов: P-поверхности (point surfaces) и CV-поверхности (control vertices surfaces). Как не сложно догадаться эти типы отличаются, друг от друга тем же, чем отличаются два вида кривых.

Есть несколько способов создания NURBS-поверхности.

Можно создать прямоугольный кусок NURBS-поверхности на вкладке Create (Create->Geometry->NURBS Surfaces):

Можно преобразовать в NURBS-поверхность созданный каким-то другим способом объект. Для этого надо щелкнуть правой кнопкой мыши по объекту и выбрать в появившемся меню Convert To:->Convert to NURBS.

Ну и наконец, можно создать поверхность путем объединения нескольких NURBS-кривых. Именно этим способом мы и будем пользоваться в практической части урока.

Если вы создадите NURBS-кривую или поверхность, и перейдете на вкладку Modify, то откроется панель с инструментами NURBS:

Если панель не открылась, то ее можно открыть, нажав кнопку NURBS Creation Toolbox:

Эта панелька состоит из разделов для управления вершинами (Points), кривыми (Curves) и поверхностями (Surfaces). Наибольший интерес для нас представляют инструменты управления поверхностями, поэтому рассмотрим некоторые из них.

Create CV Surface, Create Point Surface:

Как не сложно догадаться по названию, инструменты создают оба типа поверхностей. Эти кнопки отличаются от кнопок на вкладке Create тем, что созданные поверхности будут принадлежать к текущему объекту (станут подобъектами).

Создает плавный переход между двумя поверхностями:

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

Create Mirror Surface:

Отражает поверхность.

Create Extrude Surface:

Выдавливает поверхность из кривой. Например, из такой кривой:

Можно выдавить такую поверхность:

Create Lathe Surface:

Создает поверхность вращения, подобно модификатору Lathe из урока №3

Create Cap Surface:

Создает поверхности ограниченной некоторой замкнутой кривой. Например, для созданной чуть выше поверхности можно создать такую крышку:

Create U Loft Surface:

Создает поверхность U-лофтинга из набора параллельных сечений, расположенных перпендикулярно продольной оси будущего объекта. Подробнее об этом инструменте будет рассказано в практической части.

Create UV Loft Surface:

Создает поверхность UV-лофтинга из двух групп разомкнутых NURBS-кривых. При этом должно выполняться два правила:
- кривые из одной группы должны лежать вдоль одной из осей создаваемого тела и быть параллельными друг другу;
- концы кривых из одной группы должны располагаться на крайних кривых, входящих в другую группу.
Например, имеем две группы кривых (выделенные и не выделенные):

На основе этих кривых получаем поверхность:

Некоторые остальные инструменты будут рассмотрены в практической части.

В заключение этой теоретической части следует прояснить еще кое-что:

  • NURBS-поверхности всегда имеют гладкую форму. Поэтому наиболее логично их применение для моделирования объектов сглаженной формы, не имеющих острых краев.
  • Реализация NURBS-моделирования в 3d max всегда вызывала много критики, уж больно он «глючный». Но все же иногда объект можно быстрее и качественнее создать именно с помощью NURBS (надеюсь, скоро вы в этом убедитесь), поэтому замалчивать про этот способ моделирования неправильно.

Создание мыльницы

Я потратил безумно много времени, чтобы придумать, какой объект моделировать в этой части. Уже почти отчаялся найти необходимое сочетание простоты создания и максимально возможного количества применяемых инструментов. И вдруг однажды в ванной мой взгляд упал на мыльницу, и я понял, что ничего лучше придумать все равно не получится, поэтому сегодня мы будем моделировать мыльницу:)

И так начнем с создания вспомогательной линии. Желательно создать ее в виде NURBS-кривой (любого типа), чтобы понять как они создаются. Но это не принципиально и можно использовать обычный сплайн, ибо прямого участия в моделировании эта линия принимать все равно не будет. Я же использовал CV-кривую:

Теперь сделайте копию этой кривой и поверните ее на 90 грудсов вокруг оси Z:

Таким образом мы создали как бы ограничивающие кривые будущей мыльницы. Теперь перейдите на вид сверху и создайте P-кривую в виде овала:

При создании этой кривой ориентируйтесь на сетку в окне проекции, чтобы создать максимально симметричный овал. Также обратите внимание на расположение вспомогательных кривых по отношению к овалу: на виде сверху их концы лежат на овале.

В результате получится овал, который скорее всего у вас будет располагается вот так:

Необходимо поднять этот овал до пересечения с вспомогательными кривыми:

Теперь сделайте копию этого овала и опустите его вниз:

А потом промасштабируйте овал до пересечения c другой вспомогательной кривой:

Сделайте еще несколько копий этого овала и промасштабируйте их указанным способом:

А потом еще несколько, с пересечением внутренней поверхности мыльницы:

В результате должно получиться нечто такое:

Теперь необходимо соединить все созданные кривые. Для этого выделите одну из кривых, на вкладке Modify в свитке General найдите кнопку Attach:

Нажмите эту кнопку и прокликайте все остальные кривые. В результате они все объединятся в один объект.

И начинайте щелкать на каждую кривую по порядку, начиная с самой нижней и заканчивая внутренними кривыми. В конце создания нажмите правую кнопку мыши.
Если в процессе создания вы случайнее перепутали последовательность следования кривых, то их поменять можно на панели справа. Возможно, полученная поверхность получится черной, в этом случае надо поставить галку рядом с Flip Normals:

Если все стало нормально, то нажмите еще раз правую кнопку чтобы зафиксировать результат. Должно получиться примерно вот так:

Можно спрятать обе вспомогательных кривых, они больше не нужны. Для этого выделите их, щелкните по ним правой кнопкой мыши и выберете Hide Selection.

И щелкните по кривой, которое образует днище, а затее по кривой внутри мыльницы:

Если полученная поверхность будет черной, то поставьте галку рядом с Flip Normals:

Теперь создадим закругление на дне мыльнице, для этого используйте инструмент Create Fillet Surface:

Затем щелкните сначала по боковой поверхности мыльницы, а затем по днищу. Сразу после этого необходимо поставить две галки рядом с Trim Surface. После этого могут исчезнуть одна или обе плоскости, в этом случае надо поставить галку рядом с Flip Trim. Далее необходимо увеличить значение радиуса фаски:

Щелкните правой кнопкой мыши, чтобы зафиксировать результат:

Некоторые сплайны могут быть конвертированы в NURBS-кривые, главное, чтобы в их составе не было вершин типа Corner и Bezier Corner. Также в NURBS-кривые могут быть преобразованы четыре стандартных сплайна: Circle, Ellipse, Arc и Star. Именно этим условием мы сейчас воспользуемся, создайте на виде сверху эллипс с помощью сплайна Ellipse.

Урок №6 часть 7

Использование лофтинга для моделирования трехмерных объектв в 3d studio max.

Цель работы : Изучение основных приемов моделирования 3d объектов в программе 3d studio max с помощью лофтинга.

Порядок выполнения 3d studio max.

Построение седьмой трехмерной сцены

Использование лофтинга 2D -профиля стены по заданному пути. Идея метода в том, что создается два сплайна: один – сплайн-путь, очерчивающий периметр здания, а второй – сплайн-сечение, очерчивающий сечение стены. Создание объекта «многоэтажное здание» (рис. 1 ) Перезагрузите 3d studio max и начните новый файл сцены.

Создайте на виде Тор сплайн - путь, проходящий по периметру здания.

Рядом создайте сплайн типа Rectangle , после чего с помощью модификатора Edit Spline добавьте недостающие вершины, чтобы он выглядел как на рисунке.

Выделите сплайн-путь, выполните команду из главного меню Create –> Compound –> Loft . Нажмите кнопку Get Shape и щелкните по сечению стены. Получится стена.

Выделите полученную модель стены. Можно оптимизировать фигуру. Для этого в свитке Skin Parameters у тела лофта поставьте флажок Optimize Shapes .

Примените к стене модификатор Edit Mesh , включите уровень подобъектов Element . Находясь на этом уровне, можно быстро выделять составные части объекта: стены, стекло, раму. Это возможно благодаря тому, что мы нарисовали сечение, состоящее из отдельной замкнутой плоской фигуры.

Сделаем наше здание многоэтажным. Выделите стенку и создайте линейный массив.

Добавьте зданию вертикальные колонны. Создайте Cylinder высотой со здание.

Расставьте колонны. Чтобы сделать крышу, скопируйте сплайн-путь и выдавите его модификатором Extrude .

Урок 7.5. Nurbs поверхность смещения (blend).

Урок №7 часть 5

Использование NURBS моделирования для создания трехмерных объектов в 3d studio max.

Цель работы : знакомство c принципами NURBS моделирования в программе 3d studio max .

Порядок выполнения Данная работа заключается в последовательной реализации нижеследующего интерактивного диалога с системой 3d studio max.

NURBS поверхность смещения (BLEND)

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

Флажки типа Flip меняют точки сочленения двух поверхностей. Пример NURBS поверхности смешения приведен на рис. 1 .

Рисунок 1. Поверхность смещения.

Для создания данной поверхности необходимо:

– нажать кнопку Blend (Смешение);

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

– выбрать край другой поверхности.

Построение третьей трехмерной сцены

Создание объекта «Голова человека»

1. Перезагрузите 3d studio max и начните новый файл сцены.

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

Рисунок 2. NURBS -> Point Curve.

Первый сплайн (рис. 3 ):

Рисунок 3. Первый сплайн лица.

После того, как сплайн замкнут, его можно отредактировать более точно на уровне вершин. Теперь склонируйте этот сплайн, и отодвиньте его по оси Y на несколько миллиметров. Это необходимо чтобы в дальнейшем лофтинг начинался постепенно.

3. Снова склонируйте сплайн, после чего с помощью операции масштабирования сделайте его чуть меньше первых двух. Разница должна быть очень маленькой, как показано на рис. 4 .

Рисунок 4. 3й сплайн должен быть чуть меньше первых двух.

4. Методом клонирования создайте 4й и 5й сплайн. Вершины сплайнов установите как показано на рис. 5 . Будьте очень точны с установкой положения вершин - то на сколько они соответствуют рисунку зависит качество модели которая будет получена в конце работы.

Для увеличения участка носа и гуд наведите мышь на область белого прямоугольника (рис. 5 ):

Рисунок 5. 4й и 5й сплайн.

5. Терерь задайте положение сплайнов по оси Y как показано на рис. 6 .

Рисунок 6. Задание положения сплайнов по оси Y.

6. Таки же, с помощью метода клонирования создайте 6 сплайн и расположите вершины как показано на рис. 7 .

Рисунок 7. Создание 6го сплайна.

7. Следующий сплайн склонируйте из предыдущего и установите вершины как показано на рис. 8 . Помните, что положение каждой вершины влияет на черты лица и их корректность.

Рисунок 8. Создание следующего сплайна.

8. Последний сплайн, завершающий щеку. Установите вершины сплайна как показано на рисунке. Теперь перейдем к редактирования положения сплайнов по оси Y . Установите сплайны как показано на рис. 9 .

Рисунок 9. Последний сплайн, завершающий щеку.

Рисунок 10. Расстановка сплайнов по оси Y.

9. Создайте завершающие форму головы сплайны (так же методом клонирования предыдущего) Как показано на рис. 11 .

Рисунок 11. Создание завершающих сплайнов.

10. Установите сплайны как показано на рис. 12 , после чего с помощью кнопки Attach свитка General вкладки Modify объедините все сплайны. Объединенные сплайны вы можете увидеть на рис. 12 справа.

Рисунок 12. Объединенные сплайны.

Рисунок 13. Кнопка Attach для объединения сплайнов.

11. Теперь с помощью U-лофтинга создадим поверхность для нашего объекта. Перейдите на вкладку Create Surface (Создать поверхность), нажмите кнопку U-Loft (Поперечный лофтинг), выберите последнюю кривую, затем выберите следующую и т. д. Дойдя до последней кривой, нажмите клавишу , отожмите кнопку U-Loft (Продольный лофтинг) (рис. 14 ).

Рисунок 14. U-Loft (Продольный лофтинг).

Рисунок 15. Создание "полушарий".

Созданное "полушарие" (рис. 16 ):

Рисунок 16. Созданное "полушарие".

Для того чтобы создать вторую половину головы, Перейдите на уровень Surface (Поверхности) , выделите поверхность, склонируйте ее после того отодвиньте немного влево. Далее необходимо обратить нормали с помощью опции, как показано на рис. 17 . Далее примените модификатор Mirror к новой половинке (рис. 18 ).

Как вы помните, существует два типа моделирования в Мауа. Мы рассмотрели подробно полигональное моделирование, и давайте перейдем ко второму, который называется моделированием NURBS. Сокращение NURBS обозначает неоднородную рациональную поверхность B-сплайна. Это может показаться сложным, но это просто означает, что всё на поверхности NURBS - это кривые. Если я выберу одну из этих поверхностей NURBS, например, сферу и увеличу ее, то будет видно, что все ее ребра состоят из кривых, и отдельные компоненты поверхности NURBS являются прямоугольными патчами.

Патч NURBS можно представить как бесконечно гибкую плоскость, почти как бесконечно гибкий кусок упаковочной бумаги, который мы можем изогнуть как хотим для создания любой формы, какую хотим. Поверхность NURBS имеет много компонентов, которые мы можем использовать для редактирования. Самое главное - вершина управления - Control vertex. если я щелкну правой кнопкой по ней, мы увидим, что у меня есть дополнительные способы управлять этой поверхностью. Полигональная поверхность имела бы вершины, ребра и фейсы, а поверхность NURBS имеет Control Vertex, isoparm, и Hull.

Давайте рассмотрим вершины управления, которые отчасти подобны вершинам полигональным. На поверхности NURBS вершина управления фактически находится выше поверхности. Если я щелкну левой кнопкой и перетащу курсор, я могу переместить эти контрольные точки для изменения моей поверхности. И также обратите внимание, что поверхность деформируется очень гладко, так можно получить сильные искривления с очень небольшим количеством деталей на поверхности NURBS.

Если я щелкну правой кнопкой сюда и перейду к Hull (Оболочке), это будет напоминать нам каркас на разделенных поверхностях, и эта клетка содержит отдельные вершины управления, и состоит из так называемых оболочек или циклов. Если я щелкну по какой-либо из этих линий, мы увидим, что они очень похожи на последовательности ребер, которые мы видели бы в полигональной модели. И они все используются для формирования поверхности NURBS. Я щелкну правой кнопкой и перейду в режим Object. Как я уже сказал, у нас есть так называемый Rectangular patch, прямоугольный патч.

Это - один прямоугольник, наложенный на любую поверхность, какую вы хотите. В случае сферы, мы как бы обернули шар. После сворачивания у нас останется шов вдоль одного края. если я войду в параметры создания для моей сферы NURBS, то увижу, что у меня есть параметр Radius, который я регулирую средней кнопкой и перетаскиванием, но у меня также есть Start sweep и End Sweep.

Это позволяет нам развернуть нашу сферу и увидеть, что она просто составлена из патча, который сначала был свернут в цилиндр, а затем его как бы подвернули в полюсах. И если мы закроем его обратно, то увидим, что шов на самом деле состоит из двух линий. Эта - более толстая линия, а эта показывает, где патч NURBS соединяется. Мы можем рассмотреть это получше на цилиндре, итак, у меня есть эта линия, и если я перейду в Inputs, я найду несколько опций для развертки и радиуса.

Если я щелкаю средней кнопкой и перетаскиваю Sweep end, видите, цилиндр разворачивается, и мы можем увидеть углы нашего патча. И если я вхожу в режим Hull, то мы увидим, что каждая из этих оболочек является в основном просто деталью поверхности. Это - прямоугольный патч, он просто был сложен или свернут в цилиндр или сферу, и точно так же может быть свернут в любую форму, какую мы хотим.

Теперь, когда мы понимаем основные принципы NURBS, давайте пойдем дальше и начнем работать с поверхностями NURBS.

В уходящем году инженерная отрасль отметила знаменательный юбилей – тридцать лет промышленного использования неоднородных рациональных B-сплайнов (сокращенно NURBS – от англ. Non-Uniform Rational B-Spline) для моделирования трехмерных кривых и поверхностей. В августе 1981 г. американский авиастроительный концерн Boeing предложил сделать NURBS частью промышленного стандарта IGES . И хотя это решение формально было утверждено только пару лет спустя, отрасль САПР среагировала на предложение моментально: в том же году о поддержке NURBS объявили обе ведущие компании, производящие инженерное ПО – SDRC и Computervision . Сейчас, 30 лет спустя, отыскать САПР без поддержки NURBS практически невозможно. В чем причина этого феномена? Почему изобретение NURBS революционизировало отрасль? Ниже мы попытаемся ответить на эти вопросы, а заодно вспомним всех исследователей, внесших вклад в развитие и становление NURBS.

Скульптурные поверхности

Хорошо известно, что научные исследования в области трехмерного геометрического моделирования начались вовсе не в рамках CAD (проектирования с помощью компьютера), а со стороны CAM (производства с помощью компьютера). Изобретение в начале 1950-х гг. станка с ЧПУ (числовым программным управлением) в MIT (Массачусетском технологическом институте, США) породило потребность в цифровой модели детали, необходимой для создания управляющей программы для станка. Изучением принципов моделирования трехмерных объектов занялись различные исследовательские группы, а основными заказчиками этих исследований стали крупнейшие предприятия аэрокосмической и автомобильной отраслей промышленности.

Рис. 1. Citroёn DS

Посмотрите на фотографию модели Citroёn DS (годы выпуска 1955-1975), ставшей автомобильной иконой на все времена. Точное изготовление таких сложных «скульптурных» поверхностей требует использования продвинутого математического аппарата, и совершенно не случайно одно из первых исследований в этой области было проведено французским математиком Полем де Кастельжо (Paul de Casteljau), работавшим на Citroёn. Он предложил способ построения гладкой поверхности по набору контрольных точек, задающих ее геометрические свойства. Результаты его работы были опубликованы только в 1974 г., но само исследование было проведено еще в 1959 г., что дает основания именно его считать автором кривых и поверхностей, получивших имя совсем другого француза – Пьера Безье (Pierre Bézier). Впрочем, прежде чем рассказать о нем, напомним о самой проблематике «скульптурных» инженерных поверхностей.

Как можно конструктивно (не в виде абстрактного алгебраического уравнения, а путем геометрических построений) задать гладкую поверхность, обладающую требуемой эстетической формой? Простейшим способом задания является указание четырех точек в трехмерном пространстве, которые формируют так называемый билинейный лоскут (bilinear patch):

Рис. 2. Билинейный лоскут

Билинейный лоскут является разновидностью линейчатой поверхности (ruled surface), которая целиком состоит из отрезков, соединяющих две кривых:

Рис. 3. Линейчатая поверхность

Стивен Кунс (Steven Coons), профессор MIT, обобщил такой способ задания на поверхности с двойной кривизной, получившие его имя (Coons patch):

Рис. 4. Лоскут Кунса

Опубликованный им в 1967 г. препринт “Surfaces for Computer-Aided Design in Space Form” получил широкую известность как «Малая красная книга». Предложенный им аппарат граничных кривых и функций сопряжения дал основу для всех дальнейших исследований в этой области. Именно Кунс первым из исследователей предложил использовать рациональные полиномы для моделирования конических сечений. Выдающийся вклад Кунса в развитие отрасли САПР подчеркивается еще и тем, что он являлся научным руководителем Айвэна Сазерлэнда (Ivan Sutherland), создателя знаменитой системы Sketchpad, ставшей прообразом нынешних САПР.

Кривые Безье

Лоскут Кунса позволял контролировать форму поверхности на ее границах, но не между ними. Необходимость контролировать форму внутри хорошо понимал Пьер Безье, разрабатывавший в начале 1960-х гг. систему UNISURF для проектирования поверхностей автомобилей Renault.

Рис. 5. Пьер Безье

Безье, как истинный представитель французской математической школы, хорошо знал труды Шарля Эрмита (французского математика XIX в.), в частности аппарат кубических кривых, названных в его честь. Эрмитова кривая (Hermite curve) является геометрическим способом задания кубической кривой: с помощью концевых точек и касательных векторов в них. Варьируя направления и величины этих векторов, можно контролировать форму Эрмитовой кривой:

Рис. 6. Семейство Эрмитовых кривых

Безье не нравилось то, что, задавая Эрмитову кривую, мы указываем только ее поведение в концевых точках, но не можем влиять явным образом на форму кривой между этими точками (в частности, кривая может удалиться сколь угодно далеко от отрезка, соединяющего ее концевые точки). Поэтому он придумал конструктивно задаваемую кривую (позднее получившую его имя), форму которой можно контролировать в промежуточных, так называемых контрольных, точках. (Bézier curve) всегда выходит из первой контрольной точки, касаясь первого отрезка ломанной, соединяющей все контрольные точки, и заканчивается в последней контрольной точке, касаясь последнего отрезка. При этом любая точка кривой всегда остается внутри выпуклого замыкания множества контрольных точек:

Рис. 7. Кривая Безье с четырьмя контрольными точками

Безье опубликовал работу по своим кривым в 1962 г., но когда двенадцать лет спустя компания Citroёn рассекретила свои исследования, выяснилось, что эти кривые были известны де Кастельжо как минимум за три года до Безье. Де Кастельжо описывал их конструктивно, и соответствующий алгоритм получил название в его честь.

Позднее Форрест установил связь между кривыми Безье и полиномами в форме Бернштейна (который были известны математикам еще с начала XX в.) Он показал, что функция, задающая кривую Безье, может быть представлена в виде линейной комбинации базисных полиномов Бернштейна. Это позволило исследовать свойства кривых Безье, опираясь на свойства данных полиномов.

Перейти от кривых к поверхностям Безье можно двумя способами. В первом вводятся так называемые образующие кривые Безье, имеющие одинаковую параметризацию. При каждом значении параметра по точкам на этих кривых в свою очередь строится кривая Безье. Перемещаясь по образующим кривым, получаем поверхность, которая называется поверхностью Безье на четырёхугольнике. Областью задания параметров такой поверхности является прямоугольник. Другой подход использует естественное обобщение полиномов Бернштейна на случай двух переменных. Поверхность, которая задается таким полиномом, называется поверхностью Безье на треугольнике.

Рис. 8. Поверхность Безье

Сплайны

Кривые и поверхности Безье, являясь безупречным геометрическим конструктивом, имеют, однако, пару свойств, существенно ограничивающих их область применения. Одно из этих свойств состоит в том, что с помощью кривых Безье нельзя точно представить конические сечения (например, дугу окружности). Второй – их алгебраическая степень растет вместе с числом контрольных точек, что весьма затрудняет численные расчеты.

Способ борьбы с алгебраической степенью сложной кривой известен математикам давно – достаточно построить кривую, состоящую из гладко сопряженных сегментов, каждый из которых имеет ограниченную алгебраическую степень. Такие кривые называются сплайнами , а в математический обиход их ввел американский математик румынского происхождения Исаак Шёнберг . Его теоретические работы практическим образом (в контексте САПР) переосмыслил Карл де Бур, американский математик немецкого происхождения. Его работа “On calculating with B-Splines”, равно как и вышедшая в том же году (1972) статья Кокса “The numerical evaluation of B-Splines” установили связь между геометрической формой составной кривой и алгебраическим способом ее задания.

B-сплайны являются обобщением кривых и поверхностей Безье: они позволяют аналогичным образом задавать форму кривой с помощью контрольных точек, но алгебраическая степень B-сплайна от числа контрольных точек не зависит.

Уравнение B-сплайна имеет вид, аналогичный кривой Безье, но сопрягающие функции не являются многочленами Бернштейна, а определяются рекурсивным образом в зависимости от значения параметра. Область задания параметра B-сплайна разбита на узлы (knots), которые соответствуют точкам сопряжения алгебраических кривых заданной степени.

Изобретение NURBS

Первой работой с упоминанием NURBS стала диссертация Кена Версприла (Ken Versprille), аспиранта Сиракузского университета в Нью-Йорке .

Рис. 9. Кен Версприл, изобретатель NURBS

Версприлл получил степень бакалавра математики в Университете Нью-Хэмпшира, затем обучался в магистратуре и аспирантуре Сиракузского университета, где в то время работал профессором Стивен Кунс. Проникшись идеями Кунса, Версприл опубликовал первое описание NURBS и посвятил этой теме свою диссертацию. Вскоре после защиты он был принят на работу в компанию Computervision на должность старшего программиста для разработки функционала трехмерного моделирования в системе CADDS 3 . И хотя порученная ему работа (реализация сплайнов) совпадала с интересующей его темой, его босс, будучи сконцентрирован на выполнении проекта в срок, настоял на отказе от NURBS и реализации более простого (с математической точки зрения) аппарата кривых Безье.

Спустя несколько лет Версприлл занял руководящую позицию в Computervision, и компания наконец решила поддержать NURBS. Программист, которому поручили реализацию, пришел к Кену за советом, который не заставил себя ждать: «Измени в таком-то файле такой-то флаг с 0 на 1 и перекомпилируй код!» Оказалось, что Версприлл с самого начала реализовал NURBS, просто не включил соответствующий код в релиз. И после исправления пары ошибок этот код заработал!

В 2005 году CAD Society, некоммерческая ассоциация отрасли САПР, присудила Кену Версприллу награду за неоценимый вклад в технологию САПР в виде NURBS. Премия была вручена на конгрессе COFES, состоявшемся в том же году в Аризоне.

Вклад Boeing

В 1979 г. авиастроительная корпорация Boeing решила начать работы по разработке собственной CAD/CAM системы под названием TIGER . Одна из задач, стоявших перед ее разработчиками, состояла в выборе подходящего представления для 11 требуемых форм кривых, включавших в себя все от отрезков и окружностей до кривых Безье и B-сплайнов. В процессе работы один из исследователей – Юджин Ли (Eugene Lee) – обнаружил, что основная задача (нахождение точки пересечения двух произвольных кривых) может быть сведена к решению задачи нахождения точки пересечения кривых Безье, поскольку любая гладкая кривая в некоторой окрестности может быть аппроксимирована кривой Безье. Это мотивировало исследователей к поиску способа представления всех кривых с использованием одной формы. (О диссертации Версприла они, похоже, ничего не знали.)

Важным локальным открытием стала возможность представления окружностей и других конических сечений с помощью рациональных кривых Безье . Другим шагом к открытию стало использование в промышленной практике давно известных из научной литературы неоднородных B-сплайнов. Наконец, исследователи пришли к интеграции двух этих понятий в единую формулу – NURBS. После чего потребовалось немало усилий, чтобы убедить всех остальных разработчиков TIGER начать использовать единое представление для всех типов кривых.

Вскоре после этого компания Boeing предложила включить NURBS в формат IGES, подготовив технический документ с исчерпывающим описанием нового универсального типа геометрических данных. Предложение было с энтузиазмом воспринято – прежде всего, благодаря позиции компании SDRC.

Вклад SDRC

В 1967 г. бывшие профессора машиностроительного факультета Университета Цинциннати (США) создали компанию SDRC (Structural Dynamics Research Corporation). Изначально ориентированная на оказание консалтинговых услуг в области машиностроения, SDRC со временем превратилась в одного из ведущих разработчиков САПР в мире. Начав с области CAE (средств инженерного анализа) компания затем сосредоточилась и на CAD (проектирование), разработав систему I-DEAS, которая позволяла решать широкий спектр задач – от концептуального проектирования посредством каркасного и твердотельного моделирования до черчения, конечно-элементного анализа и составления программ для станков с ЧПУ. В основе САПР I-DEAS лежала подсистема твердотельного моделирования GEOMOD.

Изначально GEOMOD представляла твердые тела в виде многоугольных сеток, аппроксимирующих их оболочку. Осознав важность предложения Boeing по стандартизации NURBS, программисты SDRC с энтузиазмом взялись за реализацию NURBS в GEOMOD. Основным разработчиком алгоритмов был Уэйн Тиллер (Wayne Tiller), впоследствии ставший соавтором знаменитой монографии "The NURBS Book" .

Рис. 10. Уэйн Тиллер, президент GeomWare, соавтор "Книги NURBS"

Система I-DEAS прекратила свое существование, после того как в 2001 г. компания EDS поглотила SDRC, а Уэйн Тиллер применил полученный опыт при реализации библиотеки NLib (см. ниже).

Вклад GeomWare, IntegrityWare и Solid Modeling Solutions

Cox, M. G., 1972, The Numerical Evaluation of B-Splines, J. Inst. Mathematics and Applications, Vol. 10, pp. 134-149.

De Boor, C., 1972, On Calculation with B-Splines, J. Approximation Theory, Vol. 6, No. 1, pp. 50-62.

Doo, D., 1978, A subdivision algorithm for smoothing down irregularly shaped polyhedrons, Proceedings on Interactive Techniques in Computer Aided Design, pp. 157-165.

Lee, E. T. Y., 1981, A Treatment of Conics in Parametric Rational Bezier Form, Boeing document, Boeing, Seattle, Wash.

Piegl, L., 1991, On NURBS: A Survey, IEEE CG&A, Vol. 11, No. 1, pp. 55-71. http://www.ece.uvic.ca/~bctill/papers/mocap/Piegl_1991.pdf

Piegl, L. A., and Tiller, W., 1997, The NURBS Book, Springer.

Schoenberg, I. J., 1946, Contributions to the problem of approximation of equidistant data by analytic functions, Part A: On the problem of smoothing or graduation, a first class of analytic approximation formulas, Quart. Appl. Math. 4, 45–99.

Sederberg, T.-W., Zheng, J., Bakenov, A., and Nasri, A., 2003, T-Splines and T-NURCCs, ACM Transactions on. Graphics, 22(3), 477-484, http://cagd.cs.byu.edu/~tspline/innovation/papers/tspline.pdf

Versprille, K. J., 1975, Computer-Aided Design Applications of the Rational B-Splines Approxamation Form, doctoral dissertation, Syracuse Univ., Syracuse, N.Y.

Зачем нужно такое сложное название, как NURBS? Мы смотрим на экран и видим просто линии или просто поверхности. Зачем всё так усложнять? Дело в том, что Вам только кажется , что Вы видите точки, линии, поверхности. На самом деле, придвиньте свой нос как можно ближе к экрану. Да-да, прямо сейчас.

Вдруг оказалось, что единственное, что можно увидеть при большом увеличении – только точки, которые светятся разным цветом с различной яркостью! Это видеокарта Вашего компьютера даёт монитору информацию, каким образом отображать какую точку экрана. Видеокарте советы даёт центральный процессор (тот самый Интел инсайд или Атлон форева). А процессору вообще все Ваши точки, кривые и поверхности глубоко параллельны и фиолетовы, то есть по барабану. Главное его дело перекладывать заряд из одной ячейки в другую. Если совсем уж огрублять, то функцию процессора можно сравнить с выключателем. Тумблер вверх – есть свет, тумблер вниз нет света. Есть заряд в ячейке – единица, нет заряда – ноль. Просто этих тумблеров (ячеек) миллионы. И их комбинациями можно закодировать любой символ, цифру, ноту или пиксель. Вся информация, все программы, оперирующие этой информацией, сводится к операциям с числами в двоичной системе (из 0 и 1). То есть всё, что Вы делаете на компьютере – это совершаете вычисления при помощи функций (формул), которые составили мудрые программисты. Рисуете ли Вы, моделируете, пишите музыку или играетесь – всё это лишь иллюзия, на самом деле Вы в МАТРИЦЕ чисел, и плену обмана, созданного Вашим мозгом и глазами, впивающимися в зазеркалье экрана монитора.

Точно также и Rhino показывает Вам простые линии и поверхности, а на самом деле вычисляет формулы, график которой и выглядит в виде Вашей линии или поверхности. Помните, как в школе Вы вычисляли у доски каждую ключевую точку, через которую пройдёт линия графического представления формулы. Это Вы сами, без Рино, показывали учителю, как на самом деле мучались программисты, чтобы Вы потом без каких-либо знаний пяти математик могли думать не о них, а о том, как просто можно моделировать в 3D сложные вещи.

Так вот NURBS – это частный случай кривых Безье. N on-U niform (Н еО днородные) R ational (Р ациональные) B S plines ((Би-С плайны)частный случай кривых Безье). То есть NURBS – это такие формулы, которыми можно выразить кривые и поверхности.

Почему выделяют в названии программы именно NURBS (Читатся «нурбс»)? Потому что это ключевое отличие данного моделлера от других. В других программах трёхмерного моделирования главное действующее лицо – точка, вернее огромное число точек, связанных в полигоны (эдакие маленькие треугольные поверхности из которых складываются большие поверхности).

Если Вы имели когда-либо дело с векторной графикой, то Вам легко будет понять различие между полигональным моделированием и NURBS. Оно такое же, как и разница между векторной и растровой графикой.

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

В растровой же графике, маленькая буква состоит как бы из малюсеньких керамических плиток. Если эту букву (или другое изображение) придётся увеличивать, увеличивается лишь размер плиток. Представьте себе букву размером с дом, выложенную из плит от египетских пирамид. Грубовато смотрится, не так ли?!

Так же дело обстоит и в 3D графике. Тот же 3D Studio Max формирует модели из полигонов, а потом это дело сглаживает (грубо говоря, размазывает по экрану). Это годится лишь для отображения на экране или печати рекламы. Rhinoceros же имеет основное применение для создания точных гладких моделей для воспроизводства их на 3D принтерах или фрезерах. Если для этих целей применять 3D Studio Max, то такую модель, всю будто обрубленную, либо покусанную, придётся сначала вырастить или выточить из дорогущего материала, а потом долго, упорно и не всегда точно опиливать, обтачивать и зашкуривать готовый прототип. Нет, так не годится. Поэтому Рино сразу моделирует не полигонами (хотя и это может (Mesh – полигональные сетки)), а моделирует кривыми NURBS, всегда гладенькими, точными и красивыми, даже если их потом увеличить до размеров дома или корабля.