Lennard Schmidt, also known as LescArt, shared the workflow behind the Lord of the Rings-inspired animation that won Pwnisher's Chasm's Call Challenge, showing his work on the crowd simulation.
Introduction
Hi there, thanks for having me! I'm Lennard, also known as LescArt. I’m a 3D generalist from Northern Germany, and my journey into 3D art started over 15 years ago when I first got hooked on filmmaking and visual effects. Back then, I was mainly inspired by The Lord of the Rings and Star Wars, and I tried to recreate the effects from the movies. It quickly grew into a great passion for visual effects and CGI in general.
I built my skills mostly through a mix of online tutorials/courses, a lot of self-teaching, and learning from other artists in the community.
I have been working professionally for about six years now, and I've been lucky enough to work on some amazing projects like X-Men, Stranger Things, The Batman, and Andor.
Apart from that, I still make time for personal projects whenever I can. It keeps the passion alive and lets me learn and explore new workflows, tools, and ideas.
Chasm's Call
The 3D community challenges by Pwnisher are always a very cool opportunity to see thousands of 3D artists coming together and deliver an impressive spectrum of creativity, so I definitely always try to join and do my part. Before the Chasm's Call challenge, I had already joined two of the earlier renditions, and it was always great fun and a challenging piece of work.
When I started working on my submission, I was really unsure if I would have enough time to do it in the given timeframe; in fact, I was fairly sure I wouldn't. So I decided to take on a topic I was really excited about and which I would like to do anyway, even if I would miss the deadline. And that was a large-scale crowd simulation. Ever since I was a teenager, fascinated by the extensive behind-the-scenes material of The Lord of the Rings movies, I wanted to create a huge medieval battle scene. And the template layout was a great fit for this.
I gathered a stack of references, from historical battle imagery to cinematic shots that captured the tension and scale of epic battle scenes. Randomly rewatching Kingdom of Heaven inspired me to shift the look toward a Mediterranean environment. I loved the idea of a place that's typically mostly sunny but now dramatically lit, creating a stark contrast with the dark and gritty atmosphere during the battle scenes.
The inspiration for the overall narrative came from the scenes of intense anticipation before the battle of Minas Tirith, when it’s too late to escape the city, and the guards are just waiting for the big battle.
And right between them, there's the fearless leader, overseeing the city's defense. Though maybe he's taking it a little bit too easy and plans to eat his snacks while others do the fighting, who knows...
Composition & Modeling
I started the whole process by gathering a bunch of references and sketching out a clear plan for what I wanted in the shot. Composition-wise, I tried to keep it balanced and lead the eye by adding bigger structures in specific areas. Also, the church tower falls, according to the rule of thirds, onto a point of interest because I initially planned to destroy it with an incoming trebuchet shot. Later, I didn't have enough time to add it to the shot. I wanted to keep the close foreground fairly dark and make the commander the point of highest value contrast.
Then, the first step was setting up a solid blockout, so I jumped into 3ds Max, blocked in basic shapes for the city, and sketched out where the crowd formations would sit within the frame. Since the army formations occupied almost half the image, I had to be careful with the distance and height of the camera/foreground relative to the ground to make everything look massive while still allowing me to make out the individuals in the moving crowd.
Once I was happy with the blockout, I started detailing the city using kitbash sets and re-shading everything with mostly only three different procedural shaders via triplanar mapping. One for the walls, roofs, and pavement. I used VrayMultiTex for color variation and VrayDirt and RichDirt for adding dirt and color breakup. The rest is just a couple of noises and a few texture maps. To keep my scene as light as possible, it was important to work with proxies and referenced objects as much as possible.
For the ground outside the city, I actually used satellite imagery – extracting different color ranges in Photoshop to create masks. These masks served as distribution maps in Forest Pack, which helped me scatter rocks and bushes in a natural and controlled way. The city’s interior ground came together with a large flat texture compiled in Photoshop from aerial imagery and guided by a top-view render from the 3D scene.
Crowd Simulation
With most of the background environment in good shape, I knew I had to start working on the crowd simulation before it got too late. I already knew from previous challenges that rendering could end up being a very dangerous bottleneck. So I started rendering the static city relatively early while I was working on the crowds.
I imported the basic crowd layout (just a bunch of evenly segmented planes) from 3ds Max into Houdini, using the geometry's points as emitter. By dividing the layout into sections and assigning them to different groups, I was able to art direct the initial behavior and various influences, such as steer targets and path constraints. I also used in-mesh triggers with random probability and time delays per crowd agent to get some of the front rows marching and eventually attacking. The archers along the city walls were a bit trickier – they would walk along the wall, then, if they are equipped with a bow, upon reaching a certain distance to the front edge of the wall, they step up to aim and shoot, only to eventually retreat and walk along the wall again.
While I refrained from actually implementing flying arrows, I triggered some of the crowd-attacking agents through a few different rules and randomized probabilities when they approached the walls, putting them into a ragdoll state.
All the animation clips I used came from Mixamo, and each state (idle, walking, running, shooting, etc.) used 3-6 different animations and on top of that, random speed multiplications, for maximum variety.
I also simulated a pass of interaction dust, kicked up by the attacking crowd with the Axiom Solver. For the emitter, I simply took the root points of all the crowd agents, replicated them to get more emitter points and then multiplied the assigned emission density with the a remapped speed of the corresponding crowd agents, so that only the moving agents emit at all and running agents kick up way more than just walking ones.
For the foreground environment, I relied heavily on Megascans' assets for realistic details. The character models came from CGTrader, but instead of rigging them directly, I took a slightly different and faster approach and repurposed one of the low-poly crowd models I’d already auto-rigged through Mixamo and used it as the deformation base for the high-poly FG character models. I split the character geometry into three sections: one for the deforming parts like the body and tight clothing, one for transforming parts like armor plating, and one for simulated elements such as cloth, belts, and the commander's cape.
The deforming parts were deformed directly with the movements of the low-poly models. As this is mainly skin and underlying clothing, and the movements are not very large, small errors go largely unnoticed. The transforming parts were packed and then transformed with the movements of the low-poly model, as I wanted to avoid that typical look of deforming armor parts that are just skinned to the rig. I ran the simulated parts, the cloth, the belts, the flags, and the cape, through a vellum cloth simulation. In total, I prepared five different animations for the guard and one for the commander.
I ended up preparing multiple character variations and animations – five for the guard and one for the commander, with enough frames to later allow me to duplicate and offset some of the guard caches.
Then, I exported them as Alembics and imported them into 3ds Max via the V-Ray Proxy Loader.
Finally, once all the elements were rendered, I started assembling the final shot in Nuke. While I am by no means a comp artist, I really enjoy this part of the process, as it is very satisfying to see everything coming together. Usually, I start with my comp quite early in the process, developing it right beside the CG. When the CG is finished, I start the final comp from scratch, but I copy and paste parts of my test comp if I want to reuse something.
Lighting
The godrays in the shot were completely created in Nuke. For this, I rendered a world position AOV, which I could then use to layer a Noise over the scene geometry. Then I used this noise as a mask to bring down the exposure on certain parts of the image and create a pretty strong fake cloud shadow on everything, which resulted in nice puddles of light. A light breakup like that can help a lot with conveying the massive scale of something, and at the same time, it helps create a dark mood. Additionally, I reused the same noise, put it through a Godrays node, and that gave me the corresponding godrays for the puddles of light.
I also added some 2D stock elements on cards throughout the scene, such as textures of dust clouds and some dirt decals. Also, while the smoke simulations were 3D and simulated in Houdini, the fire elements right at the source were 2D stock footage.
Conclusion
While the challenge's rules gave us one month of time, it came down to a couple of hours after work and on the weekends. In total, I probably spent around 100 hours working on it, with 20 hours being right before the deadline in a last effort to get finished.
The main challenges for me were definitely the time constraints and learning and simulating the crowd for the very first time. But it was also a lot of fun, and it's always amazing how much you can progress on something completely new if you have a set goal and then really stay focused on it. That's why I absolutely love these challenges. Having a predefined template is sometimes a bit harder than without, but it also provides a fixed environment to work in, which can be great to avoid getting lost. And it definitely helps to have a locked-on camera animation right from the start, as it makes you focus on what is visible in the shot and what isn't, and that makes you more efficient.
So I am already looking forward to the next challenge, which will happen in August. Until then, I have a couple of other personal projects I am already working on. So if you are curious, you can follow me on Instagram or YouTube.