Reading again I think we're talking about a spotlight rotating. Sorry for the misunderstanding on my part. I'd try something like this in that case:
range = 90;
d = Math.cos(degreesToRadians(falloff / 2));
c = thisComp.layer("Camera 1");
cv = c.toWorldVec([0,0,-1]);
v = toWorldVec([0,0,1]);
facing = dot(v,cv);
linear(facing, d, 1, 0, value);
Here the 'range' defines the section out of the 360° rotation that the spotlight is on. The spotlight will be brightest when pointing in the opposite direction the camera is pointing and fade down as it approaches the edge of its 'range.'
One thing to note is that this expression works as the light rotates around either the x or y-axis. So rotating the light on the x-axis will have a similar effect as rotation on the y-axis.
On Aug 21, 2013 10:49 AM, "Darby Edelen" <
dedelen@gmail.com> wrote:
I'm not sure that I've understood the goal but here's an expression that will fade the light as it leaves a specified field of view:
inner = 20;
outer = 50;
if(inner < outer){
c = thisComp.layer("Camera 1");
cv = [0,0,1];
p = normalize(c.fromWorld(toWorld([0,0,0])));
iBound = Math.cos(degreesToRadians(inner / 2));
oBound = Math.cos(degreesToRadians(outer / 2));
angle = dot(p,cv);
linear(angle, iBound, oBound, 0, value);
}
else value;
So in the above example the light would be at 'value' intensity when it's within a 20° range of the view center and 0% intensity when it's outside of 50° from view center. If you want the light to turn off quickly choose an inner value that is
close to the outer value. If you want it to fade gradually choose
values that are farther apart.
I've only included rudimentary error prevention so if inner and outer are the same value or inner is larger than outer the expression will default to the light's keyframed intensity.