1.3.64
 
Loading...
Searching...
No Matches
helios::RayTracingBackend Class Referenceabstract

Abstract interface for ray-tracing backends. More...

#include <RayTracingBackend.h>

Inheritance diagram for helios::RayTracingBackend:
helios::OptiX6Backend

Public Member Functions

virtual void initialize ()=0
 Initialize the ray tracing backend.
 
virtual void shutdown ()=0
 Shutdown the ray tracing backend.
 
virtual void updateGeometry (const RayTracingGeometry &geometry)=0
 Update geometry data in the ray tracing backend.
 
virtual void buildAccelerationStructure ()=0
 Build or rebuild the acceleration structure.
 
virtual void updateMaterials (const RayTracingMaterial &materials)=0
 Update material properties (reflectivity, transmissivity, specular)
 
virtual void updateSources (const std::vector< RayTracingSource > &sources)=0
 Update radiation source definitions.
 
virtual void updateDiffuseRadiation (const std::vector< float > &flux, const std::vector< float > &extinction, const std::vector< helios::vec3 > &peak_dir, const std::vector< float > &dist_norm, const std::vector< float > &sky_energy)=0
 Update diffuse (ambient) radiation parameters.
 
virtual void updateSkyModel (const std::vector< helios::vec4 > &sky_radiance_params, const std::vector< float > &camera_sky_radiance, const helios::vec3 &sun_direction, const std::vector< float > &solar_disk_radiance, float solar_disk_cos_angle)=0
 Update sky radiance model parameters (for camera rendering)
 
virtual void launchDirectRays (const RayTracingLaunchParams &params)=0
 Launch direct (unscattered) rays to radiation sources.
 
virtual void launchDiffuseRays (const RayTracingLaunchParams &params)=0
 Launch diffuse (hemispherically-distributed) rays.
 
virtual void launchCameraRays (const RayTracingLaunchParams &params)=0
 Launch camera rays for image rendering.
 
virtual void launchPixelLabelRays (const RayTracingLaunchParams &params)=0
 Launch pixel labeling rays (for primitive identification in images)
 
virtual void getRadiationResults (RayTracingResults &results)=0
 Get radiation simulation results.
 
virtual void getCameraResults (std::vector< float > &pixel_data, std::vector< uint > &pixel_labels, std::vector< float > &pixel_depths, uint camera_id, const helios::int2 &resolution)=0
 Get camera rendering results.
 
virtual void zeroRadiationBuffers (size_t launch_band_count)=0
 Zero all radiation result buffers (radiation_in, radiation_out, radiation_specular)
 
virtual void zeroScatterBuffers ()=0
 Zero scatter buffers (scatter_buff_top, scatter_buff_bottom)
 
virtual void zeroCameraPixelBuffers (const helios::int2 &resolution)=0
 Zero camera pixel label and depth buffers.
 
virtual void copyScatterToRadiation ()=0
 Copy scatter buffer contents to radiation buffers.
 
virtual void uploadRadiationOut (const std::vector< float > &radiation_out_top, const std::vector< float > &radiation_out_bottom)=0
 Upload radiation_out buffers directly (without launching rays)
 
virtual void uploadCameraScatterBuffers (const std::vector< float > &scatter_top_cam, const std::vector< float > &scatter_bottom_cam)=0
 Upload camera scatter buffers.
 
virtual void zeroCameraScatterBuffers (size_t launch_band_count)=0
 Zero camera scatter buffers (scatter_buff_top_cam, scatter_buff_bottom_cam)
 
virtual void uploadSourceFluxes (const std::vector< float > &fluxes)=0
 Upload source flux values for launched bands.
 
virtual void queryGPUMemory () const =0
 Query and report GPU memory usage.
 
virtual std::string getBackendName () const =0
 Get the name of the backend implementation.
 

Static Public Member Functions

static std::unique_ptr< RayTracingBackendcreate (const std::string &backend_type)
 Create a ray tracing backend instance.
 

Detailed Description

Abstract interface for ray-tracing backends.

This interface provides a backend-agnostic API for ray tracing operations. Implementations include:

  • OptiX6Backend: OptiX 6.5 implementation (current)
  • OptiX7Backend: OptiX 7.7 implementation (future - Phase 2)
  • VulkanBackend: Vulkan ray-tracing implementation (future - Phase 3)

The interface is designed to support:

  • 4 ray types: direct, diffuse, camera, pixel_label
  • 6 primitive types: patch, triangle, disk, tile, voxel, bbox
  • Multi-band spectral radiation
  • Multiple radiation sources
  • Camera rendering with depth and labeling
  • Scattering/multi-bounce radiation

Definition at line 42 of file RayTracingBackend.h.

Member Function Documentation

◆ buildAccelerationStructure()

virtual void helios::RayTracingBackend::buildAccelerationStructure ( )
pure virtual

Build or rebuild the acceleration structure.

Constructs the BVH or other acceleration structure for efficient ray traversal. Should be called after updateGeometry() or when geometry changes.

