Home

Awesome

Barney - A OptiX-CUDA Accelerated Path Tracer for Data-Parallel Sci-Vis Rendering

DISCLAIMER: Barney is a first prototype of a possibly-to-be data parallel ray/path tracer for sci-vis content. It can actually do quite a bit of "stuff" already; however, it is still experimental software. In particular, barney is still very much "in flux": There are no stable releases, nor are any of the feature-sets fully "spec'ed" or even committed to; and any of the information in the remainder of this document way well be outdated or even plain wrong by the time you are going to read this. I will be happy about any feedback, bug reports, reports about errors, broken documentation, etc, and will fix what I can and who quickly I can - but do not expect this to be a finished product in any way, shape, or form.

Building and Running

Barney is not a stand-alone "renderer" or "vis-tool"; it is a library with an API, and needs other applications to build towards it. As such, it is never "run" on its own; it also needs to be run from another application (e.g., hayStack, at http://github.org/ingowald/hayStack).

Dependencies for building Barney

Barney requires the following additional tools and/or packages to build:

Building Barney

Barney is built via CMake. Eventually this is going to result in some "installable" set of shadred library and header files; however, for now (where it is still chaging very rapidly) the only truly recommended way of building barney is as a git submodule, within the application using it.

In that case, all the application should do is include in the parent app's CMakeList.txt as follows:

add_subdirectory(<path to barney> EXCLUDE_FROM_ALL)

Barney's CMake scripts the use "modern cmake", so all include paths, compile definitions, etc, will be pulled by 'linking' to the respective 'barneyandbarney_mpi` targets:

The barney_mpi dependency will automatically pull in the cmake MPI::MPI_CXX dependency.

Examples of Supported Geometry and Volume Types

Triangle Meshes (including Instances and Color- and Opacity Textures)

Example: PBRT landscape in miniScene (http://github.com/ingowald/miniScene) format:

Working:

Missing/incomplete:

Non-Triangular Surface Types for Sci-Vis

(README need updating)

(README need updating)

Structured Volume Data

Structured Volume Data (float, uint8 and uint16 are supported, and any volume can be distributed across different ranks by each rank having different porions of that volume. Barney being intended for sci-vis, every volume can have its own transfer function.

a) Engine (256x256x128_uint8), Dell XPS Laptop

b) rot-strat (4096x4096x4096_float) data-parallel on 8x RTX8000 (4 nodes, 2 GPUs each)

c) same, with a very dense transfer function:

Unstructured-Mesh Data

Block-Structed AMR Data

ANARI / BARNARI

Though barney is not limited to ANARI (it is its own library, with its own API), it can also be configured to build a (still every much experimental!) ANARI "device" that exposes some of barney's functionality. Once enabled in the cmake build, this builds a libanari_library_barney.so that implemnets an ANARI device, and that any ANARI-capable renderer can then load as the "barney" device.

Note: To distinguish between the (general) ANARI API and the specific barney-based implementation of this API we typically refer to this implementation as the (B)ANARI device, or simply as banari.

Disclaimer: if barney is still experimental, banari is even more so! Not all barney functionality is exposed in banari, nor is every ANARI feature supported by banari - and even for the features that are supported, there may be some significant memory- or compute-overhead when going through this device.

Building BANARI: