It's handy to have, but it shouldn't be the default. Disjoint-over doesn't work for overlapping transparent objects. It's a very case-specific merge operation (it combines two different ones based on alpha values)
for non-overlapping objects.
Code: Select all
{
Tools = ordered() {
Background1_1 = Background {
Inputs = {
EffectMask = Input {
SourceOp = "Ellipse1_1",
Source = "Mask",
},
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
TopLeftRed = Input { Value = 0.48365, },
TopLeftGreen = Input { Value = 0.5774356, },
TopLeftBlue = Input { Value = 0.85, },
TopLeftAlpha = Input { Value = 0.4, },
},
ViewInfo = OperatorInfo { Pos = { 330, -16.5 } },
},
Ellipse1_1 = EllipseMask {
Inputs = {
Filter = Input { Value = FuID { "Fast Gaussian" }, },
SoftEdge = Input { Value = 0.0043, },
MaskWidth = Input { Value = 1920, },
MaskHeight = Input { Value = 1080, },
PixelAspect = Input { Value = { 1, 1 }, },
ClippingMode = Input { Value = FuID { "None" }, },
Center = Input { Value = { 0.396755162241888, 0.5 }, },
Width = Input { Value = 0.304349879880853, },
Height = Input { Value = 0.304349879880853, },
},
ViewInfo = OperatorInfo { Pos = { 330, -49.5 } },
},
Ellipse1 = EllipseMask {
Inputs = {
Filter = Input { Value = FuID { "Fast Gaussian" }, },
SoftEdge = Input { Value = 0.0043, },
MaskWidth = Input { Value = 1920, },
MaskHeight = Input { Value = 1080, },
PixelAspect = Input { Value = { 1, 1 }, },
ClippingMode = Input { Value = FuID { "None" }, },
Center = Input { Value = { 0.585545722713864, 0.5 }, },
Width = Input { Value = 0.448697681112542, },
Height = Input { Value = 0.448697681112542, },
},
ViewInfo = OperatorInfo { Pos = { 220, 16.5 } },
},
Background1 = Background {
Inputs = {
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
TopLeftRed = Input { Value = 0.85, },
TopLeftGreen = Input { Value = 0.48365, },
TopLeftBlue = Input { Value = 0.48365, },
TopLeftAlpha = Input { Value = 0.4, },
EffectMask = Input {
SourceOp = "Ellipse1",
Source = "Mask",
}
},
ViewInfo = OperatorInfo { Pos = { 220, 49.5 } },
},
Merge1 = Merge {
CtrlWZoom = false,
Inputs = {
Background = Input {
SourceOp = "Background1",
Source = "Output",
},
Foreground = Input {
SourceOp = "Background1_1",
Source = "Output",
},
PerformDepthMerge = Input { Value = 0, },
},
ViewInfo = OperatorInfo { Pos = { 385, 82.5 } },
},
FringeFighterTurbo1 = MacroOperator {
Inputs = ordered() {
Comments = Input { Value = "Fringer Fighter Turbo emulates Nuke's Disjoint Over apply mode. Useful to handle the artifacting that appears when you merge smoke with holdout geo on top of the rendered geo (most noticeable with lots of motion blur).\n\nby Dan De'Etremont for Muse VFX\nhttp://www.musevfx.com\n", },
Background = InstanceInput {
SourceOp = "FringeFighterTurbo",
Source = "Image1",
Name = "BG",
},
Foreground = InstanceInput {
SourceOp = "FringeFighterTurbo",
Source = "Image2",
Name = "FG",
},
Blend = InstanceInput {
SourceOp = "FringeFighterTurbo",
Source = "Blend",
Default = 1,
},
EffectMask = InstanceInput {
SourceOp = "FringeFighterTurbo",
Source = "EffectMask",
}
},
Outputs = {
Output = InstanceOutput {
SourceOp = "FringeFighterTurbo",
Source = "Output",
}
},
ViewInfo = GroupInfo { Pos = { 495, 49.5 } },
Tools = ordered() {
FringeFighterTurbo = Custom {
CtrlWZoom = false,
CtrlWShown = false,
NameSet = true,
CustomData = {
Settings = {
[1] = {
Tools = ordered() {
CustomTool1 = Custom {
Inputs = {
LUTIn3 = Input {
SourceOp = "CustomTool1LUTIn3",
Source = "Value"
},
LUTIn1 = Input {
SourceOp = "CustomTool1LUTIn1",
Source = "Value"
},
Image1 = Input {
SourceOp = "TimeSpeed1",
Source = "Output"
},
Image2 = Input {
SourceOp = "ChangeDepth1_1",
Source = "Output"
},
LUTIn4 = Input {
SourceOp = "CustomTool1LUTIn4",
Source = "Value"
},
LUTIn2 = Input {
SourceOp = "CustomTool1LUTIn2",
Source = "Value"
}
},
Name = "CustomTool1",
CtrlWZoom = false,
ViewInfo = OperatorInfo { Pos = { 550, 181.5 } },
CustomData = {
}
},
CustomTool1LUTIn1 = LUTBezier {
Name = "CustomTool1LUTIn1",
NameSet = true,
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Green = 0, Blue = 0, Red = 204 }
},
CustomTool1LUTIn2 = LUTBezier {
Name = "CustomTool1LUTIn2",
NameSet = true,
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Green = 204, Blue = 0, Red = 0 }
},
CustomTool1LUTIn3 = LUTBezier {
Name = "CustomTool1LUTIn3",
NameSet = true,
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Green = 0, Blue = 204, Red = 0 }
},
CustomTool1LUTIn4 = LUTBezier {
Name = "CustomTool1LUTIn4",
NameSet = true,
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Green = 204, Blue = 204, Red = 204 }
}
}
},
[2] = {
Tools = ordered() {
CustomTool1 = Custom {
Inputs = {
LUTIn3 = Input {
SourceOp = "CustomTool1LUTIn3",
Source = "Value"
},
LUTIn4 = Input {
SourceOp = "CustomTool1LUTIn4",
Source = "Value"
},
Image2 = Input {
SourceOp = "ChangeDepth1_1",
Source = "Output"
},
RedExpression = Input { Value = "c1-c2" },
GreenExpression = Input { Value = "c1-c2" },
LUTIn1 = Input {
SourceOp = "CustomTool1LUTIn1",
Source = "Value"
},
Image1 = Input {
SourceOp = "TimeSpeed1",
Source = "Output"
},
BlueExpression = Input { Value = "c1-c2" },
LUTIn2 = Input {
SourceOp = "CustomTool1LUTIn2",
Source = "Value"
}
},
CtrlWZoom = false,
ViewInfo = OperatorInfo { Pos = { 550, 181.5 } },
CustomData = {
}
},
CustomTool1LUTIn1 = LUTBezier {
SplineColor = { Green = 0, Blue = 0, Red = 204 },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
NameSet = true
},
CustomTool1LUTIn2 = LUTBezier {
SplineColor = { Green = 204, Blue = 0, Red = 0 },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
NameSet = true
},
CustomTool1LUTIn3 = LUTBezier {
SplineColor = { Green = 0, Blue = 204, Red = 0 },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
NameSet = true
},
CustomTool1LUTIn4 = LUTBezier {
SplineColor = { Green = 204, Blue = 204, Red = 204 },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
NameSet = true
}
}
},
[3] = {
Tools = ordered() {
CustomTool1 = Custom {
Inputs = {
LUTIn3 = Input {
SourceOp = "CustomTool1LUTIn3",
Source = "Value"
},
LUTIn4 = Input {
SourceOp = "CustomTool1LUTIn4",
Source = "Value"
},
Image2 = Input {
SourceOp = "ChangeDepth1_1",
Source = "Output"
},
RedExpression = Input { Value = "c1+c2" },
GreenExpression = Input { Value = "c1+c2" },
LUTIn1 = Input {
SourceOp = "CustomTool1LUTIn1",
Source = "Value"
},
Image1 = Input {
SourceOp = "TimeSpeed1",
Source = "Output"
},
BlueExpression = Input { Value = "c1+c2" },
LUTIn2 = Input {
SourceOp = "CustomTool1LUTIn2",
Source = "Value"
}
},
CtrlWZoom = false,
ViewInfo = OperatorInfo { Pos = { 550, 181.5 } },
CustomData = {
}
},
CustomTool1LUTIn1 = LUTBezier {
SplineColor = { Green = 0, Blue = 0, Red = 204 },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
NameSet = true
},
CustomTool1LUTIn2 = LUTBezier {
SplineColor = { Green = 204, Blue = 0, Red = 0 },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
NameSet = true
},
CustomTool1LUTIn3 = LUTBezier {
SplineColor = { Green = 0, Blue = 204, Red = 0 },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
NameSet = true
},
CustomTool1LUTIn4 = LUTBezier {
SplineColor = { Green = 204, Blue = 204, Red = 204 },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
NameSet = true
}
}
}
}
},
Inputs = {
LUTIn1 = Input {
SourceOp = "CustomTool1LUTIn1",
Source = "Value",
},
LUTIn2 = Input {
SourceOp = "CustomTool1LUTIn2",
Source = "Value",
},
LUTIn3 = Input {
SourceOp = "CustomTool1LUTIn3",
Source = "Value",
},
LUTIn4 = Input {
SourceOp = "CustomTool1LUTIn4",
Source = "Value",
},
RedExpression = Input { Value = "if(a2+a1<1, c2+c1, (c2+c1*(1-a2)/a1))", },
GreenExpression = Input { Value = "if(a2+a1<1, c2+c1, (c2+c1*(1-a2)/a1))", },
BlueExpression = Input { Value = "if(a2+a1<1, c2+c1, (c2+c1*(1-a2)/a1))", },
AlphaExpression = Input { Value = "if(a2+a1<1, c2+c1, (c2+c1*(1-a2)/a1))", },
Image1 = Input {
SourceOp = "Background1",
Source = "Output",
},
Image2 = Input {
SourceOp = "Background1_1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 0, 8.75758 } },
},
CustomTool1LUTIn1 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 204, Green = 0, Blue = 0 },
},
CustomTool1LUTIn2 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 0, Green = 204, Blue = 0 },
},
CustomTool1LUTIn3 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 0, Green = 0, Blue = 204 },
},
CustomTool1LUTIn4 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 204, Green = 204, Blue = 204 },
}
},
}
}
}
, FringeFighter takes the DoD of the BG rather than the union of FG and BG.