What are gradients and how they can be generated?