Osgverse
osgVerse, a complete 3d engine solution based on OpenSceneGraph. It supports OpenGL/OpenGLES/Vulkan/DirectX/Metal backends, and also works on modern browsers using WASM.
Install / Use
/learn @xarray/OsgverseREADME

osgVerse
Introduction
osgVerse, a complete 3D engine solution based on OpenSceneGraph. | Operating System | Compiler | Supported | Notes | |------------------|------------------------------|--------------------|-------| | Windows 10-11 | Visual Studio 2017-2022 | :heavy_check_mark: | | | Windows 10 | Visual Studio 2015 | :heavy_check_mark: | Requires VS2015 Update-3 | | Windows 10 | MSYS2 (GCC 10.2) | :heavy_check_mark: | | | Windows 10 | Intel Compiler 2023 | :heavy_check_mark: | cmake -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icx -GNinja .. | | Windows 10 UWP | Visual Studio 2017-2022 | :heavy_check_mark: | Need to compile an example app | | Ubuntu 18.04 | GCC 7.5 (or later) | :heavy_check_mark: | | | Debian 11.7.0 | GCC 10.2 (or later) | :heavy_check_mark: | | | Kylin v10 | GCC 8.3 (or later) | :heavy_check_mark: | Set VERSE_FIND_LEGACY_OPENGL to ON | | NeoKylin v7 | GCC 8.5 (built manually) | :heavy_check_mark: | Must disable VERSE_USE_GLIBCXX11_ABI | | UOS v20 | GCC 8.3 (or later) | :heavy_check_mark: | | | Mac OS X | 14.4 or later | :heavy_check_mark: | | | Android | Android SDK 32 & NDK 27c | :heavy_check_mark: | Need to compile an example app | | IOS | | :soon: | | | WebAssmebly | Emscripten 3.1.64 (or later) | :heavy_check_mark: | Supports GLES2 (WebGL1) and GLES3 (WebGL2) |
Main Features (ongoing to v1.0)
- [x] Supports from OSG 3.1.1 to the latest version, and GLSL 1.2 to 4.6, so to work with most hardware in the world.
- [x] Supports PBR-based rendering and deferred pipeline, with real-time shadowing and deferred lighting.
- [x] Supports physics simuation based on Bullet3/PhysX library, and character animation based on OZZ library.
- [x] Supports complex model simplication, optimizing and tiling, and saving to OSGB format for better efficiency.
- [x] Provides database plugins (leveldb, mbtiles, odbc), for reading models and tiles from database rather than local folders.
- [x] Provides media streaming plugin, which supports playing RTSP and streaming through WebRTC / Websockets.
- [ ] (PARTLY) Provides video decoding plugins based on GPU (with NVCUVID or LibVA), without CPU copying overload.
- [x] Provides scripting functionalities to support Python / JsonRPC scripting using OSGB serialization.
- [x] Supports GL3 Core profile, GLES2 and GLES3. Google Angle is also supported for bridging low-level APIs like Vulkan and DirectX.
- [x] Supports 3D Gaussian Splatting rendering and related formats: PLY, SPZ, SPLAT, PlayCanvas SOG and XGrids LCC.
- [x] Supports dependency-free earth scene construction and high quality terrain/atmosphere/ocean rendering. (without osgEarth)
- [ ] (PARTLY) Supports major desktop and mobile operating systems, including Windows, Linux, Mac OSX, Android and IOS.
- [x] Supports major embedded devices with GPU supports, including ARM and RISC-V.
- [x] Supports Emscripten / WASM compilation and works with WebGL 1/2 based browsers.
- [ ] Provides an initial visual scene editing tool, comparing with the famous Unity Editor.
Screenshots
- osgVerse_Viewer: PBR and deferred pipeline with Desktop GL

- osgVerse_ViewerWASM: PBR and deferred pipeline with WebGL 1.0/2.0, compiled from WASM

- osgVerse_JsCallerWASM: Scriptable osgb rendering with WebGL 1.0/2.0, compiled from WASM

- osgVerse_Test_3DGS: 3D Gaussian Splatting rendering (data from XGrids offical website)

- osgVerse_Test_Earth: Earth rendering with DEM/DOM tiles, atmosphere and ocean supports

