Nuke's STMap equivalent in Fusion

Moderator: SecondMan

white_wizard
Posts: 46
Joined: Wed Sep 18, 2019 3:53 pm
Been thanked: 1 time

Re: Nuke's STMap equivalent in Fusion

#16

Post by white_wizard » Thu Sep 19, 2019 5:46 am

I'd love to dive into some of the scripting/custom tool methods some of you have mentioned. Unfortunately I'm in the midst of a fairly large project with a short deadline. I'm surprised I didn't come across the displace node thread in my many months of searching for solutions.

I'm going to check out RE:Map. I remember looking into it a while back but I think the price drove me away. Some band-aids on the Texture node got me by for a while, but now that I'm doing more complex comps the extra nodes are becoming unwieldy.

@theotheo What's this super sample setup you speak of? Is it a combo of transform nodes to upres/downres?

Added in 18 minutes 56 seconds:
Oh I see now. RE:Map won't install on Resolve or even Fusion 9...only Fusion Studio. Lame.


Tags:

User avatar
Midgardsormr
Fusionator
Posts: 1203
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 89 times
Contact:

Re: Nuke's STMap equivalent in Fusion

#17

Post by Midgardsormr » Thu Sep 19, 2019 6:17 am

Supersampling isn't a custom tool or scripting solution. It's just Resizing. Scale up the images by a factor of 4, perform the undistort, then scale back down. You could make a macro out of it if you wanted to, but it's not really necessary.


User avatar
AndrewHazelden
Fusionator
Posts: 1380
Joined: Fri Apr 03, 2015 3:20 pm
Answers: 3
Location: West Dover, Nova Scotia, Canada
Been thanked: 56 times
Contact:

Re: Nuke's STMap equivalent in Fusion

#18

Post by AndrewHazelden » Thu Sep 19, 2019 6:26 am

white_wizard wrote:
Thu Sep 19, 2019 6:05 am

Added in 18 minutes 56 seconds:
Oh I see now. RE:Map won't install on Resolve or even Fusion 9...only Fusion Studio. Lame.

If you are running Fusion 9 (free) then your only options are to use Texture, CustomTool, a fuse, or a macro. That's inherent to BMD's design limitations on the free version of Fusion not being able to use Fusion native SDK compiled plugins, or OFX plugins. ReMap is an OFX based plugin.


white_wizard
Posts: 46
Joined: Wed Sep 18, 2019 3:53 pm
Been thanked: 1 time

Re: Nuke's STMap equivalent in Fusion

#19

Post by white_wizard » Thu Sep 19, 2019 6:40 am

AndrewHazelden wrote:
Thu Sep 19, 2019 6:26 am
white_wizard wrote:
Thu Sep 19, 2019 6:05 am

Added in 18 minutes 56 seconds:
Oh I see now. RE:Map won't install on Resolve or even Fusion 9...only Fusion Studio. Lame.

If you are running Fusion 9 (free) then your only options are to use Texture, CustomTool, a fuse, or a macro. That's inherent to BMD's design limitations on the free version of Fusion not being able to use Fusion native SDK compiled plugins, or OFX plugins. ReMap is an OFX based plugin.

I understand that the free version of Fusion doesn't support OFX. That said, I have other OFX plugins that work within Resolve, which is why I'm slightly baffled by RE:Map not working in that application. I've contacted Vision Effects for more information.

I'm moderately adept at scripting but I'm new to Fusion so it would take me some time to grind my way through making my own tool for an STmap workflow. If anybody is interested, I'd pay for a Custom Tool or macro that I can use in Resolve Fusion. At the very least I just need the equivalent of the texture node with the ability to affect the alpha channel (why isn't this already built into the texture node??). Filtering options would be an amazing addition as well. But I prefer a solution that is self-contained in one node.

Alternatively, if Gringo's UVpositioner solves the alpha channel dilemma, it would wonderful if somebody who has the latest version could post the code. It seems the links were lost with vfxpedia.


User avatar
AndrewHazelden
Fusionator
Posts: 1380
Joined: Fri Apr 03, 2015 3:20 pm
Answers: 3
Location: West Dover, Nova Scotia, Canada
Been thanked: 56 times
Contact:

Re: Nuke's STMap equivalent in Fusion

#20

Post by AndrewHazelden » Thu Sep 19, 2019 9:17 am

white_wizard wrote:
Thu Sep 19, 2019 6:40 am

Alternatively, if Gringo's UVpositioner solves the alpha channel dilemma, it would wonderful if somebody who has the latest version could post the code. It seems the links were lost with vfxpedia.

WSL has a snapshot of VFXPedia and the UVPositioner setting file is accessible on the Settings and Macros page under the "Transformations & Warps" section.

For completeness here is the macro:

Code: [Select all] [Expand/Collapse] [Download] (UVPositioner.setting)
  1. {
  2.     Tools = ordered() {
  3.         UVPositioner = MacroOperator {
  4.             CtrlWZoom = false,
  5.             CustomData = {
  6.                 HelpPage = "http://vfxpedia.com/index.php?title=Settings_and_Macros/UVPositioner_Description",
  7.             },
  8.             Inputs = ordered() {
  9.                 Comments = Input {
  10.                     Value = "Applies a texture (distorts an image) according to the UV data\r\nv04-2 - Pre-Divide / Post-Multiply, Folds Width\r\nby Gregory Chalenko\r\nwww.compositing.ru",
  11.                 },
  12.                 UVMap = InstanceInput {
  13.                     SourceOp = "Bol_ChannelSelector",
  14.                     Source = "Background",
  15.                     Name = "UVMap",
  16.                 },
  17.                 Texture = InstanceInput {
  18.                     SourceOp = "CT_UVPlacer",
  19.                     Source = "Image2",
  20.                     Name = "Texture",
  21.                 },
  22.                 UChannel = InstanceInput {
  23.                     SourceOp = "Bol_ChannelSelector",
  24.                     Source = "UChannel",
  25.                 },
  26.                 VChannel = InstanceInput {
  27.                     SourceOp = "Bol_ChannelSelector",
  28.                     Source = "VChannel",
  29.                 },
  30.                 FlipU = InstanceInput {
  31.                     SourceOp = "Bol_Flip",
  32.                     Source = "FlipU",
  33.                     Default = 0,
  34.                 },
  35.                 FlipV = InstanceInput {
  36.                     SourceOp = "Bol_Flip",
  37.                     Source = "FlipV",
  38.                     Default = 0,
  39.                 },
  40.                 Offset = InstanceInput {
  41.                     SourceOp = "CT_UVPlacer",
  42.                     Source = "PointIn1",
  43.                 },
  44.                 HorRepeats = InstanceInput {
  45.                     SourceOp = "CT_UVPlacer",
  46.                     Source = "NumberIn1",
  47.                     Default = 1,
  48.                 },
  49.                 VertRepeats = InstanceInput {
  50.                     SourceOp = "CT_UVPlacer",
  51.                     Source = "NumberIn2",
  52.                     Default = 1,
  53.                 },
  54.                 CombRepeats = InstanceInput {
  55.                     SourceOp = "CT_UVPlacer",
  56.                     Source = "NumberIn3",
  57.                     Default = 1,
  58.                 },
  59.                 Tiling = InstanceInput {
  60.                     SourceOp = "CT_UVPlacer",
  61.                     Source = "Tiling",
  62.                 },
  63.                 PreDivideUVbyAlpha = InstanceInput {
  64.                     SourceOp = "Bol_PreDivide",
  65.                     Source = "MultiplyByMask",
  66.                     Default = 1,
  67.                     Name = "Pre-Divide UV by Alpha",
  68.                 },
  69.                 PostMultiplyRGBbyAlpha = InstanceInput {
  70.                     SourceOp = "Bol_PostMultiply",
  71.                     Source = "MultiplyByMask",
  72.                     Default = 1,
  73.                     Name = "Post-Multiply RGB by Alpha",
  74.                 },
  75.                 CorrectFolds = InstanceInput {
  76.                     SourceOp = "CT_Folds",
  77.                     Source = "CorrectFolds",
  78.                 },
  79.                 FoldsThreshold = InstanceInput {
  80.                     SourceOp = "Bmp_Red",
  81.                     Source = "FoldsThreshold",
  82.                     Default = 0.15,
  83.                 },
  84.                 FoldsWidth = InstanceInput {
  85.                     SourceOp = "Blur_Folds",
  86.                     Source = "XBlurSize",
  87.                     Default = 0.01,
  88.                     Name = "Folds Width",
  89.                 },
  90.             },
  91.             Outputs = {
  92.                 Output = InstanceOutput {
  93.                     SourceOp = "Bol_PostMultiply",
  94.                     Source = "Output",
  95.                 },
  96.             },
  97.             ViewInfo = GroupInfo {
  98.                 Pos = { 961.188, 102.445, },
  99.                 Flags = {
  100.                     Expanded = true,
  101.                     AllowPan = false,
  102.                     ForceSource = true,
  103.                     FullIndicator = true,
  104.                 },
  105.                 Size = { 534.568, 229.725, },
  106.                 Direction = "Horizontal",
  107.                 PipeStyle = "Direct",
  108.                 Scale = 1,
  109.                 Offset = { -37.3184, 112.555, },
  110.             },
  111.             Tools = ordered() {
  112.                 Bol_ChannelSelector = ChannelBoolean {
  113.                     CtrlWShown = false,
  114.                     Inputs = {
  115.                         ToRed = Input {
  116.                             Expression = "iif(UChannel<3,UChannel,iif(UChannel<4,22,18))",
  117.                         },
  118.                         ToGreen = Input {
  119.                             Expression = "iif(VChannel<3,VChannel,iif(VChannel<4,23,18))",
  120.                         },
  121.                         ToBlue = Input {
  122.                             Value = 4,
  123.                         },
  124.                         ToAlpha = Input {
  125.                             Value = 4,
  126.                         },
  127.                     },
  128.                     ViewInfo = OperatorInfo { Pos = { -162.49, -19.8868, }, },
  129.                     Colors = {
  130.                         TileColor = { R = 0.666666666666667, G = 0.498039215686275, B = 0.235294117647059, },
  131.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  132.                     },
  133.                     UserControls = ordered() {
  134.                         UChannel = {
  135.                             { MBTNC_AddButton = "Red", },
  136.                             { MBTNC_AddButton = "Green", },
  137.                             { MBTNC_AddButton = "Blue", },
  138.                             { MBTNC_AddButton = "U Texture", },
  139.                             { MBTNC_AddButton = "Z", },
  140.                             LINKID_DataType = "Number",
  141.                             INPID_InputControl = "MultiButtonControl",
  142.                             IC_ControlPage = 0,
  143.                             MBTNC_StretchToFit = true,
  144.                             LINKS_Name = "U Channel",
  145.                             INP_Default = 0,
  146.                         },
  147.                         VChannel = {
  148.                             { MBTNC_AddButton = "Red", },
  149.                             { MBTNC_AddButton = "Green", },
  150.                             { MBTNC_AddButton = "Blue", },
  151.                             { MBTNC_AddButton = "V Texture", },
  152.                             { MBTNC_AddButton = "Z", },
  153.                             LINKID_DataType = "Number",
  154.                             INPID_InputControl = "MultiButtonControl",
  155.                             IC_ControlPage = 0,
  156.                             MBTNC_StretchToFit = true,
  157.                             LINKS_Name = "V Channel",
  158.                             INP_Default = 1,
  159.                         },
  160.                     },
  161.                 },
  162.                 Bol_PreDivide = ChannelBoolean {
  163.                     NameSet = true,
  164.                     Inputs = {
  165.                         Blend = Input {
  166.                             Value = 0,
  167.                             Expression = "MultiplyByMask",
  168.                         },
  169.                         MultiplyByMask = Input { Value = 1, },
  170.                         Operation = Input { Value = 7, },
  171.                         ToRed = Input { Value = 8, },
  172.                         ToGreen = Input { Value = 8, },
  173.                         ToBlue = Input { Value = 4, },
  174.                         ToAlpha = Input { Value = 4, },
  175.                         Background = Input {
  176.                             SourceOp = "Bol_ChannelSelector",
  177.                             Source = "Output",
  178.                         },
  179.                     },
  180.                     ViewInfo = OperatorInfo { Pos = { -42.6378, -19.522, }, },
  181.                     Colors = {
  182.                         TileColor = { R = 0.666666666666667, G = 0.501960784313725, B = 0.235294117647059, },
  183.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  184.                     },
  185.                 },
  186.                 Bol_Flip = ChannelBoolean {
  187.                     CtrlWShown = false,
  188.                     Inputs = {
  189.                         Operation = Input {
  190.                             Value = 10,
  191.                         },
  192.                         Blend = Input {
  193.                             Expression = "iif(FlipU+FlipV==0,0,1)",
  194.                         },
  195.                         ProcessRed = Input {
  196.                             Expression = "FlipU",
  197.                         },
  198.                         ProcessGreen = Input {
  199.                             Expression = "FlipV",
  200.                         },
  201.                         Background = Input {
  202.                             SourceOp = "Bol_PreDivide",
  203.                             Source = "Output",
  204.                         },
  205.                     },
  206.                     ViewInfo = OperatorInfo { Pos = { -105.649, -72.7488, }, },
  207.                     Colors = {
  208.                         TileColor = { R = 0.666666666666667, G = 0.498039215686275, B = 0.235294117647059, },
  209.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  210.                     },
  211.                     UserControls = ordered() {
  212.                         FlipU = {
  213.                             LINKID_DataType = "Number",
  214.                             LINKS_Name = "Flip U",
  215.                             IC_ControlPage = 0,
  216.                             INPID_InputControl = "CheckboxControl",
  217.                             ICD_Width = 0.5,
  218.                             INP_Default = 0,
  219.                         },
  220.                         FlipV = {
  221.                             LINKID_DataType = "Number",
  222.                             LINKS_Name = "Flip V",
  223.                             IC_ControlPage = 0,
  224.                             INPID_InputControl = "CheckboxControl",
  225.                             ICD_Width = 0.5,
  226.                             INP_Default = 0,
  227.                         },
  228.                     },
  229.                 },
  230.                 Fltr_Folds = Filter {
  231.                     CtrlWZoom = false,
  232.                     CtrlWShown = false,
  233.                     Inputs = {
  234.                         Blend = Input {
  235.                             Expression = "math.max(Mat_CleanEdges.CleanEdges, CT_Folds.CorrectFolds)",
  236.                         },
  237.                         FilterType = Input {
  238.                             Value = 3,
  239.                         },
  240.                         Power = Input {
  241.                             Disabled = true,
  242.                         },
  243.                         BlendClone = Input {
  244.                             Expression = "math.max(Mat_CleanEdges.CleanEdges, CT_Folds.CorrectFolds)",
  245.                         },
  246.                         Angle = Input {
  247.                             Disabled = true,
  248.                         },
  249.                         Randomize = Input {
  250.                             Disabled = true,
  251.                         },
  252.                         Seed = Input {
  253.                             Disabled = true,
  254.                         },
  255.                         Animated = Input {
  256.                             Disabled = true,
  257.                         },
  258.                         Input = Input {
  259.                             SourceOp = "Bol_PreDivide",
  260.                             Source = "Output",
  261.                         },
  262.                     },
  263.                     ViewInfo = OperatorInfo { Pos = { -149.231, 40.6419, }, },
  264.                     Colors = {
  265.                         TileColor = { R = 0.490196078431373, G = 0.513725490196078, B = 0.298039215686275, },
  266.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  267.                     },
  268.                 },
  269.                 Mat_CleanEdges = MatteControl {
  270.                     CtrlWShown = false,
  271.                     Inputs = {
  272.                         Blend = Input {
  273.                             Value = 0,
  274.                             Expression = "CT_Folds.CorrectFolds",
  275.                         },
  276.                         MatteCombine = Input {
  277.                             Value = 6,
  278.                         },
  279.                         PostMultiplyImage = Input {
  280.                             Value = 1,
  281.                         },
  282.                         Background = Input {
  283.                             SourceOp = "CT_UVPlacer",
  284.                             Source = "Output",
  285.                         },
  286.                         CleanEdges = Input {
  287.                             Value = 0,
  288.                         },
  289.                         EffectMask = Input {
  290.                             SourceOp = "Bmp_Alpha",
  291.                             Source = "Mask",
  292.                         },
  293.                     },
  294.                     ViewInfo = OperatorInfo { Pos = { 170.878, -10.2217, }, },
  295.                     Colors = {
  296.                         TileColor = { R = 0.443137254901961, G = 0.36078431372549, B = 0.533333333333333, },
  297.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  298.                     },
  299.                     UserControls = ordered() {
  300.                         CleanEdges = {
  301.                             LINKID_DataType = "Number",
  302.                             LINKS_Name = "Clean Edges",
  303.                             IC_ControlPage = 2,
  304.                             INPID_InputControl = "CheckboxControl",
  305.                             INP_Default = 1,
  306.                         },
  307.                     },
  308.                 },
  309.                 CT_UVPlacer = Custom {
  310.                     Inputs = {
  311.                         ApplyMaskInverted = Input {
  312.                             Value = 1,
  313.                         },
  314.                         NumberIn1 = Input {
  315.                             Value = 1,
  316.                         },
  317.                         NumberIn2 = Input {
  318.                             Value = 1,
  319.                         },
  320.                         NumberIn3 = Input {
  321.                             Value = 1,
  322.                         },
  323.                         RedExpression = Input {
  324.                             Expression = "Text(iif(Tiling==0,\"getr2b\",iif(Tiling==1,\"getr2d\",\"getr2w\"))..\"(r1*n1*n3-p1x+0.5,g1*n2*n3-p1y+0.5)\")",
  325.                         },
  326.                         GreenExpression = Input {
  327.                             Expression = "Text(iif(Tiling==0,\"getg2b\",iif(Tiling==1,\"getg2d\",\"getg2w\"))..\"(r1*n1*n3-p1x+0.5,g1*n2*n3-p1y+0.5)\")",
  328.                         },
  329.                         BlueExpression = Input {
  330.                             Expression = "Text(iif(Tiling==0,\"getb2b\",iif(Tiling==1,\"getb2d\",\"getb2w\"))..\"(r1*n1*n3-p1x+0.5,g1*n2*n3-p1y+0.5)\")",
  331.                         },
  332.                         AlphaExpression = Input {
  333.                             Expression = "Text(iif(Tiling==0,\"geta2b\",iif(Tiling==1,\"geta2d\",\"geta2w\"))..\"(r1*n1*n3-p1x+0.5,g1*n2*n3-p1y+0.5)*a1\")",
  334.                         },
  335.                         NumberControls = Input {
  336.                             Value = 1,
  337.                         },
  338.                         NameforNumber1 = Input {
  339.                             Value = "Horizontal Repeats",
  340.                         },
  341.                         NameforNumber2 = Input {
  342.                             Value = "Vertical Repeats",
  343.                         },
  344.                         NameforNumber3 = Input {
  345.                             Value = "Combined Repeats",
  346.                         },
  347.                         NameforNumber4 = Input {
  348.                             Value = "Tiling",
  349.                         },
  350.                         NameforPoint1 = Input {
  351.                             Value = "Offset",
  352.                         },
  353.                         Image1 = Input {
  354.                             SourceOp = "Bol_Flip",
  355.                             Source = "Output",
  356.                         },
  357.                     },
  358.                     ViewInfo = OperatorInfo { Pos = { 30.2304, -72.0861, }, },
  359.                     UserControls = ordered() {
  360.                         Tiling = {
  361.                             { MBTNC_AddButton = "Transparent", },
  362.                             { MBTNC_AddButton = "Extend", },
  363.                             { MBTNC_AddButton = "Tile", },
  364.                             INPID_InputControl = "MultiButtonControl",
  365.                             IC_ControlPage = 0,
  366.                             MBTNC_StretchToFit = true,
  367.                             LINKID_DataType = "Number",
  368.                             INP_Default = 0,
  369.                         },
  370.                     },
  371.                 },
  372.                 Bmp_Red = BitmapMask {
  373.                     Inputs = {
  374.                         Image = Input {
  375.                             SourceOp = "Fltr_Folds",
  376.                             Source = "Output",
  377.                         },
  378.                         Channel = Input {
  379.                             Value = FuID { "Red", },
  380.                         },
  381.                         High = Input {
  382.                             Expression = "FoldsThreshold",
  383.                         },
  384.                         Low = Input {
  385.                             Expression = "FoldsThreshold",
  386.                         },
  387.                     },
  388.                     ViewInfo = OperatorInfo { Pos = { -43.0808, 24.0559, }, },
  389.                     UserControls = ordered() {
  390.                         FoldsThreshold = {
  391.                             LINKID_DataType = "Number",
  392.                             LINKS_Name = "Folds Threshold",
  393.                             IC_ControlPage = 0,
  394.                             INPID_InputControl = "SliderControl",
  395.                             INP_Default = 0.15,
  396.                         },
  397.                     },
  398.                 },
  399.                 Blur_Folds = Blur {
  400.                     Inputs = {
  401.                         Blend = Input {
  402.                             Expression = "CT_Folds.CorrectFolds",
  403.                         },
  404.                         Filter = Input {
  405.                             Value = FuID { "Multi-box", },
  406.                         },
  407.                         XBlurSize = Input {
  408.                             Value = 0.01,
  409.                         },
  410.                         YBlurSize = Input {
  411.                             Disabled = true,
  412.                         },
  413.                         BlendClone = Input {
  414.                             Expression = "CT_Folds.CorrectFolds",
  415.                         },
  416.                         Input = Input {
  417.                             SourceOp = "Mat_CleanEdges",
  418.                             Source = "Output",
  419.                         },
  420.                         EffectMask = Input {
  421.                             SourceOp = "CT_UVPlacer",
  422.                             Source = "Output",
  423.                         },
  424.                     },
  425.                     ViewInfo = OperatorInfo { Pos = { 170.878, 18.5273, }, },
  426.                     Colors = {
  427.                         TileColor = { R = 0.423529411764706, G = 0.545098039215686, B = 0.376470588235294, },
  428.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  429.                     },
  430.                     UserControls = ordered() {
  431.                         XBlurSize = {
  432.                             ICD_Center = 0.01,
  433.                             LINKID_DataType = "Number",
  434.                             INPID_InputControl = "SliderControl",
  435.                             IC_ControlPage = 0,
  436.                             INP_MaxScale = 0.1,
  437.                             INP_Default = 0.01,
  438.                         },
  439.                     },
  440.                 },
  441.                 Bmp_Green = BitmapMask {
  442.                     NameSet = true,
  443.                     Inputs = {
  444.                         PaintMode = Input {
  445.                             Value = FuID { "Maximum", },
  446.                         },
  447.                         Image = Input {
  448.                             SourceOp = "Fltr_Folds",
  449.                             Source = "Output",
  450.                         },
  451.                         Channel = Input {
  452.                             Value = FuID { "Green", },
  453.                         },
  454.                         High = Input {
  455.                             Value = 0.15,
  456.                             Expression = "Bmp_Red.High",
  457.                         },
  458.                         Low = Input {
  459.                             Value = 0.15,
  460.                             Expression = "Bmp_Red.Low",
  461.                         },
  462.                         EffectMask = Input {
  463.                             SourceOp = "Bmp_Red",
  464.                             Source = "Mask",
  465.                         },
  466.                     },
  467.                     ViewInfo = OperatorInfo { Pos = { -42.5279, 43.4062, }, },
  468.                 },
  469.                 Bmp_Alpha = BitmapMask {
  470.                     CtrlWZoom = false,
  471.                     Inputs = {
  472.                         PaintMode = Input {
  473.                             Value = FuID { "Subtract", },
  474.                         },
  475.                         Image = Input {
  476.                             SourceOp = "Fltr_Folds",
  477.                             Source = "Output",
  478.                         },
  479.                         EffectMask = Input {
  480.                             SourceOp = "Bmp_Green",
  481.                             Source = "Mask",
  482.                         },
  483.                     },
  484.                     ViewInfo = OperatorInfo { Pos = { -46.398, 62.2036, }, },
  485.                 },
  486.                 CT_Folds = Custom {
  487.                     Inputs = {
  488.                         Blend = Input {
  489.                             Expression = "CT_Folds.CorrectFolds",
  490.                         },
  491.                         RedExpression = Input {
  492.                             Value = "if(a1>0,if(r1>0,r1/a1,0),0)",
  493.                         },
  494.                         GreenExpression = Input {
  495.                             Value = "if(a1>0,if(g1>0,g1/a1,0),0)",
  496.                         },
  497.                         BlueExpression = Input {
  498.                             Value = "if(a1>0,if(b1>0,b1/a1,0),0)",
  499.                         },
  500.                         AlphaExpression = Input {
  501.                             Value = "if(a1>0,if(a1>0,a1/a1,0),0)",
  502.                         },
  503.                         Image1 = Input {
  504.                             SourceOp = "Blur_Folds",
  505.                             Source = "Output",
  506.                         },
  507.                         EffectMask = Input {
  508.                             SourceOp = "Bmp_Alpha",
  509.                             Source = "Mask",
  510.                         },
  511.                     },
  512.                     ViewInfo = OperatorInfo { Pos = { 171.431, 48.9349, }, },
  513.                     UserControls = ordered() {
  514.                         CorrectFolds = {
  515.                             LINKS_Name = "Correct Folds",
  516.                             LINKID_DataType = "Number",
  517.                             IC_ControlPage = 5,
  518.                             INPID_InputControl = "CheckboxControl",
  519.                             INP_Default = 0,
  520.                         },
  521.                     },
  522.                 },
  523.                 Bol_PostMultiply = ChannelBoolean {
  524.                     NameSet = true,
  525.                     Inputs = {
  526.                         Blend = Input {
  527.                             Value = 0,
  528.                             Expression = "MultiplyByMask",
  529.                         },
  530.                         MultiplyByMask = Input { Value = 1, },
  531.                         Operation = Input { Value = 6, },
  532.                         ToRed = Input { Value = 3, },
  533.                         ToGreen = Input { Value = 3, },
  534.                         ToBlue = Input { Value = 3, },
  535.                         ToAlpha = Input { Value = 4, },
  536.                         Background = Input {
  537.                             SourceOp = "CT_Folds",
  538.                             Source = "Output",
  539.                         },
  540.                         Foreground = Input {
  541.                             SourceOp = "Bol_Flip",
  542.                             Source = "Output",
  543.                         },
  544.                     },
  545.                     ViewInfo = OperatorInfo { Pos = { 289.439, 49.2393, }, },
  546.                     Colors = {
  547.                         TileColor = { R = 0.666666666666667, G = 0.501960784313725, B = 0.235294117647059, },
  548.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  549.                     },
  550.                 },
  551.             },
  552.             Colors = {
  553.                 TileColor = { R = 0.501960784313725, G = 0.333333333333333, B = 0.498039215686275, },
  554.                 TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  555.             },
  556.         },
  557.     },
  558. }

