A general purpose system for streaming mesh data into Unity
In the server folder:
npm install
node app.js
Then open these URLs:
http://localhost:8080/webgl-source/websocket.html or http://localhost:8080/webgl-source/http.html
See the test data
folder for an example binary frame of mesh data as well as documentation about the file format.
The server has a set number of available "slots" for mesh streams to occupy. Before your client can begin sending frames, it much register with the server to get a slot index and key. The key will be used to identify the unique session from that point on.
method: POST
url: /mesh/register
body: JSON identifying the mesh source, following this schema:
{
"author": "Name of the developer/artist",
"title" : "name of the art piece",
"platform" : "what platform is this coming from?",
"slot" : 2 // OPTIONAL: the desired slot to use if available.
}
response: JSON result of the registration request.
on success:
{
result: true,
slot: 3, // the numeric index of the slot.
key: 1204762 // the unique session key for this source.
}
on failure:
{
result: false,
error: "the reason that it didn't work."
}
method: POST
url: /mesh/<slot index>/frame
body: binary blob consisting of the mesh frame data.
IMPORTANT your request must include an http header called mesh-key
which matches the key
value returned from the call to /mesh/register
or your mesh data will be ignored.
response: none, the HTTP status code will reflect success or failure.
You MUST send mesh data on a regular basis or your session will time out and the server will release the registered slot back into the pool of available slots. So, even if your mesh is not moving you should send it at least once per second to avoid being kicked out of your slot.
Conversely, it is a good idea to only send a new mesh frame once the previous mesh frame HTTP request has completed to avoid flooding the server. ~60 fps seems achievable but this will need to be tested.
method: GET
url: /mesh
response: JSON array of mesh slot information, this schema will likely change so I'm not going to bother documenting it here yet.
method: GET
url: /mesh/<slot index>
response: Binary blob of mesh data, it will be whatever the last updated mesh was for this slot.