Lagrange
Loading...
Searching...
No Matches
OccludedInstanceSampler< Scalar, Index >::Impl Struct Reference
Inheritance diagram for OccludedInstanceSampler< Scalar, Index >::Impl:
ImplBase< Derived, Scalar, Index >

Public Member Functions

 Impl (Index num_instances)
 
Scalar instance_active_weight (size_t i) const
 
template<typename Vertices, typename Facets>
void process_instance (size_t i, uint64_t instance_rays, Scalar, const Vertices &vertices, const Facets &facets)
 
void end_batch ()
 
 OccludedInstanceSampler (const scene::SimpleScene< Scalar, Index, 3 > &scene, function_ref< bool(Index mesh_index, Index instance_index)> is_occluder=[](Index, Index) { return true;})
 Build the ray caster and per-instance precomputation.
 
 OccludedInstanceSampler (OccludedInstanceSampler &&) noexcept
 
OccludedInstanceSampleroperator= (OccludedInstanceSampler &&) noexcept
 
void run_batch (uint64_t num_rays)
 Run a batch distributing num_rays across instances not yet marked visible.
 
bool is_visible (Index global_index) const
 Whether the instance has been marked visible so far.
 
uint64_t num_rays_cast (Index global_index) const
 Rays cast so far for the instance.
 
Index num_instances () const
 Total number of instances.
 
- Public Member Functions inherited from ImplBase< Derived, Scalar, Index >
Derived & derived ()
 
const Derived & derived () const
 
size_t num_instances () const
 
Index mesh_index (size_t i) const
 
const auto & instance_transform (size_t i) const
 
Scalar compute_total_active_weight () const
 
void run_batch (uint64_t num_rays)
 

Public Attributes

std::vector< InstanceData< Scalar, Index > > m_instances
 
std::vector< Scalarm_instance_weights
 Inter-instance ray-distribution weight = cbrt(total area).
 
std::vector< std::atomic< bool > > m_is_visible
 
std::vector< std::atomic< uint64_t > > m_num_rays_cast
 
- Public Attributes inherited from ImplBase< Derived, Scalar, Index >
scene::SimpleScene< Scalar, Index, 3 > m_scene
 
RayCaster m_ray_caster
 

Member Function Documentation

◆ OccludedInstanceSampler()

OccludedInstanceSampler ( const scene::SimpleScene< Scalar, Index, 3 > & scene,
function_ref< bool(Index mesh_index, Index instance_index)> is_occluder = [](Index, Index) { return true; } )
explicit

Build the ray caster and per-instance precomputation.

Parameters
[in]sceneScene to process.
[in]is_occluderReturns whether (mesh_index, instance_index) should block rays. Non-occluder instances are still tested for visibility but do not contribute to the ray-caster scene.

Member Data Documentation

◆ m_instance_weights

template<typename Scalar, typename Index>
std::vector<Scalar> m_instance_weights

Inter-instance ray-distribution weight = cbrt(total area).

cbrt-of-sum, not sum-of-cbrt: an instance is a single shared Bernoulli trial, so softening is applied to the instance total rather than per facet.


The documentation for this struct was generated from the following file: