Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WDHuman Gem

Realtime hair-strand, skin, and eye rendering for digital humans. (Currently WIP)

Prerequisites

Alembic SDK (for .abc groom import) — auto-fetched, nothing to install

The build calls find_package(Alembic) first and, if no SDK is installed, downloads and builds Alembic 1.8.8 (+ Imath 3.1.12, pinned by SHA256) via FetchContent. Either path defines WDHUMAN_ALEMBIC_SUPPORTED.

To use a system SDK instead, install it (vcpkg install alembic:x64-windows) and configure with the vcpkg toolchain file. To opt out of import entirely, configure with -DWDHUMAN_FETCH_ALEMBIC=OFF; AlembicGroomBuilder::ParseAlembic then compiles to a stub that fails with an AZ_Error naming the missing SDK.

Using the gem

1. Enable it

Add WDHuman to your project's gem_names in project.json, then build the WDHuman / WDHuman.Editor targets and let the Asset Processor run — it cooks the gem's passes, shaders and materials on first sight.

2. Skin and eyes — ready to use now

Assign Materials/Types/Skin.materialtype to a head mesh. It uses Atom's Skin lighting model, so subsurface scattering is handled by Atom's own 200-sample Burley SubsurfaceScatteringPass — the material's SSS Strength / Quality drive that pass. There is no WDHuman-specific pass to enable.

Eye.materialtype currently mirrors Atom's stock eye material; prefer Atom's until a WDHuman-specific eye feature lands.

3. Hair — import a groom

Drop an .abc curves export (Maya / Houdini / Blender) anywhere under a scanned assets folder. The Asset Processor cooks it to a .groomasset via AlembicGroomBuilder. Group names are classified by substring — guide, eyelash, eyebrow/brow, peach/fuzz, otherwise plain strands.

A ready-made 64-strand test groom lives at Assets/Testing/HairPatch.abc. Regenerate or resize it with:

AzTestRunner.exe WDHuman.Tests.dll AzRunUnitTests --gtest_filter=GenerateTestContent.DISABLED_WriteHairPatchAlembic --gtest_also_run_disabled_tests

Authoring settings (per-group role overrides, decimation, import scale, CV counts, per-group materials) live in a source-side sidecar named <groom>.abc.groomsettings, edited from Tools > Groom Editor. Saving it re-cooks the groom.

4. Hair — render it

Hair rendering is opt-in and off by default — turn it on first, or nothing below draws anything:

r.WDHuman.Hair.Enable 1

Then add WDHuman Hair to an entity (Add Component > WDHuman) and point Groom Asset at the cooked .groomasset. The groom renders in the Editor viewport as soon as the asset loads; entering game mode spawns the equivalent runtime component. Changing the asset or the Visible checkbox updates the viewport immediately, and re-cooking the groom hot-reloads it.

The hair passes refuse to install unless the pipeline has a TAA pass, because the strand rasterizer is stochastically sampled and relies on a temporal resolve. Override with r.WDHuman.Hair.RequireTAA 0 and expect severe aliasing.

Nine debug visualisations (fragment-count heatmap, voxel density, individual BCSDF lobes, tangents, deep opacity maps) are documented in Docs/DebugViews.md and selected with r.WDHuman.Hair.DebugView <0-9>. Live counters are in the WDHuman Profiler ImGui panel.

Quality Tiers

WDHuman ships three quality tiers — see the design spec at docs/superpowers/specs/2026-05-28-wdhuman-gem-design.md for the full table. Configure via r.WDHuman.Hair.QualityTier (0 = raster, 1 = RT-hybrid, 2 = path-traced).

About

Realtime hair-strand, skin, and eye rendering for digital humans in O3DE.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages