|
01_Линия. Путь Сверчка. |
Внимание! Всё, что описано ниже можно сделать при помощи одного узла Line в разделе генераторов! Есть ещё расширенный раздел генераторов: В итоге всё, что мы делаем ниже воспроизводится двумя узлами: |
|
Можно попробовать разные генераторы, но давайте исследует механику линии. Попробуем разобраться с базовыми узлами Сверчка и его философией. Чтобы сделать геометрию, необходимо сгенерировать последовательности и соединить элементы определенным образом. Например поставим задачу сделать ряд из 10 вершин и соединить их ребрами. Создаем последовательность от 0 до 9 (Range). Проставляем эти числа в координаты вершин, в Х-координату например. Тогда вершины будут иметь такие координаты: (0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (2.0, 0.0, 0.0), … (9.0, 0.0, 0.0) Сделаем это с помощью дополнения к блендеру, «Сверчок». На рисунке представлен Генератор серий, Range float / Range int из раздела Numbers. Он генерирует последовательности чисел, начиная с Start и заканчивая (10-Stop) c шагом Step. На этом рисунке мы видим ещё два узла: Генератор векторов (Vector in) и Просмотрщик. Просмотрщик (Viewer draw) должен рисовать объект по заданным вершинам, ребрам и матрицам. Итак, Генератор векторов – делает из набора (последовательности) чисел векторы. Векторы в контексте Сверчка – это координаты в трёхмерном пространстве, то есть вершины. Таким образом, мы получили необходимую последовательность вершин: (0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (2.0, 0.0, 0.0), … (9.0, 0.0, 0.0) Вершины получили. Теперь надо получить рёбра, соединяющие эти вершины. Что такое ребро в контексте Сверчка? Как он распознает, что во входе в узел именно ребро? Во-первых вход должен быть обозначен зеленой точкой. Если вершины и векторы обозначаются оранжевой точкой, то ребра надо подключать в зеленые точки. Это первое условие, а второе – должен быть определенный формат данных. Ребро содержит информацию об индексах соединяемых вершин. Посмотрите ещё раз на Просмотрщик. Есть вход вершин/векторов и рёбер. Если в вершины мы посылаем координаты, то в рёебра мы посылаем индексы этих вершин. Взглянем на нашу последовательность вершин:
Если ребро записать так: (0,1), - то оно соединит вершины (0.0, 0.0, 0.0) и (1.0, 0.0, 0.0). Необходимый нам список ребер для генерации прямой, содержащую 10 вершин будет таким:
Сколько ребер насчитали? Я насчитал 9 ребер. 10 вершин и 9 ребер. Это логично. Я специально написал последовательность ребер в столбик. Видите закономерность? Чтобы получить список ребер, надо сгенерировать две последовательности: от 0 до 8 и от 1 до 9. Проще всего это сделать двумя генераторами: Первый генератор:
Второй генератор:
|
|
Но Сверчок позволяет обойтись одним генератором. Видим новые узлы: узел преобразования дробного в целое число (float2int), узел Смещения (List Shift), узел сшивания (List Zip). Также видим Sthetoscope из раздела Text, в этом разделе находятся узлы, позволяющие разными способами работать с текстом и смотреть что есть в сокетах. Viewer text, Sthetoscope, Debug print позволяют нам по-разному смотреть в сокеты. На вход data подается последовательность, а на вход shift – число сдвига. Может быть положительным или отрицательным числом, но обязательно целым. (А может быть и последовательностью для написания сложных алгоритмов) Enclose – закрывать список. Т.е. если на вход подали такую последовательность [0,1,2,3], то на выходе с включенной галочкой и shift=2 получим [2,3,0,1]. Если же галочку не ставить, то получим [2,3]. Если мы сделаем узлы как на картинке, то сможем из генератора взять последовательность [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0], а с узлом смещения [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 0.0]. Но так как нам не надо совмещать вершины 9 и 0, то галочку снимаем и получаем такую последовательность: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]. Узел сшиватель (List Zip). Узел соединяет списки, поэлементно, группируя элементы в список по количеству входящих. Рассмотрим пример. A=[0,1,2,3] B=[22,33,44] C = Сшиваем A и B, получим C = [(0,22), (1,33), (2,44)]. При этом не забудьте активировать unwrap, чтобы не обрамлять список в ещё один список. Видим, что список B короче, чем список A. Результат вы видите сами. Вот таким образом мы получаем список ребер. Но есть одно НО. Индексы вершин в ребрах нельзя задавать дробным числом. Помните, что у нас получилось? Мы соединяли списки в узле Zip-сочленителя: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] и [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] Давайте избавимся от дробей в индексах при помощи узла float2int, это его единственное предназначение. Этот пример на столько сложен, на сколько и прост. Добавив узлы по работы с формулами, можно получать нечто большее. Но у нас в рукаве есть ещё один вариант создания линии. Теперь в модификаторах находится универсальный узел, создающий как рёбра, так и полигоны разными способами. Это раздел Модификаторов создающих Modifiers--Modifier Make, узел называется Connect UV, что в переводе означает соединить по двум направлениям (в нашем случае по одному направлению создаются рёбра). |
|
|