Added documentation for all 3D signed distance functions nodes.

This commit is contained in:
Rodolphe Suescun 2019-12-24 15:42:09 +01:00
parent 97e923e781
commit be432c7223
57 changed files with 2114 additions and 573 deletions

View File

@ -8,6 +8,7 @@ to describe procedural materials.
:maxdepth: 2
nodes_simple
nodes_3d
nodes_pattern
nodes_noise
nodes_filter

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,69 @@
3D signed distance function geometry nodes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The signed distance function nodes can be used to define complex 3D geometry using simple
shapes.
They are based on a very small set of basic shapes, that can be combined using operators,
and finally output as a greyscale heightmap and a color normal map using the **render** node.
Describing 3D objects using SDF primitives is more difficult than using existing meshes, but this
method integrates smoothly with shader generation, and (as many nodes in Material Maker) is
resolution independant.
All output samples shown in this section are preview images.
All Signed Distance Functions nodes are based on code written by Inigo Quilez that can be found
`on this page`__.
.. _sdf3dpage: https://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm
__ sdf3dpage_
.. toctree::
:maxdepth: 1
node_3d_sdf_render
Shapes
++++++
.. toctree::
:maxdepth: 1
node_3d_sdf_shapes_sphere
node_3d_sdf_shapes_box
node_3d_sdf_shapes_cylinder
node_3d_sdf_shapes_capsule
node_3d_sdf_shapes_cone
node_3d_sdf_shapes_torus
Operators
+++++++++
.. toctree::
:maxdepth: 1
node_3d_sdf_operators_boolean
node_3d_sdf_operators_smoothboolean
node_3d_sdf_operators_rounded
node_3d_sdf_operators_repeat
node_3d_sdf_operators_circlerepeat
node_3d_sdf_operators_extrusion
node_3d_sdf_operators_revolution
Transforms
++++++++++
.. toctree::
:maxdepth: 1
node_3d_sdf_transforms_translate
node_3d_sdf_transforms_scale
node_3d_sdf_transforms_rotate
Example images
++++++++++++++
.. image:: images/node_sdf3d_samples.png
:align: center

View File

@ -0,0 +1,31 @@
Boolean node
............
The **Boolean** node generates a 3D signed distance function for the combination (union,
intersection or difference) of its inputs.
.. image:: images/node_sdf3d_boolean.png
:align: center
Inputs
::::::
The **Boolean** node accepts 2 inputs in 3D signed distance function format.
Outputs
:::::::
The **Boolean** node generates a signed distance function of the
combination of its inputs.
Parameters
::::::::::
The **Boolean** node accepts *the operator it applies (union, intersection or
difference)* as parameter.
Example images
::::::::::::::
.. image:: images/node_sdf3d_boolean_sample.png
:align: center

View File

@ -0,0 +1,30 @@
CircleRepeat node
...........
The **CircleRepeat** node generates a 3D signed distance image of a circular repetition of its
input. The source object must be offset in the positive Y direction from the center.
.. image:: images/node_sdf3d_circlerepeat.png
:align: center
Inputs
::::::
The **CircleRepeat** node accepts an input in 3D signed distance function format.
Outputs
:::::::
The **CircleRepeat** node generates a signed distance function of the
repeated version of the input shape.
Parameters
::::::::::
The **CircleRepeat** node accepts *the number of repetitions* as parameter.
Example images
::::::::::::::
.. image:: images/node_sdf3d_circlerepeat_sample.png
:align: center

View File

@ -0,0 +1,30 @@
Extrusion node
..............
The **Extrusion** node generates a 3D signed distance function of a shape based on
its (2D signed function) input extruded along the Y axis.
.. image:: images/node_sdf3d_extrusion.png
:align: center
Inputs
::::::
The **Extrusion** node accepts an input in 2D signed distance function format.
Outputs
:::::::
The **Extrusion** node generates a signed distance function of the
extruded version of the input shape.
Parameters
::::::::::
The **Extrusion** node accepts the *the length* of the extruded shape as parameter.
Example images
::::::::::::::
.. image:: images/node_sdf3d_extrusion_sample.png
:align: center

View File

@ -0,0 +1,34 @@
Repeat node
...........
The **Repeat** node generates a 3D signed distance image of a repetition of its
input on the X and Y axes. It can also apply a random rotation to the repeated
object instances.
.. image:: images/node_sdf3d_repeat.png
:align: center
Inputs
::::::
The **Repeat** node accepts an input in 3D signed distance function format.
Outputs
:::::::
The **Repeat** node generates a signed distance function of the
repeated version of the input shape.
Parameters
::::::::::
The **Repeat** node accepts the following parameters:
* *the repetition offset* for both X and Y axes
* *the amount of random rotation* applied to all instances
Example images
::::::::::::::
.. image:: images/node_sdf3d_repeat_sample.png
:align: center

