A virtual-reality-based rowing motion training application. Players wear a VR headset and hold virtual oars with both hands. Through realistic rowing movements, they drive the boat forward on the water while using a motion calibration and evaluation system to measure the accuracy of their rowing posture.
GroWin-RowVision combines traditional rowing training with virtual reality technology to provide an immersive rowing posture training experience. The system supports:
- Real-time motion capture: Captures the position and rotation data of both hand controllers through OpenXR
- Motion calibration recording: Allows a coach or standard rowing movement to be recorded as a reference template
- Posture evaluation scoring: Compares the user’s rowing movement with the reference movement frame by frame and outputs an error score
- Physics-driven boat movement: Maps rowing frequency and force directly to the physical propulsion of the boat
| Feature | Description |
|---|---|
| 🚣 Physics-based rowing | Uses Rigidbody physics. Higher rowing frequency generates greater propulsion, with a capped maximum force |
| 📍 Trigger zone detection | Automatically generates start and end trigger zones in VR space to detect the beginning and end of a rowing stroke |
| 🎯 Motion calibration system | Hold the A button for 3 seconds to record a standard movement sequence with multiple frames |
| 📊 Motion evaluation | Resamples the user’s movement and compares it with the reference frame sequence to calculate average error in meters |
| 🖐️ Two-hand oar rotation | Supports two-handed oar rotation interaction, allowing both hands to control the oar around a central pivot |
| 🎮 Single-axis draggable objects | VR drag component with movement limits and automatic return after release |
| 🌊 Real-time ocean rendering | Integrates Crest Ocean System with boat wake and underwater effects |
| 🗺️ Island terrain scene | Uses Free Island Collection terrain with vegetation, cliffs, and beach textures |
| 📱 UI system | Displays real-time boat speed and supports menu scene switching |
| Category | Version |
|---|---|
| Unity | 2021.3.45f2 LTS |
| Render Pipeline | Universal Render Pipeline (URP) 12.1.15 |
| XR Framework | XR Interaction Toolkit 2.6.5 + OpenXR 1.13.2 |
| Target Platform | PICO 4 / PICO 4 Enterprise (Android) |
| Ocean System | Crest Ocean System |
| Animation / UI | TextMeshPro 3.0.6 · DOTween (Demigiant) |
| Version Control | Git + Git LFS 3.5 |
Assets/
├── Animator/ # Animation controllers for boat animation
├── Crest/ # Crest Ocean System assets and examples
├── Model/ # Boat FBX models
├── Plugins/ # Third-party plugins such as DOTween / PICO SDK
├── Prefabs/ # Scene prefabs
│ ├── BoatWakesScene.prefab # Boat scene prefab with wake effects
│ ├── OarPivot.prefab # Oar pivot point
│ └── Terrain.prefab # Terrain prefab
├── Resources/ # Runtime dynamically loaded resources
├── Samples/ # XR Interaction Toolkit sample assets
├── Scenes/
│ ├── MenuScene.unity # Main menu scene
│ └── SampleScene.unity # Main gameplay scene
├── Scripts/
│ ├── Boat/
│ │ ├── BoatMover.cs # Boat physics propulsion control
│ │ └── RowingStrokeDetector.cs # Rowing stroke trigger zone detection
│ ├── Manager/
│ │ └── GameManager.cs # Scene management / quit game
│ ├── PaddleHandle/
│ │ ├── CreateTriggerOarSystem.cs # Main rowing calibration system controller
│ │ ├── OneAxisDragAndReturn.cs # Single-axis drag + automatic return
│ │ ├── RowingTrainerRawXR.cs # Raw XR data motion recording and evaluation
│ │ └── TriggerOarObject.cs # Oar blade trigger event handling
│ ├── Tools/
│ │ ├── JackXRUse.cs # XR utility functions
│ │ └── OarTwoHandRotator.cs # Two-hand oar rotation controller
│ └── UI/
│ └── UITools.cs # UI utility class, such as speed display
├── Sharder/ # Custom shaders
├── UI/ # UI atlases and Free Island terrain textures
├── WaterWorks/ # Additional water effect assets
├── XR/ # XR device configuration
└── XRI/ # XR Interaction Toolkit configuration presets