Логические операции и их свойства. Основные понятия курса

Булевы операции применяются к трехмерным объектам для управления их формой. С помощью булевых операций легко можно вырезать в объекте отверстие, получить деталь сложной формы и многое другое. Кроме того, булевы операции применяют, чтобы упростить геометрию объекта посредством удаления невидимых поверхностей.

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

Существует четыре основных типа булевых операций:

Union (Сложение) – операция предназначена для объединения двух исходных объектов, при этом общая область двух объектов удаляется (рис. 4.16, а );

Intersection (Пересечение) – булев объект состоит только из общей области исходных объектов (рис. 4.16, б );

Рис. 4.16. Булевы операции Union (Сложение) и Intersection (Пересечение) с участием двух объектов – бутылки и сферы

Subtraction (А – В) (Вычитание (А –Б)) и Subtraction (В – А) (Вычитание (Б –А)) – один исходный объект вырезает отверстие из другого исходного объекта (рис. 4.17);

Рис. 4.17. Булева операция Subtraction (А – В) и Subtraction (В – А) (Вычитание) с участием двух объектов – бутылки и сферы

Cut (Разрезание) – операция предназначена для разрезания одного объекта другим (рис. 4.18).

Рис. 4.18. Булева операция Cut (Разрезание) с участием двух объектов – бутылки и плоскости

Для применения булевых операций нужно сделать следующее.

1. Создать два исходных объекта и убедиться, что они пересекаются.

2. Выделить один из объектов (выделенный объект автоматически получает имя – объект А).

3. Создать составной объект Boolean (Булев) одним из следующих способов:

Выбрать команду меню Create → Compound → Boolean (Создать → Составные → Булев);

На вкладке Create (Создание) командной панели активизировать категорию создания трехмерных объектов Geometry (Геометрия), раскрыть список подкатегорий (там, где написано Standard Primitives (Стандартные примитивы)), выбрать строку Compound Objects (Составные объекты) и в свитке Object Type (Тип объекта) нажать кнопку с названием операции – Boolean (Булев). В свитке Parameters (Параметры) в области Operands (Операнды) появится имя операнда А.

4. Установить переключатель Operation (Операция) в положение, соответствующее нужной операции.

5. В свитке Pick Boolean (Выбрать булев объект) нажать кнопку Pick Operand B (Выбрать операнд Б), после чего в любом окне проекции щелкнуть на втором исходном объекте.



Если после применения операции понадобится изменить параметры операндов (например, изменить радиус сферы), следует на командной панели переключиться на вкладку Modify (Редактирование), в стеке модификаторов щелкнуть на плюсике слева от названия объекта Boolean (Булев). В появившемся списке перейти на единственный уровень редактирования – Operands (Операнды), затем в свитке Parameters (Параметры) в списке Operands (Операнды) щелкнуть на соответствующей строке. В стеке модификаторов под строкой Boolean (Булевы) появится строка-идентификатор соответствующего операнда. Щелчок на этой строке отобразит параметры операнда (рис. 4.19).

Рис. 4.19. Управление параметрами операндов осуществляется в стеке модификаторов

По умолчанию при выполнении булевой операции исходный объект Б удаляется. Однако если вы хотите, чтобы он оставался в сцене в том виде, в котором он присутствовал до булевой операции, необходимо до ее выполнения изменить положение переключателя в свитке Pick Boolean (Выбрать булев объект). Этот переключатель имеет четыре положения:

Move (Перемещение) – после выполнения булевой операции объект Б удаляется. По умолчанию используется именно это положение;

Copy (Независимая копия объекта) – булева операция выполняется с копией объекта Б, а сам объект остается в сцене;

Instance (Привязка) – булева операция производится с зависимой копией объекта Б. При этом исходный объект остается в сцене, а изменение параметров одного из объектов (исходного или булевого) влечет за собой изменение параметров другого;

Reference (Подчинение) – создается копия объекта Б, которая частично зависит от исходного объекта.

Но в терминологии программирования на языках высокого уровня в названиях битовых операций присутствуют прилагательные битовый , побитовый (например: «побитовое логическое И », оно же «побитовое умножение»), поразрядный .

В некоторых языках программирования названия операторов, соответствующих логическим и побитовым логическим операциям, похожи. Кроме того, язык программирования может допускать неявное приведение числового типа к логическому и наоборот. В таких языках программирования необходимо внимательно следить за использованием логических и побитовых операций, перемешивание которых может привести к ошибкам. Например, в C++ результатом выражения «2 && 1» (логическое И ) является булево значение true , а результатом выражения «2 & 1» (побитовое И ) - целое значение 0 .

Побитовое отрицание (NOT) [ | ]

Побитовое отрицание (или побитовое НЕ , или дополнение ) - это унарная операция , действие которой эквивалентно применению логического отрицания к каждому биту двоичного представления операнда. Другими словами, на той позиции, где в двоичном представлении операнда был 0, в результате будет 1, и, наоборот, где была 1, там будет 0. Например:

НЕ 01
10

Побитовое «И» (AND) [ | ]

Второе название - тем, что действительно является сложением в кольце вычетов по модулю два, из чего следуют некоторые интересные свойства. Например, в отличие от вышеописанных «И» и «ИЛИ», данная операция является обратимой, или инволютивной: (x ⊕ y) ⊕ y = x {\displaystyle (x\oplus y)\oplus y=x} .

Также данная операция может называться «инверсией по маске», то есть у исходного двоичного числа инвертируются биты, которые совпадают с 1 в маске.

Другие побитовые логические операции [ | ]

В распространённых языках программирования встроенными средствами реализуются только четыре побитовые логические операции: И, ИЛИ, НЕ и исключающее ИЛИ . Для задания произвольной побитовой логической операции вполне достаточно перечисленных, и, более того, как следует из теории булевых функций, можно ограничиться ещё меньшим набором базовых операций. Есть также языки программирования, где существует встроенная возможность выполнить любую бинарную логическую операцию побитово. Например, в PL/I есть встроенная функция BOOL, третий аргумент которой предназначен для указания произвольной логической операции, которую необходимо побитово применить к первым двум аргументам .

Битовые сдвиги [ | ]

К битовым операциям также относят битовые сдвиги. При сдвиге значения битов копируются в соседние по направлению сдвига. Различают несколько видов сдвигов - логический , арифметический и циклический , в зависимости от обработки крайних битов.

Также различают сдвиг влево (в направлении от младшего бита к старшему) и вправо (в направлении от старшего бита к младшему).

Логический сдвиг [ | ]

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

Арифметический сдвиг [ | ]

Арифметический сдвиг аналогичен логическому, но число считается знаковым, представленным в дополнительном е. Так, при правом сдвиге старший бит сохраняет своё значение. Левый арифметический сдвиг идентичен логическому.

