- Posts: 3
- Joined: Thu Nov 08, 2018 7:00 am
- Real Name: Raj Thoppil
What I typically do for these things is to use Fusion's particle system and feed in individual characters as individual particles (essentially a text+ and then using an expression to show one character per-frame). I then use the pCustom to animate the position and all kinds of other stuff based on the particle ID.
See below for a very simple example (just copy & paste into a new comp), but you can make it much smarter and automate and awful lot. Maybe some other folks have got an easier method for this stuff though.
- Code: Select all
{
Tools = ordered() {
Text1 = TextPlus {
Inputs = {
Width = Input { Value = 100, },
Height = Input { Value = 100, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
Size = Input { Value = 1.5, },
Font = Input { Value = "Open Sans", },
StyledText = Input {
Value = "T",
Expression = "string.sub(\"THIS IS TEXT\",time+1,time+1)",
},
Style = Input { Value = "Bold", },
ManualFontKerningPlacement = Input {
Value = StyledText {
Array = {
},
Value = ""
},
},
},
ViewInfo = OperatorInfo { Pos = { 224, 26 } },
},
pCustom1 = pCustom {
ID = 12,
CtrlWZoom = false,
Inputs = {
Intermediate1 = Input { Value = "id-2", },
PositionXExpression = Input { Value = "if(age==0,rand(-1,1),px)", },
PositionYExpression = Input { Value = "if(age==0,rand(-1,1),py)", },
PositionZExpression = Input { Value = "0", },
VelocityXExpression = Input { Value = "if(time>15, ((i1/20)-px)/10,0)", },
VelocityYExpression = Input { Value = "if(time>15, (0-py)/10,0)", },
RotationZExpression = Input { Value = "if(time>15,(i1-py)*360,0)", },
AlphaExpression = Input { Value = "if(time<15,0,1)", },
MassExpression = Input { Value = "", },
UserExpression = Input { Value = "", },
Input = Input {
SourceOp = "pEmitter1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 457, 193 } },
},
pEmitter1 = pEmitter {
ID = 8,
Inputs = {
Number = Input { Value = 1, },
Style = Input { Value = FuID { "ParticleStyleBitmap" }, },
["ParticleStyle.SizeOverLife"] = Input {
SourceOp = "pEmitter1SizeoverLife",
Source = "Value",
},
["ParticleStyle.BlurOverLife"] = Input {
SourceOp = "pEmitter1BluroverLife2D",
Source = "Value",
},
["ParticleStyleBitmap.Animate"] = Input { Value = 2, },
["ParticleStyleBitmap.DropToolsHere"] = Input {
SourceOp = "Text1",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 325, 193 } },
},
pEmitter1SizeoverLife = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0.5, RH = { 0.3, 0.5 }, Flags = { Linear = true } },
[1] = { 0.5, LH = { 0.7, 0.5 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 192, Green = 128, Blue = 64 },
NameSet = true,
},
pEmitter1BluroverLife2D = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0.5, RH = { 0.3, 0.5 }, Flags = { Linear = true } },
[1] = { 0.5, LH = { 0.7, 0.5 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 192, Green = 128, Blue = 64 },
NameSet = true,
},
pRender1 = pRender {
Inputs = {
_MotionBlurWarning = Input { Disabled = true, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
IntegrationMethod = Input { Value = FuID { "RK4" }, },
["MaterialID.MaterialID"] = Input { Value = 1, },
["ObjectID.ObjectID"] = Input { Value = 1, },
Input = Input {
SourceOp = "pCustom1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 690, 196 } },
}
}
}