I tested the UVPositioner macro in Fusion 16.1 and the alpha transparency support works fine on my system.

Image

Last edited by AndrewHazelden on Thu Sep 19, 2019 9:22 am, edited 1 time in total.

white_wizard
Posts: 46
Joined: Wed Sep 18, 2019 3:53 pm
Been thanked: 1 time

Re: Nuke's STMap equivalent in Fusion

#21

Post by white_wizard » Thu Sep 19, 2019 9:22 am

AndrewHazelden wrote:
Thu Sep 19, 2019 9:17 am
white_wizard wrote:
Thu Sep 19, 2019 6:40 am

Alternatively, if Gringo's UVpositioner solves the alpha channel dilemma, it would wonderful if somebody who has the latest version could post the code. It seems the links were lost with vfxpedia.

WSL has a snapshot of VFXPedia and the UVPositioner setting file is accessible on the Settings and Macros page under the "Transformations & Warps" section.

For completeness here is the macro:

Code: [Select all] [Expand/Collapse] [Download] (UVPositioner.setting)
  1. {
  2.     Tools = ordered() {
  3.         UVPositioner = MacroOperator {
  4.             CtrlWZoom = false,
  5.             CustomData = {
  6.                 HelpPage = "http://vfxpedia.com/index.php?title=Settings_and_Macros/UVPositioner_Description",
  7.             },
  8.             Inputs = ordered() {
  9.                 Comments = Input {
  10.                     Value = "Applies a texture (distorts an image) according to the UV data\r\nv04-2 - Pre-Divide / Post-Multiply, Folds Width\r\nby Gregory Chalenko\r\nwww.compositing.ru",
  11.                 },
  12.                 UVMap = InstanceInput {
  13.                     SourceOp = "Bol_ChannelSelector",
  14.                     Source = "Background",
  15.                     Name = "UVMap",
  16.                 },
  17.                 Texture = InstanceInput {
  18.                     SourceOp = "CT_UVPlacer",
  19.                     Source = "Image2",
  20.                     Name = "Texture",
  21.                 },
  22.                 UChannel = InstanceInput {
  23.                     SourceOp = "Bol_ChannelSelector",
  24.                     Source = "UChannel",
  25.                 },
  26.                 VChannel = InstanceInput {
  27.                     SourceOp = "Bol_ChannelSelector",
  28.                     Source = "VChannel",
  29.                 },
  30.                 FlipU = InstanceInput {
  31.                     SourceOp = "Bol_Flip",
  32.                     Source = "FlipU",
  33.                     Default = 0,
  34.                 },
  35.                 FlipV = InstanceInput {
  36.                     SourceOp = "Bol_Flip",
  37.                     Source = "FlipV",
  38.                     Default = 0,
  39.                 },
  40.                 Offset = InstanceInput {
  41.                     SourceOp = "CT_UVPlacer",
  42.                     Source = "PointIn1",
  43.                 },
  44.                 HorRepeats = InstanceInput {
  45.                     SourceOp = "CT_UVPlacer",
  46.                     Source = "NumberIn1",
  47.                     Default = 1,
  48.                 },
  49.                 VertRepeats = InstanceInput {
  50.                     SourceOp = "CT_UVPlacer",
  51.                     Source = "NumberIn2",
  52.                     Default = 1,
  53.                 },
  54.                 CombRepeats = InstanceInput {
  55.                     SourceOp = "CT_UVPlacer",
  56.                     Source = "NumberIn3",
  57.                     Default = 1,
  58.                 },
  59.                 Tiling = InstanceInput {
  60.                     SourceOp = "CT_UVPlacer",
  61.                     Source = "Tiling",
  62.                 },
  63.                 PreDivideUVbyAlpha = InstanceInput {
  64.                     SourceOp = "Bol_PreDivide",
  65.                     Source = "MultiplyByMask",
  66.                     Default = 1,
  67.                     Name = "Pre-Divide UV by Alpha",
  68.                 },
  69.                 PostMultiplyRGBbyAlpha = InstanceInput {
  70.                     SourceOp = "Bol_PostMultiply",
  71.                     Source = "MultiplyByMask",
  72.                     Default = 1,
  73.                     Name = "Post-Multiply RGB by Alpha",
  74.                 },
  75.                 CorrectFolds = InstanceInput {
  76.                     SourceOp = "CT_Folds",
  77.                     Source = "CorrectFolds",
  78.                 },
  79.                 FoldsThreshold = InstanceInput {
  80.                     SourceOp = "Bmp_Red",
  81.                     Source = "FoldsThreshold",
  82.                     Default = 0.15,
  83.                 },
  84.                 FoldsWidth = InstanceInput {
  85.                     SourceOp = "Blur_Folds",
  86.                     Source = "XBlurSize",
  87.                     Default = 0.01,
  88.                     Name = "Folds Width",
  89.                 },
  90.             },
  91.             Outputs = {
  92.                 Output = InstanceOutput {
  93.                     SourceOp = "Bol_PostMultiply",
  94.                     Source = "Output",
  95.                 },
  96.             },
  97.             ViewInfo = GroupInfo {
  98.                 Pos = { 961.188, 102.445, },
  99.                 Flags = {
  100.                     Expanded = true,
  101.                     AllowPan = false,
  102.                     ForceSource = true,
  103.                     FullIndicator = true,
  104.                 },
  105.                 Size = { 534.568, 229.725, },
  106.                 Direction = "Horizontal",
  107.                 PipeStyle = "Direct",
  108.                 Scale = 1,
  109.                 Offset = { -37.3184, 112.555, },
  110.             },
  111.             Tools = ordered() {
  112.                 Bol_ChannelSelector = ChannelBoolean {
  113.                     CtrlWShown = false,
  114.                     Inputs = {
  115.                         ToRed = Input {
  116.                             Expression = "iif(UChannel<3,UChannel,iif(UChannel<4,22,18))",
  117.                         },
  118.                         ToGreen = Input {
  119.                             Expression = "iif(VChannel<3,VChannel,iif(VChannel<4,23,18))",
  120.                         },
  121.                         ToBlue = Input {
  122.                             Value = 4,
  123.                         },
  124.                         ToAlpha = Input {
  125.                             Value = 4,
  126.                         },
  127.                     },
  128.                     ViewInfo = OperatorInfo { Pos = { -162.49, -19.8868, }, },
  129.                     Colors = {
  130.                         TileColor = { R = 0.666666666666667, G = 0.498039215686275, B = 0.235294117647059, },
  131.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  132.                     },
  133.                     UserControls = ordered() {
  134.                         UChannel = {
  135.                             { MBTNC_AddButton = "Red", },
  136.                             { MBTNC_AddButton = "Green", },
  137.                             { MBTNC_AddButton = "Blue", },
  138.                             { MBTNC_AddButton = "U Texture", },
  139.                             { MBTNC_AddButton = "Z", },
  140.                             LINKID_DataType = "Number",
  141.                             INPID_InputControl = "MultiButtonControl",
  142.                             IC_ControlPage = 0,
  143.                             MBTNC_StretchToFit = true,
  144.                             LINKS_Name = "U Channel",
  145.                             INP_Default = 0,
  146.                         },
  147.                         VChannel = {
  148.                             { MBTNC_AddButton = "Red", },
  149.                             { MBTNC_AddButton = "Green", },
  150.                             { MBTNC_AddButton = "Blue", },
  151.                             { MBTNC_AddButton = "V Texture", },
  152.                             { MBTNC_AddButton = "Z", },
  153.                             LINKID_DataType = "Number",
  154.                             INPID_InputControl = "MultiButtonControl",
  155.                             IC_ControlPage = 0,
  156.                             MBTNC_StretchToFit = true,
  157.                             LINKS_Name = "V Channel",
  158.                             INP_Default = 1,
  159.                         },
  160.                     },
  161.                 },
  162.                 Bol_PreDivide = ChannelBoolean {
  163.                     NameSet = true,
  164.                     Inputs = {
  165.                         Blend = Input {
  166.                             Value = 0,
  167.                             Expression = "MultiplyByMask",
  168.                         },
  169.                         MultiplyByMask = Input { Value = 1, },
  170.                         Operation = Input { Value = 7, },
  171.                         ToRed = Input { Value = 8, },
  172.                         ToGreen = Input { Value = 8, },
  173.                         ToBlue = Input { Value = 4, },
  174.                         ToAlpha = Input { Value = 4, },
  175.                         Background = Input {
  176.                             SourceOp = "Bol_ChannelSelector",
  177.                             Source = "Output",
  178.                         },
  179.                     },
  180.                     ViewInfo = OperatorInfo { Pos = { -42.6378, -19.522, }, },
  181.                     Colors = {
  182.                         TileColor = { R = 0.666666666666667, G = 0.501960784313725, B = 0.235294117647059, },
  183.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  184.                     },
  185.                 },
  186.                 Bol_Flip = ChannelBoolean {
  187.                     CtrlWShown = false,
  188.                     Inputs = {
  189.                         Operation = Input {
  190.                             Value = 10,
  191.                         },
  192.                         Blend = Input {
  193.                             Expression = "iif(FlipU+FlipV==0,0,1)",
  194.                         },
  195.                         ProcessRed = Input {
  196.                             Expression = "FlipU",
  197.                         },
  198.                         ProcessGreen = Input {
  199.                             Expression = "FlipV",
  200.                         },
  201.                         Background = Input {
  202.                             SourceOp = "Bol_PreDivide",
  203.                             Source = "Output",
  204.                         },
  205.                     },
  206.                     ViewInfo = OperatorInfo { Pos = { -105.649, -72.7488, }, },
  207.                     Colors = {
  208.                         TileColor = { R = 0.666666666666667, G = 0.498039215686275, B = 0.235294117647059, },
  209.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  210.                     },
  211.                     UserControls = ordered() {
  212.                         FlipU = {
  213.                             LINKID_DataType = "Number",
  214.                             LINKS_Name = "Flip U",
  215.                             IC_ControlPage = 0,
  216.                             INPID_InputControl = "CheckboxControl",
  217.                             ICD_Width = 0.5,
  218.                             INP_Default = 0,
  219.                         },
  220.                         FlipV = {
  221.                             LINKID_DataType = "Number",
  222.                             LINKS_Name = "Flip V",
  223.                             IC_ControlPage = 0,
  224.                             INPID_InputControl = "CheckboxControl",
  225.                             ICD_Width = 0.5,
  226.                             INP_Default = 0,
  227.                         },
  228.                     },
  229.                 },
  230.                 Fltr_Folds = Filter {
  231.                     CtrlWZoom = false,
  232.                     CtrlWShown = false,
  233.                     Inputs = {
  234.                         Blend = Input {
  235.                             Expression = "math.max(Mat_CleanEdges.CleanEdges, CT_Folds.CorrectFolds)",
  236.                         },
  237.                         FilterType = Input {
  238.                             Value = 3,
  239.                         },
  240.                         Power = Input {
  241.                             Disabled = true,
  242.                         },
  243.                         BlendClone = Input {
  244.                             Expression = "math.max(Mat_CleanEdges.CleanEdges, CT_Folds.CorrectFolds)",
  245.                         },
  246.                         Angle = Input {
  247.                             Disabled = true,
  248.                         },
  249.                         Randomize = Input {
  250.                             Disabled = true,
  251.                         },
  252.                         Seed = Input {
  253.                             Disabled = true,
  254.                         },
  255.                         Animated = Input {
  256.                             Disabled = true,
  257.                         },
  258.                         Input = Input {
  259.                             SourceOp = "Bol_PreDivide",
  260.                             Source = "Output",
  261.                         },
  262.                     },
  263.                     ViewInfo = OperatorInfo { Pos = { -149.231, 40.6419, }, },
  264.                     Colors = {
  265.                         TileColor = { R = 0.490196078431373, G = 0.513725490196078, B = 0.298039215686275, },
  266.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  267.                     },
  268.                 },
  269.                 Mat_CleanEdges = MatteControl {
  270.                     CtrlWShown = false,
  271.                     Inputs = {
  272.                         Blend = Input {
  273.                             Value = 0,
  274.                             Expression = "CT_Folds.CorrectFolds",
  275.                         },
  276.                         MatteCombine = Input {
  277.                             Value = 6,
  278.                         },
  279.                         PostMultiplyImage = Input {
  280.                             Value = 1,
  281.                         },
  282.                         Background = Input {
  283.                             SourceOp = "CT_UVPlacer",
  284.                             Source = "Output",
  285.                         },
  286.                         CleanEdges = Input {
  287.                             Value = 0,
  288.                         },
  289.                         EffectMask = Input {
  290.                             SourceOp = "Bmp_Alpha",
  291.                             Source = "Mask",
  292.                         },
  293.                     },
  294.                     ViewInfo = OperatorInfo { Pos = { 170.878, -10.2217, }, },
  295.                     Colors = {
  296.                         TileColor = { R = 0.443137254901961, G = 0.36078431372549, B = 0.533333333333333, },
  297.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  298.                     },
  299.                     UserControls = ordered() {
  300.                         CleanEdges = {
  301.                             LINKID_DataType = "Number",
  302.                             LINKS_Name = "Clean Edges",
  303.                             IC_ControlPage = 2,
  304.                             INPID_InputControl = "CheckboxControl",
  305.                             INP_Default = 1,
  306.                         },
  307.                     },
  308.                 },
  309.                 CT_UVPlacer = Custom {
  310.                     Inputs = {
  311.                         ApplyMaskInverted = Input {
  312.                             Value = 1,
  313.                         },
  314.                         NumberIn1 = Input {
  315.                             Value = 1,
  316.                         },
  317.                         NumberIn2 = Input {
  318.                             Value = 1,
  319.                         },
  320.                         NumberIn3 = Input {
  321.                             Value = 1,
  322.                         },
  323.                         RedExpression = Input {
  324.                             Expression = "Text(iif(Tiling==0,\"getr2b\",iif(Tiling==1,\"getr2d\",\"getr2w\"))..\"(r1*n1*n3-p1x+0.5,g1*n2*n3-p1y+0.5)\")",
  325.                         },
  326.                         GreenExpression = Input {
  327.                             Expression = "Text(iif(Tiling==0,\"getg2b\",iif(Tiling==1,\"getg2d\",\"getg2w\"))..\"(r1*n1*n3-p1x+0.5,g1*n2*n3-p1y+0.5)\")",
  328.                         },
  329.                         BlueExpression = Input {
  330.                             Expression = "Text(iif(Tiling==0,\"getb2b\",iif(Tiling==1,\"getb2d\",\"getb2w\"))..\"(r1*n1*n3-p1x+0.5,g1*n2*n3-p1y+0.5)\")",
  331.                         },
  332.                         AlphaExpression = Input {
  333.                             Expression = "Text(iif(Tiling==0,\"geta2b\",iif(Tiling==1,\"geta2d\",\"geta2w\"))..\"(r1*n1*n3-p1x+0.5,g1*n2*n3-p1y+0.5)*a1\")",
  334.                         },
  335.                         NumberControls = Input {
  336.                             Value = 1,
  337.                         },
  338.                         NameforNumber1 = Input {
  339.                             Value = "Horizontal Repeats",
  340.                         },
  341.                         NameforNumber2 = Input {
  342.                             Value = "Vertical Repeats",
  343.                         },
  344.                         NameforNumber3 = Input {
  345.                             Value = "Combined Repeats",
  346.                         },
  347.                         NameforNumber4 = Input {
  348.                             Value = "Tiling",
  349.                         },
  350.                         NameforPoint1 = Input {
  351.                             Value = "Offset",
  352.                         },
  353.                         Image1 = Input {
  354.                             SourceOp = "Bol_Flip",
  355.                             Source = "Output",
  356.                         },
  357.                     },
  358.                     ViewInfo = OperatorInfo { Pos = { 30.2304, -72.0861, }, },
  359.                     UserControls = ordered() {
  360.                         Tiling = {
  361.                             { MBTNC_AddButton = "Transparent", },
  362.                             { MBTNC_AddButton = "Extend", },
  363.                             { MBTNC_AddButton = "Tile", },
  364.                             INPID_InputControl = "MultiButtonControl",
  365.                             IC_ControlPage = 0,
  366.                             MBTNC_StretchToFit = true,
  367.                             LINKID_DataType = "Number",
  368.                             INP_Default = 0,
  369.                         },
  370.                     },
  371.                 },
  372.                 Bmp_Red = BitmapMask {
  373.                     Inputs = {
  374.                         Image = Input {
  375.                             SourceOp = "Fltr_Folds",
  376.                             Source = "Output",
  377.                         },
  378.                         Channel = Input {
  379.                             Value = FuID { "Red", },
  380.                         },
  381.                         High = Input {
  382.                             Expression = "FoldsThreshold",
  383.                         },
  384.                         Low = Input {
  385.                             Expression = "FoldsThreshold",
  386.                         },
  387.                     },
  388.                     ViewInfo = OperatorInfo { Pos = { -43.0808, 24.0559, }, },
  389.                     UserControls = ordered() {
  390.                         FoldsThreshold = {
  391.                             LINKID_DataType = "Number",
  392.                             LINKS_Name = "Folds Threshold",
  393.                             IC_ControlPage = 0,
  394.                             INPID_InputControl = "SliderControl",
  395.                             INP_Default = 0.15,
  396.                         },
  397.                     },
  398.                 },
  399.                 Blur_Folds = Blur {
  400.                     Inputs = {
  401.                         Blend = Input {
  402.                             Expression = "CT_Folds.CorrectFolds",
  403.                         },
  404.                         Filter = Input {
  405.                             Value = FuID { "Multi-box", },
  406.                         },
  407.                         XBlurSize = Input {
  408.                             Value = 0.01,
  409.                         },
  410.                         YBlurSize = Input {
  411.                             Disabled = true,
  412.                         },
  413.                         BlendClone = Input {
  414.                             Expression = "CT_Folds.CorrectFolds",
  415.                         },
  416.                         Input = Input {
  417.                             SourceOp = "Mat_CleanEdges",
  418.                             Source = "Output",
  419.                         },
  420.                         EffectMask = Input {
  421.                             SourceOp = "CT_UVPlacer",
  422.                             Source = "Output",
  423.                         },
  424.                     },
  425.                     ViewInfo = OperatorInfo { Pos = { 170.878, 18.5273, }, },
  426.                     Colors = {
  427.                         TileColor = { R = 0.423529411764706, G = 0.545098039215686, B = 0.376470588235294, },
  428.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  429.                     },
  430.                     UserControls = ordered() {
  431.                         XBlurSize = {
  432.                             ICD_Center = 0.01,
  433.                             LINKID_DataType = "Number",
  434.                             INPID_InputControl = "SliderControl",
  435.                             IC_ControlPage = 0,
  436.                             INP_MaxScale = 0.1,
  437.                             INP_Default = 0.01,
  438.                         },
  439.                     },
  440.                 },
  441.                 Bmp_Green = BitmapMask {
  442.                     NameSet = true,
  443.                     Inputs = {
  444.                         PaintMode = Input {
  445.                             Value = FuID { "Maximum", },
  446.                         },
  447.                         Image = Input {
  448.                             SourceOp = "Fltr_Folds",
  449.                             Source = "Output",
  450.                         },
  451.                         Channel = Input {
  452.                             Value = FuID { "Green", },
  453.                         },
  454.                         High = Input {
  455.                             Value = 0.15,
  456.                             Expression = "Bmp_Red.High",
  457.                         },
  458.                         Low = Input {
  459.                             Value = 0.15,
  460.                             Expression = "Bmp_Red.Low",
  461.                         },
  462.                         EffectMask = Input {
  463.                             SourceOp = "Bmp_Red",
  464.                             Source = "Mask",
  465.                         },
  466.                     },
  467.                     ViewInfo = OperatorInfo { Pos = { -42.5279, 43.4062, }, },
  468.                 },
  469.                 Bmp_Alpha = BitmapMask {
  470.                     CtrlWZoom = false,
  471.                     Inputs = {
  472.                         PaintMode = Input {
  473.                             Value = FuID { "Subtract", },
  474.                         },
  475.                         Image = Input {
  476.                             SourceOp = "Fltr_Folds",
  477.                             Source = "Output",
  478.                         },
  479.                         EffectMask = Input {
  480.                             SourceOp = "Bmp_Green",
  481.                             Source = "Mask",
  482.                         },
  483.                     },
  484.                     ViewInfo = OperatorInfo { Pos = { -46.398, 62.2036, }, },
  485.                 },
  486.                 CT_Folds = Custom {
  487.                     Inputs = {
  488.                         Blend = Input {
  489.                             Expression = "CT_Folds.CorrectFolds",
  490.                         },
  491.                         RedExpression = Input {
  492.                             Value = "if(a1>0,if(r1>0,r1/a1,0),0)",
  493.                         },
  494.                         GreenExpression = Input {
  495.                             Value = "if(a1>0,if(g1>0,g1/a1,0),0)",
  496.                         },
  497.                         BlueExpression = Input {
  498.                             Value = "if(a1>0,if(b1>0,b1/a1,0),0)",
  499.                         },
  500.                         AlphaExpression = Input {
  501.                             Value = "if(a1>0,if(a1>0,a1/a1,0),0)",
  502.                         },
  503.                         Image1 = Input {
  504.                             SourceOp = "Blur_Folds",
  505.                             Source = "Output",
  506.                         },
  507.                         EffectMask = Input {
  508.                             SourceOp = "Bmp_Alpha",
  509.                             Source = "Mask",
  510.                         },
  511.                     },
  512.                     ViewInfo = OperatorInfo { Pos = { 171.431, 48.9349, }, },
  513.                     UserControls = ordered() {
  514.                         CorrectFolds = {
  515.                             LINKS_Name = "Correct Folds",
  516.                             LINKID_DataType = "Number",
  517.                             IC_ControlPage = 5,
  518.                             INPID_InputControl = "CheckboxControl",
  519.                             INP_Default = 0,
  520.                         },
  521.                     },
  522.                 },
  523.                 Bol_PostMultiply = ChannelBoolean {
  524.                     NameSet = true,
  525.                     Inputs = {
  526.                         Blend = Input {
  527.                             Value = 0,
  528.                             Expression = "MultiplyByMask",
  529.                         },
  530.                         MultiplyByMask = Input { Value = 1, },
  531.                         Operation = Input { Value = 6, },
  532.                         ToRed = Input { Value = 3, },
  533.                         ToGreen = Input { Value = 3, },
  534.                         ToBlue = Input { Value = 3, },
  535.                         ToAlpha = Input { Value = 4, },
  536.                         Background = Input {
  537.                             SourceOp = "CT_Folds",
  538.                             Source = "Output",
  539.                         },
  540.                         Foreground = Input {
  541.                             SourceOp = "Bol_Flip",
  542.                             Source = "Output",
  543.                         },
  544.                     },
  545.                     ViewInfo = OperatorInfo { Pos = { 289.439, 49.2393, }, },
  546.                     Colors = {
  547.                         TileColor = { R = 0.666666666666667, G = 0.501960784313725, B = 0.235294117647059, },
  548.                         TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  549.                     },
  550.                 },
  551.             },
  552.             Colors = {
  553.                 TileColor = { R = 0.501960784313725, G = 0.333333333333333, B = 0.498039215686275, },
  554.                 TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216, },
  555.             },
  556.         },
  557.     },
  558. }

