Class for GPU-accelerated collision detection and spatial queries in Helios. More...
#include <CollisionDetection.h>
Data Structures | |
struct | AngularBins |
Angular bin structure for rasterization-based collision detection. More... | |
struct | Cone |
Structure representing a cone for collision detection. More... | |
struct | HitResult |
Structure representing the result of a ray-primitive intersection. More... | |
struct | MemoryUsageStats |
Get memory usage statistics for different BVH layouts. More... | |
struct | OptimalPathResult |
Structure representing the result of optimal cone path detection. More... | |
struct | RayPacket |
Optimized ray packet for streaming processing Organizes ray data in Structure-of-Arrays format for better memory access. More... | |
struct | RayQuery |
Structure representing a ray query for generic ray-tracing operations. More... | |
struct | RayStream |
Streaming ray tracer interface Enables efficient batch processing of ray packets. More... | |
struct | RayTracingStats |
Structure for batch ray-tracing statistics. More... | |
Public Types | |
enum class | BVHOptimizationMode { SOA_UNCOMPRESSED } |
BVH optimization modes for performance improvements. More... | |
Public Member Functions | |
CollisionDetection (helios::Context *context) | |
Constructor for CollisionDetection class. | |
~CollisionDetection () | |
Destructor for CollisionDetection class. | |
std::vector< uint > | findCollisions (uint UUID, bool allow_spatial_culling=true) |
Find all primitives/objects that collide with a given primitive. | |
std::vector< uint > | findCollisions (const std::vector< uint > &UUIDs, bool allow_spatial_culling=true) |
Find all primitives/objects that collide with any of the given primitives. | |
std::vector< uint > | findCollisions (const std::vector< uint > &primitive_UUIDs, const std::vector< uint > &object_IDs, bool allow_spatial_culling=true) |
Find collisions between primitives and compound objects. | |
std::vector< uint > | findCollisions (const std::vector< uint > &query_UUIDs, const std::vector< uint > &query_object_IDs, const std::vector< uint > &target_UUIDs, const std::vector< uint > &target_object_IDs, bool allow_spatial_culling=true) |
Find collisions restricting both query and target geometry. | |
HitResult | castRay (const RayQuery &ray_query) |
Cast a single ray and return detailed intersection information. | |
HitResult | castRay (const helios::vec3 &origin, const helios::vec3 &direction, float max_distance=-1.0f, const std::vector< uint > &target_UUIDs={}) |
Cast a single ray with simplified parameters. | |
std::vector< HitResult > | castRays (const std::vector< RayQuery > &ray_queries, RayTracingStats *stats=nullptr) |
Cast multiple rays in batch for improved performance. | |
void | setBVHOptimizationMode (BVHOptimizationMode mode) |
Set BVH optimization mode for performance improvements. | |
BVHOptimizationMode | getBVHOptimizationMode () const |
Get current BVH optimization mode. | |
std::vector< HitResult > | castRaysOptimized (const std::vector< RayQuery > &ray_queries, RayTracingStats *stats=nullptr) |
Cast rays using optimized Structure-of-Arrays BVH layout. | |
bool | processRayStream (RayStream &ray_stream, RayTracingStats *stats=nullptr) |
Cast ray packets using streaming interface for optimal GPU utilization. | |
MemoryUsageStats | getBVHMemoryUsage () const |
std::vector< std::vector< std::vector< std::vector< HitResult > > > > | performGridRayIntersection (const helios::vec3 &grid_center, const helios::vec3 &grid_size, const helios::int3 &grid_divisions, const std::vector< RayQuery > &ray_queries) |
Perform grid-based ray intersection for voxel operations. | |
std::vector< std::vector< HitResult > > | calculateVoxelPathLengths (const helios::vec3 &scan_origin, const std::vector< helios::vec3 > &ray_directions, const std::vector< helios::vec3 > &voxel_centers, const std::vector< helios::vec3 > &voxel_sizes) |
Calculate ray path lengths through individual voxels for LiDAR processing. | |
void | calculateRayPathLengthsDetailed (const helios::vec3 &grid_center, const helios::vec3 &grid_size, const helios::int3 &grid_divisions, const std::vector< helios::vec3 > &ray_origins, const std::vector< helios::vec3 > &ray_directions, std::vector< HitResult > &hit_results) |
Enhanced ray path length calculations with detailed statistics. | |
OptimalPathResult | findOptimalConePath (const helios::vec3 &apex, const helios::vec3 ¢ralAxis, float half_angle, float height=0.0f, int initialSamples=256) |
Find the radial direction through a cone toward the largest gap. | |
void | calculateGridIntersection (const helios::vec3 &grid_center, const helios::vec3 &grid_size, const helios::int3 &grid_divisions, const std::vector< uint > &UUIDs={}) |
Calculate which primitives fall within a 3D grid. | |
std::vector< std::vector< std::vector< std::vector< uint > > > > | getGridCells () |
Get all grid cells and their contained primitives. | |
std::vector< uint > | getGridIntersections (int i, int j, int k) |
Get primitives in a specific grid cell. | |
void | calculateVoxelRayPathLengths (const helios::vec3 &grid_center, const helios::vec3 &grid_size, const helios::int3 &grid_divisions, const std::vector< helios::vec3 > &ray_origins, const std::vector< helios::vec3 > &ray_directions) |
Calculate ray path lengths and transmission statistics for a voxel grid. | |
void | setVoxelTransmissionProbability (int P_denom, int P_trans, const helios::int3 &ijk) |
Set transmission probability counts for a voxel. | |
void | getVoxelTransmissionProbability (const helios::int3 &ijk, int &P_denom, int &P_trans) const |
Get transmission probability counts for a voxel. | |
void | setVoxelRbar (float r_bar, const helios::int3 &ijk) |
Set average ray propagation distance for a voxel. | |
float | getVoxelRbar (const helios::int3 &ijk) const |
Get average ray propagation distance for a voxel. | |
void | getVoxelRayHitCounts (const helios::int3 &ijk, int &hit_before, int &hit_after, int &hit_inside) const |
Get ray classification counts for a voxel (for Beer's law calculations) | |
std::vector< float > | getVoxelRayPathLengths (const helios::int3 &ijk) const |
Get individual ray path lengths for a voxel (for Beer's law calculations) | |
void | clearVoxelData () |
Clear all voxel ray statistics data. | |
int | optimizeLayout (const std::vector< uint > &UUIDs, float learning_rate=0.01f, int max_iterations=1000) |
Optimize layout of primitives/objects to minimize collisions. | |
std::vector< std::pair< uint, uint > > | findCollisionsWithinDistance (const std::vector< uint > &query_UUIDs, const std::vector< uint > &target_UUIDs, float max_distance) |
Find collisions within a specified distance threshold. | |
void | setMaxCollisionDistance (float distance) |
Set maximum distance for collision detection queries. | |
float | getMaxCollisionDistance () const |
Get current maximum collision distance. | |
std::vector< uint > | filterGeometryByDistance (const helios::vec3 &query_center, float max_radius, const std::vector< uint > &candidate_UUIDs={}) |
Filter geometry by spatial proximity for efficient collision detection. | |
bool | findNearestPrimitiveDistance (const helios::vec3 &origin, const helios::vec3 &direction, const std::vector< uint > &candidate_UUIDs, float &distance, helios::vec3 &obstacle_direction) |
Determine the distance to the nearest primitive in any direction, filtered by direction component. | |
bool | findNearestSolidObstacleInCone (const helios::vec3 &apex, const helios::vec3 &axis, float half_angle, float height, const std::vector< uint > &candidate_UUIDs, float &distance, helios::vec3 &obstacle_direction, int num_rays=64) |
Find the nearest solid obstacle within a cone using ray casting. | |
bool | findNearestSolidObstacleInCone (const helios::vec3 &apex, const helios::vec3 &axis, float half_angle, float height, const std::vector< uint > &candidate_UUIDs, const std::vector< uint > &plant_primitives, float &distance, helios::vec3 &obstacle_direction, int num_rays=64) |
Find nearest solid obstacle in cone with tree identification for per-tree BVH optimization. | |
void | buildBVH (const std::vector< uint > &UUIDs={}) |
Build or rebuild the BVH acceleration structure. | |
void | updateBVH (const std::vector< uint > &UUIDs, bool force_rebuild=false) |
Efficiently update BVH with new geometry (avoids full rebuild when possible) | |
void | setStaticGeometry (const std::vector< uint > &UUIDs) |
Mark specific geometry as static (will be cached for efficiency) | |
void | rebuildBVH () |
Force a complete rebuild of the BVH. | |
void | disableAutomaticBVHRebuilds () |
Disable automatic BVH rebuilds (caller must manually manage rebuilds) | |
void | enableAutomaticBVHRebuilds () |
Enable automatic BVH rebuilds (default behavior) | |
void | enableHierarchicalBVH () |
Enable hierarchical BVH with separate static and dynamic geometry. | |
void | disableHierarchicalBVH () |
Disable hierarchical BVH (use single unified BVH) | |
void | buildStaticBVH () |
Build static BVH for obstacles and non-growing geometry. | |
void | enableTreeBasedBVH (float isolation_distance=5.0f) |
Enable tree-based BVH isolation for spatially separated trees. | |
void | disableTreeBasedBVH () |
Disable tree-based BVH isolation. | |
bool | isTreeBasedBVHEnabled () const |
Check if tree-based BVH isolation is enabled. | |
void | initializeObstacleSpatialGrid () |
Initialize spatial grid for fast static obstacle lookups. | |
void | registerTree (uint tree_object_id, const std::vector< uint > &tree_primitives) |
Register a tree object for per-tree BVH isolation. | |
void | setStaticObstacles (const std::vector< uint > &obstacle_primitives) |
Set static obstacle geometry for per-tree collision detection. | |
std::vector< uint > | getRelevantGeometryForTree (const helios::vec3 &query_position, const std::vector< uint > &query_primitives={}, float max_distance=15.0f) |
Get relevant geometry for tree-based collision detection. | |
bool | isBVHValid () const |
Check if BVH is valid and up-to-date. | |
void | enableGPUAcceleration () |
Enable GPU acceleration for collision detection. | |
void | disableGPUAcceleration () |
Disable GPU acceleration (use CPU-only algorithms) | |
bool | isGPUAccelerationEnabled () const |
Check if GPU acceleration is enabled. | |
void | disableMessages () |
Disable console output messages. | |
void | enableMessages () |
Enable console output messages. | |
size_t | getPrimitiveCount () const |
Get the number of primitives in the BVH. | |
void | getBVHStatistics (size_t &node_count, size_t &leaf_count, size_t &max_depth) const |
Get BVH statistics. | |
Static Public Member Functions | |
static int | selfTest (int argc, char **argv) |
Self-test routine to verify plugin functionality. | |
Static Public Attributes | |
static constexpr size_t | WARP_SIZE = 32 |
Ray streaming for efficient GPU processing Processes multiple rays simultaneously for better GPU utilization. | |
static constexpr size_t | RAY_BATCH_SIZE = 1024 |
Optimal batch size for ray processing. | |
Class for GPU-accelerated collision detection and spatial queries in Helios.
The CollisionDetection class provides efficient algorithms for:
Definition at line 34 of file CollisionDetection.h.
|
strong |
BVH optimization modes for performance improvements.
Enumerator | |
---|---|
SOA_UNCOMPRESSED | Structure-of-Arrays, full precision. |
Definition at line 367 of file CollisionDetection.h.
|
explicit |
Constructor for CollisionDetection class.
[in] | context | Pointer to the Helios context |
Definition at line 67 of file CollisionDetection.cpp.
CollisionDetection::~CollisionDetection | ( | ) |
Destructor for CollisionDetection class.
Definition at line 117 of file CollisionDetection.cpp.
void CollisionDetection::buildBVH | ( | const std::vector< uint > & | UUIDs = {} | ) |
Build or rebuild the BVH acceleration structure.
[in] | UUIDs | Optional vector of specific UUIDs to include (empty = all primitives) |
Definition at line 323 of file CollisionDetection.cpp.
void CollisionDetection::buildStaticBVH | ( | ) |
Build static BVH for obstacles and non-growing geometry.
Builds the static BVH using geometry set by setStaticGeometry(). Should be called after enabling hierarchical BVH and setting static geometry.
Definition at line 527 of file CollisionDetection.cpp.
void CollisionDetection::calculateGridIntersection | ( | const helios::vec3 & | grid_center, |
const helios::vec3 & | grid_size, | ||
const helios::int3 & | grid_divisions, | ||
const std::vector< uint > & | UUIDs = {} |
||
) |
Calculate which primitives fall within a 3D grid.
[in] | grid_center | Center point of the 3D grid |
[in] | grid_size | Size of the grid in x, y, z dimensions |
[in] | grid_divisions | Number of divisions in x, y, z dimensions |
[in] | UUIDs | Optional vector of specific UUIDs to test (empty = all primitives) |
Definition at line 2083 of file CollisionDetection.cpp.
void CollisionDetection::calculateRayPathLengthsDetailed | ( | const helios::vec3 & | grid_center, |
const helios::vec3 & | grid_size, | ||
const helios::int3 & | grid_divisions, | ||
const std::vector< helios::vec3 > & | ray_origins, | ||
const std::vector< helios::vec3 > & | ray_directions, | ||
std::vector< HitResult > & | hit_results | ||
) |
Enhanced ray path length calculations with detailed statistics.
[in] | grid_center | Center point of the 3D voxel grid |
[in] | grid_size | Size of the grid in x, y, z dimensions |
[in] | grid_divisions | Number of divisions in x, y, z dimensions |
[in] | ray_origins | Vector of ray origin points |
[in] | ray_directions | Vector of ray direction vectors (should be normalized) |
[out] | hit_results | Vector of detailed hit results for each ray |
Definition at line 381 of file CollisionDetection_RayTracing.cpp.
std::vector< std::vector< CollisionDetection::HitResult > > CollisionDetection::calculateVoxelPathLengths | ( | const helios::vec3 & | scan_origin, |
const std::vector< helios::vec3 > & | ray_directions, | ||
const std::vector< helios::vec3 > & | voxel_centers, | ||
const std::vector< helios::vec3 > & | voxel_sizes | ||
) |
Calculate ray path lengths through individual voxels for LiDAR processing.
[in] | scan_origin | Single vec3 LiDAR scanner position |
[in] | ray_directions | Vector of normalized ray directions (10K-10M rays) |
[in] | voxel_centers | Vector of voxel center positions (8-1000 voxels) |
[in] | voxel_sizes | Vector of voxel dimensions (width,height,depth) |
This method extends performGridRayIntersection to handle individual voxels with specific centers and sizes. Uses ray-AABB intersection with path_length = t_max - max(0, t_min) for each intersection. Performance target: 1M rays × 100 voxels in <2 seconds with OpenMP parallelization.
Definition at line 299 of file CollisionDetection_RayTracing.cpp.
void CollisionDetection::calculateVoxelRayPathLengths | ( | const helios::vec3 & | grid_center, |
const helios::vec3 & | grid_size, | ||
const helios::int3 & | grid_divisions, | ||
const std::vector< helios::vec3 > & | ray_origins, | ||
const std::vector< helios::vec3 > & | ray_directions | ||
) |
Calculate ray path lengths and transmission statistics for a voxel grid.
[in] | grid_center | Center point of the 3D voxel grid |
[in] | grid_size | Size of the grid in x, y, z dimensions |
[in] | grid_divisions | Number of divisions in x, y, z dimensions |
[in] | ray_origins | Vector of ray origin points |
[in] | ray_directions | Vector of ray direction vectors (should be normalized) |
Definition at line 3051 of file CollisionDetection.cpp.
CollisionDetection::HitResult CollisionDetection::castRay | ( | const helios::vec3 & | origin, |
const helios::vec3 & | direction, | ||
float | max_distance = -1.0f , |
||
const std::vector< uint > & | target_UUIDs = {} |
||
) |
Cast a single ray with simplified parameters.
[in] | origin | Ray origin point |
[in] | direction | Ray direction vector (should be normalized) |
[in] | max_distance | Maximum ray distance (negative = infinite) |
[in] | target_UUIDs | Target primitive UUIDs (empty = all primitives) |
Definition at line 80 of file CollisionDetection_RayTracing.cpp.
CollisionDetection::HitResult CollisionDetection::castRay | ( | const RayQuery & | ray_query | ) |
Cast a single ray and return detailed intersection information.
[in] | ray_query | Ray parameters (origin, direction, max distance, target UUIDs) |
Definition at line 76 of file CollisionDetection_RayTracing.cpp.
std::vector< CollisionDetection::HitResult > CollisionDetection::castRays | ( | const std::vector< RayQuery > & | ray_queries, |
RayTracingStats * | stats = nullptr |
||
) |
Cast multiple rays in batch for improved performance.
[in] | ray_queries | Vector of ray parameters |
[out] | stats | Optional ray-tracing statistics |
Definition at line 210 of file CollisionDetection_RayTracing.cpp.
std::vector< CollisionDetection::HitResult > CollisionDetection::castRaysOptimized | ( | const std::vector< RayQuery > & | ray_queries, |
RayTracingStats * | stats = nullptr |
||
) |
Cast rays using optimized Structure-of-Arrays BVH layout.
[in] | ray_queries | Vector of ray parameters |
[out] | stats | Optional ray-tracing statistics |
Definition at line 442 of file CollisionDetection_RayTracing.cpp.
void CollisionDetection::clearVoxelData | ( | ) |
Clear all voxel ray statistics data.
Definition at line 3247 of file CollisionDetection.cpp.
void CollisionDetection::disableAutomaticBVHRebuilds | ( | ) |
Disable automatic BVH rebuilds (caller must manually manage rebuilds)
Definition at line 474 of file CollisionDetection.cpp.
void CollisionDetection::disableGPUAcceleration | ( | ) |
Disable GPU acceleration (use CPU-only algorithms)
Definition at line 720 of file CollisionDetection.cpp.
void CollisionDetection::disableHierarchicalBVH | ( | ) |
Disable hierarchical BVH (use single unified BVH)
Definition at line 487 of file CollisionDetection.cpp.
void CollisionDetection::disableMessages | ( | ) |
Disable console output messages.
Definition at line 731 of file CollisionDetection.cpp.
void CollisionDetection::disableTreeBasedBVH | ( | ) |
Disable tree-based BVH isolation.
Definition at line 4170 of file CollisionDetection.cpp.
void CollisionDetection::enableAutomaticBVHRebuilds | ( | ) |
Enable automatic BVH rebuilds (default behavior)
Definition at line 478 of file CollisionDetection.cpp.
void CollisionDetection::enableGPUAcceleration | ( | ) |
Enable GPU acceleration for collision detection.
Definition at line 707 of file CollisionDetection.cpp.
void CollisionDetection::enableHierarchicalBVH | ( | ) |
Enable hierarchical BVH with separate static and dynamic geometry.
Definition at line 482 of file CollisionDetection.cpp.
void CollisionDetection::enableMessages | ( | ) |
Enable console output messages.
Definition at line 735 of file CollisionDetection.cpp.
void CollisionDetection::enableTreeBasedBVH | ( | float | isolation_distance = 5.0f | ) |
Enable tree-based BVH isolation for spatially separated trees.
[in] | isolation_distance | Spatial distance threshold for tree isolation |
When enabled, creates separate BVHs for each tree object that are spatially separated by at least isolation_distance. This provides linear scaling for scenarios with multiple non-interacting trees.
Definition at line 4165 of file CollisionDetection.cpp.
std::vector< uint > CollisionDetection::filterGeometryByDistance | ( | const helios::vec3 & | query_center, |
float | max_radius, | ||
const std::vector< uint > & | candidate_UUIDs = {} |
||
) |
Filter geometry by spatial proximity for efficient collision detection.
[in] | query_center | Center point for spatial filtering |
[in] | max_radius | Maximum radius for including geometry |
[in] | candidate_UUIDs | Optional list of candidate UUIDs (empty = all geometry) |
Definition at line 3001 of file CollisionDetection.cpp.
std::vector< uint > CollisionDetection::findCollisions | ( | const std::vector< uint > & | primitive_UUIDs, |
const std::vector< uint > & | object_IDs, | ||
bool | allow_spatial_culling = true |
||
) |
Find collisions between primitives and compound objects.
[in] | primitive_UUIDs | Vector of primitive UUIDs to test |
[in] | object_IDs | Vector of compound object IDs to test against |
[in] | allow_spatial_culling | If true, use tree-based BVH spatial culling for efficiency (default: true) |
Definition at line 189 of file CollisionDetection.cpp.
std::vector< uint > CollisionDetection::findCollisions | ( | const std::vector< uint > & | query_UUIDs, |
const std::vector< uint > & | query_object_IDs, | ||
const std::vector< uint > & | target_UUIDs, | ||
const std::vector< uint > & | target_object_IDs, | ||
bool | allow_spatial_culling = true |
||
) |
Find collisions restricting both query and target geometry.
[in] | query_UUIDs | Vector of primitive UUIDs to test for collisions |
[in] | query_object_IDs | Vector of object IDs to test for collisions |
[in] | target_UUIDs | Vector of primitive UUIDs to test against (empty = all primitives) |
[in] | target_object_IDs | Vector of object IDs to test against (empty = all objects) |
[in] | allow_spatial_culling | If true, use tree-based BVH spatial culling for efficiency (default: true) |
Definition at line 213 of file CollisionDetection.cpp.
std::vector< uint > CollisionDetection::findCollisions | ( | const std::vector< uint > & | UUIDs, |
bool | allow_spatial_culling = true |
||
) |
Find all primitives/objects that collide with any of the given primitives.
[in] | UUIDs | Vector of query primitive UUIDs |
[in] | allow_spatial_culling | If true, use tree-based BVH spatial culling for efficiency (default: true) |
Definition at line 127 of file CollisionDetection.cpp.
std::vector< uint > CollisionDetection::findCollisions | ( | uint | UUID, |
bool | allow_spatial_culling = true |
||
) |
Find all primitives/objects that collide with a given primitive.
[in] | UUID | Unique identifier of the query primitive |
[in] | allow_spatial_culling | If true, use tree-based BVH spatial culling for efficiency (default: true) |
Definition at line 123 of file CollisionDetection.cpp.
std::vector< std::pair< uint, uint > > CollisionDetection::findCollisionsWithinDistance | ( | const std::vector< uint > & | query_UUIDs, |
const std::vector< uint > & | target_UUIDs, | ||
float | max_distance | ||
) |
Find collisions within a specified distance threshold.
[in] | query_UUIDs | Vector of primitive UUIDs to test for collisions |
[in] | target_UUIDs | Vector of primitive UUIDs to test against |
[in] | max_distance | Maximum distance for collision consideration |
Definition at line 2927 of file CollisionDetection.cpp.
bool CollisionDetection::findNearestPrimitiveDistance | ( | const helios::vec3 & | origin, |
const helios::vec3 & | direction, | ||
const std::vector< uint > & | candidate_UUIDs, | ||
float & | distance, | ||
helios::vec3 & | obstacle_direction | ||
) |
Determine the distance to the nearest primitive in any direction, filtered by direction component.
[in] | origin | Origin location from which to search |
[in] | direction | Unit direction vector to filter "forward" surfaces (dot product > 0) |
[in] | candidate_UUIDs | Vector of primitive UUIDs to consider for intersection |
[out] | distance | Distance to the nearest primitive (only valid if return is true) |
[out] | obstacle_direction | Direction from origin to nearest obstacle (only valid if return is true) |
This method finds the nearest solid surface in any direction from the origin point, but only considers surfaces that are "in front" of the growth direction. A surface is considered "in front" if the vector from origin to the closest point on the surface has a positive dot product with the input direction vector.
Definition at line 2301 of file CollisionDetection.cpp.
bool CollisionDetection::findNearestSolidObstacleInCone | ( | const helios::vec3 & | apex, |
const helios::vec3 & | axis, | ||
float | half_angle, | ||
float | height, | ||
const std::vector< uint > & | candidate_UUIDs, | ||
const std::vector< uint > & | plant_primitives, | ||
float & | distance, | ||
helios::vec3 & | obstacle_direction, | ||
int | num_rays = 64 |
||
) |
Find nearest solid obstacle in cone with tree identification for per-tree BVH optimization.
Find the nearest solid obstacle within a cone-shaped detection volume with tree identification
This method is optimized for per-tree BVH systems by identifying the querying tree through plant primitive UUIDs, enabling efficient spatial filtering of collision candidates.
[in] | apex | Location of the cone apex (plant growth point) |
[in] | axis | Central axis direction of the cone (growth direction, normalized) |
[in] | half_angle | Half-angle of the cone in radians |
[in] | height | Height of the cone (detection distance) |
[in] | candidate_UUIDs | Vector of obstacle primitive UUIDs to check for collisions |
[in] | plant_primitives | Vector of plant primitive UUIDs to identify the querying tree |
[out] | distance | Distance to the nearest obstacle surface |
[out] | obstacle_direction | Direction vector from apex toward the nearest obstacle point |
[in] | num_rays | Number of rays to cast within the cone for sampling |
Definition at line 2476 of file CollisionDetection.cpp.
bool CollisionDetection::findNearestSolidObstacleInCone | ( | const helios::vec3 & | apex, |
const helios::vec3 & | axis, | ||
float | half_angle, | ||
float | height, | ||
const std::vector< uint > & | candidate_UUIDs, | ||
float & | distance, | ||
helios::vec3 & | obstacle_direction, | ||
int | num_rays = 64 |
||
) |
Find the nearest solid obstacle within a cone using ray casting.
[in] | apex | Cone apex position |
[in] | axis | Central axis of the cone (normalized) |
[in] | half_angle | Half-angle of cone in radians |
[in] | height | Maximum detection distance (cone height) |
[in] | candidate_UUIDs | Vector of primitive UUIDs to consider as solid obstacles |
[out] | distance | Distance to nearest obstacle (only valid if return is true) |
[out] | obstacle_direction | Direction from apex to nearest obstacle (only valid if return is true) |
[in] | num_rays | Number of rays to cast for detection (default: 64) |
This method casts rays within a cone to find the nearest solid obstacle. Unlike the soft collision avoidance, this uses a smaller cone angle and returns the exact distance to the nearest primitive surface using accurate ray-primitive intersection tests.
Definition at line 2394 of file CollisionDetection.cpp.
CollisionDetection::OptimalPathResult CollisionDetection::findOptimalConePath | ( | const helios::vec3 & | apex, |
const helios::vec3 & | centralAxis, | ||
float | half_angle, | ||
float | height = 0.0f , |
||
int | initialSamples = 256 |
||
) |
Find the radial direction through a cone toward the largest gap.
[in] | apex | Cone apex position |
[in] | centralAxis | Central axis of the cone |
[in] | half_angle | Half-angle of cone in radians |
[in] | height | Height of cone (0 = infinite) |
[in] | initialSamples | Number of initial uniform samples (default: 256) |
Definition at line 1640 of file CollisionDetection.cpp.
CollisionDetection::MemoryUsageStats CollisionDetection::getBVHMemoryUsage | ( | ) | const |
Definition at line 521 of file CollisionDetection_RayTracing.cpp.
CollisionDetection::BVHOptimizationMode CollisionDetection::getBVHOptimizationMode | ( | ) | const |
Get current BVH optimization mode.
Definition at line 432 of file CollisionDetection_RayTracing.cpp.
void CollisionDetection::getBVHStatistics | ( | size_t & | node_count, |
size_t & | leaf_count, | ||
size_t & | max_depth | ||
) | const |
Get BVH statistics.
[out] | node_count | Number of nodes in BVH |
[out] | leaf_count | Number of leaf nodes in BVH |
[out] | max_depth | Maximum depth of BVH |
Definition at line 743 of file CollisionDetection.cpp.
std::vector< std::vector< std::vector< std::vector< uint > > > > CollisionDetection::getGridCells | ( | ) |
Get all grid cells and their contained primitives.
Definition at line 2089 of file CollisionDetection.cpp.
std::vector< uint > CollisionDetection::getGridIntersections | ( | int | i, |
int | j, | ||
int | k | ||
) |
Get primitives in a specific grid cell.
[in] | i | Grid cell index in x-dimension |
[in] | j | Grid cell index in y-dimension |
[in] | k | Grid cell index in z-dimension |
Definition at line 2096 of file CollisionDetection.cpp.
float CollisionDetection::getMaxCollisionDistance | ( | ) | const |
Get current maximum collision distance.
Definition at line 2997 of file CollisionDetection.cpp.
size_t CollisionDetection::getPrimitiveCount | ( | ) | const |
Get the number of primitives in the BVH.
Definition at line 739 of file CollisionDetection.cpp.
std::vector< uint > CollisionDetection::getRelevantGeometryForTree | ( | const helios::vec3 & | query_position, |
const std::vector< uint > & | query_primitives = {} , |
||
float | max_distance = 15.0f |
||
) |
Get relevant geometry for tree-based collision detection.
[in] | query_position | Position of the collision query |
[in] | query_primitives | Primitives making the query (to identify source tree) |
Returns geometry that includes:
Definition at line 4287 of file CollisionDetection.cpp.
void CollisionDetection::getVoxelRayHitCounts | ( | const helios::int3 & | ijk, |
int & | hit_before, | ||
int & | hit_after, | ||
int & | hit_inside | ||
) | const |
Get ray classification counts for a voxel (for Beer's law calculations)
[in] | ijk | Voxel indices (i,j,k) |
[out] | hit_before | Number of rays that hit geometry BEFORE entering the voxel |
[out] | hit_after | Number of rays that hit geometry AFTER entering the voxel |
[out] | hit_inside | Number of rays that hit geometry INSIDE the voxel |
Definition at line 3184 of file CollisionDetection.cpp.
std::vector< float > CollisionDetection::getVoxelRayPathLengths | ( | const helios::int3 & | ijk | ) | const |
Get individual ray path lengths for a voxel (for Beer's law calculations)
[in] | ijk | Voxel indices (i,j,k) |
Definition at line 3208 of file CollisionDetection.cpp.
float CollisionDetection::getVoxelRbar | ( | const helios::int3 & | ijk | ) | const |
Get average ray propagation distance for a voxel.
[in] | ijk | Voxel indices (i,j,k) |
Definition at line 3155 of file CollisionDetection.cpp.
void CollisionDetection::getVoxelTransmissionProbability | ( | const helios::int3 & | ijk, |
int & | P_denom, | ||
int & | P_trans | ||
) | const |
Get transmission probability counts for a voxel.
[in] | ijk | Voxel indices (i,j,k) |
[out] | P_denom | Number of rays that reached this voxel |
[out] | P_trans | Number of rays that were transmitted through this voxel |
Definition at line 3105 of file CollisionDetection.cpp.
void CollisionDetection::initializeObstacleSpatialGrid | ( | ) |
Initialize spatial grid for fast static obstacle lookups.
Definition at line 4180 of file CollisionDetection.cpp.
bool CollisionDetection::isBVHValid | ( | ) | const |
Check if BVH is valid and up-to-date.
Definition at line 676 of file CollisionDetection.cpp.
bool CollisionDetection::isGPUAccelerationEnabled | ( | ) | const |
Check if GPU acceleration is enabled.
Definition at line 727 of file CollisionDetection.cpp.
bool CollisionDetection::isTreeBasedBVHEnabled | ( | ) | const |
Check if tree-based BVH isolation is enabled.
Definition at line 4176 of file CollisionDetection.cpp.
int CollisionDetection::optimizeLayout | ( | const std::vector< uint > & | UUIDs, |
float | learning_rate = 0.01f , |
||
int | max_iterations = 1000 |
||
) |
Optimize layout of primitives/objects to minimize collisions.
[in] | UUIDs | Vector of primitive/object UUIDs to optimize |
[in] | learning_rate | Step size for optimization algorithm |
[in] | max_iterations | Maximum number of optimization iterations |
Definition at line 2103 of file CollisionDetection.cpp.
std::vector< std::vector< std::vector< std::vector< CollisionDetection::HitResult > > > > CollisionDetection::performGridRayIntersection | ( | const helios::vec3 & | grid_center, |
const helios::vec3 & | grid_size, | ||
const helios::int3 & | grid_divisions, | ||
const std::vector< RayQuery > & | ray_queries | ||
) |
Perform grid-based ray intersection for voxel operations.
[in] | grid_center | Center point of the 3D grid |
[in] | grid_size | Size of the grid in x, y, z dimensions |
[in] | grid_divisions | Number of divisions in x, y, z dimensions |
[in] | ray_queries | Vector of rays to intersect with the grid |
Definition at line 260 of file CollisionDetection_RayTracing.cpp.
bool CollisionDetection::processRayStream | ( | RayStream & | ray_stream, |
RayTracingStats * | stats = nullptr |
||
) |
Cast ray packets using streaming interface for optimal GPU utilization.
[in] | ray_stream | Ray stream containing batched ray packets |
[out] | stats | Optional ray-tracing statistics |
Definition at line 479 of file CollisionDetection_RayTracing.cpp.
void CollisionDetection::rebuildBVH | ( | ) |
Force a complete rebuild of the BVH.
Definition at line 469 of file CollisionDetection.cpp.
void CollisionDetection::registerTree | ( | uint | tree_object_id, |
const std::vector< uint > & | tree_primitives | ||
) |
Register a tree object for per-tree BVH isolation.
[in] | tree_object_id | Object ID of the tree |
[in] | tree_primitives | Primitive UUIDs belonging to this tree |
Associates primitives with a specific tree for isolated collision detection. Should be called before plant growth begins.
Definition at line 4229 of file CollisionDetection.cpp.
|
static |
Self-test routine to verify plugin functionality.
Definition at line 27 of file selfTest.cpp.
void CollisionDetection::setBVHOptimizationMode | ( | BVHOptimizationMode | mode | ) |
Set BVH optimization mode for performance improvements.
[in] | mode | Optimization mode (SOA_UNCOMPRESSED) |
Definition at line 407 of file CollisionDetection_RayTracing.cpp.
void CollisionDetection::setMaxCollisionDistance | ( | float | distance | ) |
Set maximum distance for collision detection queries.
[in] | distance | Maximum distance threshold (meters) |
Definition at line 2989 of file CollisionDetection.cpp.
void CollisionDetection::setStaticGeometry | ( | const std::vector< uint > & | UUIDs | ) |
Mark specific geometry as static (will be cached for efficiency)
[in] | UUIDs | Vector of primitive UUIDs that represent static obstacles |
Definition at line 614 of file CollisionDetection.cpp.
void CollisionDetection::setStaticObstacles | ( | const std::vector< uint > & | obstacle_primitives | ) |
Set static obstacle geometry for per-tree collision detection.
[in] | obstacle_primitives | Primitive UUIDs that represent static obstacles |
These primitives will be included in ALL tree collision detection queries. Should include ground, buildings, and other permanent obstacles.
Definition at line 4272 of file CollisionDetection.cpp.
void CollisionDetection::setVoxelRbar | ( | float | r_bar, |
const helios::int3 & | ijk | ||
) |
Set average ray propagation distance for a voxel.
[in] | r_bar | Average ray propagation distance in meters |
[in] | ijk | Voxel indices (i,j,k) |
Definition at line 3126 of file CollisionDetection.cpp.
void CollisionDetection::setVoxelTransmissionProbability | ( | int | P_denom, |
int | P_trans, | ||
const helios::int3 & | ijk | ||
) |
Set transmission probability counts for a voxel.
[in] | P_denom | Number of rays that reached this voxel (denominator) |
[in] | P_trans | Number of rays that were transmitted through this voxel (numerator) |
[in] | ijk | Voxel indices (i,j,k) |
Definition at line 3086 of file CollisionDetection.cpp.
void CollisionDetection::updateBVH | ( | const std::vector< uint > & | UUIDs, |
bool | force_rebuild = false |
||
) |
Efficiently update BVH with new geometry (avoids full rebuild when possible)
[in] | UUIDs | Vector of UUIDs to include in BVH |
[in] | force_rebuild | Force complete rebuild even if geometry hasn't changed significantly |
Definition at line 560 of file CollisionDetection.cpp.
|
staticconstexpr |
Optimal batch size for ray processing.
Definition at line 135 of file CollisionDetection.h.
|
staticconstexpr |
Ray streaming for efficient GPU processing Processes multiple rays simultaneously for better GPU utilization.
CUDA warp size for optimal batching
Definition at line 134 of file CollisionDetection.h.