Объект MoSpline
Функция доступна в CINEMA 4D Broadcast, Studio
Объект МоСплайн

Общие Координаты Объект Простой Turtle Значения Сплайн Эффекторы Поля

Turtle

L- система для симуляции процессов роста.

Настройки закладок MoSpline «Turtle» и «Значение» предназначены для продвинутых пользователей, которые имеют достаточный уровень знаний в области программирования (эти две закладки содержат полную L-систему). Пользователи не имеющие знаний программирования, также не исключаются при этом и не должны бояться программирования. В расположенном далее материале вы найдёте различные примеры, которые впоследствии возможно изменять по своему усмотрению.

Не забывайте при этом определить Режим предварительно на Turtle.

Краткое введение в L-системы

Последующие страницы предоставляют краткое введение в так называемые L(indenmayer) системы. В литературе, а также в сети Интернет вы можете найти подробное описание для этой темы (на этом участке мы хотели бы напомнить о имеющемся файле PDF на тему «The Algorithmic Beauty Of Plants» от автора Przemyslaw Prusinkiewicz и Aristid Lindenmayer, который вы можете загрузить на странице http://algorithmicbotany.org/papers#abop. Программа Cinema 4D тесно связана с этим направлением).

L-системы по традиции используются для создания структуры растений и аналогичных эффектов роста. При совместном использовании с инструметом MoGraph возможно создавать замечательную анимацию при использовании для этого объекта MoSpline. Расположите его как подобъект для объекта Sweep, что приведёт к видимости этого объекта при процессе рендера (при использовании Sketch and Toon и HAIR мы можем также производить рендер сплайнов).

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

Основные положения являются довольно простыми и основываются на так называемой системе Turtle (Turtle дословно переводится как черепаха; далее по тексту Turtle). (Виртуальная) черепаха на основе получаемых назначений будет отправлена по определённой траектории. Эта траектория соответствует сплайну.

Основными знаками назначения являются:

Если для параметра Строка вы определите следующее выражение F++F++F, то в буквальном смысле оно означает следующее по отношению к Turtle: - переместись на 1 шаг вперёд и затем повернись два раза вправо. Переместись снова на 1 шаг вперёд и повернись снова два раза направо и затем соверши ещё один шаг вперёд.

Размер шага и угла поворота при этом мы можем назначать в закладке Значение используя для этого значения параметров Стандартный угол и Смещение или как изложено ниже, может определяться в скобках. Если значение параметра Вращение определено на 60°, в этом случае вы получите идеальный 3-х угольник:

Две различных последовательности назначения: слева «F++F++F" и справа «F-F++F-F" (оба со значением стандартного угла = 60°).

Этим способом мы можем создавать ветвления топологии по аналогии с расположением веток на деревьях. Изюминка созданной L-системы, это наличие регенерации и системы замены, которая может производить замену отдельных ветвлений на вновь созданные. Это может происходить даже автоматически, что приведёт к созданию из простых знаков назначения, сложных конструкций топологии с иерархией и ветвлением. Честно говоря, о чём здесь вообще рассказывает автор? Следующий пример поможет нам более наглядно понять смысл происходящего.

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

Поле Строка: F++F++F

Поле Правила: F = F-F++F-F

Как вы видите, во второй строке расположено назначение (впоследствии мы будем называть его как Правило). Для знака «F" в данном случае происходит назначение целой строки, которая в свою очередь будет повторно интегрирована в верхнюю строчку.

Фактически это правило определяет следующее в буквальном смысле: произведи замену расположенной вверху F на выражение, которое расположено в строке №2 после знака «=» с правой стороны).

F-F++F-F++ F-F++F-F++F-F++F-F

Это соответствует второму изображению слева на последующем изображении. Так как каждый знак F заменяется на основе правила второй строки, в этом случае каждый прямой штрих будет заменён на сложную изогнутую кривую. Наш Turtle должен всегда оставлять за собой значительные участки сложных выражений.

Изменение формы, если каждый знак F будет заменён на основе выражения «F-F++F-F».

Этот процесс замены мы можем дополнительно изменять в соответствии с нашими потребностями (ну возможно не до бесконечности, так как ваш компьютер в один прекрасный момент начнёт капитулировать под натиском программы!). Частоту замены в данном случае определяет параметр Рост), на основе которого каждый знак «F» будет заменяться посредством нового назначения (правила).

По аналогии с этим функционируют и объёмные структуры.

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

Для этого мы можем использовать резервирование участков (буквы, которые не соответствуют ни одному из команд Turtle). К примеру, это буквы A, B, C, D («F» исключается из данного списка, так как является командой поступательного перемещения вперёд на одну условную единицу).

В оба поля задайте следующее

Поле Строка: FA

Поле Правило: A=+F-FA

Так как здесь в поле «Правило» A=+F-FA на конечной позиции расположена «A», в этом случае правило с увеличивающимся параметром Рост будет постоянно добавляться. Конструкция в данном случае может увеличиваться до бесконечности (значение стандартного угла при этом = 90°).

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

Названные до данного момента формы состояли исключительно из одной непрерывной линии. L-системы будут интересными с того момента, когда появится настоящая топология и соответственно будут возникать новые линии, исходящие из уже имеющихся. И именно это вы можете выполнить при использовании квадратных скобок [ ]. Строка назначения расположенная в пределах таких скобок, будет рассмотрена как отдельная линия ветвления (и приведёт к созданию нового Turtle). После окончания линии Turtle возвращается на исходную позицию, расположенную до квадратных скобок. Начиная с этого участка Turtle производит обработку строки назначения до окончания линии ветвления.

Для строки определите следующую запись:

F[+F][-F[-F]F]F[+F][-F]

С показанными строками назначения получаются эти ветвления при значении Стандартный угол = 30°.

Если для параметра Строка вы зададите F и для параметра Правила определите предварительно созданную запись в поле строки F=F[+F][-F[-F]F]F[+F][-F] , (не забывайте в начале строки добавить F=) при этом как изложено выше, каждая «F» будет заменена посредством показанного на верхнем изображении ветвления. Если вы увеличиваете Рост, в этом случае актуальная топология ветвления может также увеличиваться, так как каждая прямая линия будет заменена на новую топологию ветвления. Если вы посмотрите более внимательно, вы также узнаете левую структуру ветвления на правом изображении топологии (имеет зелёный оттенок).

Таким образом, вы можете создавать без проблем конструкции по аналогии со структурой строения растений:

Различные строки назначения. Обратите внимание, что любые буквы (например, А) могут использоваться для резервации участков. На правом нижнем изображении стандартное вращение дополнительно установлено на 90°.

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

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

& и соответственно ^: вращение вокруг поперечной оси Turtle

\ и соответственно / : вращение вокруг продольной оси Turtle

Определите теперь следующее выражение «F&F\ (90)^F+F» в текстовое поле Строка:

Значение «(90)» расположенное за знаком «/» является не обязательно нужным, так как при спецификации не используется стандартный угол

При этом получается показываемый сплайн: Turtle при этом перемещается вперёд (F), поворачивается на прямой угол вокруг его поперечной оси (стандартный угол при этом установлен на 90°), перемещается снова незначительно вперёд (F) и производит вращение вокруг продольной оси длины на 90° (\ (90)), затем повторно производит вращение на 90° вокруг поперечной оси (^) , перемещается снова по прямой (F), производит поворот направо (+) и затем снова перемещается на незначительное расстояние по прямой (F).

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

Данные пользователя

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

В названии переменной должны использоваться только буквы, знак подчёркивания (к примеру вторая_длина). Заглавное написание букв имеет значение.

Формулы

