Releases: aardvarkxr/aardvark
IPFS and Whiteboard upgrades
Added support for loading models from IPFS URLs. These URLs work for model box volumes or for AvModel nodes. The URLs can be in any of these forms:
- /ipfs/Qmaut52sfDXNBe8f8dZiAcJ1hcrS2VrbqQC5nZJKmTkyaf
- IPFS://Qmaut52sfDXNBe8f8dZiAcJ1hcrS2VrbqQC5nZJKmTkyaf
- DWEB://ipfs/Qmaut52sfDXNBe8f8dZiAcJ1hcrS2VrbqQC5nZJKmTkyaf
Whiteboard improvements:
- The whiteboard now generates glTF models on the fly for each stroke after it's completed. Then it adds the resulting model to IPFS and uses that URL for that stroke from that point forward. This eliminated the lag that would happen when the whiteboard had a whole bunch of strokes on it.
- Strokes on the whiteboard are now shared back and forth with remote instances.
More bug fixes
Bug fixes:
- Containers have returned to the left and right hands. You can move any gadget you're dragging around close to your other hand to attach that gadget to the hand. #113
- Fixed gadget-relative model paths in interface entity volumes. These were not prepending the gadget's URL correctly. #118
- Fixed sphere-box intersections always failing.
- Added support for arrays of volumes on AvInterfaceEntity and AvComposedEntity
Added support for "context" in volumes. This field determines when a volume will be used:
- Always - In any intersection test
- StartOnly - In any intersection test that is being tested for the start of an interface. This is generally a smaller volume.
- ContinueOnly - In any intersection test that is being used to see if an interface that has already started should continue. This is generally a larger volume.
Grabbing bug fixes
Several bug fixes for bugs that were introduced in 0.8.1:
- Grab angle of new gadgets is now more comfortable. #109
- Newly created gadgets count as grabbed as soon as they spawn. #112
- Gadgets don't pop back to the gadget menu if you close it before they spawn. #111
- Numerous other grabbing stability improvements.
Also added support for handing a grabbable from one hand to the other by just grabbing it with the other hand.
Revamped almost everything to use interfaces
- Added a new general-purpose interface system that allows gadget nodes to define the protocols they use to communicate entirely between themselves.
- The Grabbable, Grabber, Poker, and Hook node types are gone. All of these have been replaced with gadget-defined interfaces.
- Converted AvStandardGrabbable, AvGadgetSeed, AvPanel, AvGrabButton, the whiteboard example, and whatever else needed converting to the new interface entity system.
- Eliminated the master gadget and folded its tiny bit of remaining functionality (which was essentially starting the renderer) into renderer. Then changed the C++ to start the renderer.
- Eliminated gadget startup persistence. This will come back, but probably in a form that involves a user deliberately "pinning" a gadget instead of just saving everything and always coming back to a cluttered state.
- Removed the v2 room API and replaced it with V3, which is entirely gadget-side and based on interfaces. See RemoteUniverse and NetworkUniverse for details. Ported the hand mirror to this new system. Removed the simple social gadget since it was two APIs out of date.
- Removed the translate control and the slider from the control test and added a grab button. Then deleted these controls nobody was using them and they need to be rebuilt from the ground up with interfaces.
- Moved all collision and intersection testing into javascript in the renderer. Deleted the c++ version of that code.
If you see any new bugs in this release, please open an issue. I know of several and will open issues for those momentarily.
Grabbable bug fixes
- Fixed grabbables never dropping on hooks.
- Fixed the whiteboard trying to drop on either hooks or in the world, which isn't supported.
0.7.0 - Whiteboard sample and expanded hook/grabbable interaction
Whiteboard sample:
- Added a sample whiteboard gadget and used it to shake out a bunch of issues with Aardvark itself.
- This appears in the gadget menu with a blue quad (Still needs an icon model).
- Dip markers in the colored cylinders to change the color of the marker and move the marker on the board to paint
- Markers and paint buckets from one whiteboard will work on another.
Grabbable/Hook interfaces:
- Both grabbables and hooks now have an interface list that takes a name and a function for each interface.
- Interface name should be of the form @. This is the globally unique identifier of the protocol that two of these components will use to communicate with each other.
- When a grabbables comes within range of a hook, Aardvark selects the first interface name that appears on both lists and includes that information in the "highlight" notifications to the hook and the grabbable.
- AvGadget.instance().sendInterfaceEvent() now allows a hook or grabbable to send a message to its counterpart for a given interface. These messages are received by the callback function that was registered when the hook or grabbables was created. These messages must be objects, but other than that are opaque to Aardvark and are passed through unmodified. The data in these messages is intended to be specified by whoever generated the interface name and version.
- Added onTransformUpdated to hooks so that they can get hook-relative transforms for any grabbables that match their interfaces.
Aardvark-react:
- Added AvPrimitive component, which makes it easy to add a sphere, box, or cylinder of whatever color to your scene graph and put the origin of that geometry on whatever part of it makes sense in your instance. See the whiteboard sample for how it can be used. This is just a helper around an AvTransform and an AvModel that does a bit of math for you.
- Added model scale and color to the handle in AvStandardGrabbable
General:
- Significantly increased the descriptor limit so that avrenderer will run out less often.
Monitor:
- Added the persistent name to the node display so it's easier to tell what's what.
- Improved propVolume rendering to support boxes.
Server:
- Manifests files and the model directory are now readable cross-origin.
Fixed gadget icons
A bug was introduced in 0.6.0 that caused relative gadget model paths in manifest.webmanifest files to use the wrong URL. This release fixes that issue.
0.6.0 - New manifest scheme
Aardvark 0.6.0 - New web manifests
Note: The NPM versions associated with this build start at 0.6.6. I was testing a new publish script for the packages but it took a few tries to get it right.
gadget_manifest.json is dead. Long live manifest.webmanifest. This is a standard way to define various meta information for progressive web apps, and there's no need to reinvent that particular wheel. I also added the xr_type fields from Webaverse's xr packages.
All of the Aardvark-specific fields in the manifest files have moved under an "aardvark" object. Manifest files now look like this:
{
"xr_type": "[email protected]",
"name" : "Test Panel",
"icons" :
[
{
"src": "http://localhost:23842/models/panel/panel.glb",
"type": "model/gltf-binary"
}
],
"aardvark":
{
"browserWidth": 1024,
"browserHeight": 1024,
"permissions" : [ "scenegraph" ]
}
}
The web package standard doesn't exactly endorse using glTF models as "icons", but this proposal seems good to me so I'm going with it.
Also in this build:
- Fixed a bug that caused dropping room-capable gadgets (like the controls tester) into the room to make them zoom to the origin.
- Fixed a bug that caused transform-preserving grabbables inside of gadgets (like the transform control in in the control test) to end up popping to a new transform whenever they're dropped.
- Added room message routing flags, and specifically one that allows implementations to treat some messages differently if those messages will be refreshed periodically. #100
Quick bug fix
Build 0.5.0 had a bug that prevented gadgets from attaching to your hand when you pulled them out of the gadget list. This build is the fix for that.
New Room API
The new Room API replaces the chamber API that was added in the previous build. All of these components have been removed: AvChamber, AvDefaultChamber, AvChamberMember, AvMirror.
Note: Please upgrade all the NPM projects in your gadgets to 0.5.2. The .0 NPM packages are no good. Mistakes Were Made.
Room API:
- Renamed the "chamber" permission to "room".
- A gadget that wants the user to join a room is now responsible for for providing message passing to allow different instances of Aardvark to communicate with each other through the room. The gadget assigns a room ID for the room itself and member IDs for each aardvark instance in the room. It also implements simple message routing from member ID to member ID and allows members to broadcast messages to all members. See the documentation for more details.
- Room members are positioned by AvRoomMember components.
- This allows room-hosting gadgets to use their existing member lists and networking so it is more flexible. It is also more reliable than the client-only room implementation.
Other changes:
- AvStandardGrabbable now has events for onGrab and onEndGrab.
- simple_social does not yet support the new API and has been removed from the default list of gadgets.
- The monitor now shows flags as a list of names instead of the integer value of all the bits or'd together.
- When starting a gadget epToNotify was conflated with "this gadget is started while being grabbed." The started-while-grabbed part of that was removed because it was mostly not true. This may cause some issues when spawning gadgets from the list. If you see anything like that, please file an issue with repro steps.