What are the differences between Configuration.isVisible and Configuration.isCanBeConsumed?

looking at Attribute based matching in dependency resolution describes a few different dependency resolution techniques for `Configuration:

  1. can be resolved
  2. can be consumed

Configuration also has a property for isVisible:

A visible configuration is usable outside the project it belongs to.

Based on the documentation for both of these, what is the difference between isVisible and isCanBeConsumed?