LScript (Layout) smooth camera motions and position camera based upon motion of another object.
Compatible with Newtek LightWave 9.6 and above.
// LScript Item Animation - www.StephenCulley.co.uk
//
// web address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk
/*
LScript Item Animation - Steadicam
Motion_Steadicam.ls
*/
@version 2.2
@warnings
@script motion
@name *Steadicam
// Title
sTitle = "*Steadicam";
// Version
sVersion = "v1.0";
// Item
Item = nil;
ItemName = "nil";
iSamples = 3;
iOffset = 0;
nBias = 1.0;
create
{
setdesc(sTitle);
}
destroy
{
}
process: ma, frame, time
{
nStep = (1 / Scene().fps) * nBias;
nOffset = (1 / Scene().fps) * iOffset;
vPosition = <0.0,0.0,0.0>;
if(ItemName != "nil") {Item = Mesh(ItemName); ItemName = "nil";}
if(Item)
{
iCount = 0;
for(iS = -iSamples; iS <= iSamples; iS++)
{
vPosition += Item.getWorldPosition(time + (iS * nStep) + nOffset);
iCount++;
}
if(iCount > 1){vPosition = vPosition * (1 / iCount);}
}
// ma
ma.set(POSITION,vPosition);
}
load: what,io
{
if(what == SCENEMODE) // processing an ASCII scene file
{
ItemName = io.read().asStr();
iSamples = io.read().asInt();
iOffset = io.read().asInt();
nBias = io.read().asNum();
}
}
save: what,io
{
if(what == SCENEMODE)
{
if(Item != nil)
{
io.writeln(string(Item.name));
}
else
{
io.writeln("nil");
}
io.writeln(iSamples);
io.writeln(iOffset);
io.writeln(nBias);
}
}
options
{
if(reqisopen())
{
reqend();
return;
}
reqbegin(sTitle + " " + sVersion);
ctrl_c0 = ctlallitems("Item",Item);
ctrl_c1 = ctlslider("Samples",iSamples,0,100);
ctrl_c2 = ctlslider("Offset",iOffset,-100,100);
ctrl_c3 = ctlpercent("Bias",nBias);
// Developer
ctlsep();
ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
// Refresh
ctlrefresh(ctrl_c0,"refresh_c0"); // Item
ctlrefresh(ctrl_c1,"refresh_c1"); // Samples
ctlrefresh(ctrl_c2,"refresh_c2"); // Offset
ctlrefresh(ctrl_c3,"refresh_c3"); // Bias
reqopen();
}
refresh_c0:value // Item
{
Item = value;
}
refresh_c1:value // Samples
{
iSamples = value;
}
refresh_c2:value // Offset
{
iOffset = value;
}
refresh_c3:value // Bias
{
nBias = value;
}
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs