scale by pdf. scale by texture color

This commit is contained in:
Eric Wasylishen 2016-05-17 19:41:22 -06:00
parent 39ac445aa9
commit b142daa924
1 changed files with 7 additions and 2 deletions

View File

@ -2418,15 +2418,20 @@ void IndirectLightAtPoint(const bsp2_t *bsp, const vec3_t origin, const vec3_t n
vec3_t pointLight = {0,0,0};
LightAtPoint(ctx->bsp, traceHitpoint, hitface, pointLight);
for (int k = 0; k < 3; k++)
contrib[k] = qmin(512.0f, pointLight[k]);// *(ctx->lightsurf.texturecolor[k] / 255.0f);
contrib[k] = qmin(512.0f, pointLight[k] * (ctx->lightsurf.texturecolor[k] / 255.0f));
#endif
VectorAdd(indirect, contrib, indirect);
//printf(" contrib: %f %f %f\n", contrib[0], contrib[1], contrib[2]);
}
}
// this is the pdf for picking a uniformly distributed solid angle on a hemisphere.
// we're actually picking from a consine-weighted distribution.
const vec_t pdf = (1/(2 * Q_PI));
// divide by (# of samples * pdf)
// see: http://www.scratchapixel.com/lessons/3d-basic-rendering/global-illumination-path-tracing/global-illumination-path-tracing-practical-implementation
VectorScale(indirect, 1.0 / numsamples, indirect);
VectorScale(indirect, 1.0 / (numsamples * pdf), indirect);
VectorCopy(indirect, colorout);
}