Page MenuHome

Principled shader does not interoperate nicely with texture alpha transparency
Closed, ArchivedPublic


System Information
Windows 10, GeForce GTX 1060 6GB

Blender Version
Broken: 2.78 Hash 248bba81e7a (blender-2.79-testbuild2-windows64)
Worked: (optional)

Short description of error
It is difficult to use the Principled shader with image textures with alpha channels. The transmission input requires an inversion from the alpha channel. Because the transmission is multiplied by base color and the color output from an image texture is black where the alpha channel is zero areas that should be transparent are opaque black. For complete transparency you can mix the color output with white using the alpha channel as the mix factor, which is clumsy, but that doesn't work for partial transparency. Also, complete transparency produces prominent noise that takes many samples (more than 1000) to remove.

Exact steps for others to reproduce the error
Just open the blend file and compare the rendering using diffuse, transparent, glossy nodes versus with principled shader (on right). The white block in the center is a reflection from an area light.
Blender file:

Texture file:

Rendered result:

On material.003 if you use the output of the mix node it will work for full transparency or opacity but not partial transparency.

If you set IOR to 1.0 then you lose the reflection:

Event Timeline

Brecht Van Lommel (brecht) changed the task status from Unknown Status to Unknown Status.EditedJul 25 2017, 6:14 PM
Brecht Van Lommel (brecht) claimed this task.

Thanks for the report, but these are known limitations that we want to fix, but don't consider a bug.

  • We plan to add an Opacity / Alpha socket to the Principled BSDF node.
  • Note that there is a difference between transparency (which behaves as if the geometry is absent, like cutout tree leaves) and transmission (like glass). Transparency is often textured, but for transmission that's relatively rare and would typically be a separate texture, not the alpha channel of an RGBA texture.
  • We can't really change the base color / transmission behavior to make this case easier, since we are trying to be compatible with shaders in other software.
  • Regarding noise, branched path tracing tends to be better at rendering this. We want to improve the regular path trace sampling here, but that's not a bug currently.