43 RT_CHECK_ERROR(rtContextCreate(&OptiX_Context));
44 RT_CHECK_ERROR(rtContextSetPrintEnabled(OptiX_Context, 1));
47 RT_CHECK_ERROR(rtContextSetRayTypeCount(OptiX_Context, 4));
50 RT_CHECK_ERROR(rtContextSetEntryPointCount(OptiX_Context, 4));
54 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"direct_ray_type", &direct_ray_type_RTvariable));
55 RT_CHECK_ERROR(rtVariableSet1ui(direct_ray_type_RTvariable, RAYTYPE_DIRECT));
56 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"diffuse_ray_type", &diffuse_ray_type_RTvariable));
57 RT_CHECK_ERROR(rtVariableSet1ui(diffuse_ray_type_RTvariable, RAYTYPE_DIFFUSE));
58 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_ray_type", &camera_ray_type_RTvariable));
59 RT_CHECK_ERROR(rtVariableSet1ui(camera_ray_type_RTvariable, RAYTYPE_CAMERA));
60 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"pixel_label_ray_type", &pixel_label_ray_type_RTvariable));
61 RT_CHECK_ERROR(rtVariableSet1ui(pixel_label_ray_type_RTvariable, RAYTYPE_PIXEL_LABEL));
65 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, ptx_path.c_str(),
"direct_raygen", &direct_raygen));
66 RT_CHECK_ERROR(rtContextSetRayGenerationProgram(OptiX_Context, RAYTYPE_DIRECT, direct_raygen));
67 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, ptx_path.c_str(),
"diffuse_raygen", &diffuse_raygen));
68 RT_CHECK_ERROR(rtContextSetRayGenerationProgram(OptiX_Context, RAYTYPE_DIFFUSE, diffuse_raygen));
69 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, ptx_path.c_str(),
"camera_raygen", &camera_raygen));
70 RT_CHECK_ERROR(rtContextSetRayGenerationProgram(OptiX_Context, RAYTYPE_CAMERA, camera_raygen));
71 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, ptx_path.c_str(),
"pixel_label_raygen", &pixel_label_raygen));
72 RT_CHECK_ERROR(rtContextSetRayGenerationProgram(OptiX_Context, RAYTYPE_PIXEL_LABEL, pixel_label_raygen));
76 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"closest_hit_direct", &closest_hit_direct));
77 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"closest_hit_diffuse", &closest_hit_diffuse));
78 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"closest_hit_camera", &closest_hit_camera));
79 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"closest_hit_pixel_label", &closest_hit_pixel_label));
80 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"miss_direct", &miss_direct));
81 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"miss_diffuse", &miss_diffuse));
82 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"miss_camera", &miss_camera));
85 RT_CHECK_ERROR(rtContextSetMissProgram(OptiX_Context, RAYTYPE_DIRECT, miss_direct));
86 RT_CHECK_ERROR(rtContextSetMissProgram(OptiX_Context, RAYTYPE_DIFFUSE, miss_diffuse));
87 RT_CHECK_ERROR(rtContextSetMissProgram(OptiX_Context, RAYTYPE_CAMERA, miss_camera));
90 std::string intersect_ptx_path =
helios::resolvePluginAsset(
"radiation",
"cuda_compile_ptx_generated_primitiveIntersection.cu.ptx").string();
93 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"rectangle_intersect", &rectangle_intersect));
94 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"rectangle_bounds", &rectangle_bounds));
97 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"triangle_intersect", &triangle_intersect));
98 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"triangle_bounds", &triangle_bounds));
101 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"disk_intersect", &disk_intersect));
102 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"disk_bounds", &disk_bounds));
105 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"tile_intersect", &tile_intersect));
106 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"tile_bounds", &tile_bounds));
109 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"voxel_intersect", &voxel_intersect));
110 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"voxel_bounds", &voxel_bounds));
112 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"bbox_intersect", &bbox_intersect));
113 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"bbox_bounds", &bbox_bounds));
118 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &patch_geometry));
119 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(patch_geometry, rectangle_bounds));
120 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(patch_geometry, rectangle_intersect));
123 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &triangle_geometry));
124 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(triangle_geometry, triangle_bounds));
125 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(triangle_geometry, triangle_intersect));
128 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &disk_geometry));
129 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(disk_geometry, disk_bounds));
130 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(disk_geometry, disk_intersect));
133 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &tile_geometry));
134 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(tile_geometry, tile_bounds));
135 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(tile_geometry, tile_intersect));
138 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &voxel_geometry));
139 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(voxel_geometry, voxel_bounds));
140 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(voxel_geometry, voxel_intersect));
143 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &bbox_geometry));
144 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(bbox_geometry, bbox_bounds));
145 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(bbox_geometry, bbox_intersect));
150 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &patch_material));
151 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_DIRECT, closest_hit_direct));
152 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
153 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_CAMERA, closest_hit_camera));
154 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
157 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &triangle_material));
158 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_DIRECT, closest_hit_direct));
159 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
160 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_CAMERA, closest_hit_camera));
161 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
164 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &disk_material));
165 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_DIRECT, closest_hit_direct));
166 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
167 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_CAMERA, closest_hit_camera));
168 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
171 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &tile_material));
172 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_DIRECT, closest_hit_direct));
173 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
174 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_CAMERA, closest_hit_camera));
175 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
178 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &voxel_material));
179 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_DIRECT, closest_hit_direct));
180 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
181 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_CAMERA, closest_hit_camera));
182 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
185 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &bbox_material));
186 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_DIRECT, closest_hit_direct));
187 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
188 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_CAMERA, closest_hit_camera));
189 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
194 RT_CHECK_ERROR(rtGroupCreate(OptiX_Context, &top_level_group));
195 RT_CHECK_ERROR(rtGroupSetChildCount(top_level_group, 1));
198 RT_CHECK_ERROR(rtAccelerationCreate(OptiX_Context, &top_level_acceleration));
199 RT_CHECK_ERROR(rtAccelerationSetBuilder(top_level_acceleration,
"NoAccel"));
200 RT_CHECK_ERROR(rtAccelerationSetTraverser(top_level_acceleration,
"NoAccel"));
201 RT_CHECK_ERROR(rtGroupSetAcceleration(top_level_group, top_level_acceleration));
202 RT_CHECK_ERROR(rtAccelerationMarkDirty(top_level_acceleration));
205 RT_CHECK_ERROR(rtTransformCreate(OptiX_Context, &transform));
206 float identity[16] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
207 RT_CHECK_ERROR(rtTransformSetMatrix(transform, 0, identity,
nullptr));
208 RT_CHECK_ERROR(rtGroupSetChild(top_level_group, 0, transform));
211 RT_CHECK_ERROR(rtGeometryGroupCreate(OptiX_Context, &base_geometry_group));
212 RT_CHECK_ERROR(rtGeometryGroupSetChildCount(base_geometry_group, 6));
213 RT_CHECK_ERROR(rtTransformSetChild(transform, base_geometry_group));
216 RT_CHECK_ERROR(rtAccelerationCreate(OptiX_Context, &base_acceleration));
217 RT_CHECK_ERROR(rtAccelerationSetBuilder(base_acceleration,
"Trbvh"));
218 RT_CHECK_ERROR(rtAccelerationSetTraverser(base_acceleration,
"Bvh"));
219 RT_CHECK_ERROR(rtGeometryGroupSetAcceleration(base_geometry_group, base_acceleration));
220 RT_CHECK_ERROR(rtAccelerationMarkDirty(base_acceleration));
223 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &patch_geometryinstance));
224 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(patch_geometryinstance, patch_geometry));
225 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(patch_geometryinstance, 1));
226 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(patch_geometryinstance, 0, patch_material));
227 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 0, patch_geometryinstance));
229 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &triangle_geometryinstance));
230 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(triangle_geometryinstance, triangle_geometry));
231 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(triangle_geometryinstance, 1));
232 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(triangle_geometryinstance, 0, triangle_material));
233 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 1, triangle_geometryinstance));
235 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &disk_geometryinstance));
236 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(disk_geometryinstance, disk_geometry));
237 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(disk_geometryinstance, 1));
238 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(disk_geometryinstance, 0, disk_material));
239 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 2, disk_geometryinstance));
241 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &tile_geometryinstance));
242 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(tile_geometryinstance, tile_geometry));
243 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(tile_geometryinstance, 1));
244 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(tile_geometryinstance, 0, tile_material));
245 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 3, tile_geometryinstance));
247 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &voxel_geometryinstance));
248 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(voxel_geometryinstance, voxel_geometry));
249 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(voxel_geometryinstance, 1));
250 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(voxel_geometryinstance, 0, voxel_material));
251 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 4, voxel_geometryinstance));
253 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &bbox_geometryinstance));
254 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(bbox_geometryinstance, bbox_geometry));
255 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(bbox_geometryinstance, 1));
256 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(bbox_geometryinstance, 0, bbox_material));
257 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 5, bbox_geometryinstance));
260 RTvariable top_object;
261 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"top_object", &top_object));
262 RT_CHECK_ERROR(rtVariableSetObject(top_object, top_level_group));
267 addBuffer(
"patch_vertices", patch_vertices_RTbuffer, patch_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
268 addBuffer(
"triangle_vertices", triangle_vertices_RTbuffer, triangle_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
269 addBuffer(
"disk_centers", disk_centers_RTbuffer, disk_centers_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
270 addBuffer(
"disk_radii", disk_radii_RTbuffer, disk_radii_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
271 addBuffer(
"disk_normals", disk_normals_RTbuffer, disk_normals_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
272 addBuffer(
"tile_vertices", tile_vertices_RTbuffer, tile_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
273 addBuffer(
"voxel_vertices", voxel_vertices_RTbuffer, voxel_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
274 addBuffer(
"bbox_vertices", bbox_vertices_RTbuffer, bbox_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
277 addBuffer(
"transform_matrix", transform_matrix_RTbuffer, transform_matrix_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 2);
278 addBuffer(
"primitive_type", primitive_type_RTbuffer, primitive_type_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
279 addBuffer(
"primitive_solid_fraction", primitive_solid_fraction_RTbuffer, primitive_solid_fraction_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
280 addBuffer(
"twosided_flag", twosided_flag_RTbuffer, twosided_flag_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_BYTE, 1);
283 addBuffer(
"patch_UUID", patch_UUID_RTbuffer, patch_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
284 addBuffer(
"triangle_UUID", triangle_UUID_RTbuffer, triangle_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
285 addBuffer(
"disk_UUID", disk_UUID_RTbuffer, disk_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
286 addBuffer(
"tile_UUID", tile_UUID_RTbuffer, tile_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
287 addBuffer(
"voxel_UUID", voxel_UUID_RTbuffer, voxel_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
288 addBuffer(
"bbox_UUID", bbox_UUID_RTbuffer, bbox_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
291 addBuffer(
"objectID", objectID_RTbuffer, objectID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
292 addBuffer(
"primitiveID", primitiveID_RTbuffer, primitiveID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
293 addBuffer(
"primitive_positions", primitive_positions_RTbuffer, primitive_positions_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
294 addBuffer(
"object_subdivisions", object_subdivisions_RTbuffer, object_subdivisions_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT2, 1);
297 addBuffer(
"rho", rho_RTbuffer, rho_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
298 addBuffer(
"tau", tau_RTbuffer, tau_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
299 addBuffer(
"rho_cam", rho_cam_RTbuffer, rho_cam_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
300 addBuffer(
"tau_cam", tau_cam_RTbuffer, tau_cam_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
301 addBuffer(
"specular_exponent", specular_exponent_RTbuffer, specular_exponent_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
302 addBuffer(
"specular_scale", specular_scale_RTbuffer, specular_scale_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
305 addBuffer(
"radiation_in", radiation_in_RTbuffer, radiation_in_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
306 addBuffer(
"radiation_out_top", radiation_out_top_RTbuffer, radiation_out_top_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
307 addBuffer(
"radiation_out_bottom", radiation_out_bottom_RTbuffer, radiation_out_bottom_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
308 addBuffer(
"radiation_in_camera", radiation_in_camera_RTbuffer, radiation_in_camera_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
309 addBuffer(
"camera_pixel_label", camera_pixel_label_RTbuffer, camera_pixel_label_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_UNSIGNED_INT, 1);
310 addBuffer(
"camera_pixel_depth", camera_pixel_depth_RTbuffer, camera_pixel_depth_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
311 addBuffer(
"scatter_buff_top", scatter_buff_top_RTbuffer, scatter_buff_top_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
312 addBuffer(
"scatter_buff_bottom", scatter_buff_bottom_RTbuffer, scatter_buff_bottom_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
313 addBuffer(
"radiation_specular", radiation_specular_RTbuffer, radiation_specular_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
314 addBuffer(
"Rsky", Rsky_RTbuffer, Rsky_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
315 addBuffer(
"scatter_buff_top_cam", scatter_buff_top_cam_RTbuffer, scatter_buff_top_cam_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
316 addBuffer(
"scatter_buff_bottom_cam", scatter_buff_bottom_cam_RTbuffer, scatter_buff_bottom_cam_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
319 addBuffer(
"source_positions", source_positions_RTbuffer, source_positions_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
320 addBuffer(
"source_widths", source_widths_RTbuffer, source_widths_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT2, 1);
321 addBuffer(
"source_rotations", source_rotations_RTbuffer, source_rotations_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
322 addBuffer(
"source_types", source_types_RTbuffer, source_types_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
323 addBuffer(
"source_fluxes", source_fluxes_RTbuffer, source_fluxes_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
324 addBuffer(
"source_fluxes_cam", source_fluxes_cam_RTbuffer, source_fluxes_cam_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
327 addBuffer(
"diffuse_flux", diffuse_flux_RTbuffer, diffuse_flux_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
328 addBuffer(
"diffuse_extinction", diffuse_extinction_RTbuffer, diffuse_extinction_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
329 addBuffer(
"diffuse_peak_dir", diffuse_peak_dir_RTbuffer, diffuse_peak_dir_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
330 addBuffer(
"diffuse_dist_norm", diffuse_dist_norm_RTbuffer, diffuse_dist_norm_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
333 addBuffer(
"sky_radiance_params", sky_radiance_params_RTbuffer, sky_radiance_params_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT4, 1);
334 addBuffer(
"camera_sky_radiance", camera_sky_radiance_RTbuffer, camera_sky_radiance_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
335 addBuffer(
"solar_disk_radiance", solar_disk_radiance_RTbuffer, solar_disk_radiance_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
338 addBuffer(
"band_launch_flag", band_launch_flag_RTbuffer, band_launch_flag_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_BYTE, 1);
339 addBuffer(
"max_scatters", max_scatters_RTbuffer, max_scatters_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
342 addBuffer(
"masksize", masksize_RTbuffer, masksize_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT2, 1);
343 addBuffer(
"maskID", maskID_RTbuffer, maskID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT, 1);
344 addBuffer(
"uvdata", uvdata_RTbuffer, uvdata_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT2, 2);
345 addBuffer(
"uvID", uvID_RTbuffer, uvID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT, 1);
348 RT_CHECK_ERROR(rtBufferCreate(OptiX_Context, RT_BUFFER_INPUT, &maskdata_RTbuffer));
349 RT_CHECK_ERROR(rtBufferSetFormat(maskdata_RTbuffer, RT_FORMAT_BYTE));
350 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"maskdata", &maskdata_RTvariable));
351 RT_CHECK_ERROR(rtVariableSetObject(maskdata_RTvariable, maskdata_RTbuffer));
352 std::vector<std::vector<std::vector<bool>>> dummydata;
353 initializeBuffer3Dbool(maskdata_RTbuffer, dummydata);
356 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nprimitives", &Nprimitives_RTvariable));
357 RT_CHECK_ERROR(rtVariableSet1ui(Nprimitives_RTvariable, 0));
359 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"bbox_UUID_base", &bbox_UUID_base_RTvariable));
360 RT_CHECK_ERROR(rtVariableSet1ui(bbox_UUID_base_RTvariable, UINT_MAX));
362 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nsources", &Nsources_RTvariable));
363 RT_CHECK_ERROR(rtVariableSet1ui(Nsources_RTvariable, 0));
365 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nbands_global", &Nbands_global_RTvariable));
366 RT_CHECK_ERROR(rtVariableSet1ui(Nbands_global_RTvariable, 0));
368 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nbands_launch", &Nbands_launch_RTvariable));
369 RT_CHECK_ERROR(rtVariableSet1ui(Nbands_launch_RTvariable, 0));
371 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Ncameras", &Ncameras_RTvariable));
372 RT_CHECK_ERROR(rtVariableSet1ui(Ncameras_RTvariable, 0));
374 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"periodic_flag", &periodic_flag_RTvariable));
375 RT_CHECK_ERROR(rtVariableSet2f(periodic_flag_RTvariable, 0.f, 0.f));
377 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"specular_reflection_enabled", &specular_reflection_enabled_RTvariable));
378 RT_CHECK_ERROR(rtVariableSet1ui(specular_reflection_enabled_RTvariable, 0));
380 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"scattering_iteration", &scattering_iteration_RTvariable));
381 RT_CHECK_ERROR(rtVariableSet1ui(scattering_iteration_RTvariable, 0));
384 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"random_seed", &random_seed_RTvariable));
385 RT_CHECK_ERROR(rtVariableSet1ui(random_seed_RTvariable, std::chrono::system_clock::now().time_since_epoch().count()));
387 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"launch_offset", &launch_offset_RTvariable));
388 RT_CHECK_ERROR(rtVariableSet1ui(launch_offset_RTvariable, 0));
390 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"launch_face", &launch_face_RTvariable));
391 RT_CHECK_ERROR(rtVariableSet1ui(launch_face_RTvariable, 0));
394 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_position", &camera_position_RTvariable));
395 RT_CHECK_ERROR(rtVariableSet3f(camera_position_RTvariable, 0.f, 0.f, 0.f));
397 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_direction", &camera_direction_RTvariable));
398 RT_CHECK_ERROR(rtVariableSet2f(camera_direction_RTvariable, 0.f, 0.f));
400 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_lens_diameter", &camera_lens_diameter_RTvariable));
401 RT_CHECK_ERROR(rtVariableSet1f(camera_lens_diameter_RTvariable, 0.f));
403 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"FOV_aspect_ratio", &FOV_aspect_ratio_RTvariable));
404 RT_CHECK_ERROR(rtVariableSet1f(FOV_aspect_ratio_RTvariable, 1.f));
406 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_HFOV", &camera_HFOV_RTvariable));
407 RT_CHECK_ERROR(rtVariableSet1f(camera_HFOV_RTvariable, 0.f));
409 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_focal_length", &camera_focal_length_RTvariable));
410 RT_CHECK_ERROR(rtVariableSet1f(camera_focal_length_RTvariable, 0.f));
412 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_viewplane_length", &camera_viewplane_length_RTvariable));
413 RT_CHECK_ERROR(rtVariableSet1f(camera_viewplane_length_RTvariable, 0.f));
415 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_pixel_solid_angle", &camera_pixel_solid_angle_RTvariable));
416 RT_CHECK_ERROR(rtVariableSet1f(camera_pixel_solid_angle_RTvariable, 0.f));
418 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_pixel_offset_x", &camera_pixel_offset_x_RTvariable));
419 RT_CHECK_ERROR(rtVariableSet1ui(camera_pixel_offset_x_RTvariable, 0));
421 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_pixel_offset_y", &camera_pixel_offset_y_RTvariable));
422 RT_CHECK_ERROR(rtVariableSet1ui(camera_pixel_offset_y_RTvariable, 0));
424 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_ID", &camera_ID_RTvariable));
425 RT_CHECK_ERROR(rtVariableSet1ui(camera_ID_RTvariable, 0));
427 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_resolution_full", &camera_resolution_full_RTvariable));
428 RT_CHECK_ERROR(rtVariableSet2i(camera_resolution_full_RTvariable, 0, 0));
431 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"sun_direction", &sun_direction_RTvariable));
432 RT_CHECK_ERROR(rtVariableSet3f(sun_direction_RTvariable, 0.f, 0.f, 1.f));
434 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"solar_disk_cos_angle", &solar_disk_cos_angle_RTvariable));
435 RT_CHECK_ERROR(rtVariableSet1f(solar_disk_cos_angle_RTvariable, 0.f));
437 is_initialized =
true;