Арифметические сдвиги влево и вправо используются для быстрого умножения и деления на 2.

Циклический сдвиг [ | ]

При циклическом сдвиге, значение последнего бита по направлению сдвига копируется в первый бит (и копируется в бит переноса).

Также различают циклический сдвиг через бит переноса - при нём первый бит по направлению сдвига получает значение из бита переноса, а значение последнего бита сдвигается в бит переноса.

В языках программирования [ | ]

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

Язык НЕ И ИЛИ Искл. ИЛИ Сдвиг влево Сдвиг вправо Другие
/С++ , Java , , Ruby , Python ~ & | ^ << >>
Pascal not and or xor shl shr
Kotlin inv
PL/I INOT IAND IOR IEOR BOOL
¬ & | ¬
Prolog \ /\ \/

В теории сложности алгоритмов [ | ]

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

Связь с другими науками [ | ]

Битовые операции и математическая логика [ | ]

Битовые операции очень близки (хотя и не тождественны) логическим связкам в классической логике . Бит можно рассматривать как логическое суждение - его значениями являются 1 «истина» и 0 «ложь». При такой интерпретации известные в логике связки конъюнкции , дизъюнкции , импликации , отрицания и другие имеют представление на языке битов. И наоборот, битовые операции легко описываются на языке исчисления высказываний .

Однако, связкам математической логики более соответствуют логические операции в том числе в программировании, нежели собственно битовые операции.

Обобщение операций на булеву алгебру [ | ]

Вместо одиночных битов мы можем рассмотреть векторы из фиксированного количества битов (в программировании их называют регистрами), например, байты . В программировании регистры рассматривают как двоичное разложение целого числа: b = b 0 + 2 b 1 + 2 2 b 2 + . . . + 2 N − 1 b N − 1 {\displaystyle b=b_{0}+2b_{1}+2^{2}b_{2}+...+2^{N-1}b_{N-1}} , где N - количество битов в регистре.

Тем не менее, ничто не мешает рассматривать эти регистры именно как битовые векторы и проводить булевые операции покомпонентно (бит номер k значения есть результат операции от битов номер k аргументов). Кстати, математически говоря, булевы операции распространяются таким образом на произвольную булеву алгебру . Таким образом мы получаем операции побитового И, ИЛИ, НЕ, искл. ИЛИ и т. д. Как арифметические, данные операции не обладают хорошими свойствами за исключением побитового НЕ, которое для чисел в дополнительном е совпадает с вычитанием из −1 (~x == -1-x). Однако, они очень полезны в программировании.

2-адическая интерпретация [ | ]

Целое число, записанное (в дополнительном е) в бесконечный (в сторону положительных степеней двойки) двоичный регистр является естественным объектом для теории p-адических чисел при p = 2 {\displaystyle p=2} . Множество целых 2-адических чисел (то есть произвольных бесконечных битовых последовательностей) может быть рассмотрено как булева алгебра точно так же как и множество значений битового регистра конечной длины. Все вышеперечисленные битовые операции оказываются непрерывными отображениями . Хотя практическое программирование не располагает регистрами бесконечной длины, это не мешает использовать данный теоретический факт в криптографии для создания быстродействующих алгоритмов шифрования.

Битовые операции как основа цифровой техники [ | ]

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

Практические применения [ | ]

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

  1. увеличение размера регистров, в которых битовые операции выполняются не по одной, а сразу на множестве 8, 16, 32, 64 битах
  2. экспериментальные устройства, где обобщают битовые операции с двоичной системы, на троичные и прочие системы счисления (так например, разработана теория работы с четверичной системой (

БУЛЕВА ОПЕРАЦИЯ

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

Задание булевой операции

Для задания булевой операции используется команда “3B:Создать Булеву операцию” . Вызов команды:

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

Выбрать несколько операций.

Каждая опция, определяет способ создания булевой операции. Существует два способа

- создание булевой операции на основе двух тел (опция )

- создание булевой операции на основе нескольких тел (опция )

При вызове команды всегда активизирована опция “Выбрать первое тело”.

Существует еще один способ вызова команды: Подведите курсор к одной из операций модели и

нажмите , в появившемся меню выберите пункт “Создать”. Появится список возможных команд, которые можно вызвать при выборе операции. Выберите пункт “Создать булеву операцию”, при этом выбранное тело будет являться первым выбранным элементом команды.

Трёхмерное моделирование

В этом случае можно создать операцию только на основе двух тел.

Создание булевой операции на основе двух тел

При выполнении булевой операции на основе двух тел, необходимо выполнить следующие действия:

1. Выбрать первое тело.

2. Выбрать второе тело.

3. Выбрать тип операции (сложение, вычитание, пересечение).

4. Завершить ввод.

Выбор первого тела осуществляется с помощью опции

Выбрать первое тело.

После выбора первого тела становятся доступны следующие опции

Выбрать второе тело.

Отменить выбор второго операнда булевой операции.

Булева операция

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

На нижнем рисунке слева показан результат операции вычитания, а справа – пересечения.

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

Создание копий исходных операций

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

Создать копию исходных операций.

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

Трёхмерное моделирование

Если была вызвана опция "Создать копию", то перед выполнением булевой операции производится выполнение специального действия. В результате этого действия создаются тела - копии исходных тел, которые в дальнейшем можно использовать. Поясним вышесказанное на примере. На рисунке показаны исходные 2D построения и две созданные булевы операции.

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

Создание булевой операции на основе нескольких тел

После вызова команды в автоменю становится доступной опция

Выбрать несколько операций.

Данная опция устанавливает режим создания булевой операции на основе нескольких тел. А также делает доступной опцию

С помощью этой опции нужно поочередно выбрать несколько тел, которые будут принимать участие в булевой операции. Причем первое выбранное тело будет являться первым операндом булевой операции.

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

Отменить выбор всех операций можно опцией

<К> Отменить выбор операций.

Термин «булева операция» в математике используется для обозначения операций сравнения между множествами. В 3D Studio MAX аналогичные операции сравнения применяются в отношении совмещающихся или перекрывающихся геометрических объектов сцены. Булева операция осуществляется путем создания булева составного объекта из двух существующих объектов — данные объекты называются операндами и обязательно должны пересекаться в некоторой области пространства. Операнды представлены в виде отдельных объектов на всей стадии редактирования булева составного объекта, что позволяет при необходимости выбирать и модифицировать их и даже выполнять анимацию.

Теоретические основы булева моделирования

В 3D Studio MAX предусмотрены пять типов булевых операций (рис. 1):

  • Union (Объединение) — результатом операции является объект, который получается вследствие объединения двух исходных объектов; при этом части объектов, оказавшиеся внутри общего внешнего объема, удаляются;
  • Intersection (Пересечение) — полученный объект является результатом пересечения двух исходных объектов; при этом части объектов, оказавшиеся вне общего внутреннего объема, удаляются;
  • (Вычитание (A-B)/Вычитание (B-A)) — результатом является объект, полученный посредством вычитания одного объекта из второго, все части которого отсекаются объемом первого и удаляются;
  • Cut (Вырезание) — полученный объект является результатом вырезания на поверхности первого объекта в местах пересечения со вторым объектом соответствующих отверстий и проемов.

Булевы объекты являются разновидностью составных объектов и поэтому принадлежат к группе Compound Objects (Составные Объекты) из категории Geometry (Геометрия) на панели Create (Создать). Технология создания булева объекта состоит из двух этапов — предварительной подготовки исходных объектов и последующего применения к ним требуемой булевой операции, причем перед применением последней один из исходных объектов обязательно должен быть выделен, иначе операция Boolean окажется недоступной.

Существует несколько методов создания булевых объектов:

  • Copy (Копия) — при создании булева объекта сохраняется оригинал операнда В;
  • Move (Перенос) — при создании булева объекта оригинал операнда В не сохраняется;
  • Instance (Образец) — создается Boolean-объект и одновременно сохраняется копия операнда В; при изменении копии булев объект будет изменяться, а при изменении булева объекта будет меняться копия;
  • Reference (Ссылка) — создается Boolean-объект и одновременно сохраняется копия В-операнда; если при этом изменять оригинал, то Boolean-объект тоже изменится; если же изменять Boolean-объект, то оригинал при этом изменяться не будет.
  • Результат булевой операции не всегда оказывается удачным, поэтому следует соблюдать ряд условий:
  • исходные объекты должны пересекаться в некоторой области пространства, причем характер пересечения нужно тщательно отрегулировать в окнах проекций;
  • исходные объекты должны иметь достаточное количество сегментов и быть сглаженными, иначе результат окажется слишком грубым или совсем не соответствующим задуманному;
  • каркасы должны быть построены правильно — грани, совместно использующие ребро, должны совместно использовать и две вершины, а ребро может совместно использоваться только двумя гранями. Для редактируемых сеток может потребоваться объединение совпадающих вершин вручную в режиме Edit Mesh .

Для примера попробуйте создать булеву операцию вычитания на примере трех перекрывающихся сфер (рис. 2). Выделите центральную сферу, на панели Create установите категорию объектов Geometry , в списке типов объектов укажите тип Compound Objects (Составные Объекты), щелкните по кнопке Boolean и установите операцию Subtraction (A-B) . Обратите внимание, что в начальный момент оказывается определенным лишь операнд A (рис. 3), поэтому для указания операнда B щелкните по кнопке Pick Operand B (Выбрать операнд B), а затем укажите мышью самую большую из сфер. В итоге в сфере, использованной в качестве операнда A, появится выемка (рис. 4). Если операнд B был задан неправильно, не следует сразу же вновь щелкать по кнопке Pick Operand B и указывать другой объект (хотя программа это позволяет), поскольку объект, неудачно выбранный как операнд B , не восстановится (рис. 5). В таких ситуациях нужно сначала отменить предыдущий выбор операнда B командой Undo и только потом сделать новый выбор.

Моделирование при помощи булева объединения

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

Для примера попробуем последовательно объединить три стандартных примитива — две сферы и цилиндр — в форму гантели. Создайте исходные объекты и разместите их по отношению друг к другу нужным образом (рис. 6 и 7). Выделите цилиндр, активируйте булеву операцию Union , для определения операнда B щелкните по кнопке Pick Operand B (Выбрать операнд B ), а затем укажите мышью одну из сфер. В итоге цилиндр и сфера станут единым объектом. Выделите объединенный объект, активизируйте режим создания булевых объектов, щелкните по кнопке Pick Operand B (Выбрать операнд B ) и укажите вторую сферу. Результатом станет получение одного единственного булева объекта (рис. 8).

Моделирование при помощи булева вычитания

Булевы операции вычитания наиболее широко используются при моделировании. Чаще всего они применяются для создания закруглений и углублений на первом из исходных объектов, а также выемок и сквозных отверстий в нем, и потому второй объект условно можно считать своеобразной стамеской или фрезой, которая создает желобок на первом объекте или выбирает какую-то его часть. В качестве «режущих инструментов» могут быть задействованы самые разные объекты, в частности объекты, полученные из криволинейных сплайнов путем лофтинга или вращения.

На первом этапе воспользуемся булевой операцией вычитания для формирования цилиндрического отверстия внутри шара. Создайте исходные объекты в виде шара и цилиндра (радиус сечения цилиндра должен быть меньше радиуса шара, а его длина — больше радиуса шара) и выровняйте их друг в отношении друга по осям X, Y и Z, применив операцию Align (Выровнять) (рис. 9). Проведите рендеринг и сразу же скорректируйте параметры объектов так, чтобы они оказались достаточно гладкими, особенно в области пересечения; если этого не сделать, то созданный булев объект тоже не будет иметь надлежащей гладкости. В данном случае видно (рис. 10), что степень гладкости требуется увеличить — это достигается путем повышения плотности объектов: увеличения количества сегментов и сторон сегментов и уменьшения размера сегментов (рис. 11). В то же время при работе со сложными моделями для ускорения процесса моделирования в ряде случаев лучше увеличивать плотность объектов, задействованных в качестве операндов, не перед созданием булевой операции, а после — в ходе редактирования операндов на уровне объектов.

Выделите цилиндр, установите режим создания булевых объектов, установите операцию Subtraction (B-A) (Вычитание B-A), для указания операнда B щелкните по кнопке Pick Operand B (Выбрать операнд B ) и укажите сферу. Это приведет к удалению внутренней части сферы точно по размеру исходного цилиндра таким образом, что в сфере появится сквозное отверстие (рис. 12).

Формируемые при помощи булева вычитания отверстия могут иметь самую разную форму, а результат зависит не только от размеров и формы объектов, но и от положения их в отношении друг друга, а также от того, какой из объектов был указан первым. Возьмите в качестве исходных объектов куб и шар и разместите их показанным на рис. 13 образом. Выделите куб, установите в режиме создания булевых объектов операцию Subtraction (A-B) и в качестве операнда B укажите сферу — результатом станет появление в ней соответствующего углубления (рис. 14), а потом сохраните результат (он нам позже потребуется). Отмените созданную булеву операцию и примените к исходным объектам булево вычитание Subtraction (A-B) , но в качестве первого операнда укажите сферу — и вместо куба с углублением итогом операции окажется шар, в котором как бы вырезана одна из его четвертей (рис. 15). Стоит отметить, что для получения того же самого результата совсем не обязательно было менять местами операнды: с таким же успехом можно было вместо операции Subtraction (A-B) выбрать операцию Subtraction (B-A) . Подобная взаимозамена операций Subtraction (A-B) и Subtraction (B-A) очень удобна, так как при неверном выборе операнда A не потребуется отменять операцию, а достаточно лишь переключиться с одной операции вычитания на другую.

Как было отмечено, форма получающейся выемки определяется вторым операндом. Попробуйте вместо шара создавать выемки и углубления другими объектами. Например, при применении объекта Hose (Шланг) (рис. 16) может быть получена резьбообразная выемка (рис. 17). Если же взять в качестве операнда B граненую призму Gengon (рис. 18), то выемка окажется многогранной (рис. 19), а при использовании веретена Spindle — скошенной (рис. 20 и 21) и т.п.

Булева операция Intersection (Пересечение) является обратной к булевым операциям Subtraction (A-B)/Subtraction (B-A) (Вычитание (А-В)/Вычитание (В-А), так как получаемые с ее помощью булевы объекты представляют собой фрагменты операндов A и B, которые удаляются при операции булева вычитания, если ее провести в отношении тех же самых объектов. Возьмите в качестве исходных рассмотренные выше куб и шар, выберите куб в качестве операнда A , а затем проведите булеву операцию Intersection (Пересечение) — результатом будет получение четверти шара, которая ранее оказывалась вырезанной в ходе операции Subtraction (B-A) (рис. 22).

Рис. 22. Исходные объекты и булевы объекты при операциях Intersection и Subtraction (В-А)

Более интересные варианты поверхностей создаются при использовании в качестве операнда B скрученных объектов. Можно попробовать получить подобный объект на основе примитива Torus , в исходном состоянии имеющего такой вид, как на рис. 23, а после скручивания (параметр Twist ) на 360° — как на рис. 24. Дополнительно создайте цилиндр, разместите объекты, как показано на рис. 25, и при выполнении булевой операции Subtraction (A-B) укажите цилиндр как операнд A — результат представлен на рис. 26.

Создание вложенных булевых объектов

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

Для примера возьмите ранее созданный и сохраненный булев объект (рис. 27), создайте еще один цилиндр и разместите его так, как показано на рис. 28. Выделите исходный булев объект (для этого придется выйти из списка Compound Objects (Составные объекты) путем выбора геометрии другого типа), активируйте булеву операцию вычитания Subtraction (A-B) и вторым операндом укажите отдельный цилиндр — в кубе появится еще одна выемка (рис. 29). Полученный булев объект можно использовать для новой булевой операции, например вырезав в нем пирамидой треугольную выемку (рис. 30 и 31).

Рис. 29. Результат первой вложенной булевой операции

Редактирование булева объекта

У созданного булева объекта можно изменить цвет; объект можно перемещать, масштабировать и поворачивать обычным образом. При необходимости в области параметров на панели Modify можно откорректировать имена операндов, установить способ отображения булева объекта и определить особенности его обновления при редактировании. Работая со сложными моделями, которые долго перерисовываются, иногда лучше отказаться от автоматического режима обновления в пользу ручного режима Manually (Вручную) — тогда для перерисовки модели нужно будет щелкать по кнопке Update (Обновить).

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

Кроме того, булев объект можно редактировать на уровне операндов. Рассмотрим это на примере изучения взаимосвязи между положением операндов по отношению друг к другу и внешним видом булева объекта. Создайте в качестве исходных объектов два цилиндра и разместите их так, как показано на рис. 33. Выделите меньший из объектов, установите булеву операцию вычитания Subtraction (B-A) и вторым операндом укажите другой цилиндр, вследствие чего в большем цилиндре появится отверстие (рис. 34). Данное отверстие не будет сквозным, что обусловлено исходным положением цилиндров.

Полученный результат можно изменить, причем для этого даже не потребуется отменять булеву операцию, поскольку операнды булева объекта в определенной степени редактируемы, причем независимо друг от друга: их можно выделять, перемещать, масштабировать и поворачивать по отношению друг к другу, меняя таким образом сам булев объект. Редактирование операндов осуществляется в режиме Sub-Object , для перехода в который нужно при выделенном булевом объекте раскрыть свиток Boolean панели Modify , подсветить строку Operands , а затем указать редактируемый операнд (рис. 35) и произвести над ним нужные манипуляции. При перемещении операнда или любой другой манипуляции над ним в проекции Perspective будет сразу же отображаться обновленный булев результат. Для примера переместите в окне проекции Left операнд A влево — по мере перемещения глубина отверстия будет увеличиваться (рис. 36), а при обратном перемещении — уменьшаться (рис. 37). Если продолжить перемещение операнда A влево, то в конце концов отверстие станет сквозным (рис. 38), а при обратном движении превратится в едва заметную выемку (рис. 39).

Аналогичным способом можно не только перемещать и поворачивать операнды, но и менять их размеры. Попробуйте для операнда A провести масштабирование инструментом Select and Uniform Scale —— таким способом можно менять размеры выемки, например сделать ее очень большой по диаметру (рис. 40) или, наоборот, очень маленькой. Для того чтобы вернуться из режима редактирования операндов в режим редактирования булева объекта, нужно подсветить в палитре Modify строку Boolean — после этого операции масштабирования, перемещения и поворота будут относиться ко всему булеву объекту в целом.

Операнды можно редактировать и на уровне объектов: менять длину, ширину, высоту, число сегментов и т.п. Чтобы перевести булев объект в режим редактирования на уровне объекта, на палитре Modify следует активировать строку Operands , выбрать нужный операнд, а затем в списке Boolean щелкнуть на строке под строкой Operands , где, например, в случае использования примитивов будет фигурировать имя примитива в общем виде (рис. 41).

Примеры объектов, полученных с использованием булева моделирования

Пиала

Создайте в качестве исходных объектов шар и параллелепипед (Box ) и разместите их так, как показано на рис. 42. Шар в окне Perspective не виден, так как его верхняя часть находится внутри параллелепипеда, а нижняя оказалась скрыта. Выделите параллелепипед и примените к нему булеву операцию вычитания Subtraction (B-A) , указав шар вторым операндом, — в итоге останется только нижняя половина шара (рис. 43). Выделите созданный булев объект, конвертируйте его в редактируемую сетку, выбрав из контекстного меню команду Convert To=>Convert to Editable Mesh (Конвертировать в => Конвертировать в редактируемую сетку), и перейдите в режим редактирования полигонов. Поскольку работа предстоит довольно кропотливая, перейдите в режим отображения одной проекции, щелкнув на кнопке Min/Max Toggle (рис. 44).

Теперь потребуется последовательное применение операций Bevel , масштабирования и Extrude (Вытеснение). Вначале сделайте фаску, установив значение справа от Bevel (Фаска) равным примерно –1 (рис. 45). Затем примените операцию масштабирования и уменьшите выделенную часть объекта, а потом удалите самый верхний фрагмент половины шара посредством операции Extrude (рис. 46). Нанесите небольшую фаску для скашивания удаляемой поверхности, еще раз проведите масштабирование и примените операцию Extrude — и действуйте так до тех пор, пока заготовка не станет напоминать грубую чашу (рис. 47). Для сглаживания поверхности примените модификатор MeshSmooth (Сглаживание сетки) — возможно, в итоге пиала станет напоминать представленную на рис. 48.

Примерно такую же пиалу можно получить и более быстрым способом, но тоже с применением булевых операций. Возьмите в качестве основы полученную выше в ходе булева вычитания нижнюю половину сферы (рис. 49), создайте ее копию, потом немого уменьшите ее в размерах инструментом Select and Uniform Scale , выровняйте по осям X, Y и Z, щелкнув по кнопке Align (рис. 50), а затем слегка переместите вверх. Выделите меньшую полусферу и создайте новый булев объект с помощью булева вычитания Subtraction (B-A) , указав в качестве операнда B большую полусферу (рис. 51). Полученная после сглаживания пиала представлена на рис. 52.

Волчок

Создайте конус (Cone ) (рис. 53). Сформируйте объект Box (Коробка) и выровняйте его командой Align по конусу по осям X, Y и Z (рис. 54). Сделайте копию второго объекта, а затем разместите объекты, как показано на рис. 55. Выделите конус, установите в режиме создания булевых объектов операцию Subtraction (A-B) и в качестве операнда B укажите объект Box 01 (рис. 56). Затем повторите данную операцию, но операндом A в этом случае станет созданный перед этим булев объект, а операндом B — объект Box 02 (рис. 57). Создайте новый конус с параметрами, указанными на рис. 58, а затем выровняйте его по булеву объекту по осям X, Y и Z (рис. 59).

Выделите булев объект и сделайте его зеркальное отображение по оси Z с формированием копии, щелкнув по кнопке Mirror Selected Object (Зеркальное отображение выделенного объекта), и настройте параметры зеркального отображения (рис. 60). Точно таким же образом сделайте зеркальную копию конуса — получится волчок (рис. 61).

Ключ

Попытаемся создать имитацию ключа, предварительно сформировав все его детали путем лофтинга, а затем объединив их при помощи булевой операции. Создайте серию сплайнов примерно такого вида, как на рис. 62: прямоугольник предназначен для использования в качестве сечения loft-объекта, а все остальные сплайны будут играть роль пути. Обратите внимание, что при создании лофт-объектов в данном случае нужно выбрать метод указания сечения, а не пути — иначе после их получения придется потратить много времени на размещение loft-объектов нужным образом. Выделите первую окружность, щелкните по кнопке Geometry Create Compound Objects Object Type (Тип объекта) щелкните на кнопке Loft (Лофтинговый), затем по кнопке Get Shape (Указать путь), и укажите мышью прямоугольник. Выделите вторую окружность и вновь создайте лофтинговый объект, указав в качестве сечения тот же самый прямоугольник. Точно таким же способом создайте лофтинговые объекты для всех остальных сплайнов (рис. 63).

Теперь нужно превратить отдельные фрагменты ключа в единый объект, что проще всего сделать с помощью создания вложенного булева объекта. Выделите первый loft-объект, активизируйте булеву операцию Union , щелкните на кнопке Pick Operand B и укажите второй loft-объект. Создайте новый булев объект, задействовав полученный булев объект как операнд A, а один из loft-объектов — как операнд B и продолжайте до тех пор, пока не объедините все фрагменты ключа. Окончательный результат показан на рис. 64.

Оконная рама

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

Кружка с ручкой

Для основы кружки создайте цилиндр (рис. 67) и конвертируйте его в редактируемую сетку, выбрав из контекстного меню команду Convert to=>Convert to Editable Mesh (Конвертировать => Конвертировать в режим редактирования сетки). Активируйте режим редактирования вершин Vertex и выделите внутренние вершины только верхнего сечения (рис. 68) — проще всего выделить все внутренние вершины (верхнего и нижнего сечений) на проекции Top , а затем при нажатой клавише Alt исключить вершины нижнего сечения на проекции Front . Перетащите на проекции Front выделенные вершины инструментом Select and Move вниз таким образом, чтобы сформировалась внутренняя пустая полость кружки (рис. 69). Не снимая выделения, активируйте инструмент Select and Uniform Scale и отмасштабируйте выделенную область так, чтобы внутренние вершины совпали в вершинами промежуточного яруса (рис. 70), а внутренняя полость кружки стала одинаковой по диаметру как в верхней части кружки, так и в нижней.

На проекции Top выделите внутренние вершины верхнего и среднего сечений (рис. 71) — это удобнее осуществить, вначале выделив все внутренние вершины с областью выделения Circular Selection Region , а затем исключив вершины нижнего сечения при нажатой клавише Alt областью выделения Rectangular Selection Region . Отмасштабируйте их на проекции Top так, чтобы радиус, на котором они расположены, приблизился к внешнему радиусу, а толщина стенки кружки уменьшилась (рис. 72). На проекции Front выделите оказавшиеся в ходе масштабирования за пределами объекта вершины верхнего сечения (рис. 73) и переместите их вниз (рис. 74). Аналогичную операцию проведите в отношении внутренних вершин нижнего сечения (рис. 75).

Для создания ручки к кружке активизируйте категорию объектов Shapes (Формы) командной панели Create (Создание), в списке разновидностей объектов укажите тип Splines (Сплайны) и инструментом Line (Линия) постройте криволинейный сплайн (рис. 76), который будет использован как путь при построении лофтингового объекта. Создайте эллипс для использования в качестве сечения loft-объекта. Выделите эллипс, щелкните по кнопке Geometry (Геометрия) командной панели Create (Создать) и выберите в раскрывающемся списке разновидностей объектов вариант Compound Objects (Составные объекты). В свитке Object Type (Тип объекта) щелкните по кнопке Loft (Лофтинговый), потом по кнопке Get Path (Указать путь) и укажите мышью предварительно созданный сплайн пути. Поместите созданную ручку на ее место, отрегулировав ее положение на всех проекциях (рис. 77). Рассмотрев объект со всех сторон, вы увидите, что некоторые фрагменты ручки выступают в полости кружки, а потому их стоит удалить. Для этого конвертируйте ручку в режим редактируемой сетки, выделите лишние вершины (рис. 78) и нажмите клавишу Del .

Чтобы кружка и ручка стали единым целым, нужно объединить их при помощи булевой операции. Выделите кружку, установите выполнение операции Union , щелкните по кнопке Pick Operand B , а затем по ручке — объекты объединятся. При этом на панели Modify будет видно, что исходными элементами булевой операции является объект типа Editable Mesh (Редактируемая сетка) и loft-объект (рис. 79). Подберите для булева объекта нужные параметры сглаживания и проведите рендеринг — линия соединения ручки с кружкой станет практически незаметной (рис. 80).

Головка для накидного гаечного ключа

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

Создайте два цилиндра и соедините их между собой булевой операцией объединения (рис. 81). Затем создайте два сплайна — звезду и линию (рис. 82), выровняйте звезду относительно большего цилиндра по осям X, Y и Z (рис. 83). Создайте loft-объект, указав линию в качестве пути, отрегулируйте его положение относительно объекта из цилиндров (рис. 84). Вырежьте соответствующую полость из большого цилиндра, выделив многогранный лофтинговый объект, активировав булеву операцию вычитания Subtraction (A-B) и указав цилиндры в качестве операнда B , в результате чего внутри большого цилиндра появится многогранная полость (рис. 85).

Создайте параллелепипед, ширина и высота которого одинаковы и по размеру немного меньше диаметра вырезанной полости. Поместите его внутрь большего цилиндра и выровняйте по осям X и Z (рис. 86). На основе уже созданного булева объекта и параллелепипеда сформируйте вложенный булев объект, вырезав параллелепипедом соответствующую полость внутри большого цилиндра (рис. 87). Затем создайте цилиндр с меньшим радиусом, чем радиус меньшего из уже имеющихся цилиндров, поместите его внутрь меньшего цилиндра и выровняйте по осям X и Z (рис. 88). Вырежьте данным цилиндром полость внутри меньшего из цилиндров вложенного булева объекта при помощи операции булева вычитания и получите деталь, представленную на рис. 89, которая будет иметь примерно такой же вид, как головка для накидного гаечного ключа.

Моделирование с помощью булевых операций - это общая и часто используемая методика. Булевы операции весьма близки к традиционным методам создания скульптур и моделирования. В 3D Studio MAX булево моделирование становится еще более полезным за счет реализации составного булевого объекта. В отличие от модификатора моделирования составной булев объект состоит из двух объектов, называемых операндами, которые представляют булеву операцию. Эти операнды остаются в виде объектов столько, сколько необходимо, и обеспечивают возможность доступа к своим параметрам и стекам модификаторов.

Составной булев объект отличается от многих программных понятий булевых операций, поскольку он не изменяет на постоянной основе формы, определяющие геометрию операндов. Позже эту геометрию можно перемещать, переопределять и производить обмен. Поскольку операнды остаются объектами, с ними можно взаимодействовать как с любым другим объектом. Для них можно даже выполнять анимацию, создавая поразительные эффекты. Затененные видовые окна 3DS МАХ позволяют видеть результат булевой операции в случае изменения операндов. Последнее является преимуществом интерактивного режима работы и вызывает ощущение, что один объект используется для вырезания другого. Оставаясь весьма полезными и развлекательными, сложность булевых операций может возрасти при вложении их одна в другую. В этой главе приводится информация, позволяющая упростить использование булевых операций. Внимание уделяется:

  • Основам булевых операций и способам увеличения их интерактивности
  • Работе со вложенными булевыми объектами
  • Использованию различных булевых операций для создания скульптур и моделирования
  • Соображениям, которые необходимо учитывать для успешного выполнения булевых операций

Основы булевых операций

Как и для многих терминов компьютерной графики, термин "булева" происходит от имени человека, который ввел это понятие (в данном случае это Джордж Буль). В математике термин "булева" появился для обозначения операции сравнения между множествами; в 3D Studio MAX подобное сравнение выполняется между геометрическими объектами. Хотя булева операция выглядит во многом похожей на модификатор, она находится на панели Create, а не на панели Modify, поскольку выполняется определение нового объекта из двух существующих (аналогично созданию loft- или morph-объектов). Булева операция в 3D Studio MAX выполняется путем создания булевого составного объекта из двух существующих объектов, которые называются операндами , при этом выполняются следующие шаги:

  1. Выберите начальный объект для булевой операции.
  2. Выберите Compound Objects (составные объекты) из списка выборки Geometry в панели Modify и затем щелкните на кнопке Boolean.
    Выбранный объект становится операндом А для составного булевого объекта. Теперь можно выбрать операнд В.
  3. Выберите требуемый тип операции (Operation:).
  4. Щелкните на Pick Operand В (выбрать операнд В) и затем выберите второй объект.
    Объекты сравниваются для определения их действительности (с точки зрения выполнения булевой операции) и, если они действительны, булева операция выполняется.
    Теперь можно изменить тип операции и увидеть различные булевы результаты.

Типы операции подобны многим традиционным методам. Объединение соединяет объекты подобно работе с глиной; при вычитании один объект вырезается из другого, как в скульптуре; пересечение оставляет то, что должно было бы быть вырезано или выбито из вычитания. Объединение и вычитание всегда возвращают одинаковый результат независимо от порядка выбора операндов. Предусмотрены две опции (А-В и В-А), поэтому при неправильном начальном выборе можно быстро переключиться. Результаты этих основных операций показаны на рисунке 11.1.

ПРЕДУПРЕЖДЕНИЕ Можно щелкнуть на кнопке Pick Operand В и выбрать другой Operand В произвольное количество раз. При выборе нового операнда В первоначальный операнд со сцены удаляется. При выборе в качестве операнда В неправильного объекта щелкните на кнопке Undo перед выбором другого операнда В.

Булевы выражения в качестве составных объектов

Чрезвычайная гибкость булевых операций в 3DS МАХ состоит в том, что объекты, содержащие булевы операнды, по-прежнему существуют как объекты. Каждый операнд сохраняет свой первоначальный стек Edit History (отредактировать историю) и его можно модифицировать из панели Command. Операнды можно даже трансформировать на уровне подобъекта. На рисунке 11.2 показан результат в Track View после создания булевого объекта.

Архитектура ссылок и экземпляров 3DS МАХ демонстрирует свою мощь при работе с булевыми объектами. При первом создании булевого составного объекта можно выбирать опцию перемещения, создания копии, экземпляра или ссылки объекта, выбранного в качестве операнда В. Опцией по умолчанию является Move (переместить) и кажется, что она создает явное действие, поскольку остается только булев результат. Оба объекта, выбранные для булевой операции, теперь являются операндами подобъектов. Остальные опции выполняют булев результат с копией, экземпляром или ссылкой на выбранный объект. Во всех трех случаях объект, выбранный для операнда В, остается без изменений, а булев результат получается с использованием нового объекта в качестве операнда. В таких случаях может показаться, что ничего не произошло, до тех пор пока не переместить или не скрыть один из этих двух объектов.

ПРИМЕЧАНИЕ Из объекта, выбранного в качестве операнда В, удаляется любая анимация трансформации, в то время как операнд А (первоначальный объект) оставляет анимацию трансформации. Если операнд А имеет анимацию трансформации, для нового статического операнда используется текущее расположение кадра, его позиция и масштаб.

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

СОВЕТ Чтобы создать экземпляр из объекта, который уже является операндом, войдите в Track View. Скопируйте определение объекта операнда (указано синим кружком) в буфер обмена и вставьте его в определение другого объекта в виде экземпляра. Этот метод можно также использовать в обратном порядке, полностью переопределяя геометрию операндов, например путем изменения всех квадратных отверстий на круглые.

После создания булевого объекта можно заменить операнд В из панели Modify булевого объекта с теми же самыми выборами, предоставленными при создании. Используйте эту опцию осторожно, поскольку она уничтожает со сцены первоначально выбранный операнд В. Уничтожение оригинала может создать проблему при первоначальном использовании опции Move и представлении геометрии, которая уже не существует в виде отдельного объекта. Выбор другого операнда - это то же самое, что и замена определения объекта операнда в Track View, за исключением случая, когда необходимо сделать ссылку, которая не присутствует в Track View.

После создания булевого объекта можно вернуться к каждому Modifier Stack операнда на панели Modify (см. рис. 11.3). При первом входе в панель Modify булевого объекта не выбран ни один из операндов, поэтому Modifier Stack показывает только Boolean. Для модификации стека конкретного операнда необходимо произвести выбор из списка Operands. Теперь выбранный операнд отображает свой стек. Можно настроить любой модификатор в стеке или добавить новые модификаторы для оказания влияния на объект операнда перед булевой операцией. На параметры, с которыми можно выполнять анимацию, дополнительных ограничений не существует. Для трансформации операнда необходимо активизировать режим Sub-Object для булевого объекта. При таком подходе операнды можно считать подобными гизмо за тем исключением, что в отличие от гизмо, у операндов имеются собственные Modifier Stack.

Опции обновления

Опции Update (обновления) для булевых операций управляют тем, как фактически выполняются булевы вычисления. Для сложных объектов булевы вычисления могут занимать достаточно большое время. Эти вычисления замедляют редактирование других объектов, если они являются экземплярами или ссылками на булевы операнды. Если при моделировании возникают паузы, измените опцию Update. Опция Manually (вручную) является одним из наиболее консервативных методов и обеспечивает наибольшее управление вычислением операций. Такой режим наиболее пригоден для сложных моделей. Метод When Rendering (во время визуализации) не вычисляет операцию до тех пор, пока не будет выполнена окончательная визуализация, после чего производится возврат откорректированного результата на сцену. Метод When Selected (при выборе) несколько ненадежен в обновлении результата и на него не следует полагаться.

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

СОВЕТ Длительные булевы вычисления можно завершить, нажав клавишу Escape во время отображения курсора ожидания. После такого завершения режим Update автоматически переходит в Manually, поэтому теперь можно точно управлять временем вычисления обновления (поскольку геометрия, по всей вероятности, является сложной).

Интерактивные булевы операции

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

ПРИМЕЧАНИЕ Для сложных булевых операций режим Update для булева выражения должен быть установлен в Manually, чтобы операнд можно было позиционировать без дополнительных задержек на вычисления. После помещения операнда на требуемое место щелкните на Update для просмотра нового результата.

Понимание опций Display (отображения) булевой операции является ключевым моментом при выполнении интерактивных изменений. Результат булевой операции показывает опция по умолчанию Result (результат). При изменении опции на Operands (операнды) отображаются оба операнда А и В так, как будто булевой операции не выполнялось. Полностью отображенный операнд скрывает булев результат, поэтому в некоторой степени приходится работать вслепую. На практике лучше всего является комбинация, при которой выбирается Result и активизируется опция Show Hidden Ops (показать скрытые операнды). При этом недостающие операнды отображаются в виде проволочных каркасов (но только в затененных видовых окнах) и обеспечивается информация о точном местонахождении операнда и о его текущем влиянии на булеву операцию.

ПРИМЕЧАНИЕ Помните, что операнд всегда можно присвоить другому контроллеру объекта или контроллеру уникального Path, Look At (посмотреть на) или Expression (выражение) для создания эффектов, подобных анимированным кусочкам сверла или ожогам лазера.

Вложенные булевы объекты

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

После создания булевого объекта на той же самой геометрии можно выполнять дополнительные булевы операции путем выбора объекта в качестве операнда А для нового составного булевого объекта. Каждый раз при выполнении на объекте булевой операции фактически создается оригинал операнда нового булевого объекта. Таким образом определяется "булево дерево", состоящее из одиночных ветвей - весьма линейная прогрессия шагов. К каждой выполняемой булевой операции можно осуществить доступ позже, хотя применяемый для этого метод требует небольшой практики, поскольку все это происходит на панели Modify. Результаты выполнения трех последовательных булевых операций показаны на рисунке 11.4. Коробка вычитает сферу, затем цилиндр и, в конце концов, конус.

СОВЕТ Для более глубокого погружения в булево дерево продолжайте выбирать операнд А и затем перейдите к следующей булевой операции в стеке. Для продвижения вперед используется стек операнда В, но для продвижения назад по истории редактирования можно использовать только стек операнда А.

При выполнении нескольких булевых операций, одну за другой, следует соблюдать осторожность. После завершения операции и, таким образом, составного булевого объекта, необходимо выйти из диалога Boolean или последующий выбор заменит только что выполненную операцию и удалит объект со сцены. Хотя для этого требуются дополнительные щелчки на кнопках, необходимо выйти из списка Compound Objects (составные объекты) путем выбора геометрии другого типа (например, Path Grids) и затем вернуться к Compound Objects для определения следующего булевого объекта.

При навигации по булевому дереву в Track View необходимо помнить, что в нем отражаются только объекты с параметрами, с которыми можно выполнить анимацию. Если булев объект создан из необработанного каркаса или лоскута, показываются только трансформации операнда, поскольку у него нет параметров создания, которые нужно настраивать. Когда для этого же объекта задается модификатор, для модифицированного объекта создается новый вход. То, что у операнда такая же метка, что и у Transform (с голубым кружком модификатора вместо зеленого треугольника контроллера) может привести к замешательству. При глубоком погружении в дерево, изображенное ранее на рисунке 11.4, следите за голубыми кружками Operand. Только самый глубокий операнд А содержит определение объекта; определения всех других объектов находятся внутри предыдущих операндов В.

СОВЕТ При использовании в качестве операндов примитивов Track View перечисляет их параметры под общим заголовком Operand. Задани]е для примитива модификатора, например Material, перемещает параметры создания в сферу модифицированного объекта, расположенную под операндом, вместе с меткой, обозначающей тип объекта.

Булевы характеристики

При создании булевого объекта сохраняются сглаживающие группы и идентификаторы материалов отдельных объектов. К сожалению, проецирование (mapping) полностью удаляется и его необходимо применить после получения окончательного булевого результата. В случае, если объекту присвоено проецирование через модификаторы UVW, его можно восстановить. Если создается копия, но не экземпляр, первоначального объекта или модификатора, присвойте новый UVW Mapping после выполнения булевой операции, и для восстановления проецирования используйте функцию Acquire (приобрести) модификатора. Отметим, что эта операция не работает для процедурных присвоении проецирования.

Координаты проецирования удаляются, поскольку вершины булевого результата всегда объединены. При этом если имеется намерение после выполнения булевой операции разделить первоначальные операнды, для их отсоединения следует использовать Edit Mesh. Если операнд имеет уникальный материал или сглаживающие группы, это значительно помогает в выборке на уровне грани для отсоединения.

Идентификаторы материалов, вероятно, являются самым ценным инструментом при управлении окончательными результатами для поверхности булевого объекта. Задание для каждого операнда модификатора Material с отдельным идентификатором означает, что имеется гарантированный метод выбора граней после завершения булевых операций. Несмотря на то, что для подобъекта присвоения материала весьма полезно, сохранение операндов в виде выборок граней также имеет значение при выборке граней для присвоения сглаживающих групп и модификаторов UVW Mapping с целью восстановления утерянного покрытия.

Иногда булев результат содержит дефекты в виде петель и искажений. Эти дефекты часто вызваны тем, что аналогичные сглаживающие группы действуют друг на друга методами, которые не должны применяться, или вершины объединяются так, что сглаживание произойти не может. Если такого рода дефекты видны, примените модификатор Edit Mesh, выберите все вершины и выполните Weld Selected (объединить выбранные). Если дефекты не исчезают, необходимо проанализировать присвоения сглаживающих групп (перед булевой операцией или после нее).

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

Последнее обсуждение может оказаться таким, как будто необходимо проделать тщательные размышления и планирование перед переходом к выполнению булевой операции, хотя фактически Modifier Stack позволяет сделать этот процесс значительно менее структурированным. На практике общим приемом является быстрое создание булевых объектов и затем возвращение к предыдущему операнду в истории операндов с целью произвести при необходимости присвоения сглаживания и материала. Отметим, что это значительно проще сделать, если есть объекты-экземпляры перед тем, как они станут операндами.

Соображения по улучшению булевых операций

Булев код в 3DS МАХ очень обобщен и позволяет работать с произвольными поверхностями. Однако подобное обобщение означает, что не каждый объект образует действительный булев объект и что некоторые "действительные" результаты могут иметь артефакты (например, длинные грани планки) или содержать нежелательные результаты. Ниже приведен контрольный перечень, который поможет при поиске неисправностей и создании моделей, дружественных для булевых операций:

  • Нормали для всей поверхности должны быть унифицированы без всяких ложных граней, указывающих в неправильном направлении. Нормали граней используются в определении направления поверхности и результирующего булевого объекта.
  • Каркас должен быть построен правильно; это означает, что грани, совместно использующие ребро, должны совместно использовать две вершины, а ребро может совместно использоваться только двумя гранями. (Внутренние основные грани вершин объекта вращения для последнего правила являются типичным кошмаром.)
  • Обеспечивайте объединение всех вершин. Может потребоваться объединение всех вершин вручную с помощью Edit Mesh даже для последовательных булевых операций.
  • Копланарные грани, в особенности те, которые находятся внутри одного и того же объекта, причиняют беспокойство и их следует избегать. Одним из наихудших случаев являются копланарные грани, расположенные тыльными сторонами друг к другу (они легко создаются путем построения примитива с нулевой высотой).
  • Булевы операции надежно работают только с одиночными элементами. Если любой из операндов состоит из множества элементов (например, Teapot или Hedra), в каждый момент времени может успешно работать только один элемент.
  • Если операция не удается, выключите опцию Optimize Result (оптимизировать результат) в нижней части свитка так, чтобы последний проход, контролирующий компланарные грани, не вычислялся. Включенная опция Optimize Result часто может быть причиной получения некорректных результатов.
  • Если операция по-прежнему не удается или создает расщепленные грани, попытайтесь выполнить небольшую настройку операндов.
  • Изменяйте уровень детализации операнда, в особенности возле области, которая является локальной для действующей булевой операции.

Не допускайте того, чтобы этот контрольный перечень испугал вас и заставил избегать булевых операций. Большинство этих опций работает с первой попытки, в особенности если геометрия подчиняется первым трем правилам, а это, скорее всего, будет выполняться при создании геометрии в рамках 3DS МАХ.

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

Вырезание при помощи булевого вычитания

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

Успешное создание скульптуры посредством булевой операции начинается с понимания того, какой должна быть конечная вычитаемая форма. Это приводит к мысли о том, какая геометрия потребуется для выполнения того или иного шаблона. После частого выполнения операций вычитания объект имеет мало сходства с окончательным результатом; объект просто принимает форму режущего ножа, который делит поверхность на пластины. Второй операнд можно считать "стамеской" или "кусочком фасонной фрезы", которая создает конкретный "желобок" на первом объекте. Операция булевого вычитания также является хорошим, если не основным, методом для создания закруглений и углублений на существующих объектах.

ПРИМЕЧАНИЕ Может оказаться полезным обеспечить выбор "режущих инструментов" в виде кривых Безье, которые для целей операций булевого вычитания можно вытягивать, выполнять с ними операцию лофтинга или вращать. Более сложные булевы режущие формы при необходимости можно сохранить в виде каркаса или в слитом виде.

Создание посредством булевого пересечения углублений в новых объектах

Булево пересечение создает объект, который иначе следовало бы "вырезать" при помощи операции булевого вычитания. Результат иногда трудно визуализировать, но он может создать геометрию, которую иначе трудно промоделировать (см. рис. 11.6). Здесь второй операнд действует в качестве разреза в шести направлениях.

Одно из основных применений булевого пересечения заключается в восстановлении того, что "отбирается" при операции булевого вычитания. Иногда может потребоваться использовать часть, которая "упала на пол" в анимации. Может потребоваться показать часть, которая отштампована, например, из металлической заготовки. Для этого скопируйте первоначальные объекты и выполните две булевы операции, создав таким образом "разрезанный" объект и то, что было "вырезано".

Моделирование при помощи булевого объединения

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

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

Булево объединение также применяется для создания двух элементов, которые можно отделить от других при помощи функции Detach в Edit Mesh. Если операция булевого объединения используется для редактирования объектов там, где геометрия перекрывается однократно, каркас не образуется. Когда результирующие объекты разделяются, в каркасе появляется отверстие в месте соединения объектов. Для эффективного использования этого метода лучше всего присвоить каждому операнду уникальный идентификационный номер материала (Material ID#) так, чтобы можно было легко выбирать грани по Material ID# из Edit Mesh при выполнении отсоединения.