Visionary Realms Inc Network Library, pronounced “vinyl”
Lightweight Multiplayer Optimized Network Library for Unity
Originally crafted for the MMORPG Pantheon: Rise of the Fallen to support thousands of players simultaneously, ViNL is now available for limited licensing.
- Low level socket library (UDP)
- Zero runtime allocations
- Extremely efficient code generation for serialization/deserialization based around Span<T> (and many other ‘unsafe’ tricks)
- Integration with Unity’s Addressables for optional automatic asset streaming and updating
- Automatic message routing to specific objects
- Extendible interest management system with a default multithreaded implementation in DOTS
- Custom binary writers/readers with lossy/lossless compression options per type
- Optional encryption/compression options per packet or message
- Built-in object pipes that can be hooked into by application code to get ‘free’ simple delta compression
Features & Benefits
- Threading model and event queues optimized for very large groups of players in shared world games, virtually eliminating the need for instancing for performance.
- Deals efficiency and intelligently with data loss while maintaining good client side representation: smooth client side experience even with 180K collision enabled moving objects at 200 ms ping
- Detects client side line saturation and automatically dials back on unreliable data transmission
- For example, temporarily send few position packets until client catches back up, but important data such as damage, death or loot maintains high reliability
- Up to 255 data channels may be specified
- Each can have their own reliability independently specified on per packet or per message level.
- All data channels are mutually non blocking.
- IL2CPP Support
- Convenient high level developer features (RPC generation, automatic message routing, etc) without restricting lowest level access if needed.
- Support instantiating different prefabs depending on network context.
- e.g. Server, Owner and Proxy views of a network object.
- Supporting prefab variants here is vital, letting the user define a single ‘Player’ prefab and create variants for ‘Player Server’, ‘Player Client’ or ‘Player Proxy’ that automatically get replicated depending on the client’s context to that object.
- Many compression options – implementations of
- Generic float compression
- Smallest 3 quaternion compression
- Variable int compression
- Angle to byte compression, etc…
- Support for deferred serialization of fields allowing to easily go back and patch in data once it’s known (useful for writing collection counts before we actually know how many elements we are going to write)
- Automatic serializers/deserializers for structs containing supported data types
- Allows for most generic types to be used as network parameters as expected
- Calling an RPC feels exactly the same as a normal C# method call, the code weaver handles routing depending on attributes and network context automatically
For more details and Licensing Inquiries