Вместо нормальных числовых значений вы можете в полях производить задание формул (к примеру, F(_growth*2). Имеются следующие формулы:

Пример «Total/Index»

Предположим у вас имеется строка следующего содержания F(_index)F(_index), которая состоит из двух команд. Это строка выполняет задачу по аналогии со строкой F(1)F(2) (то есть продвижение вперёд одни раз на 1 условную единицу и при повторном перемещении на 2 условные единицы). Так как выражение «_total» определяет общее число команд, то при этом назначении вы получите спираль следующей формы:

Turtle: FA

Правила: A=+(20*_index/_total)FA

Пример "_RND"

Предположим имеется следующее назначение:

Startstring: A

Правила: A=+(_rnd*90)FA

Посредством "_rnd*90" при каждом новом создании будет просчитан случайны угол расположенный в пределах -90 и 90. Кроме этого создаётся кривая линия со случайно расположенными углами.

Пример «_level»

Предположим имеется следующее назначение:

Turtle: A

Правила: A=FA

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

Рост = 0 : A(0)

Рост = 1 : F(1)A(1)

Рост = 2 : F(1)F(2)A(2)

Рост = 3 : F(1)F(2)F(3)A(3)

Так как вы теперь знаете процесс нумерации индекса, обратите внимание на следующее назначение:

Turtle: FA

Правила: A=+F(_level*10)A

При значении стандартного угла = 90° приведёт к созданию такой спирали:

Пример «_arg»

Так как вы можете определить F(a,b,c)=F(a*2,b*2,c*2), что позволяет вам настройку параметров на основе команд Turtle (например, «F»), вы можете также использовать команды «_arg». В этом случае вам не нужно их назначать на начальном этапе. К примеру, строка F=F(_arg1*2,_arg2*2,_arg3*2) имеет аналогичное воздействие как и верхнее назначение.

Расширенные варианты синтаксиса

Также возможным является следующий синтаксис строки:

Turtle: F(2)F(1,2)F(2,3)

Правила: F(a,b) = F(a*2,b*2)

На основе этого происходит замена «F» и как правило, везде где находятся «a» или «b», существующие аргументы F будут обработаны аналогичным образом:

F(2*2,1*2)F(1*2,2*2)F(2*2,3*2) что соответствует по логике выражению F(4,2)F(2,4)F(4,6).

Следующие конструкции правил также не исключаются:

F(a,b):(a>10)=F(a,b)+F(a/2)

Это правило будет использовано в том случае, если значение первого аргумента является больше чем 10.

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

Пример «Ягоды»

Здесь происходит создание нескольких ветвлений одновременно. Если создаваемая ветвь достигла назначенной длины, в этом случае на её окончании будет расположена сфера (создание сферы обеспечивает команда «J», смотрите пример объект Клон).

Обратите внимание как в первом правиле определяется составляющая «B(6)», в то время как во втором правиле для каждого прохода на основе использования «B(h-1)» аргумент будет снижен на «1» до того момента, пока правило 3 не произведёт расположение сферы при использовании команды «h=0».

Посмотрите на окно консоли для просмотра всего объёма создаваемой строки (но предварительно кликните курсором мыши на кнопке Показать в консоли!).

Дополнительные детали для формул вы найдёте в этом Разделе.

Нач. строка

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

Игнорировать контекст

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

Вы имеете следующую ситуацию:

Turtle: A+B+C+D+E+F

Правила: A<B=C

Правила

Пример «Создание полигонов»

Обратите внимание на вторую строку поля Правила:

L=[{.-f.+f.+f.++++f.+f.+f.+f}]

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

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

Пример «Умножить/Разделить»

Если вы для правил используете строку с автоматической самозаменой (к примеру, A=F+FA) в этом случае не исключается использование дополнительных множителей или делителей ", !, ;, _, ?, @ позволяющих вам при создании нового поколения топологии ветвления, производить увеличение / снижение имеющегося значения.

Пример «обрезание ветвления»

Если вы посмотрите на этот пример, вы видите, что в строке уже имеются резервированные участки A, B, C и D. Правила определяют сейчас для различных значений параметра Рост замену резервированных участков на «%». Это означает, что начиная с этой позиции для ветвления следующие знаки будут просто вырезаны (удалены).

Пример «объект Клон»

При анимации параметра Рост эта структура может распространяться до бесконечности (при учёте увеличивающихся клонов)

Обратите внимание на этом изображении на использование правил «J» и «K» (можно использовать также J(1,1,1,1) или K(1,1,1,1); если вы не используете при этом фигурных скобок, в данном случае используется стандартное значение), которые указывают на клоны от объекта Клон. Для обоих клон объект необходимо произвести установку соответствующего режима:

I(1,1,1,1) соответствует Группа 1

J(1,1,1,1) соответствует Группа 2

K(1,1,1,1) соответствует Группа 3

L(1,1,1,1) соответствует Группа 4

Обратите внимание на то, что правило

Turtle: FA

Правила: A=FX

X=J(1,1,1,1)

также является функциональным, но клоны при этом не создаются параллельно и плавно, а будут показаны неожиданно и в общем объёме.

Пример «Индекс»

Объекты расположенные под ноль объектом имеют номера, присвоенные для них внутренним алгоритмом (начиная с 0). Если вы сейчас определите следующее выражение A=FJ(2,1,1,1)A (значения RGB при этом можно не учитывать), в этом случае объект Клон будет использовать объект, имеющий номер индексации 2 (слева сфера). Если вы используете выражение A=J(rnd(2))A как справа, при этом будет выбрано значение между 0 и 2 и на этом основании произойдёт размещение соответствующего клона.

Пример «Случайный рост»

Различные границы приводят к созданию различных по внешнему виду форм

На основе этого правила и изменяемыми данными пользователя Граница1 и Граница2 (их общая сумма должна составлять 100%) возможно производить создание как различных, так и одинаковых по форме растений (так называемые Случайные L-системы). Условие (rnd(1)<) или (rnd(1)>) производит создание случайного решения, на основе которого определяется использование одного из трёх правил (при соответственно новом случайном значении при каждом новом создании), то есть более высоком значении параметра Рост.

Пример «Правила контекстного меню»

Правила вы можете записывать в следующей форме:

Turtle: ABC

Правила: A<B=C

Результат (для параметра Рост > 1): ACC

Что здесь происходит? Прежде всего здесь учитывается последовательность в строке конечного результата. Правило «A<B=C» производит поиск в строчках, где «B» расположена справа «A» и производит замену «B» на «C».

если вы произведёте эту запись следующим образом «A>B=C», в этом случае «A» расположенная слева от «B» заменяется на основе «C» (результатом в этом случае было бы «CBC»).

При правиле «AB=C», решение не может быть принято, какое именно правило необходимо заменить при использовании «C». В этом случае оба будет заменяться на основе «C» (результатом в этом случае было бы «CCC»).

Результат

При наличии ошибки в синтаксисе строки, здесь для вас будет предоставлена соответствующая информация.

Показать в консоли

При клике на данной кнопке, актуальная строка при учёте всех правил на основе параметра Рост, будет предоставлена визуально в окне консоли. В этом случае можно получить следующий результат (это строка примера Ягоды при значении параметра Рост = 4):