STRAND HAIR

Every hair on this head is simulated and shaded individually, in your browser, on WebGPU. It is the SETech engine compiled to WebAssembly, the same C++ that runs the desktop build.

Drag or one finger to orbit · scroll, pinch or W/S to zoom
Loading the engine…

What you are looking at

Guide strands run on a GPU solver: a compute pass inside the engine's XPBD framework with one thread per strand, walked root to tip, holding each hair's shape with local and global constraints, keeping it inextensible with a follow-the-leader projection, and pushing it out of the head's colliders. Those guides are then expanded on the GPU into tens of thousands of rendered fibres, each one a camera-facing ribbon built in the vertex shader straight out of the solver's node buffer, with no vertex data and no CPU work per hair.

The shading is a Marschner fibre model: the R, TT and TRT lobes that give hair its rim light, its glow when lit from behind, and the second highlight that slides as you move. Absorption is in melanin rather than an albedo texture, so the colour changes the way real hair does. An approximate deep shadow, one depth layer with exponential absorption, carries the light through the hair volume, and wet hair soaks, clumps, darkens and dries.

Nothing is imported

The hair, the beard and the eyebrows are grown at load time from parameters. The head is a scanned mesh under the MIT-licensed ICT-FaceKit, skinned so it turns on its neck.

One C++ codebase

The same engine builds for Windows, Mac, iOS, Android, Linux and the browser across D3D11, D3D12, Vulkan, Metal and WebGPU. This page is the WebGPU path.

Physical sky

The sky is a marched atmosphere with a cloud deck, the same one the engine's live OpenStreetMap demo flies over. It lights the scene and the water reflects it.

Skin that scatters

Pre-integrated subsurface scattering driven by curvature baked per vertex, translucency through thin parts, procedural pores, and eyes with a fibred iris under a wet cornea.

Built with SETech

SETech is a multiplatform C++ engine written from scratch: renderer, scene, physics, audio, asset pipeline, editor and tooling. Other demos on this site run the same engine: a live OpenStreetMap world, a full editor in the browser, a procedural fighting game, and a ZX Spectrum emulator rendered on a period television. See the rest · Start a conversation

Credits and notices

SETech engine and this demo © Split-E, LLC. All rights reserved.

Content credits

MIT License. Copyright © 2020 USC Institute for Creative Technologies. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Software notices

Third-party components included in this build are listed here with their licenses and uses.