dansidi

11-28-2011, 03:45 PM

Hi there,

I am attempting to write an expression which puts motion vectors into rgbPP for regular Maya particles.

I got as far as this:

//multiplier

float $mult=0.5;

//velocity

vector $vel=particleShape1.velocity;

float $xvel=$vel.x;

float $yvel=$vel.y;

float $zvel=$vel.z;

//rgbPP

particleShape1.rgbPP=<<($mult*$xvel),($mult*$yvel),0>>;

which does indeed do the job, just as long as the camera is pointing exactly down the z-axis. Fine, but of limited use. Now I need a bit of help with some vector transformation maths.

Ideally I want to get the motion vectors to work from my camera, whatever direction it is pointing.

I think I can get the unit vector to the camera:

//camera

vector $camPos=`getAttr camera1.translate`;

float $xCamPos = $camPos.x;

float $yCamPos = $camPos.y;

float $zCamPos = $camPos.z;

vector $camUnitAngle = `unit<<$xCamPos,$yCamPos,$zCamPos>>`;

float $xCamUnitAngle=$camUnitAngle.x;

float $yCamUnitAngle=$camUnitAngle.y;

float $zCamUnitAngle=$camUnitAngle.z;

(is that right???)

I think I need to multiply the inverse of this unit vector by the particle's velocity but I am not sure how to do that. (I should have paid more attention to my maths teacher in that hot summer of 1976...) Any help would be gratefully received !

I should also let you know that I have no Python at all (yet)

Thanks

Dan

I am attempting to write an expression which puts motion vectors into rgbPP for regular Maya particles.

I got as far as this:

//multiplier

float $mult=0.5;

//velocity

vector $vel=particleShape1.velocity;

float $xvel=$vel.x;

float $yvel=$vel.y;

float $zvel=$vel.z;

//rgbPP

particleShape1.rgbPP=<<($mult*$xvel),($mult*$yvel),0>>;

which does indeed do the job, just as long as the camera is pointing exactly down the z-axis. Fine, but of limited use. Now I need a bit of help with some vector transformation maths.

Ideally I want to get the motion vectors to work from my camera, whatever direction it is pointing.

I think I can get the unit vector to the camera:

//camera

vector $camPos=`getAttr camera1.translate`;

float $xCamPos = $camPos.x;

float $yCamPos = $camPos.y;

float $zCamPos = $camPos.z;

vector $camUnitAngle = `unit<<$xCamPos,$yCamPos,$zCamPos>>`;

float $xCamUnitAngle=$camUnitAngle.x;

float $yCamUnitAngle=$camUnitAngle.y;

float $zCamUnitAngle=$camUnitAngle.z;

(is that right???)

I think I need to multiply the inverse of this unit vector by the particle's velocity but I am not sure how to do that. (I should have paid more attention to my maths teacher in that hot summer of 1976...) Any help would be gratefully received !

I should also let you know that I have no Python at all (yet)

Thanks

Dan