Implemented in helios::OptiX6Backend.

◆ copyScatterToRadiation()

virtual void helios::RayTracingBackend::copyScatterToRadiation ( )
pure virtual

Copy scatter buffer contents to radiation buffers.

Used for multi-bounce radiation: scattering iteration results are accumulated into the main radiation buffers.

Implemented in helios::OptiX6Backend.

◆ create()

std::unique_ptr< RayTracingBackend > helios::RayTracingBackend::create ( const std::string &  backend_type)
static

Create a ray tracing backend instance.

Parameters
[in]backend_typeBackend type string: "optix6", "optix7", "vulkan"
Returns
Unique pointer to backend instance

Factory method that selects and instantiates the appropriate backend. Throws helios_runtime_error if backend type is unknown or unavailable.

Definition at line 25 of file BackendFactory.cpp.

◆ getBackendName()

virtual std::string helios::RayTracingBackend::getBackendName ( ) const
pure virtual

Get the name of the backend implementation.

Returns
Backend name (e.g., "OptiX 6.5", "OptiX 7.7", "Vulkan")

Implemented in helios::OptiX6Backend.

◆ getCameraResults()

virtual void helios::RayTracingBackend::getCameraResults ( std::vector< float > &  pixel_data,
std::vector< uint > &  pixel_labels,
std::vector< float > &  pixel_depths,
uint  camera_id,
const helios::int2 resolution 
)
pure virtual

Get camera rendering results.

Parameters
[out]pixel_dataFlattened pixel values [band][pixel_y][pixel_x]
[out]pixel_labelsPrimitive UUID for each pixel (0 if sky/miss)
[out]pixel_depthsDepth value for each pixel
[in]camera_idCamera identifier
[in]resolutionCamera resolution (width, height)

Implemented in helios::OptiX6Backend.

◆ getRadiationResults()

virtual void helios::RayTracingBackend::getRadiationResults ( RayTracingResults results)
pure virtual

Get radiation simulation results.

Parameters
[out]resultsStructure containing radiation_in, radiation_out, scatter buffers, etc.

Retrieves absorbed and emitted radiation for all primitives and bands.

Implemented in helios::OptiX6Backend.

◆ initialize()

virtual void helios::RayTracingBackend::initialize ( )
pure virtual

Initialize the ray tracing backend.

Creates the ray tracing context, allocates buffers, compiles/loads programs, and sets up the acceleration structure.

Implemented in helios::OptiX6Backend.

◆ launchCameraRays()

virtual void helios::RayTracingBackend::launchCameraRays ( const RayTracingLaunchParams params)
pure virtual

Launch camera rays for image rendering.

Parameters
[in]paramsLaunch parameters including camera position, direction, FOV, etc.

Implemented in helios::OptiX6Backend.

◆ launchDiffuseRays()

virtual void helios::RayTracingBackend::launchDiffuseRays ( const RayTracingLaunchParams params)
pure virtual

Launch diffuse (hemispherically-distributed) rays.

Parameters
[in]paramsLaunch parameters including diffuse distribution parameters

Implemented in helios::OptiX6Backend.

◆ launchDirectRays()

virtual void helios::RayTracingBackend::launchDirectRays ( const RayTracingLaunchParams params)
pure virtual

Launch direct (unscattered) rays to radiation sources.

Parameters
[in]paramsLaunch parameters (dimensions, seed, band config, etc.)

Implemented in helios::OptiX6Backend.

◆ launchPixelLabelRays()

virtual void helios::RayTracingBackend::launchPixelLabelRays ( const RayTracingLaunchParams params)
pure virtual

Launch pixel labeling rays (for primitive identification in images)

Parameters
[in]paramsLaunch parameters with camera configuration

Implemented in helios::OptiX6Backend.

◆ queryGPUMemory()

virtual void helios::RayTracingBackend::queryGPUMemory ( ) const
pure virtual

Query and report GPU memory usage.

Implemented in helios::OptiX6Backend.

◆ shutdown()

virtual void helios::RayTracingBackend::shutdown ( )
pure virtual

Shutdown the ray tracing backend.

Destroys the context, frees all buffers and resources.

Implemented in helios::OptiX6Backend.

◆ updateDiffuseRadiation()

virtual void helios::RayTracingBackend::updateDiffuseRadiation ( const std::vector< float > &  flux,
const std::vector< float > &  extinction,
const std::vector< helios::vec3 > &  peak_dir,
const std::vector< float > &  dist_norm,
const std::vector< float > &  sky_energy 
)
pure virtual

Update diffuse (ambient) radiation parameters.

Parameters
[in]fluxDiffuse flux per band
[in]extinctionExtinction coefficient per band
[in]peak_dirPeak direction for diffuse distribution per band
[in]dist_normDistribution normalization factor per band
[in]sky_energyEnergy absorbed by sky per band

Implemented in helios::OptiX6Backend.

◆ updateGeometry()

virtual void helios::RayTracingBackend::updateGeometry ( const RayTracingGeometry geometry)
pure virtual

