LScript (Layout) desaturates the image based on depth buffer.
Compatible with Newtek LightWave 9.6 and above.
// LScript Image Filter - www.StephenCulley.co.uk
//
// web address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk
/*
LScript Image Filter - Depth Desaturate
Image_DepthDesaturate.ls
*/
@version 2.5
@warnings
@script image
@name *Depth Desaturate
// Title
sTitle = "*Depth Desaturate";
// Version
sVersion = "v1.0";
nAmount = 1.0;
nMin = 1.0;
nMax = 10.0;
// Control
ctrl_c0;
create
{
setdesc(sTitle);
}
process: ifo
{
iProgress = ifo.height;
if(runningUnder() != SCREAMERNET) moninit(iProgress);
for(i = 1;i <= ifo.height;++i)
{
for(j = 1;j <= ifo.width;++j)
{
nAverage = (ifo.red[j,i] + ifo.green[j,i] + ifo.blue[j,i]) * 0.3333333333;
nDepth = clip(0.0,1.0,maprange01(nMin,nMax,ifo.depth[j,i]));
ifo.red[j,i] = ifo.red[j,i] - (nAmount * nDepth) * (ifo.red[j,i] - nAverage);
ifo.green[j,i] = ifo.green[j,i] - (nAmount * nDepth) * (ifo.green[j,i] - nAverage);
ifo.blue[j,i] = ifo.blue[j,i] - (nAmount * nDepth) * (ifo.blue[j,i] - nAverage);
}
if(runningUnder() != SCREAMERNET) if(monstep()) return;
}
}
// CLIP
clip: min,max,n
{
if(n < min) n = min;
if(n > max) n = max;
return(n);
}
// MAP RANGE
maprange01: n1,n2,i
{
if(n2-n1 == 0.0){return(0.0);}
else
{return((1/(n2-n1)) * (i-n1));}
}
load: what,io
{
if(what == SCENEMODE)
{
nAmount = io.read().asNum();
nMin = io.read().asNum();
nMax = io.read().asNum();
}
}
save: what,io
{
if(what == SCENEMODE)
{
io.writeln(nAmount);
io.writeln(nMin);
io.writeln(nMax);
}
}
options
{
reqbegin(sTitle + " " + sVersion);
// Control
ctrl_c0 = ctlpercent("Amount",nAmount);
ctrl_c1 = ctlnumber("Min (m)",nMin);
ctrl_c2 = ctlnumber("Max (m)",nMax);
// Developer
ctlsep();
ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
// Refresh
ctlrefresh(ctrl_c0,"refresh_c0"); // Amount
return if !reqpost();
nAmount = clip(0.0,1.0,getvalue(ctrl_c0));
nMin = getvalue(ctrl_c1);
nMax = getvalue(ctrl_c2);
reqend();
}
refresh_c0:value // Amount
{
nAmount = clip(0.0,1.0,value);
setvalue(ctrl_c0,nAmount);
}
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
No comments:
Post a Comment