Bugfix #5311
AO with option "Use Distances" gave artefacts. This because the raytracer was still returning on any hit, instead of find the closest hit.
This commit is contained in:
@@ -957,7 +957,8 @@ static int testnode(Isect *is, Node *no, OcVal ocval)
|
|||||||
VlakRen *vlr;
|
VlakRen *vlr;
|
||||||
short nr=0;
|
short nr=0;
|
||||||
OcVal *ov;
|
OcVal *ov;
|
||||||
|
|
||||||
|
/* return on any first hit */
|
||||||
if(is->mode==DDA_SHADOW) {
|
if(is->mode==DDA_SHADOW) {
|
||||||
|
|
||||||
vlr= no->v[0];
|
vlr= no->v[0];
|
||||||
@@ -990,7 +991,7 @@ static int testnode(Isect *is, Node *no, OcVal ocval)
|
|||||||
vlr= no->v[nr];
|
vlr= no->v[nr];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { /* else mirror and glass */
|
else { /* else mirror or glass or shadowtra, return closest face */
|
||||||
Isect isect;
|
Isect isect;
|
||||||
int found= 0;
|
int found= 0;
|
||||||
|
|
||||||
@@ -2130,7 +2131,7 @@ void ray_ao(ShadeInput *shi, float *shadfac)
|
|||||||
|
|
||||||
isec.vlrorig= shi->vlr;
|
isec.vlrorig= shi->vlr;
|
||||||
isec.vlr_last= NULL;
|
isec.vlr_last= NULL;
|
||||||
isec.mode= DDA_SHADOW;
|
isec.mode= (R.wrld.aomode & WO_AODIST)?DDA_SHADOW_TRA:DDA_SHADOW;
|
||||||
isec.lay= -1;
|
isec.lay= -1;
|
||||||
|
|
||||||
shadfac[0]= shadfac[1]= shadfac[2]= 0.0;
|
shadfac[0]= shadfac[1]= shadfac[2]= 0.0;
|
||||||
|
|||||||
Reference in New Issue
Block a user