OK, I found a way who you can solve your problem. There are potentially better ways with expressions, but I'm not really good with expressions so I solved it in the old fashion way.
Basically when you set everything to auto resolution, the checkbox and everything will adopt to new resolution, but also aspect ratio as well, which leads to checkbox and circle looking squashed. Probably the more elegant solution than mine is to use expression which compensates for aspect ratio change. But since I don't know how to write such an expression, here is another method that works.
First thing to know is that fusion is using both coordinates system and pixel based system for canvas size, resizing, transforming etc. Sometimes you just want to transform something and other times you want to actually change pixels. Some nodes only transform and use coordinates system, others use pixels and resize. Letterbox, scale, crop and resize nodes change pixels and pretty much all others just transform.
Letterbox tool for example can be used to adapt existing images to the frame size and aspect ratios of any other format. While it changes resolution for this use its not as important as basically acing as a crop tool. With the support for auto resolution. Which is what I needed. I didn't want to change the aspect ratio of the checkmark only the canvas in which it resides, and than transform it to fit new canvas, by using transform node and its coordinates system, so its always proportional. That way, the checkbox remains of proper aspect ratio, canvas changes the aspect ratio and transform node puts it in the proportionally correct place in the new canvas.
Since its not always easy to work with other people's comps because everyone likes to work in their own way, and sometimes is messes up problem solving, I used your comp as reference and made a simpler version of the comp to specifically find a solution to problem of aspect ratio. I'll share that comp, but you can use the same method if you like to modify your own comp or any other and make it adopt to changing resolution.
Basically in this comp I'll share you will notice that before letterbox node, I leave the auto resolution off, because in this particular case we want the checkmark to remain of the same aspect ratio. And than from letterbox onward, including that node, I leave the auto resolution on, because than the checkmark of the proper aspect ratio gets transformed and scaled correctly but not squished.
You can quickly demo this, by changing resolution of the timelime in the timeline settings, which you can open from media pool, so as you work you can check if your template will hold up, when you change timelime resolution.

- sshot-1328.jpg (228.29 KiB) Viewed 1933 times