Awesome! Thank you!

Also, to follow up on my previous post, I got an official response from Vision Effects that RE:Maps is not supported for Davinci Resolve.


User avatar
AndrewHazelden
Fusionator
Posts: 1380
Joined: Fri Apr 03, 2015 3:20 pm
Answers: 3
Location: West Dover, Nova Scotia, Canada
Been thanked: 56 times
Contact:

Re: Nuke's STMap equivalent in Fusion

#22

Post by AndrewHazelden » Thu Sep 19, 2019 9:26 am

white_wizard wrote:
Thu Sep 19, 2019 9:22 am

I got an official response from Vision Effects that RE:Maps is not supported for Davinci Resolve.

Thanks for looking into it. TBH that's a bit strange. RE:Vision Effects had updated their RSMB motion blur plugin to work in Fusion 16 and Resolve 16. I can't really tell you why REMap isn't supported there, too. :|

Hopefully, your inquiry might cause them to look into it.


white_wizard
Posts: 46
Joined: Wed Sep 18, 2019 3:53 pm
Been thanked: 1 time

Re: Nuke's STMap equivalent in Fusion

#23

Post by white_wizard » Thu Sep 19, 2019 9:58 am

AndrewHazelden wrote:
Thu Sep 19, 2019 9:26 am
white_wizard wrote:
Thu Sep 19, 2019 9:22 am

