###
Orient 3D layer to camera properly

Auto-Orienting 3D layers towards the camera doesn't work well in After Effects, since they point towards the camera object itself rather than being parallel to the camera plane and thus usually still look like they're at an angle. I found this expression, (like nearly all expressions, it's by Dan Ebberts) to do it properly. Put it on the Orientation of a 3d layer:

`L = thisComp.activeCamera;`

u = fromWorldVec(L.toWorldVec([1,0,0]));

v = fromWorldVec(L.toWorldVec([0,1,0]));

w = normalize(fromWorldVec(L.toWorldVec([0,0,1])));

sinb = clamp(w[0],-1,1);

b = Math.asin(sinb);

cosb = Math.cos(b);

if (Math.abs(cosb) > .0005){

c = -Math.atan2(v[0],u[0]);

a = -Math.atan2(w[1],w[2]);

}else{

a = (sinb < 0 ? -1 : 1)*Math.atan2(u[1],v[1]);

c = 0;

}

[radiansToDegrees(a),radiansToDegrees(b),radiansToDegrees(c)]

`or you can target a specific camera in the first line, eg `

`L = thisComp.layer("Camera 1"); `

u = fromWorldVec(L.toWorldVec([1,0,0]));

v = fromWorldVec(L.toWorldVec([0,1,0]));

w = normalize(fromWorldVec(L.toWorldVec([0,0,1])));

sinb = clamp(w[0],-1,1);

b = Math.asin(sinb);

cosb = Math.cos(b);

if (Math.abs(cosb) > .0005){

c = -Math.atan2(v[0],u[0]);

a = -Math.atan2(w[1],w[2]);

}else{

a = (sinb < 0 ? -1 : 1)*Math.atan2(u[1],v[1]);

c = 0;

}

[radiansToDegrees(a),radiansToDegrees(b),radiansToDegrees(c)]

Found at: http://forums.creativecow.net/thread/227/21917#21917
## No comments:

Post a Comment