Update geometry data in the ray tracing backend.

Parameters
[in]geometryGeometry data for all primitive types

This uploads vertex data, transform matrices, UUIDs, texture masks, and all other geometry-related data to the GPU.

Implemented in helios::OptiX6Backend.

◆ updateMaterials()

virtual void helios::RayTracingBackend::updateMaterials ( const RayTracingMaterial materials)
pure virtual

Update material properties (reflectivity, transmissivity, specular)

Parameters
[in]materialsMaterial data for all primitives, sources, and bands

Implemented in helios::OptiX6Backend.

◆ updateSkyModel()

virtual void helios::RayTracingBackend::updateSkyModel ( const std::vector< helios::vec4 > &  sky_radiance_params,
const std::vector< float > &  camera_sky_radiance,
const helios::vec3 sun_direction,
const std::vector< float > &  solar_disk_radiance,
float  solar_disk_cos_angle 
)
pure virtual

Update sky radiance model parameters (for camera rendering)

Parameters
[in]sky_radiance_paramsPrague sky model parameters per band (vec4)
[in]camera_sky_radianceSky radiance for cameras per band
[in]sun_directionDirection to the sun
[in]solar_disk_radianceSolar disk radiance per band
[in]solar_disk_cos_angleCosine of solar disk angular radius

Implemented in helios::OptiX6Backend.

◆ updateSources()

virtual void helios::RayTracingBackend::updateSources ( const std::vector< RayTracingSource > &  sources)
pure virtual

Update radiation source definitions.

Parameters
[in]sourcesVector of radiation sources (collimated, sphere, sun, rectangle, disk)

Implemented in helios::OptiX6Backend.

◆ uploadCameraScatterBuffers()

virtual void helios::RayTracingBackend::uploadCameraScatterBuffers ( const std::vector< float > &  scatter_top_cam,
const std::vector< float > &  scatter_bottom_cam 
)
pure virtual

Upload camera scatter buffers.

Parameters
[in]scatter_top_camScattered radiation for cameras (top surface) indexed by [primitive * Nbands_launch + band]
[in]scatter_bottom_camScattered radiation for cameras (bottom surface)

Used to upload emission energy that cameras should see before scatter iterations.

Implemented in helios::OptiX6Backend.

◆ uploadRadiationOut()

virtual void helios::RayTracingBackend::uploadRadiationOut ( const std::vector< float > &  radiation_out_top,
const std::vector< float > &  radiation_out_bottom 
)
pure virtual

Upload radiation_out buffers directly (without launching rays)

Parameters
[in]radiation_out_topTop-face outgoing radiation [Nprims * Nbands]
[in]radiation_out_bottomBottom-face outgoing radiation [Nprims * Nbands]

Used to set outgoing radiation for scattering iterations.

Implemented in helios::OptiX6Backend.

◆ uploadSourceFluxes()

virtual void helios::RayTracingBackend::uploadSourceFluxes ( const std::vector< float > &  fluxes)
pure virtual

Upload source flux values for launched bands.

Parameters
[in]fluxesSource flux values indexed by [source * Nbands_launch + band]

Used to set per-band source fluxes before direct ray launch.

Implemented in helios::OptiX6Backend.

◆ zeroCameraPixelBuffers()

virtual void helios::RayTracingBackend::zeroCameraPixelBuffers ( const helios::int2 resolution)
pure virtual

Zero camera pixel label and depth buffers.

Parameters
[in]resolutionFull camera resolution (width, height)

Must be called before launching pixel label rays for multiple tiles. Each tile launch accumulates results without zeroing, so this must be called once before the tile loop to initialize the buffers.

Implemented in helios::OptiX6Backend.

◆ zeroCameraScatterBuffers()

virtual void helios::RayTracingBackend::zeroCameraScatterBuffers ( size_t  launch_band_count)
pure virtual

Zero camera scatter buffers (scatter_buff_top_cam, scatter_buff_bottom_cam)

Parameters
[in]launch_band_countNumber of bands being launched in current iteration

Buffers are sized by launch_band_count to prevent double-counting when accumulating camera scatter across multiple ray launches.

Implemented in helios::OptiX6Backend.

◆ zeroRadiationBuffers()

virtual void helios::RayTracingBackend::zeroRadiationBuffers ( size_t  launch_band_count)
pure virtual

Zero all radiation result buffers (radiation_in, radiation_out, radiation_specular)

Parameters
[in]launch_band_countNumber of bands being launched in current iteration

Camera scatter buffers are sized by launch_band_count (not global band count) to match per-launch accumulation semantics. All other buffers use the global band count.

Implemented in helios::OptiX6Backend.

◆ zeroScatterBuffers()

virtual void helios::RayTracingBackend::zeroScatterBuffers ( )
pure virtual

Zero scatter buffers (scatter_buff_top, scatter_buff_bottom)

Implemented in helios::OptiX6Backend.


The documentation for this class was generated from the following files: