Hello Blender community,

I'm currently working on a "herd" shot using a 2D animated cycle within a 3D landscape in Blender. To achieve this, I have mapped several 2D animation cycles to 2d planes which I am using as a particle "collection". The emitter is a shrink-wrapped plane with a terrain plane as the target. I'm utilizing a hair particle system to generate the herd. The goal is to animate the movement of the shrinkwrapped plane, making the 2D animated walk cycle traverse the target landscape.

While the setup is mostly in place and appears to be working, I'm encountering an issue. Since this is a 2D animation, I want the particles to align their rotation solely with the X-axis of the normals on the shrinkwrapped plane. This way, it will give the illusion that the animation is walking up and down the hills of the landscape. The problem arises when the Y and Z axes from the normals introduce perspective shifts that reveal the 2D planes.

side view of the herd rear veiw of the herd. You can see how the y rotation is tilting the planes

I'm seeking help on achieving a solution where the particles utilize only the normals' X-axis as their rotation source. Here are a few approaches I have attempted, but with no success:

I explored options to lock the Y and Z axes of the particle using a track-to constraint with an empty, but this did not work at all. Even if I inherit the rotation from the particle, I don't seem to be able to lock the y and z axis.

I received a suggestion to control the particle rotation using particle instancing, but I was unable to successfully implement this technique and feel that it might not be the right direction.

Going a different direction, I also tried modifying the normals to align with the global Y and Z axes while maintaining the X-axis using an addon. Unfortunately, it did not produce the expected results. Perhaps there is a script out there that could achieve this.

Any assistance or advice on accomplishing the desired rotation effect would be greatly appreciated.


1 Answer 1


After experimenting with various Python scripts and other methods, I finally arrived at a solution. I'm pleased to share the steps:

  • Begin by using a Hair particle system. This enables you to utilize the "Particle Velocity" and "Rotation" settings, as well as the actual rotation of the individual sources in your particle collection, to align the rotation of the particles to a single axis of your emitter surface.

  • In the Particle settings, select "Hair."

  • Set Velocity > Normal, Tangent, and Tangent Phase to 0.

  • In my scenario, I wanted the particles to align with the X-axis of the emitter surface. To achieve this, I set the "Object Aligned X" velocity to 1 m/s.

  • Ensure the axes you want to stay aligned with the particle source(s) in your collection are set to 0 m/s.

  • Under the "Rotation" settings, set the Orientation Axis to "Velocity/Hair."

  • In the "Collection>Instance Collection" settings, enable the checkbox for Object Rotation.

  • Now, use "Rotation Phase" in your Rotation settings, and adjust the rotation of your individual particle sources in your particle collection to align your particles to the surface in your preferred direction.

  • As a result, your particles will now rotate on a single axis from the emitter surface while maintaining the rotation of the original particle sources/rotation phase settings on the other axes.

Here is a screenshot of the particle settings, with the viewport illustrating all the particles following the emitter's X-axis, yet aligned with the objects' Z and Y axes.

enter image description here enter image description here


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .