Home Technical Talk

Velvet shader in PBR format for realtime engines

Hi Polycount community,

I was wondering what is the best method to achieve a velvet-looking material using standard PBR metallic workflow maps (roughness, metallic, specular, albedo, normal ..etc). Most path tracing render engines have a special velvet shader or special effects such as fresnel to implement this look but I was wondering if this can be achieved using PBR texture maps.

Here are some images for reference of the effect I am talking about:

Thank you.


  • Eric Chadwick
    Only if you provide a custom BRDF.

    Working with the Khronos Group, we've developed a PBR one for glTF, as an extension called KHR_materials_sheen. Here's a demo I did the materials for: https://www.khronos.org/news/press/khronos-releases-wave-of-new-gltf-pbr-3d-material-capabilities

    I've been testing the extension quite a bit, and getting decent results.

    Another example, with explanations: https://github.com/KhronosGroup/glTF-Sample-Models/blob/ecd19d7d5b3684b5cf3234feb7f0c095fb445018/2.0/GlamVelvetSofa/README.md

    The main tricks are:
    1. If the velvet is a dark or saturated color, use a dark albedo; put all the color in the sheen effect. Otherwise you can't get enough contrast.
    2. Colorize the specular, satin and velvet usually require this. You can set it to 100% metal, but the fresnel can be a bit extreme, better to go with dielectric.
    3. Use a grunge normal map to bend the microfibers, simulates the human touches that cause that crumpled shading.
  • poopipe
    Offline / Send Message
    poopipe grand marshal polycounter
    Unreal's cloth material is pretty good if you're in there. Everything Eric describes applies there too 

    To add to Eric's points..

    If you're stuck using a basic metallic/roughness material then making it partially if not fully  metallic and very rough is about the best you can do
    that will give you coloured specular without introducing clear reflections.
  • MohamedAtef
    @Eric Chadwick
    This is in fact the best velvet-looking results I have seen in real-time shaders, amazing work!
    Unfortunately, I am currently tied to standard PBR shader maps. The second link though gave very great tips, especially regarding the normal map. Thank you.

    I have to deliver the model for an AR application but I don't know the specific engine so I wanted to have a general result. The partial metallic and high roughness tips really helped though, thanks! Combined with the normal map from the link provided by Eric this gave very decent-looking results. Not as good as KHR_materials_shean, but still very decent.

    Thanks everyone for the help.
  • gnoop
    Offline / Send Message
    gnoop polycounter
    If it's down to cloth folds  baked into normal map details   baking also  a bit of static  Fresnel in both roughness and color channel  helps usually even if it's not always perfectly physically  correct
  • MohamedAtef
    gnoop said:
    If it's down to cloth folds  baked into normal map details   baking also  a bit of static  Fresnel in both roughness and color channel  helps usually even if it's not always perfectly physically  correct
    I could see this working for some folded sheet of cloth but I wanted something more general for a furniture piece.
  • Eric Chadwick
    The best you can do then is increase metalness and roughness, and use a crumpled normal map.
  • pior
    Offline / Send Message
    pior grand marshal polycounter
    In all fairness ... the question doesn't really have an answer, does it ? If you know that you have to use a standard roughness and metalness setup that you can't tweak the behavior of, then you know already that you don't have access to what makes velvet look like velvet, that is to say the fact that fibers reflect light at a different angle than a regular plain surface, and have some combing quality to them. So basically the only thing you can do is pick one of the few combinations of roughness and metalness that get you close (probably quite rough but not fully rough, and quite metallic but not fully metallic) ; and then try to cheat a bit further by painting some funky lighting/fake airbrushed reflections in the albedo. What else could you possibly do beyond that ? 

    (... besides maaaaaaybe some funky editing of the object normals to affect the shading response ever so slightly, but I kindof doubt it will look any good).
  • gnoop
    Offline / Send Message
    gnoop polycounter
    That IMO a quite big disadvantage of the whole  metalic PBR  forced onto game artists  several years ago.   You have to cheat anyway.   Sometimes a lot .   Sometimes  you spend more time than with old style materials ( aka 3dmax standard mat)  where you could tweak anything  including fresnel  factor.

    I have same issue for asphalt materials.  Classical  PBR needs asphalt grains be properly represented in its normal map.   It's like velvet fibers.   Not  small enough to be micro surface pores as roughness  and not big enough to have enough normal map resolution.        Same issue for moss or grass baked in flat texture and  a lot of grainy  materials  or real nature in general.        Also totally lacks  those tiny shadows in between  grains   that doesn't allow you to see too much of reflected highlight spot at low sun angle.

    For asphalt  for example   a typical metallic PBR  material  makes it totally matte at mid day  or super shiny and plastic at sunset and never a right one. 

  • Eric Chadwick
    Bah. Game art has always been about abusing the art system to get what you want, and it always will be. Performance is king.

    However PBR and IBL with linear rendering are overall quite superior to Diffuse-Spec with point lights and reflection maps and all those gamma fuckups that caused us to make blue spec maps and other chicanery.
Sign In or Register to comment.