I got an official response from Vision Effects that RE:Maps is not supported for Davinci Resolve.

Thanks for looking into it. TBH that's a bit strange. RE:Vision Effects had updated their RSMB motion blur plugin to work in Fusion 16 and Resolve 16. I can't really tell you why REMap isn't supported there, too. :|

Hopefully, your inquiry might cause them to look into it.

Nearly all of their products are available for Resolve: https://revisionfx.com/products/for/resolve/

The rep I spoke to said they hope to get RE:Map on that list soon.


white_wizard
Posts: 46
Joined: Wed Sep 18, 2019 3:53 pm
Been thanked: 1 time

Re: Nuke's STMap equivalent in Fusion

#24

Post by white_wizard » Thu Sep 19, 2019 11:28 am

Midgardsormr wrote:
Thu Sep 19, 2019 6:17 am

Supersampling isn't a custom tool or scripting solution. It's just Resizing. Scale up the images by a factor of 4, perform the undistort, then scale back down. You could make a macro out of it if you wanted to, but it's not really necessary.

I made a macro that works nicely along with Gringo's UVpositioner. I've never messed with macros and expressions before but it ended up being a lot more intuitive than I feared.

The render times are insane so I forced everything to process in float16. I'm curious though what resize filters you recommend? I assume the STmap should be nothing other than Linear to avoid artifacts, but what about the src image? And do you have any tips to cut down processing time? I'm working in 3400x2500 Cinescope for my overscan sequences so the upscaling is insane even at 4x (I'm trying for 8x but it crashes everything).


User avatar
AndrewHazelden
Fusionator
Posts: 1380
Joined: Fri Apr 03, 2015 3:20 pm
Answers: 3
Location: West Dover, Nova Scotia, Canada
Been thanked: 56 times
Contact:

Re: Nuke's STMap equivalent in Fusion

#25

Post by AndrewHazelden » Thu Sep 19, 2019 11:31 am

white_wizard wrote:
Thu Sep 19, 2019 11:28 am

And do you have any tips to cut down processing time? I'm working in 3400x2500 Cinescope for my overscan sequences so the upscaling is insane even at 4x (I'm trying for 8x but it crashes everything).