View File

@ -0,0 +1,30 @@
Revolution node
...............
The **Revolution** node generates a 3D signed distance function of a shape based on
the revolution along the Z axis of its (2D signed function) input.
.. image:: images/node_sdf3d_revolution.png
:align: center
Inputs
::::::
The **Revolution** node accepts an input in 2D signed distance function format.
Outputs
:::::::
The **Revolution** node generates a signed distance function of the
revolution of the input shape.
Parameters
::::::::::
The **Revolution** node accepts the *the radius* of the revolution operation as parameter.
Example images
::::::::::::::
.. image:: images/node_sdf3d_revolution_sample.png
:align: center

View File

@ -0,0 +1,33 @@
Rounded node
.................
The **Rounded** node generates a 3D signed distance function of a rounded shape
based on its input, by substracting a constant from its input (i.e.
"growing" it towards the outside).
.. image:: images/node_sdf3d_roundedshape.png
:align: center
Inputs
::::::
The **Rounded** node accepts an input in 3D signed distance function format.
Outputs
:::::::
The **Rounded** node generates a signed distance function of the
rounded version of the input shape.
Parameters
::::::::::
The **Rounded** node accepts the following parameters:
* *the distance* to be substracted from the function
Example images
::::::::::::::
.. image:: images/node_sdf3d_roundedshape_sample.png
:align: center

View File

@ -0,0 +1,33 @@
SmoothBoolean node
..................
The **SmoothBoolean** node generates a 3D signed distance image for the combination (union,
intersection or difference) of its inputs.
.. image:: images/node_sdf3d_smoothboolean.png
:align: center
Inputs
::::::
The **SmoothBoolean** node accepts 2 inputs in signed distance function format.
Outputs
:::::::
The **SmoothBoolean** node generates a signed distance function of the
combination of its inputs.
Parameters
::::::::::
The **SmoothBoolean** node accepts the following parameters:
* *the operator it applies (union, intersection or difference)*
* *the smoothness* of the operation
Example images
::::::::::::::
.. image:: images/node_sdf3d_smoothboolean_sample.png
:align: center

View File

@ -0,0 +1,27 @@
Render node
...........
The **Render** node generates images from a 3D signed distance function inputs.
.. image:: images/node_sdf3d_render.png
:align: center
Inputs
::::::
The **Render** node accepts an input in 3D signed distance function format.
Outputs
:::::::
The **Render** node generates two images from its input:
* a *height map* of the rendered input along the Z axis
* a *normal map* of the rendered input calculated directly
using the 3D signed function (and consequently more
accurate than a normal map generated from the height map)
Parameters
::::::::::
The **Render** node does no accept any parameter.

View File

@ -0,0 +1,31 @@
Box node
........
The **Box** node generates a 3d signed distance function for a box with rounded corners.
.. image:: images/node_sdf3d_box.png
:align: center
Inputs
::::::
The **Box** node does not accept any input.
Outputs
:::::::
The **Box** node generates a signed distance function for a box.
Parameters
::::::::::
The **Box** node accepts the following parameters:
* the X, Y and Z sizes of the box (not including the rounded corners and edges)
* the radius of the rounded corners and edges
Example images
::::::::::::::
.. image:: images/node_sdf3d_box_sample.png
:align: center

View File

@ -0,0 +1,28 @@
Capsule node
............
The **Capsule** node generates a 3d signed distance function for a capsule.
.. image:: images/node_sdf3d_capsule.png
:align: center
Inputs
::::::
The **Capsule** node does not accept any input.
Outputs
:::::::
The **Capsule** node generates a signed distance function for a capsule.
Parameters
::::::::::
The **Capsule** node accepts as parameters the length of the capsule and its radius.
Example images
::::::::::::::
.. image:: images/node_sdf3d_capsule_sample.png
:align: center

View File

@ -0,0 +1,28 @@
Capsule node
............
The **Capsule** node generates a 3d signed distance function for a capsule.
.. image:: images/node_sdf3d_capsule.png
:align: center
Inputs
::::::
The **Capsule** node does not accept any input.
Outputs
:::::::
The **Capsule** node generates a signed distance function for a capsule.
Parameters
::::::::::
The **Capsule** node accepts as parameters the length of the capsule and its radius.
Example images
::::::::::::::
.. image:: images/node_sdf3d_capsule_sample.png
:align: center

View File

