01_Линия. Путь Сверчка.

Внимание! Всё, что описано ниже можно сделать при помощи одного узла Line в разделе генераторов! Люди, вас обманывают!!! Но для понимания принципа работы сверчка и вообще программирования узлами, надо уметь это всё делать. Меню вызывается Ctrl+Space, вот раздел генераторов:



Есть ещё расширенный раздел генераторов:



В итоге всё, что мы делаем ниже воспроизводится двумя узлами:



Можно попробовать разные генераторы, но давайте исследует механику линии. Попробуем разобраться с базовыми узлами Сверчка и его философией. Чтобы сделать геометрию, необходимо сгенерировать последовательности и соединить элементы определенным образом. Например поставим задачу сделать ряд из 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.0, 0.0, 0.0) – 0
  • (1.0, 0.0, 0.0) – 1
  • (2.0, 0.0, 0.0) – 2
  • (9.0, 0.0, 0.0) – 9

Если ребро записать так: (0,1), - то оно соединит вершины (0.0, 0.0, 0.0) и (1.0, 0.0, 0.0).

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

  • (0,1),
  • (1,2),
  • (2,3),
  • (3,4),
  • (4,5),
  • (5,6),
  • (6,7),
  • (7,8),
  • (8,9)

Сколько ребер насчитали? Я насчитал 9 ребер. 10 вершин и 9 ребер. Это логично.

Я специально написал последовательность ребер в столбик. Видите закономерность?

Чтобы получить список ребер, надо сгенерировать две последовательности: от 0 до 8 и от 1 до 9.

Проще всего это сделать двумя генераторами:

Первый генератор:

  • Start: 0
  • Stop: 9
  • Step: 1

Второй генератор:

  • Start: 1
  • Stop: 10
  • Step: 1

Но Сверчок позволяет обойтись одним генератором.

Видим новые узлы: узел преобразования дробного в целое число (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, что в переводе означает соединить по двум направлениям (в нашем случае по одному направлению создаются рёбра).


  • Development!
  • Development!!
  • Development!!!
  • /Steven Anthony Ballmer/
  • Архитектор, дизайнер и Человек...
  • Все права защищены (с)
    • Земля
    • 2013 г.