Fact-checked by Grok 2 weeks ago

Binary space partitioning

Binary space partitioning (BSP) is a computational method for recursively subdividing a multi-dimensional into two convex half-spaces using as partitioning elements, with the entire structure represented as a . Each internal node in the BSP tree corresponds to a selected that divides the space, while the two child nodes represent the resulting subspaces on either side (typically labeled as "front" and "back" relative to the plane's orientation), and leaf nodes contain the final, undivided regions or associated geometric objects such as polygons. The concept of BSP originated in the late with early work on ordering for graphics by Schumacker et al., who introduced hierarchical partitioning for efficient rendering of complex scenes. It was formalized and popularized in 1980 by , Kedem, and Naylor, who developed the BSP tree algorithm specifically for solving the hidden surface removal problem in polygonal environments, enabling fast, viewpoint-dependent rendering through preprocessing of static . Subsequent advancements, such as those by Thibault and Naylor in 1987, extended BSP trees to support operations on polyhedra, allowing for robust representation and manipulation of solid objects via set operations like and . In , BSP trees are primarily applied to visible surface determination, where traversal from a given viewpoint yields a back-to-front ordering of polygons for the painter's , avoiding costly depth comparisons during rendering. They also facilitate ray tracing acceleration by enabling efficient intersection queries and shadow computation through spatial subdivision. Beyond graphics, BSP structures support in simulations and games by quickly localizing queries to relevant subspaces, motion planning in via in partitioned environments, and point location or in . Their efficiency stems from linear-time traversal for visibility and logarithmic query times in balanced trees, though construction can be costly at O(n^2) in the worst case for n objects, prompting ongoing research into optimal partitioning strategies.

Fundamentals

Definition and Purpose

Binary space partitioning (BSP) is a method for recursively subdividing a —typically three-dimensional scenes in or n-dimensional spaces in —into two convex sets using as partitions, resulting in a structure that organizes spatial data efficiently. This tree represents complex environments by breaking them down into simpler, non-overlapping convex subspaces, where each node corresponds to a partitioning hyperplane and leaf nodes contain scene elements like polygons or objects. The core purpose of BSP is to enable efficient processing of spatial relationships in applications such as rendering, visibility determination, and , by transforming computationally intensive operations—like determining which polygons are visible from a viewpoint—from O(n²) to linear through . By partitioning space into regions, BSP facilitates rapid culling of occluded elements and supports queries for object intersections or proximity, making it particularly valuable for in visual simulations where scenes involve thousands of polygons. In BSP, hyperplanes serve as the fundamental partitioning elements: each is an (n-1)-dimensional flat (e.g., a in or a line in ) that divides the ambient into two unbounded half-spaces—a positive (or front) half-space on one side and a negative (or back) half-space on the other—defined by the hyperplane's normal vector orientation. Objects or scene fragments are classified relative to the : those entirely in one half-space are assigned to the corresponding subtree, while intersecting objects are split along the and distributed to both subtrees, ensuring all regions remain and non-intersecting. The simplest BSP division follows a recursive process: select a splitting from the scene (often derived from an object's supporting plane), classify and partition all objects relative to it into front, back, and on-the-plane sets, then recurse on the front and back half-spaces until subspaces contain no more splittable elements or meet a termination . Conceptually, this can be outlined as:
function BuildBSP(objects, space):
    if objects is empty or space is trivial:
        return leaf [node](/page/Node) with objects
    else:
        select splitting_plane from objects
        front_objects, back_objects, on_plane = [partition](/page/Partition)(objects, splitting_plane)
        [node](/page/Node) = new [Node](/page/Node)(splitting_plane, on_plane)
        [node](/page/Node).front = BuildBSP(front_objects, positive_half_space)
        [node](/page/Node).back = BuildBSP(back_objects, negative_half_space)
        return [node](/page/Node)
This structure ensures the tree encodes complete spatial ordering for subsequent traversals.

Basic Structure

A binary space partitioning (BSP) tree is organized as a binary tree data structure, where each internal node corresponds to a splitting hyperplane that divides the associated subspace into two convex half-spaces: the positive (front) half-space and the negative (back) half-space. The left child subtree recursively partitions the positive half-space, while the right child subtree handles the negative half-space. Polygons or objects assigned to an internal node are classified relative to the splitting hyperplane: those lying entirely in the positive half-space are directed to the left subtree, those in the negative half-space to the right, and those that straddle the hyperplane are partitioned into fragments assigned to both subtrees. Leaf nodes in the BSP tree represent the finest level of subdivision and contain lists of indivisible elements, such as polygons or objects that reside entirely within the defined by the sequence of from the to that . These subspaces are guaranteed to be polytopes (or unbounded regions), as each splitting divides an existing region into two subregions. To illustrate, consider a simple BSP tree for partitioning a with line segments acting as hyperplanes (analogous to planes in ). The root node might select a vertical line as the initial splitter, dividing the plane into left and right half-planes; subsequent internal nodes then choose lines from the remaining segments to further subdivide one half-plane each, creating a where nodes bound small convex polygonal regions, with the tree's depth indicating the partitioning and balance influencing overall efficiency. The BSP tree's binary structure ensures that, for a balanced tree with n leaves, point-location queries or similar spatial operations traverse an average path length of O(\log n), providing efficient hierarchical organization for spatial data.

Historical Development

Origins in Computer Graphics

Binary space partitioning (BSP) emerged in the late 1960s as a technique for addressing hidden surface removal in 3D computer graphics, with significant early work aimed at improving rendering efficiency for complex scenes. In 1969, R. A. Schumacker and colleagues at developed early partitioning methods as part of a U.S. Air Force-funded project on visual simulation, using hyperplanes to divide space and accelerate the display of polygonal models in dynamic environments. This approach was specifically designed to handle visibility computations for large numbers of polygons, reducing the computational cost of determining which surfaces were occluded from the viewpoint. The initial context for BSP was solving visibility problems in , driven by demands from early systems and flight simulators, where rendering of detailed scenes was essential but hardware limitations made brute-force methods impractical. These applications required subdividing scenes into manageable regions to prioritize visible elements, marking a shift from exhaustive algorithms to hierarchical spatial organization. Research at the also contributed foundational ideas, including John Warnock's 1969 hierarchical area subdivision algorithm for hidden surface removal, which recursively partitioned the screen into regions to efficiently determine visible . Early implementations focused on clipping against partitioning planes and recursive subdivision, which proved effective for preprocessing static environments before integration into pipelines. A key advancement came in 1980, when Henry Fuchs, Zvi Kedem, and Bruce F. Naylor formalized the binary space partitioning tree at the , providing a structured representation for viewpoint-dependent ordering in 3D polygonal scenes. The evolution from general schemes to binary variants emphasized balanced tree structures for logarithmic-time queries, enhancing efficiency in determination and setting the stage for broader adoption in graphics hardware and software.

Adoption in Video Games

Binary space partitioning (BSP) saw its initial practical adoption in video games through John Carmack's pioneering implementation in Doom (1993), marking a shift from theoretical research to entertainment software. While developing the Super Nintendo port of , Carmack encountered BSP concepts and applied them to Doom's architecture, where the technique precomputed visibility by dividing level geometry into a of sectors during compilation. This allowed efficient front-to-back rendering of walls and sprites, simulating depth on limited 1990s hardware without requiring a full polygonal engine, thus enabling smooth performance at 35 frames per second on systems like the 486 processor. The method advanced significantly in Quake (1996), where id Software expanded BSP to support full 3D environments with curved surfaces, dynamic lighting, and portal culling integrated into the tree structure. By preprocessing maps with tools like QBSP to generate BSP files, the engine traversed the tree to determine visible surfaces, supporting software-based 3D acceleration and complex indoor levels without GPU reliance. This innovation was crucial for Quake's multiplayer deathmatch mode, rendering expansive, multi-level maps at interactive frame rates. Within id Software's workflow, BSP formed the foundation of engine architecture, dictating level compilation processes that optimized static geometry for traversal and , while shaping map editors like QuakeEd to enforce BSP-friendly designs. This emphasis on preprocessing influenced performance tuning, as deeper trees balanced visibility gains against traversal overhead, setting standards for subsequent id titles like (1997). BSP's influence extended beyond id, powering engines in titles such as (1998), where Valve's —derived from —used BSP files (version 30) to partition for efficient rendering and collision, facilitating narrative-driven first-person shooters with seamless level streaming. This widespread integration fueled the 1990s boom in the genre, as developers licensed or emulated BSP-based systems to achieve immersive experiences on consumer PCs, with over 10 million copies of Doom and sold by decade's end driving industry standards. Entering the 2000s, BSP's dominance in rendering waned as GPUs proliferated, with hardware features like , stencil tests, and occlusion queries offloading visibility computations from the CPU, allowing engines to handle millions of dynamic polygons without preprocessing. Techniques in modern engines shifted toward hybrid spatial structures like hierarchies for broader applicability in open-world games. Nonetheless, BSP persists in level design tools, exemplified by Unreal Engine's geometry brushes, which employ BSP for quick blockout and subtraction operations in prototyping complex environments.

