I'm trying to implement a simple Phong shader that supports non-physically-based materials and textures. Even though the material has a texture for each light component I still want the respective material coefficient to have some effect. My doubt is how to handle both of them. Should I mix, multiply or sum them? Right now I've multiplied them:

ambient  = material.ambient_color  * light.ambient  * texture_ambient;
diffuse  = material.diffuse_color  * light.diffuse  * diffuse_strength  * texture_diffuse;
specular = material.specular_color * light.specular * specular_strength * texture_specular;

It seems kinda dark, is this the correct way to combine material coefficients and textures?

  • $\begingroup$ that is the correct way. maybe darkness comes from not doing calculations in linear space? $\endgroup$ Jan 28, 2018 at 20:42
  • $\begingroup$ Have you tried increasing the light amounts? $\endgroup$ Jan 28, 2018 at 21:24
  • $\begingroup$ @SebastiánMestre What do you mean by linear space? I'm sorry, I'm new to this. $\endgroup$ Jan 28, 2018 at 23:42
  • $\begingroup$ @user1118321 No, I've been using only one light, a directional light. In my mind it should be enough and it shouldn't be as dark as it is. $\endgroup$ Jan 28, 2018 at 23:43
  • $\begingroup$ i mean linear colour space. images are usually gamma compressed and can give wrong results when using them in shading. they should first be gamma corrected. you can search what that means online. $\endgroup$ Jan 29, 2018 at 0:18

1 Answer 1


When applying various types of attenuation you are just multiplying by some number smaller than 1. This is akin to every atom of your material having some probability of absorbing the light that hits it.

Something to note is that these calculations should be performed ( in the context of gamma correction and colour spaces ) in a linear space.

If you don't perform the calculations in linear space you might end up with overly bright, overly dark, overly saturated or under saturated colours.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.