Page MenuHome

Subdivision Surface Modifier causes vertex color map to display a lot of banding in cycles. (Eevee is fine)
Closed, ResolvedPublicBUG

Description

System Information
Operating system: Windows-10-10.0.18362-SP0 64 Bits
Graphics card: GeForce GTX 1080/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 446.14

Blender Version

Broken: version: 2.83.2, branch: master, commit date: 2020-07-09 05:50, hash: rB239fbf7d936f
Worked: (newest version of Blender that worked as expected)

Short description of error

When applying a subdivision modifier to an object that has a smooth vertex color map, and using this vertex color map as a shader input through an Attribute or Vertex Color Node, the map has a lot of blockiness and banding on the gradients.

Exact steps for others to reproduce the error

Here's a .blend file so you can see directly or here's how I made it:

  1. Create a cube (or keep the default one) and subdivide with 20 cuts in edit mode.
  2. Go into vertex paint
  3. Set the brush color to black, and fill with Shift + K (This creates a black vertex color map named "Col" on the cube)
  4. Grab the Draw tool and set the color to white
  5. Draw a big dot on one of the faces
  6. Grab the Blur tool and blur the edges so the fall off is really smooth
  7. Back to object mode, go into the shading tab
  8. Create a material for the cube in the node editor
  9. Bring in a Vertex Color node, set the value to Col and plug it into the Base Color of the Principled BSDF
  10. Set Specular to 0 on the Principled BSDF to see the effect better
  11. Plug a Math node in between the Vertex Node and the Principled BSDF, set to Multiply x 3.000 to see the effect better
  12. Add a subdivision surface modifier and set it to at least 3 viewport subdivisions, you can even apply it.
  13. Go into render view and switch between Eevee and cycles and you'll see a very good amount of banding in cycles although everything is smooth in Eevee

Using vertex color maps as wrinkle maps masks on high poly models gives very weird and bandy results in Cycles. It's probably a problem in a lot of other applications.