Table of Contents
- General Info about MetaHumans
- MetaHuman Hair
- MetaHuman-Settings in VR
- Using Additional Lighting
- MetaHuman Bugs and Oddities
General Info about MetaHumans
MetaHumans are character models supported by UE 4.26 and higher. They can be imported from Quixel Bridge into a UE project and integrated with the character plugin as described here. This report was written for UE4.27.
The rendering quality in UE is set with the Level-of-Detail (LOD) value. Lower values correspond to higher quality rendering with a larger performance impact. By default, the LOD is adjusted depending on the distance to the MH. However, this often looks strange and can lead to some visual bugs like flickering hair. Thus, it is usually best to use a forced LOD value. This can be done using the LODSync-component, which can be accessed via the Blueprint Editor (Open the MetaHuman-Blueprint in the Blueprint Editor, click on LODSync component in the components window).
For MetaHumans 8 different LOD values can be entered (0
-7
), if the forced LOD is set to -1
, the LOD will be adjusted automatically.
MetaHuman Sarah at LOD 0
MetaHuman Sarah at LOD 3
MetaHuman Sarah at LOD 6
MetaHuman Hair
MetaHuman hair is the component that has the largest impact on performance. It is unfortunately also not yet fully developed for alle features of UE. Most importantly, groom components do not officially support precomputed (static/stationary) lighting yet (Though I have also experienced problems using movable lights only). This is why using MetaHumans in naturally lit scenes can be a little buggy. There are three different approaches to rendering hair (listed in order of decreasing fidelity):
- Strand-based rendering: The hair is rendered as individual strands
- Card-based rendering: The shape is approximated with a large number of flat cards
- Mesh-based rendering: The shape is very roughly approximated with a mesh
In the images above showcasing the different LODs all three types of rendering can be seen. By default, strand-based rendering is used for LODs lower than 2, for LODs 2-4 card-based rendering is used, for LODs above that, meshes are used. However, you can also force the use of card-based hair (see below). In general, card-based hair seems to be less buggy than strand-based hair, it is also less computationally expensive. Some MetaHumans require the use of strand-based hair. This is marked within Quixel Bridge:
In general, these MHs should be avoided for increased flexibility.
Force the Use of Card-Based Hair
To test card-based hair, simply enter r.HairStrands.UseCardsInsteadOfStrands 1
into the console (Window->Developer Tools->Output Log). This change will not be saved, it will be reverted when you reopen the project. To permanently change the setting:
- Close the project
- Open the file "DefaultEngine.ini" located in the "Config" folder in the project directory.
- Add
r.HairStrands.UseCardsInsteadOfStrands=True
underneath "RendererSettings" - Save the file and reopen the project
MetaHuman-Settings in VR
The following settings worked well for me:
- Engine Type: Forward Rendering
- Anti-Aliasing: FXAA
- LOD: 0
- Hair-Rendering: card-based
I did not notice a difference (neither performance-related nor visual) using different Resolution-Settings in Bridge, so it is probably best to leave it at the default 8k.
For further performance tweaking, the performance/debugging wiki-entry is a good reference.
Some MetaHumans at these settings:
Sarah
Bes
Jesse
Omar
Paula
Cara
Wallace
Using Additional Lighting
In the pictures above, the MetaHumans were exclusively lit with indirect lighting. This is practical, especially when the characters are going to move around the scene. However, using additional lights can improve visuals and make the characters appear more lively. For example, additional lights can be used to add highlights to the MetaHuman's hair:
No extra light
Spot-light above adding some highlights in her hair
In this case, there is only a small difference, but of course lighting is something that can be played around with forever. On a technical level, two features of Unreal Engine are especially useful for this:
-
Attenuation Radius The attenuation radius controls how "long" the lightbeams are. That way you can for example add highlights on the hair, without casting extra shadows or adding highlights elsewhere.
-
Adding lights as components You can add lights as components to the MetaHumans. This feature makes it possible to make the lights follow the character as it is moving. To add a light to a MetaHuman, simply select the MH-object, click on "Add Component" and select a light. To control the settings (like brightness and attenuation radius) you can select the light in the component list of the MetaHuman.
Here, the light only has an effect on anything within the blue cone.
MetaHuman Bugs and Oddities
Strand-Based Hair
Strand-based hair sometimes looks good. More often than not however, it seems to be buggy:
- It cannot be used properly with forward rendering & MSAA
- Even with deferred rendering, indirect lighting does not seem to properly work with strand-based hair
1) Strand-Based Hair and Forward Rendering / MSAA
Forward rendering does not handle strand-based hair rendering very well. The hair is way too reflective
Furthermore, when MSAA
is used, some hair glitches into the skin and is only visible in patches.
When using card-based hair, these problems do not occur.
2) Strand-Based Hair and Deferred Rendering The strand-based hair acts a little unexpected, even when using deferred rendering. Here the same settings (deferred rendering, raytracing on) were used, only the lighting is different.
Here Sarah's hair is not as dense and less reflective than in the studio setting. In general, there seems to be a lack of shadowing of the groom components. This is not entirely unexpected as precomputed lighting (which was used here) is not officially supported by the groom components.
Also note the flickering shadows (especially on her cheek and neck), this is another bug I experienced using MHs, even when using movable lights only, which are officially supported.
Card-Based Hair
Card-Based Hair and MSAA
Even when using card-based hair, using MSAA leads to issues. This issue does not occur when using a different type of anti-aliasing.
MetaHumans in UE5.3
-
In UE5.3 also deferred shading with Temporal Anti-Aliasing(TAA) seems to work quite well and shows better hair even with stand-based hair:
-
However, with multiple metahumans there occured the problem that the strand/groom-based hair of one is shown on top of the other (only on the right eye in VR):
The best way to circumvent this was to go for card-based hair on the other, e.g. , using the way above or setting for the Hair/Fuzz/... assets: