XR-Read is a cross-platform, language-switchable reading acuity test (built on the Minnesota Reading Test (MNREAD)) designed for virtual reality (VR) and video see-through (VST) environments. It precisely controls effective resolution (measured in logMAR—the logarithm of the minimum angle of resolution) and natively runs on both VR headsets and smartphones for VST/Eyes.
XR-Read enables researchers and developers to:
- Measure reading performance across multiple languages (English and Chinese) with comparable stimuli
- Evaluate how text clarity impacts user comfort and performance
- Generate reference curves linking effective resolution to reading metrics
- Set data-driven typography and rendering targets for XR systems
- Text Rendering: TextMeshPro for high-quality font rendering in 3D and 2D space
- Distance Control: Standardized viewing distance (0.40 m by default), ensuring reproducible visual angles
- Resolution Levels: 16 logMAR steps (from -0.5 to 1.3), allowing fine-grained measurement
- Bilingual Support: Pre-loaded sentence libraries in English and Chinese, with matched psychophysical properties
- Device Calibration: Automatic scaling factor based on screen pixels-per-centimeter to account for device-specific PPI variations
- Unity Editor: Version 6000.0.39f1 or compatible
- VR Headset (for VR mode): Any PC VR
- Android Device (for VST/Eyes mode): Android
-
Build & Run:
- Open the project in Unity 6000.0.39f1
- Set build target to PC, Mac & Linux Standalone (with VR support enabled)
- Build and deploy to your PC/VR runtime
-
First Launch:
- The app automatically skips the calibration screen for PCVR
- You are presented with the Main Menu to select:
- Language: English (EN) or Chinese (CN)
- Resolution Level: Choose effective resolution condition (A-D are 0.0, 0.2, 0.4, 0.6 logMAR in our cases)
- Display Mode: VR (automatically selected for PCVR)
- Participant ID & Trial Number (for logging purposes)
-
Begin Test:
- Click Start Test
- Read sentences aloud as quickly and accurately as possible
- Use controller or keyboard (SPACE) to navigate between sentences (Next/End buttons)
- The app automatically tracks reading time and detects errors
-
End Test:
- Test concludes automatically when the smallest readable size is reached, then click on End button
- Results are saved and available for download
-
Build & Run:
- Set build target to Android
- Build and install APK on an Android device
-
First Launch:
- The app displays the Calibration Screen
-
Understand Calibration:
- The app displays a rectangle on the screen
- A slider allows you to adjust the rectangle's width
- Your task: match the rectangle width to a physical credit card (exactly 8.56 cm wide)
-
Perform Calibration:
- Place a credit card on your device's screen
- Adjust the Width Slider until the on-screen rectangle matches the card's width exactly
- The current px/cm value is displayed in real-time
- Once aligned, note the final pixels-per-centimeter (px/cm) value
-
Confirm & Continue:
- Click the Confirm / Next button to save the calibration
- The value is stored in PlayerPrefs and used to scale all subsequent text measurements
-
Select Parameters:
- Language: English (EN) or Chinese (CN)
- Resolution Level: Choose effective resolution condition (A-D are 0.0, 0.2, 0.4, 0.6 logMAR in our cases)
- Display Mode: VST/Eyes
- Participant ID & Trial Number: Enter identifiers for data logging
-
Start Test:
- Click Start Test
- Position the Android device in front of your Eyes (approximately 40 cm away)
- Read sentences aloud
- Navigate using on-screen buttons/keyboard
All modes generate CSV log files containing sentence-level and summary metrics.
Log Location:
<Application.persistentDataPath>/MNReadLogs/
File Naming Convention:
MNREAD_<Participant_ID>_<Trial_ID>_<Language>_<Mode>_<Timestamp>.csv
Example:
MNREAD_P001_Trial_1_EN_VR_20250106_143022.csv
Log Location:
<Application.persistentDataPath>/MNReadLogs/
On Android devices, this typically resolves to:
/Android/data/<package.name>/files/MNReadLogs/
You can access logs via:
File Manager (Android Files app): Navigate to /Android/data/<app-package>/files/MNReadLogs/
Each CSV file contains the following columns:
| Column | Description |
|---|---|
sentenceID |
Sequential sentence number (1–16) |
sentence |
The actual sentence text |
logMAR |
Effective resolution level for this sentence (e.g., 0.0, 0.2, 0.4, 0.6) |
distance |
Viewing distance in meters (default 0.40 m) |
x-Width-mm |
Target x-height width in millimeters |
time-s |
Time taken to read the sentence (in seconds) |
error |
Number of word/character errors (0 if perfect) |
If you find this project useful for your research, please cite our paper:
@misc{wang2026resolution,
title={Resolution deficits drive simulator sickness and compromise reading performance in virtual environments},
author={Jialin Wang and Xinru Cheng and Boyong Hou and Hai-Ning Liang},
year={2026},
eprint={2601.02829},
archivePrefix={arXiv},
primaryClass={cs.HC},
url={https://arxiv.org/abs/2601.02829},
}The data used for the paper can be found in the Dataset folder.
For issues, feature requests, or collaboration inquiries, please open an issue on the project repository or contact the research team.