VRium
November 5, 2021
VRium study program big update: added 7 important interactive visualizations

VRium is an engaging, interactive VR chemistry simulator that helps students get the most from chemistry theory and practice, developing the needed level of knowledge and honing the skills. Take part in beta testing the VRium App. To do this, please fill out the following form. To provide a real-life experience we have developed a study programme for the VRium using typical curricula of General and Inorganic Chemistry courses used in Ukrainian schools and universities. The first part in this programme is “Atomic Structure and Periodic Table”, which starts from the Topic 1 “Atomic Orbitals in Hydrogen Atom”. For this topic we have prepared the following interactive visualizations. 1.1. Rutherford’s Model of Atom The first model of atomic structure by Thompson postulated that electrons are located in positively charged medium. Famous experiments by Rutherford (1911) disproved this model. In new Rutherford’s model of atom, a light electron moves along a circular orbit around a heavy and small nucleus, which is just the proton in case of Hydrogen atom. Here the model is presented simply as an animation of electron moving in a circle around proton. This model forms a common perception of atomic structure and thus has to be discussed in some more details. 1.2. Rutherford model and Classical Electrodynamics Rutherford’s model was unsatisfactory. It correctly described experimental distributions of charge and mass in atoms. But Rutherford’s atom is unstable in classical electrodynamics, which predicts that an electron has to accelerate while moving on circular orbit, and if there is no external energy supply, it should lose energy by emission of electromagnetic radiation. Decreasing energy of an electron will decrease the radius of its orbit, and thus after some small time (estimated to be about 10-11s) the electron should fall onto the proton and Rutherford’s atom would annihilate. This consideration is illustrated pictorially: an electron emits light and quickly falls onto the proton, moving on some orbit around it. This illustration gives a hint: given that in reality atoms are stable, either the electronic orbits in atoms are more complex, or somehow usual physics laws are not applicable for atoms. 1.3. Unstable Equilibrium in Classical Electrostatics Another problem with classical description of atoms is its complete inability to explain the stability of molecules. Atoms in molecules are held together by chemical bonds, where electrons are located between nuclei. But according to Earnshow’s theorem, the stable static equilibrium cannot exist in any system of point charges. So when an electron is located exactly between 2 protons, attraction forces are compensated, and equilibrium is achieved. But it’s not stable: if an electron is shifted by arbitrarily small distance towards any nucleus, forces will become unbalanced, the electron will fall onto the nucleus and the system will annihilate. 1.4. Bohr’s model Also classical picture could not describe atomic emission spectra. In that model, electron could have any energy, so photon with any wavelength could be emitted or absorbed. This contradicts experimental data – atomic spectra consist of discrete narrow lines. In 1913 Niels Bohr fixed this problem in an ad-hoc manner by letting electron move only on some discrete set on circular orbits. Electron on each such stable orbit has definite energy, so moving between orbits is accompanied by absorption or emission of photon with specific wavelength. This simple picture reproduces lines of atomic spectra, but is self-contradictory and cannot be extended to molecules or even multi-electron atoms. This development is depicted by electron moving on a second circular orbit around proton. After the electron emits a photon it moves to lower orbit. This model is valid for atoms and ions with a single electron: Hydrogen, He+, Li2+, Be3+, but theory cannot account for electron interactions – there’s no place for the second electron. 1.5. Quantum mechanical Hydrogen Atom These problems were solved when in 1925 Schrodinger and other scientists developed modern quantum mechanics. Instead of classical electron that moves on some definite trajectory, it describes electron which can appear everywhere in space. Probability to find it and all physical values that can be measured are governed by a so-called wave function. This wave function is not arbitrary, it must satisfy the Schrodinger equation. This is illustrated as electron that loses its orbit around the nucleus. In experiments when the position of electron is successively measured, results are not located on some line, but can appear everywhere in space. Still, the probability to find electron near the nucleus is much higher than to find it high away from it. 1.6. What is Electronic Cloud? This interactive visualization shows 1s orbital of Hydrogen atom. Here the user observes measured positions of electron and can change the radius of the sphere around the nucleus. Increasing sphere size increases the chance to find electron inside it, but this chance never reaches 100%. This accustoms the user with the nature of atomic orbitals as some kind of distribution of probability to find electron. 1.7. Structure of s-orbitals This interactive visualization shows the inner structure of ns atomic orbitals. It turns out that for orbitals with higher main quantum number n, there are places where electron cannot be located. Number of such places increases as n-1, and these zones separate regions with different signs of wave function. User takes a short quiz after this visualization to memorize the connection between the structure of ns orbital and main quantum number n. After introducing the concept of atomic orbitals (applicable to Hydrogen atom and atomic ions with single electrons), the next logical step is to describe multi-electron atoms. Thus the next topic will include concepts of electronic configurations, rules used to construct them, as well as their relevance to periodic table, chemical properties and chemical bonding.

AR portal, which opens a passage to an unknown and scary place
October 29, 2021
We have made a couple of interesting features to make you feel the Halloween atmosphere even more

Our guys from the Unity department have done a great job. Halloween is coming soon and we have made a couple of interesting features to make you feel the holiday atmosphere even more. Try on scary masks and share pictures with your friends, or enemies, to make you even scarier. Follow the link https://webxr.run/nOGnww05b3JX5 and see for yourself how creepy it all looks and your knees will shake. Be sure to watch our atmospheric video with AR portal, which opens a passage to an unknown and scary place. Just a few seconds will be enough for you to feel a chill of quiet horror running down your spine. Be sure to turn up the volume and do not watch this video alone and in the dark)

Piano simulation in Virtual Reality with Passthrough API
September 28, 2021
Piano simulation in Virtual Reality with Passthrough API

Project: Piano simulation on the Oculus Quest 2 The process of learning to play the piano can be quite monotonous and progress is not always clearly visible. This can lead to the student abandoning further training or not putting in enough effort to learn a new skill. This is especially true for children and adolescents. In order to make the process of learning to play the piano more fun, we decided to use virtual reality technology. With the help of its capabilities, the learning process can be more colorful, exciting and interactive. In order to keep the tactile sensations and sounds from a real piano, we used the PassThrough API. With its help, you can overlay the virtual keyboard on the real one and adjust the number and size of keys. Thus, we are trying to combine the advantages of the virtual and real worlds in order to get a new learning experience. The application development process continues. Follow our news, there will be many fun and exciting things. Technology stack: Unity SDK, Oculus MRTK, Oculus Integration. Devices: Oculus Quest 2.

Creating a standalone application with computer vision base on Barracuda and TF model
September 23, 2021
Creating a standalone application with computer vision base on Barracuda and TF model

During the COVID-19 pandemic, many people lost the opportunity to train in the gym with a trainer. Lack of coaching support can lead to improper exercise performing, which in turn can lead to injury. But thanks to modern technology, it has become possible to train correctly: you view a recording of an exercise with a trainer and repeat it in real time. The computer vision base on Barracuda and TF model technology compares your movements and displays information on how well you perform the exercise. Technology stack: Unity SDK, Barracuda, TF. Devices: Windows 10, MacOS.

Scheme of the engine with the HoloLens 2
September 17, 2021
Scheme of the engine with the HoloLens 2

Project: Scheme of the engine with the HoloLens 2 Working on the engine scheme as a part of the education apps for engineers in industrial companies. Technology stack: Unity SDK, MRTK Devices: HoloLens 2

How to check WiFi and internet connection in Unity application on Oculus Quest with native Java methods
August 19, 2021
How to check Wi-Fi and internet connection in Unity application on Oculus Quest with native Java methods