- sshot-1329.jpg (219.21 KiB) Viewed 1933 times
You can just copy this code, and paste it into empty area in your fusion composition. If you have questions, ask, but I hope its clear enough. Before letterbox auto resolution is off, after letterbox and that very same node, has the auto resolution on. So it keeps the aspect ratio of checkmark the same but adopts everything else.
- Code: Select all
{
Tools = ordered() {
Merge2 = Merge {
Inputs = {
Background = Input {
SourceOp = "Background2",
Source = "Output",
},
Foreground = Input {
SourceOp = "Background3",
Source = "Output",
},
PerformDepthMerge = Input { Value = 0, }
},
ViewInfo = OperatorInfo { Pos = { 160.02, -36.4213 } },
},
BSpline1 = BSplineMask {
DrawMode = "ModifyOnly",
DrawMode2 = "InsertAndModify",
Inputs = {
Filter = Input { Value = FuID { "Fast Gaussian" }, },
BorderWidth = Input { Value = 0.0056, },
Solid = Input { Value = 0, },
JoinStyle = Input {
SourceOp = "BSpline1JoinStyle",
Source = "Value",
},
CapStyle = Input {
SourceOp = "BSpline1CapStyle",
Source = "Value",
},
WriteLength = Input {
SourceOp = "BSpline1Length",
Source = "Value",
},
OutputSize = Input { Value = FuID { "Custom" }, },
MaskWidth = Input { Value = 1920, },
MaskHeight = Input { Value = 1080, },
PixelAspect = Input { Value = { 1, 1 }, },
ZRotation = Input { Value = -0.76645324242206, },
Polyline = Input {
Value = BSplinePolyline {
Points = {
{ X = -0.0118908964914001, Y = 0.00862839313263793, W = 2 },
{ X = 0.000485436893203905, Y = -0.00819672131147542, W = 2 },
{ X = 0.0391483516483517, Y = 0.0865853658536585, W = 2 }
},
Order = 4,
Type = "Tensioned",
Knots = { 0, 0, 0, 0, 1, 1, 1, 1 }
},
},
Polyline2 = Input {
Value = BSplinePolyline {
Order = 4,
Type = "Tensioned",
Knots = { }
},
Disabled = true,
}
},
ViewInfo = OperatorInfo { Pos = { 160.02, -116.325 } },
},
BSpline1JoinStyle = BezierSpline {
SplineColor = { Red = 97, Green = 140, Blue = 252 },
NameSet = true,
KeyFrames = {
[80] = { 1 }
}
},
BSpline1CapStyle = BezierSpline {
SplineColor = { Red = 26, Green = 242, Blue = 4 },
NameSet = true,
KeyFrames = {
[39] = { 0, RH = { 52.6666666666667, 0 } },
[80] = { 1, LH = { 66.3333333333333, 1 } }
}
},
BSpline1Length = BezierSpline {
SplineColor = { Red = 141, Green = 167, Blue = 243 },
NameSet = true,
KeyFrames = {
[39] = { 0, RH = { 52.6666666666667, 0 } },
[80] = { 1, LH = { 66.3333333333333, 1 } }
}
},
Background3 = Background {
Inputs = {
GlobalOut = Input { Value = 479, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
TopLeftGreen = Input { Value = 0.666666666666667, },
EffectMask = Input {
SourceOp = "BSpline1",
Source = "Mask",
}
},
ViewInfo = OperatorInfo { Pos = { 160.02, -83.3247 } },
},
Text1 = TextPlus {
Inputs = {
GlobalOut = Input { Value = 479, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
UseFrameFormatSettings = Input { Value = 1, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
Center = Input { Value = { 0.250390015600624, 0.5 }, },
LayoutRotation = Input { Value = 1, },
CharacterOffset = Input { Value = { -0.069, 0 }, },
TransformRotation = Input { Value = 1, },
Softness1 = Input { Value = 1, },
StyledText = Input { Value = "Checkbox for DaVinci", },
Font = Input { Value = "Open Sans", },
Style = Input { Value = "Bold", },
VerticalJustificationNew = Input { Value = 3, },
HorizontalLeftCenterRight = Input { Value = -1, },
HorizontalJustificationNew = Input { Value = 3, },
Start = Input {
SourceOp = "Text1WriteOnStart",
Source = "Value",
},
End = Input {
SourceOp = "Text1WriteOnEnd",
Source = "Value",
}
},
ViewInfo = OperatorInfo { Pos = { 355.239, 15.3144 } },
Colors = { TileColor = { R = 0.584313725490196, G = 0.294117647058824, B = 0.803921568627451 }, }
},
Text1WriteOnStart = BezierSpline {
SplineColor = { Red = 249, Green = 211, Blue = 150 },
NameSet = true,
KeyFrames = {
[40] = { 0 }
}
},
Text1WriteOnEnd = BezierSpline {
SplineColor = { Red = 218, Green = 249, Blue = 145 },
CtrlWZoom = false,
NameSet = true,
KeyFrames = {
[40] = { 0, RH = { 60, 0 } },
[100] = { 1, LH = { 80, 1 } }
}
},
Letterbox1 = Letterbox {
Inputs = {
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
UseFrameFormatSettings = Input { Value = 1, },
HiQOnly = Input { Value = 0, },
Input = Input {
SourceOp = "Merge2",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 160.02, 9.41153 } },
},
DropShadow1 = ofx.com.blackmagicdesign.resolvefx.DropShadow {
Inputs = {
Source = Input {
SourceOp = "Text1",
Source = "Output",
},
shadowStrength = Input { Value = 0, },
shadowAngle = Input { Value = 37.5, },
ShadowDistance = Input { Value = 0.0500000007450581, },
shadowBlur = Input { Value = 0.550000011920929, },
shadowColorRed = Input { Value = 0, },
shadowColorGreen = Input { Value = 0, },
shadowColorBlue = Input { Value = 0, },
isLegacyComp = Input { Value = 0, },
blendGroup = Input { Value = 0, },
blendIn = Input { Value = 1, },
blend = Input { Value = 0, },
ignoreContentShape = Input { Value = 0, },
legacyIsProcessRGBOnly = Input { Value = 0, },
IsNoTemporalFramesReqd = Input { Value = 0, },
refreshTrigger = Input { Value = 1, },
srcProcessingAlphaMode = Input { Value = 2, },
dstProcessingAlphaMode = Input { Value = 2, },
resolvefxVersion = Input { Value = "2.0", }
},
ViewInfo = OperatorInfo { Pos = { 355.239, 48.3145 } },
Colors = { TileColor = { R = 0.584313725490196, G = 0.294117647058824, B = 0.803921568627451 }, }
},
Transform1 = Transform {
Inputs = {
Center = Input { Value = { 0.125, 0.5 }, },
Input = Input {
SourceOp = "Letterbox1",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 160.02, 49.495 } },
},
Ellipse1 = EllipseMask {
Inputs = {
Filter = Input { Value = FuID { "Fast Gaussian" }, },
BorderWidth = Input { Value = 0.0056, },
Solid = Input { Value = 0, },
CapStyle = Input {
SourceOp = "Ellipse1CapStyle",
Source = "Value",
},
WriteLength = Input {
SourceOp = "Ellipse1Length",
Source = "Value",
},
OutputSize = Input { Value = FuID { "Custom" }, },
MaskWidth = Input { Value = 1920, },
MaskHeight = Input { Value = 1080, },
PixelAspect = Input { Value = { 1, 1 }, },
Width = Input { Value = 0.053565492132558, },
Height = Input { Value = 0.053565492132558, },
Angle = Input { Value = 74.5, }
},
ViewInfo = OperatorInfo { Pos = { 12.1115, -86.7447 } },
},
Ellipse1CapStyle = BezierSpline {
SplineColor = { Red = 26, Green = 242, Blue = 4 },
NameSet = true,
KeyFrames = {
[25] = { 0, RH = { 36.6666666666667, 0 } },
[60] = { 1, LH = { 48.3333333333333, 1 } }
}
},
Ellipse1Length = BezierSpline {
SplineColor = { Red = 141, Green = 167, Blue = 243 },
CtrlWZoom = false,
NameSet = true,
KeyFrames = {
[25] = { 0, RH = { 36.6666666666667, 0 } },
[60] = { 0.84, LH = { 48.3333333333333, 0.84 } }
}
},
Background2 = Background {
Inputs = {
GlobalOut = Input { Value = 479, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
TopLeftRed = Input { Value = 1, },
TopLeftGreen = Input { Value = 1, },
TopLeftBlue = Input { Value = 1, },
EffectMask = Input {
SourceOp = "Ellipse1",
Source = "Mask",
}
},
ViewInfo = OperatorInfo { Pos = { 12.1115, -36.4213 } },
},
Merge1_1 = Merge {
CtrlWZoom = false,
Inputs = {
Background = Input {
SourceOp = "Merge1",
Source = "Output",
},
Foreground = Input {
SourceOp = "DropShadow1",
Source = "Output",
},
PerformDepthMerge = Input { Value = 0, }
},
ViewInfo = OperatorInfo { Pos = { 355.239, 112.497 } },
},
Merge1 = Merge {
Inputs = {
Background = Input {
SourceOp = "Background1",
Source = "Output",
},
Foreground = Input {
SourceOp = "Transform1",
Source = "Output",
},
PerformDepthMerge = Input { Value = 0, }
},
ViewInfo = OperatorInfo { Pos = { 160.02, 112.497 } },
},
Background1 = Background {
Inputs = {
GlobalOut = Input { Value = 479, },
Width = Input {
SourceOp = "Publish1",
Source = "Value",
},
Height = Input {
SourceOp = "Publish2",
Source = "Value",
},
UseFrameFormatSettings = Input { Value = 1, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
TopLeftAlpha = Input { Value = 0, }
},
ViewInfo = OperatorInfo { Pos = { -25.415, 112.497 } },
},
Publish1 = PublishNumber {
CtrlWZoom = false,
Inputs = {
Value = Input { Value = 1920, }
},
},
Publish2 = PublishNumber {
Inputs = {
Value = Input { Value = 1080, }
},
}
}
}
By the way, in your comp I run into an issue with fonts for text + nodes. if you share nodes with others, best to use open sans or default fonts so there is no compatibility issues.
I hope with this, you can modify your template or any other you might be making and have it dynamically adopt to any change in format of the timeline, which today with horizontal and vertical nonsense because of all the social media can be necessary. But I think this should also work if you change resolution to Ultra HD or 720p or anything else.
But than I remembered its a problem. Because we are not "auto resolution" scaling all the comp, only portions of it. It helps use solve the horizontal to vertical problem, but when you go from 1080p to Ultra HD resolution or something larger than nodes that are not auto updating, they are being scaled, but using previous lower resolution so there is loss in quality.
The solution could be done with expressions and other tricks, but in this case it was simpler to use shape system to solve that problem as well. So this is now updated version with shape system, which is probably how you want to create your own. That way you can solve even with no letterbox , both the vertical to horizontal change and going form lower to higher resolution and back. Pretty much solves it all I think.
- Code: Select all
{
Tools = ordered() {
sEllipse1 = sEllipse {
Inputs = {
Solid = Input { Value = 0, },
BorderWidth = Input { Value = 0.0125, },
CapStyle = Input {
SourceOp = "sEllipse1CapStyle",
Source = "Value",
},
WriteLength = Input {
SourceOp = "sEllipse1Length",
Source = "Value",
},
Width = Input { Value = 0.128065071869009, },
Height = Input { Value = 0.128065071869009, },
Angle = Input { Value = 84.7, }
},
ViewInfo = OperatorInfo { Pos = { 21.1857, -15.206 } },
},
sEllipse1CapStyle = BezierSpline {
SplineColor = { Red = 26, Green = 242, Blue = 4 },
NameSet = true,
KeyFrames = {
[20] = { 0, RH = { 40, 0 } },
[80] = { 1, LH = { 60, 1 } }
}
},
sEllipse1Length = BezierSpline {
SplineColor = { Red = 141, Green = 167, Blue = 243 },
CtrlWZoom = false,
NameSet = true,
KeyFrames = {
[20] = { 0, RH = { 40, 0 } },
[80] = { 0.749, LH = { 60, 0.749 } }
}
},
sBSpline1 = sBSpline {
DrawMode = "InsertAndModify",
Inputs = {
Solid = Input { Value = 0, },
BorderWidth = Input { Value = 0.0172, },
JoinStyle = Input {
SourceOp = "sBSpline1JoinStyle",
Source = "Value",
},
CapStyle = Input {
SourceOp = "sBSpline1CapStyle",
Source = "Value",
},
WriteLength = Input {
SourceOp = "sBSpline1Length",
Source = "Value",
},
Center = Input { Value = { 0, -0.00950782997762863 }, },
Polyline = Input {
Value = BSplinePolyline {
Points = {
{ X = -0.0279642058165548, Y = 0.0243288590604027, W = 2 },
{ X = 0.000559284116331096, Y = -0.000838926174496645, W = 2 },
{ X = 0.107941834451902, Y = 0.102628635346756, W = 2 }
},
Order = 4,
Type = "Tensioned",
Knots = { 0, 0, 0, 0, 1, 1, 1, 1 }
},
},
Red = Input { Value = 0, },
Green = Input { Value = 0.666666666666667, },
Blue = Input { Value = 0, }
},
ViewInfo = OperatorInfo { Pos = { 160.02, -63.8765 } },
},
sBSpline1JoinStyle = BezierSpline {
SplineColor = { Red = 97, Green = 140, Blue = 252 },
NameSet = true,
KeyFrames = {
[48] = { 1 }
}
},
sBSpline1CapStyle = BezierSpline {
SplineColor = { Red = 26, Green = 242, Blue = 4 },
NameSet = true,
KeyFrames = {
[48] = { 0, RH = { 58.6666666666667, 0 } },
[80] = { 1, LH = { 69.3333333333333, 1 } }
}
},
sBSpline1Length = BezierSpline {
SplineColor = { Red = 141, Green = 87, Blue = 243 },
CtrlWZoom = false,
NameSet = true,
KeyFrames = {
[48] = { 0, RH = { 58.6666666666667, 0 } },
[80] = { 1, LH = { 69.3333333333333, 1 } }
}
},
Transform1 = Transform {
Inputs = {
Center = Input { Value = { 0.125, 0.5 }, },
Size = Input { Value = 0.429, },
Input = Input {
SourceOp = "sRender1",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 160.02, 63.7743 } },
},
sRender1 = sRender {
Inputs = {
GlobalOut = Input { Value = 479, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
UseFrameFormatSettings = Input { Value = 1, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
Input = Input {
SourceOp = "sMerge1",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 160.02, 27.6901 } },
},
sMerge1 = sMerge {
Inputs = {
Input1 = Input {
SourceOp = "sEllipse1",
Source = "Output",
},
Input2 = Input {
SourceOp = "sBSpline1",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 160.02, -15.206 } },
},
Merge1 = Merge {
Inputs = {
Background = Input {
SourceOp = "Background1",
Source = "Output",
},
Foreground = Input {
SourceOp = "Transform1",
Source = "Output",
},
PerformDepthMerge = Input { Value = 0, }
},
ViewInfo = OperatorInfo { Pos = { 160.02, 112.497 } },
},
Background1 = Background {
Inputs = {
GlobalOut = Input { Value = 479, },
Width = Input {
SourceOp = "Publish1",
Source = "Value",
},
Height = Input {
SourceOp = "Publish2",
Source = "Value",
},
UseFrameFormatSettings = Input { Value = 1, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
TopLeftAlpha = Input { Value = 0, }
},
ViewInfo = OperatorInfo { Pos = { -25.415, 112.497 } },
},
Publish1 = PublishNumber {
CtrlWZoom = false,
Inputs = {
Value = Input { Value = 1920, }
},
},
Publish2 = PublishNumber {
Inputs = {
Value = Input { Value = 1080, }
},
},
Merge1_1 = Merge {
Inputs = {
Background = Input {
SourceOp = "Merge1",
Source = "Output",
},
Foreground = Input {
SourceOp = "DropShadow1",
Source = "Output",
},
PerformDepthMerge = Input { Value = 0, }
},
ViewInfo = OperatorInfo { Pos = { 355.239, 112.497 } },
},
DropShadow1 = ofx.com.blackmagicdesign.resolvefx.DropShadow {
Inputs = {
Source = Input {
SourceOp = "Text1",
Source = "Output",
},
shadowStrength = Input { Value = 0, },
shadowAngle = Input { Value = 37.5, },
ShadowDistance = Input { Value = 0.0500000007450581, },
shadowBlur = Input { Value = 0.550000011920929, },
shadowColorRed = Input { Value = 0, },
shadowColorGreen = Input { Value = 0, },
shadowColorBlue = Input { Value = 0, },
isLegacyComp = Input { Value = 0, },
blendGroup = Input { Value = 0, },
blendIn = Input { Value = 1, },
blend = Input { Value = 0, },
ignoreContentShape = Input { Value = 0, },
legacyIsProcessRGBOnly = Input { Value = 0, },
IsNoTemporalFramesReqd = Input { Value = 0, },
refreshTrigger = Input { Value = 1, },
srcProcessingAlphaMode = Input { Value = 2, },
dstProcessingAlphaMode = Input { Value = 2, },
resolvefxVersion = Input { Value = "2.0", }
},
ViewInfo = OperatorInfo { Pos = { 355.239, 48.3145 } },
Colors = { TileColor = { R = 0.584313725490196, G = 0.294117647058824, B = 0.803921568627451 }, }
},
Text1 = TextPlus {
Inputs = {
GlobalOut = Input { Value = 479, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
UseFrameFormatSettings = Input { Value = 1, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
Center = Input { Value = { 0.250390015600624, 0.5 }, },
LayoutRotation = Input { Value = 1, },
CharacterOffset = Input { Value = { -0.069, 0 }, },
TransformRotation = Input { Value = 1, },
Softness1 = Input { Value = 1, },
StyledText = Input { Value = "Checkbox for DaVinci", },
Font = Input { Value = "Open Sans", },
Style = Input { Value = "Bold", },
VerticalJustificationNew = Input { Value = 3, },
HorizontalLeftCenterRight = Input { Value = -1, },
HorizontalJustificationNew = Input { Value = 3, },
Start = Input {
SourceOp = "Text1WriteOnStart",
Source = "Value",
},
End = Input {
SourceOp = "Text1WriteOnEnd",
Source = "Value",
}
},
ViewInfo = OperatorInfo { Pos = { 355.239, 15.3144 } },
Colors = { TileColor = { R = 0.584313725490196, G = 0.294117647058824, B = 0.803921568627451 }, }
},
Text1WriteOnStart = BezierSpline {
SplineColor = { Red = 249, Green = 211, Blue = 150 },
NameSet = true,
KeyFrames = {
[40] = { 0 }
}
},
Text1WriteOnEnd = BezierSpline {
SplineColor = { Red = 218, Green = 249, Blue = 145 },
CtrlWZoom = false,
NameSet = true,
KeyFrames = {
[40] = { 0, RH = { 60, 0 } },
[100] = { 1, LH = { 80, 1 } }
}
}
}
}