OSL trace to gather information on second hit


Julius Ihle
 

Hi,

I'm trying to create a mask of everything after the first hit using `trace`. The way I was thinking of going about this is to do another trace call after the initial hit based on its P. I'm kind of getting the result I am after, however everything is really grainy and I cannot really wrap my head around as to why that is.

I'm using the following code:

```

int hit = trace(P, I);

if (hit)

{

point PP;

getmessage("trace", "P", PP);

int tt = trace(PP, I);

out = tt;

}

```

Which gives me this result:

I'm basically looking for exactly this result minus all the noise, which I'm not really sure why it's happening :) My approach is probably not the proper way to go about this.

Any help would be greatly appreciated!

Thanks, Julius


Anders Langlands
 

Have you tried adding ray offset to the second trace call? ie something like:

int tt = trace(PP + I * 1e-3, I);

On Sun, 18 Sep 2022 at 07:28, Julius Ihle <julius.ihle@...> wrote:

Hi,

I'm trying to create a mask of everything after the first hit using `trace`. The way I was thinking of going about this is to do another trace call after the initial hit based on its P. I'm kind of getting the result I am after, however everything is really grainy and I cannot really wrap my head around as to why that is.

I'm using the following code:

```

int hit = trace(P, I);

if (hit)

{

point PP;

getmessage("trace", "P", PP);

int tt = trace(PP, I);

out = tt;

}

```

Which gives me this result:

I'm basically looking for exactly this result minus all the noise, which I'm not really sure why it's happening :) My approach is probably not the proper way to go about this.

Any help would be greatly appreciated!

Thanks, Julius


Julius Ihle
 

Hey Anders,

Thanks so much for the quick answer! I indeed didn't think of this earlier hehe. That did the trick just perfectly!

Many thanks,
Julius

On 9/17/22 21:56, Anders Langlands wrote:

Have you tried adding ray offset to the second trace call? ie something like:

int tt = trace(PP + I * 1e-3, I);

On Sun, 18 Sep 2022 at 07:28, Julius Ihle <julius.ihle@...> wrote:

Hi,

I'm trying to create a mask of everything after the first hit using `trace`. The way I was thinking of going about this is to do another trace call after the initial hit based on its P. I'm kind of getting the result I am after, however everything is really grainy and I cannot really wrap my head around as to why that is.

I'm using the following code:

```

int hit = trace(P, I);

if (hit)

{

point PP;

getmessage("trace", "P", PP);

int tt = trace(PP, I);

out = tt;

}

```

Which gives me this result:

I'm basically looking for exactly this result minus all the noise, which I'm not really sure why it's happening :) My approach is probably not the proper way to go about this.

Any help would be greatly appreciated!

Thanks, Julius