In my 4th semester at George Brown College, I created a diorama as part of my coursework. This was my first experience using SpeedTree, Substance Designer, and setting up various shaders in Unreal Engine. Applying these tools directly to my diorama was an exciting and valuable learning experience. The project brief required an exterior diorama inspired by a movie setting, featuring a vehicle, structure, rocks, and trees. I chose Avatar as my inspiration. The feedback I received from my instructors, especially Billy and Jamie, was incredibly helpful.
Rocks are a fascinating subject in 3D modeling. While they are abundant in the real world, simply 3D scanning rocks from your surroundings may not always fit your project’s needs. Different environments shape rocks in unique ways, so it’s crucial to select the right types of rocks for your setting. In my case, I envisioned a tropical rainforest environment with high humidity, which meant the rocks would be covered in moss.
Managing the moss presented an interesting challenge. If the moss is applied through a texture, it would have fixed positions, limiting the ability to rotate the rock freely. Ideally, we want to rotate rocks to cover a larger area with copies of a single model without making the duplicates look repetitive. The solution to this problem lies in Unreal Engine’s material system. Using a world-aligned blend node, I was able to keep the moss positioned correctly on the top of the rocks, controlled by the up vector.
To ensure the surface details of the rocks remain sharp, I combined a tiling rock normal map ( or mirco normal) with the specific normal (or macro normal) of the rock. This approach maintains surface detail while allowing for flexibility in the placement and orientation of the rocks.
Low poly rock
High poly rock
Spiral tree in SpeedTree
Creating trees used to be a daunting task due to the sheer complexity of geometry involved, which is why foliage artists are a specialized role in game studios. SpeedTree has revolutionized this process, making foliage creation much more manageable. It streamlines the workflow, reducing it to creating textures like leaves, bark, and petals. For my diorama, I crafted the leaf textures in Substance Designer, as I enjoy the procedural approach to art. This method allows for easy adjustments to the shape of the leaves within the graph. SpeedTree also offers a wide range of parameters, making it simple to assemble everything cohesively. Additionally, the trees are exported with wind settings already integrated, adding dynamic movement to the scene.
Texture atlas for plants constructed in Substance Designer, this is used for multiple plants
Material graph for plants
One of the most interesting aspects of this diorama was creating the water component. Water is a surprisingly complex material to replicate. Starting with a material that has a bluish tint and zero roughness gives it the color and gloss of water, but at this stage, it tends to look more like glass. In real life, the opacity of water changes depending on the viewing angle—a phenomenon that can be recreated using a Fresnel node in the material graph. Another issue I encountered was the sharp transition between the water surface and objects, like rocks, emerging from the water. This was resolved by using a Depth Fade node. To simulate waves, I panned multiple water normal maps at different speeds and layered them together for a more dynamic effect.
Adjust opacity with Fresnel and Depth Fade
Waves
Running water alone isn't enough to create a convincing waterfall—water splashes play a crucial role in conveying the energy of the fall. To achieve this, I created several particle systems to simulate the look of a waterfall. My instructor, Billy, provided falling water textures that worked perfectly for the effect. I started with the fountain particle system template and adjusted the emission direction and particle scale to create realistic water splashes.
Particle material grapgh
Falling water texture
Setting for water falling effect
Wet decals are essential when working with rock assets near water. While the original rock models are dry, it would be inefficient to create separate wet versions for those near water. Although creating a material instance with very low roughness could make the rock appear wet, this approach would cover the entire surface, losing the detailed surface information and looking unrealistic—since only the parts exposed to water should appear wet. In this case, a wet decal was the perfect solution. It allows level artists to make selective parts of the rock wet while leaving the rest in its original, dry state.
For objects like wires and stairs, static meshes often limit creativity and flexibility. This is where procedural assets become valuable, providing level artists with more freedom. Procedural assets can be built using Blueprints, allowing level artists to shape wires, adjust their length, and determine start and end points—something impossible to achieve with static meshes. The same applies to stairs and rails. By using procedural assets, level artists can easily adjust the number of steps or other parameters, making quick modifications by simply tweaking the Blueprint settings.
Blueprint for rail