top of page

Environmental FX

Week 01: Bullet Rigid Bodies

We started this module by examining the processes and methods for using Maya's Bullet physics engine to create rigid body simulations. Rigid body simulations are employed when our simulated geometry doesn't need to be deformed. A rigid body is a polygonal or NURBS surface that has been transformed into a rigid form. Rigid bodies interact with each other during animation, unlike normal surfaces, which pass through each other.

Scene setup and scale tips
Screenshot (2).png

Scene setup tip: set the playhead speed to "Play every frame" to run the simulation properly. 

Screenshot (3).png

Maya internally uses 1 unit to represent 1 centimeter. However, in simulations, 1 unit is 1metre. We have to take this scale difference into account when doing simulations.

Dominos (Bullet rigid body method)
Screenshot (13).png

I created active rigid bodies by selecting my domino cubes and going to Bullet > Create Active Rigid Body. I set the collider shape type and body type as above. 

Screenshot (14).png

Activated Shapes under Display menu of the outliner to be able to see and manipulate bullet rigid body shape node for each cube individually. 

Screenshot (15).png

I made the floor a passive rigid body. Set the collider shape type and body type as above. 

Screenshot (19).png

Under bullet rigid body shape node of the first domino cube, I manipulate the Initial Velocity value to get the first cube moving.   

Screenshot (20).png

As explained before, in simulations, objects are in a metre unit. This leads us to have massive objects in the scene. Therefore, we need to increase the gravity value to compensate for the scaling issue. 

Screenshot (22).png

You need to change the Internal Fixed Frame Rate to 240 Hz for improved solve quality.

Screenshot (25).png

I tried to decrease the Collider Shape Margin to speed up the animation. Collider Shape Margin determines the size of the gap between Rigid objects for them to collide. 

Screenshot (27).png

Baking a simulation allows us to generate a single animation curve for an object whose actions are being provided by simulation rather than by keys and animation curves.

Playblast (dominos falling simulation using bullet rigid bodies)
Dominos (MASH method)
Screenshot (1214).png

I first used the pencil curve tool and drew a curve on the viewport. Then, to evenly generate and distribute control points, used  Curves > Rebuild.

Screenshot (1218).png

Made a Mash network and added a Curve node. 

Screenshot (1219).png

Curve setup. 

Screenshot (1220).png

For the curve node to work well, we have to set Distance X to zero in Distribute options. 

Screenshot (1222).png

Increased Gravity value. 

Screenshot (1223).png

Set the Internal Frame Rate to the maximum. 

Screenshot (1226).png

Lastly, I put a domino cube there to start the domino falling. For that, I gave that domino cube a bit of rotating animation and set it as a collider (in Bullet Solver attributes). Then, as the ground seemed too slippery, I cranked up the Friction value in Bullet Solver as well as Dynamics. 

Playblast (dominos falling simulation using MASH!)
Jenga Tower Play
Screenshot (32).png

I built a Jenga tower for this practice. 

Screenshot (35).png

Then I chose Kinematic Rigid Body as the body type. Note: Kinematic rigid bodies can be animated during the physics simulation, but they are not affected by the simulation itself.

Screenshot (37).png

Headed to translateRotate node of the ball to animate it. 

Screenshot (38).png

Result

Playblast (Jenga with kinematic animation)
Jenga (Kinematic Dynamic animation)
Screenshot (1228).png

Here, I wanted to animate the ball with a Kinematic rigid body, then change the body type to Dynamic when the ball is near the Jenga tower to have a nice destruction effect. 

Screenshot (1229).png

Change the body type in the channel box. 

Playblast (Jenga with Kinematic Dynamic animation)
Rigid Body Shatter
Screenshot (1243).png

Shatter duplicates an object and breaks the duplicate into multiple pieces called shards. Note: we must first delete the objects' history ( Edit > Delete by Type > History) before creating the Shatter effect.

Screenshot (1244).png

For the purpose of this practice, I used Solid Shatter as shown above. 

Screenshot (1246).png

After making the shards, I grouped the ball and all the chunks to be able to position them all together in my scene. 

Screenshot (1248).png

I created a Rigid Set that comprises all the shards as well as the ball.

Screenshot (1250).png

Changed the body type to sphere. 

Screenshot (1251).png

Made the floor a passive rigid body. 

Screenshot (1253).png

Ticked Glue Shapes and used Glue Breaking Threshold to determine how resistant the dynamic constraint is to breakage. Used a high resistance value until the ball hits the ground. The value should be set to 0 after the ball hits the floor. 

Screenshot (1254).png

As explained above, I animated the Glue Breaking Threshold value. 

Screenshot (1257).png

Set the Collision Shape Margin to 0. 

Screenshot (1258).png

I found the collision shape of the hull the best for the shattering effect. 

Screenshot (1259).png

I want the ball in my scene for the first part of the animation. Shards should be kept in the scene for the second part (after the ball hits the floor). Therefore, I exported and then imported the cache and did the trick. 

Screenshot (1260).png

Note: check the UV Write option when exporting the cache. 

Render (Arnold)
Week 02: Cloth Simulation - nCloth

This week, we looked at the processes and workflows for using Maya's nCloth system to create cloth simulations. nCloth is generated from modelled polygon meshes. nCloth, Nparticles and nHair are parts of Maya's Ndynamics framework.

Screenshot (42).png

nCloth -> Create nCloth. 

Screenshot (43).png

Under the nucleus node, checked "Use Plane". When on, indicates that the ground plane is used in collisions for this Maya Nucleus solver. The ground plane acts as a collision object.

Screenshot (45).png

Presets section lists materials that we can create using nCloth. It provides significant attribute settings for each material. 

Screenshot (46).png

I cranked up the number of subdivisions as having enough subdivisions is essential for the nCloth shape. 

Screenshot (47).png

Headed to Display > Heads Up Display > Frame Rate. The frame rate appeared in the lower right-hand side of my current view. 

Screenshot (51).png

Set up substeps and space scale attributes. The Substeps attribute specifies the number of times this Maya Nucleus solver calculates per frame. Space Scale determines the relative space scale applied to this Maya Nucleus solver.

Screenshot (52).png

Made a ball and made it nCloth shape. 

Screenshot (53).png

A preset selected. 

Screenshot (54).png

Result. 

Creating a waving flag using nCloth
Screenshot (57).png

In this practice, I wanted to make a flag waving in the wind. 

Screenshot (58).png

Used a plane as my nCloth shape. 

Screenshot (59).png

Ticked the "Use plane" box.

Screenshot (60).png

Chose a preset. 

Screenshot (66).png

Selected a few vertices of the flag and the flag pole, then used nConstraint -> Point to Surface. 

Screenshot (67).png

Made the flag pole a passive collider. 

Screenshot (73).png

Manipulate the wind settings of the nucleus. 

Screenshot (77).png

Instead of using wind settings of the nucleus, here I added Volume Axis, which gave more control over the wind simulation. 

Screenshot (82).png

The settings I used are as above. 

Screenshot (83).png

Applied a checker board to the flag.

Waving flag (Playblast)
Making a basic skirt for a character
Screenshot (84).png

Here is the character I brought into my scene from Content Browser. 

Screenshot (89).png

I then tried to make a basic skirt for the character. 

Screenshot (91).png

Used point to surface nConstraint. 

Screenshot (92).png

Passive collider created. 

Screenshot (94).png

Played around with nCloth shape settings. 

Screenshot (96).png

Played around with nConstraint shape settings. 

Playblast
Cloth tearing effect
1. Tearing with volume axis
Screenshot (102).png

I tried to simulate cloth tear in this practice. 

Screenshot (103).png

Selected some edges and went to nConstraint -> Tearable Surface

Screenshot (106).png

Volume axis created. 

Screenshot (1269).png

Chose balls as the particle type.

Screenshot (1270).png

Create Emitter selected. 

Playblast
2. Tearing without volume axis
Screenshot (1273).png

This time though, I tried to play around with nCloth and nParticle shape settings and simulate the tear without a volume axis. I changed the attributes of nCloth as above. 

Screenshot (1271).png

nParticle settings. 

Screenshot (1274).png

In nParticleShape settings, increased the Mass attribute. 

Playblast
Week 03: Bifrost Graph Particles

This week, we learned about the Bifrost Graph and how to make particles and simulations in Maya Bifrost. We used the Bifrost Graph Editor to view, create, and alter graphs.

Note: The logic behind Bifrost Graph Editor is that we bring in an object, access some of its data, do something to its data, and then apply it to the object. 

Bifrost Graph basics
Basic particles graph
Collider / Setting up colour
Inherit colour from emitter
Vary source properties (colour, speed, size)
Modifier influence / Modulate influence
Turbulence influnece/ Drag influence 
Rendering colour with Arnold/ Showing colours in viewport
Week 04: Bifrost Graph Aero System
Basic aero setup / source air settings
Caching
Collider settings
Solver settings
Assigning material 
Vary source property
Vorticity Influence / Modulate Influence 
Turbulence influence / Render settings
Week 05: Bifrost Graph Combustion Aero System
Combustion Set up / Vary Source properties
Rebel Pack Influences
Assignment 01: Artefact Destruction and Cloth
PART 1

I was asked to make a "destruction" scene in Maya for the first part of assignment #1. Bullet Rigid Bodies were utilised for this section. My main focus was on the simulation's realism and believability, as well as its renders.

Screen recording
PART 2

For the second part of this assignment, I had to use Maya's cloth systems to show how fabric could move. As a result, I worked on a precise Maya simulation of a real-world fabric event.

Screen recording
Week 08: Bifrost Fluids

We had a look at Bifrost Fluids this week. Bifröst is a simulation system for high-quality liquid and fluid effects. I experimented with Bifrost Fluids and used some essential workflows and techniques as below. 

Screenshot (2).png

Added a platonic solid the the scene and made it a liquid emitter. 

Screenshot (3).png

Increased the size of the liquid particles. 

Screenshot (4).png

Made the floor a collider. 

Screenshot (5).png

In emitter properties, selected Continuous Emission

Screenshot (7).png

Added Killplane. This reduces the total number of particles as well as the volume that needs to be voxelized, and can reduce the memory and computational requirements.

Screenshot (8).png

To set the scaling thing correctly, I changed the Gravity. 

Screenshot (9).png

Density also set as above. 

Screenshot (10).png

Other attributes I changed are as above. 

Screenshot (11).png

Added another collider to the scene. 

Screenshot (13).png

Surface Particle Density was also set. This determines the particle density at the surface of the liquid. 

Screenshot (14).png

I also set the Interior Particle Density, which is the particle density throughout the inner volume of the liquid.

Screenshot (17).png

Meshing enabled. 

Screenshot (19).png

Used a Motion Field to influence the velocities of liquid.

Screenshot (20).png

Field direction attributes. 

Screenshot (21).png

Here I played around with the Drag attributes. 

Screenshot (23).png

Turbulence attributes. 

Screenshot (24).png

The point size was reduced. 

Screenshot (26).png

Enhanced the resolution by reducing the amount of Master Voxel Size. 

Screenshot (27).png

Meshing enabled. 

Screenshot (28).png

Disabled Delete Exceeding Particles

Screenshot (31).png

Cached out to disk. 

Screenshot (32).png

Caching options. 

Screenshot (37).png

Bifrost meshing properties were set as above. 

Screenshot (39).png

Mesh was cached out to Alembic. 

Screenshot (40).png

Write Color Sets should be ticked. 

Screenshot (43).png

The mesh colour set was copied. 

Screenshot (44).png

I then put the colour set name to Motion Vector Source and changed the Motion Vector Unit to Per Second

Screenshot (46).png

aiStandardSurface attributes were manipulated to create my preferred material. 

bifrost_fluids.jpg

A render. 

Week 09: Bifrost Ocean Simulation System - Guided Sim

We looked at Bifrost Ocean Simulation System (BOSS) this week. I experimented with guided simulation during the lecture and simulated a low-resolution ocean. Some of the most important steps are shown below: 

Screenshot (2).png

I created a plane with the shown attributes, then headed to Boss -> Boss Editor -> Create Spectral Waves

Screenshot (14).png

BOSS Spectral Wave attributes set as above. For more information, click here

Screenshot (17).png

To generate liquid, headed to Bifrost Liquid -> Liquid. 

Screenshot (18).png

The surface of a Bifröst liquid simulation can be guided by a deforming plane or another flat mesh, and emission regions can be used to limit the simulation to one or more particular places. This is advantageous for images of a boat on the ocean where a big body of water must be rendered even while splashes and other simulated effects are only required for a small area of it.

Screenshot (20).png

Created a cube and set it as the emission region. Liquid emission volume is determined by emission regions. Memory and processing time are conserved by limiting the emission in this way.

Screenshot (26).png

Emission region properties are set as above. 

Screenshot (33).png

I made a simple animation for a shape similar to a submarine or watercraft. I made this watercraft a collier. 

Screenshot (35).png

Set the collier properties. 

Screenshot (37).png

Cashed the simulation to disk. 

Screenshot (40).png

Selected the liquid in the outliner and headed to Bifrost Fluids -> Foam to add foam to the liquid. 

Screenshot (47).png

Foam properties are set as above.  

Screenshot (49).png

Cached out again, but this time set the write mode to Read/Write. Read/Write reads existing cache files each frame, while creating files for uncached frames based on the previously cached frames.

Screenshot (50).png

Enabled meshing with setting up above-shown attributes. 

Screenshot (52).png

I then exported the Bifrost liquid mesh to Alembic. 

Screenshot (54).png

My basic setup is ready, so I can now enlarge the original plane and crank up the resolution of the liquid. 

Screenshot (57).png

To render the colours properly, I have to copy the colour set name and paste it into the Motion Vector Source field and also set Motion Vector Unit to Per Second

ocean_v01.jpg

Result. Note: this is a very low-resolution simulation render. I still have to play around with the resolution of the simulation for a better result. I also used a very tiny amount of emission for the water material to get a better-looking result. 

Creating an ocean (Youtube videos)
Week 10: Bifrost Graph MPM

This week, we had a look at Bifrost MPM simulations. The Material Point Method (MPM) can simulate a wide range from sand and snow to cloth and fibres. The Material Point Method (MPM) was made famous by its use as a snow solver in Disney’s Frozen. One of the critical advantages of MPM is that the behaviour of simulations remains consistent as resolution increases.

An excellent in-depth masterclass which introduces MPM solver capabilities and some workflows. 

Some important points
Screenshot (70).png

I started with a simple scene containing snow, sand, water and cloth emitters, a snow cutter and a pit collider. Then, I set up an MPM solver in Bifrost as above. 

Screenshot (74).png

Above is the setup I used for caching out my simulations. 

Screenshot (84).png

MPM solver settings. Note: Link Collider Detail
Ignores the detail size set for colliders, and uses the solver's detail size set above instead. Use this to avoid problems in cloth simulations when the detail size for colliders is very coarse compared to the detail size for cloth. If both this option and Use Mesh Resolution are on, the detail size for colliders is also computed from the input cloth mesh.

Screenshot (91).png

I used Split Points by Material to separate out different particles. 

Screenshot (101).png

Above shows the setup I used for meshing the liquid. 

Week 13: Bifrost Strands and Fibers

This week, we looked at strands, and learnt some useful techniques and workflows using strands in Bifrost. 

Screenshot (139).png

I built a few points, then converted them to strands. I used set_point_shape to change the sape of points. 

Screenshot (145).png

