V-Ray’s implementation of the Anders Langlands’ alSurface shader
History of the alSurface shader
The “al” in from the alShaders refers to Anders Langlands, a VFX sequence supervisor currently at Weta Digital, who wrote a series of shaders for Arnold. Anders’ motivation was to implement production shaders for Arnold that he felt fit the VFX world’s needs beyond what Arnold provided natively. One of the most important shaders he wrote in the group is the alSurface shader. Also known as an uber-shader, this shader allowed the user to recreate most surfaces including, solids, metal, transparent, reflective, and even Sub Surface Scattering such as skin.
Here is a representation of the entire alSurface uber-shader in Maya:
His shaders have always been well respected by the industry, however, one element of the alSurface shader that gets a lot of people’s attention is how good it is at reproducing a skin shader.
He recently open sourced the shader itself, allowing others to implement it into their own rendering engines.
He has even created a page dedicated to alShader
V-Ray’s first implementation of the alSurface shader
Based on a strong demand from a V-Ray user, Luc Begins, on the V-Ray Forum, and the fact that the shader was now open sourced, Vlado decided to implement parts of the alSurface shader, specifically, all the parts needed to reproduce skin.
It takes into account diffuse, 2 levels of specular, and sub surface scattering. The only parts that are missing are the refraction and translucency, which may be added at some later point.
Here is a break down the of the alSurface shader in V-Ray so far:
As the motivation of the alSurface shader was centered around skin, let us examine how it is different from other skin shaders such as aiSkin shader in Arnold, and the VRay Skin Mrtl, which are in fact very similar in their approach.
Here is a breakdown of those differences:
VRay Skin Mtl: Diffuse and Sub-Surface color are actually two different maps and they are blended together by the diffuse amount.
alSurface: Diffuse and Sub-Surface color are actually driven by the same map and there is a SSS mix that controls how much that surface is effected by the subsurface scattering versus how much is driven by the Lambertian diffuse.
VRay Skin Mtl: There is a 3 level depth sub surface which is equally blended together. It also uses a standard dipole model for the SSS.
alSurface: This also has a 3 level depth for the SSS but has weight controls on each one. It also offers several SSS modes. Vlado has implemented two of them for the V-Ray version of the alSurface shader. Diffusion, which preserves more detailed compared to the standard dipole model, and Directional, which allows for an approximation of Single Scatter maps for even greater detail preservation.
VRay Skin Mtl: This uses a two lobe specular model with a sharp and broad reflection. It also uses Phong as the reflective BRDF. This model proved to work well in many situations, but at glancing angles, based on the way that it would cut out the SSS, could cause darkening. This is because the Fresnel effect is computed as a function of the angle between the viewing direction and the surface normal, ignoring the directions from which lights illuminate the surfaces.
alSurface: This model also uses a two lobe specular model. However, instead of using a smooth BRDF like Phong or Blinn, it uses a microfacet one. The Fresnel effect is computed as part of the BRDF calculations (a.k.a. “glossy Fresnel”) and takes into account the viewing direction, the surface normal, and the light directions. The user has a choice between GGX and Beckmann BRDF models. Based on the nature of the micro faceting, it can avoid the darkening effect at the glancing angles through retro-reflection. Additionally it does not cover the SSS at the same glancing angles.
Other notable differences:
The IOR values that are used for the Fresnel are different in both shaders based on how the fresnel calculation is made. Therefore, if the user used a same value for both shaders, the alSurface shader would appear more reflective.
The VRay Skin Mtl uses glossiness, so high values are more shinny, the alSurface shader uses roughness so high values are more diffuse. So if a map is used for one it needs to be reversed if it is being applied to the other.
The VRay Skin Mtl blends in diffuse, meaning a value of 1 is 100% diffuse. The alSurface shader blends in SSS meaning that a value of 1 is 100% SSS. If a map is used, such as a Single Scatter Map, the map would have to be reversed before it can be applied.
Where to get and try the alSurface shader
The shader is currently available for download in our Guithub:
Installation for 3ds Max
Copy the .dlt file for your 3ds Max version to the [maxroot]\plugins\vrayplugins folder.
Usage in 3ds Max
The material is called VRayALMtl.
Installation for Maya
Copy the file vray_BRDFAlSurface.dll to the folder with the rest of the V-Ray plugins (f.e. C:\program files\autodesk\maya2016\vray\vrayplugins)
Add the path to the vray_BRDFAlSurface.dll to the environment variables VRAY_FOR_MAYA2016_PLUGINS_x64 and VRAY_PLUGINS_x64
Copy the file libvray_BRDFAlSurface.so to the folder with the rest of the V-Ray plugins (f.e. /usr/autodesk/maya2016/vray/vrayplugins)
Add the path to the libvray_BRDFAlSurface.so file to the environment variables VRAY_FOR_MAYA2016_PLUGINS_x64 and VRAY_PLUGINS_x64
Usage in Maya
You can create the new material from Create > V-Ray > Create from V-Ray plugin > BRDF material. From that list select BRDFALSurface.
Comparing VRay’s SSS to the alSurface SSS
The Wikihuman project has been working on understanding the best approach to assembling a skin shader based on the delivered data from the ICT data set. From the start we already knew that, based on the data set we had, the standard skin shader in V-Ray would not be suitable. So we generated a new shader that would better suit the Lightstage data acquired from ICT.
However, the alSurface shader could technically use the Lightstage data more natively. For this reason, we decided test it against the Wikihuman shader.
Update: The Wikihuman project has done a more in depth comparison on the site here.
Here is a comparison of the wikihuman data with the two different shaders. We will write a more in depth analysis of the shader comparison on the Wikihuman.org website soon.