Are you rendering the intermediate results of your comp out to an image sequence via a Saver node? If you are doing any amount of complex effects in Resolve's Fusion page or in Fusion 9 it's a good idea to use image sequences for both the source footage, and the rendered output. Avoid working with MP4 video or anything with a high keyframe interval in the codec.


white_wizard
Posts: 46
Joined: Wed Sep 18, 2019 3:53 pm
Been thanked: 1 time

Re: Nuke's STMap equivalent in Fusion

#26

Post by white_wizard » Thu Sep 19, 2019 11:37 am

AndrewHazelden wrote:
Thu Sep 19, 2019 11:31 am
white_wizard wrote:
Thu Sep 19, 2019 11:28 am

And do you have any tips to cut down processing time? I'm working in 3400x2500 Cinescope for my overscan sequences so the upscaling is insane even at 4x (I'm trying for 8x but it crashes everything).

Are you rendering the intermediate results of your comp out to an image sequence via a Saver node? If you are doing any amount of complex effects in Resolve's Fusion page or in Fusion 9 it's a good idea to use image sequences for both the source footage, and the rendered output. Avoid working with MP4 video or anything with a high keyframe interval in the codec.

Everything coming in is an EXR sequence. I can always work on a comp and have my STmaps filtering at 1x (no filtering) and then render with 4x or 8x, but the question is still how do I get those 4x or 8x processes to render faster? Maybe I'm just not used to this part of the process but it seems insane to have 4 hour long renders due 99.999% to the STmap filtering process alone.


User avatar
Midgardsormr
Fusionator
Posts: 1203
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 89 times
Contact:

Re: Nuke's STMap equivalent in Fusion

#27

Post by Midgardsormr » Thu Sep 19, 2019 11:48 am

white_wizard wrote:
Thu Sep 19, 2019 11:28 am

I'm curious though what resize filters you recommend? I assume the STmap should be nothing other than Linear to avoid artifacts, but what about the src image?

Linear when scaling up. To scale back down, I generally use Catmull-Rom for this kind of thing. It will apply some gentle sharpening, counteracting the softness that results from the distortion. If you have very high-contrast areas in the source image, you might see ringing. In some cases it can even create negative pixel values. In such a case, it can be helpful to apply a small blur through a luma key to reduce the contrast prior to down-scaling. Depending on the circumstances, even just clamping the blacks immediately after the downsample might be good enough, though.

Occasionally you might see better results from one of the others—if Catmull-Rom isn't giving me good results, I'll generally fall back to BiCubic, and if it's not sharpening quite enough, I might bump it up to Lanczos.

Regarding efficiency: I'd pre-render the distorted elements, just as I would with Optical Flow, denoise, or any other early-and-slow process that wasn't likely to need tweaking.


User avatar
SecondMan
Site Admin
Posts: 3572
Joined: Thu Jul 31, 2014 5:31 pm
Answers: 5
Location: Vancouver, Canada
Been thanked: 103 times
Contact:

