|
|
On 1/26/22 09:01, William F Pokorny wrote:
> ...So what's going on.
Well, after digging for a chunk of day, the non-fuzzy result comes from
a "bug fix" made back in 1998 by Nathan Kopp & CEY in the
Trace::ComputeReflection() function of trace.cpp.
Basically after the calculation of the reflected ray direction using the
perturbed normal, they added second dot test of that perturbed reflected
ray with the raw surface normal.
If the perturbed reflected ray was heading in a direction opposite the
the raw surface normal it triggers some code which does one of two kinds
of correction...
Where the perturbed ray direction is opposite the perturbed normal
direction it simply drops back to reflection rays based on the raw
normal. This is where we suddenly get non-normal-perturbed
reflections...
Otherwise, it pulls the perturbed reflected ray more into alignment with
the raw surface normal by an amount based upon a negative weighting
factor and the magnitude of the dot product of the perturb ray direction
with the raw normal to some degree being stronger up to a cut off set by
the initial test with the perturbed normal(a).
After all the fix up the reflected ray direction is normalized - which
is the expected ray direction state.
Ah, what to do... Thoughts anyone? I'm going to have to think about this.
I don't like that we are basically ignoring perturbed results to some
degree or another - for reflections - beyond certain normal
perturbations point.
With very rough surfaces - think pile of stones - a reasonable
expectation would be to get some degree of all internal reflections. A
darkening due reflections bouncing until they die off inside the surface
structure. This feels like a more correct result to me.
Guess I need to check whether this bug fix is getting done with
refraction too...
Bill P.
(a) - Yep, this second fix/pull toward the raw surface normal might not
always set in a non-opposing direction with the raw surface normal.
(a) Yes, I think this is going to also create some extra
fuzz/inaccuracies for fresnel effects at glancing angles at near
tangents to a surface. There, with certain rougher surfaces, we should
see around the complete 'larger-overall' tangent some.
Post a reply to this message
|
|