Skip to main content
ShiveringCactus
Community Expert
Community Expert
June 23, 2025
Question

Tutorial: Create Realistic Planetary Rings in AE

  • June 23, 2025
  • 1 reply
  • 172 views

Tutorial showing how to take advantage of the Advanced 3D Renderer to add a ring to world. You’ll learn how to:

  • Build a procedural ring using Fractal Noise and Polar Coordinates
  • Add fake shadows and lighting that respond to your scene (older versions of AE, not needed for the latest release)
  • Use CC Particle World to simulate rock-filled space rings
  • Create realistic shadow interactions between your ring and planet (older versions of AE, not needed for the latest release)

 

This video builds on my earlier tutorial, where I showed how to create your own planets directly in After Effects, building up the textures and exporting them to use with a 3D wavefront OBJ file. Following on from that project, we now get to take advantage of the planet being in 3D space by adding a 2.5D comp of a ring system and have it loop around our sphere. But if you want to go further and depict the rocks that make up the rings, then I also demonstrate how to use the included CC Particle World to create hundreds of particles of rock images and have them surround the planet. But because that doesn't loop correctly, I have also made and shared a hemisphere you can use to create a 3D Luma Matte for the particles so that they appear to go behind the planet.

CC Particle World Code:
Position X:
--- CODE START ---
x=thisComp.layer("Emitter").transform.position[0]-thisComp.width/2;
x/thisComp.width;
--- CODE END ---

Position Y:
--- CODE START ---
y=thisComp.layer("Emitter").transform.position[1]-thisComp.height/2;
y/thisComp.width;
--- CODE END ---

Position Z:
--- CODE START ---
z=thisComp.layer("Emitter").transform.position[2];
z/thisComp.width;
--- CODE END ---


Angle the ring shadow away from the Sun (add to Z rotation):
--- CODE START ---
var light = thisComp.layer("Sun").toWorld([0, 0, 0]) // name of your light layer
var planet = thisComp.layer("Planet NULL").toWorld(thisComp.layer("Planet NULL").anchorPoint);
var dir = light - planet; 
radiansToDegrees(Math.atan2(dir[0], dir[2])) + 180;
--- CODE END ---

Random frame expression:
--- CODE START ---
random(0,4)/30
--- CODE END ---

Emitter expression:
--- CODE START ---
var L = thisComp.layer("Emitter position");
L.toWorld([0,0,0])
--- CODE END ---

 

 

 

1 reply

nishu_kush
Legend
June 23, 2025

Thanks for your ongoing contributions, @ShiveringCactus. I look forward to seeing more helpful tutorials like this.


Thanks,
Nishu