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 3 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
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">
jstone-lucasfilm marked this conversation as resolved.
Show resolved Hide resolved
<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
1 change: 1 addition & 0 deletions resources/Materials/TestSuite/stdlib/math/transform.mtlx
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@
<input name="scale" type="vector2" value="2.0,2.0" />
<input name="rotate" type="float" value="1.0" unittype="angle" unit="radian" />
<input name="offset" type="vector2" value="0.2,0.2" />
<input name="operationorder" type="integer" value="0" />
jstone-lucasfilm marked this conversation as resolved.
Show resolved Hide resolved
</place2d>
<output name="out" type="vector2" nodename="place2d1_1" />
</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">
<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" />
<input name="operationorder" type="integer" value="0" />
</place2d>
</nodegraph>
<nodegraph name="test_place2d_TRS">
<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.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>
</nodegraph>
</materialx>