Enjoyed reading the article. I used to be a gaming addict in my teenage and everyone used to scold us for that. Now we are witnessing a great revolution in the field of gaming. Developers of gaming are setting up new benchmarks. I use gaming devices made by https://netgears.support/netgear-powerline/
James Noonan gave a talk on his latest UE4 scene, discussing light propagation volumes and volumetric fog in Unreal and sharing some tasty details.
Hi! My name is James Noonan and I am a 3D artist, currently working as an environment and Unreal technical artist for an independent studio in Manchester, UK. I’ve been working as an artist in the games industry for the last year, having transitioned from a background in traditional fine arts.
I had a range of initial intentions for this project. From a technical perspective, I knew I wanted to experiment with light propagation volumes and volumetric fog in Unreal; and see how far I could push a fully dynamic lighting workflow. From the artistic side, I’d been wanting to create something inspired by the glass-houses at the Bombay Sapphire distillery, contrasting lush green foliage with cold metal and glass in these overarching big organic forms. These intentions fused into a loose concept of some great greenhouse-like environment, where instead of incubating plant-life the environment contained the seeds of humanity’s rebirth after some cataclysmic event. Even though some of these ideas didn’t make it into the final piece, they gave me a pretty clear idea of the design hierarchy: the primary focus would be the seeds themselves, the secondary focus would be the surrounding housing of the seeds, and the tertiary elements would be visual cues to the wider world.
The whole production process was very organic. As this was a personal project for a challenge, I wanted to utilise the freedom to experiment with different features and workflows knowing that I could adapt and change my approach risk-free. I worked without a concept, drastically chopped-and-changed my normal workflows, and cut a lot corners just to see if I could get away with it. I would absolutely not encourage this for any professional projects! But I think a challenge is a great place to try these things as it is exactly that: a place to challenge yourself and your work.
Initial blockout tests in Maya:
The vast majority of production time was spent experimenting and playing with lighting and composition. I started out spending a couple of hours on a pre-scene with basic primitives and Unreal starter-content to make sure I was confident working with both the LPV and exponential height fog, and that I could get the lighting effects I wanted from injected emissive textures. After I was happy with the results I made an incredibly simple blockout of the scene I had in mind (which was basically just a load of spheres inside a cylinder) and spent time playing with light arrangements and tweaking parameters to make sure the effect translated to the general composition I had in mind. When I reached a point where I was satisfied with the overall look I moved on to modeling the pods and central feature.
Pre-scene light testing:
This stage was really challenging as I was pushing to see how well I could design on the fly. I broke the tower construction down into two modules: the pods themselves, and their supporting attachment modules, which I designed to be arranged in hexagonal layers with alternating 30 degree rotational offsets. My thinking here was that I could easily run duplicate special in Maya at any time to create a load of mesh instances that I could edit and instantly see the effect on the form and silhouette of the whole tower. The other thing I had in mind was that ultimately I would make a blueprint in Unreal to spawn the pods as hierarchy instanced static meshes in any formation, frequency and variation that I wanted, that would be relatively cheap in terms of geometry. To make the pods I blocked out a fairly simple form in zBrush, decimated it and brought into Maya to retopo for subdiv and used this as the highpoly. For the support modules I just modelled for subdiv in Maya and retopologised the converted highpoly mesh. The pods ended up taking more time than I anticipated, so to keep things varied and fun I jumped back into Unreal and threw in a load of old foliage as a place-holder to check that my initial ideas for the piece still held up. I was happy with the result and even though it didn’t really progress the project in real terms, it made the next step feel clearer and more achievable.
Initial foliage and composition WIP:
The next big problem to overcome was in composition. My initial idea for the main shot was a view looking directly up the tower and setting the environment roof-opening in one of the upper thirds of the frame. However, it became apparent as I was getting more detail into the central construction that this angle actually excluded a lot of that detail from view. To tackle this I decided to open up the scene so I could get the camera in a place where it could capture a lot more of that detail. This was possible because I was still working loosely and everything except the tower was still either in blockout or placeholding. I’ve found its really helpful to stay at this stage for as long as possible so that you can adapt and balance what you’re working on as needed before locking-in the design once the scene works as a whole.
For the vegetation I made three leaf variations in Maya as base meshes, which I then took into ZBrush and sculpted into a further three variations of each leaf-type. I brought these back into Maya, baked out a transparency map onto a square plane, then took the plane into Substance Painter where I baked out the normals and layered a load of colour and texture variation to describe the kind of natural discolouration that occurs on leaves, as well as the distinctive change in roughness between healthy, lush waxy foliage and dry, crispy dead leaves. I absolutely love using Substance Painter and have a load of smart materials that I’ve developed and tweaked stored on my shelf. I also did some experimenting with Speed Tree for Unreal as I wanted to get a big, creeping willow tree spiraling up the tower, but I didn’t get enough quality into it to justify putting it in the scene.
Final foliage in Unreal:
Layered smart materials breakdown in Substance Painter:
The scene is lit entirely by dynamic lights and uses Unreal’s light propagation volume. I spent a lot of time tweaking and adjusting light settings and positions to set the mood and get the read right. I really enjoy working with emissive materials and the LPV enables emissive textures to dynamically light the scene, and although it’s not a fully finished feature the results are really impressive. Another big contributor to the scene’s lighting was volumetric fog, which is another great feature that gives some fantastic control over mood and atmosphere. By tweaking a light’s scattering contribution you can control value across the light’s attenuation radius, allowing you to pick out specific and distinctive areas of illumination. Combining this with the LPV gives a big boost to the presence and believability of your emissives.
Visualisation of the light propagation volume:
The one thing I wasn’t entirely happy with was the uniformity of the fog density. I played around making an animated particle volume material just to see how it would look, and although I was blown away by how cool the volume material was as a feature, the volume resolution was too low to achieve the quality I wanted. I didn’t want to spend much more time figuring out how to improve the fidelity, so I ended up using translucent lit particles. The material set up for these particles featured a pretty simple UV coordinate distortion achieved by adding a tiling noise alpha to the R and G channels of a texture coordinate node, then panning this over itself at two different speeds and feeding it into the UV coordinates of the same texture. The drawback here is that the two sets of panning coordinates will re-align at regular intervals, giving you a tell-tale ugly flash every now and then. You can avoid this by offsetting one of the panning textures, using two different textures to pan, or you can minimise the frequency of the alignment by using numbers for the pan speeds that have as few common multiples as possible.
Particle material breakdown:
All materials in the scene were instances with parameters set up to control attribute intensity and offset, and lerps to switch and blend between texture variations. Using material instances is key to being able to quickly tweak and change the look of your materials, because there is nothing more frustrating than having to wait for a complex shader to recompile, only to find that you don’t like the result of the change you just made. To add further variation to materials on larger surfaces I used decals to alter surface roughness and base colour, and used detail texture nodes to maintain texel density on up-scaled geometry as well as to add micro-surface details to assets that would be seen up-close. For the foliage material I used the foliage shader and spent a lot of time tweaking subsurface colour and opacity values to match the lighting set up. This was aided massively by using distance field meshes set to two-sided and enabling distance field shadows on all lights, as well as distance field ambient occlusion on the scene’s dynamic skylight. The result is that the foliage shades much more naturally and sits more convincingly in the scene. It is also much more efficient, so it’s a win-win!
Foliage material breakdown:
Distance field visualisation:
Distance field shadows on and off:
By far the biggest stage of production was lighting, which was ongoing and went through the most iterations. There are actually very few assets in the final scene and their production was pretty rapid thanks to the re-usability of smart materials in substance painter which both saves time and helps ensure visual consistency. Once the scene was opened up and the composition locked-in it was mostly a case of refining, tweaking and balancing. I tried to make this as easy and efficient for myself as possible by using a lot of folders to clearly name and organise assets into sensible groups so that I could quickly tweak multiple lights and geo simultaneously. I had a folder that contained all my major lights as well as my post-process volume and exponential height fog, as these were the assets I spent most time tweaking.
The key to successfully iterating the scene in this manner was seeking frequent feedback, as I find the more I look at the same image from the same angle the faster I lose sight of what I’m looking at, so it’s vital to have input from a fresh perspective. I was fortunate enough to get some great feedback from some incredibly talented artists and industry veterans at DAC Frankfurt, as well as a great deal of support and advice from fellow artists on Artstation and 10k, without which I wouldn’t have been able to make the scene as it is. A big shout out of thanks to them, thanks to 80 Level for interviewing me, and thanks for reading!