This document outlines the development plans and milestones for AsteroidShapeModels.jl. We use Semantic Versioning for version numbering.
We welcome contributions! Please see our Contributing Guidelines for details on how to get involved.
Please check our GitHub Issues for current tasks and discussions.
-
Full Integration of
ImplicitBVH.jl- Add performance benchmarks
- Unify ray intersection to BVH implementation only (#28)
- Remove legacy non-BVH implementation (#28)
- Remove custom
BoundingBoxtype in favor ofImplicitBVH's BBox (#28) - Add batch ray processing capability (#29)
- Unify face visibility graph to non-BVH implementation (cf.
build_face_visibility_graphfunction) (#30) - Unify illumination check to non-BVH implementation (cf.
isilluminatedfunction) (#31)
-
Illumination API Redesign
- Clarify self-shadowing and mutual-shadowing APIs (feature/batch-illumination)
- Add binary asteroid eclipse detection capability (feature/batch-illumination)
- Move BenchmarkTools to extras section
- Optimize memory allocations in
visibility.jl(experimental implementation in feature branch)
- Add comprehensive BVH usage documentation
- Update examples for new APIs
-
Improved
apply_eclipse_shadowing!API- New function signature with better parameter ordering
- Direct support for shape2's position (r₁₂) instead of transformation parameter
- Backward compatibility with deprecated old signature
-
Bug fixes
- Fixed critical coordinate transformation bug in eclipse detection (#42)
- Translation vector
t₁₂was incorrectly interpreted as position vector - This caused false TOTAL_ECLIPSE detections when shape2 was actually behind shape1
- Now correctly recovers shape2's position using
r₁₂ = -R₁₂' * t₁₂
- Translation vector
- Fixed sun position transformation in eclipse shadowing (include rotation + translation)
- Fixed critical coordinate transformation bug in eclipse detection (#42)
-
Face Maximum Elevation Precomputation
- Add
face_max_elevationsfield toShapeModelstruct (#46) - Implement
compute_face_max_elevations!function that calculates fromface_visibility_graph(#46) - Automatically compute
face_max_elevationswhenwith_face_visibility=truein constructor (#46) - Add
use_elevation_optimizationparameter to illumination APIs (default:true) (#46) - Optimize illumination checks using precomputed maximum elevations (#46)
- Verify illumination results match the original implementation (#46)
- Add comprehensive benchmarks to measure performance improvements (#47)
- Document the feature and its performance benefits (#47)
- Add
-
Improve
apply_eclipse_shadowing!code readability- Extract ray-sphere intersection tests into dedicated reusable functions (#45)
- Ensure consistency in results with previous implementation (#45)
-
Hierarchical Surface Roughness Model
- Support nested shape models for multi-scale surface representation
- Implement efficient traversal algorithms for nested structures
-
Complete Roughness Module
- Implement parallel sinusoidal trench generation
- Implement Random Gaussian surface generation
- Implement Fractal surface generation
- Add comprehensive test coverage for roughness features
- Remove deprecated
apply_eclipse_shadowing!signature that usest₁₂parameter- Old signature:
apply_eclipse_shadowing!(illuminated_faces, shape1, r☉₁, R₁₂, t₁₂, shape2) - Keep only the new signature with
r₁₂parameter introduced in v0.4.1
- Old signature:
- Remove
use_elevation_optimizationparameter from illumination APIs- Make face maximum elevation optimization the default implementation
- Unify parameter naming conventions across the package
- Create configuration structs for complex operations
- Improve error messages and validation
- Optimize
apply_eclipse_shadowing!memory allocations- Current implementation calls
intersect_ray_shapeper face, causing ~200 allocations per call - Implement true batch ray tracing with pre-allocated buffers for mutual shadowing
- Design
EclipseShadowingBufferstruct to hold reusable arrays - Implement filtering that preserves early-out optimizations
- Ensure zero allocations during runtime after initial buffer creation
- Current implementation calls
- Add basic multi-threading support using
Threads.jl
-
GPU Acceleration (Optional)
- Add optional CUDA.jl support for ray tracing
- Add optional AMDGPU.jl support
- Implement GPU-accelerated visibility calculations
- Use package extensions to keep GPU support optional
-
Advanced Parallelization
- Add distributed computing support via Distributed.jl
- Implement efficient work distribution for large models
- Add benchmarks for parallel performance
- Support for extremely large models (3M faces)
- Memory-efficient algorithms for resource-constrained environments
- Streaming processing for models that don't fit in memory
-
Machine Learning Integration
- If any.
-
Extended File Format Support
- PLY/STL/VTK/DSK format support