Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Intel Community
- Software
- Visual Computing (Graphics and Gaming)
- Intel® Embree Ray Tracing Kernels
- user geometry intersection routine

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

AndrewC

New Contributor I

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

01-10-2018
02:35 PM

115 Views

user geometry intersection routine

Following from the "user_geometry" example. I am mixing analytical spheres and triangulated geometry.

The sphere intersection function has a signature of void sphereIntersectFunc(void* spheres_i, RTCRay& ray, size_t item);

My algorithm simply sets up the rays, loops over them and calls

rtcIntersect(rtcscene, rtc_ray*);*

In the "user defined intersection" function for the sphere(s). I notice in the *passed *RTCRay structure two things that I find a bit confusing.

- the tnear and tfar values are not 0.0 and inf as I would expect. They are often a "segment" of the ray. I can understand this may be an optimization based on a geometry space subdivision. It appears I should restrict any intersection to only be within the passed tnear and tfar.

- the RTCRay structure sometimes also contains a geomID == the triangulated geometry ID. That is, the ray seems to already have intersected some part of the triangulated geometry before being passed to the "sphere" intersection routine. I really don't understand this. I would expect that once a ray has intersected a geometry, it would return immediately from rtcIntersect.

1 Solution

SvenW_Intel

Moderator

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

01-16-2018
11:46 PM

115 Views

1) In the user geometry callback the tnear value will always be identical to the tnear initially passed to the ray, but the tfar value will shrink when hits get found. Reason is that rtcIntersect is interested in the closest hit only, and the current closest distance is recorded as ray.tfar.

2) rtcIntersect returns the closest intersection, thus even if it already found an intersection with a triangle, intersections with your sphere might still be closer than this current closest hit. This is why you see triangle hit data inside the ray. However, you should never read that hit data, your callback should just update the hit data (and tfar) when a closer hit is found.

Link Copied

2 Replies

SvenW_Intel

Moderator

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

01-16-2018
11:46 PM

116 Views

1) In the user geometry callback the tnear value will always be identical to the tnear initially passed to the ray, but the tfar value will shrink when hits get found. Reason is that rtcIntersect is interested in the closest hit only, and the current closest distance is recorded as ray.tfar.

2) rtcIntersect returns the closest intersection, thus even if it already found an intersection with a triangle, intersections with your sphere might still be closer than this current closest hit. This is why you see triangle hit data inside the ray. However, you should never read that hit data, your callback should just update the hit data (and tfar) when a closer hit is found.

AndrewC

New Contributor I

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

01-17-2018
08:16 AM

115 Views

OK , thanks for clarifying!

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

For more complete information about compiler optimizations, see our Optimization Notice.