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.

Performance

  • Implement GPGPU boolean evaluation using OpenCL
  • Test and extend support for OpenCL GPGPU-based raytracing in LIBRT
  • Change rt* tools main ray dispatch to utilize bundled dispatching (consider Intel TBB)
  • Optimize performance of NURBS ray tracing
  • Implement std::thread or Intel TBB backend to LIBBU's parallelism interface
  • Implement plot and mesh caching
  • Implement robust Boolean evaluation of solid polygonal meshes
  • Create a compile-time interface for system-wide fixed-precision computations (e.g. using GMP C++ interface to override fastf_t)
  • Implement CSG simplification and tree manipulation routines (tree contraction, NULL object detection, etc)
  • Reimplement support for volumetric primitive. Addd support for multiple regions per volume, integrate with OpenVDB and/or Field3D
  • Set up a VAX 11/780 in simh, running a BSD, and throttling performance to match BRL-CAD's original VGR reference
  • Design and populate a benchmark results database storing various system performance metrics
  • Add a graphical user interface to the BRL-CAD Benchmark Suite (i.e. a GUI to "benchmark")
  • Create a system performance web site that provides a database of community-contributed BRL-CAD Benchmark results -->

Primitives

  • Implement a sweep primitive (similar to extrude, but non-linear) that takes an object, a path, and orientation/scale/transformations along that path
  • Implement a generalized blend/fillet primitive (similar to metaballs)
  • Implement a 3D "wire-frame" aka 'plot' primitive with parameters for type and thickness
  • Add support for parametric equations for geometry values as attributes or objects
  • Add support for enforced constraint values as attributes or objects
  • Implement a birail primitive (sweep a cross section across two 'rail' curves) for generating surfaces with a specified thickness
  • 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 Quartoid or generalized Poweroid primitive
  • Implement a half-Eight Surface primitive

Geometry Processing

  • Add a volume, surface area, centroid, and medial axis routine to all primitives
  • Separate bounding box and bounding sphere out of prep into separate routines per primitive
  • Implement routine to convert BREP/NURBS to triangles while ensuring preservation of solidity
  • Create a SWIG interface to the MGED modeling commands, creating a single library for editing geometry in various scripting languages
  • Write a geometry healing tool for detecting and correcting holes in triangle meshes (i.e., BoTs), 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 3D knapsack packing tool for optimally arranging geometry in a given space (using librt and 2005 SPM best paper research)
  • 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)

Data Processing

  • Extend the existing 'icv' image/data processing library with additional plugins (ui.e., nify pix processing tools and converters)
  • Write a molecular geometry tool for representing and visualizing molecules in standard formats (e.g. .pdb) as BRL-CAD geometry

Material Properties

  • Add support for importing material objects from external data sources
  • Expand support for Open Shading Language (OSL) optical properties in material objects
  • Create a materials database (web site) that allows for management of physical material types (density, mass, tensile strength, etc)

Geometry Conversion

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

  • STEP import or export (.step), in priorty order: AP242, AP214, AP203e2
  • AutoCAD drawings (.dwg)
  • Adobe 3D PDF [exporter] (.pdf)
  • Blender (.blend, more entities supported)
  • POV-RAY (.pov)
  • Sketchup (.skp, .skb)
  • Solidworks (.sat, .sldprt, .sldasm)
  • Parasolid/UGS (.x_b, .x_t)
  • 3D Studio Max (.3ds)
  • OpenGL [exporter] (OpenGL C sourcecode)

Visualization

  • (Re-)Implement a client-server based ray tracing service that runs on a cluster (i.e., enhanced remrt+rtsrv rewrite)
  • Implement a new procedural geometry shader (e.g., similar to existing grass shader but more generalized)
  • Implement a shader for the new "pixelated" military camouflage style
  • Implement a visualization tool for manipulating a model's construction hierarchy
  • Create a graphical front-end 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 a basic path tracer or other global illumination model using BRL-CAD's ray-trace library (NOTE: 'art' is an advanced example of this using LIBRT+Appleseed)

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)

Documentation

  • Write a manual page for tools that don't have one (more than a hundred to choose from)
  • Write a BRL-CAD primitives reference sheet
  • Write a BRL-CAD shaders reference sheet
  • Make an overview diagram of BRL-CAD's tool set
  • Write a guide for implementing new primitives in BRL-CAD
  • Create a geometry conversion reference diagram
  • Write a tutorial for programming procedural geometry with BRL-CAD
  • Create a geometry representation comparisons diagram
  • Write a History of BRL-CAD
  • Translate BRL-CAD documentation to other languages
  • 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

Geometry Modeling

  • undo (previous or infinite)
  • CLI and/or GUI BREP/NURBS editing
  • BoT/mesh/polygonal editing (consider integrating the GNU Triangulated Surface Library)
  • implement a snap-to command for edges, vertices, tangency
  • spreadsheet editing of material properties and codes
  • implement ability to save views in the geometry file

Web Site Development

Project Infrastructure

Modeling

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.