Set_strands_shape and set_strands_size_profile were used to alter the shape of the strands. 

Screenshot (150).png

To break the strand into separate strands, I used a sequence_array and hooked it up to strand_offset input. Note: I had to change the value type for the sequence array to the unit, which is an unsigned integer

Screenshot (155).png

Here I started fresh with a platonic solid and added the create_strands_along_normals node. 

Screenshot (159).png

I set the shape of the strands and constructed the points. 

Screenshot (163).png

I then added a fractal_turbulence node to the points as above, to add noise to the strand. 

Screenshot (167).png

Changed the curve profile by evaluate_fcurve node. 

Screenshot (172).png

Changed the curve profile by evaluate_fcurve node. 

Screenshot (174).png

Lerp node computes the linear interpolation between two values. Fraction determines the interpolation fraction. A value of 0 returns the initial value, a value of 1 returns the final value, while any other value returns the relative position on the line joining the two values.

Screenshot (177).png

The scatter_points was used here to scatter the points across the geometry. 

Screenshot (190).png

I painted vertices and then used it as the density_weights input for the scatter_points node. 

Screenshot (196).png

Result

strands.jpg

Render.

Screenshot (207).png

Here I wanted to play around with particle trails, so first created a basic particle system. Then used create_particle_trails node, which is part of the rebel pack

Screenshot (215).png

Adding colour to the particles. 

Screenshot (216).png

Result.

trails_v01.jpg

Render.

Week 12: XGEN Hair

We tried to get a grasp on XGen for hair simulation in Maya. Hair simulation is fundamentally a sculpting workflow and a career in itself. Therefore, we only looked at its basic workflows. Following are some of the results I got in the process of making hair. 

Screenshot (66).png

I made a basic hair set-up for a head I brought into Maya. First, I created an xGen Description. Then I sculpted guides and rebuilt them. I also added two clumping modifiers. Coil and Noise modifiers were also used to make the hair more natural. 

Screenshot (68).png

Played around with aiStandardHair shader settings. 

Screenshot (72).png

Increased hair density

Screenshot (70).png

Setup Arnold render settings suitable for rendering my hair. 

hair_v01.jpg

A render. 

Week 13: Bifrost Instancing

We learnt about instancing using Bifrost this week. Instances are copies of geometric objects that are placed at point positions, such as the points of a particle system. Since only a master geometry and the points are needed for instancing, instances result in lighter scenes.

Screenshot (3).png

Create_instances was used to make multiple instances of the objects.

Screenshot (6).png

Fractal_noise_field was hooked up to the mask_weights input of the instancer to create the above effect. 

Screenshot (14).png

I painted vertices and brought the colour set to my graph to use it as a mask. 

Screenshot (22).png

Scatter_points was used. 

Screenshot (28).png

I used randomise_point_... for rotation, scale and translation. 

Screenshot (30).png

I used randomise_selection_by_probabilities. It randomises the shapes placed on the points of an instances object, with control over the relative numbers of each shape.

Screenshot (46).png

Used set_Arnold_mesh_settings to give the geometry more subdivisions while rendering with Arnold for rendering displacement correctly. 

Screenshot (49).png

Here, I brought in a model and then exported it as a .ASS file. I could use Arnold StandIn to bring my ASS file into my scene, but instead, I would do this in Bifrost next. 

Screenshot (57).png

ASS file was imported into bifrost by using create_archive_instances node. 

Screenshot (59).png

A render.

Assignment 02 : Environmental Effects, Three Scenarios

Assessment task:

The assignment is to make three rendered environmental effects scenarios. These scenarios will be defined by these three titles:

Natural – Simulated environmental effect mimicking a natural phenomenon that occurs in the world.
Fantasy / Sci-Fi - Simulated environmental effect that has a fantasy or science fiction element. 
Surreal - Simulated environmental effect that has an odd or unexpected element. 

Natural scenario (with sound)
Surreal scenario (with sound)
Sci-fi / fantasy scenario (with sound)
Screen recording 
bottom of page