The requirement for performing robust mesh hollowing on complex triangle models within a browser-based or Electron desktop environment introduces significant computational constraints. In the context of a modern CAD viewer utilizing Three.js and WebAssembly (WASM), the objective is to process meshes ranging from 10,000 to 200,000 triangles with a user-defined wall thickness of 0.5mm to 10mm. Achieving this in under 10 seconds on consumer-grade hardware without relying on GPU compute shaders necessitates a rigorous evaluation of asymptotic complexity and memory efficiency. Mesh hollowing, at its core, is a geometric operation that transforms a solid volume into a shell by generating an interior surface that is offset from the exterior boundary. The validity of this operation hinges on the ability to resolve self-intersections in the offset surface and maintain strict manifold topology for downstream processes such as 3D printing or further constructive solid geometry (CSG) operations.1
Hierarchical Approximation of Fast Winding Number Fields
Determining whether a point lies inside or outside a given geometry is a fundamental requirement for hollowing workflows. While standard ray-casting techniques are efficient for closed, manifold meshes, they frequently fail when encountering “dirty” CAD data containing holes, self-intersections, or triangle soups.3 The generalized winding number provides a robust solution to this problem by defining a continuous scalar field that reveals a fractional measure of “insideness” even for defective surfaces.3
Mathematical Foundation and Generalized Winding Numbers
For an oriented triangle mesh , the winding number at a query point is defined as the sum of signed solid angles subtended by each triangle at . Mathematically, this is expressed as:
In this formulation, represents the area of the spherical triangle formed by projecting triangle onto a unit sphere centered at .3 For a perfectly closed, watertight mesh, evaluates to 1 for all internal points and 0 for all external points. When the mesh is not watertight, the field varies smoothly between 0 and 1, allowing for a robust classification of space based on an isovalue (typically 0.5).3
Hierarchical O(N) Complexity Reduction
The direct computation of winding numbers for query points relative to triangles is an operation. For a high-resolution grid required in CAD applications (e.g., a voxel grid), this naive approach would require billions of solid angle calculations, far exceeding the 10-second performance budget on a CPU.3 The Barill et al. (2018) algorithm reduces this complexity to for precomputation and for evaluation by utilizing a tree-based approximation.3
The algorithm partitions the mesh triangles into a Bounding Volume Hierarchy (BVH). For clusters of triangles that are sufficiently distant from the query point , the individual solid angles are replaced with a single evaluation of a cluster-based expansion.3 Specifically, a first-order approximation uses the oriented area vector of the cluster:
where is the geometric center of the cluster. This approximation becomes increasingly accurate as the ratio of the cluster’s radius to the distance from decreases.3
Complexity and Performance Analysis for 100K Triangle Meshes
| Stage | Complexity | Execution Time (100K Triangles) | Memory Footprint |
| BVH Construction | 150ms – 300ms | ~20MB | |
| Cluster Precomputation | 40ms – 80ms | Negligible | |
| 1M Query Evaluations | 2.5s – 4.5s | ~8MB |
The hierarchical method allows for the generation of a signed distance field (SDF) or occupancy grid at interactive speeds on a single CPU thread. In an Electron environment, implementing this in C++ via WASM ensures that performance remains within striking distance of native code, effectively bypassing the overhead of JavaScript’s garbage collection and object representation.8
Practical Implementation and Pseudocode
Implementing the fast winding number requires a robust BVH where each node stores the aggregate area vector and center of mass for its children. The accuracy scale determines the threshold at which the tree is truncated for approximation.3
C++
// Pseudocode for Hierarchical Winding Number Evaluation
struct Node {
Vector3 center;
Vector3 area_vector;
float radius_sq;
Node* children;
bool is_leaf;
vector<Triangle> triangles;
};
float evaluate_winding_number(Vector3 q, Node* node, float beta) {
float dist_sq = (node->center – q).length_squared();
// Check if the node is far enough to approximate
if (!node->is_leaf && (node->radius_sq / dist_sq < beta)) {
Vector3 r = node->center – q;
float r_mag = sqrt(dist_sq);
return (node->area_vector.dot(r)) / (4.0 * PI * r_mag * r_mag * r_mag);
}
// Recurse for leaves or nearby nodes
if (node->is_leaf) {
float sum = 0;
for (const auto& tri : node->triangles) {
sum += compute_exact_solid_angle(q, tri);
}
return sum;
} else {
return evaluate_winding_number(q, node->children, beta) +
evaluate_winding_number(q, node->children, beta);
}
}
The accuracy scale is typically set between 0.5 and 2.0. Smaller values of increase accuracy but lead to more tree traversals, while larger values provide a 10-100x speedup with minimal approximation error, which is often acceptable for initial in-out classification during mesh hollowing.3
Robust Mesh Offset via Voxelized Minkowski Sums
A primary challenge in mesh hollowing is the generation of an interior surface that is guaranteed to be free of self-intersections. Traditional vertex-offset methods often fail in high-curvature regions where the surface “crashes” into itself. Minkowski sum-based approaches resolve this by treating the hollowing operation as a morphological dilation or erosion of a volume.1
Volumetric Representation and Morphological Operators
For a given mesh and a desired wall thickness , the hollowed result is the set difference between the original volume and a version of the volume eroded by . In morphological terms, a dilation by a sphere of radius is the Minkowski sum of the object and the sphere.1 Voxelized representations transform this continuous geometric problem into a discrete grid operation.10
Voxelized Minkowski sums offer three major advantages for CAD hollowing:
- Guaranteed Topology: By construction, the resulting isosurface extracted from the voxel grid cannot contain self-intersections that violate the manifold property.1
- Robustness to Degeneracies: The approach treats every triangle independently, making it immune to non-manifold edges or holes in the input mesh.
- Accuracy-Speed Trade-off: The resolution of the voxel grid directly controls the accuracy of the result, allowing users to choose between fast previews and high-precision manufacturing files.10
Bit-Packed Voxel Grids and Transposed Computation
Memory management is a critical factor for Electron applications. A uniform grid at resolution requires approximately 1GB of memory if stored as a 1-byte occupancy map, which can be problematic on limited consumer hardware.10 To optimize this, CAD hollowing algorithms often employ bit-packing (storing 64 voxels in a single uint64_t) and transposed computation strategies.1
In a bit-packed grid, dilation and erosion along the X-axis can be performed using bitwise shifts and logical OR/AND operations, significantly reducing CPU cycles. For the Y and Z axes, transposing the data structure allows these operations to maintain high cache locality.10
Performance and Implementation Metrics
| Voxel Resolution | Memory (Bit-Packed) | Dilation Time (CPU WASM) | Accuracy (Relative to 1000mm) |
| 2 MB | ~150ms | 0.4% | |
| 16 MB | ~800ms | 0.2% | |
| 128 MB | ~5s | 0.1% |
For a 100,000-triangle mesh, the voxelization step typically takes 1-3 seconds using an accelerated ray-caster like three-mesh-bvh, followed by a sub-second morphological erosion.10 The final step—extracting the offset surface—utilizes the Marching Cubes or Dual Contouring algorithm to recreate a triangle mesh from the voxel grid.1
Morphological Voxel Erosion Pseudocode
The following pseudocode demonstrates a 1D bitwise erosion which is the building block for the full 3D operation:
C++
// 1D bit-packed erosion for binary volumes
void erode_row(uint64_t* input, uint64_t* output, int width_in_words, int radius) {
for (int i = 0; i < width_in_words; ++i) {
uint64_t current = input[i];
// Erosion is the dual of dilation: invert, dilate, invert
uint64_t left_shift = (current << radius) | (input[i-1] >> (64 – radius));
uint64_t right_shift = (current >> radius) | (input[i+1] << (64 – radius));
output[i] = current & left_shift & right_shift;
}
}
This bit-level parallelism enables the CPU to process 64 voxels in a single instruction, making voxelized hollowing competitive with GPU-based approaches for resolutions up to .15
Self-Intersection Resolution in Vertex-Normal Offset Shells
While volumetric methods are robust, they often lose sharp geometric features and require high resolutions to capture fine details. An alternative approach is to explicitly offset the triangle mesh along vertex normals and then resolve the resulting self-intersections.13 This technique is standard in high-end CAD kernels but is notoriously difficult to implement robustly.20
The Jung-Shin Region Growing Algorithm
The algorithm proposed by Jung et al. (2004) avoids the complexity of full 3D Booleans by identifying the valid portions of the offset mesh through region growing and local sub-triangulation.19 The offset process begins by moving each vertex along its smoothed normal by the hollowing distance . In sharp concave regions, “spherical” and “cylindrical” mesh patches are inserted at vertices and edges to ensure the offset surface is continuous and covers the entire offset volume.19
The core of the algorithm is the classification of triangles into three states: valid, invalid, and partially valid.21
- Valid Triangles: Entirely on the exterior of the offset volume boundary.
- Invalid Triangles: Entirely contained within the interior of the self-intersecting loops.
- Partially Valid Triangles: Intersected by other triangles, meaning only a sub-region of the triangle is on the boundary.21
Recursive TTI Detection and Sub-triangulation
To identify intersections efficiently, the algorithm partitions the mesh into buckets (a spatial hash grid). The number of triangle-triangle intersection (TTI) tests is minimized by only testing triangles within the same or adjacent buckets.19 Once intersections are found, partially valid triangles are split using Constrained Delaunay Triangulation (CDT).
The sub-triangulation process follows three steps 19:
- Split the edges of the parent triangle at every point where an intersection segment meets the edge.
- Split the intersection segments themselves if they cross each other.
- Perform a 2D CDT using the split edges and segments as constraints.19
Valid Region Growing and “Crossing the River”
The algorithm identifies a “seed” triangle on the outer boundary, typically a triangle belonging to the convex hull or one that touches the mesh’s axis-aligned bounding box (AABB).19 From this seed, the valid region propagates to adjacent unvisited triangles. If an adjacent triangle is “partially valid,” the propagation enters the sub-triangular mesh.19
The “Crossing the River” phase occurs when the valid region reaches an intersection segment. The algorithm must then identify the counterpart triangle on the other side of the intersection and continue the growing process there, effectively skipping the invalid interior “folds” of the offset mesh.19
Complexity and Efficiency for CAD Models
| Task | Complexity | performance on 100K Triangles |
| Normal Smoothing and Offset | ~100ms | |
| Bucket Construction | ~200ms | |
| TTI Computation | 3s – 6s | |
| Region Growing and Stitching | ~1s |
This explicit approach is memory-efficient and preserves the exact surface discretization of the input mesh, but its robustness is highly dependent on the precision of the intersection calculations. In Electron/JS environments, using float64 for TTI is mandatory to avoid topological errors during the “river crossing” phase.13
Manifold Mesh Repair for CSG Input
For hollowing to succeed using CSG Booleans (subtracting an inner mesh from an outer mesh), both inputs must be strictly manifold. However, STL files and offset meshes often contain defects like boundary edges, T-junctions, and overlapping triangles that prevent standard CSG algorithms from correctly classifying “inside” versus “outside”.24
Topological vs. Geometric Manifoldness
The Manifold library by Emmett Lalish defines manifoldness based on topology rather than floating-point geometry. For a mesh to be topologically manifold, every edge of every triangle must be shared by exactly one other triangle edge, and the start and end vertices of those edges must be swapped (indicating consistent orientation).23 This definition is robust because topology is exact (represented by integers), while geometry is inexact (represented by floating-point).23
Core Repair Techniques for Hollowing
When preparing a mesh for hollowing Booleans, several repair operations are performed sequentially 25:
- Duplicate Polygon Removal: Identical triangles are deleted to prevent zero-volume shells.
- Vertex Merging: Coincident vertices (within an tolerance) are merged to close “cracks” or gaps in the STL.2
- T-Junction Resolution: If a vertex lies on the edge of another triangle, the edge is split to ensure a shared vertex exists, preventing numerical “leaking” during Boolean operations.25
- Symbolic Perturbation: This technique, used during the Boolean itself, handles exactly coplanar faces by virtually “nudging” the geometry to break ties in a consistent manner.23
The Manifold Library Workflow in Electron
The manifold-3d package on npm provides WASM bindings that are highly optimized for these tasks. It utilizes Smith’s approach to ensure that Boolean results are manifold by construction.2
JavaScript
// Example Workflow with Manifold-3d
import { Manifold } from ‘manifold-3d’;
async function hollowMesh(outerMeshGL, thickness) {
const manifold = await Manifold.init();
// 1. Convert Three.js geometry to Manifold format
// This step performs vertex merging and topological validation
const outer = new manifold.Manifold(outerMeshGL);
// 2. Generate an inner offset
// This typically uses vertex-normal displacement or a voxelized proxy
const inner = outer.offset(-thickness);
// 3. Perform CSG Subtraction
const hollowed = manifold.difference(outer, inner);
return hollowed.getMeshGL();
}
Manifold is notably faster than traditional BSP-based CSG libraries (like those used in OpenSCAD or JSCAD), often achieving speedups of up to 1000x due to its focus on topological kernels and parallelization.29 For a 100K triangle mesh, the difference operation typically completes in 1-3 seconds once the meshes are prepared.20
Adaptive SDF Grid Strategies
Generating a high-resolution signed distance field (SDF) for a mesh is a memory-intensive task. For CAD hollowing, most of the volume (the deep interior and distant exterior) is irrelevant; only the “narrow band” around the surface needs accurate distance values.31 Adaptive strategies like octrees and narrow-band level sets significantly reduce the number of required distance queries.1
Octree-Based Distance Discretization
An adaptive octree refines the grid resolution based on the local geometric complexity and proximity to the offset surface. A cell is split into eight children if and only if it potentially contains the target offset distance .
A cell is split if:
This hierarchical traversal ensures that high voxel density is only allocated where it is needed to define the boundary of the hollow shell. The octree also facilitates “transposed computation” where distance estimates to primitives (vertices, edges, faces) are updated lazily.
Narrow-Band Level Set Methods
Narrow-band methods restrict distance field updates to a thin shell of voxels (usually 3-6 voxels wide) around the zero-level set. This reduces the computational domain from to , where is the width of the band.31 In Electron, this is implemented using a hashed grid or a sparse voxel octree to store only the “active” voxels.12
Fast Marching vs. Fast Sweeping Algorithms
To propagate distances from the surface into the narrow band, two primary Eikonal equation solvers are used on the CPU 35:
| Metric | Fast Marching Method (FMM) | Fast Sweeping Method (FSM) |
| Complexity | ||
| Data Structure | Min-Heap Priority Queue | Simple Multi-pass Arrays |
| Parallelization | Difficult (strictly ordered) | Easy (sweep-based) |
| Accuracy | High (follows characteristics) | Good (but can be diffuse) |
FSM is generally preferred for consumer-grade hollowing tools because it can be implemented with minimal overhead in WASM. By sweeping the grid in eight directions (), the algorithm captures information propagating from all directions, resolving the distance field in a fixed number of passes.37
Fast Sweeping Algorithm Pseudocode for 3D Grids
C++
// 3D Fast Sweeping logic for distance fields
void fast_sweeping_3d(Grid& grid) {
// 8 sweep directions for 3D
for (int dx : {-1, 1})
for (int dy : {-1, 1})
for (int dz : {-1, 1}) {
sweep(grid, dx, dy, dz);
}
}
void sweep(Grid& grid, int dx, int dy, int dz) {
// Iterate through the grid in the specified direction
for (int i = (dx > 0? 0 : X-1); i >= 0 && i < X; i += dx)
for (int j = (dy > 0? 0 : Y-1); j >= 0 && j < Y; j += dy)
for (int k = (dz > 0? 0 : Z-1); k >= 0 && k < Z; k += dz) {
float d_i = grid.get(i-dx, j, k);
float d_j = grid.get(i, j-dy, k);
float d_k = grid.get(i, j, k-dz);
// Solve the quadratic Eikonal update local to this voxel
grid.set(i, j, k, solve_eikonal(d_i, d_j, d_k, voxel_size));
}
}
The nature of the Fast Sweeping Method makes it highly predictable for performance benchmarking. On a grid, FSM can compute the full narrow-band SDF in approximately 1-2 seconds on a single CPU thread.37
Practical Implementation and System Integration
For a production Electron/Three.js viewer, the optimal hollowing engine integrates several of the aforementioned approaches into a unified pipeline. The choice of algorithm often depends on the user’s specific constraints (e.g., speed vs. geometric precision).
Benchmarking the 10-Second Constraint
For a 100,000-triangle mesh, the target performance of <10 seconds is achievable through a hybrid approach:
| Workflow Stage | Recommended Algorithm | performance (100K Tri) | Word Complexity |
| Inside/Outside Classification | Fast Winding Number (Barill et al.) | 1.5s | |
| Interior Surface Generation | Voxel Erosion + Marching Cubes | 4s | |
| Self-Intersection Cleanup | Jung-Shin Region Growing | 5s | |
| Final Shelling (Boolean) | Manifold Library (WASM) | 2s |
A significant insight from current geometry processing research is that the bottleneck in web-based CAD is often the data serialization between the JavaScript main thread and the WASM worker.17 By using SharedArrayBuffer and keeping the mesh data entirely within the WASM memory space during the hollowing process, these overheads are minimized.17
Recommendations for Engineering Teams
- Prioritize Volumetric Methods for Rough Hollowing: For initial user previews, a voxel grid provides instant feedback and is immune to mesh defects.1
- Use Manifold for Final Output: When the user clicks “Export,” the Manifold library’s robust Booleans should be used to ensure the resulting STL is watertight and printable.2
- Implement Parallelism via Web Workers: While the prompt specifies no GPU compute, modern CPUs have 4-12 cores. Parallelizing the TTI detection and voxelization steps across multiple Web Workers can provide a 3-5x speedup, ensuring even 200,000-triangle meshes fall within the 10-second limit.17
- Leverage BVH Libraries: Libraries like three-mesh-bvh are essential for accelerating distance queries and ray-triangle intersections, reducing the time spent on spatial search from to .17
By carefully combining the robustness of winding numbers, the topological guarantees of the Manifold library, and the speed of bit-packed voxel operations, engineers can deliver industrial-grade hollowing capabilities within the constraints of a desktop Electron application. The future outlook for these algorithms involves deeper integration of machine-learning-based geometry repair and higher-order moments for winding number approximation, which promise even faster and more accurate results for increasingly complex CAD models.3
Works cited
- High-Resolution Volumetric Computation of Offset … – RWTH Aachen, accessed April 21, 2026, https://www.graphics.rwth-aachen.de/media/papers/EG08_Pavic_offset_041.pdf
- elalish/manifold: Geometry library for topological robustness – GitHub, accessed April 21, 2026, https://github.com/elalish/manifold
- Fast Winding Numbers for Soups and Clouds – Dynamic Graphics …, accessed April 21, 2026, https://www.dgp.toronto.edu/projects/fast-winding-numbers/fast-winding-numbers-for-soups-and-clouds-siggraph-2018-compressed-barill-et-al.pdf
- Winding Numbers on Discrete Surfaces – Nicole Feng, accessed April 21, 2026, https://nzfeng.github.io/research/WNoDS/WNoDS.pdf
- Surfacing Point Sets with Fast Winding Numbers – gradientspace, accessed April 21, 2026, http://www.gradientspace.com/tutorials/2018/9/14/point-set-fast-winding
- Leaps and Bounds: An Improved Point Cloud Winding Number Formulation for Fast Normal Estimation and Surface Reconstruction, accessed April 21, 2026, https://openaccess.thecvf.com/content/ICCV2025/papers/Koneputugodage_Leaps_and_Bounds_An_Improved_Point_Cloud_Winding_Number_Formulation_ICCV_2025_paper.pdf
- include/igl/fast_winding_number.h File Reference – libigl, accessed April 21, 2026, https://libigl.github.io/dox/fast__winding__number_8h.html
- An example that complies and runs the fast winding number for soups – GitHub, accessed April 21, 2026, https://github.com/GavinBarill/fast-winding-number-soups
- geometry-processing-js, accessed April 21, 2026, https://geometrycollective.github.io/geometry-processing-js/
- A GPU-Based Voxelization Approach to 3D Minkowski Sum Computation – Sara McMains, accessed April 21, 2026, https://mcmains.me.berkeley.edu/pubs/SPM2010LiMcMains.final.pdf
- CGAL 6.1.1 – 2D Minkowski Sums: User Manual, accessed April 21, 2026, https://doc.cgal.org/latest/Minkowski_sum_2/index.html
- Algebraic Adaptive Signed Distance Field on GPU, accessed April 21, 2026, https://iccvm.org/2023/papers/poster-8-258.pdf
- Robust and Feature-Preserving Offset Meshing – arXiv, accessed April 21, 2026, https://arxiv.org/html/2412.15564v1
- hash-wasm – NPM, accessed April 21, 2026, https://www.npmjs.com/package/hash-wasm
- Implementation of image dilation and erosion – Stack Overflow, accessed April 21, 2026, https://stackoverflow.com/questions/27279991/implementation-of-image-dilation-and-erosion
- Fast Morphological Image Processing Open-Source Extensions for GPU processing with CUDA – Diva-portal.org, accessed April 21, 2026, https://www.diva-portal.org/smash/get/diva2:981180/FULLTEXT01.pdf
- GitHub – gkjohnson/three-mesh-bvh: A BVH implementation to speed up raycasting and enable spatial queries against three.js meshes., accessed April 21, 2026, https://github.com/gkjohnson/three-mesh-bvh
- MeshLab, accessed April 21, 2026, https://www.meshlab.net/
- Self-intersection Removal in Triangular Mesh Offsetting – CAD Journal, accessed April 21, 2026, https://www.cad-journal.net/files/vol_1/CAD_1(1-4)_2004_477-484.pdf
- Mesh Offsetting · Issue #192 · elalish/manifold – GitHub, accessed April 21, 2026, https://github.com/elalish/manifold/issues/192
- (PDF) Self-intersection Removal in Triangular Mesh Offsetting – ResearchGate, accessed April 21, 2026, https://www.researchgate.net/publication/240754626_Self-intersection_Removal_in_Triangular_Mesh_Offsetting
- TransforMesh : A Topology-Adaptive Mesh-Based Approach to Surface Evolution, accessed April 21, 2026, https://perception.inrialpes.fr/Publications/2007/ZBH07/mesh_self_intersections.pdf
- Manifold Library · elalish/manifold Wiki – GitHub, accessed April 21, 2026, https://github.com/elalish/manifold/wiki/Manifold-Library/ee3eee76533de1223af38a45e1bc430223c71af1
- A Practical Guide to Polygon Mesh Repairing – Eurographics, accessed April 21, 2026, https://diglib.eg.org/bitstream/handle/10.2312/conf.EG2012.tutorials.t4/t4.pdf
- Repair meshes | Pixyz SDK, accessed April 21, 2026, https://www.pixyz-software.com/documentations/archives/sdk/2023.2/doc/functions/repairmeshes.html
- importing non-manifold meshes · elalish manifold · Discussion #471 – GitHub, accessed April 21, 2026, https://github.com/elalish/manifold/discussions/471
- Manifold Library · elalish/manifold Wiki – GitHub, accessed April 21, 2026, https://github.com/elalish/manifold/wiki/Manifold-Library
- Fix t-junction in mesh – Blender Stack Exchange, accessed April 21, 2026, https://blender.stackexchange.com/questions/27796/fix-t-junction-in-mesh
- Performance regression: Concave minkowski slow in Manifold mode · Issue #6297 – GitHub, accessed April 21, 2026, https://github.com/openscad/openscad/issues/6297
- Manifold Performance · elalish manifold · Discussion #383 – GitHub, accessed April 21, 2026, https://github.com/elalish/manifold/discussions/383
- A Narrow Band Level Set Method for Surface Extraction from Unstructured Point-based Volume Data, accessed April 21, 2026, https://d-nb.info/1214007244/34
- Narrow Band Methods for PDEs on Very Large Implicit Surfaces – Institute for Numerical Simulation, accessed April 21, 2026, https://ins.uni-bonn.de/media/public/publication-media/NeNiRuWh07.pdf?pk=997
- [2407.02950] A narrow band finite element method for the level set equation – arXiv, accessed April 21, 2026, https://arxiv.org/abs/2407.02950
- GALA: Geometry-Aware Local Adaptive Grids for Detailed 3D Generation – arXiv, accessed April 21, 2026, https://arxiv.org/html/2410.10037v1
- Fast marching method – Wikipedia, accessed April 21, 2026, https://en.wikipedia.org/wiki/Fast_marching_method
- A comparison of Fast Marching, Fast Sweeping and Fast Iterative Methods for the solution of the eikonal equation | Request PDF – ResearchGate, accessed April 21, 2026, https://www.researchgate.net/publication/261158367_A_comparison_of_Fast_Marching_Fast_Sweeping_and_Fast_Iterative_Methods_for_the_solution_of_the_eikonal_equation
- O(N) Implementation of the Fast Marching Algorithm, accessed April 21, 2026, http://pajarito.materials.cmu.edu/documents/O_N_fast_marching.pdf
- SDFs and Fast sweeping in JAX – Rohan’s blog, accessed April 21, 2026, https://rohangautam.github.io/blog/fast_sweeping/fastsweeping/
- Fast Matrix Math in JS 2: WASM – DEV Community, accessed April 21, 2026, https://dev.to/ndesmic/fast-matrix-math-in-js-2-wasm-3mbn
- Three-mesh-bvh: A plugin for fast geometry raycasting and spatial queries! – Resources, accessed April 21, 2026, https://discourse.threejs.org/t/three-mesh-bvh-a-plugin-for-fast-geometry-raycasting-and-spatial-queries/26394
- three-mesh-bvh – NPM, accessed April 21, 2026, https://www.npmjs.com/package/three-mesh-bvh
- Winding Clearness for Differentiable Point Cloud Optimization – arXiv, accessed April 21, 2026, https://arxiv.org/html/2401.13639v1
Staged Voxel-Level Deep Reinforcement Learning for 3D Medical Image Segmentation with Noisy Annotations – arXiv, accessed April 21, 2026, https://arxiv.org/html/2601.03875v1