Renderer|SectorCluster|BspLeaf: SectorCluster routes BiasDigests to surfaces
Leaf-level granularity for routing change notifications is wrong as this assumes there is at least one surface geometry at each leaf. A binary space partition does not inherently mean a convex subspace will exist at the leaf. The subspace geometry is only fully defined (or inferred) at a higher level.
Previously leafs were given responsibility of routing bias lighting change digests because no other component had direct access to all of the internal surface geometries.
However, since the introduction of the half-edge data structure it is now easily possible to navigate to any element in the map geometry mesh from anywhere else (provided they are connected by at least one edge, of course).
This means this routing logic can now be placed in SectorCluster so that we can take advantage of the extra spatial knowledge.
Todo: SectorCluster should also be responsible for surface BiasIllum generation and management. Presently an illumination point is needed for every face => vertex interception in the half-edge data structure despite that many will never be used. SectorCluster has the necessary knowledge to avoid allocating illumination points for internal edges with no possible surface (inherently zero-area and will remain so, regardless of plane movement or map hack mappings).
Renderer|SectorCluster|BspLeaf: SectorCluster routes BiasDigests to surfaces
Leaf-level granularity for routing change notifications is wrong as
this assumes there is at least one surface geometry at each leaf.
A binary space partition does not inherently mean a convex subspace
will exist at the leaf. The subspace geometry is only fully defined
(or inferred) at a higher level.
Previously leafs were given responsibility of routing bias lighting
change digests because no other component had direct access to all
of the internal surface geometries.
However, since the introduction of the half-edge data structure it
is now easily possible to navigate to any element in the map geometry
mesh from anywhere else (provided they are connected by at least one
edge, of course).
This means this routing logic can now be placed in SectorCluster so
that we can take advantage of the extra spatial knowledge.
Todo: SectorCluster should also be responsible for surface BiasIllum
generation and management. Presently an illumination point is needed
for every face => vertex interception in the half-edge data structure
despite that many will never be used. SectorCluster has the necessary
knowledge to avoid allocating illumination points for internal edges
with no possible surface (inherently zero-area and will remain so,
regardless of plane movement or map hack mappings).