OpenSceneGraph

Last updated
OpenSceneGraph
Stable release
3.6.5 / January 31, 2020;4 years ago (2020-01-31) [1]
Repository
Written in C++
Operating system Cross-platform
Type 3D graphics
License OpenSceneGraph Public License (LGPL based)
Website www.openscenegraph.org
www.openscenegraph.com

OpenSceneGraph is an open-source 3D graphics application programming interface (library or framework), [2] used by application developers in fields such as visual simulation, computer games, virtual reality, scientific visualization and modeling.

Contents

The toolkit is written in standard C++ using OpenGL, [2] and runs on a variety of operating systems including Microsoft Windows, macOS, Linux, IRIX, Solaris and FreeBSD. Since version 3.0.0, OpenSceneGraph also supports application development for mobile platforms, namely iOS and Android.

As of 2021, the project is being succeeded by VulkanSceneGraph project, a Vulkan-based library. [3] OpenSceneGraph is in maintenance phase since 2019.

History

The OpenSceneGraph project was initiated by Don Burns in 1998. Robert Osfield joined the project during 1999, working on porting finished components for Microsoft Windows. The project went open source in September 1999 and the official project website was created. Towards the end of the year Osfield took over the project and began extensive refactoring of the existing codebase, putting emphasis on modernisation, embracing modern C++ standards and design patterns.

In April 2001, taking into account growing community of users and interest of public, Robert Osfield created OpenSceneGraph Professional Services, providing commercial support, consulting and training services. This marks full professionalization of the project.

The first official stable version of OpenSceneGraph was version 1.0, released in 2005. An extended version 2.0 followed in 2007, adding support for multi-core and multi-gpu systems, several important NodeKits and usage of unified multiplatform build system CMake. Books and user handbooks were introduced. [4]

The project has been quickly growing and becoming more popular ever since. There are more than 530 contributors signed under current stable version, and the official mailing list contains thousands of names. [5] [ needs update ]

In 2019, the project was moved to a maintenance phase, the main development effort being routed to its successor project VulkanSceneGraph. [6]

Features

Overview of the openscenegraph architecture. Architecture of OpenSceneGraph.jpg
Overview of the openscenegraph architecture.

Features in version 1.0: [7]

Features in version 2.8.3 [8]

Features in version 2.8.4: [9]

Features in version 3.0.0: [10]

Stable version release history

VersionRelease Date
3.05 February 2013 [11]
3.224 July 2013 [12]
3.420 July 2015 [13]
3.4.128 August 2017 [14]
3.67 April 2018 [15]
3.6.128 May 2018
3.6.229 June 2018
3.6.314 September 2018
3.6.426 July 2019
3.6.531 January 2020

Architecture

Library architecture can be separated into three main subsets — the core OpenSceneGraph library, osgViewer and a set of NodeKits.

Core

The base of OpenSceneGraph library can be further divided into four main modules.

osg

The core of OpenSceneGraph provides classes and methods for construction and manipulation of the scene graph. It contains classes representing various types of nodes, scene geometry, OpenGL state abstraction, geometric transformations, as well as mathematical classes for 2D and 3D vector and matrix operations. Advanced memory management is also included.

OpenThreads

The OpenSceneGraph project contains a threading library, OpenThreads, which is a lightweight cross-platform thread model. It is intended to provide a minimal and complete Object-Oriented (OO) thread interface for C++ programmers. It is loosely modeled on the Java thread API, and the POSIX Threads standards.

The architecture of OpenThreads is designed around "swappable" thread models which are defined at compile-time in a shared object library. It is of importance to note that while a factory pattern design could have been used to achieve the goal of generic interface, it would have required the programmer to allocate each of the 4 fundamental types (Thread, Mutex, Barrier, & Condition) on the heap. Due to the cost associated with heap allocation of the underlying concrete implementations of these constructs on some platforms, such allocation was deemed unacceptable at the time this library was originally written, and thus the factory pattern was not used.

Instead, a somewhat abstruse - but effective - technique was chosen to provide the necessary data/implementation hiding. This technique uses private void pointers to encapsulate object private data. The void pointers actually point at concrete data structures, but give a uniform interface to the dso.

The design goal of OpenThreads is to construct optimized implementations using platform optimized multi-processing constructs such as the sproc methods used on IRIX, and Windows threads.

osgUtil

osgUtil contains rendering backend functionality and utilities taking care of scene graph traversal, rendering optimisation and transforming the scene into a stream of OpenGL API calls. It also provides means of basic interaction with scene, such as object picking.

osgDB

This library is tasked with loading 3D model files. It supports many 2D/3D data formats manipulators. More than 50 different formats are supported - most common are 3D data formats, such as COLLADA (.dae), LightWave (.lwo), Wavefront (.obj), OpenFlight (.flt), 3D Studio Max (.3ds), DirectX (.x) and many others. OpenSceneGraph also provides its own native ASCII .osg format. There are exporters into .osg format available for Blender, Maya and 3D Studio MAX.

