Introduction to modular components¶
prerequisites
You should have a general understanding of Vectors and Trigonometry, if not then soon enough parts of these lessons might be confusing. If you want to get the most of out Sverchok but don’t have a strong Math background then work your way through related KhanAcademy content, it’s a great resource and mind bogglingly comprehensive.
Lesson 01 - A Plane¶
Nodes covered in this lesson: Scalar Math, Vector In, Number, Number Range, Viewer Draw, Stethoschope, Simple Topology, Vector Math
.
Let’s make a Plane, we will need 4 vectors and we’ll define them using math. I’ll use the Trigonometric concept of the unit-circle
to get coordinates which are 0.5 PI
apart.
Note: The perimeter of a circle is C=2*PI*r . In the unit-circle radius=1 so it’s perimter is C=2*PI . For the square we need 4 vertexes with equal distance apart so 2*PI/4=0.5*PI. If you consider that a circle represents an angle of 360 degrees then 2πr=360º and this means that 0*π places represents a vertex at 0 degrees of the circle: 0PI=0º ; 0.5PI=90º ; 1PI=180º ; 1.5PI=270º
We will rotate the square 45º to match the Blender’s Plane. So the starting vertex will not be at 0*PI=0º but at 0.25PI=45º
We carefully pick points on the unit-circle so that when we connect them via edges it results in a square. To begin we want to create a series of numbers, to represent those points on the unit-circle. Essentially this sequence is [0.25 pi, 0.75 pi, 1.25 pi, 1.75 pi]
. Because these aren’t whole numbers (Integers
), but so called Floats
, we use a Number Range
Node configured to output Floats
.
Making a series of numbers
Add -> Number -> Number Range
By default this node will generate a standard range: [0.0, 1.0, 2.0, 3.0.....9.0]
,
Seeing the output of the Range Float node
Add -> Text -> Stethoscope
Hook up the Stethoscope input into the Number Range output, you’ll see numbers printed onto the NodeView. You can change the color of the Stethoscope output using the color property if the background color is too similar to the text color.
Note: With any node selected there’s a faster way to add a Stethoschope: Ctrl+Right Click , it even automatically connects the stethoscope.
Note: The stethoscope will draw 1.00 as 1 when there is no significant information behind the decimal point.
Note: When you move the Stethoscope around it is possible that the drawing of the text beside it does not move with the node, whenever you update a value in a node upstream from the Stethoscope the drawing will be updated.
Setting up the input values of Number Range to generate the 4 multipliers
Type these numbers into the number fields instead of adjusting the slider, it’s fast and accurate. Especially useful for entering Floats.
Set the Number Range mode to
Step
andmake sure the Start value is
0.25
andStep value is
0.50
Set the Count slider to
4
Multiplying the Range by PI
Add -> Number -> Scalar Math
We know the output of the Number Range now, what we will do is multiply the range by a constant PI. This is like doing:
[0.25, 0.75, 1.25, 1.75] * pi
which is what we wanted from the beginning, namely;:
[0.25 * pi, 0.75 * pi, 1.25 * pi, 1.75 * pi]
Set the Scalar Math node to the function
PI * X
Connect the output of the Number Range into the input of the
PI * X
node.
The result should look something like this, hook up the Stethoscope to see the outputs.
Getting the Sine and Cosine of this range
Add -> Number -> Scalar Math
The Scalar Math
node will do the Trigonometry for us. From the dropdown you can pick the Sin & Cos
function. This node will now output the cos and sin of whatever is routed into it, in this case the range of Floats.
See the outputs of the SINCOS X
, each element of these new ranges represent a component (x or y) of the set of Vectors we want. Sine will represent Y
and Cosine will be X
.
Note: I minimized the stethoschope node for visual readability (click the little triangle), stethoschope has many features that are not not useful to us right now.
Making Vectors from a range of numbers
Add -> Vector -> Vector In
The Vector In node takes as input 1 or more numbers per component. Sockets which are not explicitly connected to will be represented by a zero.
Connect the resulting
Cos( x )
to the first component in of Vector in:X
Connect the resulting
Sin( X )
to the second component in of Vector in:Y
Leaving Vector In’s 3rd socket (
z
) empty puts a0.0
as thez
component for all vectors generated by that node.
Note: Alert readers will have noticed that we connected a
Vector socket
(orange) to a"Numbers" socket
(green). We allow any connection between socket types that can be made to work, Sverchok does various automatic conversions in the background. We call them implicit conversions.
Display Geometry
Add -> Viz -> Viewer Draw
Sverchok draws geometry using the Viewer Nodes. You might have noticed that the list of Viz
nodes is extensive, this is because there are a variety of different ways to represent geometry; either just drawing to the view using openGL or making Blender’s Objects
directly. For now we’ll focus on Viewer Draw
. Stethoscope is useful for showing the values of any socket, but when we’re dealing with final geometric constructs like Vectors often we want to see them in 3D to get a better understanding, Viewer Draw
is our lightweight drawing function.
Connect the output of Vectors In
into the Verts
on the Viewer Draw node. You should see 4 vertices appear on your 3d view
(but don’t worry if you don’t immediately spot them, by default they will be drawn in white):
Notice the 3 color fields on the Viewer Draw node, they represent the color that this node gives to its Vertices, Edges, and Faces. If (after connecting Vector In to ViewerDraw) you don’t see the Vertices in 3dview, it is probably because your background 3dview color is similar to the Vertex color. Adjust the color field to make them visible.
Increasing the Size of the Vertex
Sometimes, especially while introducing Sverchok, it’s preferred to display Vertices a little bigger than the default values of 4 pixels
. If you had difficulty spotting the vertices initially you will understand why. The N-panel (side panel, or properties panel) for the Node View will have extra panels when viewing a Sverchok NodeTree
. Some nodes have a dedicated properties area in this panel to hold features that might otherwise complicate the node’s UI.
In the case of the Viewer Draw, there’s quite a bit of extra functionality hidden away in the properties area. For now we are interested only in the Point Size
property. This slider has a range between 1 and 15, set it to whatever is most comfortable to view. Here a close up:
I think you’ll agree that the Vertices are much easier to see now:
Make some edges
We’ve created vertices, now we’re going to generate edges. We have 4 vertices and thus 4 indices: [0,1,2,3]
, the edges will be connected as [[0,1],[1,2],[2,3],[3,0]]
.
Vertices Indexed:
We’re going to add a simple topology node. Instead of using the menu to add a node, this time we’ll use alt+space
search field.
alt+space -> type in: top
( you should see something like the following )
navigate down to the node named “Simple Topology” and hit enter to add it to the nodeview.
There are numerous ways to generate the index list for edges
. For our basic example we’ll input them manually. Eventually you will be making hundreds of Vertices and at that point it won’t be viable to write them out manually. For this lesson we’ll not touch that subject.
The Simple Topology Node evaluates what you write into the two topology fields, and then outputs the results. Type into the Edges
field (top one) the following sequence 0 1, 1 2, 2 3, 3 0
. Internally the Simple Topology node converts this shorthand to a python list of indices:
#input
0 1, 1 2, 2 3, 3 0 <--- easy to input as a human
#produces
[[0,1],[1,2],[2,3],[3,0]] <--- let python worry about the list syntax
Now hook the Edges
output socket of Simple Topology node into the Edges
input of Viewer Draw. You should see the following:
Note 1: I adjusted the Edge Width, if you’re on a Mac this may not work. sorry. Note 2: The
Wrap
button on Simple Topology node will enclose the output in an extra set of square brackets. This is appropriate see the documentation onGeometry
.
Make a first Polygon
Using the same Simple Topology Node we will instead pass a polygon to the Viewer Draw, the Viewer Draw is able to infer how to draw edges from the Polygon information.
Disconnect the
Edges
socket from theViewer Draw
(you don’t have to clear the Edges field)In Simple Topology node fill the Faces field with the shorthand:
0 1 2 3
. This means “i want a face described by these vertex indices”.Connect the output of the
Faces
socket to theFaces
input on Viewer Draw. You should now see the following:
Controlling the size of the Polygon
There are many ways to scale up a set of vectors, we’ll use the Vector Math node.
rightclick nodeview -> Vector Math
Change the Vector Math node’s mode
to Multiply Scalar. This will let you feed a number to the Vectors to act as a multiplier. We’ll add a Number node to generate the multiplier.
rightclick nodeview -> A Number
Hook up the Number node to the Scalar (green) input of the Vector Math (Multiply Scalar) node
Connect the output of the Vector In node into the top input of the Vector Math node.
Now connect the output of the Vector Math node into the
Verts
socket of the Viewer Draw node.
You should have something like this.
Now if you change the slider on the Number node, you’ll notice that the Polygon will start to increase and decrease in size because you are multiplying the x, y, and z
components of the Vectors by that amount.
End of lesson 01
Save this .blend you’ve been working in now, somewhere where you will find it easily, as Sverchok_Unit_01_Lesson_01. We will use it as a starting point for the next lesson.
We’ll stop here for lesson 01, if you’ve followed most of this you’ll be making crazy shapes in a matter of hours. Please continue on to Lesson 02 - A Circle, but take a break first. Look outside, stare at a tree – do something else for 10 minutes.