Construction and Algorithms

Generating the BSP Tree

The generation of a binary space partitioning (BSP) tree begins with the full scene space containing an initial set of polygons and proceeds recursively to subdivide it into subspaces. The core , as introduced in the seminal work on visible surface generation, starts by selecting a splitting plane, typically derived from one of the input polygons. All polygons are then classified relative to this plane: those entirely on the positive side (front) are assigned to the front subspace, those on the negative side (back) to the back subspace, and coplanar polygons are stored at the or arbitrarily assigned to one side. Polygons that straddle the plane are fragmented into portions for each subspace, and the process recurses on the two resulting s until a termination condition is met, such as a maximum depth or a minimum number of polygons per subspace. Plane selection is critical to tree quality and influences both construction time and resulting fragmentation. Common strategies include random selection, where a small of polygons is chosen randomly and evaluated for , which can achieve expected O(n log n) time with appropriate heuristics in practice; surface-based selection, which uses the plane of an existing polygon to avoid introducing new hyperplanes and reduce splits; and heuristics approximating longest-edge partitioning, where the plane is chosen from the polygon with the longest to promote balanced divisions in lower dimensions or axis-aligned approximations. These approaches aim to minimize and the number of splits, with surface-based methods often prioritizing polygons that reduce conflicts (intersections with other planes) in a representation of the . Polygon splitting occurs when a intersects the selected , requiring it to be clipped into two fragments, one for each half-space. This involves testing each edge of the against the , defined by ax + by + cz + d = 0, where points with positive signed are front and negative are back. For an edge from o in \mathrm{dir} (to point p = o + \mathrm{dir}), the intersection parameter t is computed via the line-plane intersection formula: t = -\frac{n \cdot o + d}{n \cdot \mathrm{dir}} where n = (a, b, c) is the plane normal; if $0 \leq t \leq 1, the intersection lies on the edge, and new vertices are inserted to form the fragments. Coplanar edges are handled by assigning them wholly to one side, ensuring convexity is preserved. As a preprocessing phase for static scenes, BSP tree generation is performed offline, compiling the scene into the tree structure before runtime use. For balanced trees achieved via appropriate heuristics, the time complexity is O(n \log n), where n is the number of polygons, reflecting the logarithmic depth and linear work per level; worst-case complexity reaches O(n^2) with poor plane choices leading to excessive fragmentation. To ensure balance and avoid skewed trees that degrade query performance, various heuristics evaluate partition quality using cost functions. These often combine metrics for split count (to limit fragmentation), subtree size difference |IN - OUT| (to promote even distribution), and outdegree (number of polygons split by the plane), such as minimizing S \times \text{Outdegree} + |IN - OUT| where S is a weighting factor (e.g., 50–100) emphasizing reduced splits over perfect balance. Random sampling of candidates approximates optimal selection efficiently during construction.

Traversing the Tree

