Energy conservation for ashik2 materials

What are the plausible limits to the color parameters of the ashik2 material?

When I look at formula for the diffuse component of the Ashikhmin-Shirley BRDF (Equation 16), I see a (1 - R_s) term, which suggests that an ashik2 material with a specular reflectance of 1 should have zero diffuse reflection regardless of the diffuse reflectance value I assign it. However, if I assign both diffuse and specular reflectance values of 1, I get a brighter reflection than if the specular reflectance is 1 and the diffuse reflectance is 0.

Does this mean that for ashik2 materials, I’m responsible for ensuring that the sum of the diffuse and specular parameters is ≤1?

Hmmm… This is a good question, and from my look at the code, it seems that the total reflectance is the diffuse plus specular for each color channel.

The initial implementation way back in 2011 was done by Nicolas Boneel, and it seems he didn’t include the (1 - Rs) in the diffuse calculation. We certainly could write it that way, though that would make having color primaries outside the [0,1] range problematic. (Since an RGB gamut is inherently limited, having colors that would seem non-physical per channel can still work out to the best approximation overall.) For other Radiance types, this doesn’t apply, since the color of the specular either matches the diffuse (for metals) or is white (for plastics).

Cheers,
-Greg

Hi @Greg_Ward,

Thanks for the explanation. I don’t think a change to the code is needed - that might mess up existing material definitions - but some explanation in the refman that the diffuse color parameters are treated differently than those for plastic would be nice. I can make my materials adhere more or less to the Rd + Rs ≤ 1 rule, although I still don’t really understand the circumstances when that rule could reasonably be broken.

OK, fair enough. I added a note about it to the reference manual.

I think as long as the formula for photopic reflectance is in [0,1) range, you are good:

bright(rgb) defined in color.h as (.265*R + .670*G + .065*B)

Cheers,
-Greg