@ -0,0 +1,28 @@
Cylinder node
.............
The **Cylinder** node generates a 3d signed distance function for a cylinder.
.. image:: images/node_sdf3d_cylinder.png
:align: center
Inputs
::::::
The **Cylinder** node does not accept any input.
Outputs
:::::::
The **Cylinder** node generates a signed distance function for a cylinder.
Parameters
::::::::::
The **Cylinder** node accepts as parameters the length of the cylinder and its radius.
Example images
::::::::::::::
.. image:: images/node_sdf3d_cylinder_sample.png
:align: center

View File

@ -0,0 +1,28 @@
Sphere node
...........
The **Sphere** node generates a 3d signed distance function for a sphere.
.. image:: images/node_sdf3d_sphere.png
:align: center
Inputs
::::::
The **Sphere** node does not accept any input.
Outputs
:::::::
The **Sphere** node generates a signed distance function for a sphere.
Parameters
::::::::::
The **Sphere** node accepts a single parameter, its radius.
Example images
::::::::::::::
.. image:: images/node_sdf3d_sphere_sample.png
:align: center

View File

@ -0,0 +1,28 @@
Torus node
..........
The **Torus** node generates a 3d signed distance function for a torus.
.. image:: images/node_sdf3d_torus.png
:align: center
Inputs
::::::
The **Torus** node does not accept any input.
Outputs
:::::::
The **Torus** node generates a signed distance function for a torus.
Parameters
::::::::::
The **Torus** node accepts as parameters both radiuses of the torus.
Example images
::::::::::::::
.. image:: images/node_sdf3d_torus_sample.png
:align: center

View File

@ -0,0 +1,24 @@
Rotate node
...........
The **Rotate** node generates a 3D signed distance function of a rotated shape
based on its input.
.. image:: images/node_sdf3d_rotate.png
:align: center
Inputs
::::::
The **Rotate** node accepts an input in 3D signed distance function format.
Outputs
:::::::
The **Rotate** node generates a signed distance function of the
rotated input shape.
Parameters
::::::::::
The **Rotate** node accepts *the angles of the rotations around the X, Y and Z axes* as parameters.

View File

@ -0,0 +1,24 @@
Scale node
..........
The **Scale** node generates a 3D signed distance function of a scaled shape
based on its input.
.. image:: images/node_sdf3d_scale.png
:align: center
Inputs
::::::
The **Scale** node accepts an input in 3D signed distance function format.
Outputs
:::::::
The **Scale** node generates a signed distance function of the
scaled input shape.
Parameters
::::::::::
The **Scale** node accepts *its scale factor* as parameters.

View File

@ -0,0 +1,24 @@
Translate node
..............
The **Translate** node generates a 3D signed distance function of a translated shape
based on its input.
.. image:: images/node_sdf3d_translate.png
:align: center
Inputs
::::::
The **Translate** node accepts an input in 3D signed distance function format.
Outputs
:::::::
The **Translate** node generates a signed distance function of the
translated input shape.
Parameters
::::::::::
The **Translate** node accepts *the X, Y and Z components of the translation* as parameters.

View File

@ -1,5 +1,5 @@
Signed distance function geometry nodes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2D Signed distance function geometry nodes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The signed distance function nodes can be used to define complex geometry using simple
shapes.
@ -7,7 +7,7 @@ shapes.
They are based on a very small set of basic shapes, that can be combined using operators,
and finally output as a greyscale image using the **sdShow** node.
All output samples shown in this sections are images generated through the **sdView** node.
All output samples shown in this sections are images generated through the **sdShow** node.
All Signed Distance Functions nodes are based on code written by Inigo Quilez that can be found
`on this page`__.

View File

@ -0,0 +1,10 @@
3D nodes
--------
The simple nodes are nodes that do not accept any input and generate one or several simple shapes.
.. toctree::
:maxdepth: 0
node_3d_sdf

View File

@ -21,11 +21,12 @@ shortcut will make it possible to edit its contents using the pencil button.
The newly created subgraph contains:
* all nodes that have been grouped
* an **Input** and an **Output** node that rep^resent the inputs and the outputs
* an **Input** and an **Output** node that represent the inputs and the outputs
of the subgraph. Selecting them and using the **Control+W** shortcut makes them
editable so the subgraph inputs and outputs can be added, removed reordered or
renamed. Please note that all those operations will (when possible) keep
connectivity inside and outside the subgraph.
editable so the subgraph inputs and outputs can be added, removed, reordered,
renamed or have their types modified.
Please note that all those operations will (when possible) keep connectivity
inside and outside the subgraph.
* A **Parameters** node that is a **remote** can be edited to expose selected
parameters to the parent graph. When grouping nodes with a **remote**, the
remote will automatically be used as **Parameters** node in the nealy created

