61 RT_CHECK_ERROR(rtContextCreate(&OptiX_Context));
62 RT_CHECK_ERROR(rtContextSetPrintEnabled(OptiX_Context, 1));
65 RT_CHECK_ERROR(rtContextSetRayTypeCount(OptiX_Context, 4));
68 RT_CHECK_ERROR(rtContextSetEntryPointCount(OptiX_Context, 4));
72 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"direct_ray_type", &direct_ray_type_RTvariable));
73 RT_CHECK_ERROR(rtVariableSet1ui(direct_ray_type_RTvariable, RAYTYPE_DIRECT));
74 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"diffuse_ray_type", &diffuse_ray_type_RTvariable));
75 RT_CHECK_ERROR(rtVariableSet1ui(diffuse_ray_type_RTvariable, RAYTYPE_DIFFUSE));
76 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_ray_type", &camera_ray_type_RTvariable));
77 RT_CHECK_ERROR(rtVariableSet1ui(camera_ray_type_RTvariable, RAYTYPE_CAMERA));
78 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"pixel_label_ray_type", &pixel_label_ray_type_RTvariable));
79 RT_CHECK_ERROR(rtVariableSet1ui(pixel_label_ray_type_RTvariable, RAYTYPE_PIXEL_LABEL));
83 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, ptx_path.c_str(),
"direct_raygen", &direct_raygen));
84 RT_CHECK_ERROR(rtContextSetRayGenerationProgram(OptiX_Context, RAYTYPE_DIRECT, direct_raygen));
85 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, ptx_path.c_str(),
"diffuse_raygen", &diffuse_raygen));
86 RT_CHECK_ERROR(rtContextSetRayGenerationProgram(OptiX_Context, RAYTYPE_DIFFUSE, diffuse_raygen));
87 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, ptx_path.c_str(),
"camera_raygen", &camera_raygen));
88 RT_CHECK_ERROR(rtContextSetRayGenerationProgram(OptiX_Context, RAYTYPE_CAMERA, camera_raygen));
89 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, ptx_path.c_str(),
"pixel_label_raygen", &pixel_label_raygen));
90 RT_CHECK_ERROR(rtContextSetRayGenerationProgram(OptiX_Context, RAYTYPE_PIXEL_LABEL, pixel_label_raygen));
94 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"closest_hit_direct", &closest_hit_direct));
95 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"closest_hit_diffuse", &closest_hit_diffuse));
96 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"closest_hit_camera", &closest_hit_camera));
97 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"closest_hit_pixel_label", &closest_hit_pixel_label));
98 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"miss_direct", &miss_direct));
99 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"miss_diffuse", &miss_diffuse));
100 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"miss_camera", &miss_camera));
102 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"any_hit_direct", &any_hit_direct));
103 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, hit_ptx_path.c_str(),
"any_hit_diffuse", &any_hit_diffuse));
106 RT_CHECK_ERROR(rtContextSetMissProgram(OptiX_Context, RAYTYPE_DIRECT, miss_direct));
107 RT_CHECK_ERROR(rtContextSetMissProgram(OptiX_Context, RAYTYPE_DIFFUSE, miss_diffuse));
108 RT_CHECK_ERROR(rtContextSetMissProgram(OptiX_Context, RAYTYPE_CAMERA, miss_camera));
111 std::string intersect_ptx_path =
helios::resolvePluginAsset(
"radiation",
"cuda_compile_ptx_generated_primitiveIntersection.cu.ptx").string();
114 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"rectangle_intersect", &rectangle_intersect));
115 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"rectangle_bounds", &rectangle_bounds));
118 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"triangle_intersect", &triangle_intersect));
119 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"triangle_bounds", &triangle_bounds));
122 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"disk_intersect", &disk_intersect));
123 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"disk_bounds", &disk_bounds));
126 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"tile_intersect", &tile_intersect));
127 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"tile_bounds", &tile_bounds));
130 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"voxel_intersect", &voxel_intersect));
131 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"voxel_bounds", &voxel_bounds));
133 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"bbox_intersect", &bbox_intersect));
134 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"bbox_bounds", &bbox_bounds));
139 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &patch_geometry));
140 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(patch_geometry, rectangle_bounds));
141 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(patch_geometry, rectangle_intersect));
144 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &triangle_geometry));
145 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(triangle_geometry, triangle_bounds));
146 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(triangle_geometry, triangle_intersect));
149 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &disk_geometry));
150 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(disk_geometry, disk_bounds));
151 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(disk_geometry, disk_intersect));
154 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &tile_geometry));
155 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(tile_geometry, tile_bounds));
156 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(tile_geometry, tile_intersect));
159 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &voxel_geometry));
160 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(voxel_geometry, voxel_bounds));
161 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(voxel_geometry, voxel_intersect));
164 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &bbox_geometry));
165 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(bbox_geometry, bbox_bounds));
166 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(bbox_geometry, bbox_intersect));
171 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &patch_material));
172 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_DIRECT, closest_hit_direct));
173 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
174 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_CAMERA, closest_hit_camera));
175 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
177 RT_CHECK_ERROR(rtMaterialSetAnyHitProgram(patch_material, RAYTYPE_DIRECT, any_hit_direct));
178 RT_CHECK_ERROR(rtMaterialSetAnyHitProgram(patch_material, RAYTYPE_DIFFUSE, any_hit_diffuse));
181 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &triangle_material));
182 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_DIRECT, closest_hit_direct));
183 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
184 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_CAMERA, closest_hit_camera));
185 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
186 RT_CHECK_ERROR(rtMaterialSetAnyHitProgram(triangle_material, RAYTYPE_DIRECT, any_hit_direct));
187 RT_CHECK_ERROR(rtMaterialSetAnyHitProgram(triangle_material, RAYTYPE_DIFFUSE, any_hit_diffuse));
190 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &disk_material));
191 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_DIRECT, closest_hit_direct));
192 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
193 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_CAMERA, closest_hit_camera));
194 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
195 RT_CHECK_ERROR(rtMaterialSetAnyHitProgram(disk_material, RAYTYPE_DIRECT, any_hit_direct));
196 RT_CHECK_ERROR(rtMaterialSetAnyHitProgram(disk_material, RAYTYPE_DIFFUSE, any_hit_diffuse));
199 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &tile_material));
200 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_DIRECT, closest_hit_direct));
201 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
202 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_CAMERA, closest_hit_camera));
203 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
204 RT_CHECK_ERROR(rtMaterialSetAnyHitProgram(tile_material, RAYTYPE_DIRECT, any_hit_direct));
205 RT_CHECK_ERROR(rtMaterialSetAnyHitProgram(tile_material, RAYTYPE_DIFFUSE, any_hit_diffuse));
208 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &voxel_material));
209 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_DIRECT, closest_hit_direct));
210 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
211 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_CAMERA, closest_hit_camera));
212 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
215 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &bbox_material));
216 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_DIRECT, closest_hit_direct));
217 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
218 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_CAMERA, closest_hit_camera));
219 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
224 RT_CHECK_ERROR(rtGroupCreate(OptiX_Context, &top_level_group));
225 RT_CHECK_ERROR(rtGroupSetChildCount(top_level_group, 1));
228 RT_CHECK_ERROR(rtAccelerationCreate(OptiX_Context, &top_level_acceleration));
229 RT_CHECK_ERROR(rtAccelerationSetBuilder(top_level_acceleration,
"NoAccel"));
230 RT_CHECK_ERROR(rtAccelerationSetTraverser(top_level_acceleration,
"NoAccel"));
231 RT_CHECK_ERROR(rtGroupSetAcceleration(top_level_group, top_level_acceleration));
232 RT_CHECK_ERROR(rtAccelerationMarkDirty(top_level_acceleration));
235 RT_CHECK_ERROR(rtTransformCreate(OptiX_Context, &transform));
236 float identity[16] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
237 RT_CHECK_ERROR(rtTransformSetMatrix(transform, 0, identity,
nullptr));
238 RT_CHECK_ERROR(rtGroupSetChild(top_level_group, 0, transform));
241 RT_CHECK_ERROR(rtGeometryGroupCreate(OptiX_Context, &base_geometry_group));
242 RT_CHECK_ERROR(rtGeometryGroupSetChildCount(base_geometry_group, 6));
243 RT_CHECK_ERROR(rtTransformSetChild(transform, base_geometry_group));
246 RT_CHECK_ERROR(rtAccelerationCreate(OptiX_Context, &base_acceleration));
247 RT_CHECK_ERROR(rtAccelerationSetBuilder(base_acceleration,
"Trbvh"));
248 RT_CHECK_ERROR(rtAccelerationSetTraverser(base_acceleration,
"Bvh"));
249 RT_CHECK_ERROR(rtGeometryGroupSetAcceleration(base_geometry_group, base_acceleration));
250 RT_CHECK_ERROR(rtAccelerationMarkDirty(base_acceleration));
253 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &patch_geometryinstance));
254 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(patch_geometryinstance, patch_geometry));
255 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(patch_geometryinstance, 1));
256 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(patch_geometryinstance, 0, patch_material));
257 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 0, patch_geometryinstance));
259 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &triangle_geometryinstance));
260 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(triangle_geometryinstance, triangle_geometry));
261 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(triangle_geometryinstance, 1));
262 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(triangle_geometryinstance, 0, triangle_material));
263 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 1, triangle_geometryinstance));
265 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &disk_geometryinstance));
266 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(disk_geometryinstance, disk_geometry));
267 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(disk_geometryinstance, 1));
268 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(disk_geometryinstance, 0, disk_material));
269 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 2, disk_geometryinstance));
271 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &tile_geometryinstance));
272 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(tile_geometryinstance, tile_geometry));
273 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(tile_geometryinstance, 1));
274 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(tile_geometryinstance, 0, tile_material));
275 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 3, tile_geometryinstance));
277 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &voxel_geometryinstance));
278 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(voxel_geometryinstance, voxel_geometry));
279 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(voxel_geometryinstance, 1));
280 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(voxel_geometryinstance, 0, voxel_material));
281 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 4, voxel_geometryinstance));
283 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &bbox_geometryinstance));
284 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(bbox_geometryinstance, bbox_geometry));
285 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(bbox_geometryinstance, 1));
286 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(bbox_geometryinstance, 0, bbox_material));
287 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 5, bbox_geometryinstance));
290 RTvariable top_object;
291 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"top_object", &top_object));
292 RT_CHECK_ERROR(rtVariableSetObject(top_object, top_level_group));
297 addBuffer(
"patch_vertices", patch_vertices_RTbuffer, patch_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
298 addBuffer(
"triangle_vertices", triangle_vertices_RTbuffer, triangle_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
299 addBuffer(
"disk_centers", disk_centers_RTbuffer, disk_centers_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
300 addBuffer(
"disk_radii", disk_radii_RTbuffer, disk_radii_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
301 addBuffer(
"disk_normals", disk_normals_RTbuffer, disk_normals_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
302 addBuffer(
"tile_vertices", tile_vertices_RTbuffer, tile_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
303 addBuffer(
"voxel_vertices", voxel_vertices_RTbuffer, voxel_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
304 addBuffer(
"bbox_vertices", bbox_vertices_RTbuffer, bbox_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
307 addBuffer(
"transform_matrix", transform_matrix_RTbuffer, transform_matrix_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 2);
308 addBuffer(
"primitive_type", primitive_type_RTbuffer, primitive_type_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
309 addBuffer(
"primitive_solid_fraction", primitive_solid_fraction_RTbuffer, primitive_solid_fraction_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
310 addBuffer(
"twosided_flag", twosided_flag_RTbuffer, twosided_flag_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_BYTE, 1);
313 addBuffer(
"patch_UUID", patch_UUID_RTbuffer, patch_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
314 addBuffer(
"triangle_UUID", triangle_UUID_RTbuffer, triangle_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
315 addBuffer(
"disk_UUID", disk_UUID_RTbuffer, disk_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
316 addBuffer(
"tile_UUID", tile_UUID_RTbuffer, tile_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
317 addBuffer(
"voxel_UUID", voxel_UUID_RTbuffer, voxel_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
318 addBuffer(
"bbox_UUID", bbox_UUID_RTbuffer, bbox_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
321 addBuffer(
"objectID", objectID_RTbuffer, objectID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
322 addBuffer(
"primitiveID", primitiveID_RTbuffer, primitiveID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
323 addBuffer(
"primitive_positions", primitive_positions_RTbuffer, primitive_positions_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
324 addBuffer(
"object_subdivisions", object_subdivisions_RTbuffer, object_subdivisions_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT2, 1);
327 addBuffer(
"rho", rho_RTbuffer, rho_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
328 addBuffer(
"tau", tau_RTbuffer, tau_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
329 addBuffer(
"rho_cam", rho_cam_RTbuffer, rho_cam_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
330 addBuffer(
"tau_cam", tau_cam_RTbuffer, tau_cam_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
331 addBuffer(
"specular_exponent", specular_exponent_RTbuffer, specular_exponent_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
332 addBuffer(
"specular_scale", specular_scale_RTbuffer, specular_scale_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
336 addBuffer(
"glass_n", glass_n_RTbuffer, glass_n_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
337 addBuffer(
"glass_KL", glass_KL_RTbuffer, glass_KL_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
338 addBuffer(
"is_glass", is_glass_RTbuffer, is_glass_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
340 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"glass_enabled", &glass_enabled_RTvariable));
341 RT_CHECK_ERROR(rtVariableSet1ui(glass_enabled_RTvariable, 0));
344 addBuffer(
"radiation_in", radiation_in_RTbuffer, radiation_in_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
345 addBuffer(
"radiation_out_top", radiation_out_top_RTbuffer, radiation_out_top_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
346 addBuffer(
"radiation_out_bottom", radiation_out_bottom_RTbuffer, radiation_out_bottom_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
347 addBuffer(
"radiation_in_camera", radiation_in_camera_RTbuffer, radiation_in_camera_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
348 addBuffer(
"camera_pixel_label", camera_pixel_label_RTbuffer, camera_pixel_label_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_UNSIGNED_INT, 1);
349 addBuffer(
"camera_pixel_depth", camera_pixel_depth_RTbuffer, camera_pixel_depth_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
350 addBuffer(
"scatter_buff_top", scatter_buff_top_RTbuffer, scatter_buff_top_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
351 addBuffer(
"scatter_buff_bottom", scatter_buff_bottom_RTbuffer, scatter_buff_bottom_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
352 addBuffer(
"radiation_specular", radiation_specular_RTbuffer, radiation_specular_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
353 addBuffer(
"Rsky", Rsky_RTbuffer, Rsky_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
354 addBuffer(
"scatter_buff_top_cam", scatter_buff_top_cam_RTbuffer, scatter_buff_top_cam_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
355 addBuffer(
"scatter_buff_bottom_cam", scatter_buff_bottom_cam_RTbuffer, scatter_buff_bottom_cam_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
358 addBuffer(
"source_positions", source_positions_RTbuffer, source_positions_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
359 addBuffer(
"source_widths", source_widths_RTbuffer, source_widths_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT2, 1);
360 addBuffer(
"source_rotations", source_rotations_RTbuffer, source_rotations_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
361 addBuffer(
"source_types", source_types_RTbuffer, source_types_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
362 addBuffer(
"source_fluxes", source_fluxes_RTbuffer, source_fluxes_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
363 addBuffer(
"source_fluxes_cam", source_fluxes_cam_RTbuffer, source_fluxes_cam_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
366 addBuffer(
"diffuse_flux", diffuse_flux_RTbuffer, diffuse_flux_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
367 addBuffer(
"diffuse_extinction", diffuse_extinction_RTbuffer, diffuse_extinction_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
368 addBuffer(
"diffuse_peak_dir", diffuse_peak_dir_RTbuffer, diffuse_peak_dir_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
369 addBuffer(
"diffuse_dist_norm", diffuse_dist_norm_RTbuffer, diffuse_dist_norm_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
372 addBuffer(
"sky_radiance_params", sky_radiance_params_RTbuffer, sky_radiance_params_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT4, 1);
373 addBuffer(
"camera_sky_radiance", camera_sky_radiance_RTbuffer, camera_sky_radiance_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
374 addBuffer(
"solar_disk_radiance", solar_disk_radiance_RTbuffer, solar_disk_radiance_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
375 addBuffer(
"camera_diffuse_flux", camera_diffuse_flux_RTbuffer, camera_diffuse_flux_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
376 addBuffer(
"band_emission_flag", band_emission_flag_RTbuffer, band_emission_flag_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
379 addBuffer(
"band_launch_flag", band_launch_flag_RTbuffer, band_launch_flag_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_BYTE, 1);
380 addBuffer(
"max_scatters", max_scatters_RTbuffer, max_scatters_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
383 addBuffer(
"masksize", masksize_RTbuffer, masksize_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT2, 1);
384 addBuffer(
"maskID", maskID_RTbuffer, maskID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT, 1);
385 addBuffer(
"uvdata", uvdata_RTbuffer, uvdata_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT2, 2);
386 addBuffer(
"uvID", uvID_RTbuffer, uvID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT, 1);
389 RT_CHECK_ERROR(rtBufferCreate(OptiX_Context, RT_BUFFER_INPUT, &maskdata_RTbuffer));
390 RT_CHECK_ERROR(rtBufferSetFormat(maskdata_RTbuffer, RT_FORMAT_BYTE));
391 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"maskdata", &maskdata_RTvariable));
392 RT_CHECK_ERROR(rtVariableSetObject(maskdata_RTvariable, maskdata_RTbuffer));
393 std::vector<std::vector<std::vector<bool>>> dummydata;
394 initializeBuffer3Dbool(maskdata_RTbuffer, dummydata);
397 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nprimitives", &Nprimitives_RTvariable));
398 RT_CHECK_ERROR(rtVariableSet1ui(Nprimitives_RTvariable, 0));
400 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"bbox_UUID_base", &bbox_UUID_base_RTvariable));
401 RT_CHECK_ERROR(rtVariableSet1ui(bbox_UUID_base_RTvariable, UINT_MAX));
403 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nsources", &Nsources_RTvariable));
404 RT_CHECK_ERROR(rtVariableSet1ui(Nsources_RTvariable, 0));
406 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nbands_global", &Nbands_global_RTvariable));
407 RT_CHECK_ERROR(rtVariableSet1ui(Nbands_global_RTvariable, 0));
409 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nbands_launch", &Nbands_launch_RTvariable));
410 RT_CHECK_ERROR(rtVariableSet1ui(Nbands_launch_RTvariable, 0));
412 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Ncameras", &Ncameras_RTvariable));
413 RT_CHECK_ERROR(rtVariableSet1ui(Ncameras_RTvariable, 0));
415 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"periodic_flag", &periodic_flag_RTvariable));
416 RT_CHECK_ERROR(rtVariableSet2f(periodic_flag_RTvariable, 0.f, 0.f));
418 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"specular_reflection_enabled", &specular_reflection_enabled_RTvariable));
419 RT_CHECK_ERROR(rtVariableSet1ui(specular_reflection_enabled_RTvariable, 0));
421 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"scattering_iteration", &scattering_iteration_RTvariable));
422 RT_CHECK_ERROR(rtVariableSet1ui(scattering_iteration_RTvariable, 0));
425 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"random_seed", &random_seed_RTvariable));
426 RT_CHECK_ERROR(rtVariableSet1ui(random_seed_RTvariable, std::chrono::system_clock::now().time_since_epoch().count()));
428 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"launch_offset", &launch_offset_RTvariable));
429 RT_CHECK_ERROR(rtVariableSet1ui(launch_offset_RTvariable, 0));
431 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"launch_face", &launch_face_RTvariable));
432 RT_CHECK_ERROR(rtVariableSet1ui(launch_face_RTvariable, 0));
435 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_position", &camera_position_RTvariable));
436 RT_CHECK_ERROR(rtVariableSet3f(camera_position_RTvariable, 0.f, 0.f, 0.f));
438 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_direction", &camera_direction_RTvariable));
439 RT_CHECK_ERROR(rtVariableSet2f(camera_direction_RTvariable, 0.f, 0.f));
441 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_lens_diameter", &camera_lens_diameter_RTvariable));
442 RT_CHECK_ERROR(rtVariableSet1f(camera_lens_diameter_RTvariable, 0.f));
444 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"FOV_aspect_ratio", &FOV_aspect_ratio_RTvariable));
445 RT_CHECK_ERROR(rtVariableSet1f(FOV_aspect_ratio_RTvariable, 1.f));
447 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_HFOV", &camera_HFOV_RTvariable));
448 RT_CHECK_ERROR(rtVariableSet1f(camera_HFOV_RTvariable, 0.f));
450 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_focal_length", &camera_focal_length_RTvariable));
451 RT_CHECK_ERROR(rtVariableSet1f(camera_focal_length_RTvariable, 0.f));
453 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_viewplane_length", &camera_viewplane_length_RTvariable));
454 RT_CHECK_ERROR(rtVariableSet1f(camera_viewplane_length_RTvariable, 0.f));
456 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_pixel_solid_angle", &camera_pixel_solid_angle_RTvariable));
457 RT_CHECK_ERROR(rtVariableSet1f(camera_pixel_solid_angle_RTvariable, 0.f));
459 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_pixel_offset_x", &camera_pixel_offset_x_RTvariable));
460 RT_CHECK_ERROR(rtVariableSet1ui(camera_pixel_offset_x_RTvariable, 0));
462 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_pixel_offset_y", &camera_pixel_offset_y_RTvariable));
463 RT_CHECK_ERROR(rtVariableSet1ui(camera_pixel_offset_y_RTvariable, 0));
465 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_ID", &camera_ID_RTvariable));
466 RT_CHECK_ERROR(rtVariableSet1ui(camera_ID_RTvariable, 0));
468 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_resolution_full", &camera_resolution_full_RTvariable));
469 RT_CHECK_ERROR(rtVariableSet2i(camera_resolution_full_RTvariable, 0, 0));
472 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"sun_direction", &sun_direction_RTvariable));
473 RT_CHECK_ERROR(rtVariableSet3f(sun_direction_RTvariable, 0.f, 0.f, 1.f));
475 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"solar_disk_cos_angle", &solar_disk_cos_angle_RTvariable));
476 RT_CHECK_ERROR(rtVariableSet1f(solar_disk_cos_angle_RTvariable, 0.f));
478 is_initialized =
true;