- Home /
What is the correct way to mix colours in a surface shader?
Most shader examples multiply colour values.
Eg, Mixing Gray with Gray should give Gray, however when multiplying the colour values you get (0.25, 0.25, 0.25) = (0.5, 0.5, 0.5) * (0.5, 0.5, 0.5) which is a darker gray!
What is the correct way to mix colours in a shader?
Answer by skovacs1 · Nov 08, 2010 at 09:12 PM
Mixing is a really very broad and naive description and because of this "correct" depends on what exactly you mean.
Multiplying, adding, subtracting, dividing, signed addition, and lerping are all forms of mixing. There any number of different kinds of mixing as determined by your mixing function.
- If you wanted both to have the same contribution to the final output, you could do something like
(colorA + colorB) * 0.5
. - If you wanted to lerp them together based on some value such as alpha, you could do
Lerp(colorA, colorB, mixAmount)
- You could multiply the colors by their alphas, add them together and set the alpha to be the addition of the two alphas
half4((colorA.rgb*colorA.a+colorB.rgb*colorB.a),colorA.a+colorB.a)
.
Lots of shaders do any number of different things. Multiplying will darken the colour and in many cases, that is what is needed, especially when applying lighting. Adding will brighten the colour which would be used for things like emission. If you need something different, then write your shader to do something different.
Your answer
Follow this Question
Related Questions
Material doesn't have a color property '_Color' 4 Answers
Need help with using world position in shader 1 Answer
Strange artifacts on Vertex Color Shader 0 Answers
Materials are colored differently on rotated objects 1 Answer
How do I invert the color of ui text to make it more readable, on a messy background? 4 Answers