|
 |
On 10/10/25 16:03, William F Pokorny wrote:
> I'm loosely following your sor updates - good work. I'll try and carve
> out some time to code up your suggested changes in my working yuqk code
> & do some testing.
OK. Looking specifically at these two suggestions:
1. replace
D = ray.Direction;
with
D = <ray.Direction.x, 0, ray.Direction.z>;
and
2. replace
#if (r0 > Radius2)
with
#if (fabs(r0) > Radius2)
----
1) I cannot find 'D = ray.Direction;' in my yuqk code? Where and in what
version of source code are you seeing this?
2) Your fabs() suggestion looks like a win and I plan to adopt it for
release 20 of yuqk.
---
The benefits of (2) depend on:
a) how much void space there is between that outer cylinder and all the
inner per segment ones.
b) the alignment of rays with the bounding box used for global bounding.
I looked too at completely eliminating the initial cylinder bound test
as we already do cylinder bounding for each segment / interval.
Summarizing the performance changes for a bunch of testing.
------ Worst case bounding box alignment (cyl bound helps most)
56.03 -> 54.79s ---> -2.21% Old to New
55.70 -> 54.79s ---> -1.63% No_InitialCylTest to New
------ Best case bounding box alignment (cyl bound helps least)
43.99 -> 43.89s ---> -0.23% Old to New
44.47 -> 43.89s ---> -1.30% No_InitialCylTest to New
------ Turning global bounding completely off in yuqk with '-b'
100.72 -> 98.01s ---> -2.69% Old to New
98.44 -> 98.01s ---> -0.44% No_InitialCylTest to New (*)
(*) Where every ray sees the initial cylinder test (New) vs not, the
performance is less different due the expensive sqrt() starting to eat
the better in bounding benefit. The change is still a win because we're
not running without global bounding except in rare cases.
Bill P.
Post a reply to this message
|
 |