Skip to content

Commit 4927e45

Browse files
authored
Add optional buffers for ray triange hit index and GAS (#38)
* added optional buffers for returning ray triangle hit index and GAS index for multi-GAS
1 parent fd50870 commit 4927e45

8 files changed

Lines changed: 326 additions & 643 deletions

File tree

cuda/common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,6 @@ struct Params
5353
OptixTraversableHandle handle;
5454
Ray* rays;
5555
Hit* hits;
56+
int* primitive_ids; // Optional: triangle index per ray (-1 for miss)
57+
int* instance_ids; // Optional: geometry/instance index per ray (-1 for miss)
5658
};

cuda/kernel.cu

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ extern "C" __global__ void __raygen__main()
2323
const uint3 dim = optixGetLaunchDimensions();
2424
const uint64_t linear_idx = idx.z * dim.y * dim.x + idx.y * dim.x + idx.x;
2525

26-
unsigned int t, nx, ny, nz;
26+
unsigned int t, nx, ny, nz, prim_id, inst_id;
2727
Ray ray = params.rays[linear_idx];
2828
optixTrace(
2929
params.handle,
@@ -40,7 +40,9 @@ extern "C" __global__ void __raygen__main()
4040
t,
4141
nx,
4242
ny,
43-
nz
43+
nz,
44+
prim_id,
45+
inst_id
4446
);
4547

4648
Hit hit;
@@ -49,6 +51,14 @@ extern "C" __global__ void __raygen__main()
4951
hit.geom_normal.y = int_as_float( ny );
5052
hit.geom_normal.z = int_as_float( nz );
5153
params.hits[linear_idx] = hit;
54+
55+
// Write optional primitive and instance IDs
56+
if (params.primitive_ids != nullptr) {
57+
params.primitive_ids[linear_idx] = static_cast<int>(prim_id);
58+
}
59+
if (params.instance_ids != nullptr) {
60+
params.instance_ids[linear_idx] = static_cast<int>(inst_id);
61+
}
5262
}
5363

5464

@@ -58,6 +68,8 @@ extern "C" __global__ void __miss__miss()
5868
optixSetPayload_1( float_as_int( 1.0f ) );
5969
optixSetPayload_2( float_as_int( 0.0f ) );
6070
optixSetPayload_3( float_as_int( 0.0f ) );
71+
optixSetPayload_4( static_cast<unsigned int>(-1) ); // primitive_id = -1 for miss
72+
optixSetPayload_5( static_cast<unsigned int>(-1) ); // instance_id = -1 for miss
6173
}
6274

6375

@@ -99,4 +111,6 @@ extern "C" __global__ void __closesthit__chit()
99111
optixSetPayload_1(float_as_int(n.x));
100112
optixSetPayload_2(float_as_int(n.y));
101113
optixSetPayload_3(float_as_int(n.z));
114+
optixSetPayload_4(primIdx); // primitive/triangle index
115+
optixSetPayload_5(optixGetInstanceId()); // instance/geometry index
102116
}

examples/cuda_utils.py

Lines changed: 0 additions & 47 deletions
This file was deleted.

examples/hillshade.py

Lines changed: 0 additions & 228 deletions
This file was deleted.

0 commit comments

Comments
 (0)