# [Bf-cycles] Question about Oren-Nayar diffuse model

Andreas GalsterGalster andreas_galster at hotmail.de
Mon Oct 17 11:47:46 CEST 2011

```
Brecht Van Lommel <brechtvanlommel at pandora.be> wrote:

>This looks like a correct optimization to me, can't see any mistakes
>in it. I'd say those references are wrong :).
>
>Brecht.
>
>On Mon, Oct 17, 2011 at 9:16 AM, Yasuhiro Fujii
><y-fujii at mimosa-pudica.net> wrote:
>> Hi all,
>> I am trying to implement Oren-Nayar reflectance model for the cycles renderer.
>> I have some question about the implementation of O-N model (Sorry for not
>> cycles specific question).
>>
>> I optimized the calculation of O-N model like this:
>>
>> original (from gpu_shader_material.glsl, modified for an explanation):
>>  nl = max(dot(N, L), 0.0f);
>>  nv = max(dot(N, E), 0.0f);
>>  cos_nl = acos(nl);
>>  cos_nv = acos(nv);
>>  a = max(nl, nv);
>>  b = min(nl, nv);
>>  b *= 0.95f;
>>  sin_a = sin(a);
>>  tan_b = tan(b);
>>  // use sin_a, tan_b
>>
>> optimized:
>>  nl = max(dot(N, L), 0.0f);
>>  nv = max(dot(N, E), 0.0f);
>>  cos_a = min(nl, nv);
>>  cos_b = max(nl, nv);
>>  cos_b += FLT_MIN;
>>  // FLT_MIN <= cos_b <= 1.0f because 1.0f + FLT_MIN == 1.0f
>>  sin_a = sqrtf(1.0f - cos_a * cos_a);
>>  tan_b = sqrtf(1.0f - cos_b * cos_b) / cos_b;
>>  // use sin_a, tan_b
>>
>> But some references say "O-N model is expensive because the calculation of
>> trigonometric function is unavoidable".  I doubt this optimization has
>> something wrong though it seems to be worked on my implementation.
>>
>> Are there any suggestions?
>>
>> -- y.fujii
>> _______________________________________________
>> Bf-cycles mailing list
>> Bf-cycles at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-cycles
>>
>_______________________________________________
>Bf-cycles mailing list
>Bf-cycles at blender.org
>http://lists.blender.org/mailman/listinfo/bf-cycles
>
```