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));
103 RT_CHECK_ERROR(rtContextSetMissProgram(OptiX_Context, RAYTYPE_DIRECT, miss_direct));
104 RT_CHECK_ERROR(rtContextSetMissProgram(OptiX_Context, RAYTYPE_DIFFUSE, miss_diffuse));
105 RT_CHECK_ERROR(rtContextSetMissProgram(OptiX_Context, RAYTYPE_CAMERA, miss_camera));
108 std::string intersect_ptx_path =
helios::resolvePluginAsset(
"radiation",
"cuda_compile_ptx_generated_primitiveIntersection.cu.ptx").string();
111 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"rectangle_intersect", &rectangle_intersect));
112 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"rectangle_bounds", &rectangle_bounds));
115 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"triangle_intersect", &triangle_intersect));
116 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"triangle_bounds", &triangle_bounds));
119 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"disk_intersect", &disk_intersect));
120 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"disk_bounds", &disk_bounds));
123 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"tile_intersect", &tile_intersect));
124 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"tile_bounds", &tile_bounds));
127 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"voxel_intersect", &voxel_intersect));
128 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"voxel_bounds", &voxel_bounds));
130 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"bbox_intersect", &bbox_intersect));
131 RT_CHECK_ERROR(rtProgramCreateFromPTXFile(OptiX_Context, intersect_ptx_path.c_str(),
"bbox_bounds", &bbox_bounds));
136 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &patch_geometry));
137 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(patch_geometry, rectangle_bounds));
138 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(patch_geometry, rectangle_intersect));
141 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &triangle_geometry));
142 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(triangle_geometry, triangle_bounds));
143 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(triangle_geometry, triangle_intersect));
146 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &disk_geometry));
147 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(disk_geometry, disk_bounds));
148 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(disk_geometry, disk_intersect));
151 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &tile_geometry));
152 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(tile_geometry, tile_bounds));
153 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(tile_geometry, tile_intersect));
156 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &voxel_geometry));
157 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(voxel_geometry, voxel_bounds));
158 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(voxel_geometry, voxel_intersect));
161 RT_CHECK_ERROR(rtGeometryCreate(OptiX_Context, &bbox_geometry));
162 RT_CHECK_ERROR(rtGeometrySetBoundingBoxProgram(bbox_geometry, bbox_bounds));
163 RT_CHECK_ERROR(rtGeometrySetIntersectionProgram(bbox_geometry, bbox_intersect));
168 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &patch_material));
169 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_DIRECT, closest_hit_direct));
170 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
171 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_CAMERA, closest_hit_camera));
172 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(patch_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
175 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &triangle_material));
176 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_DIRECT, closest_hit_direct));
177 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
178 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_CAMERA, closest_hit_camera));
179 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(triangle_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
182 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &disk_material));
183 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_DIRECT, closest_hit_direct));
184 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
185 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_CAMERA, closest_hit_camera));
186 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(disk_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
189 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &tile_material));
190 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_DIRECT, closest_hit_direct));
191 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
192 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_CAMERA, closest_hit_camera));
193 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(tile_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
196 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &voxel_material));
197 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_DIRECT, closest_hit_direct));
198 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
199 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_CAMERA, closest_hit_camera));
200 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(voxel_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
203 RT_CHECK_ERROR(rtMaterialCreate(OptiX_Context, &bbox_material));
204 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_DIRECT, closest_hit_direct));
205 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_DIFFUSE, closest_hit_diffuse));
206 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_CAMERA, closest_hit_camera));
207 RT_CHECK_ERROR(rtMaterialSetClosestHitProgram(bbox_material, RAYTYPE_PIXEL_LABEL, closest_hit_pixel_label));
212 RT_CHECK_ERROR(rtGroupCreate(OptiX_Context, &top_level_group));
213 RT_CHECK_ERROR(rtGroupSetChildCount(top_level_group, 1));
216 RT_CHECK_ERROR(rtAccelerationCreate(OptiX_Context, &top_level_acceleration));
217 RT_CHECK_ERROR(rtAccelerationSetBuilder(top_level_acceleration,
"NoAccel"));
218 RT_CHECK_ERROR(rtAccelerationSetTraverser(top_level_acceleration,
"NoAccel"));
219 RT_CHECK_ERROR(rtGroupSetAcceleration(top_level_group, top_level_acceleration));
220 RT_CHECK_ERROR(rtAccelerationMarkDirty(top_level_acceleration));
223 RT_CHECK_ERROR(rtTransformCreate(OptiX_Context, &transform));
224 float identity[16] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
225 RT_CHECK_ERROR(rtTransformSetMatrix(transform, 0, identity,
nullptr));
226 RT_CHECK_ERROR(rtGroupSetChild(top_level_group, 0, transform));
229 RT_CHECK_ERROR(rtGeometryGroupCreate(OptiX_Context, &base_geometry_group));
230 RT_CHECK_ERROR(rtGeometryGroupSetChildCount(base_geometry_group, 6));
231 RT_CHECK_ERROR(rtTransformSetChild(transform, base_geometry_group));
234 RT_CHECK_ERROR(rtAccelerationCreate(OptiX_Context, &base_acceleration));
235 RT_CHECK_ERROR(rtAccelerationSetBuilder(base_acceleration,
"Trbvh"));
236 RT_CHECK_ERROR(rtAccelerationSetTraverser(base_acceleration,
"Bvh"));
237 RT_CHECK_ERROR(rtGeometryGroupSetAcceleration(base_geometry_group, base_acceleration));
238 RT_CHECK_ERROR(rtAccelerationMarkDirty(base_acceleration));
241 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &patch_geometryinstance));
242 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(patch_geometryinstance, patch_geometry));
243 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(patch_geometryinstance, 1));
244 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(patch_geometryinstance, 0, patch_material));
245 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 0, patch_geometryinstance));
247 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &triangle_geometryinstance));
248 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(triangle_geometryinstance, triangle_geometry));
249 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(triangle_geometryinstance, 1));
250 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(triangle_geometryinstance, 0, triangle_material));
251 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 1, triangle_geometryinstance));
253 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &disk_geometryinstance));
254 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(disk_geometryinstance, disk_geometry));
255 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(disk_geometryinstance, 1));
256 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(disk_geometryinstance, 0, disk_material));
257 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 2, disk_geometryinstance));
259 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &tile_geometryinstance));
260 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(tile_geometryinstance, tile_geometry));
261 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(tile_geometryinstance, 1));
262 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(tile_geometryinstance, 0, tile_material));
263 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 3, tile_geometryinstance));
265 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &voxel_geometryinstance));
266 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(voxel_geometryinstance, voxel_geometry));
267 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(voxel_geometryinstance, 1));
268 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(voxel_geometryinstance, 0, voxel_material));
269 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 4, voxel_geometryinstance));
271 RT_CHECK_ERROR(rtGeometryInstanceCreate(OptiX_Context, &bbox_geometryinstance));
272 RT_CHECK_ERROR(rtGeometryInstanceSetGeometry(bbox_geometryinstance, bbox_geometry));
273 RT_CHECK_ERROR(rtGeometryInstanceSetMaterialCount(bbox_geometryinstance, 1));
274 RT_CHECK_ERROR(rtGeometryInstanceSetMaterial(bbox_geometryinstance, 0, bbox_material));
275 RT_CHECK_ERROR(rtGeometryGroupSetChild(base_geometry_group, 5, bbox_geometryinstance));
278 RTvariable top_object;
279 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"top_object", &top_object));
280 RT_CHECK_ERROR(rtVariableSetObject(top_object, top_level_group));
285 addBuffer(
"patch_vertices", patch_vertices_RTbuffer, patch_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
286 addBuffer(
"triangle_vertices", triangle_vertices_RTbuffer, triangle_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
287 addBuffer(
"disk_centers", disk_centers_RTbuffer, disk_centers_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
288 addBuffer(
"disk_radii", disk_radii_RTbuffer, disk_radii_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
289 addBuffer(
"disk_normals", disk_normals_RTbuffer, disk_normals_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
290 addBuffer(
"tile_vertices", tile_vertices_RTbuffer, tile_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
291 addBuffer(
"voxel_vertices", voxel_vertices_RTbuffer, voxel_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
292 addBuffer(
"bbox_vertices", bbox_vertices_RTbuffer, bbox_vertices_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 2);
295 addBuffer(
"transform_matrix", transform_matrix_RTbuffer, transform_matrix_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 2);
296 addBuffer(
"primitive_type", primitive_type_RTbuffer, primitive_type_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
297 addBuffer(
"primitive_solid_fraction", primitive_solid_fraction_RTbuffer, primitive_solid_fraction_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
298 addBuffer(
"twosided_flag", twosided_flag_RTbuffer, twosided_flag_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_BYTE, 1);
301 addBuffer(
"patch_UUID", patch_UUID_RTbuffer, patch_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
302 addBuffer(
"triangle_UUID", triangle_UUID_RTbuffer, triangle_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
303 addBuffer(
"disk_UUID", disk_UUID_RTbuffer, disk_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
304 addBuffer(
"tile_UUID", tile_UUID_RTbuffer, tile_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
305 addBuffer(
"voxel_UUID", voxel_UUID_RTbuffer, voxel_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
306 addBuffer(
"bbox_UUID", bbox_UUID_RTbuffer, bbox_UUID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
309 addBuffer(
"objectID", objectID_RTbuffer, objectID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
310 addBuffer(
"primitiveID", primitiveID_RTbuffer, primitiveID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
311 addBuffer(
"primitive_positions", primitive_positions_RTbuffer, primitive_positions_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
312 addBuffer(
"object_subdivisions", object_subdivisions_RTbuffer, object_subdivisions_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT2, 1);
315 addBuffer(
"rho", rho_RTbuffer, rho_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
316 addBuffer(
"tau", tau_RTbuffer, tau_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
317 addBuffer(
"rho_cam", rho_cam_RTbuffer, rho_cam_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
318 addBuffer(
"tau_cam", tau_cam_RTbuffer, tau_cam_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
319 addBuffer(
"specular_exponent", specular_exponent_RTbuffer, specular_exponent_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
320 addBuffer(
"specular_scale", specular_scale_RTbuffer, specular_scale_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
323 addBuffer(
"radiation_in", radiation_in_RTbuffer, radiation_in_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
324 addBuffer(
"radiation_out_top", radiation_out_top_RTbuffer, radiation_out_top_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
325 addBuffer(
"radiation_out_bottom", radiation_out_bottom_RTbuffer, radiation_out_bottom_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
326 addBuffer(
"radiation_in_camera", radiation_in_camera_RTbuffer, radiation_in_camera_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
327 addBuffer(
"camera_pixel_label", camera_pixel_label_RTbuffer, camera_pixel_label_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_UNSIGNED_INT, 1);
328 addBuffer(
"camera_pixel_depth", camera_pixel_depth_RTbuffer, camera_pixel_depth_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
329 addBuffer(
"scatter_buff_top", scatter_buff_top_RTbuffer, scatter_buff_top_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
330 addBuffer(
"scatter_buff_bottom", scatter_buff_bottom_RTbuffer, scatter_buff_bottom_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
331 addBuffer(
"radiation_specular", radiation_specular_RTbuffer, radiation_specular_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
332 addBuffer(
"Rsky", Rsky_RTbuffer, Rsky_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
333 addBuffer(
"scatter_buff_top_cam", scatter_buff_top_cam_RTbuffer, scatter_buff_top_cam_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
334 addBuffer(
"scatter_buff_bottom_cam", scatter_buff_bottom_cam_RTbuffer, scatter_buff_bottom_cam_RTvariable, RT_BUFFER_INPUT_OUTPUT, RT_FORMAT_FLOAT, 1);
337 addBuffer(
"source_positions", source_positions_RTbuffer, source_positions_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
338 addBuffer(
"source_widths", source_widths_RTbuffer, source_widths_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT2, 1);
339 addBuffer(
"source_rotations", source_rotations_RTbuffer, source_rotations_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
340 addBuffer(
"source_types", source_types_RTbuffer, source_types_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
341 addBuffer(
"source_fluxes", source_fluxes_RTbuffer, source_fluxes_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
342 addBuffer(
"source_fluxes_cam", source_fluxes_cam_RTbuffer, source_fluxes_cam_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
345 addBuffer(
"diffuse_flux", diffuse_flux_RTbuffer, diffuse_flux_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
346 addBuffer(
"diffuse_extinction", diffuse_extinction_RTbuffer, diffuse_extinction_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
347 addBuffer(
"diffuse_peak_dir", diffuse_peak_dir_RTbuffer, diffuse_peak_dir_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT3, 1);
348 addBuffer(
"diffuse_dist_norm", diffuse_dist_norm_RTbuffer, diffuse_dist_norm_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
351 addBuffer(
"sky_radiance_params", sky_radiance_params_RTbuffer, sky_radiance_params_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT4, 1);
352 addBuffer(
"camera_sky_radiance", camera_sky_radiance_RTbuffer, camera_sky_radiance_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
353 addBuffer(
"solar_disk_radiance", solar_disk_radiance_RTbuffer, solar_disk_radiance_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT, 1);
356 addBuffer(
"band_launch_flag", band_launch_flag_RTbuffer, band_launch_flag_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_BYTE, 1);
357 addBuffer(
"max_scatters", max_scatters_RTbuffer, max_scatters_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_UNSIGNED_INT, 1);
360 addBuffer(
"masksize", masksize_RTbuffer, masksize_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT2, 1);
361 addBuffer(
"maskID", maskID_RTbuffer, maskID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT, 1);
362 addBuffer(
"uvdata", uvdata_RTbuffer, uvdata_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_FLOAT2, 2);
363 addBuffer(
"uvID", uvID_RTbuffer, uvID_RTvariable, RT_BUFFER_INPUT, RT_FORMAT_INT, 1);
366 RT_CHECK_ERROR(rtBufferCreate(OptiX_Context, RT_BUFFER_INPUT, &maskdata_RTbuffer));
367 RT_CHECK_ERROR(rtBufferSetFormat(maskdata_RTbuffer, RT_FORMAT_BYTE));
368 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"maskdata", &maskdata_RTvariable));
369 RT_CHECK_ERROR(rtVariableSetObject(maskdata_RTvariable, maskdata_RTbuffer));
370 std::vector<std::vector<std::vector<bool>>> dummydata;
371 initializeBuffer3Dbool(maskdata_RTbuffer, dummydata);
374 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nprimitives", &Nprimitives_RTvariable));
375 RT_CHECK_ERROR(rtVariableSet1ui(Nprimitives_RTvariable, 0));
377 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"bbox_UUID_base", &bbox_UUID_base_RTvariable));
378 RT_CHECK_ERROR(rtVariableSet1ui(bbox_UUID_base_RTvariable, UINT_MAX));
380 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nsources", &Nsources_RTvariable));
381 RT_CHECK_ERROR(rtVariableSet1ui(Nsources_RTvariable, 0));
383 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nbands_global", &Nbands_global_RTvariable));
384 RT_CHECK_ERROR(rtVariableSet1ui(Nbands_global_RTvariable, 0));
386 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Nbands_launch", &Nbands_launch_RTvariable));
387 RT_CHECK_ERROR(rtVariableSet1ui(Nbands_launch_RTvariable, 0));
389 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"Ncameras", &Ncameras_RTvariable));
390 RT_CHECK_ERROR(rtVariableSet1ui(Ncameras_RTvariable, 0));
392 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"periodic_flag", &periodic_flag_RTvariable));
393 RT_CHECK_ERROR(rtVariableSet2f(periodic_flag_RTvariable, 0.f, 0.f));
395 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"specular_reflection_enabled", &specular_reflection_enabled_RTvariable));
396 RT_CHECK_ERROR(rtVariableSet1ui(specular_reflection_enabled_RTvariable, 0));
398 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"scattering_iteration", &scattering_iteration_RTvariable));
399 RT_CHECK_ERROR(rtVariableSet1ui(scattering_iteration_RTvariable, 0));
402 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"random_seed", &random_seed_RTvariable));
403 RT_CHECK_ERROR(rtVariableSet1ui(random_seed_RTvariable, std::chrono::system_clock::now().time_since_epoch().count()));
405 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"launch_offset", &launch_offset_RTvariable));
406 RT_CHECK_ERROR(rtVariableSet1ui(launch_offset_RTvariable, 0));
408 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"launch_face", &launch_face_RTvariable));
409 RT_CHECK_ERROR(rtVariableSet1ui(launch_face_RTvariable, 0));
412 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_position", &camera_position_RTvariable));
413 RT_CHECK_ERROR(rtVariableSet3f(camera_position_RTvariable, 0.f, 0.f, 0.f));
415 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_direction", &camera_direction_RTvariable));
416 RT_CHECK_ERROR(rtVariableSet2f(camera_direction_RTvariable, 0.f, 0.f));
418 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_lens_diameter", &camera_lens_diameter_RTvariable));
419 RT_CHECK_ERROR(rtVariableSet1f(camera_lens_diameter_RTvariable, 0.f));
421 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"FOV_aspect_ratio", &FOV_aspect_ratio_RTvariable));
422 RT_CHECK_ERROR(rtVariableSet1f(FOV_aspect_ratio_RTvariable, 1.f));
424 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_HFOV", &camera_HFOV_RTvariable));
425 RT_CHECK_ERROR(rtVariableSet1f(camera_HFOV_RTvariable, 0.f));
427 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_focal_length", &camera_focal_length_RTvariable));
428 RT_CHECK_ERROR(rtVariableSet1f(camera_focal_length_RTvariable, 0.f));
430 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_viewplane_length", &camera_viewplane_length_RTvariable));
431 RT_CHECK_ERROR(rtVariableSet1f(camera_viewplane_length_RTvariable, 0.f));
433 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_pixel_solid_angle", &camera_pixel_solid_angle_RTvariable));
434 RT_CHECK_ERROR(rtVariableSet1f(camera_pixel_solid_angle_RTvariable, 0.f));
436 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_pixel_offset_x", &camera_pixel_offset_x_RTvariable));
437 RT_CHECK_ERROR(rtVariableSet1ui(camera_pixel_offset_x_RTvariable, 0));
439 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_pixel_offset_y", &camera_pixel_offset_y_RTvariable));
440 RT_CHECK_ERROR(rtVariableSet1ui(camera_pixel_offset_y_RTvariable, 0));
442 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_ID", &camera_ID_RTvariable));
443 RT_CHECK_ERROR(rtVariableSet1ui(camera_ID_RTvariable, 0));
445 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"camera_resolution_full", &camera_resolution_full_RTvariable));
446 RT_CHECK_ERROR(rtVariableSet2i(camera_resolution_full_RTvariable, 0, 0));
449 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"sun_direction", &sun_direction_RTvariable));
450 RT_CHECK_ERROR(rtVariableSet3f(sun_direction_RTvariable, 0.f, 0.f, 1.f));
452 RT_CHECK_ERROR(rtContextDeclareVariable(OptiX_Context,
"solar_disk_cos_angle", &solar_disk_cos_angle_RTvariable));
453 RT_CHECK_ERROR(rtVariableSet1f(solar_disk_cos_angle_RTvariable, 0.f));
455 is_initialized =
true;