This document contains an unprioritized list of project ideas for things to work on in BRL-CAD. The list is far from comprehensive and meant not only be be just a list of ideas but also serve as a springboard for additional ideas. Much of the detail on implementation approaches is intentionally not included as this is meant to be a high-level listing.

Similarly not covered by this document are any sense of priorities and task relationships so as not to get wrapped up in project vision but, rather, to help developers find a project that might pique their interest. Additionally, it's not within the scope of this document to cover why certain ideas are desirable or not, the complexity of various implementation approaches, nor does it explain how a particular idea would be favorably implemented. It is expected that all interested developers will integrate their work flow with existing developers to help create maintainable and complete code.


  • Implement a path tracer, radiosity renderer, or other global illumination model using BRL-CAD's ray-trace library (exists an incomplete work-in-proress as rtmlt)
  • Implement a geometry voxelizing ray-tracer (using librt) to generate voxel models from arbitrary BRL-CAD models
  • Create a 3D geometry browser graphical interface using a common graphics engine (e.g. OGRE, Open Scene Graph, Crystal Space)
  • Implement a CSG visualization tool for manipulating a model's CSG hierarchy
  • Create a ray-trace service daemon with a simple tcp communications interface (similar to remrt, but more of a persistent daemon)
  • Create a graphical front-end tool to all of the geometry analysis tools (g_qa, rtweight, rtarea, nirt, g_lint, etc)
  • Create a graphical visualization tool for analyzing, manipulating, and convertion raw data (1D and 2D datasets)
  • Implement or integrate a RenderMan-compliant interface (e.g. Pixie) to BRL-CAD's ray-trace library
  • Implement shader objects that utilize the Open Shading Language (OSL)
  • Implement an optical shader for the new "pixelated" military camouflage style
  • Implement a procedural geometry shader (similar to existing grass shader but more generalized)
  • Enhance ADRT to utilize BRL-CAD target geometry files natively
  • Implement a "point" primitive for high-performance point visualizations (related to particle systems)


  • Implement a (non-linear) sweep primitive (similar to extrude) that takes a primitive (2D or 3D), a path, and orientation(s) along that path
  • Implement a true 3D "wire-frame" primitive with parameters for specifying the wireframe type and thickness (i.e., so it's still solid geometry)
  • Implement an annotation primitive (similar to sketch objects) that can be tied to geometry, either fixed to the view or fixed orientation
  • Implement a generalized blend/fillet primitive (similar to metaballs)
  • Add support for parametric equations for geometry values as attributes or objects
  • Add support for enforced constraint values as attributes or objects
  • Implement an out-of-core (with prefetch, write-back, and compression) level set primitive
  • Implement a birail primitive (sweep a cross section across two 'rail' curves) for generating surfaces with a specified thickness
  • Implement/Enhance a skin primitive (similar to ARS, similar to birail) where the enclosed space is defined by outlines along a given (implicit or explicit) path
  • Implement a procedural geometry "meta-primitive" where there are user-defined shapes with parameters (e.g., a 'belt' primitive w/ two ell and one arb8)
  • Implement a Wallis's Conical Edge solid primitive (closing the two open sides flat)
  • Implement a Goursat's Surface primitive
  • Implement a Steiner Surface (Roman surface and/or Cross-Cap) primitive
  • Implement a Ring Cyclide primitive
  • Implement a Piriform (peg top) primitive
  • Implement a Cylindrical Wedge primitive
  • Implement a Heart Surface primitive
  • Implement a Quartoid or generalized Poweroid primitive
  • Implement a half-Eight Surface primitive
  • Implement a revolution primitive (similar to extrude) that takes a primitive (2D or 3D) and an angle of rotation

Geometry Processing

  • Implement a fast routine to evaluate BREP/NURBS used with CSG operations in real-time (consider integrating BOOLE or ESOLID)
  • Implement a fast routine to convert BREP/NURBS surfaces to triangles in real-time (i.e., tessellation of NURBS surfaces)
  • Add a volume, surface area, centroid, and medial axis routine to all primitives
  • Separate the bounding box and bounding sphere out of prep into separate routines per primitive
  • Create a SWIG interface to the MGED modeling commands, creating a single library for editing geometry in various scripting languages
  • Implement a "pull" or "unpush" routine for performing the opposite of a matrix "push" on geometry
  • Implement a 3D knapsack packing tool for optimally arranging geometry in a given space (using librt and 2005 SPM best paper research)
  • Write a geometry correction tool for detecting and correcting holes in BoT geometry (aka triangle meshes), possibly with feature reduction/suppression
  • Implement a high-performance generic CSG tree processing library providing transformations, tree contraction, null object detection, various traversals, cycle detection, etc.
  • Integrate and evaluate the GNU Triangulated Surface Library for NMG mesh processing
  • Implement a voxelization library where a model is interactively converted into a voxelized grid representation (using g_qa as a starting point)
  • Create a geometry processing library in C++ for reading, writing, and ray-tracing geometry (see Geometry Engine work in rt^3)
  • Create a geometry database daemon front-end that uses a revision control system (e.g. via libsvn) for storage and a simple tcp/ports based communication API (see Geometry Service work in rt^3)
  • Add boundary representation routines to all existing BRL-CAD primitives
  • Implement a reverse tessellation tool, going from a given geometry model (mesh, voxels, whatever) to primitives with CSG operations using a genetic algorithm approach

Data Processing

  • Write a digital elevation model (.dem) file converter for creating and exporting BRL-CAD terrain objects (i.e. DSP objects)
  • Evaluate, upgrade, and integrate enhancements to BRL-CAD that were implemented years ago by GSI (yet remain unreviewed)
  • Design and implement a unified image/data processing library (unify pix processing tools and converters)
  • Implement a 2D image composition tool for optimally combining multiple ray-trace images (e.g. multiple havoc views)
  • Write a molecular geometry tool for representing and visualizing molecules in standard formats (e.g. .pdb) as BRL-CAD geometry

Material Properties

  • Implement material objects for managing standard object propeties (e.g., density, material type, etc)
  • Integrate a physics interaction library (e.g. ODE, OPAL, Bullet, Tokamak) into a simulation framework tool (or mged or an engine like OGRE)
  • Create a materials database (web site) that allows for management of physical material types (density, mass, tensile strength, etc)


  • Create a compile-time interface for system-wide fixed-precision computations (e.g. using GMP C++ interface to override fastf_t)
  • Add a graphical user interface to the BRL-CAD Benchmark Suite (i.e. a GUI to "benchmark")
  • Design and populate a benchmark results database storing various system performance metrics
  • Create a system performance web site that provides a database of community-contributed BRL-CAD Benchmark results
  • Write a cross-platform command-line tool that reports requested system information (similar to sysctl, specific to BRL-CAD)
  • Implement CSG simplification and tree manipulation routines (tree contraction, NULL object detection, etc)
  • Optimize the .vol volumetric primitive's performance and robustness, add support for multiple regions per volume, integrate with Field3D
  • Set up a VAX 11/780 in simh, running a BSD, and throttling performance to match BRL-CAD's original VGR reference
  • Implement a table of contents record for the geometry database specification (i.e. v5 .g) that uses timestamp and/or md5 for fast directory building

Geometry Conversion

The following geometry converters happen to be semi-ordered in terms of most desired to less desired (but still very much desired)

  • STEP [exporter] (.step)
  • Collada (.dae)
  • X3D [importer] (.x3d)
  • AutoCAD drawings (.dwg)
  • G-Code (.nc)
  • Adobe 3D PDF [exporter] (.pdf)
  • Solidworks (.sat, .sldprt, .sldasm)
  • Parasolid/UGS (.x_b, .x_t)
  • POV-RAY (.pov)
  • Blender (.blend)
  • Universal 3D (.u3d)
  • Polygon [exporter] (.ply)
  • Sketchup (.skp, .skb)
  • VRML [importer] (.vrml)
  • 3D Studio Max (.3ds)
  • BZFlag (.bzw)
  • OpenGL [exporter] (OpenGL C sourcecode)
  • Alias Wavefront [importer] (.obj)
  • Rhino (.3dm)

Procedural Geometry

  • Write a tool to procedurally generate buildings (number of floors, building type, doors, beams, etc)
  • Write a tool for procedurally growing plants (e.g. using L-systems)
  • Write a tool for procedurally creating threaded bolts, screws, and nuts (enhanced mk_bolt)
  • Write a tool to procedurally modeling people (using profiles for age, gender, race characteristics)


  • Convert historic BRL-CAD documentation to Docbook format (manual pages, HTML pages, text documents)
  • Translate BRL-CAD documentation to other languages
  • Make an overview diagram of BRL-CAD's tool set
  • Write a concise tutorial introduction to BRL-CAD (less than 10 pages)
  • Write a manual page for tools that don't have one (more than a hundred to choose from)
  • Create a DoD Vulnerability/Lethality Modeling and Simulations industry diagram
  • Create a geometry representation comparisons diagram
  • Write a BRL-CAD primitives reference sheet
  • Write a BRL-CAD shaders reference sheet
  • Write a History of BRL-CAD
  • Write a guide for implementing new primitives in BRL-CAD
  • Write a tutorial for programming procedural geometry with BRL-CAD
  • Create a geometry conversion reference diagram
  • Write a specification for the next geometry storage representation system
  • Create an animation tutorial
  • Document all available commands in BRL-CAD as a concise quick reference sheet
  • Convert the BRL-CAD Tutorial Series to Docbook format

Geometry Modeling

  • undo (previous or infinite)
  • add matrix-edit and solid-edit modes respect a quasi-mode key toggle (so mouse bindings restore)
  • integrate rtwizard with an enhanced interface and fix any outstanding rtwizard functionality issues
  • implement and integrate support for contour design shuttlepro controller
  • implement and integrate support for griffen knobs input device
  • implement support for the SGI dials and button box input devices
  • BoT/mesh/polygonal editing (consider integrating the GNU Triangulated Surface Library)
  • BREP/NURBS editing
  • implement shaded displays (e.g. using OpenGL or OpenCSG)
  • implement variable LOD for the wireframe display
  • implement a snap-to command for edges, vertices, tangency
  • tear off menus
  • spreadsheet editing of material properties and codes
  • complete windows port
  • implement ability to save views in the geometry file
  • tab completion
  • enhance/rewrite geometry browser with more edit options, information panel, drag-and-drop, and better mouse control

Web Site Development

Project Infrastructure


Major Projects

The below items are unannotated projects (some of which are listed above or have tasks listed above that relate) that could take anywhere from several days to more than a year of effort to take to a polished state of completion.