The Hills of Darkness:
Hills spanning miles upon miles
I'll never falter
Aching all the while
Lay down my body
Rest for a night
My blade will find you
If only in time
I recently started making cinematics again that encompass a Dark Fantasy setting. In this scene, Lucira, The Cursed Knight, rests in the Hills of Darkness.
The scene was created in Blender. The sky was created with a custom shader node. The terrain was handmade using displacement modifiers and manual adjustments. The grass was a big success in this project, as I swapped from using a hair particle system to a much faster geo node setup. The geo node setup took a lot of time to figure out, but was worth it. It uses weight maps to distribute points on the surface in a location of my choosing, and then uses instances to distribute the mesh I want onto those points. Each instance is not calculated individually so it is much faster than your typical particle system. Furthermore, I was able to use geo nodes combined with a wave texture to allow the grass to have a nice swaying motion.
During the process to accomplish this, I encountered several issues. The grass swaying would rotate the entire mesh from it's origin point instead of bending over the length of the mesh. The only way to fix this, that I could find, was to "realize instances", in other words, calculate all meshes seperately. I was not willing to do that because it would detract from the entire reason I swapped to the geo node setup. So, to combat the issue, I made each original instance of a grass clump have it's own geo node setup that made the mesh bend over the length.
Then, I encountered the rotation issue. Because of my initial geo setup on the ground plane to sway the grass, I was not able to rotate each point instance randomly, because then the swaying from the individual grass mesh would go in any which direction and it was no longer uniform. This wouldn't be an issue, except now every grass instance is rotated the same way and it is easy to spot the repetition. To make the grass look more organic, I duplicated all of my original grass meshes three times over, rotated them randomly, then applied the rotation to each of them. Therefore, when they were instanced from the collection of grass meshes, each particle would be rotated randomly and still sway in the proper direction.
The fireflies were fairly simple. I used a particle system with a boid brain to allow flight of the particles. I instanced low poly firefly meshes I created on the particles. I adjusted the emission of their glow with a noise value to randomize the brightness. I used the information from the particle system lifetime to adjust the transparency of the fireflies over time so they didn't randomly blink in or out.
After rendering I brought the PNG sequence into Davinci Resolve to color grade and add final touches.
Date: April 26th, 2026
Medium: Blender, Davinci Resolve
The final render after color grading in Davinici Resolve