Skip to content

Commit

Permalink
Provide a frame transform for UV texture coordinates (#1027)
Browse files Browse the repository at this point in the history
  • Loading branch information
vernalchen authored Aug 2, 2022
1 parent a255e89 commit 52b5339
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 3 deletions.
8 changes: 7 additions & 1 deletion libraries/stdlib/stdlib_defs.mtlx
Original file line number Diff line number Diff line change
Expand Up @@ -2332,14 +2332,20 @@

<!--
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.
operationorder (integer enum): the order in which to perform the transform operations.
"0" or "SRT" performs -pivot, scale, rotate, translate, +pivot as per the original
implementation matching the behavior of certain DCC packages, and "1" or "TRS" performs
-pivot, translate, rotate, scale, +pivot which does not introduce texture shear.
Default is 0 "SRT" for backward compatibility.
-->
<nodedef name="ND_place2d_vector2" node="place2d" nodegroup="math">
<input name="texcoord" type="vector2" value="0.0, 0.0" />
<input name="pivot" type="vector2" value="0.0,0.0" />
<input name="scale" type="vector2" value="1.0,1.0" />
<input name="rotate" type="float" value="0.0" unittype="angle" unit="degree" />
<input name="offset" type="vector2" value="0.0,0.0" />
<input name="operationorder" type="integer" value="0" enum="SRT, TRS" enumvalues="0, 1" />
<output name="out" type="vector2" defaultinput="texcoord" />
</nodedef>

Expand Down
30 changes: 28 additions & 2 deletions libraries/stdlib/stdlib_ng.mtlx
Original file line number Diff line number Diff line change
Expand Up @@ -1045,7 +1045,12 @@

<!--
Node: <place2d>
Transform incoming UV texture coordinates for 2D texture placement.
Transform incoming UV texture coordinates from one 2D frame of reference to another.
operationorder (integer enum): the order in which to perform the transform operations.
"0" or "SRT" performs -pivot, scale, rotate, translate, +pivot as per the original
implementation matching the behavior of certain DCC packages, and "1" or "TRS" performs
-pivot, translate, rotate, scale, +pivot which does not introduce texture shear.
Default is 0 "SRT" for backward compatibility.
-->
<nodegraph name="NG_place2d_vector2" nodedef="ND_place2d_vector2">
<subtract name="N_subpivot" type="vector2">
Expand All @@ -1068,7 +1073,28 @@
<input name="in1" type="vector2" nodename="N_applyoffset" />
<input name="in2" type="vector2" interfacename="pivot" />
</add>
<output name="out" type="vector2" nodename="N_addpivot" />
<subtract name="N_applyoffset2" type="vector2">
<input name="in1" type="vector2" nodename="N_subpivot" />
<input name="in2" type="vector2" interfacename="offset" />
</subtract>
<rotate2d name="N_applyrot2" type="vector2">
<input name="in" type="vector2" nodename="N_applyoffset2" />
<input name="amount" type="float" interfacename="rotate" />
</rotate2d>
<divide name="N_applyscale2" type="vector2">
<input name="in1" type="vector2" nodename="N_applyrot2" />
<input name="in2" type="vector2" interfacename="scale" />
</divide>
<add name="N_addpivot2" type="vector2">
<input name="in1" type="vector2" nodename="N_applyscale2" />
<input name="in2" type="vector2" interfacename="pivot" />
</add>
<switch name="N_switch_operationorder" type="vector2">
<input name="in1" type="vector2" nodename="N_addpivot" />
<input name="in2" type="vector2" nodename="N_addpivot2" />
<input name="which" type="integer" interfacename="operationorder" />
</switch>
<output name="out" type="vector2" nodename="N_switch_operationorder" />
</nodegraph>

<!-- ======================================================================== -->
Expand Down
37 changes: 37 additions & 0 deletions resources/Materials/TestSuite/stdlib/texture/image_transform.mtlx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?xml version="1.0"?>
<materialx version="1.38">
<nodegraph name="test_place2d_SRT">
<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" />
<input name="operationorder" type="integer" value="0" />
</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" />
</nodegraph>
<nodegraph name="test_place2d_TRS">
<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.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" />
<input name="operationorder" type="integer" value="1" />
</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" />
</nodegraph>
</materialx>

0 comments on commit 52b5339

Please sign in to comment.