Sometimes we get requests for using native java methods from Unity code in the Oculus Application. Below, we describe one of the ways we can check if Wi-Fi and internet connection are enabled on the Oculus headset from the Unity Engine code part. In this sample application, we check if Wi-Fi is switched on or off on the Oculus app and if we have an internet connection to this Wi-Fi. At first, we need to call the native java class method using this code to call Wi-Fi availability: /// /// Send request to JavaClass to check if wifi is enabled on oculus /// /// private bool DeviceWiFiAndroidRequest () { var isWifiEnabled = false; try { // An activity provides the window where the app draws its UI. // Typically, one activity in an app is specified as the main activity, which is the first screen to appear when the user launches the app. // Get current activity in unity project from java classes. // AndroidJavaClass: Construct an AndroidJavaClass from the class name. // GetStatic: Get the value of a static field in an object type. using (var activity = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"). GetStatic ("currentActivity")) { // Method "getSystemService": Gets the name of the system-level service that is represented by the specified class. // As the parameter arguments, we pass the name of the package with handle "getSystemService". // The class of the returned object varies by the requested name. // Get "WifiManager" for management of Wi-Fi connectivity. using (var wifiManager = activity.Call ("getSystemService", "wifi")) { // Call: Calls a Java method on an object. Call, T – return type // Call method "isWifiEnabled". Return whether Wi-Fi is enabled or disabled. Returns bool value. isWifiEnabled = wifiManager.Call ("isWifiEnabled"); } } } catch (Exception e) { Debug.LogError ("Android request exception: " + e.Message); } return isWifiEnabled; } After that, we need to check if we have an internet connection on connected Wi-Fi. Also, we need to call the native java class method. /// /// Request to JavaClass to check if internet connection is reachable /// /// private bool NetworkConnectionAndroidRequest () { var isNetworkEnabled = false; try { using (var activity = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"). GetStatic ("currentActivity")) { // Get "ConnectivityManager" for handling management of network connections. using (var connectivityManager = activity.Call ("getSystemService", "connectivity")) { // Call method "getActiveNetworkInfo" that returns details about the currently active default data network. // Call method "isConnected" that indicates if network connectivity exists. Returns bool value. isNetworkEnabled = connectivityManager.Call ("getActiveNetworkInfo"). Call ("isConnected"); } } } catch (Exception e) { Debug.LogError ("Android request exception: " + e.Message); } return isNetworkEnabled; } After this, we have to use a coroutine to check these two parameters. We check each for 2 seconds. /// /// Check if the application is connected to Wi-Fi in coroutine /// /// private IEnumerator CheckDeviceWifiConnection () { yield return new WaitForSecondsRealtime (2f); while (true) { yield return new WaitForSecondsRealtime (checkDelay); wifiConnection = DeviceWiFiAndroidRequest (); wifiMessage.text = wifiConnection ? "Wifi On" : "Wifi Off"; } } /// /// Check if the application is connected to Wi-Fi in coroutine /// /// private IEnumerator CheckNetworkConnection () { yield return new WaitForSecondsRealtime (2f); while (true) { yield return new WaitForSecondsRealtime (checkDelay); internetConnection = NetworkConnectionAndroidRequest (); internetMessage.text = internetConnection ? "Internet reachable" : "Internet not reachable"; } } Below, you can see the full script for checking internet connection and Wi-Fi availability on the Oculus Quest 2 from Unity code using native java methods.

Streaming high-level detailed graphics in web browser with Unity WebGL
August 19, 2021
Qualium Systems Devlog | Streaming high-level detailed graphics in web browser with Unity WebGL

Feature: High-level detailed graphics and real-time lightings in any web browser. Using streaming from the webserver to the client browser and reading input from the device. All high-loaded processes compute on the web server. As a result, we receive an incredible graphic level that we can use in the promo application. Technology stack: Unity SDK, The High Definition Render Pipeline (HDRP), WebRTC, NodeJS. Devices: Web browsers (iOS, Android, Windows, macOS, Linux).

Face tracking on PC with Unity SDK and UltraFaceBarracuda
August 16, 2021
Face tracking on PC with Unity SDK and UltraFaceBarracuda

Feature: Face tracking on PC Depending on the face position, the picture that person is looking at moves. As a result of this the effect of a hologram is created. An interesting solution for marketing purposes with the ability to track people’s actions and test various marketing activities. Technology stack: Unity SDK, UltraFaceBarracuda. Devices: PC (Windows, Mac OS, Linux)

Oculus release notes_our thoughts about two interesting features which are available in v30-v31 of Oculus Quest
August 13, 2021
Oculus release notes: our thoughts about two interesting features which are available in v30-v31 of Oculus Quest

Oculus updated release notes on version 30.0 and 31.0 for Oculus Quest on 15 June and 20 July respectively. We decided to focus on two points that, in our opinion, are important and our Unity Tech Lead (AR/VR/MR Team) Alex V. commented on them. Notes on version 30.0 Information from release notes: You can now multitask with multiple system-level 2D apps side by side in Oculus Home on Quest 2 and Quest. Supported apps include: Explore, Store, Browser, Events, Oculus TV, Oculus Move, Scoreboards, and more. Our thoughts: This update is very interesting and now the main question is if Oculus Quest will make this feature available for all 2D applications or not. Our video: To demonstrate this new feature, we recorded a short video. Notes on version 31.0 Information from release notes: We’ve created multiplayer APIs for developers to use with their apps. For any app that opts in for this feature, you’ll be able to invite friends or people you’ve recently played with to your game sessions directly from the Quest Universal menu. Our thoughts: This may be a very powerful update and this step may change the standard of the matchmaking multiplayer game in the Oculus environment. We’ll try to use this update in our in-home project. Additional link: Find out more in the article Improve Concurrency in Your Multiplayer Games with Travel Together and Public Parties by Oculus for developers.