Include documentation sources

binary files (fonts, images) currently need to be linked
This commit is contained in:
Johannes Günther
2018-03-15 17:21:29 +01:00
parent f43a37df72
commit 2a8aa26f2d
32 changed files with 4501 additions and 0 deletions
+1
View File
@@ -18,6 +18,7 @@ tbb
embree
ispc
ospray-doc
readme.pdf
!/modules
/modules/*
!/modules/mpi
+5
View File
@@ -0,0 +1,5 @@
# generated files&folders
changelog.md
www
tmp
__pycache__
+148
View File
@@ -0,0 +1,148 @@
webpages := $(addprefix www/, $(addsuffix .html, index news demos documentation gallery downloads related_projects pvospray displaywall fiu_comparison legal))
process_version := $(addprefix tmp/, $(addsuffix .md, demos getting_ospray readme_head))
tmptexfiles := $(addprefix tmp/, $(addsuffix .tex, overview changelog compilation api mpi examples))
images_jpg := $(addprefix images/, $(addsuffix .jpg, exampleViewer $(addprefix camera_, perspective architectual stereo orthographic panoramic) $(addprefix material_, OBJ Metal Alloy Glass ThinGlass MetallicPaint Luminous) ColoredWindow rm_volume_ao_shadows rm_volume heptane_bubbly_osp mag_pt rm_volume2 dns_small code GLuRayPage))
images_png := $(addprefix images/, $(addsuffix .png, diffuse_rooms normalmap_frustum tutorial_accumulatedframe tutorial_firstframe))
images := $(images_jpg) $(images_png)
images_fig := spot_light quad_light hdri_light
images_fig2pdf := $(addprefix tmp/, $(addsuffix .pdf, $(images_fig)))
images_fig2png := $(addprefix images/, $(addsuffix .png, $(images_fig)))
webimages := $(addprefix www/, $(images)) $(images_fig2png)
PANDOC := pandoc
PDMINVERSION := 1190200
PDOK := $(shell expr `$(PANDOC) --version|head -n 1|cut -d' ' -f 2| sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$$/&00/' -e 's/^[0-9]\{5,6\}$$/&00/'` \>= $(PDMINVERSION))
ifneq "$(PDOK)" "1"
$(error You need at least pandoc v1.19.2)
endif
all: www doc pdf
www: $(webpages) www/stylesheet.css $(webimages)
doc: ../README.md
pdf: ../readme.pdf
.PHONY: all www doc pdf images
tmp/version: ../cmake/ospray_options.cmake $(wildcard ../.git/HEAD)
sed -n $< -e "s/^SET(OSPRAY_VERSION_MAJOR \([0-9]\+\))/\1./ip" | tr -d '\n' > $@
sed -n $< -e "s/^SET(OSPRAY_VERSION_MINOR \([0-9]\+\))/\1./ip" | tr -d '\n' >> $@
sed -n $< -e "s/^SET(OSPRAY_VERSION_PATCH \([0-9]\+\))/\1/ip" | tr -d '\n' >> $@
if [[ -d ../.git && "`git rev-parse --abbrev-ref HEAD`" == "devel" ]] ; then echo " (devel)"; else echo; fi >> $@
replace_version = sed -e "s/<OSPRAY_VERSION>/`cat tmp/version`/g" $< > $@
tmp/%.md: %.md tmp/version
$(replace_version)
tmp/images_web.md: images.md
sed -e "s/\.fig/.png/" -e "s@: @: https://ospray.github.io/images/@" $< > $@
tmp/images_local_png.md: images.md
sed -e "s@: @: images/@" -e "s/\.fig/.png/" $< > $@
tmp/images_local_pdf.md: images.md
sed -e "s@: @: images/@" -e "s@images/\(.*\)\.fig@tmp/\1.pdf@" $< > $@
changelog.md:
ln -s ../CHANGELOG.md $@
### directories
########################################################################
$(webpages) www/stylesheet.css: | wwwdir
wwwdir:
@mkdir -p www
$(webimages): | wwwimgdir
wwwimgdir:
@mkdir -p www/images
$(process_version) tmp/version ../readme.pdf $(tmptexfiles) tmp/api.md tmp/api_html.md tmp/images_web.md tmp/images_local_pdf.md tmp/images_local_png.md: | tmpdir
tmpdir:
@mkdir -p tmp
### webpages
########################################################################
markdown2web = $(PANDOC) -smart --email-obfuscation=none -f markdown $(filter-out webtemplate.html,$+) --template webtemplate -V select_$(basename $(@F)) -o $@
$(webpages): links_web.md tmp/images_local_png.md webtemplate.html
www/%.html:
$(markdown2web)
www/stylesheet.css: stylesheet.css
cp $< $@
tmp/api_html.md: api.md links_local.md tmp/images_local_png.md
$(PANDOC) $+ --indented-code-classes=cpp -t markdown-fenced_code_attributes -o $@
www/index.html: teaser.html overview.md changelog.md
www/news.html: news.md
www/demos.html: tmp/demos.md
www/gallery.html: gallery.md
www/downloads.html: tmp/getting_ospray.md compilation.md
www/related_projects.html: related_projects.md
www/pvospray.html: pvospray.md
www/displaywall.html: displaywall.md
www/fiu_comparison.html: fiu_comparison.md
www/legal.html: legal.md
www/documentation.html: documentation.md tmp/api_html.md mpi.md examples.md scenegraph.md
### images
########################################################################
www/images/%: images/%
cp $< $@
www/images/%.png: %.fig
fig2dev -L png -S 4 $+ $@
tmp/%.pdf: %.fig
fig2dev -L pdf $+ $@
### markdown
########################################################################
convert_nbsp_width = sed -e 's@\\ @ @g' -e 's/" style="width:/" width="/g'
tmp/api.md: api.md links_local.md tmp/images_web.md
$(PANDOC) $+ --indented-code-classes=cpp -t markdown-fenced_code_attributes -o $@
../README.md: tmp/readme_head.md overview.md compilation.md documentation.md tmp/api.md mpi.md examples.md links_local.md tmp/images_web.md
$(PANDOC) $+ -t markdown+pipe_tables-simple_tables-multiline_tables-grid_tables-link_attributes | $(convert_nbsp_width) > $@
### pdf
########################################################################
markdown2tex = $(PANDOC) --columns=72 --top-level-division=chapter --filter $+ -o $@
tmp/%.tex: filter-latex.py %.md links_local.md tmp/images_local_pdf.md
$(markdown2tex)
tmp/api.tex: filter-latex.py api.md links_local.md tmp/images_local_pdf.md
$(markdown2tex) --indented-code-classes=cpp
../readme.pdf: readme.tex $(tmptexfiles) $(wildcard intel-spec.cls) preamble.tex tmp/version $(images) $(images_fig2pdf)
md5s=0;\
auxf="tmp/`basename $< tex`aux";\
newmd5s=`md5sum $$auxf 2> /dev/null`;\
until [[ $$md5s == $$newmd5s ]]; do \
md5s=$$newmd5s;\
xelatex -output-directory=tmp $<;\
newmd5s=`md5sum $$auxf`;\
done
cp tmp/$(basename $<).pdf $@
### clean
########################################################################
clean:
rm -rf www tmp changelog.md
+1762
View File
File diff suppressed because it is too large Load Diff
+154
View File
@@ -0,0 +1,154 @@
Building OSPRay from Source
===========================
The latest OSPRay sources are always available at the [OSPRay GitHub
repository](http://github.com/ospray/ospray). The default `master`
branch should always point to the latest tested bugfix release.
Prerequisites
-------------
OSPRay currently supports Linux, Mac OS\ X, and Windows. In addition,
before you can build OSPRay you need the following prerequisites:
- You can clone the latest OSPRay sources via:
git clone https://github.com/ospray/ospray.git
- To build OSPRay you need [CMake](http://www.cmake.org), any form
of C++11 compiler (we recommend using GCC, but also support Clang and the
[Intel® C++ Compiler (icc)](https://software.intel.com/en-us/c-compilers)),
and standard Linux development tools. To build the example viewers, you
should also have some version of OpenGL.
- Additionally you require a copy of the [Intel® SPMD Program
Compiler (ISPC)](http://ispc.github.io), version 1.9.1 or later.
Please obtain a release of ISPC from the [ISPC downloads
page](https://ispc.github.io/downloads.html). The build
system looks for ISPC in the `PATH` and in the directory right
"next to" the checked-out OSPRay sources.^[For example, if OSPRay is
in `~/Projects/ospray`, ISPC will also be searched in
`~/Projects/ispc-v1.9.2-linux`]
Alternatively set the CMake variable `ISPC_EXECUTABLE` to the
location of the ISPC compiler.
- Per default OSPRay uses the Intel® [Threading Building
Blocks](https://www.threadingbuildingblocks.org/) (TBB) as tasking
system, which we recommend for performance and flexibility reasons.
Alternatively you can set CMake variable `OSPRAY_TASKING_SYSTEM` to
`OpenMP`, `Internal`, or `Cilk` (icc only).
- OSPRay also heavily uses [Embree], installing version 2.15 or newer
is required. If Embree is not found by CMake its location can be
hinted with the variable `embree_DIR`.
Depending on your Linux distribution you can install these dependencies
using `yum` or `apt-get`. Some of these packages might already be
installed or might have slightly different names.
Type the following to install the dependencies using `yum`:
sudo yum install cmake.x86_64
sudo yum install tbb.x86_64 tbb-devel.x86_64
Type the following to install the dependencies using `apt-get`:
sudo apt-get install cmake-curses-gui
sudo apt-get install libtbb-dev
Under Mac OS\ X these dependencies can be installed using
[MacPorts](http://www.macports.org/):
sudo port install cmake tbb
Under Windows please directly use the appropriate installers for
[CMake](https://cmake.org/download/),
[TBB](https://github.com/01org/tbb/releases),
[ISPC](https://ispc.github.io/downloads.html) (for your Visual Studio
version) and [Embree](https://github.com/embree/embree/releases/).
Compiling OSPRay on Linux and Mac OS\ X
---------------------------------------
Assume the above requisites are all fulfilled, building OSPRay through
CMake is easy:
- Create a build directory, and go into it
mkdir ospray/build
cd ospray/build
(We do recommend having separate build directories for different
configurations such as release, debug, etc).
- The compiler CMake will use will default to whatever the `CC` and
`CXX` environment variables point to. Should you want to specify a
different compiler, run cmake manually while specifying the desired
compiler. The default compiler on most linux machines is `gcc`, but
it can be pointed to `clang` instead by executing the following:
cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang ..
CMake will now use Clang instead of GCC. If you are ok with using
the default compiler on your system, then simply skip this step.
Note that the compiler variables cannot be changed after the first
`cmake` or `ccmake` run.
- Open the CMake configuration dialog
ccmake ..
- Make sure to properly set build mode and enable the components you
need, etc; then type 'c'onfigure and 'g'enerate. When back on the
command prompt, build it using
make
- You should now have `libospray.so` as well as a set of example
application. You can test your version of OSPRay using any of the
examples on the [OSPRay Demos and Examples] page.
Compiling OSPRay on Windows
---------------------------
On Windows using the CMake GUI (`cmake-gui.exe`) is the most convenient
way to configure OSPRay and to create the Visual Studio solution files:
- Browse to the OSPRay sources and specify a build directory (if it
does not exist yet CMake will create it).
- Click "Configure" and select as generator the Visual Studio version
you have, for Win64 (32\ bit builds are not supported by OSPRay),
e.g. "Visual Studio 15 2017 Win64".
- If the configuration fails because some dependencies could not be
found then follow the instructions given in the error message, e.g.
set the variable `embree_DIR` to the folder where Embree was
installed.
- Optionally change the default build options, and then click
"Generate" to create the solution and project files in the build
directory.
- Open the generated `OSPRay.sln` in Visual Studio, select the build
configuration and compile the project.
Alternatively, OSPRay can also be built without any GUI, entirely on the
console. In the Visual Studio command prompt type:
cd path\to\ospray
mkdir build
cd build
cmake -G "Visual Studio 15 2017 Win64" [-D VARIABLE=value] ..
cmake --build . --config Release
Use `-D` to set variables for CMake, e.g. the path to Embree with "`-D
embree_DIR=\path\to\embree`".
You can also build only some projects with the `--target` switch.
Additional parameters after "`--`" will be passed to `msbuild`. For
example, to build in parallel only the OSPRay library without the
example applications use
cmake --build . --config Release --target ospray -- /m
+275
View File
@@ -0,0 +1,275 @@
OSPRay Demos
============
This page serves as a repository for "ready-to-run" demos for OSPRay
(currently, most demos are intended for OSPRay v<OSPRAY_VERSION>). If you do not yet
have a version of OSPRay installed on your system, you can follow these
instructions for [getting OSPRay].
Sponza
----------------------------------
[![](demos/sponza_small.jpg)](demos/sponza.jpg)
*Model courtesy Carson Brownlee, Morgan McGuire, Crytek*
### Demo Highlights
- Crytek Sponza scene -- a common scene for showcasing global
illumination (model from [McGuire Graphics Data]).
### Instructions
- *IMPORTANT:* This demo currently requires a build from GitHub with `OSPRAY_SG_OPENIMAGEIO=ON`
- Download
[crytek-sponza.tgz](http://www.sdvis.org/ospray/download/demos/crytek-sponza.tgz)
and [light probe] in pfm-format.
- Run via\
`./ospExampleViewer [path/to/sponza.obj] -vp 667.492554 186.974228 76.008301 -vu 0.000000 1.000000 0.000000 -vi 84.557503 188.199417 -38.148270 -r pt -sg:sun:direction=-.3,-1,.1 -sg:sun:intensity=12 --hdri-light [path/to/rnl_probe.pfm]`
San Miguel
----------------------------------
[![](demos/san-miguel_small.jpg)](demos/san-miguel.jpg)
*Model courtesy Carson Brownlee, Morgan McGuire, Guillermo M. Leal
Llaguno*
### Demo Highlights
- A quaint cafe in San Miguel's historic district. This is a common
scene for showcasing global illumination. (Model from [McGuire
Graphics Data]).
### Instructions
- *IMPORTANT:* This demo currently requires a build from GitHub with `OSPRAY_SG_OPENIMAGEIO=ON`
- Download
[sanm.zip](http://www.sdvis.org/ospray/download/demos/sanm.zip)
and [light probe] in pfm-format.
- Run via\
`./ospExampleViewer [path/to/sanm.obj] -vp 22.958788 3.204613 2.712676 -vu 0.000000 1.000000 0.000000 -vi 12.364944 0.176316 4.009342 -sg:sun:intensity=4.0 -sg:sun:direction=0,-1,0 -sg:bounce:intensity=0.0 --hdri-light [path/to/rnl_probe.pfm] -sg:hdri:intensity=1.25 -r pt`
Sibenik Cathedral
----------------------------------
[![](demos/sibenik_small.jpg)](demos/sibenik.jpg)
*Model courtesy Morgan McGuire, Kenzie Lamar, Aleksander Stompel*
### Demo Highlights
- A large cathedral model commonly used for showcasing global
illumination. (Original model from [McGuire Graphics Data]).
### Instructions
- *IMPORTANT:* This demo currently requires a build from GitHub with `OSPRAY_SG_OPENIMAGEIO=ON`
- Download
[sibenik.tgz](http://www.sdvis.org/ospray/download/demos/sibenik.tgz)
and [light probe] in pfm-format.
- Run via\
`./ospExampleViewer sibenik.obj -vp -17.734447 -13.788272 3.443677 -vu 0.000000 1.000000 0.000000 -vi -2.789550 -10.993323 0.331822`
Animated Woody
----------------------------------
[![](demos/sponza_animated_small.jpg)](demos/sponza_animated.jpg)
*Model courtesy Carson Brownlee, Ingo Wald, Morgan McGuire, Crytek*
### Demo Highlights
- Animated Wooden Doll walking in the Sponza model (from [McGuire
Graphics Data]).
### Instructions
- *IMPORTANT:* This demo currently requires a build from GitHub with `OSPRAY_SG_OPENIMAGEIO=ON`
- Download
[crytek-sponza.tgz](http://www.sdvis.org/ospray/download/demos/crytek-sponza.tgz)
and
[wooddoll.tgz](http://www.sdvis.org/ospray/download/demos/wooddoll.tgz).
- Run via\
`./ospExampleViewer [path/to/crytek-sponza/sponza.obj] --renderer scivis -sun:direction=-.3,-1,-.04 -sg:sun:intensity=3 -vp 667.492554 186.974228 76.008301 -vu 0.000000 1.000000 0.000000 -vi 84.557503 188.199417 -38.148270 --translate 250 -11 0 --scale 300 300 300 --animation [path/to/wooddoll/wooddoll*.obj] -sg:aoSamples=0`
- Controls: +/- increase and decrease animation speed. Space bar
pauses.
"Magnetic Reconnection" Volume Rendered
---------------------------------------
[![](demos/MagneticReconnection/magnetic-512-volume-thumbnail.jpg)](demos/MagneticReconnection/magnetic-512-volume.png)
*Model courtesy Bill Daughton (LANL) and Berk Geveci (KitWare). Please
acknowledge via [this paper](http://arxiv.org/abs/1405.4040).*
### Demo Highlights
- Volume rendering of the 512^3^ Magnetic Reconnection volume data.
- Rendered using OSPRay's ray cast volume renderer
(`raycast_volume_renderer`).
### Instructions
- Download
[magnetic-512-volume.tar.bz2](http://www.sdvis.org/ospray/download/demos/MagneticReconnection/magnetic-512-volume.tar.bz2).
- Run via\
`./ospExampleViewerSg magnetic-512-volume.osp`
290M triangle "Richtmyer-Meshkov" Iso-Surface
---------------------------------------------
[![](demos/llnl-250/llnl-250-small.png)](demos/llnl-250/llnl-250.png)
*Model courtesy Lawrence-Livermore National Labs (LLNL).*
### Demo Highlights
- Iso-surface of the 2048^3^ Richtmyer-Meshkov Instability simulation
performed by LLNL, iso-surface extracted through ParaView.
- Detailed iso-surface has 290 million triangles.
- Rendered using OSPRay's Ambient Occlusion renderer (`ao4`).
### Instructions
- Download
[llnl-2048-iso.tar.bz2](http://www.sdvis.org/ospray/download/demos/LLNLRichtmyerMeshkov/llnl-2048-iso.tar.bz2).
- Run via\
`./ospExampleViewer llnl-2048-iso.xml`
CSAFE Heptane Gas Dataset
-------------------------
[![](demos/CSAFEHeptane/csafe-heptane-302-volume-thumbnail.jpg)](demos/CSAFEHeptane/csafe-heptane-302-volume.png)
*Model courtesy of the Center for the Simulation of Accidental Fires and
Explosions (CSAFE) at the Scientific Computing and Imaging Institute
(SCI), University of Utah.*
### Demo Highlights
- Volume rendering of a 302^3^ data set containing a single time step
from a computational simulation of the combustion of heptane gas.
- Rendered using OSPRay's ray cast volume renderer
(`raycast_volume_renderer`).
### Instructions
- Download
[csafe-heptane-302-volume.tar.bz2](http://www.sdvis.org/ospray/download/demos/CSAFEHeptane/csafe-heptane-302-volume.tar.bz2).
- Run via\
`./ospExampleViewerSg csafe-heptane-302-volume.osp`
"TACC Isotropic Turbulence" Volume Rendered
-------------------------------------------
[![](demos/TACCIsotropicTurbulence/tacc-turbulence-256-volume-thumbnail.jpg)](demos/TACCIsotropicTurbulence/tacc-turbulence-256-volume.png)
*Model courtesy of the Texas Advanced Computing Center (TACC), Texas A&M
University, and Georgia Tech.*
### Demo Highlights
- Volume rendering of a 256^3^ data set containing a single time step
from a computational simulation of isotropic turbulence.
- Rendered using OSPRay's ray cast volume renderer
(`raycast_volume_renderer`).
### Instructions
- Download
[tacc-turbulence-256-volume.tar.bz2](http://www.sdvis.org/ospray/download/demos/TACCIsotropicTurbulence/tacc-turbulence-256-volume.tar.bz2).
- Run via\
`./ospExampleViewerSg tacc-turbulence-256-volume.osp`
"FIU" Ground Water Simulation
-----------------------------
[![](demos/fiu/fiu-ao-small.jpg)](demos/fiu/fiu-ao.png)
*Model courtesy Texas Advanced Computing Center (TACC) and Florida
International University. Please obtain TACC/FIU's permission before
using this model.*
### Demo Highlights
- Dataset captured from VTK-based ParaView through TACC's GLURay tool.
- Streamlines in this data set are actually tessellated. OSPRay could
do them natively, but ParaView tessellates internally.
- Model size roughly 8 million triangles
- Rendered via OSPRay's Ambient Occlusion based renderer. To see a
comparison with/without Ambient occlusion, [see this
page](fiu_comparison.html).
### Instructions
- Download
[fiu-groundwater.tar.bz2](http://www.sdvis.org/ospray/download/demos/FIUGroundWater/fiu-groundwater.tar.bz2).
- Run via\
`./ospExampleViewer fiu-groundwater.xml --renderer scivis`
- Run via OBJ renderer rather than Ambient Occlusion:\
`./ospExampleViewer fiu-groundwater.xml --sg:sun:direction=-1.5,-1,-1`
"XFrog Forest" - A 1.7 billion triangle forest model
----------------------------------------------------
[![](demos/xfrog/xfrog-small.jpg)](demos/xfrog/xfrog.png)
*Model courtesy Oliver Deussen, University of Konstanz; modelled via the
[XFrog](http://www.xfrog.com) tool. Please acknowledge accordingly when
using this model.*
### Demo Highlights
- 1.7 billion triangles (377,266 instances of 69 different kinds of
plants, for a total of 1,679,235,546 triangles after instantiation).
- Additional detail through high-resolution alpha "stencil" textures
to stencil detailed leaf shapes out of already highly detailed
geometry.
- Requires many rays per pixel to handle the (high!) number of
transparency layers.
### Instructions
- Download
[xfrog-forest.tar.bz2](http://www.sdvis.org/ospray/download/demos/XFrogForest/xfrog-forest.tar.bz2).
- Run via\
`./ospExampleViewer xfrog-forest.xml`
"NASA Streamlines"
------------------
[![](demos/nasa-streamlines/nasa-streamlines-small.jpg)](demos/nasa-streamlines/nasa-streamlines.png)
*Model courtesy Timothy Sandstrom, NASA.*
### Demo Highlights
- Model of a magnetic field on the sun, visualized through a
attribute-mapped iso-surface of the B-field, plus a set of
streamlines.
- The streamlines are not tessellated, but OSPRay's actual
"`streamlines`" primitive (essentially, a set of smoothly connected
cylinders), which makes for a very memory-efficient representation.
- Ambient occlusion greatly helps in understanding the shape of the
streamlines (when rendered with local-only shading, it looks like a
"lint ball").
### Instructions
- Download
[NASA-B-field-sun.osx](http://www.sdvis.org/ospray/download/demos/NASA-B-field-sun/NASA-B-field-sun.osx).
- Run via\
`./ospExampleViewer NASA-B-field-sun.osx`
[McGuire Graphics Data]: http://graphics.cs.williams.edu/data/meshes.xml "McGuire, Computer Graphics Archive, Aug 2011"
[light probe]: http://www.pauldebevec.com/Probes/rnl_probe.pfm "RNL Light Probe Image"
+16
View File
@@ -0,0 +1,16 @@
OSPRay parallel rendering on TACC's "Stallion" display wall
===========================================================
[![](gallery/ospray_stallion-thumb.jpg)](gallery/ospray_stallion.jpg)
This photo shows OSPRay running on the [Stallion 328 megapixel tiled
display](https://www.tacc.utexas.edu/vislab/stallion) at the Texas
Advanced Computing Center (TACC) visualization lab. OSPRay is rendering
in an MPI parallel mode and interactively streaming to the tiled display
via its
[DisplayCluster](https://www.tacc.utexas.edu/research-development/tacc-software/displaycluster)
interface. These features are scheduled to be released in OSPRay v0.9.
The model used is courtesy Florida International University and the
Texas Advanced Computing Center, and stems from a simulation of Ground
Water Flow performed by Florida International University.
+16
View File
@@ -0,0 +1,16 @@
Documentation
=============
The following [API documentation][OSPRayReadme] of OSPRay can also be
found as a [pdf document][OSPRayReadme] (4.2MB).
For a deeper explanation of the concepts, design, features and
performance of OSPRay also have a look at the IEEE Vis 2016 paper
"[OSPRay – A CPU Ray Tracing Framework for Scientific
Visualization](http://www.sdvis.org/ospray/download/talks/IEEEVis2016_OSPRay_paper.pdf)"
(49MB, or get the [smaller
version](http://www.sdvis.org/ospray/download/talks/IEEEVis2016_OSPRay_paper_small.pdf)
1.8MB). Also available are the [slides of the
talk](http://www.sdvis.org/ospray/download/talks/IEEEVis2016_OSPRay_talk.pdf)
(5.2MB).
+174
View File
@@ -0,0 +1,174 @@
Examples
========
Tutorial
--------
A minimal working example demonstrating how to use OSPRay can be found
at `apps/ospTutorial.c`^[A C++ version that uses the C++ convenience
wrappers of OSPRay's C99 API via `include/ospray/ospray_cpp.h` is
available at `apps/ospTutorial.cpp`.]. On Linux build it in the build
directory with
gcc -std=c99 ../apps/ospTutorial.c -I ../ospray/include -I .. \
./libospray.so -Wl,-rpath,. -o ospTutorial
On Windows build it in the "build_directory\\$Configuration" with
cl ..\..\apps\ospTutorial.c -I ..\..\ospray\include -I ..\.. ospray.lib
Running `ospTutorial` will create two images of two triangles, rendered
with the Scientific Visualization renderer with full Ambient Occlusion.
The first image `firstFrame.ppm` shows the result after one call to
`ospRenderFrame` – jagged edges and noise in the shadow can be seen.
Calling `ospRenderFrame` multiple times enables progressive refinement,
resulting in antialiased edges and converged shadows, shown after ten
frames in the second image `accumulatedFrames.ppm`.
![First frame.][imgTutorial1]
![After accumulating ten frames.][imgTutorial2]
# Example Viewer
![Example of using ospExampleViewer with a scenegraph][imgExampleViewer]
OSPRay includes an exemplary viewer application
`ospExampleViewer`, showcasing most features of OSPRay which can be
run as './ospExampleViewer [options] <filename>'. The Example
Viewer uses the ImGui library for user interface controls and is
based on a prototype OSPRay scenegraph interface where nodes can
be viewed and edited interactively.
Updates to scenegraph nodes update OSPRay state automatically
through the scenegraph viewer which
is enabled by pressing 'g'.
### Exploring the Scene
The GUI shows the entire state of the program under the root scenegraph node.
Expanding nodes down to explore and edit the scene is possible, for example a
material parameter may be found under renderer->world->mesh->material->Kd.
Updates to values will be automatically propagated to the next render. Individual
nodes can be easily found using the "Find Node" section, which will find nodes
with a given name based on the input string. Scene objects can also be selected
with the mouse by shift-left clicking in the viewer.
Click on nodes to expand their children,
whose values can be set by dragging or double clicking and typing in values.
You can also add new nodes where appropriate: for
example, when "lights" is expanded right clicking on "lights" and selecting
create new node and typing
in a light type, such as "PointLight", will add it to the scene. Similarly,
right clicking on "world" and creating an "Importer" node will add a new
scene importer from a file. Changing the filename to an appropriate file
will load the scene and propagate the resulting state. Exporting
and importing the scenegraph is only partially supported at the moment through
"ospsg" files. Currently, any nodes with Data members will break this functionality,
however right clicking and selecting export on the camera or lights nodes for instance
will save out their respective state which can be imported on the command line.
ExampleViewer also functions as an OSPRay state debugger – invalid
values will be shown in red up the hierarchy and won't change the viewer
until corrected.
### Volume Rendering
Volumes are loaded into the viewer just as a mesh is. Volume appearance is modified
according to the transfer function, which will show up in a popup window on the GUI after
pressing 'g'. Click and drag across the transfer function to set opacity values, and selecting
near the bottom of the editable transfer function widget sets the opacity to zero. The colors
themselves can only be modified by selecting from the dropdown menu 'ColorMap' or
importing and exporting json colors. The range that the transfer function operates
on can be modified on the scenegraph viewer.
### ExampleViewer Controls
* 'g' - toggle scenegraph display
* 'q' - quit
* Left click and drag to rotate
* Right click and drag or mouse wheel to zoom in
and out.
* Mouse-Wheel click will pan the camera.
* Control-Left clicking on an object will select a model and all of its children
which will be displayed in the
* Shift-Left click on an object will zoom into that part of the scene and set
the focal distance.
### CommandLine Options
* Running './ospExampleViewer -help' will bring up a list of commandline options.
These options allow you to load files, run animations, modify any scenegraph state,
and many other functions. See the demos page for examples.
* Supported file importers currently include: obj, ply, x3d, vtu, osp, ospsg, xml (rivl),
points, xyz.
Distributed Viewer
------------------
The application `ospDistribViewerDemo` demonstrates how to write a
distributed SciVis style interactive renderer using the distributed MPI
device. Note that because OSPRay uses sort-last compositing it is up to
the user to ensure that the data distribution across the nodes is
suitable. Specifically, each nodes' data must be convex and disjoint.
This renderer supports multiple volumes and geometries per node. To
ensure they are composited correctly you specify a list of bounding
regions to the model, within these regions can be arbitrary
volumes/geometries and each rank can have as many regions as needed. As
long as the regions are disjoint/convex the data will be rendered
correctly. In this demo we either generate a volume, or load a RAW
volume file if one is passed on the commandline.
### Loading a RAW Volume
To load a RAW volume you must specify the filename (`-f <file>`), the
data type (`-dtype <dtype>`), the dimensions (`-dims <x> <y> <z>`) and the
value range for the transfer function (`-range <min> <max>`). For example,
to run on the [CSAFE dataset from the demos
page](http://www.ospray.org/demos.html#csafe-heptane-gas-dataset) you
would pass the following arguments:
mpirun -np <n> ./ospDistribViewerDemo \
-f <path to csafe>/csafe-heptane-302-volume.raw \
-dtype uchar -dims 302 302 302 -range 0 255
The volume file will then be chunked up into an `x×y×z` grid such that
$n = xyz$. See `loadVolume` in [gensv/generateSciVis.cpp] for an
example of how to properly load a volume distributed across ranks with
correct specification of brick positions and ghost voxels for
interpolation at boundaries. If no volume file data is passed a volume
will be generated instead, in that case see `makeVolume`.
### Geometry
The viewer can also display some randomly generated sphere geometry if
you pass `-spheres <n>` where `n` is the number of spheres to generate
per-node. These spheres will be generated inside the bounding box of the
region's volume data.
In the case that you have geometry crossing the boundary of nodes and
are replicating it on both nodes to render (ghost zones, etc.) the
region will be used by the renderer to clip rays against allowing to
split the object between the two nodes, with each rendering half. This
will keep the regions rendered by each rank disjoint and thus avoid any
artifacts. For example, if a sphere center is on the border between two
nodes, each would render half the sphere and the halves would be
composited to produce the final complete sphere in the image.
### App-initialized MPI
Passing the `-appMPI` flag will have the application initialize MPI
instead of letting OSPRay do it internally when creating the MPI
distributed device. In this case OSPRay will not finalize MPI when
cleaning up the device, allowing the application to use OSPRay for some
work, shut it down and recreate everything later if needed for
additional computation, without accidentally shutting down its MPI
communication.
### Interactive Viewer
Rank 0 will open an interactive window with GLFW and display the
rendered image. When the application state needs to update (e.g. camera
or transfer function changes), this information is broadcasted out to
the other nodes to update their scene data.
Demos
-----
Several ready-to-run demos, models and data sets for OSPRay can be found
at the [OSPRay Demos and Examples] page.
+73
View File
@@ -0,0 +1,73 @@
# 1. convert tables to use 'tabu'
# 2. always add hypertargets, before headings, to workaround issue #2719
# Based on Wagner Macedo's filter.py posted at
# https://groups.google.com/forum/#!msg/pandoc-discuss/RUC-tuu_qf0/h-H3RRVt1coJ
import pandocfilters as pf
def latex(s):
return pf.RawBlock('latex', s)
def inlatex(s):
return pf.RawInline('latex', s)
def tbl_caption(s):
return pf.Para([inlatex(r'\caption{')] + s + [inlatex(r'}')])
def tbl_alignment(a, w):
aligns = {
"AlignDefault": 'l',
"AlignLeft": 'l',
"AlignCenter": 'c',
"AlignRight": 'r',
}
s = '';
for i in range(len(a)):
s += 'X[%.3f,' % -w[i] + aligns[a[i]['t']] + ']'
return s;
def tbl_headers(s):
result = s[0][0]['c'][:]
for i in range(1, len(s)):
result.append(inlatex(' & '))
result.extend(s[i][0]['c'])
result.append(inlatex(r'\\' '\n'))
return pf.Para(result)
def tbl_contents(s):
result = []
for row in s:
para = []
for col in row:
if col:
para.extend(col[0]['c'])
para.append(inlatex(' & '))
result.extend(para)
result[-1] = inlatex(r'\\' '\n')
return pf.Para(result)
def do_filter(k, v, f, m):
if k == "Table":
w = v[2]
if sum(w) == 0:
w = [1 for e in w]
wd = ''
ha = r'\centering'
else:
wd = '*'
ha = r'\raggedright'
return [latex(r'\begin{table'+wd+'}[!h]'),
tbl_caption(v[0]),
latex(ha),
latex(r'\begin{tabu} spread 0pt {' + tbl_alignment(v[1], w) + '}'),
latex(r'\toprule'),
tbl_headers(v[3]),
latex(r'\midrule'),
tbl_contents(v[4]),
latex(r'\bottomrule' '\n' r'\end{tabu}'),
latex(r'\end{table'+wd+'}')]
if k == "Header":
return [latex(r'\hypertarget{' + v[1][0] + r'}{}'),
pf.Header(v[0], v[1], v[2])]
if __name__ == "__main__":
pf.toJSONFilter(do_filter)
+28
View File
@@ -0,0 +1,28 @@
FIU Dataset: Shadows and Ambient Occlusion vs OpenGL-like local shading
=======================================================================
(click on images to see higher-res versions)
[![](demos/fiu/fiu-gl-small.jpg)](demos/fiu/fiu-gl.png)
FIU with local (OpenGL-like) Shading
: Without shadows and/or ambient occlusion (i.e., using a OpenGL-like
local shading model), the FIU dataset looks like this.
\
[![](demos/fiu/fiu-obj-small.jpg)](demos/fiu/fiu-obj.png)
FIU with ray traced shadows
: Simply adding shadows already greatly enhances the user's perception
of depth (e.g., the relative positions of streamlines and base
geometry, the actual shape of the geometry, etc).
\
[![](demos/fiu/fiu-ao-small.jpg)](demos/fiu/fiu-ao.png)
FIU with OSPRay's Ambient Occlusion Renderer
: Ambient Occlusion further increases perception of depth. In OSPRay,
enabling (true, ray-cast) Ambient Occlusion is as simple as
selecting the "ao" renderer.
+156
View File
@@ -0,0 +1,156 @@
OSPRay Gallery
==============
This page contains a few sample screenshots of different renderings done
with OSPRay. If *you* have created any interesting images through OSPRay
and would like to share them on this page, please [send us an
email](mailto:ospray@googlegroups.com).
<div class="exhibit">
[![Cosmos Video](gallery/cosmos_video.png)](https://vimeo.com/237987637 "Cosmos Video")
<div class="caption">
<h2>AMR Binary Black Hole Merger</h2>
<p>Simulation of two black holes colliding using GRChombo in reference to a LIGO event. Simulation was conducted by
[the Centre for Theoretical Cosmology (CTC)](http://www.ctc.cam.ac.uk/). Images were
rendered in ParaView by directly sampling the AMR structure using OSPRay.</p>
</div>
</div>
<div class="exhibit">
[![Nasa Parachute Video](gallery/nasa_parachute_video.png)](https://vimeo.com/237987416 "Nasa Parachute Video")
<div class="caption">
<h2>NASA Ames Parachute Simulation</h2>
<p>Video rendered using OSPRay by Tim Sandstrom of NASA Ames.</p>
</div>
</div>
Screenshots and Video of the 10TB Walls Dataset
-----------------------------------------------
<div class="left">
[![](gallery/walls_4k_00-thumb.jpg)](gallery/walls_4k_00.png)
[![](gallery/walls_4k_01-thumb.jpg)](gallery/walls_4k_01.png)
[![](gallery/walls_4k_05-thumb.jpg)](gallery/walls_4k_05.png)
[![](gallery/walls_4k_11-thumb.jpg)](gallery/walls_4k_11.png)
[![](gallery/walls_4k_21-thumb.jpg)](gallery/walls_4k_21.png)
</div>
Some of the forty timesteps of the `walls` dataset, which is a
simulation of the formation of domain walls in the early universe by
[the Centre for Theoretical Cosmology (CTC)](http://www.ctc.cam.ac.uk/)
in cooperation with [SGI](http://www.sgi.com/). Each volume has a
resolution of 4096^3^, thus the total dataset is *10TB* large. With
OSPRay running on a SGI UV300 system you can interactively explore the
data -- watch the [movie](gallery/walls_4k.mp4). For more background
read the related [blog post by
SGI](http://blog.sgi.com/accelerating-scientific-discovery-through-visualization/).
More Screenshots of OSPRay's Path Tracer
----------------------------------------
<div class="left">
[![](gallery/pt-Wohnung1-thumb.jpg)](gallery/pt-Wohnung1.png)
[![](gallery/pt-Wohnung2-thumb.jpg)](gallery/pt-Wohnung2.png)
[![](gallery/pt-LoftOffice-thumb.jpg)](gallery/pt-LoftOffice.png)
[![](gallery/pt-SedusPanorama-thumb.jpg)](gallery/pt-SedusPanorama.png)
[![](gallery/pt-ActiuRender-thumb.jpg)](gallery/pt-ActiuRender.png)
</div>
The first five example scenes were modeled with
[EasternGraphics](http://www.easterngraphics.com/en.html)' room planning
and interior design software
[pcon.Planner](http://pcon-planner.com/en/), exported to `obj` and
rendered using OSPRay. The scenes contain between one million and ten
millon triangles.\
[![](gallery/pt-car-thumb.jpg)](gallery/pt-car.png)
This car model consists of 5.7 million triangles and features some of
the more advanced materials of OSPRay's path tracer.
OSPRay Parallel Rendering on TACC's "Stallion" Display Wall
-----------------------------------------------------------
[![](gallery/ospray_stallion-thumb.jpg)](displaywall.html)
This shows a photo of OSPRay parallel rendering on TACC's 320 MPixel
"Stallion" Display wall.
[Read more.](displaywall.html)
VMD/Tachyon Screenshots
-----------------------
This section shows some screenshots from the Tachyon module applied to
models exported from the widely used "Visual Molecular Dynamics" (VMD)
tool. In that workflow, a VMD user uses the VMD command
`export Tachyon mymodel.tachy` to export the VMD model in tachyon
format, then uses the `ospTachyon mymodel.tachy` viewer on those models.
[![](gallery/ospTachyon-glpf-thumb.jpg)](gallery/ospTachyon-glpf.png)
VMD "GLPF" model; original model courtesy John Stone, UIUC.\
[![](gallery/ospTachyon-organelle-thumb.jpg)](gallery/ospTachyon-organelle.png)
VMD "Organelle", using vdW-representation via ospray spheres. Model
courtesy Carsten Kutzner, MPI BPC, Goettingen.\
[![](gallery/ospTachyon-ribosome-thumb.jpg)](gallery/ospTachyon-ribosome.png)
VMD "ribosome", with balls, sticks, ribbons, and quicksurfs. Model
courtesy Carsten Kutzner, MPI BPC, Goettingen.
ospModelViewer Samples
----------------------
Sample screen-shots from the `ospModelViewer`, typically imported via
the OBJ model file format.
[![](gallery/obj-fairy-thumb.jpg)](gallery/obj-fairy.png)
The "Utah Fairy" (174k triangles), rendered with textures, transparency,
and shadows (using the `OBJ` renderer. Model originally modelled using
DAZ3D's DAZ Studio.\
[![](gallery/obj-powerplant-thumb.jpg)](gallery/obj-powerplant.png)
The "UNC PowerPlant" model (12.5 million triangles).\
[![](gallery/ao-boeing-thumb.jpg)](gallery/ao-boeing.png)
The "Boeing 777" model (342 million triangles), rendered using Ambient
Occlusion. Model obtained from and used with permission of the Boeing
Company (special thanks to Dave Kasik).\
[![](gallery/obj-xfrog-thumb.jpg)](gallery/obj-xfrog.png)
The "xfrog" model of 1.7 billion (instanced) triangles and transparency
textures. Model originally created using XFrog, model courtesy Oliver
Deussen, University of Konstanz.\
[![](gallery/pt-dragon-thumb.jpg)](gallery/pt-dragon.png)
The 1 million triangle "DAZ Dragon" model, with textures, transparency
textures, and rendered with OSPRay's experimental path tracer. Model
originally created using DAZ3D's DAZ Studio.
Particle Viewer Examples
------------------------
Sample screen-shots from the `ospParticleViewer`.
[![](gallery/ospParticle-nanospheres-thumb.jpg)](gallery/ospParticle-nanospheres.png)
The 740k-particle "nanospheres" model. Model courtesy KC Lau and Larry
Curtiss, Argonne National Labs, and Aaron Knoll, University of Utah.\
[![](gallery/ospParticle-uintah-thumb.jpg)](gallery/ospParticle-uintah.png)
A 80 million particle model from the University of Utah's "UIntah"
simulation package. Data courtesy James Guilkey, Aaron Knoll, and Dave
de St.Germain, University of Utah.
+44
View File
@@ -0,0 +1,44 @@
Download Precompiled OSPRay Binary Packages
===========================================
Prerequisites
-------------
Your CPU must support at least SSE4.1 to run OSPRay. The TGZ/ZIP
packages contain most needed 3rd party dependencies, whereas for the
(much smaller) RPM/installer packages you need to have installed
- Intel® [TBB](https://www.threadingbuildingblocks.org/) v3.0 or newer
- [Embree] ray tracing kernels v2.15 or newer
- To run the example viewer: OpenGL
- To use the distributed, multi-node rendering feature: Intel® [MPI
Library](https://software.intel.com/en-us/intel-mpi-library/))
We recommend the latest version of both TBB and Embree libraries.
Packages
--------
For Linux we provide OSPRay precompiled for 64\ bit as RPMs or as TGZ
file.
[ospray-<OSPRAY_VERSION>.x86_64.rpm.tar.gz](https://github.com/ospray/OSPRay/releases/download/v<OSPRAY_VERSION>/ospray-<OSPRAY_VERSION>.x86_64.rpm.tar.gz)
[ospray-<OSPRAY_VERSION>.x86_64.linux.tar.gz](https://github.com/ospray/OSPRay/releases/download/v<OSPRAY_VERSION>/ospray-<OSPRAY_VERSION>.x86_64.linux.tar.gz)
For Mac OS\ X we provide OSPRay as an installer and as a TGZ file:
[ospray-<OSPRAY_VERSION>.x86_64.dmg](https://github.com/ospray/OSPRay/releases/download/v<OSPRAY_VERSION>/ospray-<OSPRAY_VERSION>.x86_64.dmg)
[ospray-<OSPRAY_VERSION>.x86_64.macosx.tar.gz](https://github.com/ospray/OSPRay/releases/download/v<OSPRAY_VERSION>/ospray-<OSPRAY_VERSION>.x86_64.macosx.tar.gz)
For Windows we provide OSPRay binaries precompiled for 64\ bit as an MSI
installer as well as a ZIP archive:
[ospray-<OSPRAY_VERSION>.msi](https://github.com/ospray/OSPRay/releases/download/v<OSPRAY_VERSION>/ospray-<OSPRAY_VERSION>.msi)
[ospray-<OSPRAY_VERSION>.windows.zip](https://github.com/ospray/OSPRay/releases/download/v<OSPRAY_VERSION>/ospray-<OSPRAY_VERSION>.windows.zip)
The source code of the latest OSPRay version can be downloaded here:
[ospray-<OSPRAY_VERSION>.zip](https://github.com/ospray/OSPRay/archive/v<OSPRAY_VERSION>.zip)
[ospray-<OSPRAY_VERSION>.tar.gz](https://github.com/ospray/OSPRay/archive/v<OSPRAY_VERSION>.tar.gz)
You can also access [old OSPRay releases](https://github.com/ospray/OSPRay/releases).
+15
View File
@@ -0,0 +1,15 @@
#FIG 3.2 Produced by xfig version 3.2.5c
Landscape
Center
Metric
Letter
100.00
Single
-2
1200 2
2 2 0 1 0 7 60 -1 -1 0.000 0 0 7 0 0 5
3150 450 5850 450 5850 1800 3150 1800 3150 450
2 1 0 2 0 7 60 -1 -1 0.000 0 0 -1 0 0 1
4500 1125
4 0 0 50 -1 16 14 0.0000 4 180 270 4590 1215 dir\001
4 0 0 50 -1 16 14 0.0000 4 165 270 5895 495 up\001
+22
View File
@@ -0,0 +1,22 @@
[imgTutorial1]: tutorial_firstframe.png
[imgTutorial2]: tutorial_accumulatedframe.png
[imgSpotLight]: spot_light.fig
[imgQuadLight]: quad_light.fig
[imgHDRILight]: hdri_light.fig
[imgCameraPerspective]: camera_perspective.jpg { width=60% }
[imgCameraArchitectural]: camera_architectual.jpg { width=60% }
[imgCameraStereo]: camera_stereo.jpg { width=90% }
[imgCameraOrthographic]: camera_orthographic.jpg { width=60% }
[imgCameraPanoramic]: camera_panoramic.jpg { width=90% }
[imgDiffuseRooms]: diffuse_rooms.png { width=80% }
[imgNormalMap]: normalmap_frustum.png { width=60% }
[imgMaterialOBJ]: material_OBJ.jpg { width=60% }
[imgMaterialMetal]: material_Metal.jpg { width=60% }
[imgMaterialAlloy]: material_Alloy.jpg { width=60% }
[imgMaterialGlass]: material_Glass.jpg { width=60% }
[imgMaterialThinGlass]: material_ThinGlass.jpg { width=60% }
[imgMaterialMetallicPaint]: material_MetallicPaint.jpg { width=60% }
[imgMaterialLuminous]: material_Luminous.jpg { width=60% }
[imgColoredWindow]: ColoredWindow.jpg { width=60% }
[imgExampleViewer]: exampleViewerGUI.jpg
+23
View File
@@ -0,0 +1,23 @@
Disclaimer and Legal Information
================================
© 2013–2018 Intel Corporation
Intel, the Intel logo, Xeon, Intel Xeon Phi, and Intel Core are
trademarks of Intel Corporation in the U.S. and/or other countries.
*Other names and brands may be claimed as the property of others.
Optimization Notice: Intel's compilers may or may not optimize to the
same degree for non-Intel microprocessors for optimizations that are not
unique to Intel microprocessors. These optimizations include SSE2, SSE3,
and SSSE3 instruction sets and other optimizations. Intel does not
guarantee the availability, functionality, or effectiveness of any
optimization on microprocessors not manufactured by Intel.
Microprocessor-dependent optimizations in this product are intended for
use with Intel microprocessors. Certain optimizations not specific to
Intel microarchitecture are reserved for Intel microprocessors. Please
refer to the applicable product User and Reference Guides for more
information regarding the specific instruction sets covered by this
notice.
Notice Revision #20110804
+15
View File
@@ -0,0 +1,15 @@
[Embree]: https://embree.github.io/
[news/updates]: http://www.ospray.org/news.html
[getting OSPRay]: http://www.ospray.org/downloads.html
[OSPRay Demos and Examples]: http://www.ospray.org/demos.html
[OSPRayReadme]: http://www.sdvis.org/ospray/download/OSPRay_readme_devel.pdf "OSPRay Documentation"
[gensv/generateSciVis.cpp]: https://github.com/ospray/ospray/blob/devel/modules/mpi/apps/gensv/generateSciVis.cpp#L213
[tutorial]: #tutorial
[camera]: #cameras
[volume]: #volumes
[path tracer]: #path-tracer
[point light]: #point-light-sphere-light
[Compiling OSPRay]: #compiling-ospray
[Parallel Rendering with MPI]: #parallel-rendering-with-mpi
+14
View File
@@ -0,0 +1,14 @@
[Embree]: https://embree.github.io/
[news/updates]: news.html
[getting OSPRay]: downloads.html
[OSPRay Demos and Examples]: demos.html
[OSPRayReadme]: http://www.sdvis.org/ospray/download/OSPRay_readme_devel.pdf "OSPRay Documentation"
[gensv/generateSciVis.cpp]: https://github.com/ospray/ospray/blob/devel/modules/mpi/apps/gensv/generateSciVis.cpp#L213
[tutorial]: documentation.html#tutorial
[camera]: documentation.html#cameras
[volume]: documentation.html#volumes
[path tracer]: documentation.html#path-tracer
[point light]: documentation.html#point-light-sphere-light
[Compiling OSPRay]: documentation.html#compiling-ospray
[Parallel Rendering with MPI]: documentation.html#parallel-rendering-with-mpi
+173
View File
@@ -0,0 +1,173 @@
Parallel Rendering with MPI
===========================
OSPRay has the ability to scale to multiple nodes in a cluster via MPI.
This enables applications to take advantage of larger compute and memory
resources when available.
Prerequisites for MPI Mode
--------------------------
In addition to the standard build requirements of OSPRay, you must have
the following items available in your environment in order to build&run
OSPRay in MPI mode:
- An MPI enabled multi-node environment, such as an HPC cluster
- An MPI implementation you can build against (i.e. Intel MPI,
MVAPICH2, etc...)
Enabling the MPI Module in your Build
-------------------------------------
To build the MPI module the CMake option `OSPRAY_MODULE_MPI` must be
enabled, which can be done directly on the command line (with
`-DOSPRAY_MODULE_MPI=ON`) or through a configuration dialog (`ccmake`,
`cmake-gui`), see also [Compiling OSPRay].
This will trigger CMake to go look for an MPI implementation in your
environment. You can then inspect the CMake value of `MPI_LIBRARY` to
make sure that CMake found your MPI build environment correctly.
This will result in an OSPRay module being built. To enable using it,
applications will need to either link `libospray_module_mpi`, or call
ospLoadModule("mpi");
before initializing OSPRay.
Modes of Using OSPRay's MPI Features
------------------------------------
OSPRay provides two ways of using MPI to scale up rendering: offload and
distributed.
### Offload Rendering
The "offload" rendering mode is where a single (not-distributed) calling
application treats the OSPRay API the same as with local rendering.
However, OSPRay uses multiple MPI connected nodes to evenly distribute
frame rendering work, where each node contains a full copy of all scene
data. This method is most effective for scenes which can fit into
memory, but are very expensive to render: for example, path tracing with
many samples-per-pixel is very compute heavy, making it a good situation
to use the offload feature. This can be done with any application which
already uses OSPRay for local rendering without the need for any code
changes.
When doing MPI offload rendering, applications can optionally enable
dynamic load balancing, which can be beneficial in certain contexts.
This load balancing refers to the distribution of tile rendering work
across nodes: thread-level load balancing on each node is still dynamic
with the thread tasking system. The options for enabling/controlling the
dynamic load balacing features on the `mpi_offload` device are found in
the table below, which can be changed while the application is running.
Please note that these options will likely only pay off for scenes which
have heavy rendering load (e.g. path tracing a non-trivial scene) and
have a lot of variance in how expensive each tile is to render.
Type Name Default Description
----- -------------------- -------- --------------------------------------
bool dynamicLoadBalancer false whether to use dynamic load balancing
----- -------------------- -------- --------------------------------------
: Parameters specific to the `mpi_offload` device
### Distributed Rendering
The "distributed" rendering mode is where a MPI distributed application
(such as a scientific simulation) uses OSPRay collectively to render
frames. In this case, the API expects all calls (both created objects
and parameters) to be the same on every application rank, except each
rank can specify arbitrary geometries and volumes. Each renderer will
have its own limitations on the topology of the data (i.e. overlapping
data regions, concave data, etc.), but the API calls will only differ
for scene objects. Thus all other calls (i.e. setting camera, creating
framebuffer, rendering frame, etc.) will all be assumed to be identical,
but only rendering a frame and committing the model must be in
lock-step. This mode targets using all available aggregate memory for
very large scenes and for "in-situ" visualization where the data is
already distributed by a simulation app.
Running an Application with the "offload" Device
------------------------------------------------
As an example, our sample viewer can be run as a single application
which offloads rendering work to multiple MPI processes running on
multiple machines.
The example apps are setup to be launched in two different setups. In
either setup, the application must initialize OSPRay with the offload
device. This can be done by creating an "`mpi_offload`" device and
setting it as the current device (via the `ospSetCurrentDevice()`
function), or passing either "`--osp:mpi`" or "`--osp:mpi-offload`" as a
command line parameter to `ospInit()`. Note that passing a command line
parameter will automatically call `ospLoadModule("mpi")` to load the MPI
module, while the application will have to load the module explicitly if
using `ospNewDevice()`.
### Single MPI Launch
OSPRay is initialized with the `ospInit()` function call which takes
command line arguments in and configures OSPRay based on what it finds.
In this setup, the app is launched across all ranks, but workers will
never return from `ospInit()`, essentially turning the application into
a worker process for OSPRay. Here's an example of running the
ospVolumeViewer data-replicated, using `c1`-`c4` as compute nodes and
`localhost` the process running the viewer itself:
mpirun -perhost 1 -hosts localhost,c1,c2,c3,c4 ./ospExampleViewer <scene file> --osp:mpi
### Separate Application&Worker Launches
The second option is to explicitly launch the app on rank 0 and worker
ranks on the other nodes. This is done by running `ospray_mpi_worker` on
worker nodes and the application on the display node. Here's the same
example above using this syntax:
mpirun -perhost 1 -hosts localhost ./ospExampleViewer <scene file> --osp:mpi \
: -hosts c1,c2,c3,c4 ./ospray_mpi_worker
This method of launching the application and OSPRay worker separately
works best for applications which do not immediately call `ospInit()` in
their `main()` function, or for environments where application
dependencies (such as GUI libraries) may not be available on compute
nodes.
Running an Application with the "distributed" Device
----------------------------------------------------
Applications using the new distributed device should initialize OSPRay
by creating (and setting current) an "`mpi_distributed`" device or pass
`"--osp:mpi-distributed"` as a command line argument to `ospInit()`.
Note that due to the semantic differences the distributed device gives
the OSPRay API, it is not expected for applications which can already
use the offload device to correctly use the distributed device without
changes to the application.
The following additional parameter can be set on the `mpi_distributed`
device.
------- ----------------- ----------------------------------------------
Type Name Description
------- ----------------- ----------------------------------------------
`void*` worldCommunicator A pointer to the `MPI_Comm` which should be
used as OSPRay's world communicator. This will
set how many ranks OSPRay should expect to
participate in rendering. The default is
`MPI_COMM_WORLD` where all ranks are expected
to participate in rendering.
------ ------------ ----------------------------------------------------
: Parameters for the `mpi_distributed` device.
By setting the `worldCommunicator` parameter to a different communicator
than `MPI_COMM_WORLD` the client application can tune how OSPRay is run
within its processes. The default uses `MPI_COMM_WORLD` and thus expects
all processes to also participate in rendering, thus if a subset of processes
do not call collectives like `ospRenderFrame` the application would hang.
For example, an MPI parallel application may be
run with one process per-core, however OSPRay is multithreaded and will
perform best when run with one process per-node. By splitting `MPI_COMM_WORLD`
the application can create a communicator with one rank per-node to then
run OSPRay on one process per-node. The remaining ranks on each node
can then aggregate their data to the OSPRay process for rendering.
+269
View File
@@ -0,0 +1,269 @@
News, Updates, and Announcements
================================
Mar 7, 2018: Version v1.5.0 now released on GitHub
---------------------------------------------------
New release version 1.5.0 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.5.0).
Jan 10, 2018: Version v1.4.3 now released on GitHub
---------------------------------------------------
New release version 1.4.3 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.4.3).
Nov 28, 2017: Version v1.4.2 now released on GitHub
---------------------------------------------------
New release version 1.4.2 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.4.2).
Nov 10, 2017: Version v1.4.1 now released on GitHub
---------------------------------------------------
New release version 1.4.1 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.4.1).
Sept 29, 2017: Version v1.4.0 now released on GitHub
----------------------------------------------------
New release version 1.4.0 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.4.0).
July 7, 2017: Version v1.3.1 now released on GitHub
---------------------------------------------------
New release version 1.3.1 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.3.1).
June 2, 2017: Version v1.3.0 now released on GitHub
---------------------------------------------------
New release version 1.3.0 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.3.0).
Mar 27, 2017: VisIt & OSPRay/SWR
--------------------------------
[Pre-built binaries][1] for
[VisIt](https://wci.llnl.gov/simulation/computer-codes/visit) to run
with OSPRay or [SWR](http://openswr.org/) are available, see [here for
instructions][1].
[1]: http://web.eecs.utk.edu/~ahota/visitospray/binary.html
Mar 13, 2017: Version v1.2.1 now released on GitHub
----------------------------------------------------
New release version 1.2.1 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.2.1).
Feb 9, 2017: Version v1.2.0 now released on GitHub
----------------------------------------------------
New release version 1.2.0 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.2.0).
Nov 30, 2016: Version v1.1.2 now released on GitHub
----------------------------------------------------
New release version 1.1.2 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.1.2).
Oct 2016: OSPRay at IEEE Vis
----------------------------
The paper "[OSPRay – A CPU Ray Tracing Framework for Scientific
Visualization](http://www.sdvis.org/ospray/download/talks/IEEEVis2016_OSPRay_paper.pdf)"
(49MB, [smaller version](http://www.sdvis.org/ospray/download/talks/IEEEVis2016_OSPRay_paper_small.pdf)
1.8MB) has been accepted at IEEE Vis. Also available are the [slides of
the talk](http://www.sdvis.org/ospray/download/talks/IEEEVis2016_OSPRay_talk.pdf)
by Ingo Wald. Additionally, [Jim Jeffers gave a
talk](http://www.sdvis.org/presentations/IEEEVis2016_SDVis.pdf)
as well.
Oct 24, 2016: Version v1.1.1 now released on GitHub
----------------------------------------------------
New release version 1.1.1 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.1.1).
Oct 4, 2016: Version v1.1.0 now released on GitHub
----------------------------------------------------
New release version 1.1.0 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.1.0).
July 20, 2016: Version v1.0.0 now released on GitHub
----------------------------------------------------
New release version 1.0.0 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v1.0.0).
June 3, 2016: Version v0.10.1 now released on GitHub
----------------------------------------------------
New release version 0.10.1 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v0.10.1).
May 13, 2016: Version v0.10.0 now released on GitHub
----------------------------------------------------
New release version 0.10.0 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v0.10.0).
Feb 29, 2016: Version v0.9.1 now released on GitHub
---------------------------------------------------
New release version 0.9.1 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v0.9.1).
Dec 18, 2015: Version v0.9.0 now released on GitHub
---------------------------------------------------
New release version 0.9.0 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay/releases/v0.9.0).
Dec 7, 2015: Version v0.8.3 now released on GitHub
--------------------------------------------------
New release version 0.8.3 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay).
Nov, 2015: Visualization of the 10TB Walls Dataset
--------------------------------------------------
[![](gallery/walls_4k-thumb.png)](gallery.html)
[SGI](http://www.sgi.com/) featured the visualization of the 10TB
`walls` dataset at [SC15](http://sc15.supercomputing.org/) in Austin,
Texas. More details in [SGI's
blog](http://blog.sgi.com/accelerating-scientific-discovery-through-visualization/).
Additional images and a movie are available in the
[gallery](gallery.html).
July 22, 2015: Version v0.8.2 now released on GitHub
--------------------------------------------------
New release version 0.8.2 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay).
July 13, 2015: OSPRay demo on KNL and Omni-Path at ISC15
-------------------------------------------------------
The first public demonstration of OSPRay on Intel® Xeon Phi™ processor (Knights Landing)
processors and Intel® Omni-Path Fabric is being shown at [ISC15](http://www.isc-hpc.com/)
in Frankfurt. The demo with [the Centre for Theoretical Cosmology (CTC)](http://www.ctc.cam.ac.uk/)
is a visualization of Cosmic Microwave Background (CMB) data captured by the Planck Satellite.
More details [here](http://blogs.intel.com/evangelists/2015/07/13/knl-and-omnipath-demonstrations-proof-of-gravitational-lensing-seems-cool-to-me-what-do-i-know/).
May 11, 2015: OSPRay mailing list
---------------------------------
We have created a new mailing list for OSPRay release announcements and
major news. Subscribe
[here](https://groups.google.com/forum/#!forum/ospray-announce/join).
May 8, 2015: Version v0.8.1 now released on GitHub
--------------------------------------------------
New release version 0.8.1 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay).
Apr 22, 2015: Version v0.8.0 now released on GitHub
---------------------------------------------------
New release version 0.8.0 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay).
Apr 2015: "First Light" for OSPRay-enabled BALLView
---------------------------------------------------
[![](related_projects/ballview/ballview.jpg)](related_projects/ballview/ballview.png)
Andreas Hildebrandt, head of the [Software Engineering and
Bioinformatics group at the University of
Mainz](http://bio.informatik.uni-mainz.de/) is currently creating an
OSPRay rendering module for their [BALLView](http://www.ball-project.org/ballview/)
package, a standalone molecular modelling and visualization application
for the "BALL" Biochemical Algorithm Library.
Apr 2015: OSPRay related paper accepted at EGPGV
------------------------------------------------
A paper on extending OSPRay to allow ray tracing of unstructured
polyhedral grids has been accepted at the EUROGRAPHICS Symposium on
Parallel Graphics and Visualization (EGPGV).
Apr 2015: "First Light" of upcoming MPI and Display Wall Support
----------------------------------------------------------------
[![](gallery/ospray_stallion-thumb.jpg)](displaywall.html)
We now have "first light" for some upcoming OSPRay MPI-Parallel
Rendering and Display Wall features planned for OSPRay 0.9. The attached
image shows [OSPRay parallel rendering on TACCs 320 MPixel "Stallion"
Display wall](displaywall.html). [Read more.](displaywall.html)
Apr 6, 2015: Public Talk on OSPRay, Embree, and SWR at Sandia
-------------------------------------------------------------
Mar 12, 2015: Version v0.7.2 now Released on GitHub
---------------------------------------------------
New release version 0.7.2 is now available on the [OSPRay GitHub
page](https://github.com/ospray/OSPRay).
Dec 12, 2014: OSPRay "Alpha" Release Now Available
--------------------------------------------------
Following our announcement at Supercomputing 2014, an early "alpha"
version of OSPRay is now available on
[GitHub](https://github.com/ospray/OSPRay). The main purpose of this
"alpha" release is to give interested parties an early indication of the
capabilities, features, and performance they can can expect from the
eventual 1.0 version (which we anticipate releasing in 2015), as well as
to give early adopters "something" to experiment with that is
unencumbered by NDAs.
Being an "alpha"-level release a certain amount of bugs, as-yet-missing
features, or any other issues in the current version cannot be ruled
out; however, we are committed to eradicating all such issues as soon as
possible, and will constantly be posting bugfix-releases fox fixed
issues. Should you find any such issues please report them immediately
via [OSPRay's GitHub Issue
Tracker](https://github.com/ospray/OSPRay/issues) (or send us a pull
request); for missing features please contact us via email at
<ospray@googlegroups.com>.
Nov 25, 2014: SC14 slides now available
---------------------------------------
The slides for our OSPRay-related talks at SC14 are now available
- Christiaan Gribble's ["High-Performance Radio Frequency Ray Tracing
with Embree (and
OSPRay)"](http://www.rtvtk.org/~cgribble/research/papers/gribble14high.pdf).
- ["OSPRay - A Ray Tracing based Rendering Engine for High-Fidelity
Visualization"](http://www.sdvis.org/ospray/download/talks/SC14DevConf-OSPRay.pdf)
(presented at the Intel® HPC Developers Conference at SC14).
- ["High-Fidelity
Visualization"](http://www.sdvis.org/ospray/download/talks/UltraVis14-HiFiVis-compressed.pdf)
(presented at UltraVis 2014)
+42
View File
@@ -0,0 +1,42 @@
OSPRay Overview
===============
OSPRay is an **o**pen source, **s**calable, and **p**ortable **ray**
tracing engine for high-performance, high-fidelity visualization on
Intel® Architecture CPUs. OSPRay is released under the permissive
[Apache 2.0 license](http://www.apache.org/licenses/LICENSE-2.0).
The purpose of OSPRay is to provide an open, powerful, and easy-to-use
rendering library that allows one to easily build applications that use
ray tracing based rendering for interactive applications (including both
surface- and volume-based visualizations). OSPRay is completely
CPU-based, and runs on anything from laptops, to workstations, to
compute nodes in HPC systems.
OSPRay internally builds on top of [Embree] and [ISPC (Intel® SPMD
Program Compiler)](https://ispc.github.io/), and fully utilizes modern
instruction sets like Intel® SSE4, AVX, AVX2, and AVX-512 to achieve
high rendering performance, thus a CPU with support for at least SSE4.1
is required to run OSPRay.
OSPRay Support and Contact
--------------------------
OSPRay is under active development, and though we do our best to
guarantee stable release versions a certain number of bugs,
as-yet-missing features, inconsistencies, or any other issues are
still possible. Should you find any such issues please report
them immediately via [OSPRay's GitHub Issue
Tracker](https://github.com/ospray/OSPRay/issues) (or, if you should
happen to have a fix for it,you can also send us a pull request); for
missing features please contact us via email at
<ospray@googlegroups.com>.
For recent news, updates, and announcements, please see our complete
[news/updates] page.
Join our [mailing
list](https://groups.google.com/forum/#!forum/ospray-announce/join) to
receive release announcements and major news regarding OSPRay.
+191
View File
@@ -0,0 +1,191 @@
\usepackage{polyglossia}
\setdefaultlanguage{english}
\usepackage{amssymb,amsmath}
\usepackage{nicefrac}
\usepackage{ifxetex,ifluatex}
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\else % if luatex or xelatex
\ifxetex
% \usepackage{mathspec}
\usepackage[no-sscript]{xltxtra}
\usepackage{xunicode}
\else
\usepackage{fontspec}
\fi
\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
\newcommand{\euro}{€}
\fi
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{%
\usepackage{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\PassOptionsToPackage{hyphens}{url} % url is loaded by hyperref
\usepackage{tabu,booktabs}
\tabulinesep=3pt
\usepackage{graphicx}
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% fix issue with linebreaks and letter spacing in non-cpp blocks
\DefineVerbatimEnvironment{verbatim}{Verbatim}{}
% Add ',fontsize=\small' for more characters per line
\newenvironment{Shaded}{}{}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
\newcommand{\ImportTok}[1]{#1}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
\newcommand{\BuiltInTok}[1]{#1}
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
\newcommand{\RegionMarkerTok}[1]{#1}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\columnwidth\columnwidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\def\fps@figure{htp}% set default figure placement
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
\ifxetex
\usepackage[setpagesize=false, % page size defined by xetex
unicode=false, % unicode breaks when used with xetex
xetex]{hyperref}
\else
\usepackage[unicode=true]{hyperref}
\fi
% read version into \osprayversion
\newread\versionfile
\openin\versionfile=tmp/version
\read\versionfile to\osprayversion
\closein\versionfile
\hypersetup{breaklinks=true,
bookmarks=true,
pdfauthor={Intel Corporation},
pdftitle={OSPRay: An Open, Scalable, Parallel, Ray Tracing Based Rendering Engine for High-Fidelity Visualization \osprayversion},
colorlinks=true,
citecolor=blue,
urlcolor=blue,
linkcolor=blue,
pdfborder={0 0 0}}
\copyrightyears{2013--2018}
\trademarkacknowledgement{%
Intel, the Intel logo, Xeon, Intel Xeon Phi, and Intel Core are
trademarks of Intel Corporation in the U.S. and/or other countries.
}
\ftcoptimizationnotice
% no hyphenation (e.g. for trademarks)
\hyphenation{Intel Xeon}
% fix missing unicode chars in used font
\catcode`\⇐\active
\def⇐{\ensuremath{\Leftarrow}}
\catcode`\⇒\active
\def⇒{\ensuremath{\Rightarrow}}
\catcode`\←\active
\def←{\ensuremath{\leftarrow}}
\catcode`\→\active
\def→{\ensuremath{\rightarrow}}
\catcode`\∞\active
\def∞{\ensuremath{\infty}}
\catcode`\½\active
\def½{\nicefrac12}
\catcode`\⅓\active
\def⅓{\nicefrac13}
\catcode`\⅔\active
\def⅔{\nicefrac23}
\catcode`\¼\active
\def¼{\nicefrac14}
\catcode`\¾\active
\def¾{\nicefrac34}
\catcode`\∙\active
\def∙{\ensuremath{\cdot}}
% fix overfull hboxes, somehow required for xelatex
% pdflatex and lualatex is fine without
\emergencystretch=0.5em
\makeatletter%
\newcommand*{\BreakableChar}{%
\leavevmode%
\nobreak\hskip\z@skip%
\discretionary{}{}{}%
\nobreak\hskip\z@skip%
}%
\makeatother
% enable (more flexible) linebreaks in \texttt
\renewcommand{\texttt}[1]{%
\begingroup%
\protect\renewcommand{\_}{\textunderscore\BreakableChar}%
\ttfamily%
\fontdimen3\font=0.1em% interword stretch
\fontdimen4\font=0.1em% interword shrink
\hyphenchar\font=`\-% to allow hyphenation
\begingroup\lccode`~=`/\lowercase{\endgroup\def~}{/\BreakableChar}%
\catcode`/=\active%
\begingroup\lccode`~=`*\lowercase{\endgroup\def~}{*\BreakableChar}%
\catcode`*=\active%
\begingroup\lccode`~=`?\lowercase{\endgroup\def~}{?\BreakableChar}%
\catcode`?=\active%
\begingroup\lccode`~=`)\lowercase{\endgroup\def~}{)\BreakableChar}%
\catcode`)=\active%
\begingroup\lccode`~=`.\lowercase{\endgroup\def~}{.\BreakableChar}%
\catcode`.=\active%
\begingroup\lccode`~=`;\lowercase{\endgroup\def~}{;\BreakableChar}%
\catcode`;=\active%
\scantokens{#1\noexpand}%
\endgroup%
}
+16
View File
@@ -0,0 +1,16 @@
OSPRay running inside ParaView
==============================
[![](related_projects/vtk-paraview/screenshot-paraview-fiu-thumb.jpg)](related_projects/vtk-paraview/screenshot-paraview-fiu.jpg)
This picture shows a ParaView plugin that allows ParaView to render
through OSPRay, using a ParaView/VTK plugin developed by the Texas
Advanced Computing Center. (click on the image for a full-resolution
version)
The particular model used in this screenshot is courtesy Florida
International University and the Texas Advanced Computing Center, and
stems from a simulation of Ground Water Flow performed by Florida
International University.
Screenshot courtesy Carson Brownlee, Texas Advanced Computing Center.
+23
View File
@@ -0,0 +1,23 @@
#FIG 3.2 Produced by xfig version 3.2.5c
Landscape
Center
Metric
Letter
100.00
Single
-2
1200 2
2 1 0 3 0 7 50 -1 -1 0.000 0 0 7 1 0 2
1 1 2.00 120.00 270.00
3150 1800 3150 450
2 1 0 3 0 7 50 -1 -1 0.000 0 0 7 1 0 2
1 1 2.00 120.00 270.00
1350 2700 3150 1800
2 2 0 1 0 7 60 -1 -1 0.000 0 0 7 0 0 5
3150 450 5400 450 5400 1800 3150 1800 3150 450
2 1 0 3 0 7 50 -1 -1 0.000 0 0 7 1 0 2
1 1 2.00 120.00 270.00
3150 1800 5400 1800
4 0 0 50 -1 16 14 0.0000 4 225 840 2700 2340 position\001
4 0 0 50 -1 16 14 0.0000 4 225 675 3240 945 edge2\001
4 0 0 50 -1 16 14 0.0000 4 225 675 4500 2115 edge1\001
+27
View File
@@ -0,0 +1,27 @@
\documentclass[oneside]{intel-spec}
\include{preamble}
\begin{document}
\title{OSPRay\vskip0.3\baselineskip\LARGE
\noindent An Open, Scalable, Parallel, Ray Tracing Based Rendering Engine
for High-Fidelity Visualization}
\version{\osprayversion}
\maketitle
\tableofcontents
\input{tmp/overview}
\input{tmp/changelog}
\input{tmp/compilation}
\addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
\hypersetup{bookmarksdepth=2}
\input{tmp/api}
\addtocontents{toc}{\protect\setcounter{tocdepth}{1}}
\hypersetup{bookmarksdepth=1}
\input{tmp/mpi}
\input{tmp/examples}
\makedisclaimers
\end{document}
+7
View File
@@ -0,0 +1,7 @@
OSPRay
======
This is release v<OSPRAY_VERSION> of OSPRay. For changes and new features see the
[changelog](CHANGELOG.md). Also visit http://www.ospray.org for more
information.
+73
View File
@@ -0,0 +1,73 @@
Projects that make use of OSPRay
================================
This page gives a brief (and incomplete) list of other projects that
make use of OSPRay, as well as a set of related links to other projects
and related information.
If you have a project that makes use of OSPRay and would like this to be
listed here, please let us know.
BALLView
--------
[![](related_projects/ballview/ballview.jpg)](related_projects/ballview/ballview.jpg)
[Prof Andreas
Hildebrandt](http://bio.informatik.uni-mainz.de/members/andreas.hildebrandt),
head of the [Software Engineering and Bioinformatics
group](http://bio.informatik.uni-mainz.de/) at the University of Mainz
is currently creating an OSPRay rendering module for their
[BALLView](http://www.ballview.org/) package, a standalone molecular
modelling and visualization application for the "BALL" Biochemical
Algorithm Library.
GLuRay
------
[![](images/GLuRayPage.jpg)][GLuRay]
[GLuRay] OpenGL to Ray Tracing Mapper
[GLuRay]: https://tacc.github.io/GLuRay/$
pvOSPRay: A OSPRay Plugin to ParaView/VTKx
------------------------------------------
[![](related_projects/vtk-paraview/screenshot-paraview-fiu-thumb.jpg)](related_projects/vtk-paraview/screenshot-paraview-fiu.jpg)
The Remote Visualization Group at the [Texas Advanced Computing
Center](https://www.tacc.utexas.edu/) (TACC) is building and maintaining
OSPRay plugins for ParaView, VisIt, and VTK. The [screenshot supplied
here](pvospray.html) shows a working version of ParaView, rendering a
non-trivial model through OSPRay. All three OSPRay plugins are hosted on
TACC's github pages: [pvOSPRay](https://github.com/TACC/pvOSPRay) for
the ParaView module, [visitOSPRay](https://github.com/TACC/visitOSPRay)
for the VisIt module, and [vtkOSPRay](https://github.com/TACC/vtkOSPRay)
for the base VTK module.
StingRay
--------
[![](related_projects/stingray/stingray.jpg)](related_projects/stingray/stingray.jpg)
SURVICE Engineering's ["StingRay"
toolkit](http://www.rtvtk.org/~cgribble/research/papers/gribble14high.pdf)
makes use of Embree for simulating radio frequency, and uses OSPRay for
visualizing the resuls.
Projects that are closely related to OSPRay
===========================================
- The [Embree](http://embree.github.io) Ray Tracing Kernel Framework
- The [Intel® SPMD Program Compiler](http://ispc.github.io) (ISPC)
- OSPRay's "sister project" is [OpenSWR](http://OpenSWR.github.io)
(**o**pen **s**oft**w**are **r**asterizer), a new high-performance,
highly-scalable, software OpenGL implementation that runs on host
CPUs.
+128
View File
@@ -0,0 +1,128 @@
# Scenegraph
## <span style="color:red"> WARNING: USE AT YOUR OWN RISK. The Scenegraph is currently in Alpha mode and will change frequently. It is not
yet recommended for critical production work. </span>
The scenegraph is the basis of our exampleViewer which consists of a superset of OSPRay objects represented in a graph hierarchy (currently a tree). This
graph functions as a hierarchical specification for scene properties and a self-managed update graph. The
scenegraph infrastructure includes many convenience functions for templated traversals, queries of
state and child state, automated updates, and timestamped modifications to underlying state.
The scenegraph nodes closely follow the dependencies of existing OSPRay API internals, ie
a sg::Renderer has a "model" child, which in turn has a "TriangleMesh", which in turn has a child
named "vertex" similar to how you may set the "vertex" parameter on the osp::TriangleMesh which in
turn is added to an OSPModel object which is set as the model on the OSPRenderer. The scenegraph
is a supserset of OSPRay functionality so there isn't a direct 1:1 mapping between the scenegraph
hierarchy in all cases, however it is kept as close as possible. This makes the scene graph viewer
in ospExampleViewer a great way to understand OSPRay state.
### Hierarchy Structure
The root of the scenegraph is based on sg::Renderer. The scenegraph can be created by
```
auto renderer = sg::createNode("renderer", "Renderer");
```
which automatically creates child nodes for necessary OSPRay state. To update and commit all state and render
a single function is provided which can be called with:
```
renderer.renderFrame(renderer["frameBuffer"].nodeAs<sg::FrameBuffer>);
```
Values can be set using:
```
renderer["spp"] = 16;
```
The explore the full set of nodes, simply launch the exampleViewer and traverse through the
GUI representation of all scenegraph nodes.
### Traversals
The scenegraph contains a set of builtin traversals as well as modular visitor functors for
implementing custom passes over the scenegraph. The required traversals are handled for you
by default within the renderFrame function on the renderer. For any given node there are two phases
to a traversal operation, pre and post traversal of the nodes children. preTraversal initializes
node state and objects and sets the current traversal context with appropriate state. For instance,
sg::Model will create a new OSPModel object, set its value to that object,
and set sg::RenderContext.currentOSPModel to its own value. After preTraversal is finished, the children
of sg::Model are processed in a similar fashion and now use the modified context. In postTraversal,
sg::Model will commit the changes that its children have potentially set and it will pop its modifications
from the current context. This behavior is replicated for every scenegraph node and enables children
to act on parent state without specific implementations from the parent node. An example of this are the
sg::NodeParam nodes which are containers for values to be set on OSPObjects, such as a float value. This
is put on the scenegraph with a call to:
```
renderer["lights"]["sun"].createChild("intensity", "float", 0.3f);
```
This call accesses the child named "lights" on the renderer, and in turn the child named "sun".
This child then gets its own child of a newly created node with the name "intensity" of type "float"
with a value of 0.3f. When committed, this node will call ospSet1f with the node value on the current
OSPObject on the context which is set by the parent. If you were to create a custom light called "MyLight"
and had a float parameter called "flickerFreq", a similar line would be used without requiring any additional
changes in the scenegraph internals beyond registering the new light class. Known parameters such as
floats will also show up in the exampleViewerGUI without requiring any additional code beyond adding them to
the scenegraph and the internal implementation in OSPRay.
The base passes required to utilize the scenegraph
include verification, commit, and render traversals. Every node in the scenegraph has a valid state
which needs to be set before operating on the node. Nodes may have custom qualifications for validity,
but by default they are set through valid_ flags on the scenegraph Node for things like whitelists
and range checks. Once verified, Commit traverses the scenegraph and commits scenegraph state to
OSPRay. Commits are timestamped, so re-committing will only have any affect if a dependent child
has been modified requiring a new commit. Because of this, each node does not have to track if it is
valid or if anything in the scene has been modified, as commit will only be called on that node if those
are already true. By default invalid nodes with throw exceptions, however this can be turned off which enables
the program to keep running. In the exampleViewer GUI, invalid nodes will be marked in red but the previously
committed state will keep rendering until the invalid state is corrected.
For examples of implementing custom traversals, see the sg/visitors folder. Here is an example of
a visitor that collects all nodes with a given name:
```
struct GatherNodesByName : public Visitor
{
GatherNodesByName(const std::string &_name);
bool operator()(Node &node, TraversalContext &ctx) override;
std::vector<std::shared_ptr<Node>> results();
private:
std::string name;
std::vector<std::shared_ptr<Node>> nodes;
};
// Inlined definitions ////////////////////////////////////////////////////
inline GatherNodesByName::GatherNodesByName(const std::string &_name)
: name(_name)
{
}
inline bool GatherNodesByName::operator()(Node &node, TraversalContext &)
{
if (utility::longestBeginningMatch(node.name(), this->name) == this->name) {
auto itr = std::find_if(
nodes.begin(),
nodes.end(),
[&](const std::shared_ptr<Node> &nodeInList) {
return nodeInList.get() == &node;
}
);
if (itr == nodes.end())
nodes.push_back(node.shared_from_this());
}
return true;
}
inline std::vector<std::shared_ptr<Node>> GatherNodesByName::results()
{
return nodes;// TODO: should this be a move (i.e. reader 'consumes')?
}
```
### Thread Safety
The scenegraph is only thread safe for accessing and setting values on nodes. More advanced
operations like adding or removing nodes are not thread safe. At some point we hope to add
transactions to handle these, but for now the scenegraph nodes must be added/removed on the same
thread that is committing and rendering.
+17
View File
@@ -0,0 +1,17 @@
#FIG 3.2 Produced by xfig version 3.2.5c
Landscape
Center
Metric
Letter
100.00
Single
-2
1200 2
5 1 0 1 0 7 50 -1 -1 0.000 0 1 0 0 4275.000 1974.375 3600 3150 4275 3330 4950 3150
5 1 0 1 0 7 50 -1 -1 0.000 0 1 0 0 4972.500 3307.500 5175 4140 5310 4095 5400 4050
2 1 0 3 0 7 50 -1 -1 0.000 0 0 7 0 0 3
2250 5850 4275 1800 6300 5850
2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
2700 5850 4275 1800 5850 5850
4 0 0 50 -1 16 14 0.0000 4 225 1500 4950 2970 openingAngle\001
4 0 0 50 -1 16 14 0.0000 4 225 1710 5400 3870 penumbraAngle\001
+419
View File
@@ -0,0 +1,419 @@
body {
font-size: 16px;
font-weight: normal;
letter-spacing: normal;
color:#373737;
background: #f2f2f2;
font-family: "Myriad Set Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
text-rendering: optimizeLegibility;
font-style: normal;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
text-align: justify;
margin: 0;
}
h1, h2, h3, h4, h5, h6 {
margin: 5px 0;
font-weight: 700;
color: #0071C5;
letter-spacing: normal;
clear: both;
}
h2 {
background: none;
border-top: 1pt solid #333;
padding-top: 0.5em;
}
h1 { font-size: 24px; }
h2 { font-size: 20px; }
h3 { font-size: 16px; }
h4 { font-size: 16px; }
p {
margin: 10px 0 15px 0;
}
dl dt { font-weight:bold;
}
code { font-size: 90%; }
li p { margin: 0 }
img {
display: block;
margin-left: auto;
margin-right: auto;
padding: 0 2em 1ex 0;
}
figcaption {
color: #666;
text-align: center;
}
div.left {
float: left;
max-width: 250px;
margin: 0;
padding: 0;
}
br { clear:both; }
#demo-bullets { font-size: 90%; }
#footer {
padding-top: 5px;
margin: 0;
text-align: center;
background:#212121;
position:fixed;
bottom:0px;
height:22px;
width:100%;
font-size: 12px;
color: #ffffff;
}
#footer_padding {
margin: 0;
text-align: center;
background:#212121;
bottom:0px;
width:100%;
height:100%;
font-size: 12px;
color: #ffffff;
}
#footer a:hover {
color:#ff0000;
}
#footer a {
color:#ffffff;
}
#header {
color: #fff;
position: fixed;
width: 100%;
letter-spacing: -1px;
background: #379;
z-index: 1;
display: block;
}
#content-wrap {
width:100%;
height:100%;
background: #f2f2f2;
/*padding-left: 100px;*/
padding-top:100px;
}
#content {
padding-left: 5px;
padding-right: 0px;
position:static;
max-width: 1024px;
margin-left: auto;
margin-right: auto;
background: #f2f2f2;
padding-top:10px;
padding-bottom:10px;
}
#header-title {
/*display:inline-block;*/
margin: 0;
color: #fff;
font-size: 42px;
/*background:#212121; */
font-weight: 700;
padding: 20px 0px 0px 10px;
text-shadow: #111 0px 0px 10px;
/*padding-left: 100px;*/
padding-top:10px;
letter-spacing: -1px;
max-width: 1024px;
margin-left: auto;
margin-right: auto;
}
#header-subtitle {
display:inline-block;
color: #fff;
font-size: 21px;
font-weight: 300;
/*background: none;*/
text-shadow: #111 0px 0px 10px;
/*padding-top: 10px;*/
/*padding-left: 100px;*/
padding-left: 10px;
/*padding-bottom: 10px;*/
/*background:#212121; */
letter-spacing: -1px;
}
#header-github {
color: #fff;
font-size: 16px;
font-weight: 300;
background: none;
}
#forkme-banner {
display: block;
position: absolute;
top:0;
right: 20px;
width:250px;
z-index: 10;
padding: 10px 0px 10px 20px;
color: #fff;
background: url('images/blacktocat.png') #0090ff no-repeat 80% 50%;
font-weight: 700;
}
#header-spacing {
color: #fff;
font-size: 16px;
font-weight: 300;
height:5px;
background: #f2f2f2;
}
#footer-spacing {
color: #fff;
font-size: 16px;
font-weight: 300;
height:5px;
background: #f2f2f2;
}
#header-navbar {
font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif;
color: #fff;
font-size: 14px;
font-weight: normal;
letter-spacing: normal;
background: #444;
padding-top: 0px;
padding-bottom: 4px;
/*padding-left: 100px;*/
height:18px;
}
#header-navbar ul {
list-style : none;
margin: 0;
padding: 0;
padding-top: 2px;
max-width: 1024px;
margin-left: auto;
margin-right: auto;
}
#header-navbar ul li {
display: inline;
}
#header-navbar ul li a {
display: block;
float: left;
padding-left: 8px;
padding-right: 8px;
color: #DFDFDF;
text-decoration: none;
}
#header-navbar ul li a:hover {
color: #FAFAFA;
}
#header-navbar ul li#selected a {
color: #fff;
}
.title
{
border: 0; padding: 0; margin: 0;
margin-top: 40px;
margin-bottom: 60px;
}
.title h1 {
color: #333;
font-size: 60px;
font-weight: 300;
text-align: center;
border: 0; padding: 0; margin: 0;
border: 0;
}
.title h2 {
color: #888;
font-size: 24px;
font-weight: 200;
text-align: center;
border: 0; padding: 0; margin: 0;
border: 0;
}
div.feature {
display:inline-block;
width: 100%;
margin-left: 5px;
margin-right: 5px;
margin-top: 10px;
margin-bottom: 20px;
}
div.feature a {
color:#373737;
}
div.feature img {
float: left;
display:inline-block;
width: 360px;
height: 260px;
padding:0;
box-shadow: 4px 4px 18px -5px rgba(0,0,0,0.86);
}
.feature-alt img
{
float: right !important;
}
.feature .container {
margin-left: 20px;
margin-right: 20px;
display:inline-block;
max-width: 544px;
color: #666;
font-size: 18px;
font-weight: 200;
}
div.feature p {
padding-left: 20px;
}
div.feature h2 {
border: 0;
color:#555;
font-size: 36px;
}
.fadein {
display: block;
margin-left: auto;
margin-right: auto;
margin-bottom: 20px;
margin-top: 0px;
padding: 0;
position: relative;
padding-bottom: 58.59375%; /* 600/1024 */
max-width: 1000px;
}
#f1 {
box-shadow: 4px 4px 18px -5px rgba(0,0,0,0.86);
}
.fadein img {
margin-left: auto;
max-width: 100%;
height: 100%;
padding: 0;
position: absolute;
}
.teaser-img {
margin-top: 60px;
margin-bottom: 60px;
}
.teaser-features {
margin-top: 250px;
margin-bottom: 150px;
}
.fade {
animation: fade 30s 1;
}
@keyframes fade {
0% {opacity: 0;}
5% {opacity: 0;}
20% {opacity: 1;}
25% {opacity: 1;}
45% {opacity: 0;}
50% {opacity: 0;}
60% {opacity: 1;}
65% {opacity: 1;}
75% {opacity: 0;}
80% {opacity: 0;}
100% {opacity: 1;}
}
hr {
width: 60%;
display: block;
height: 1px;
margin-left: auto;
margin-right: auto;
margin-top: 0px;
margin-bottom: 0px;
border: 0;
border-top: 1.5px solid #aaa;
padding: 0;
}
table {
counter-increment: table;
border-collapse: collapse;
border-spacing: 0;
border: 0px solid #373737;
margin-top: 20px;
margin-bottom: 20px;
text-align: left;
}
table > caption:before {
content: 'Table ' counter(table) ': ';
color: #0071C5;
}
th {
font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif;
padding: 10px;
background: #0071C5;
color: #fff;
}
td {
padding: 10px;
border: 0px solid #373737;
color: #222;
background-color: #fff;
vertical-align:top;
}
div.figure {
clear: both;
counter-increment: figure;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
margin: 0 0 3em 0;
display: inline-block;
width: 100%;
}
p.caption {
margin-top: 3ex;
font-size: 1.1rem;
line-height: 1.6;
text-align: left;
}
p.caption:before {
content: 'Figure ' counter(figure) ': ';
color: #0071C5;
}
+109
View File
@@ -0,0 +1,109 @@
<div class= "title">
<h1> OSPRay </h1>
<h2> A Ray Tracing Based Rendering Engine for High-Fidelity Visualization </h2>
</div>
<hr>
<div class="teaser-img">
<div class="fadein">
<img id="f1" src="images/rm_volume.jpg">
<img id="f2" class="fade" src="images/rm_volume_ao_shadows.jpg"></div><!-- do not change formatting here! -->
</div>
<script type="text/javascript">
el=document.getElementById("f2");
el.addEventListener("click", function(e) {
e.preventDefault;
el.classList.remove("fade");
void el.offsetWidth;
el.classList.add("fade");
}, false);
</script>
<hr>
<div class="teaser-features">
<div class="feature">
<img src="images/heptane_bubbly_osp.jpg">
<div class="container">
<h2> Interactive CPU Rendering </h2>
<p>OSPRay features interactive CPU rendering capabilities geared towards
Scientific Visualization applications. Advanced shading effects such as
Ambient Occlusion, shadows, and transparency can be rendered interactively,
enabling new insights into data exploration.</p>
</div>
</div>
<div class="feature feature-alt">
<img src="images/mag_pt.jpg">
<div class="container">
<h2> Global Illumination </h2>
<p>
OSPRay includes a path tracer capable of interactively rendering
photorealistic global illumination.
</p>
</div>
</div>
<div class="feature">
<img src="images/rm_volume2.jpg">
<div class="container">
<h2> Volume Rendering </h2>
<p>
OSPRay supports high-fidelity interactive direct volume rendering with a
number of state of the art features.
</p>
</div>
</div>
<div class="feature feature-alt">
<img src="images/dns_small.jpg">
<div class="container">
<h2> MPI Distributed </h2>
<p>
Run on large scale distributed-memory systems with a high-performance MPI
backend. Shown is a 450GB direct numerical simulation dataset running
interactively at TACC's Maverick cluster.
</p>
</div>
</div>
<div class="feature">
<a href="displaywall.html">
<img src="gallery/ospray_stallion-thumb.jpg">
<div class="container">
<h2> Display Walls </h2>
<p>
OSPRay parallel rendering on TACC's "Stallion" display wall.
</p>
</div>
</a>
</div>
<div class="feature feature-alt">
<a href="pvospray.html">
<img src="related_projects/vtk-paraview/screenshot-paraview-fiu-thumb.jpg">
<div class="container">
<h2> ParaView </h2>
<p>
OSPRay is directly integrated into ParaView 5.x. Implementations for
VisIt, VMD, and other popular tools have also been developed.
</p>
</div>
</a>
</div>
<div class="feature">
<img src="images/code.jpg">
<div class="container">
<h2> Open Source </h2>
<p>
OSPRay is Open Sourced under the Apache 2.0 license.
</p>
</div>
</div>
<p/>
<hr>
</div>
+66
View File
@@ -0,0 +1,66 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8">
<title>OSPRay$if(select_news)$ News$endif$$if(select_demos)$ Demos$endif$$if(select_documentation)$ Documentation$endif$$if(select_gallery)$ Gallery$endif$$if(select_downloads)$ Download$endif$$if(select_related_projects)$ &ndash; RelatedProjects$endif$</title>
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-57290480-1', 'auto');
ga('send', 'pageview');
</script>
<link rel="stylesheet" type="text/css" media="screen" href="stylesheet.css">
$if(highlighting-css)$
<style type="text/css">
$highlighting-css$
div.sourceCode { overflow-x: initial; }
</style>
$endif$
</head>
<body>
<div id="header">
<div id="header-github">
<a id="forkme-banner" href="https://github.com/ospray/OSPRay">View on GitHub</a>
</div>
<div id="header-title">
OSPRay
<div id="header-subtitle">
A Ray Tracing Based Rendering Engine for High-Fidelity Visualization
</div>
</div>
<div id="header-navbar">
<ul>
<li$if(select_index)$ id="selected"$endif$><a href="index.html">Overview</a></li>
<li$if(select_news)$ id="selected"$endif$><a href="news.html">News</a></li>
<li$if(select_demos)$ id="selected"$endif$><a href="demos.html">Demos</a></li>
<li$if(select_documentation)$ id="selected"$endif$><a href="documentation.html">Documentation</a></li>
<li$if(select_gallery)$ id="selected"$endif$><a href="gallery.html">Gallery</a></li>
<li$if(select_downloads)$ id="selected"$endif$><a href="downloads.html">Downloads</a></li>
<li><a href="https://github.com/ospray/OSPRay/wiki">Wiki</a></li>
<li><a href="https://github.com/ospray/OSPRay/issues">Bugs/Issues</a></li>
<li$if(select_related_projects)$ id="selected"$endif$><a href="related_projects.html">Related Projects</a></li>
</ul>
</div>
<div id="header-spacing"></div>
</div>
<div id="content-wrap">
<div id="content">
$body$
</div>
</div>
$if(select_legal)$
$else$
<div id="footer">
© 2013–2018 Intel Corporation <a href="legal.html">Disclaimer and Legal Information</a>
</div>
$endif$
</body>
</html>