diff options
author | Morten Hustveit <morten.hustveit@gmail.com> | 2014-12-02 15:18:32 -0500 |
---|---|---|
committer | Morten Hustveit <morten.hustveit@gmail.com> | 2014-12-02 15:18:32 -0500 |
commit | 1dca69e545ab815850230a377bc346bb5dc33839 (patch) | |
tree | ebd96d6dc51c3b74e1006d26ed8370b2c3e8e58c /ray.c | |
parent | 59eb492aac9d1d5a005858f9e32b34ac79cb02a6 (diff) |
ray.c: Skip normalizing if light has negative contribution
This saves about 3ms/frame on yelena.
Diffstat (limited to 'ray.c')
-rw-r--r-- | ray.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -59,9 +59,12 @@ trace(float s[3], const float d[3], float pixel[3], int n) { for(i = 0; i < 3; ++i) l[i] = lights[m].position[i] - y[i]; - normalize(l); - for(k = 0; k < 3; ++k) - pixel[k] += lights[m].diffuse[k] * objects[j].diffuse[k] * (MAX(dot(l, r), 0)) / (1 << n); + float lr_dot = dot(l, r); + if (lr_dot > 0) { + float scale = lr_dot / sqrtf(dot(l, l)) / (1 << n); + for(k = 0; k < 3; ++k) + pixel[k] += lights[m].diffuse[k] * objects[j].diffuse[k] * scale; + } trace(y, r, pixel, n + 1); } |