Skip to content

Commit

Permalink
Add extra Convert nodes (#1905)
Browse files Browse the repository at this point in the history
Related to #1895

Fills out more of the "missing" convert nodes.

Notably this moves a lot of the implementations to nodegraphs, to reduce the maintenance going forward and to ensure all shader generation targets are aligned.
  • Loading branch information
ld-kerley committed Jun 27, 2024
1 parent 7f41da2 commit 9b4b66e
Show file tree
Hide file tree
Showing 8 changed files with 493 additions and 85 deletions.
19 changes: 9 additions & 10 deletions documents/Specification/MaterialX.Specification.md
Original file line number Diff line number Diff line change
Expand Up @@ -1806,8 +1806,8 @@ Channel nodes are used to perform channel manipulations and data type conversion

<a id="node-convert"> </a>

* **`convert`**: convert a stream from one data type to another. Only certain unambiguous and commonly-needed conversions are supported; see list below.
* `in` (boolean or integer or float or color<em>N</em> or vector<em>N</em> or string): the input value or nodename
* **`convert`**: convert a stream from one data type to another. Only certain unambiguous conversions are supported; see list below.
* `in` (boolean or integer or float or color<em>N</em> or vector<em>N</em>): the input value or nodename

<a id="node-combine2"> </a>
<a id="node-combine3"> </a>
Expand Down Expand Up @@ -1853,18 +1853,17 @@ Channel nodes are used to perform channel manipulations and data type conversion

The following input/output data type conversions are supported by **`convert`**:

* float to color<em>N</em>/vector<em>N</em>: copy the input value to all channels of the output
* color<em>N</em> to vector<em>N</em> / vector<em>N</em> to color<em>N</em>, where _N_ is the same for in and out: straight copy of channel values
* color3 to color4: copy RGB, set output alpha to 1.0
* color4 to color3: drop alpha channel
* boolean or integer to float: output is 0.0 or 1.0
* vector2 to vector3, or vector3 to vector4: copy incoming channels and append an additional channel with value 1.0
* vector3 to vector2, or vector4 to vector3: drop the last channel
* string to filename: no change in value
* boolean to integer: output is 0 or 1
* integer to boolean: true for any non-zero input value
* float/integer/boolean to color<em>N</em>/vector<em>N</em>: copy the input value to all channels of the output
* color<em>N</em> / vector<em>N</em> to color<em>M</em> / vector<em>M</em>
* if _N_ is the same as _M_, then channels are directly copied.
* if _N_ is larger than _M_, then channels the first _N_ channels are used.
* if _N_ is smaller than _M_, then channels are directly copied and additional channels are populated with 0, aside from the fourth channel which is populated with 1

Table of allowable input/output types for **`combine2`**, **`combine3`**, **`combine4`**:


| Operator | `type` | `in1` | `in2` | `in3` | `in4` | Output |
| --- | --- | --- | --- | --- | --- | --- |
| `combine2` | `vector2` | `float` "x" | `float` "y" | n/a | n/a | "xy" |
Expand Down
15 changes: 0 additions & 15 deletions libraries/stdlib/genglsl/stdlib_genglsl_impl.mtlx
Original file line number Diff line number Diff line change
Expand Up @@ -671,21 +671,6 @@
<!-- ======================================================================== -->

<!-- <convert> -->
<implementation name="IM_convert_float_color3_genglsl" nodedef="ND_convert_float_color3" target="genglsl" sourcecode="vec3({{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_color4_genglsl" nodedef="ND_convert_float_color4" target="genglsl" sourcecode="vec4({{in}},{{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_vector2_genglsl" nodedef="ND_convert_float_vector2" target="genglsl" sourcecode="vec2({{in}},{{in}})" />
<implementation name="IM_convert_float_vector3_genglsl" nodedef="ND_convert_float_vector3" target="genglsl" sourcecode="vec3({{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_vector4_genglsl" nodedef="ND_convert_float_vector4" target="genglsl" sourcecode="vec4({{in}},{{in}},{{in}},{{in}})" />
<implementation name="IM_convert_vector2_vector3_genglsl" nodedef="ND_convert_vector2_vector3" target="genglsl" sourcecode="vec3({{in}}[0],{{in}}[1],0)" />
<implementation name="IM_convert_vector3_vector2_genglsl" nodedef="ND_convert_vector3_vector2" target="genglsl" sourcecode="vec2({{in}}[0],{{in}}[1])" />
<implementation name="IM_convert_vector3_color3_genglsl" nodedef="ND_convert_vector3_color3" target="genglsl" sourcecode="{{in}}" />
<implementation name="IM_convert_vector3_vector4_genglsl" nodedef="ND_convert_vector3_vector4" target="genglsl" sourcecode="vec4({{in}}[0],{{in}}[1],{{in}}[2],1)" />
<implementation name="IM_convert_vector4_vector3_genglsl" nodedef="ND_convert_vector4_vector3" target="genglsl" sourcecode="vec3({{in}}[0],{{in}}[1],{{in}}[2])" />
<implementation name="IM_convert_vector4_color4_genglsl" nodedef="ND_convert_vector4_color4" target="genglsl" sourcecode="{{in}}" />
<implementation name="IM_convert_color3_vector3_genglsl" nodedef="ND_convert_color3_vector3" target="genglsl" sourcecode="{{in}}" />
<implementation name="IM_convert_color4_vector4_genglsl" nodedef="ND_convert_color4_vector4" target="genglsl" sourcecode="{{in}}" />
<implementation name="IM_convert_color3_color4_genglsl" nodedef="ND_convert_color3_color4" target="genglsl" sourcecode="vec4({{in}}[0],{{in}}[1],{{in}}[2],1)" />
<implementation name="IM_convert_color4_color3_genglsl" nodedef="ND_convert_color4_color3" target="genglsl" sourcecode="vec3({{in}}[0],{{in}}[1],{{in}}[2])" />
<implementation name="IM_convert_boolean_float_genglsl" nodedef="ND_convert_boolean_float" target="genglsl" sourcecode="float({{in}})" />
<implementation name="IM_convert_integer_float_genglsl" nodedef="ND_convert_integer_float" target="genglsl" sourcecode="float({{in}})" />

Expand Down
15 changes: 0 additions & 15 deletions libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx
Original file line number Diff line number Diff line change
Expand Up @@ -681,21 +681,6 @@
<!-- ======================================================================== -->

<!-- <convert> -->
<implementation name="IM_convert_float_color3_genmdl" nodedef="ND_convert_float_color3" target="genmdl" sourcecode="color({{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_color4_genmdl" nodedef="ND_convert_float_color4" target="genmdl" sourcecode="color4({{in}},{{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_vector2_genmdl" nodedef="ND_convert_float_vector2" target="genmdl" sourcecode="float2({{in}},{{in}})" />
<implementation name="IM_convert_float_vector3_genmdl" nodedef="ND_convert_float_vector3" target="genmdl" sourcecode="float3({{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_vector4_genmdl" nodedef="ND_convert_float_vector4" target="genmdl" sourcecode="float4({{in}},{{in}},{{in}},{{in}})" />
<implementation name="IM_convert_vector2_vector3_genmdl" nodedef="ND_convert_vector2_vector3" target="genmdl" sourcecode="float3({{in}}[0],{{in}}[1],0)" />
<implementation name="IM_convert_vector3_color3_genmdl" nodedef="ND_convert_vector3_color3" target="genmdl" sourcecode="color({{in}})" />
<implementation name="IM_convert_vector3_vector2_genmdl" nodedef="ND_convert_vector3_vector2" target="genmdl" sourcecode="float2({{in}}[0],{{in}}[1])" />
<implementation name="IM_convert_vector3_vector4_genmdl" nodedef="ND_convert_vector3_vector4" target="genmdl" sourcecode="float4({{in}}[0],{{in}}[1],{{in}}[2],1)" />
<implementation name="IM_convert_vector4_color4_genmdl" nodedef="ND_convert_vector4_color4" target="genmdl" sourcecode="color4({{in}}[0],{{in}}[1],{{in}}[2],{{in}}[3])" />
<implementation name="IM_convert_vector4_vector3_genmdl" nodedef="ND_convert_vector4_vector3" target="genmdl" sourcecode="float3({{in}}[0],{{in}}[1],{{in}}[2])" />
<implementation name="IM_convert_color3_vector3_genmdl" nodedef="ND_convert_color3_vector3" target="genmdl" sourcecode="float3({{in}})" />
<implementation name="IM_convert_color4_vector4_genmdl" nodedef="ND_convert_color4_vector4" target="genmdl" sourcecode="float4({{in}})" />
<implementation name="IM_convert_color3_color4_genmdl" nodedef="ND_convert_color3_color4" target="genmdl" sourcecode="color4({{in}}[0],{{in}}[1],{{in}}[2],1)" />
<implementation name="IM_convert_color4_color3_genmdl" nodedef="ND_convert_color4_color3" target="genmdl" sourcecode="color({{in}}[0],{{in}}[1],{{in}}[2])" />
<implementation name="IM_convert_boolean_float_genmdl" nodedef="ND_convert_boolean_float" target="genmdl" sourcecode="float({{in}})" />
<implementation name="IM_convert_integer_float_genmdl" nodedef="ND_convert_integer_float" target="genmdl" sourcecode="float({{in}})" />

Expand Down
15 changes: 0 additions & 15 deletions libraries/stdlib/genmsl/stdlib_genmsl_impl.mtlx
Original file line number Diff line number Diff line change
Expand Up @@ -671,21 +671,6 @@
<!-- ======================================================================== -->

<!-- <convert> -->
<implementation name="IM_convert_float_color3_genmsl" nodedef="ND_convert_float_color3" target="genmsl" sourcecode="vec3({{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_color4_genmsl" nodedef="ND_convert_float_color4" target="genmsl" sourcecode="vec4({{in}},{{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_vector2_genmsl" nodedef="ND_convert_float_vector2" target="genmsl" sourcecode="vec2({{in}},{{in}})" />
<implementation name="IM_convert_float_vector3_genmsl" nodedef="ND_convert_float_vector3" target="genmsl" sourcecode="vec3({{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_vector4_genmsl" nodedef="ND_convert_float_vector4" target="genmsl" sourcecode="vec4({{in}},{{in}},{{in}},{{in}})" />
<implementation name="IM_convert_vector2_vector3_genmsl" nodedef="ND_convert_vector2_vector3" target="genmsl" sourcecode="vec3({{in}}[0],{{in}}[1],0)" />
<implementation name="IM_convert_vector3_vector2_genmsl" nodedef="ND_convert_vector3_vector2" target="genmsl" sourcecode="vec2({{in}}[0],{{in}}[1])" />
<implementation name="IM_convert_vector3_color3_genmsl" nodedef="ND_convert_vector3_color3" target="genmsl" sourcecode="{{in}}" />
<implementation name="IM_convert_vector3_vector4_genmsl" nodedef="ND_convert_vector3_vector4" target="genmsl" sourcecode="vec4({{in}}[0],{{in}}[1],{{in}}[2],1)" />
<implementation name="IM_convert_vector4_vector3_genmsl" nodedef="ND_convert_vector4_vector3" target="genmsl" sourcecode="vec3({{in}}[0],{{in}}[1],{{in}}[2])" />
<implementation name="IM_convert_vector4_color4_genmsl" nodedef="ND_convert_vector4_color4" target="genmsl" sourcecode="{{in}}" />
<implementation name="IM_convert_color3_vector3_genmsl" nodedef="ND_convert_color3_vector3" target="genmsl" sourcecode="{{in}}" />
<implementation name="IM_convert_color4_vector4_genmsl" nodedef="ND_convert_color4_vector4" target="genmsl" sourcecode="{{in}}" />
<implementation name="IM_convert_color3_color4_genmsl" nodedef="ND_convert_color3_color4" target="genmsl" sourcecode="vec4({{in}}[0],{{in}}[1],{{in}}[2],1)" />
<implementation name="IM_convert_color4_color3_genmsl" nodedef="ND_convert_color4_color3" target="genmsl" sourcecode="vec3({{in}}[0],{{in}}[1],{{in}}[2])" />
<implementation name="IM_convert_boolean_float_genmsl" nodedef="ND_convert_boolean_float" target="genmsl" sourcecode="float({{in}})" />
<implementation name="IM_convert_integer_float_genmsl" nodedef="ND_convert_integer_float" target="genmsl" sourcecode="float({{in}})" />

Expand Down
15 changes: 0 additions & 15 deletions libraries/stdlib/genosl/stdlib_genosl_impl.mtlx
Original file line number Diff line number Diff line change
Expand Up @@ -672,21 +672,6 @@
<!-- ======================================================================== -->

<!-- <convert> -->
<implementation name="IM_convert_float_color3_genosl" nodedef="ND_convert_float_color3" target="genosl" sourcecode="color({{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_color4_genosl" nodedef="ND_convert_float_color4" target="genosl" sourcecode="{ color({{in}},{{in}},{{in}}),{{in}}}" />
<implementation name="IM_convert_float_vector2_genosl" nodedef="ND_convert_float_vector2" target="genosl" sourcecode="{ {{in}},{{in}} }" />
<implementation name="IM_convert_float_vector3_genosl" nodedef="ND_convert_float_vector3" target="genosl" sourcecode="vector({{in}},{{in}},{{in}})" />
<implementation name="IM_convert_float_vector4_genosl" nodedef="ND_convert_float_vector4" target="genosl" sourcecode="{ {{in}},{{in}},{{in}},{{in}} }" />
<implementation name="IM_convert_vector2_vector3_genosl" nodedef="ND_convert_vector2_vector3" target="genosl" sourcecode="vector({{in}}.x,{{in}}.y,0)" />
<implementation name="IM_convert_vector3_vector2_genosl" nodedef="ND_convert_vector3_vector2" target="genosl" sourcecode="{ {{in}}[0],{{in}}[1] }" />
<implementation name="IM_convert_vector3_color3_genosl" nodedef="ND_convert_vector3_color3" target="genosl" sourcecode="color({{in}})" />
<implementation name="IM_convert_vector3_vector4_genosl" nodedef="ND_convert_vector3_vector4" target="genosl" sourcecode="{ {{in}}[0],{{in}}[1],{{in}}[2],1 }" />
<implementation name="IM_convert_vector4_vector3_genosl" nodedef="ND_convert_vector4_vector3" target="genosl" sourcecode="vector({{in}}.x,{{in}}.y,{{in}}.z)" />
<implementation name="IM_convert_vector4_color4_genosl" nodedef="ND_convert_vector4_color4" target="genosl" sourcecode="{ color({{in}}.x,{{in}}.y,{{in}}.z), {{in}}.w }" />
<implementation name="IM_convert_color3_vector3_genosl" nodedef="ND_convert_color3_vector3" target="genosl" sourcecode="vector({{in}})" />
<implementation name="IM_convert_color4_vector4_genosl" nodedef="ND_convert_color4_vector4" target="genosl" sourcecode="{ {{in}}.rgb[0],{{in}}.rgb[1],{{in}}.rgb[2],{{in}}.a }" />
<implementation name="IM_convert_color3_color4_genosl" nodedef="ND_convert_color3_color4" target="genosl" sourcecode="{ color({{in}}[0],{{in}}[1],{{in}}[2]),1 }" />
<implementation name="IM_convert_color4_color3_genosl" nodedef="ND_convert_color4_color3" target="genosl" sourcecode="color({{in}}.rgb[0],{{in}}.rgb[1],{{in}}.rgb[2])" />
<implementation name="IM_convert_boolean_float_genosl" nodedef="ND_convert_boolean_float" target="genosl" sourcecode="float({{in}})" />
<implementation name="IM_convert_integer_float_genosl" nodedef="ND_convert_integer_float" target="genosl" sourcecode="float({{in}})" />

Expand Down
Loading

0 comments on commit 9b4b66e

Please sign in to comment.