Skip to main content

Immersive Payment: Second Update

This is the second update to the Immersive Payment project update under the Grant For Web Fellowship.

You can read the last report here:


Technically, WebXR is a device API that makes it possible to distribute VR/AR experiences over a web browser. It is broadly used to describe web based VR/AR experiences.

The web is the biggest platform, able to reach almost every device and balance the power with app stores through permissionless innovation. However, there’s a major issue holding the ecosystem back from growing: monetization.

There’s a reason why 99% of WebXR apps look like prototypes, it’s because indie creators struggle with finding ways to capture value.

More polished experiences like Mozilla Hubs and Frame usually have the backing of a large entity, so they can survive.

While many of the apps on the front page of Oculus Store net millions in sales, apps on the startpage for Oculus browser (#1 app) can barely hit $100 a month in ad rev.

How can other developers and studios justify spending more resources into this open ecosystem like this and make it more than just a hobby?

What Immersive Payment is trying to do

With immersive payment, you are now able to monetize part of the content of a VR scene or asset using Coil. 


  • Enabling Integration and First Prototype: The first experiment ensures that VR assets can be run in a WebVR environment. 
    As it turns out it is relatively simple to enable web monetization in a simple webvr page and host it. And it's also fairly easy to add conditional's to the page too. For example to
    <script defer src=""></script>
    <style id="wm-stylesheet">
    .wm-if-monetized { display: none; }
    .wm-if-not-monetized { display: none; }

    This enables web monetization on those elements.

    Or we can have a whole scene hidden. As you can see in this demo:
  • Enabling it in a WebAR environment: Using the same concept this can be enabled in an Augmented Reality Environment. The same glitch code detects when it is in an Augmented Reality environment instead of a VR environment and can enable monetization for those elements. 
    • Limitation:
      • This concept is dependent on the coil extension. And for mobile devices even though Firefox is there and has add-on support. It still doesn't support all add-ons, notably, it doesn't support Coil. So any content that is made available part of Augmented Reality will be locked down in mobile devices. Unless we specifically determine the device and unlock that content. Doing that client-side opens up the concept for attacks on desktop devices to unlock content too.
  • How to use it for different contents: Due to the nature of how web pages are built this works on different parts of the elements of a webpage. To enable differential web monetization, the tags should be enabled on those elements. It works for VR assets as well as AR assets.

Open Research Questions Explored:

  1. Can we make the transactions anonymous: This can be achieved by introducing confidential coin concept in the mix. If we want to look at a architectural diagram about how this can be done. This may look like following

Figure 1 provides an example of association between event definitions, event outcome announcements, and event based UTXO notes. It shows nine UTXO notes (named cc1 to cc9) and four transactions (named tx1 to tx4). For each transaction, input notes and output notes are enclosed in a colored bounding box. The coins in front of the arrows are input coins and the coins that the arrows point to are output coins. Each type of data has its own logical chain and the corresponding Merkle hash tree. All the event definitions and event outcome announcements are in public.
They are validated before appended to the ledger. In this work, we assume that event outcomes are declared by the same parties who register the events to the ledger (verified through a secure
digital signature scheme). Verification of the event outcome itself (e.g., status of a tracked shipment) is a separate concern, which could be supported through various established approaches such as
oracle service providers, event validators or zero-knowledge proof based claim verification scheme. We assume that event outcomes are verified as part of the event processing before they
are appended to the shared ledger.
All privacy coins in the system are conditional coins. In the example, one can observe that all the coins (cc1 to cc9) are paired with an event definition. A privacy coin without a real condition is configured to use one of the default constant events as its condition, for instance cc1. This way, all the transactions involving the conditional coins in the system (payments using the conditional coins or transferring of the conditional coins) follow identical validation steps in zero-knowledge protocol when deciding whether the transactions should be accepted by the participating distributed ledger nodes.

This is detailed here:


  • How do people pay for WebXR content currently?
  • What is actually being paid for in the present?
    • Access
    • Login / Bot handles ticket ownership
    • Parcels (NFTs)
    • Content (ex : stereo video streaming services)
    • XXX
  • In what ways can we make that process easier and more frictionless?
  • What monetization strategies have yet to be explored?
  • How can artists get paid?
    • Commissions + Projects
    • Patreon
    • Github sponsors
    • Grants
    • VC investment
    • Event tickets
  • Is there a multimodal solution that would work best for in VR payment?
  • Thoughts about non-payment based monetization strategies such as advertising?


  • Patreon
    • Many VR creators and sometimes platforms (NeoSVR) are using this
  • Github Sponsors
    • Avaer
  • VC Investment
  • Event Tickets
    • Really unexplored still
  • Discord community with paid roles
    • FIVARS / VRTO did some
    • WHALE / Metafactory using
  • Virtual market stalls
    • Currently in-progress via Vket5
  • Avatar store
    • Need some sort of VRMchat for people to buy this for webxr
  • Tailors
    • When people buy avatar weawrables they’ll want it custom fit their avatar
  • Virtual land parcels
    • Minting webxr worlds
    • Cryptovoxels
  • Twitch streaming with bits
    • Avaer and Sorskoot are streaming webxr development
  • Engine licensing
    • wonderland
  • App store
    • Construct Arcade
    • FIVARS made a token system for watching movies / games, can be repurposed
  • In-world advertising
    • Elijah from Vhite Rabbit / Construct arcade was exploring with Wonderleap
    • Admix
    • Google Ads work in WebXR
    • No official or unofficial link in how to do that
  • Make it easier to integrate with paypal / crypto / discord
    • Discord path seems easiest
    • FIVARS did a lot of manual work here, could be outsourced?
  • Virtual actors
    • voice actors
    • full body actors
      • performers
    • capturing / minting mocap libraries
      • Train AI npcs
    • Storytelling
      • The Scarecrow: Raindance film festival
      • Live actors in neosvr live performance
  • WebXR can be used for immersive playback

A report of the grant is also available at:


Popular posts from this blog

ARCore and Arkit, What is under the hood: SLAM (Part 2)

In our last blog post ( part 1 ), we took a look at how algorithms detect keypoints in camera images. These form the basis of our world tracking and environment recognition. But for Mixed Reality, that alone is not enough. We have to be able to calculate the 3d position in the real world. It is often calculated by the spatial distance between itself and multiple keypoints. This is often called Simultaneous Localization and Mapping (SLAM). And this is what is responsible for all the world tracking we see in ARCore/ARKit. What we will cover today: How ARCore and ARKit does it's SLAM/Visual Inertia Odometry Can we D.I.Y our own SLAM with reasonable accuracy to understand the process better Sensing the world: as a computer When we start any augmented reality application in mobile or elsewhere, the first thing it tries to do is to detect a plane. When you first start any MR app in ARKit, ARCore, the system doesn't know anything about the surroundings. It starts pro

ARCore and Arkit: What is under the hood : Anchors and World Mapping (Part 1)

Reading Time: 7 MIn Some of you know I have been recently experimenting a bit more with WebXR than a WebVR and when we talk about mobile Mixed Reality, ARkit and ARCore is something which plays a pivotal role to map and understand the environment inside our applications. I am planning to write a series of blog posts on how you can start developing WebXR applications now and play with them starting with the basics and then going on to using different features of it. But before that, I planned to pen down this series of how actually the "world mapping" works in arcore and arkit. So that we have a better understanding of the Mixed Reality capabilities of the devices we will be working with. Mapping: feature detection and anchors Creating apps that work seamlessly with arcore/kit requires a little bit of knowledge about the algorithms that work in the back and that involves knowing about Anchors. What are anchors: Anchors are your virtual markers in the real wo

VMware in Linux : The virtual machine's operating system has attempted to enable promiscuous mode on adapter Ethernet0

I was just happy when I transported my dev virtual box to my Linux system. But immediately after starting up the system I was greeted with this error The virtual machine's operating system has attempted to enable promiscuous mode on adapter Ethernet0. This is not allowed for security reasons. Apparently the solution is this . Which states that "VMware software does not allow the virtual Ethernet adapter to go into promiscuous mode unless the user running the VMware software has permission to make that setting. This follows the standard Linux practice that only root can put a network interface into promiscuous mode." And the solution it seems is adding a new user group and deligating permission to them. However for CentOS this didn't turn out to be the case. Apparently device nodes are created in boottime in this case and you need ownership permissions for udev to make it work. You can read a detailed description in that link. But in short the commands w