File diff suppressed because it is too large Load Diff

View File

@ -6,12 +6,6 @@
"to": "colorize",
"to_port": 0
},
{
"from": "colorize",
"from_port": 0,
"to": "Material",
"to_port": 2
},
{
"from": "perlin",
"from_port": 0,
@ -30,18 +24,6 @@
"to": "Material",
"to_port": 6
},
{
"from": "_3_2",
"from_port": 0,
"to": "colorize_3",
"to_port": 0
},
{
"from": "_3_2",
"from_port": 0,
"to": "occlusion",
"to_port": 0
},
{
"from": "occlusion",
"from_port": 0,
@ -84,24 +66,12 @@
"to": "colorize_4",
"to_port": 0
},
{
"from": "_3_2",
"from_port": 0,
"to": "colorize_5",
"to_port": 0
},
{
"from": "colorize_2",
"from_port": 0,
"to": "blend",
"to_port": 0
},
{
"from": "colorize_5",
"from_port": 0,
"to": "blend",
"to_port": 2
},
{
"from": "colorize_4",
"from_port": 0,
@ -204,17 +174,65 @@
"to": "blend_2",
"to_port": 2
},
{
"from": "graph_3",
"from_port": 0,
"to": "sdf3d_scale",
"to_port": 0
},
{
"from": "_3_2",
"from_port": 0,
"to": "buffer",
"to_port": 0
},
{
"from": "buffer",
"from_port": 0,
"to": "colorize_5",
"to_port": 0
},
{
"from": "buffer",
"from_port": 0,
"to": "colorize_5_2",
"to_port": 0
},
{
"from": "graph_3",
"from": "buffer",
"from_port": 0,
"to": "sdf3d_scale",
"to": "occlusion",
"to_port": 0
},
{
"from": "buffer",
"from_port": 0,
"to": "colorize_3",
"to_port": 0
},
{
"from": "colorize",
"from_port": 0,
"to": "blend_3",
"to_port": 0
},
{
"from": "blend_3",
"from_port": 0,
"to": "Material",
"to_port": 2
},
{
"from": "colorize_5",
"from_port": 0,
"to": "blend_3",
"to_port": 1
},
{
"from": "colorize_5_2",
"from_port": 0,
"to": "blend",
"to_port": 2
}
],
"label": "Graph",
@ -227,8 +245,8 @@
{
"name": "Material",
"node_position": {
"x": 463,
"y": 1358
"x": 390,
"y": 1354
},
"parameters": {
"albedo_color": {
@ -256,18 +274,18 @@
"y": 1196.349854
},
"parameters": {
"iterations": 7,
"persistence": 0.75,
"scale_x": 4,
"scale_y": 4
"iterations": 5,
"persistence": 0.7,
"scale_x": 32,
"scale_y": 32
},
"type": "perlin"
},
{
"name": "colorize",
"node_position": {
"x": -367.399658,
"y": 1344.349976
"x": -347.399658,
"y": 1342.349976
},
"parameters": {
"gradient": {
@ -275,16 +293,16 @@
"points": [
{
"a": 1,
"b": 0.171875,
"g": 0.171875,
"pos": 0.1,
"r": 0.171875
"b": 0,
"g": 0,
"pos": 0.118182,
"r": 0
},
{
"a": 1,
"b": 1,
"g": 1,
"pos": 1,
"pos": 0.909091,
"r": 1
}
],
@ -365,11 +383,11 @@
{
"name": "uniform_greyscale",
"node_position": {
"x": 114.446899,
"y": 1316.272949
"x": 138.446899,
"y": 1239.272949
},
"parameters": {
"color": 0
"color": 0.31
},
"type": "uniform_greyscale"
},
@ -411,7 +429,7 @@
},
"parameters": {
"a": 0,
"s": 0.33,
"s": 0.3,
"x": 0.35,
"y": 0,
"z": 0
@ -426,7 +444,7 @@
},
"parameters": {
"a": 0,
"r": 0.35,
"r": 0.25,
"rx": 4,
"ry": 4,
"s": 0.3,
@ -505,7 +523,7 @@
"y": 1400.797363
},
"parameters": {
"x": 0.35,
"x": 0.4,
"y": 0.35,
"z": 0
},
@ -536,7 +554,7 @@
},
"parameters": {
"a": 0,
"r": 0.35,
"r": 0.25,
"rx": 4,
"ry": 4,
"s": 0.3,
@ -579,26 +597,26 @@
{
"name": "colorize_5",
"node_position": {
"x": -131.127869,
"y": 1320.013184
"x": -147.127869,
"y": 1324.013184
},
"parameters": {
"gradient": {
"interpolation": 1,
"interpolation": 0,
"points": [
{
"a": 1,
"b": 0,
"g": 0,
"pos": 0,
"r": 0
},
{
"a": 1,
"b": 1,
"g": 1,
"pos": 0.063636,
"pos": 0,
"r": 1
},
{
"a": 1,
"b": 0.520833,
"g": 0.520833,
"pos": 0.036364,
"r": 0.520833
}
],
"type": "Gradient"
@ -609,8 +627,8 @@
{
"name": "blend",
"node_position": {
"x": 78.872131,
"y": 1216.013184
"x": 126.872131,
"y": 1141.013184
},
"parameters": {
"amount": 0.5,
@ -1030,7 +1048,7 @@
},
"parameters": {
"amount": 0.5,
"param0": 10,
"param0": 11,
"param1": 1.02,
"param2": 0,
"size": 4
@ -1147,12 +1165,6 @@
"to": "sdf3d_smoothboolean_3_2_3",
"to_port": 0
},
{
"from": "sdf3d_translate_4_3_3",
"from_port": 0,
"to": "gen_outputs",
"to_port": 0
},
{
"from": "sdf3d_smoothboolean_3_2_3",
"from_port": 0,
@ -1284,6 +1296,12 @@
"from_port": 0,
"to": "sdf3d_boolean",
"to_port": 1
},
{
"from": "sdf3d_translate_4_3_3",
"from_port": 0,
"to": "gen_outputs",
"to_port": 0
}
],
"label": "Skull",
@ -1304,7 +1322,7 @@
"cx": 0,
"cy": 0,
"h": 0.08,
"k": 0.1,
"k": 0.04,
"op": 0,
"r": 0.3,
"w": 0.28
@ -1423,7 +1441,7 @@
},
"parameters": {
"a": 0,
"ax": -32,
"ax": -30,
"ay": 45,
"az": 0,
"x": 0.35,
@ -1441,7 +1459,7 @@
"parameters": {
"x": 0,
"y": 0.11,
"z": 0.21
"z": 0.19
},
"type": "sdf3d_translate"
},
@ -1593,8 +1611,8 @@
{
"name": "gen_outputs",
"node_position": {
"x": -238.318359,
"y": 1764.935181
"x": -194.318359,
"y": 1767.935181
},
"parameters": {
@ -1908,6 +1926,30 @@
},
"type": "graph"
},
{
"name": "buffer",
"node_position": {
"x": -353.830994,
"y": 1560.222534
},
"parameters": {
"lod": 0,
"size": 11
},
"type": "buffer"
},
{
"name": "blend_3",
"node_position": {
"x": 84.334427,
"y": 1296.834595
},
"parameters": {
"amount": 1,
"blend_type": 3
},
"type": "blend"
}
],
"parameters": {

View File

@ -13,7 +13,7 @@
},
"shader_model": {
"code": "",
"global": "vec2 rotate(vec2 uv, float a) {\n\tvec2 rv;\n\tfloat c = cos(a);\n\tfloat s = sin(a);\n\tuv -= vec2(0.5);\n\trv.x = uv.x*c+uv.y*s;\n\trv.y = -uv.x*s+uv.y*c;\n\treturn rv+vec2(0.5);\n}\n",
"global": "",
"inputs": [
{
"default": "0.0",

View File

@ -12,7 +12,7 @@
},
"shader_model": {
"code": "",
"global": "vec2 rotate(vec2 uv, float a) {\n\tvec2 rv;\n\tfloat c = cos(a);\n\tfloat s = sin(a);\n\tuv -= vec2(0.5);\n\trv.x = uv.x*c+uv.y*s;\n\trv.y = -uv.x*s+uv.y*c;\n\treturn rv+vec2(0.5);\n}\n",
"global": "vec2 sdf2d_rotate(vec2 uv, float a) {\n\tvec2 rv;\n\tfloat c = cos(a);\n\tfloat s = sin(a);\n\tuv -= vec2(0.5);\n\trv.x = uv.x*c+uv.y*s;\n\trv.y = -uv.x*s+uv.y*c;\n\treturn rv+vec2(0.5);\n}\n",
"inputs": [
{
"default": "0.0",
@ -25,7 +25,7 @@
"name": "Rotate",
"outputs": [
{
"sdf2d": "$in(rotate($uv, $a*0.01745329251))",
"sdf2d": "$in(sdf2d_rotate($uv, $a*0.01745329251))",
"type": "sdf2d"
}
],