[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13512] trunk/blender/source/blender/ render/intern/source/occlusion.c:
Brecht Van Lommel
brechtvanlommel at pandora.be
Fri Feb 1 13:18:46 CET 2008
Revision: 13512
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13512
Author: blendix
Date: 2008-02-01 13:18:45 +0100 (Fri, 01 Feb 2008)
Log Message:
-----------
- Small approximate AO optimization for falloff, saves some percentages
render time.
Modified Paths:
--------------
trunk/blender/source/blender/render/intern/source/occlusion.c
Modified: trunk/blender/source/blender/render/intern/source/occlusion.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/occlusion.c 2008-02-01 12:14:15 UTC (rev 13511)
+++ trunk/blender/source/blender/render/intern/source/occlusion.c 2008-02-01 12:18:45 UTC (rev 13512)
@@ -1134,7 +1134,7 @@
OccNode *node, **stack;
OccFace *face;
float resultocc, v[3], p[3], n[3], co[3];
- float distfac, error, d2, weight, emitarea;
+ float distfac, fac, error, d2, weight, emitarea;
int b, totstack;
/* init variables */
@@ -1164,6 +1164,14 @@
emitarea= MAX2(node->area, node->dco);
if(d2*error > emitarea) {
+ if(distfac != 0.0f) {
+ fac= 1.0f/(1.0f + distfac*d2);
+ if(fac < 0.01f)
+ continue;
+ }
+ else
+ fac= 1.0f;
+
/* accumulate occlusion from spherical harmonics */
weight= occ_solid_angle(node, v, d2, n);
weight *= node->occlusion;
@@ -1175,10 +1183,7 @@
bentn[2] -= weight*v[2];
}
- if(distfac != 0.0f)
- weight /= (1.0 + distfac*d2);
-
- resultocc += weight;
+ resultocc += weight*fac;
}
else {
/* traverse into children */
@@ -1188,28 +1193,29 @@
/* accumulate occlusion with face form factor */
if(!exclude || !(face->obi == exclude->obi && face->facenr == exclude->facenr)) {
- weight= occ_form_factor(face, p, n);
- weight *= tree->occlusion[node->child[b].face];
-
if(bentn || distfac != 0.0f) {
occ_face(face, co, NULL, NULL);
VECSUB(v, co, p);
+ d2= INPR(v, v) + 1e-16f;
- if(bentn) {
- Normalize(v);
- bentn[0] -= weight*v[0];
- bentn[1] -= weight*v[1];
- bentn[2] -= weight*v[2];
- }
+ fac= (distfac == 0.0f)? 1.0f: 1.0f/(1.0f + distfac*d2);
+ if(fac < 0.01f)
+ continue;
+ }
+ else
+ fac= 1.0f;
- if(distfac != 0.0f) {
- d2= INPR(v, v) + 1e-16f;
- weight /= (1.0 + distfac*d2);
- }
+ weight= occ_form_factor(face, p, n);
+ weight *= tree->occlusion[node->child[b].face];
+
+ if(bentn) {
+ Normalize(v);
+ bentn[0] -= weight*v[0];
+ bentn[1] -= weight*v[1];
+ bentn[2] -= weight*v[2];
}
- resultocc += weight;
-
+ resultocc += weight*fac;
}
}
else if(node->child[b].node) {
More information about the Bf-blender-cvs
mailing list