Newer
Older
<p align="center">
<img src="https://gitlab.nrp-nautilus.io/ar-noc/arnoc-game/uploads/d07e40fefb487d05aa625edbd749b2f8/image.png" width="50%" height="50%">
</p>
Built upon the [Pacific Research Platform (PRP)](https://pacificresearchplatform.org/) network, UC San Diego’s [Clarke Center for Human Imagination](http://imagination.ucsd.edu/) and the [Qualcomm Institute](https://qi.ucsd.edu/) are developing server-side rendering tools and deployment of Unreal-based game experience to scale the Metaverse AR/VR hardware needs into a distributed system, enabling a campus-wide XR test bed as part of developing a global Extended Reality Network Operations Center (XRNOC) networking visualization system. XRNOC represents the third generation of big data visualization, realized through persistent, procedurally rendered simulations produced from live data at global scale via Epic Game’s [Unreal Engine](https://www.unrealengine.com/en-US/).
[Learn more about Nautilus](https://ucsd-prp.gitlab.io/) <br />
> "Nautilus is a HyperCluster for running containerized Big Data Applications. It is using Kubernetes for managing and scaling containerized applications and Rook for automating Ceph data services."
For more information on this pioneering research and how to support it, please contact us at info@imagination.ucsd.edu
## How to run Holographic Remote Streaming on Windows
- Grab the latest x64-Release Package https://gitlab.nrp-nautilus.io/ar-noc/ARNoc-Alpha/-/releases
- Run the Holographic Remoting app on the Hololens and take note of the IP.
- Edit `HoloLensRemoting=<Hololens IP>` inside arnocMain_HLRemotingJoinServer.bat
- Run batch script to join dedicated server and connect with Holographic Remoting.
## How to get started developing (Windows)
### Project Setup
0. Install [Git](https://git-scm.com/downloads) and [Git LFS](https://git-lfs.github.com/) <br />
a. "You'll only need to run **git lfs install** once. Once initialized for your system, Git LFS will bootstrap itself automatically when you clone a repository containing Git LFS content."
1. [Setup Unreal Engine 5.0.1](https://docs.unrealengine.com/5.0/en-US/installing-unreal-engine/)
2. [Install Visual Studio 2019](https://docs.unrealengine.com/5.0/en-US/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine/) <br />
a. C++ profiling tools <br />
b. C++ AddressSanitizer (optional) <br />
c. Windows 10 SDK (10.0.18362 or Newer)
3. **RClone Initialization**<br />
a. Download and move arno-init.sh into an appropriate location—it will initialize the ARNOBeta repository in the same directory.<br /><br />
b. If you have access to the keys submodule (aka a member of the ARNO Team) run the command **git submodule update --init --recursive** to initialize the appropriate submodule. If not, you will have to enter the keys manually when running arno-init.sh.<br /><br />
c. Run arno-init.sh with administrator privileges.<br /><br />
d. Initialization<br /><br />
**Windows**<br />
1) Open the start menu and run Git Bash as administrator.<br />
2) Navigate to the arno-init.sh directory using “cd”.<br />
3) Run “./arno-init.sh”.<br /><br />
**macOS / Linux**<br />
1) Open a Terminal as administrator.<br />
2) Navigate to the arno-init.sh directory using “cd”<br />
3) Run “./arno-init.sh”.<br /><br />
e. Now, the script will install RClone on your system and set up a configuration to connect with ARNO’s S3 Bucket using the provided key file. If you do not have the key file, it will prompt you to input them manually.<br /><br />
f. Let the script run to completion and follow any instructions. You should now have a working repository for development and can proceed to the next step.<br />
g. (note:) Rclone stores all blob files including uassets, this means if you only alter binary blobs like uassets standard git commit will show nothing to commit. You will need to run the empty commit command and then git push.
**git commit --allow-empty -m "Empty-Commit"**
**git push**
<img src="/uploads/36431ac9ce5199b6937cb1457b1394ac/image.png" width=40% height=40%>
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<img src="/uploads/7ada0c17be01667eea6a730cfdd7a583/image.png" width=40% height=40%>
8. Set toolbar to desired target ```<Development Editor> <Platform (i.e Win64)>```. Right click arnocMain and Build.
<img src="/uploads/93f3c53962496bb713c44567d8ecebe8/image.png" width=40% height=40%>
9. Open the arnocMain.uproject in Unreal Engine 5 editor.
### Unreal Engine
0. [Getting Started with Unreal Engine](https://learn.unrealengine.com/home/LearningPath/90588)
2. [Blueprint Learning Path](https://learn.unrealengine.com/home/LearningPath/90587)
3. [User Interfaces with UMG Quickstart](https://learn.unrealengine.com/course/3061301)
4. [Cesium for Unreal Tutorials](https://cesium.com/learn/unreal/)
### ARNO Project Tutorials
- [Using a Revit Survey Point geolocation with Cesium for Unreal](https://gitlab.nrp-nautilus.io/ar-noc/ARNoc-Alpha/-/wikis/Using%20a%20Revit%20Survey%20Point%20geolocation%20with%20Cesium%20for%20Unreal)
- [Google Earth to Cesium ion to Cesium for Unreal workflow](https://gitlab.nrp-nautilus.io/ar-noc/ARNoc-Alpha/-/wikis/Google%20Earth%20to%20Cesium%20ion%20to%20Cesium%20for%20Unreal%20workflow)
- [Snapping Revit Models onto 3D Tile Twin](https://gitlab.nrp-nautilus.io/ar-noc/ARNoc-Alpha/-/wikis/Snapping%20Revit%20Models%20onto%203D%20Tile%20Twin)
# Unreal Project Structure
> A continuation of the [ue4-data-viz](https://gitlab.nrp-nautilus.io/ar-noc/ue4-data-viz), [ue4-earth](https://gitlab.nrp-nautilus.io/ar-noc/UE4-Earth), and [ue4-data-h2](https://gitlab.nrp-nautilus.io/ar-noc/ue4-data-h2) repositories, integrated and extended to Unreal Engine 4.26. As of SP22 the project was migrated to UE5 and began to leverage the CollabViewer and HololensViewer Unreal Project templates to quickly bootstrap a foundation for Cross-Platform Desktop/VR/AR/PixelStreaming Multiplayer across Windows and Linux. Android and Mac are not supported. In addition, the Redpoint Games EOS plugin was chosen to expediate development of online services commonly found in multiplayer games. However, it's not yet implemented.
[CollabViewer](https://docs.unrealengine.com/5.0/en-US/collab-viewer-templates-in-unreal-engine/)
> The Collab Viewer Templates join multiple people together in a shared experience of the same 3D content. They are intended to make it easier and quicker for your team to review and communicate about designs in realtime, so that you can identify problems and iterate on the content more efficiently.
[HololensViewer](https://docs.unrealengine.com/5.0/en-US/hololens-viwer-template-in-unreal-engine/)
> The HoloLens Viewer Template is an adaptation of the Collab Viewer Template that works on the Microsoft HoloLens 2. You can use it to see your 3D content overlaid on your actual surroundings in the HoloLens viewer. You can also interact with your models, moving them around and annotating them in real-world space.
[EOS Online Subsystem](https://docs.redpoint.games/eos-online-subsystem/docs/)
> Connect players with their friends across all platforms and all stores using Epic’s free, shared account services. Players can log in using accounts from PlayStation, Xbox, Switch, Facebook, Google, Apple, Steam, and Epic.
> Access free services including voice chat, achievements, matchmaking, live ops, and more. Game services support all platforms, all stores, and all identity services—including your own or Epic’s—on the engine of your choice.
## Level: NOC_withCesium (Multiplayer)
Purpose: Initial Environment to test Cross-Platform Multiplayer Framework along with UI/UX support for Desktop/VR/AR/PixelStreamer users. A Collaborative space that persistently updates several data visualization outlined below. The _withCesium derivative focus on integrating [Project Anywhere XR](https://www.unrealengine.com/en-US/blog/introducing-project-anywhere-xr-a-free-sample-project-for-mixed-reality-3d-geospatial-visualization) into the NOC.
<img src="/uploads/74519629ab36b485cabd936510c9c1be/image.png" width="50%" height="50%">
### G2
see [DataViz_README.md](https://gitlab.nrp-nautilus.io/ar-noc/ARNoc-Alpha/-/blob/main/DataVis_README.md)
### Netbox
### Cesium
## Level: Earth (Persistent Level)
Purpose: Create the Cesium Plugin Features (e.g World Terrain, Gamemode, Sunlight, etc)
<img src="/uploads/e2a3510aee4118e3ca1c97b57993db97/image.png" width="50%" height="50%">
[World Composition](https://docs.unrealengine.com/4.26/en-US/BuildingWorlds/LevelStreaming/WorldBrowser/) with [streaming sublevels](https://docs.unrealengine.com/4.26/en-US/Basics/Levels/) is used with cesium to [Build Global Scenes with Georeferenced Sublevels](https://cesium.com/learn/unreal/unreal-sublevels/) for Earth (Persistent Level).
For the XRNOC Application a sublevel will generally encapsulate a Revit Datasmith Architectural Asset (e.g AtkinsonsHall, Geisel, SDSC, etc) that is streamed in/out as described by the "Georeferenced Sublevels" tutorial above. Within the Datasmith Model several Netbox Sites may be procedurally generated via `Event BeginPlay` inside BP_NetboxGeneration_Cesium.
## Sublevels: Sites (Streaming Sublevels)
Purpose: Modulerize Implementation of new Facilities and provide functionality for asynchronous level streaming during runtime.
### Atkinson Hall (Sublevel)
<img src="/uploads/fec871c7f2649948ad433da0e07f2426/Atkinson_Hall__Small_.png" width="50%" height="50%">
### San Diego Supercomputer Center (SDSC) (Sublevel)
<img src="/uploads/44fdf5b397d4c3de8404e154f821b387/San_Diego_Supercomputer_Center__Small_.png" width="50%" height="50%">
### Geisel Library (Sublevel)
<img src="/uploads/4dfb04ea961ab465d4a7744873745de1/Geisel_Library__Small_.png" width="50%" height="50%">
### Design and Innovation Building (Sublevel)
<img src="/uploads/7717d33030461229abc5a61f6a3ff817/Design_and_Innovation_Building__Small_.png" width="50%" height="50%">
### Franklin Antonio Hall (Sublevel)
<img src="/uploads/efd712833a3f3769f287c38321ccfd56/Franklin_Antonio_Hall__Small_.png" width="50%" height="50%">
### Visual Arts Facility (Sublevel)
<img src="/uploads/622c831ca138e3eb40373e2b45b27eda/Visual_Arts_Facility__Small_.png" width="50%" height="50%">
### Mandeville Center (Sublevel)
<img src="/uploads/7cc4bcec63f84fe9c1a42300df556959/Mandeville_Center__Small_.png" width="50%" height="50%">
## Navigating Cluster Visualization States
### Level 1 (Earth View):
### Level 2 (Regional View):
### Level 3 (County View):
### Level 4 (Ground View):
### Level 5 (Data Center View):
## Blueprints
### BP_Tracegraph_Cesium
Purpose: Visualization of network trace routes as a graph on a 3D globe Earth. Meant to be an overview of the entire network and highlight points of interest for admins to look in to.
All data is loaded via REST APIs at runtime. See [datautils > kubeless > ue4-data.py](https://gitlab.nrp-nautilus.io/ar-noc/datautils/-/blob/master/kubeless/ue4-data.py).
- Request is sent to the datautils kubeless function
- Receives a JSON containing the trace graph in a nice format for parsing in Unreal
- In the request body, `aggregate` can be set to 'none', 'location', or 'router' -- this will collapse the graph so that all nodes in the same e.g. location will be collapsed into a single node. Useful to reduce visual clutter
- All of this stuff, like aggregation, is being worked on in the datautils repo
- [VaRest](https://github.com/ufna/VaRest/) is used to perform these requests and parse the JSON.
The trace graph nodes are then procedurally generated inside of Unreal.
- For every node (both primary and hop IPs), a unique actor is spawned and added to an internal hash map variable
- This allows future reference or modification of the actor by specifying an IP address.
- The glyphs representing each node point orthogonal to the planet surface
The trace graph edges are then procedurally generated inside of Unreal.
- For every edge, get the actors for the two connected IPs from the hash map we built earlier
- We can use those actors and get their positions (in local coordinates), then spawn a spline between those positions
- These splines connect as a straight line -- passing through the earth or wrap around the earth.
- You can edit the spline length variable inorder to change the number spline points there are for each traceroute.
- Increasing spline length will help to make the wrap smoother, but will take more processing.
- Currently the best setting for spline lengths are lengths 1(pass through earth) and 2(wrap around earth). The tangent at the midpoint is altered give the route more bend, so increasing the spline length without taking out the tangent change will create a handle bar shape.
- Using the data attributes, we color the edge red if the MTU is less than 9000 and green otherwise