diff --git a/addons/material_maker/nodes/sdf3d_color.mmg b/addons/material_maker/nodes/sdf3d_color.mmg index 00acc1913..8301c7762 100644 --- a/addons/material_maker/nodes/sdf3d_color.mmg +++ b/addons/material_maker/nodes/sdf3d_color.mmg @@ -1,11 +1,12 @@ { + "generic_size": 1, "name": "sdf3d_color", "node_position": { "x": 0, "y": 0 }, "parameters": { - "c": 0.5 + "c1": 0.5 }, "seed_int": 0, "shader_model": { @@ -16,8 +17,8 @@ "default": "0.0", "label": "", "longdesc": "The input 3D object", - "name": "in", - "shortdesc": "Input", + "name": "in#", + "shortdesc": "Input#", "type": "sdf3d" } ], @@ -27,8 +28,8 @@ "outputs": [ { "longdesc": "The colored 3D object", - "sdf3dc": "vec2($in($uv), $c)", - "shortdesc": "Output", + "sdf3dc": "vec2($in#($uv), $c#)", + "shortdesc": "Output#", "type": "sdf3dc" } ], @@ -40,7 +41,7 @@ "longdesc": "The color index to be assigned", "max": 1, "min": 0, - "name": "c", + "name": "c#", "shortdesc": "Color", "step": 0.01, "type": "float" diff --git a/addons/material_maker/nodes/tex3d_blend.mmg b/addons/material_maker/nodes/tex3d_blend.mmg index 200b8000e..81dc0d902 100644 --- a/addons/material_maker/nodes/tex3d_blend.mmg +++ b/addons/material_maker/nodes/tex3d_blend.mmg @@ -1,16 +1,27 @@ { + "generic_size": 1, "name": "tex3d_blend", "node_position": { "x": 0, "y": 0 }, "parameters": { - "amount": 0.5, - "blend_type": 0 + "amount1": 0.5, + "blend_type1": 0 }, "seed_int": 0, "shader_model": { - "code": "", + "code": [ + "vec3 $(name_uv)_b = $b($uv);", + "vec3 $(name_uv)_l;", + "vec3 $(name_uv)_a;", + "#for", + "$(name_uv)_l = $l#($uv);", + "$(name_uv)_a = $amount#*$a#($uv);", + "$(name_uv)_b = blend3d_$blend_type#($(name_uv)_l.rgb, $(name_uv)_b.rgb, $amount#*dot($a#($uv), vec3(1.0))/3.0 );", + "#end", + "" + ], "global": [ "vec3 blend3d_normal(vec3 c1, vec3 c2, float opacity) {", "\treturn opacity*c1 + (1.0-opacity)*c2;", @@ -76,26 +87,26 @@ "inputs": [ { "default": "vec3($uv.x, 1.0, 1.0)", - "label": "Source1", + "label": "Background", "longdesc": "The foreground input", - "name": "s1", + "name": "b", "shortdesc": "Foreground", "type": "tex3d" }, { "default": "vec3(1.0, $uv.y, 1.0)", - "label": "Source2", + "label": "Layer#", "longdesc": "The background input", - "name": "s2", + "name": "l#", "shortdesc": "Background", "type": "tex3d" }, { "default": "vec3(1.0)", - "label": "Opacity", + "label": "Opacity#", "longdesc": "The optional opacity mask", - "name": "a", - "shortdesc": "Mask", + "name": "a#", + "shortdesc": "Mask#", "type": "tex3d" } ], @@ -106,16 +117,16 @@ { "longdesc": "The 3D texture generated by the blend operation", "shortdesc": "Output", - "tex3d": "blend3d_$blend_type($s1($uv).rgb, $s2($uv).rgb, $amount*dot($a($uv), vec3(1.0))/3.0)", + "tex3d": "$(name_uv)_b", "type": "tex3d" } ], "parameters": [ { "default": 0, - "label": "", + "label": "2:", "longdesc": "The algorithm used to blend the inputs", - "name": "blend_type", + "name": "blend_type#", "shortdesc": "Blend mode", "type": "enum", "values": [ @@ -172,7 +183,7 @@ "longdesc": "The opacity of the blend operation", "max": 1, "min": 0, - "name": "amount", + "name": "amount#", "shortdesc": "Opacity", "step": 0, "type": "float" diff --git a/addons/material_maker/nodes/tex3d_rotate.mmg b/addons/material_maker/nodes/tex3d_rotate.mmg index 160802822..062c4a0aa 100644 --- a/addons/material_maker/nodes/tex3d_rotate.mmg +++ b/addons/material_maker/nodes/tex3d_rotate.mmg @@ -1,4 +1,5 @@ { + "generic_size": 1, "name": "tex3d_rotate", "node_position": { "x": 0, @@ -41,8 +42,8 @@ "default": "vec3(1.0)", "label": "", "longdesc": "The input 3D texture", - "name": "in", - "shortdesc": "Input", + "name": "in#", + "shortdesc": "Input#", "type": "tex3d" } ], @@ -52,8 +53,8 @@ "outputs": [ { "longdesc": "The rotated 3D texture", - "shortdesc": "Output", - "tex3d": "$in(vec4(tex3d_rotate($uv.xyz, -vec3($ax, $ay, $az)*0.01745329251), $uv.w))", + "shortdesc": "Output#", + "tex3d": "$in#(vec4(tex3d_rotate($uv.xyz, -vec3($ax, $ay, $az)*0.01745329251), $uv.w))", "type": "tex3d" } ], diff --git a/addons/material_maker/nodes/tex3d_scale.mmg b/addons/material_maker/nodes/tex3d_scale.mmg index 3a02a803c..478517439 100644 --- a/addons/material_maker/nodes/tex3d_scale.mmg +++ b/addons/material_maker/nodes/tex3d_scale.mmg @@ -1,4 +1,5 @@ { + "generic_size": 1, "name": "tex3d_scale", "node_position": { "x": 0, @@ -16,8 +17,8 @@ "default": "vec3(1.0)", "label": "", "longdesc": "The input 3D texture", - "name": "in", - "shortdesc": "Input", + "name": "in#", + "shortdesc": "Input#", "type": "tex3d" } ], @@ -27,8 +28,8 @@ "outputs": [ { "longdesc": "The scaled 3D texture", - "shortdesc": "Output", - "tex3d": "$in(vec4($uv.xyz/max($s, 0.00001), $uv.w))", + "shortdesc": "Output#", + "tex3d": "$in#(vec4($uv.xyz/max($s, 0.00001), $uv.w))", "type": "tex3d" } ], diff --git a/addons/material_maker/nodes/tex3d_select.mmg b/addons/material_maker/nodes/tex3d_select.mmg index 54af79fdd..3d5ea7503 100644 --- a/addons/material_maker/nodes/tex3d_select.mmg +++ b/addons/material_maker/nodes/tex3d_select.mmg @@ -1,32 +1,41 @@ { + "generic_size": 1, "name": "tex3d_select", "node_position": { "x": 0, "y": 0 }, "parameters": { - "t": 0.01, - "v": 1 + "t1": 0.01, + "v1": 1 }, "seed_int": 0, "shader_model": { - "code": "float $(name_uv)_d = ($uv.w-$v)/$t;", + "code": [ + "vec3 $(name_uv)_b = $b($uv);", + "float $(name_uv)_d = 0.0;", + "", + "#for", + "$(name_uv)_d = ($uv.w-$v#)/$t#;", + "$(name_uv)_b = mix($(name_uv)_b, $i#($uv), clamp(1.0-$(name_uv)_d*$(name_uv)_d, 0.0, 1.0));", + "#end" + ], "global": "", "inputs": [ { "default": "vec3(0.5)", "label": "", - "longdesc": "The 3D texture associated to the specified color index", - "name": "in1", - "shortdesc": "Input1", + "longdesc": "The 3D texture(s) associated to other color indices", + "name": "b", + "shortdesc": "Background", "type": "tex3d" }, { "default": "vec3(0.5)", "label": "", - "longdesc": "The 3D texture(s) associated to other color indices", - "name": "in2", - "shortdesc": "Input2", + "longdesc": "The 3D texture associated to the specified color index", + "name": "i#", + "shortdesc": "Input#", "type": "tex3d" } ], @@ -37,31 +46,31 @@ { "longdesc": "The merged 3D texture", "shortdesc": "Output", - "tex3d": "mix($in1($uv), $in2($uv), clamp(1.0-$(name_uv)_d*$(name_uv)_d, 0.0, 1.0))", + "tex3d": "$(name_uv)_b", "type": "tex3d" } ], "parameters": [ { "control": "None", - "default": 0.5, - "label": "Value", + "default": 1, + "label": "2:Value", "longdesc": "The value of the selected color index", "max": 1, "min": 0, - "name": "v", - "shortdesc": "Value", + "name": "v#", + "shortdesc": "Value#", "step": 0.01, "type": "float" }, { "control": "None", - "default": 0.1, - "label": "Tolerance", + "default": 0.01, + "label": "2:", "longdesc": "The tolerance used when comparing color indices", "max": 1, "min": 0.01, - "name": "t", + "name": "t#", "shortdesc": "Tolerance", "step": 0.001, "type": "float" diff --git a/addons/material_maker/nodes/tex3d_select_shape.mmg b/addons/material_maker/nodes/tex3d_select_shape.mmg index 668536322..a6ec11c83 100644 --- a/addons/material_maker/nodes/tex3d_select_shape.mmg +++ b/addons/material_maker/nodes/tex3d_select_shape.mmg @@ -1,39 +1,46 @@ { + "generic_size": 1, "name": "tex3d_select_shape", "node_position": { "x": 0, "y": 0 }, "parameters": { - "d": 0 + "d1": 0 }, "seed_int": 0, "shader_model": { - "code": "", + "code": [ + "vec3 $(name_uv)_b = $b($uv);", + "", + "#for", + "$(name_uv)_b = mix($i#($uv), $(name_uv)_b, clamp($shape#($uv.xyz)/max($d#, 0.0001), 0.0, 1.0));", + "#end" + ], "global": "", "inputs": [ { "default": "vec3(0.5)", "label": "", - "longdesc": "The 3D texture associated to the specified color index", - "name": "in1", - "shortdesc": "Input1", + "longdesc": "The 3D texture(s) outside the input selection shapes", + "name": "b", + "shortdesc": "Background", "type": "tex3d" }, { "default": "vec3(0.5)", "label": "", - "longdesc": "The 3D texture(s) associated to other color indices", - "name": "in2", - "shortdesc": "Input2", + "longdesc": "The 3D texture associated to the selection shape", + "name": "i#", + "shortdesc": "Input#", "type": "tex3d" }, { "default": "0.0", "label": "", - "longdesc": "The shape in which input1 is applied", - "name": "shape", - "shortdesc": "Shape", + "longdesc": "The shape in which Input# is applied", + "name": "shape#", + "shortdesc": "Shape#", "type": "sdf3d" } ], @@ -44,20 +51,20 @@ { "longdesc": "The merged 3D texture", "shortdesc": "Output", - "tex3d": "mix($in1($uv), $in2($uv), clamp($shape($uv.xyz)/max($d, 0.0001), 0.0, 1.0))", + "tex3d": "$(name_uv)_b", "type": "tex3d" } ], "parameters": [ { "control": "None", - "default": 0.5, - "label": "Smoothness", - "longdesc": "The width of the transition area between both textures", + "default": 0.01, + "label": "3:Smoothness", + "longdesc": "The width of the transition area between textures", "max": 1, "min": 0, - "name": "d", - "shortdesc": "Smoothness", + "name": "d#", + "shortdesc": "Smoothness#", "step": 0.01, "type": "float" } diff --git a/addons/material_maker/nodes/tex3d_translate.mmg b/addons/material_maker/nodes/tex3d_translate.mmg index d39a6fa71..5636cad2b 100644 --- a/addons/material_maker/nodes/tex3d_translate.mmg +++ b/addons/material_maker/nodes/tex3d_translate.mmg @@ -1,4 +1,5 @@ { + "generic_size": 1, "name": "tex3d_translate", "node_position": { "x": 0, @@ -18,8 +19,8 @@ "default": "vec3(1.0)", "label": "", "longdesc": "The input 3D texture", - "name": "in", - "shortdesc": "Input", + "name": "in#", + "shortdesc": "Input#", "type": "tex3d" } ], @@ -29,8 +30,8 @@ "outputs": [ { "longdesc": "The translated 3D texture", - "shortdesc": "Output", - "tex3d": "$in(vec4($uv.xyz-vec3($x, $y, $z), $uv.w))", + "shortdesc": "Output#", + "tex3d": "$in#(vec4($uv.xyz-vec3($x, $y, $z), $uv.w))", "type": "tex3d" } ], diff --git a/addons/material_maker/nodes/tex3d_uniform.mmg b/addons/material_maker/nodes/tex3d_uniform.mmg new file mode 100644 index 000000000..c010f153c --- /dev/null +++ b/addons/material_maker/nodes/tex3d_uniform.mmg @@ -0,0 +1,52 @@ +{ + "name": "tex3d_uniform", + "node_position": { + "x": 0, + "y": 0 + }, + "parameters": { + "color": { + "a": 1, + "b": 1, + "g": 0, + "r": 1, + "type": "Color" + } + }, + "seed_int": 0, + "shader_model": { + "code": "", + "global": "", + "inputs": [ + + ], + "instance": "", + "longdesc": "Draws a uniform 3D texture", + "name": "Uniform", + "outputs": [ + { + "longdesc": "A uniform 3D texture of the selected color", + "shortdesc": "Output", + "tex3d": "$(color).rgb", + "type": "tex3d" + } + ], + "parameters": [ + { + "default": { + "a": 1, + "b": 1, + "g": 1, + "r": 1 + }, + "label": "", + "longdesc": "Color of the uniform 3D texture", + "name": "color", + "shortdesc": "Color", + "type": "color" + } + ], + "shortdesc": "TEX3D Uniform" + }, + "type": "shader" +} \ No newline at end of file diff --git a/material_maker/doc/images/node_3d_texture_blend.png b/material_maker/doc/images/node_3d_texture_blend.png index 2c6bcc45a..d70459766 100644 Binary files a/material_maker/doc/images/node_3d_texture_blend.png and b/material_maker/doc/images/node_3d_texture_blend.png differ diff --git a/material_maker/doc/images/node_3d_texture_rotate.png b/material_maker/doc/images/node_3d_texture_rotate.png index b96f48cf1..6d2fe265f 100644 Binary files a/material_maker/doc/images/node_3d_texture_rotate.png and b/material_maker/doc/images/node_3d_texture_rotate.png differ diff --git a/material_maker/doc/images/node_3d_texture_scale.png b/material_maker/doc/images/node_3d_texture_scale.png index 1cff0210b..39521b664 100644 Binary files a/material_maker/doc/images/node_3d_texture_scale.png and b/material_maker/doc/images/node_3d_texture_scale.png differ diff --git a/material_maker/doc/images/node_3d_texture_scale_sample.png b/material_maker/doc/images/node_3d_texture_scale_sample.png new file mode 100644 index 000000000..9c01610fe Binary files /dev/null and b/material_maker/doc/images/node_3d_texture_scale_sample.png differ diff --git a/material_maker/doc/images/node_3d_texture_translate.png b/material_maker/doc/images/node_3d_texture_translate.png index 5af485681..a6b3a3422 100644 Binary files a/material_maker/doc/images/node_3d_texture_translate.png and b/material_maker/doc/images/node_3d_texture_translate.png differ diff --git a/material_maker/doc/images/node_3d_texture_translate_sample.png b/material_maker/doc/images/node_3d_texture_translate_sample.png new file mode 100644 index 000000000..a3e26c272 Binary files /dev/null and b/material_maker/doc/images/node_3d_texture_translate_sample.png differ diff --git a/material_maker/doc/images/node_3d_texture_uniform.png b/material_maker/doc/images/node_3d_texture_uniform.png new file mode 100644 index 000000000..f79cc15d8 Binary files /dev/null and b/material_maker/doc/images/node_3d_texture_uniform.png differ diff --git a/material_maker/doc/node_3d_sdf_color.rst b/material_maker/doc/node_3d_sdf_color.rst index bd352e9d9..bcc18132a 100644 --- a/material_maker/doc/node_3d_sdf_color.rst +++ b/material_maker/doc/node_3d_sdf_color.rst @@ -1,7 +1,7 @@ Color node .......... -The **Color** node assigns a color index to the 3D signed distance function it receives as input. +The **Color** node is variadic and assigns a color index to the 3D signed distance function it receives as input. The color index map is generated when rendering the 3D scene using the **Render** node and can be used later to assign different materials to different shapes. @@ -11,7 +11,7 @@ used later to assign different materials to different shapes. Inputs :::::: -The **Color** node accepts 1 input in 3D signed distance function format. +The **Color** node accepts one or more inputs in 3D signed distance function format. Outputs ::::::: diff --git a/material_maker/doc/node_3d_texture.rst b/material_maker/doc/node_3d_texture.rst index ecd11e2dc..14a44ea84 100644 --- a/material_maker/doc/node_3d_texture.rst +++ b/material_maker/doc/node_3d_texture.rst @@ -22,3 +22,6 @@ index. node_3d_texture_colorize node_3d_texture_rotate node_3d_texture_distort + node_3d_texture_uniform + node_3d_texture_scale + node_3d_texture_translate diff --git a/material_maker/doc/node_3d_texture_blend.rst b/material_maker/doc/node_3d_texture_blend.rst index 5214a9d68..6b1d91cb7 100644 --- a/material_maker/doc/node_3d_texture_blend.rst +++ b/material_maker/doc/node_3d_texture_blend.rst @@ -1,8 +1,8 @@ Blend node ~~~~~~~~~~ -The **Blend** node blends 3D texture two inputs using an optional opacity. It performs a blend operation -defined by the blend mode between both inputs, and mixes the result with the bottom input +The **Blend** node blends two or more 3D textures using an optional opacity. It performs a blend operation +defined by the blend mode between the inputs, and mixes the result with the background input using the opacity (defines by the *opacity* parameter, or the optional greyscale input). .. image:: images/node_3d_texture_blend.png @@ -13,11 +13,13 @@ Inputs The **Blend** node accepts three inputs: -* The first input is the top layer. +* The first input is the background layer. -* The second input is the bottom layer. +* The second input is the first layer. -* The third input is an optional mask that will be use instead of the opacity parameter. +* The third input is an optional mask that will be used instead of the opacity parameter. + +This node is variadic, and more layers and associated masks can be added. Outputs ....... @@ -27,7 +29,7 @@ The **Blend** node outputs the result of the blend operation. Parameters .......... -The **Blend** node has two parameters: +The **Blend** node has two or more parameters: * The *blend mode*, that can be one of the following: *Normal*, *Multiply*, *Screen*, *Overlay*, *Hard Light*, *Soft Light*, *Burn*, *Dodge*, *Lighten*, *Darken*, *Difference*. @@ -36,6 +38,8 @@ The **Blend** node has two parameters: when the corresponding input is not connected. When connected, the opacity channel is converted to greyscale and multiplied with that parameter. +Both parameters are repeated for each additional layer. + Example images .............. diff --git a/material_maker/doc/node_3d_texture_rotate.rst b/material_maker/doc/node_3d_texture_rotate.rst index 3c720c305..aee59d4e4 100644 --- a/material_maker/doc/node_3d_texture_rotate.rst +++ b/material_maker/doc/node_3d_texture_rotate.rst @@ -1,7 +1,7 @@ Rotate node ~~~~~~~~~~~ -The **Rotate** node applies a rotation to a 3D texture. +The **Rotate** node is variadic and applies rotations to 3D textures. .. image:: images/node_3d_texture_rotate.png :align: center @@ -9,17 +9,17 @@ The **Rotate** node applies a rotation to a 3D texture. Inputs ...... -The **Rotate** node inputs a 3D texture. +The **Rotate** node inputs one or more 3D textures. Outputs ....... -The **Rotate** node provides a rotated 3D texture. +The **Rotate** node provides rotated 3D textures. Parameters .......... -The **Rotate** node has a X, Y and Z parameters that define the rotations around each axis. +The **Rotate** node has X, Y and Z parameters that define the rotations around each axis. Example images .............. diff --git a/material_maker/doc/node_3d_texture_scale.rst b/material_maker/doc/node_3d_texture_scale.rst new file mode 100644 index 000000000..0d0697e1b --- /dev/null +++ b/material_maker/doc/node_3d_texture_scale.rst @@ -0,0 +1,28 @@ +Scale node +~~~~~~~~~~ + +The **Scale** node is variadic and scales 3D textures. + +.. image:: images/node_3d_texture_scale.png + :align: center + +Inputs +...... + +The **Scale** node inputs one or more 3D textures. + +Outputs +....... + +The **Scale** node provides scaled 3D textures. + +Parameters +.......... + +The **Scale** node has X, Y and Z parameters that define the scaling on each axis. + +Example images +.............. + +.. image:: images/node_3d_texture_scale_sample.png + :align: center diff --git a/material_maker/doc/node_3d_texture_select.rst b/material_maker/doc/node_3d_texture_select.rst index 2bcf2efef..49129b3fd 100644 --- a/material_maker/doc/node_3d_texture_select.rst +++ b/material_maker/doc/node_3d_texture_select.rst @@ -1,8 +1,8 @@ Select node ~~~~~~~~~~~ -The **Select** node merges two 3D textures by assigning all samples to its first -input except those whose color index match the color parameter. +The **Select** node assigns one or more 3D textures based on +samples whose color index match the color parameter. .. image:: images/node_3d_texture_select.png :align: center @@ -10,10 +10,13 @@ input except those whose color index match the color parameter. Inputs ...... -The **Select** node accepts two 3D texture inputs: +The **Select** node accepts two or more 3D texture inputs: -* the default texture, used for all samples that don't match the color parameter -* the selected texture that is assigned to all samples that match +* The default texture, used for all samples that don't match the color parameter. + +* Selected texture that is assigned to all samples that match. + +This node is variadic, and more inputs with associated color indicies can be added. Outputs ....... @@ -23,7 +26,8 @@ The **Select** node generates a merged 3D texture. Parameters .......... -The **Select** node does accepts 2 parameters: +The **Select** node accepts 2 parameters: + +* A color index that is compared with the color index of each sample -* a color index that is compared with the color index of each sample -* a tolerance value used when comparing the color parameter with the sample's color index +* A tolerance value used when comparing the color parameter with the sample's color index diff --git a/material_maker/doc/node_3d_texture_shape_select.rst b/material_maker/doc/node_3d_texture_shape_select.rst index 104d1322c..62923e097 100644 --- a/material_maker/doc/node_3d_texture_shape_select.rst +++ b/material_maker/doc/node_3d_texture_shape_select.rst @@ -1,8 +1,8 @@ Shape Select node ~~~~~~~~~~~~~~~~~ -The **Shape Select** node merges two 3D textures by assigning all samples to its first -input except those that are outside the input selection shape. +The **Shape Select** merges two or more 3D textures by assigning +them based on input selection shapes .. image:: images/node_3d_texture_select_shape.png :align: center @@ -10,11 +10,15 @@ input except those that are outside the input selection shape. Inputs ...... -The **Shape Select** node accepts two 3D texture inputs: +The **Shape Select** node accepts two or more 3D texture inputs: -* the default texture, used for all samples that are inside the selection shape -* the selected texture that is assigned to all samples that are outside the selection shape -* the shape where the first input is applied +* The default texture, used for all samples that are outside the selection shape + +* The selected texture that is assigned to all samples that are inside the selection shape + +* The shape where the first input is applied + +This node is variadic, and more inputs and associated selection shapes can be added. Outputs ....... @@ -24,5 +28,5 @@ The **Shape Select** node generates a merged 3D texture. Parameters .......... -The **Shape Select** node accepts a smoothness parameter that defines the withd of the area -where both textures are mixed. +The **Shape Select** node accepts a smoothness parameter that defines the width of the area +where textures are mixed. diff --git a/material_maker/doc/node_3d_texture_translate.rst b/material_maker/doc/node_3d_texture_translate.rst new file mode 100644 index 000000000..696ac1c50 --- /dev/null +++ b/material_maker/doc/node_3d_texture_translate.rst @@ -0,0 +1,28 @@ +Translate node +~~~~~~~~~~~~~~ + +The **Translate** node is variadic and translates 3D textures. + +.. image:: images/node_3d_texture_translate.png + :align: center + +Inputs +...... + +The **Translate** node inputs one or more 3D textures. + +Outputs +....... + +The **Translate** node provides translated 3D textures. + +Parameters +.......... + +The **Translate** node has X, Y and Z parameters that define the translation along each axis. + +Example images +.............. + +.. image:: images/node_3d_texture_translate_sample.png + :align: center diff --git a/material_maker/doc/node_3d_texture_uniform.rst b/material_maker/doc/node_3d_texture_uniform.rst new file mode 100644 index 000000000..4a819fc4d --- /dev/null +++ b/material_maker/doc/node_3d_texture_uniform.rst @@ -0,0 +1,24 @@ +Uniform node +~~~~~~~~~~~~ + +The **Uniform** node outputs a single uniform 3d color texture +whose color is configurable. + +.. image:: images/node_3d_texture_uniform.png + :align: center + +Inputs +++++++ + +The uniform node does not accept any input. + +Outputs ++++++++ + +The uniform node provides an output that generates a uniform 3d color texture. + +Parameters +++++++++++ + +The **Uniform** node has a single *color* parameter that defines the color of +the output 3d texture. \ No newline at end of file diff --git a/material_maker/library/base.json b/material_maker/library/base.json index 91c6688ef..0f8bd039a 100644 --- a/material_maker/library/base.json +++ b/material_maker/library/base.json @@ -6799,7 +6799,7 @@ "icon_data": "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", "name": "tex3d_select_shape", "parameters": { - "d": 0 + "d1": 0 }, "seed": 0, "seed_locked": false, @@ -7301,6 +7301,21 @@ "tree_item": "Simple/Splines", "type": "splines" }, + { + "icon_data": "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", + "name": "tex3d_uniform", + "parameters": { + "color": { + "a": 1, + "b": 1, + "g": 0, + "r": 1, + "type": "Color" + } + }, + "tree_item": "3D/Texture/Uniform", + "type": "tex3d_uniform" + }, { "icon_data": "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", "name": "sdf3d_link",