Supported picture formats include .rgb, .gif, .jpg, .png, .tiff, .pic, .bmp, .dds, .tga and quicktime.

This module also provides I/O device abstraction. The other file-format loader plugins are registered with osgDB.

osgGA

This is a GUI abstraction library required for different platforms.

osgViewer

osgViewer Library provides a quick and easy way of visualizing the graphics scene. It is also a platform-independent abstraction for various window system interfaces.

osgProducer

The OSG is also shipped with a osgProducer which is just a platform-independent viewer supporting multiple graphic contexts and multi-threading. [16] [17]

NodeKits

Project distribution also contains a variety of so-called NodeKits. These are solutions of common problems and frequently used more advanced 3D application components and graphics algorithms. Among the most significant are

Reception and adoption

OpenSceneGraph doesn't provide any functionality for higher "gaming" logic, it is a rendering-only tool. There are several full-scale engines for computer games (or so-called serious games ) creation using OSG as a base of graphics rendering, the most common framework being Delta3D.

There is a great variety of software products built on top of OpenSceneGraph; among others, Virtual Terrain Project and ViewTec TerrainView. List of OSG users contains companies as Boeing, NASA, FlightGear, Norcontrol and many others. [18] [19] [20] [21] [22]

At the opensource community level, several projects have adopted OSG as a rendering backend:

OpenSceneGraph has received a javascript/WebGL implementation called OSG.JS that is used by many online 3D scene viewers including Sketchfab and Clara.io.

A wrapping from C++ to javascript through Emscripten OGStudio is also currently developed.

Among other products that use OSG must be mentioned:

See also

Related Research Articles

<span class="mw-page-title-main">OpenGL</span> Cross-platform graphics API

OpenGL is a cross-language, cross-platform application programming interface (API) for rendering 2D and 3D vector graphics. The API is typically used to interact with a graphics processing unit (GPU), to achieve hardware-accelerated rendering.

X3D is a set of royalty-free ISO/IEC standards for declaratively representing 3D computer graphics. X3D includes multiple graphics file formats, programming-language API definitions, and run-time specifications for both delivery and integration of interactive network-capable 3D data. X3D version 4.0 has been approved by Web3D Consortium, and is under final review by ISO/IEC as a revised International Standard (IS).

OpenGL Performer, formerly known as IRIS Performer and commonly referred to simply as Performer, is a commercial library of utility code built on top of OpenGL for the purpose of enabling hard real-time visual simulation applications. OpenGL Performer was developed by SGI which continues to maintain and enhance it. OpenGL Performer is available for IRIX, Linux, and several versions of Microsoft Windows. Both ANSI C and C++ bindings are available.

Irrlicht is an open-source game engine written in C++. It is cross-platform, officially running on Windows, macOS, Linux and Windows CE and due to its open nature ports to other systems are available, including FreeBSD, Xbox, PlayStation Portable, Symbian, iPhone, AmigaOS 4, Sailfish OS via a QT/Qml wrapper, and Google Native Client.

The Khronos Group, Inc. is an open, non-profit, member-driven consortium of 170 organizations developing, publishing and maintaining royalty-free interoperability standards for 3D graphics, virtual reality, augmented reality, parallel computation, vision acceleration and machine learning. The open standards and associated conformance tests enable software applications and middleware to effectively harness authoring and accelerated playback of dynamic media across a wide variety of platforms and devices. The group is based in Beaverton, Oregon.

<span class="mw-page-title-main">Java 3D</span> Java 3D graphics API

Java 3D is a scene graph-based 3D application programming interface (API) for the Java platform. It runs on top of either OpenGL or Direct3D until version 1.6.0, which runs on top of Java OpenGL (JOGL). Since version 1.2, Java 3D has been developed under the Java Community Process. A Java 3D scene graph is a directed acyclic graph (DAG).

Cairo (graphics) Vector graphics-based software library

Cairo is an open-source graphics library that provides a vector graphics-based, device-independent API for software developers. It provides primitives for two-dimensional drawing across a number of different backends. Cairo uses hardware acceleration when available.

COLLADA is an interchange file format for interactive 3D applications. It is managed by the nonprofit technology consortium, the Khronos Group, and has been adopted by ISO as a publicly available specification, ISO/PAS 17506.

<span class="mw-page-title-main">Delta3D</span>

Delta3d is an open source software gaming/simulation engine API. Delta3d is managed and supported by Caper Holdings LLC. Previously the Modeling, Virtual Environments, and Simulation (MOVES) Institute at the Naval Postgraduate School in Monterey, California managed and supported delta3d. Alion Science has also been a major contributor to enhancements and features.

3DMLW is a discontinued open-source project, and a XML-based Markup Language for representing interactive 3D and 2D content on the World Wide Web.

Visualization Library (VL) is an open source C++ middleware for 2D/3D graphics applications based on OpenGL 4, designed to develop portable applications for the Microsoft Windows, Linux and Mac OS X operating systems.

3D computer graphics software refers to programs used to create 3D computer-generated imagery.

<span class="mw-page-title-main">Grome</span> 3D terrain generation software

Grome is an environmental modeling package developed by Quad Software dedicated for procedural and manual generation of large virtual outdoor worlds suitable for games and other 3D real-time simulation applications.

<span class="mw-page-title-main">Oak3D</span>

Oak3D is a free JavaScript library for 3D graphics development based on the HTML5 WebGL standard, dedicated in realizing the Web3D applications with GPU acceleration for all the front-end developers in an easy and efficient way.

In computer science and visualization, a canvas is a container that holds various drawing elements. It takes its name from the canvas used in visual arts. It is sometimes called a scene graph because it arranges the logical representation of a user interface or graphical scene. Some implementations also define the spatial representation and allow the user to interact with the elements via a graphical user interface.

<span class="mw-page-title-main">Clara.io</span> 3D computer graphics software

Clara.io is web-based freemium 3D computer graphics software developed by Exocortex, a Canadian software company. The free or "Basic" component of their freemium offering, however, places severe restrictions, such as on saving models and importing texture maps, which are undisclosed in the company's own descriptions of their plans.

<span class="mw-page-title-main">GTK Scene Graph Kit</span>

GTK Scene Graph Kit (GSK) is the rendering and scene graph API for GTK introduced with version 3.90. GSK lies between the graphical control elements (widgets) and the rendering.

glTF 3D scene and model file format

glTF is a standard file format for three-dimensional scenes and models. A glTF file uses one of two possible file extensions: .gltf (JSON/ASCII) or .glb (binary). Both .gltf and .glb files may reference external binary and texture resources. Alternatively, both formats may be self-contained by directly embedding binary data buffers. An open standard developed and maintained by the Khronos Group, it supports 3D model geometry, appearance, scene graph hierarchy, and animation. It is intended to be a streamlined, interoperable format for the delivery of 3D assets, while minimizing file size and runtime processing by apps. As such, its creators have described it as the "JPEG of 3D."

<span class="mw-page-title-main">Art of Illusion</span>

Art of Illusion is a free software, and open source software package for making 3D graphics.

References

  1. "Stable releases". www.openscenegraph.com.
  2. 1 2 Anne Ruas; Christopher Gold (2008). Headway in Spatial Data Handling:13th International Symposium on Spatial Data Handling. Springer. p. 370. ISBN   978-3-540-68566-1.
  3. "VulkanSceneGraph Project". openscenegraph.github.io. Retrieved 2021-07-05.
  4. Martz, P.: OpenSceneGraph Quick Start Guide. Louisville, USA, 2007.
  5. "Support/History - osg". openscenegraph.org. Archived from the original on 26 May 2015.
  6. "VulkanSceneGraph Project". www.openscenegraph.com.
  7. "OSG News". openscenegraph.org. Archived from the original on 2011-06-09. Retrieved 2010-02-20.
  8. "OpenSceneGraph Adds New Features to 3D Graphics Applications". April 5, 2010. Archived from the original on April 15, 2010.
  9. http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-2.8.4/NEWS.txt [ permanent dead link ]
  10. http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-3.0.0/NEWS.txt [ permanent dead link ]
  11. Torres, Jordi. "OpenSceneGraph 3.0 release". www.openscenegraph.org. Retrieved 2017-09-23.
  12. "OpenSceneGraph 3.2 release". openscenegraph.github.io. Retrieved 2017-09-23.
  13. "OpenSceneGraph-3.4 release". openscenegraph.org. Retrieved 2017-09-23.
  14. "OpenSceneGraph-3.4.1 release". openscenegraph.org. Retrieved 2017-09-23.
  15. "OpenSceneGraph-3.6 release". openscenegraph.org. 7 April 2018. Retrieved 2018-08-14.
  16. Aylett, Ruth. "Introduction to Open Scene Graph" (PDF). Heriot Watt University.
  17. "Introduction to the OpenSceneGraph". openscenegraph.sourceforge.net. Retrieved 2021-07-05.
  18. "Use cases". www.openscenegraph.com.
  19. "OpenSceneGraph". openscenegraph.github.io. Retrieved 13 March 2024.
  20. "Virtual Terrain Project". vterrain.org.
  21. "ViewTec Inc. - Products". www.viewtec.net. Archived from the original on 2009-02-28.
  22. "Delta3dengine 2023". easd-design.com. Retrieved 13 March 2024.