Couple months ago I made this interactive environment for an art show. During the last year I have been doing quite a lot of work using Unity engine for a TV cartoon show – therefore Unity was a natural choice for this project as I have an established and tested pipeline and toolset to achieve quite good results.
This is a very interesting time for real time graphics – Blender 2.8 with it’s amazing Eevee render engine is getting ready for release. Unity 2018 introduced new render pipelines – with HD render pipeline promising very high end effects and performance. Naturally I felt that this is a good opportunity to test all these render engines with the same assets and see what are they capable of.
Base Test – Unity Classic
While a bit dated, Unity “classic” renderer (Unity’s built-in default renderer from Unity 5 till Unity 2017/2018) is still quite good PBR render engine. While it lacks some features and it’s performance on modern GPUs is not optimal, you can make up for it’s shortcomings by extending it with a lot of excellent third party extensions from the Asset Store. From my experience I have gathered few invaluable extensions that are of excellent quality and add some very nice features.
PostProcessing Stack V2 (Available through Package Manager in 2018) by Unity is a very good compilation of base image processing effects – giving AO, Tone Mapping, Screen based reflections, Color Correction, Bloom, Depth of Field, Grain and other standard effects. It might not be the best there is, but it is a well put together package of effects that work together (no conflicts) and works well with Cinemachine (Unity’s advanced camera system). It can get you to 70% or of final image.
hxVolumetric Lighting is an amazing real time volumetrics rendering plugin that produces really high quality volumetric light effects and has a lot of customization options – allowing adding noise to the fog, having layered (height fog), adding density using 3d volume objects etc. So far it is the best real time volumetrics rendering solution I have seen in any engine.
Amplify Occlusion is a very powerful Ambient Occlusion effect renderer. It uses state of the art techniques and provides a lot of customization to achieve really detailed and good AO with very good performance.
Amplify Shader Editor – It is a very very good general purpose node based shader editor for Unity. In many ways similar to Unreal Engines material editor, It has a lot of useful nodes beyond standard shader functions. Not going into details – it’s a super useful tool for creating custom shaders.
Beautify – another stack of postprocessing effects for that extra bit of touch-up. Sharpening and anamorphic bloom are two especially nice effects.
Next-gen soft shadows – Replacement for default shadowmap rendering to provide smooth soft shadow filtering for all light types with adaptive penumbra size. It also gives screen space shadows for directional lights.
Test two – Blender 2.8 Eevee
Eevee is amazing! It is a new real time render engine built into new Blender 2.8 version. What makes Eevee special is it’s parity with Blenders GPU accelerated path-tracing render engine Cycles. They share the same material/shader node networks and you can render the same scene setup with both engines without making any changes.
It is not intended for super high performance real time rendering but more for “close to real time” rendering focusing on highest possible quality. Eevee aims to provide higher quality rendering than more performance oriented game engines – useful for high quality previews and in many cases even final renders.
While being quite feature rich, some important features are still missing. One thing particularly important for this demo that is missing is ability to exclude some lights from affecting volumetric objects. Of course this is not physically accurate, but it is very needed to achieve artistic scene lighting while hiding all the “support lights” from being visible in fog.
As you can see in the video below, there are few bright lights floating in air near the sculpture and illuminating the surrounding fog. This is not how it was supposed to look as you can see in the Unity demo.
Another unpleasant aspect was overall performance – especially when having several animated objects in scene. Seems like having objects with armature modifiers (and other animated modifiers) is having a huge hit on performance. Also certain animated procedural shaders are very slow – I think that animated noises are very slow as they are probably cached each frame to textures.
As a result, my scene is so slow, that it is impossible to view it when hitting play. It seems that there is a room for a lot of optimizations – especially considering that in Unity I can easily achieve 100 fps.
Another annoying issue is that currently when rendering animation, Blender 2.8 reloads and processes scene each frame – even with Eevee. As a result more than 95% of frames render time is preprocessing stage and actual rendering time is insignificant. I’m sure this will be addressed as it does not make sense (because Eevee can do viewport playback render without any problem), but currently it takes unreasonable amount of time to render ever simplest animations with Eevee.
Test three – Unity HD render pipeline
During creation of this demo, Unity HD render pipeline was still in a preview state. It means that some features were missing, non-complete or buggy. Some bugs were quite serious.
HD render pipeline might seem more appealing to artists compared to old render engine, because it supports different visual effects that previously were possible only using third party extensions – for example volumetric fog, subsurface scattering etc. There is also Shader Graph – node based shader creation system, to make shader creation more accessible for everyone. Although I have not done proper testing myself, HD render pipeline should be much faster on modern GPU hardware than the old renderer.