In VFX graph, I have a test system with quad particles that render a texture of a green arrow, facing up by default. I initialize these particles inside of a sphere, and then set their velocity to their position vector, so that they move outward, away from the center of the sphere.
I want these arrows to point out, away from the center of the sphere, in their direction of movement. But I also want them to face the camera.
This would combine 2 orientation modes: Face Camera and Along Velocity. But I cannot have both of these active in the output context.
So I have found a solution that more or less works:

But the implementation is complicated. I am setting orientation to face camera plane in the output context, and then calculating the angle about the z axis to rotate each particle, by taking its velocity vector, projecting it onto the camera plane, and then solving for the angle between the UP direction (0, 1, 0), and the velocity vector’s projection onto the camera plane
I feel there has got to be a more straighforward solution to get this effect. Can anyone help?
Just from reading your English text description, it certainly sounds like you’re doing the minimum required work, assuming I read your intent correctly.
Since you apply the velocity-based direction last, that seems like it would be correct given your earlier flattening to the cam plane.
As to your implementation, I don’t have enough time-in-seat in the graph stuff to reason about whether it could be done in fewer steps.
To do this kind of orientation, we usually use the Orient block in Along Velocity mode.
In this mode, particle up-vectors (Y) will point in their respective velocity direction while their front-vector (Z) will be facing the Camera Position.
If you’d like the front vector to face the Camera plane instead of the camera position here’s a simple way:
- Set your
Orient Block mode to Advanced. This will let you set the facing and up vector independently.
- Get the
Particle Velocity, normalize , and plug it into the Axis-Y (up-vector/alignment-vector).
*For the front-vector, get the Main Camera node and a Transform Direction node.
- Use the
Main Camera transform for the Transform Direction and set the Direction to (0, 0, 1) which corresponds to the Camera Front Plane.
- Plug the result in the
Axis-Z (front-vector/facing-vector) of the Orient block.
This should be it.

In Edit mode, the Main Camera node can output different results between the game view and scene view.
- While in
Play Mode, it will output the current camera flagged as “Main Camera”.
- In
Edit mode, if you have both the Scene view and Game view active, VFX needs to know which camera to use. This preference can be found in Visual Effects preferences → Main Camera fallback.
Another solution could be to set the Axis-X, Axis-Y, Axis-Z attributes. The orient block is setting the value of those attributes based on the chosen mode. Those attributes are used to represent the particle’s orientation.
So we can:
- Use the
Orient Block in Face Camera Mode so that it sets the Axis-Z attribute for us.
- Add a Set
Axis-Y and plug in our Normalized Velocity.
- Add a Set
Axis-X and plug the cross-product between the Axis-Z and Axis-Y attributes.
This solution, while a little more involved, will have the benefit of working in Edit Mode while the Game view and Scene view are active.
Wish you a great day.
This seems to introduce a bug. My setup is a bit complicated, so I’m not sure what the root cause is, but I have the following bug: When I change the rotation of the particle in the output context, as I do in the screen shot I originally shared of my VFX graph, the particles seemingly randomly flit out of existance.
I had fixed this by moving the SetAngle node to the initialize context. This means the particle won’t adjust its orientation as it moves relative to the camera, but the particles all played out their entire lifetimes, rather than some abruptly dissappearing.
Updating to the Advanced Orientation solution reintroduces this bug for me. It seems to only happen when during gameplay, when the camera moves relative to the particles, over the vfx lifetime.

I’m attaching a GIF, and it’s not very easy to see, but you’ll notice the smoke puffs individually just disappearing as the player approaches the effect.
This is only happening when I adjust the angle of the particle in the output context, via either the Set Angle node or the Orient: Advanced node