Traversal of a binary space partitioning (BSP) tree begins at the root node and proceeds recursively based on the position of the viewpoint relative to the splitting plane associated with the current node. The viewpoint is classified as being on the positive or negative half-space defined by the plane; if the viewpoint lies on the positive side, the negative (far) subtree is traversed first, followed by rendering the polygons coplanar with the node, and then the positive (near) subtree. Conversely, if the viewpoint is on the negative side, the positive subtree is traversed first, then the coplanar polygons, and finally the negative subtree. This ordering ensures that subtrees behind the splitting plane are processed before those in front, maintaining spatial coherence. This traversal strategy integrates seamlessly with the painter's algorithm for rendering opaque objects, producing a back-to-front order of polygons without requiring for depth resolution. By drawing distant surfaces first and overwriting them with nearer ones, the algorithm resolves visibility correctly for scenes represented by the tree, as each splitting separates the into independent regions where ordering is unambiguous. The recursive procedure can be expressed in as follows:
procedure TraverseBSP(node, viewpoint):
    if node is leaf:
        render leaf polygons
    else:
        left, right = classify_subtrees_relative_to_plane(node.plane, viewpoint)
        TraverseBSP(far_subtree, viewpoint)  # Traverse far side first
        render node.coplanar_polygons
        TraverseBSP(near_subtree, viewpoint)  # Then near side
where the far subtree is the one opposite to the viewpoint's half-space. For applications such as ray tracing or ray-object intersection queries, a variant of the traversal recurses only on subtrees intersected by the ray, pruning branches where the ray does not overlap with the cell's bounding volume. The ray is tested against each splitting plane to determine entry and exit points, prioritizing traversal of the closer intersection segment to maintain efficiency; both child subtrees are visited if the ray straddles the plane within numerical precision limits (e.g., an epsilon threshold). This approach reduces the number of primitive intersections by confining searches to relevant spatial regions. The of BSP tree is generally O(log n + k), where n is the number of nodes in the tree and k is the size of the output (e.g., the number of visible polygons or intersected objects), arising from the binary decision process at each level along the path of depth O(log n) plus processing the reported elements. Balanced BSP trees achieve this logarithmic height in expectation, enabling efficient runtime queries despite potentially higher preprocessing costs.

Applications

Rendering and Visibility Determination

Binary space partitioning (BSP) trees play a crucial role in visibility culling for by enabling the precomputation of potentially visible sets (PVS), which identify subsets of scene that may be visible from specific . In this approach, the BSP tree subdivides the scene into convex , typically along opaque surfaces like walls in architectural models. Adjacency between is determined through —non-opaque boundary regions—and is computed offline by tracing sightlines through portal sequences to find inter-cell connections, using techniques like on the cell adjacency graph. The resulting PVS for each cell is stored compactly, often as bit vectors, allowing rendering to process only the relevant and discard occluded portions, thus avoiding exhaustive visibility tests per frame. During BSP tree traversal for rendering, back-face culling is integrated to eliminate invisible polygons based on the viewer's position relative to each polygon's . Each splitting in the divides into front (positive) and back (negative) half-spaces; polygons are classified relative to these planes during preprocessing, with straddling polygons split to maintain convexity. Traversal proceeds recursively: if the viewer is in the front half-space, the back subtree is rendered first (painter's algorithm style, back-to-front), followed by the front subtree; the order reverses if in the back half-space. This ensures a correct visibility ordering without cycles, as the imposes a partial order on polygons, culling back-facing ones that cannot contribute to the final image. Portal rendering extends BSP visibility culling by treating portals as special frustum-defining planes that link subspaces, optimizing view-dependent rendering in complex environments like video games. In the Quake engine, for instance, portals clip the view frustum during traversal, recursively rendering only through visible portals while marking leaf nodes with PVS bitmasks to load and draw relevant sectors. This method combines with frustum culling to focus on adjacent, potentially visible areas, reducing overdraw in indoor scenes with many occluders. For dynamic scenes with moving objects or cameras, BSP trees are often hybridized with z-buffer (depth buffer) techniques to balance preprocessing costs and exact hidden surface removal. The BSP provides an initial coarse ordering and culling of large static portions, passing the remaining polygons to hardware-accelerated for precise depth testing and resolution of overlaps. This avoids the full O(n log n) sorting of naive methods while leveraging GPU efficiency for residuals, suitable for applications where full BSP re-traversal would be prohibitive. In terms of performance, BSP-based rendering reduces draw calls from O(n^2) complexity in naive depth-sorting algorithms to near-linear O(n) in practice for static worlds, as traversal visits each node once and culls subtrees efficiently. Precomputed PVS can achieve substantial reductions in processed geometry for narrow fields of view in walkthroughs, enabling interactive frame rates on era hardware; for example, in models with thousands of polygons, visibility computations limit rendering to 1-5% of the total scene area.

Collision Detection and Spatial Queries

Binary space partitioning (BSP) trees serve as hierarchies in systems, where the tree's nodes represent partitioned subspaces that enclose groups of objects, enabling efficient culling of irrelevant volumes during queries. In the broad-phase stage of , BSP trees accelerate the process by traversing the hierarchy to identify potential intersecting pairs, reducing the computational cost from O(n²) pairwise checks to logarithmic complexity, particularly in dynamic environments with moving objects. For instance, semi-adjusting BSP trees incorporate operators like split, merge, and balance to maintain efficiency amid object motion, demonstrating stable performance in simulations involving up to thousands of objects, such as falling spheres or chaotic systems, where they outperform methods like sweep-and-prune in cluttered scenes. Nearest neighbor searches leverage BSP trees by traversing from the root to relevant leaf nodes, pruning branches based on distance metrics to the query point, and scanning objects only in the pertinent subspaces. This approach is particularly effective in high-dimensional spaces, where self-customized BSP variants adapt the partitioning to the data distribution, achieving sublinear query times. For ray tracing intersections, relevant to detecting collisions along paths, rays are marched through the tree by computing intersections with splitting planes at each node, visiting only subspaces that the ray crosses, which minimizes object-ray tests compared to naive methods. In practice, this can reduce intersection computations by factors of 2 to 4 in complex scenes, as the arbitrary plane orientations in BSP trees better fit object geometries than axis-aligned alternatives. In physics simulations, BSP trees facilitate path planning by partitioning free space to query collision-free trajectories, allowing efficient checks for obstacles during motion computation. Similarly, in geographic systems (GIS), modified BSP trees support spatial joins and queries by organizing line segments and polygons into multi-scale structures, enabling the combination of datasets based on proximity or overlap. Common query types include point location, which achieves O(log n) time via traversal to identify the containing , and queries, which involve visiting multiple leaves corresponding to the query region, also in O(log n + k) time where k is the output size. These capabilities make BSP trees valuable for database-like spatial indexing beyond graphics, with linear storage complexity for real-world map data.

Extensions and Limitations

Variants and Modern Extensions

Binary space partitioning (BSP) has been adapted in various ways to address specific challenges in scene complexity, computational efficiency, and geometric flexibility. One prominent variant is the auto-partition BSP, where splitting hyperplanes are automatically selected as extensions of the input objects themselves, such as line segments or polygons, rather than requiring manual placement. This approach enables efficient construction without predefined level designs, making it suitable for procedural generation or dynamic scenes where the structure must be rebuilt on-the-fly to accommodate moving objects. For instance, in combinatorial geometry, auto-partitions ensure that each object lies entirely on one side or the other of the partition planes, leading to a perfect BSP tree of linear size for disjoint segments, though finding an optimal one is NP-hard. A widely used restricted variant of BSP is the kD-tree, which limits splitting hyperplanes to be axis-aligned, parallel to the coordinate axes, simplifying implementation and traversal while maintaining binary partitioning. This axis-aligned constraint reduces the degrees of freedom in plane selection, often alternating between dimensions (e.g., x, y, z) to balance the tree, and is particularly effective for ray tracing and in uniform or grid-like scenes. Unlike general BSP trees with arbitrary orientations, kD-trees avoid complex plane computations, enabling faster construction and lower memory overhead, though they may require more splits for highly irregular geometry. Seminal work highlights kD-trees as a special case of BSP, with construction guided by surface area heuristics to minimize traversal costs in rendering applications. Extensions to BSP for handling curved surfaces typically approximate them using piecewise linear facets that converge to the true surface through recursive subdivision, allowing standard planar partitions to represent like quadrics or NURBS. However, more advanced variants replace linear hyperplanes with algebraic surfaces of higher degree, such as quadrics, enabling quadratic partitioning that directly accommodates curved without excessive fragmentation. This algebraic approach partitions space using implicit equations (e.g., for spheres or cylinders), producing cells bounded by curved facets and supporting exact representations in applications like and ray tracing of non-polygonal scenes. Such methods maintain the structure but extend node representations to store algebraic coefficients, with traversal adapted via ray-surface intersection tests. Recent advancements have integrated BSP with machine learning for 3D shape analysis and reconstruction. For example, BSP-Net (2020) uses neural networks to learn BSP tree representations from point clouds or images, generating compact, watertight polygonal meshes via unsupervised convex decomposition. This approach leverages the hierarchical structure of BSP to produce low-poly models suitable for graphics and robotics, demonstrating improved efficiency over traditional voxel or point-based methods in tasks like shape approximation and rendering. For large-scale scenes in modern rendering engines, parallel BSP construction algorithms distribute the partitioning process across multiple processors or GPUs, significantly reducing build times for complex environments. These methods often employ task-parallel strategies, where initial spatial median splits are computed globally, followed by independent subtree construction on separate threads or cores, leveraging the tree's inherent divide-and-conquer nature. GPU-based implementations further accelerate this by parallelizing plane selection and polygon classification using compute shaders, achieving interactive build rates for dynamic updates. Research demonstrates speedups of up to 10x on multi-core systems for ray tracing preprocessors, with careful load balancing to handle uneven subtree sizes. Hybrid structures combining BSP with octrees address mixed environments, such as indoor-outdoor scenes, by using for detailed, irregular indoor partitions and for sparse outdoor voxelization. In these hybrids, an outer organizes large-scale terrain or open areas into cubic cells, while inner BSP trees refine enclosed spaces like buildings, enabling efficient and traversal across varying densities. -embedded BSPs, for example, integrate binary partitions within octree leaves to support precise Boolean operations on volumetric data, improving scalability for iterated in rendering pipelines. This combination leverages octrees' uniform subdivision for broad queries and BSP's flexibility for visibility and collision in constrained regions, as seen in parallel systems.

Advantages and Drawbacks

Binary space partitioning (BSP) excels in providing exact for static scenes by establishing a linear priority order of polygons through , eliminating the need for runtime distance calculations and enabling correct rendering from varying . This approach ensures precise handling without floating-point precision issues common in depth-based methods, as the ordering is determined discretely during preprocessing. Furthermore, BSP is efficient for partitions, as each splitting divides space into half-spaces, facilitating straightforward inside/outside tests and fast rendering once the is constructed. The preprocessing phase, however, incurs high computational cost due to recursive polygon splitting, with expected construction times of O(n² log n) in and potentially worse in for complex geometries. Polygon fragmentation during partitioning substantially increases vertex counts—sometimes quadratically in worst-case scenarios—leading to elevated memory usage, particularly for curved or intricate objects that must be approximated with convex polygons. BSP performs poorly with dynamic objects, as scene modifications necessitate full tree rebuilds, rendering it unsuitable for real-time updates without significant overhead.
Spatial StructureKey Advantages Relative to BSPKey Drawbacks Relative to BSP
OctreeSimpler and faster construction for uniform, grid-like spaces; lower memory for regular distributionsLess flexible for irregular geometries due to axis-aligned splits, resulting in blocky approximations; BSP superior for arbitrary, non-uniform scenes with polygon-defined planes
GPU-based Methods (e.g., Z-Buffer)Supports dynamic scenes without preprocessing; hardware-accelerated with no sorting for opaque objectsRelies on per-pixel depth comparisons prone to precision errors; lacks BSP's exact, viewpoint-independent ordering for static environments
Scalability challenges arise in BSP trees with high depth, where unbalanced partitioning can cause exponential growth in fragments, exacerbating memory demands; this is often mitigated by heuristics that select splitting planes to balance subtrees and minimize fragmentation. Overall, BSP is best suited for precompiled levels in applications like rendering and for static environments, but it is less appropriate for open-world scenarios involving frequent geometry changes.

References

  1. [1]
    On visible surface generation by a priori tree structures
    On visible surface generation by a priori tree structures · Teaching of tree data structures using microcomputer graphics · Optimal tree structures for group key ...
  2. [2]
    [PDF] Binary Space Partitions: Recent Developments
    Abstract. A binary space partition tree is a data structure for the rep- resentation of a set of objects in space. It found an increasing number of.
  3. [3]
    Set operations on polyhedra using binary space partitioning trees
    We introduce a new representation for polyhedra by showing how Binary Space Partitioning Trees (BSP trees) can be used to represent regular sets.Missing: tutorial | Show results with:tutorial
  4. [4]
    BSP Tree FAQ - People @EECS
    A Binary Space Partitioning (BSP) tree is a data structure that represents a recursive, hierarchical subdivision of n-dimensional space into convex subspaces.<|control11|><|separator|>
  5. [5]
    [PDF] A Tutorial on Binary Space Partitioning Trees - ResearchGate
    Hyperplanes always partition a region into two halfspaces regardless of the dimension. In 1D, they look like points since they are also 0D sets; the one ...
  6. [6]
    [PDF] STUDY FOR APPLYING COMPUTER-GENERATED IMAGES ... - DTIC
    Study for Applying Computer-Generated Images to Visual Simulation. 4- DESCRIPTIVE NOTES (Typ» el »perl mnd in chill» aaraaj. Final Report (January 1969 - July ...
  7. [7]
    None
    Error: Could not load webpage.<|separator|>
  8. [8]
    [PDF] Geometric Data Structures for Computer Graphics
    Any internal node v has one or more points inside Q(v). ... of a BSP node lies in the positive half-space and the left child in the negative half-space.
  9. [9]
    [PDF] A Visibility Algorithm for Hybrid Geometry - cs.Princeton
    We build the winged-pair data structure for any 3D model using a Binary Space Partition. (BSP) [15], a recursive binary split of 3D space into convex polyhedral ...Missing: origins | Show results with:origins
  10. [10]
    [PDF] A Multidisciplinary Survey of Visibility - People | MIT CSAIL
    binary space partitioning tree (see BSP), 41 bitangent 27, 30, 42, 51, 81 ... 4–15, NTIS AD-733 671, University of Utah, Computer Science Department, 1969.
  11. [11]
    How Much of a Genius-Level Move Was Using Binary Space ...
    Nov 6, 2019 · Binary space partitioning makes the VSD problem easier to solve by splitting a 3D scene into parts ahead of time. For now, you just need to ...
  12. [12]
    Doom Engine source code review - Fabien Sanglard
    Jan 13, 2010 · Splitter were selected in order to balance the BSP tree but also to limit the number of SEGS generated. The green bounding boxes are used later ...
  13. [13]
    Quake Source Code Review - Fabien Sanglard
    Mar 9, 2009 · Take care of the Rendition piece of the engine. In this part, the BSP/PVS is extensively used. This is also where a fork occurs in the code ...
  14. [14]
    Quake BSP/PVS/Lightmap Builder - Games
    From the README written by John Carmack: This is the source for the three utilties that a .map file passes through before it becomes a finished .bsp file.Missing: implementation | Show results with:implementation
  15. [15]
    [PDF] Modern Graphics Engine Design - NVIDIA
    KD tree or BSP tree can cope better by adjusting where the split planes go. Standard Quadtrees and Octrees don't do this, so require more levels. Variations ...
  16. [16]
    Geometry Brush Actors in Unreal Engine - Epic Games Developers
    Geometry Brushes, also known as Binary Space Partitioning (BSP) brushes, is Unreal Engine's tool for level construction.
  17. [17]
    On visible surface generation by a priori tree structures
    ON VISIBLE SURFACE GENERATION BY A PRIOri TREE STRUCTURES*. Henry Fuchs. University of North Carolina at Chapel Hill. Zvi M. Kedem. The University of Texas at ...
  18. [18]
    On Constructing Binary Space Partitioning Trees. - ResearchGate
    Abstract. Binary Space Partitioning Trees have several applications in computer graphics. We prove that there exist n-polygon problem instances with an O(n2) ...
  19. [19]
    Binary Space Partition Trees in 3d worlds
    Binary Space Partition Trees (or BSP trees for short) where introduced by Fuchs, Kedem, and Naylor around 1980. This graphics trio produced two papers ...
  20. [20]
    [PDF] A Tutorial on Binary Space Partitioning Trees (part of EG tutorial on ...
    The Binary Space Partitioning (BSP) tree algorithm was initially developed as an efficient method for ordering a set of polygons in order to solve the ...
  21. [21]
    [PDF] Ray Tracing with the BSP Tree
    We accomplish this by storing into each leaf node a flag for whether the node can use traversal based intersection and the depth of the splitting plane that ...
  22. [22]
    On visible surface generation by a priori tree structures
    On visible surface generation by a priori tree structures · Teaching of tree data structures using microcomputer graphics · Optimal tree structures for group key ...
  23. [23]
    [PDF] Visibility Preprocessing For Interactive Walkthroughs
    The binary space partition or BSP tree data structure [8] obviates the hidden-surface computation by producing a back-to-front order- ing of polygons from ...Missing: seminal | Show results with:seminal
  24. [24]
    (PDF) A Tutorial on Binary Space Partitioning Trees - ResearchGate
    In this paper we present such an algorithm, that takes as input a BSP-Tree representation for a polytope and produces a BRep as output. The difficulty in ...Missing: seminal | Show results with:seminal
  25. [25]
    [PDF] Self-Customized BSP Trees for Collision Detection - cs.Princeton
    In this paper we re-explore a classical structure used for collision detection - the binary space partitioning tree. ... Keywords: Collision detection, binary ...
  26. [26]
    [PDF] Broad-Phase Collision Detection Using Semi-Adjusting BSP-trees
    A proposal using this approach with Binary Space Partitioning (BSP-trees) ... Collision detection is one of the most studied problems in com- puter ...
  27. [27]
    Motion planning using binary space partitioning
    Insufficient relevant content. The provided URL (https://ieeexplore.ieee.org/document/174431) only contains a title and metadata without accessible full text or detailed information about the use of Binary Space Partitioning (BSP) in robotics path planning, key methods, or benefits for collision detection and spatial queries.
  28. [28]
    A modified binary space partitioning tree for geographic information ...
    The building of a BSP-tree: (a) 2D scene, (b) convex sub-spaces, (e) BSP-tree. Page 3. A modified binary space partitioning tree for GIS. Program BuildTree;.
  29. [29]
    [PDF] Finding Perfect Auto-Partitions is NP-hard∗
    We study a specific class of bsps, called auto- partitions and we prove that it is np-hard to find if a perfect auto-partition exists for a set of lines. 1 ...
  30. [30]
    [PDF] OPTIMAL BINARY SPACE PARTITIONS FOR SEGMENTS ... - Sci-Hub
    Auto-partitions must use a splitting line that contains a segment from S(R). Figure 1 illustrates the three types of bsps. Note that an auto-partition is only.
  31. [31]
    4.4 Kd-Tree Accelerator
    Two variations of BSP trees are kd-trees and octrees. A kd-tree simply restricts the splitting plane to be perpendicular to one of the coordinate axes; this ...
  32. [32]
    [PDF] A Tutorial on Binary Space Partitioning Trees - ResearchGate
    A Partitioning Tree is the recording of this process of recursive subdivision in the form of a binary tree of hyperplanes. Since there is no restriction on what ...
  33. [33]
    [PDF] Highly Parallel Fast KD-tree Construction for Interactive Ray Tracing ...
    A kd-tree is an axis-aligned BSP tree that splits the scene space using a cost function for the split position.
  34. [34]
    Fast Exact Booleans for Iterated CSG using Octree-Embedded BSPs
    We present octree-embedded BSPs, a volumetric mesh data structure suited for performing a sequence of Boolean operations (iterated CSG) efficiently.
  35. [35]
    Proposed hierarchical data structure based on the combination of ...
    Our scheme exploits not only task parallelism but also data parallelism during rendering by combining the hierarchical data structures (octree and parallel BSP ...