Dependencies
- Please use CMake 3.0 or higher version. (https://cmake.org/download/)
- Please use a C++ compiler supporting C++ 14 at least.
- OpenSceneGraph is always required for building osgVerse. (https://github.com/openscenegraph/OpenSceneGraph) Current project mainly depends on OSG 3.7.0, but can compile on OSG 3.1.1 or later versions.
- Important (but optional) dependencies:
- 4.1 SDL2 (https://github.com/libsdl-org/SDL): for windowing system supports on Android, IOS and WebAssembly builds.
- 4.2 Google Angle (https://github.com/google/angle): for cross-Graphics API uses and Vulkan integrations.
- 4.3 Emscripten SDK (https://emscripten.org/docs/getting_started/downloads.html): for WebAssembly builds.
- 4.4 NVIDIA CUDA (https://developer.nvidia.com/cuda-downloads): for CUDA related functionalities.
- With MooreThreads devices and VERSE_USE_MTT_DRIVER=ON, CUDA can be replaced with MUSA without extra operations.
- Optional external dependencies:
- 5.1 osgEarth 2.10.1 or later, for earth related applications and examples. (https://github.com/gwaldron/osgearth)
- 5.2 Bullet 3.17 or later, for physics support in osgVerseAnimation module and related examples. (https://github.com/bulletphysics/bullet3). Remember to enable INSTALL_LIBS (for correct installation) and USE_MSVC_RUNTIME_LIBRARY_DLL (for /MD flag) while compiling Bullet.
- 5.3 Entwine 2.0 or later, for EPT point cloud octree constructing. (https://github.com/connormanning/entwine)
- 5.4 Qt 5.5 or later, for Qt related applications and examples. (https://www.qt.io/licensing/open-source-lgpl-obligations)
- 5.5 ZLMediaKit (git version), for media streaming plugin. (https://github.com/ZLMediaKit/ZLMediaKit) Remember to uncheck the ENABLE_MSVC_MT option while compiling. To encode to H264 frame and pull to media server, you may also check ENABLE_X264 and add x264 (http://www.videolan.org/developers/x264.html) to ZLMediaKit.
- 5.6 OpenVDB 10.0 or later, for VDB point cloud and 3D image reader/writer plugin. (https://github.com/AcademySoftwareFoundation/openvdb)
- 5.7 libDraco 1.5 or later, for Draco mesh compression support in osgVerseReaderWriter library. (https://github.com/google/draco)
- 5.8 libIGL 2.5 or later, for Quadriflow, ManifoldPlus and other functionalities in osgModeling library. (https://github.com/libigl/libigl)
- 5.9 cinolib 1.0 or later, for Mesh Boolean and other functionalities in osgModeling library. (https://github.com/mlivesu/cinolib)
- 5.10 Vulkan 1.3 or later, for Vulkan extensions based on Google Angle's cross-Graphics API. (https://vulkan.lunarg.com/sdk/home)
- 5.11 Effekseer 1.70 or later, for particle support in osgVerseAnimation module and related examples. Remember to check the USE_MSVC_RUNTIME_LIBRARY_DLL option while compiling. (https://github.com/effekseer/Effekseer)
- 5.12 libCEF 127.3 or later, for HTML5/CSS page rendering support in osgVerseAnimation module and related examples. (Binaries download: https://cef-builds.spotifycdn.com/index.html)
- 5.13 mimalloc 2.17 or later, for general purpose memory allocator with excellent performance. (https://github.com/microsoft/mimalloc)
- 5.14 NVIDIA Video Codec SDK 12 or later, for video decoding/encoding based on codec_nv plugin. (https://developer.nvidia.com/video-codec-sdk)
- 5.15 The netCDF-C 4.9.3 or later, for NetCDF/HDF data reading plugin. (https://github.com/Unidata/netcdf-c)
- 5.16 FFmpeg 6.0 or later, for video parsing and CPU based decoding/encoding. (https://github.com/FFmpeg/FFmpeg)
Supported Hardware
To use osgVerse libraries and applications, OpenGL version must be higher than 2.0. Both core profile and compatible profile will work. Our project uses the GLSL functionality, and supports from GLSL 120 to the latest GLSL version. Our project is already tested on graphics cards listed as below: | Graphics Card | OpenGL Version | Supported | VerseViewer | Notes | |---------------------------|----------------|--------------------|-------------|-------| | NVIDIA RTX 30** Series | 4.6 / GLSL 4.6 | :heavy_check_mark: | 60fps | | | NVIDIA 10** Series | 4.6 / GLSL 4.6 | :heavy_check_mark: | 60fps | | | NVIDIA 1070 (Nouveau) | 4.3 / GLSL 4.3 | :zap: | 60fps | Display has broken problems with Nouveau driver | | NVIDIA GT720 | 4.6 / GLSL 4.6 | :heavy_check_mark: | < 12fps | | | NVIDIA Quadro K2200 | 4.6 / GLSL 4.6 | :heavy_check_mark: | 60fps | | | AMD Radeon RX5500 | 4.6 / GLSL 4.6 | :heavy_check_mark: | 60fps | | | AMD Radeon (TM) Graphics | 4.6 / GLSL 4.6 | :heavy_check_mark: | < 15fps | | | Intel UHD Graphics | 4.6 / GLSL 4.6 | :heavy_check_mark: | ~= 30fps | | | MooreThreads X300 | 4.3 / GLSL 4.3 | :heavy_check_mark: | 60fps | Need VERSE_USE_MTT_DRIVER (automatically enabled with MUSA) | | MooreThreads S80/S1000 | 4.1 / GLSL 4.1 | :heavy_check_mark: | ~= 30fps | Need VERSE_USE_MTT_DRIVER (automatically enabled with MUSA) | | LISUAN 7G100 | 4.6 / GLSL 4.6 | :heavy_check_mark: | ~= 45fps | | | XiangDiXian FUXI R2900E | 4.6 / GLSL 4.6 | :heavy_plus_sign: | 60fps | PCF Shadow failed (VSM/ESM OK) | | Phytium D2000+X100 | 3.0 / GLSL 3.3 | :heavy_plus_sign: | < 10fps | | | JingJia Micro JM7201 | 3.0 / GLSL 1.3 | :heavy_plus_sign: | < 5fps | Core only; PCF Shadow failed (VSM/ESM OK); glBlitFrameBuffer failed | | LJmicro GP202 | 4.0 / GLSL 4.0 | :heavy_plus_sign: | < 10fps | | | Zhaoxin C-960 (SIS) | 3.2 / GLSL 1.5 | :zap: | | Segment fault in osg::Texture at present | | VirtualBox SVGA 3D | 4.1 / GLSL 4.1 | :hea
