Skip to main content

Overview

Ease-of-Use vs. Flexibility

Many labs require different design setups, and it's a tall order to cater to all situations.

  • For experienced developers, or researchers with subjective test design, a range of flexible features would provide a more comprehensive tool.
  • For novice users, a rich and flexible feature set requires a steep learning curve, somewhat defeating the purpose of providing a tool to streamline virtual reality tests.
Ease of use vs. flexibility image
Figure 1

Ease of use vs. flexibility trade-off

QExE Architecture

To overcome this issue, the QExE tool takes a modular design approach. Using a set a defined interfaces for methods, questionnaires, and OSC communication, different modules can be programmed and imported by expert users to work within the tool, while leaving the base QExE feature set clutter-free for normal users wishing to explore the current implementation.

Test Controller, VR Platform, or Both?

Using a Controller-Agent architecture, we can separate out "test control" aspects from "virtual platform" aspects.

For example, if you have a VR system that already has UI's and interaction mechanics but require a means to automate and collect data, you can use the Controller. Likewise, the reverse if true if your lab uses Matlab or Python to automate tests but require a VR system with user interfaces for subjects, you can just take the Unity Agent. In these examples, the only additional programming required is to implement the expected communication messages between programs.

Why MaxMSP and Unity?

There are several tools that could have been used to develop either the Controller or Agent. JUCE, for example, was a front runner for the host application. Unreal Engine was a candidate for the client. Ultimately, the choice comes down to which program best fits the intended use case.

Max/MSP Controller

MaxMSP is a graphical programming environment. Its core principle — graphical objects representing classes — means that those with minimal coding experience can begin building something with relatively little friction. Programming is done in "patches," which can contain graphic components for building quick user interfaces alongside JavaScript code objects.

While this has drawbacks for those with a deeper programming background, those with limited coding experience who wish to adapt the QExE tool have a higher chance of success in a patch-based environment than they would working directly with a C++ project.

For more complex logic, a JavaScript object can be used to script functions within a patch. For DSP work, Max's GEN object provides lower-level access. Read more here. Most of the QExE Host is implemented using a combination of patchers with corresponding JavaScript code objects.

Architecture for the MaxMSP Controller
Max Controller:

Architecture for the MaxMSP Controller

Unity Agent

Unity is a 3D gaming engine that has risen to popularity within research communities due to it's accessibility. The program has a shallow learning curve, is capable of doing many of the tasks that are thrown its way, has good online documentation, and allows users to get into lower level C# coding quite easily with it's scripting API built around a base class - MonoBehavior.

More recently, Unity has invested resources into providing tools for virtual reality development, making it a good candidate for the QExE tool.

Architecture for the Unity Agent
Unity Agent:

Architecture for the Unity Agent