Crowd Simulation Setup

Populating an area with people is always a challenge. Constraints in production budget always hurdles that challenge. This is why there are tons of different plugins, stand-alone packages, and scripts that have been developed to tackle the problems. The above video demonstrates two ways that I worked with to achieve a shot needed for a commercial. The first one was created using Maya’s nParticle system, and the second was created using Massive. Examples of the development of stadium shots were used with Golaem, a plugin for Maya. These can be found at the bottom half of this page.

Limitations and Production Time

As a CG Supervisor, every job has been a struggle between the limitations in your pipeline and the production time allotted for the given job. Massive has always been a high-end tool that is used in the industry for crowd simulation. It is complex, yet seemingly limitless. I was approached with a job that had very little post-poduction time to create a shot where we needed to duplicate a crowd to make the ‘signal bars’ that you see on your mobile phone. I took a couple of days to play around with Massive and realized that this route would take incredibly long to produce, especially as a newbie that has never touched Massive before. Furthermore, if I presented the timeline needed to finish this job to the producer, I might as well hand in my resignation as well.


Since nParticles have self-collision, and access to indexing sprites with limited control over variations, I decided to go this route. The first step was to emit them and create some sort of system that I could quickly change the attributes between each particle and associated sprite. So naturally the first attributes that come to mind are:

Population – The amount of sprites needed.

Scale – The size of each sprite (also connected to self-collision so that they do not intersect each other).

Random Scale – The threshold between the smallest sprite and the largest sprite.

Random Rotation – The threshold between the variation of rotation between sprites.

Animation Offset – The offset of a sprite’s texture index that randomly correlates to it’s starting frame.

Problems & Solutions

There are a few problems here. The biggest problem is that the soldiers on the edges of the frame should have a different perspective than the soldiers in the middle of the frame. For instance, if the soldiers in the middle of the frame are dead vertical, then the soldiers on the edges should be specificall slanted outwards depending on their position. Furthermore, for contingency-sake, I needed to assign an additional sprite to each sprite that coinsides with it’s shadow. This shadow should lie on the ground and face away from the direction of a given light source (specifically the one reflected in the plate provided). This will break the repetition of duplicated sprites and offer us more variation.