Re: Nuke's STMap equivalent in Fusion

#28

Post by SecondMan » Thu Sep 19, 2019 12:09 pm

white_wizard wrote:
Thu Sep 19, 2019 11:28 am

The render times are insane so I forced everything to process in float16

Here, I've cobbled together a quick and dirty one for you to try. This should be a tad faster than the UVPositioner.

It's pretty bare bones for now. Let me know what features you're after and I'll see what I can do. Are you on Fusion 9 or 16?

white_wizard wrote:
Thu Sep 19, 2019 6:40 am

If anybody is interested, I'd pay for a Custom Tool or macro that I can use in Resolve Fusion.

Thank you! Have whatever I post here for free, you're welcome to it. But if you'd really like to offer much appreciated support, the biggest help is to...

Become a Patron!

You do not have the required permissions to view the files attached to this post.

User avatar
SecondMan
Site Admin
Posts: 3572
Joined: Thu Jul 31, 2014 5:31 pm
Answers: 5
Location: Vancouver, Canada
Been thanked: 103 times
Contact:

Re: Nuke's STMap equivalent in Fusion

#29

Post by SecondMan » Thu Sep 19, 2019 12:12 pm

Midgardsormr wrote:
Thu Sep 19, 2019 11:48 am

In some cases it can even create negative pixel values. In such a case, it can be helpful to apply a small blur through a luma key to reduce the contrast prior to down-scaling.

I'd recommend doing the scaling (or the entire STMap process) in log space and then convert back to linear.


User avatar
Midgardsormr
Fusionator
Posts: 1203
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 89 times
Contact:

Re: Nuke's STMap equivalent in Fusion

#30

Post by Midgardsormr » Thu Sep 19, 2019 1:20 pm

Oh, good idea! I never considered that.