A toolkit for creating powerful cloud-based 3D experiences that stream to traditionally out of reach low-powered devices.
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:
- Server-side libraries for remotely rendering 3D scenes
- Client-side libraries for receiving streamed 3D scenes
- Low-latency audio and video streams using WebRTC
- High-performance video encoding and decoding using NVEncode
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.
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.
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.
- Windows 10 Anniversary Update / Windows Server 2012 R2 / Windows Server 2016 (see which version of Windows you have)
- Visual Studio 2015 Update 3
- Windows 10 SDK - 10.0.14393.795
- Azure SDK 3.0.1 for Visual Studio 2015 (Optional, but required to use the Server Azure Deployment projects)
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.
Note: To build the unity client library, you must use
Release
andx86
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.
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
andWin32Client
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 usingRelease
andx86
.
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.
These resources will be critical to your success in configuring and scaling applications.
- Sample implementation configuration files
- Configuring and deploying services
- Configuring authentication
MIT
!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
Please refer to https://unity3d.com/legal/terms-of-service/software
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.