Skip to content

A toolkit for building powerful stereoscopic 3D experiences that run on the cloud and stream to devices.

License

Notifications You must be signed in to change notification settings

zaxy78/3dtoolkit

 
 

Repository files navigation

3D Toolkit 💪 👁️ ☁️

A toolkit for creating powerful cloud-based 3D experiences that stream to traditionally out of reach low-powered devices.

example

What is this?

Problem: The world is becoming increasingly mobile, but the demand for high-fidelity 3D content is only growing. We needed a scalable approach to make this sort of content available on low-powered, low-bandwidth devices.

The 3DToolkit project's purpose is to provide an approach for developing 3D server applications that stream frames to other devices over the network. Specifically:

  1. Server-side libraries for remotely rendering 3D scenes
  2. Client-side libraries for receiving streamed 3D scenes
  3. Low-latency audio and video streams using WebRTC
  4. High-performance video encoding and decoding using NVEncode

WebRTC applied to 3D Streaming

Here's a high-level diagram of the components we've built (in green), and how they interact with the underlying WebRTC and NVEncode technologies we've leveraged. For a full description, check out our wiki page on WebRTC.

How to build

If you don't wish to build the toolkit yourself, you can download our latest build here.

These steps will ensure your development environment is configured properly, and then they'll walk you through the process of building our code.

Prerequisites

Note: If you are using Visual Studio 2017, ensure you have installed the Visual Studio 2015 Update 3 as well, and please do not update our projects when prompted to do so.

Installing dependencies

Note: Before running our setup.cmd script, please ensure powershell is set to enable unrestricted script execution.

Run .\setup.cmd from the command line. This will install and configure the following:

  • 32bit and 64bit Debug, Release, Exes, Dlls and PDBs from this commit Chromium m58 release
  • This patch, which adds nvencode support to webrtc, and will be applied to the above
  • 32bit and 64bit Debug and Release libraries for DirectX Toolkit
  • WebRTC-UWP M54 synced release for UWP-based clients (Hololens)

Once you see Libraries retrieved and up to date you may proceed.

The actual build

Note: To build the unity client library, you must use Release and x86 for the desired configuration.

  • Open the 3dtoolkit solution in Visual Studio
  • Build the solution (Build -> Build Solution) in the desired configuration (Build -> Configuration Manager -> Dropdowns at the top)
  • Done!

If you're seeing errors, check out the troubleshooting guide and then file an issue.

Build output

After you've built the solution, you'll likely want to start one sample server implementation, and one sample client implementation. These are applications that we've build to demonstrate the behaviors the toolkit provides.

Note: We advise you to try Spinning Cube and Win32Client to begin, as these are the simpliest sample implementations.

Here's a table illustrating where each sample implementation will be built to. To run one server and one client, navigate to that location and start the exe.

Note: the following table describes the location under Build\<Platform>\<Configuration>\ where a sample can be found. To identify what <Platform> and <Configuration> are, see your desired configuration from section: the actual build. Recall the note encourages using Release and x86.

Once you start both a server and client implementation, you should be seeing success! If you're instead seeing errors, check out the Troubleshooting guide and then file an issue. Additionally, you can see more information about our other sample implementations here.

Next Steps

These resources will be critical to your success in configuring and scaling applications.

Learn More

License

MIT

License Considerations

!IMPORTANT - USING UNITY AS A 3D VIDEO STREAMING SERVER IS AGAINST THE SOFTWARE TERMS OF SERVICE - THE UNITY SERVER SAMPLE IS PROVIDED FOR DEMO AND EDUCATIONAL PURPOSES ONLY. CONTACT UNITY FOR LICENSING IF YOU WANT TO USE THE UNITY SERVER SAMPLE IN ANY COMMERCIAL ENVIRONMENT

Streaming and Cloud Gaming Restrictions

You may not directly or indirectly distribute Your Project Content by means of streaming or broadcasting where Your Project Content is primarily executed on a server and transmitted as a video stream or via low level graphics render commands over the open Internet to end user devices without a separate license from Unity. This restriction does not prevent end users from remotely accessing Your Project Content from an end user device that is running on another end user device.

About

A toolkit for building powerful stereoscopic 3D experiences that run on the cloud and stream to devices.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 84.6%
  • C 9.6%
  • C# 4.5%
  • PowerShell 1.0%
  • Cuda 0.2%
  • Objective-C 0.1%