Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide a frame transform for UV texture coordinates #1027

Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion libraries/stdlib/stdlib_defs.mtlx
Original file line number Diff line number Diff line change
Expand Up @@ -2332,7 +2332,8 @@

<!--
Node: <place2d> Supplemental Node
Transform incoming UV texture coordinates for 2D texture placement.
Transform incoming UV texture coordinates from one 2D frame of reference to another.
The order of transformation is: -pivot, scale, rotate, translate, pivot.
-->
<nodedef name="ND_place2d_vector2" node="place2d" nodegroup="math">
<input name="texcoord" type="vector2" value="0.0, 0.0" />
Expand All @@ -2343,6 +2344,13 @@
<output name="out" type="vector2" defaultinput="texcoord" />
</nodedef>

<!--
Node: <place2dframe> Supplemental Node
jstone-lucasfilm marked this conversation as resolved.
Show resolved Hide resolved
Transform incoming UV texture coordinates from one 2D frame of reference to another.
The order of transformation is: -pivot, translate, rotate, scale, pivot.
-->
<nodedef name="ND_place2dframe_vector2" node="place2dframe" inherit="ND_place2d_vector2" />

<!--
Node: <arrayappend>
Creates a two-element array from two base types, or appends a base-type value to an array of
Expand Down
36 changes: 34 additions & 2 deletions libraries/stdlib/stdlib_ng.mtlx
Original file line number Diff line number Diff line change
Expand Up @@ -1045,9 +1045,11 @@

<!--
Node: <place2d>
Transform incoming UV texture coordinates for 2D texture placement.
Transform incoming UV texture coordinates from one 2D frame of reference to another.
The order of transformation is: -pivot, scale, rotate, translate, pivot.
-->
<nodegraph name="NG_place2d_vector2" nodedef="ND_place2d_vector2">
<implementation name="IMPL_place2d_vector2" nodedef="ND_place2d_vector2" nodegraph="NG_place2d_vector2" />
<nodegraph name="NG_place2d_vector2">
<subtract name="N_subpivot" type="vector2">
<input name="in1" type="vector2" interfacename="texcoord" />
<input name="in2" type="vector2" interfacename="pivot" />
Expand All @@ -1071,6 +1073,36 @@
<output name="out" type="vector2" nodename="N_addpivot" />
</nodegraph>

<!--
Node: <place2dframe>
Transform incoming UV texture coordinates from one 2D frame of reference to another.
The order of transformation is: -pivot, translate, rotate, scale, pivot.
-->
<implementation name="IMPL_place2dframe_vector2" nodedef="ND_place2dframe_vector2" nodegraph="NG_place2dframe_vector2" />
jstone-lucasfilm marked this conversation as resolved.
Show resolved Hide resolved
<nodegraph name="NG_place2dframe_vector2">
<subtract name="N_subpivot" type="vector2">
<input name="in1" type="vector2" interfacename="texcoord" />
<input name="in2" type="vector2" interfacename="pivot" />
</subtract>
<subtract name="N_applyoffset" type="vector2">
<input name="in1" type="vector2" nodename="N_subpivot" />
<input name="in2" type="vector2" interfacename="offset" />
</subtract>
<rotate2d name="N_applyrot" type="vector2">
<input name="in" type="vector2" nodename="N_applyoffset" />
<input name="amount" type="float" interfacename="rotate" />
</rotate2d>
<divide name="N_applyscale" type="vector2">
<input name="in1" type="vector2" nodename="N_applyrot" />
<input name="in2" type="vector2" interfacename="scale" />
</divide>
<add name="N_addpivot" type="vector2">
<input name="in1" type="vector2" nodename="N_applyscale" />
<input name="in2" type="vector2" interfacename="pivot" />
</add>
<output name="out" type="vector2" nodename="N_addpivot" />
</nodegraph>

<!-- ======================================================================== -->
<!-- Adjustment nodes -->
<!-- ======================================================================== -->
Expand Down
14 changes: 14 additions & 0 deletions resources/Materials/TestSuite/stdlib/math/transform.mtlx
Original file line number Diff line number Diff line change
Expand Up @@ -178,4 +178,18 @@
</place2d>
<output name="out" type="vector2" nodename="place2d1_1" />
</nodegraph>
<!-- place2dframe -->
jstone-lucasfilm marked this conversation as resolved.
Show resolved Hide resolved
<nodegraph name="place2dframe_vector2">
<texcoord name="texcoord1" type="vector2">
<input name="index" type="integer" value="0" />
</texcoord>
<place2dframe name="place2d1_1" type="vector2">
<input name="texcoord" type="vector2" nodename="texcoord1" />
<input name="pivot" type="vector2" value="0.5,0.5" />
<input name="scale" type="vector2" value="2.0,1.0" />
<input name="rotate" type="float" value="1.0" unittype="angle" unit="radian" />
<input name="offset" type="vector2" value="0.2,0.2" />
</place2dframe>
<output name="out" type="vector2" nodename="place2d1_1" />
</nodegraph>
</materialx>
35 changes: 35 additions & 0 deletions resources/Materials/TestSuite/stdlib/texture/image_transform.mtlx
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?xml version="1.0"?>
<materialx version="1.38">
<nodegraph name="test_place2d">
<image name="image_number_1" type="color3">
<input name="file" type="filename" value="resources/Images/grid.png" />
<input name="default" type="color3" value="1.0, 0.0, 0.0" />
<input name="texcoord" type="vector2" nodename="a_place2d" />
</image>
<output name="out" type="color3" nodename="image_number_1" />
<texcoord name="texcoord1" type="vector2" />
<place2d name="a_place2d" type="vector2">
<input name="texcoord" type="vector2" nodename="texcoord1" />
<input name="offset" type="vector2" value="0.0, 0.0" />
<input name="rotate" type="float" value="30.0" unittype="angle" unit="degree" />
<input name="scale" type="vector2" value="2.0, 1.0" />
<input name="pivot" type="vector2" value="0.5, 0.5" />
</place2d>
</nodegraph>
<nodegraph name="test_place2dframe">
<image name="image_number_1" type="color3">
<input name="file" type="filename" value="resources/Images/grid.png" />
<input name="default" type="color3" value="1.0, 0.0, 0.0" />
<input name="texcoord" type="vector2" nodename="a_place2d" />
</image>
<output name="out" type="color3" nodename="image_number_1" />
<texcoord name="texcoord1" type="vector2" />
<place2dframe name="a_place2d" type="vector2">
<input name="texcoord" type="vector2" nodename="texcoord1" />
<input name="offset" type="vector2" value="0.2, 0.2" />
<input name="rotate" type="float" value="30.0" unittype="angle" unit="degree" />
<input name="scale" type="vector2" value="2.0, 1.0" />
<input name="pivot" type="vector2" value="0.5, 0.5" />
</place2dframe>
</nodegraph>
</materialx>