Raging Planet

Responsibilities: 3D Modeling, Noise behavior simulation, VEX coding, Rendering

Overview

Raging Planet is an imaginary metallic planet with all year round storms and meteorite storms somewhere far in the universe. No less complicated than the planet itself, was the process of its creation. It involved procedural modeling of meteorites, simulation of their gravitational behavior using vectors and noise presets, simulation of the planet's gusty swirling pattern with VEX code, creation of custom shaders with Mantra, positioning of lighting that would highlight planet's acute nature and animation of the camera. The final short clip brings viewers through the meteorite storm getting closer to the alluring shiny planet.

3D modeling

I made harsh rock shapes by fracturing the box and removing outer elements—this remained the low poly version that I used for faster simulation. Then I gave rocks more texture and irregularity on edges and surfaces and thus created a high poly version.

I beveled different parts of the rectangle multiple times and scattered this shape around the sphere's surface to create the petals for a moving structure on the planet.

Swirly behavior simulation with VEX

My VEX code utilizes the curlgnoise() function to alter the normals of the points—the bases for metallic petals—every frame. The speed of the behaviour is defined by expressions based on the time attribute.

Turbulent behaviour for meteorites

I placed the meteorites further from the planet's surface by altering their position vectors inside the PointVOP. Then I added perlin noise to their position attribute and animated it in the Attribute Noise Node.

Rendering

I animated the camera by setting the keyframes and changing the value along the x-axis which made the camera move towards the planet. For lighting, I placed a spherical area light in the scene to increase the general brightness of the scene. Then I set up a regular three-point-lightning and added an additional light below the planet to highlight scales on the bottom. Finally, I created custom classical shaders for the purple metallic surface of the planet and reflective rocks.

Challenges and learning outcomes

My challenge was to randomly assign meteorites geometry to the points in an efficient way.

My solution was creating an attribute called 'variants' which had a unique value for each of the meteorite shapes based on forloop's iteration value. For each point—to which I later copied the meteorites geometry—I also created the 'variants' attribute through the Attribute Adjust Integer node. This attribute's values were random values from 0 to 5 (the number of different meteorite shapes I have). After bringing my meteorites geo to the planet geo stream through the Object Merge node, I set the Copy To Points node to use Piece Attribute and the meteorites with the variants value x was copied to the point with the same variants value.