Sorry. The original code is wrong. original: nl = max(dot(N, L), 0.0f); nv = max(dot(N, E), 0.0f); arg_nl = acos(nl); arg_nv = acos(nv); a = max(arg_nl, arg_nv); b = min(arg_nl, arg_nv); b *= 0.95f; sin_a = sin(a); tan_b = tan(b); -- y.fujii