You are reading the long version. Best if you want full context and technical detail.

πŸ’Ό Internship at SportsImproVR

This internship was not just about building features β€” it was about solving messy, real-world problems where the solution was often unclear.

I worked on two major areas:

  • πŸŽ₯ Automating motion capture workflows
  • πŸ•Ί Building a full-body tracking system for VR training

Both required deep technical exploration, experimentation, and decision-making under uncertainty.


πŸ‘€ Zhangir Before the Project

Before starting:

  • Strong systems & low-level programming mindset
  • Comfortable building tools and engine-level features
  • Limited experience with:
    • VR development
    • Android builds
    • Bluetooth communication
    • Motion capture pipelines

Most importantly:

I was used to problems where the solution exists.

This internship forced me into problems where:

The solution might not even be possible.


πŸ”¨ My Contributions


πŸŽ₯ Contribution 1: Video-to-FBX Converter

🎯 The Goal

The company had a painful workflow:

  1. Upload video to MoveAI
  2. Wait
  3. Download files
  4. Import into Unity
  5. Clean up unnecessary data

This process was:

  • Slow ⏳
  • Manual πŸ–±οΈ
  • Error-prone ⚠️

The Vision

β€œWhat if this entire pipeline was just one button inside Unity?”


βš”οΈ Challenge 1: Bridging Unity and Python

❓ Problem

MoveAI only provided a Python API.

Unity uses C#.

There was no direct way to connect them.


🧩 Why it was Hard

  • Cross-language execution (C# β†’ Python)
  • File handling across environments
  • Debugging becomes harder across boundaries

πŸ’‘ Solution

I started small:

  • Created a Python script that writes a file
  • Triggered it from Unity

Then scaled up:

  • Integrated MoveAI API
  • Passed video paths as input
  • Returned FBX data into Unity

βœ… Result

A working pipeline:

Unity β†’ Python β†’ MoveAI β†’ Unity


βš”οΈ Challenge 2: Editor Freezing

❓ Problem

Each conversion took ~15 minutes.

Unity completely froze during this time.


🧩 Why it was Hard

  • Unity runs on a main thread
  • Blocking operations freeze the editor

πŸ’‘ Solution

  • Moved execution into background tasks
  • Kept Unity responsive during processing

βœ… Result

  • Editor stays usable
  • Workflow no longer blocked

βš”οΈ Challenge 3: Sequential Processing Bottleneck

❓ Problem

Videos processed one-by-one.

10 videos = hours of waiting.


🧩 Why it was Hard

  • Python parallelism unreliable
  • Needed per-task tracking

πŸ’‘ Solution

Instead of forcing Python:

I moved parallelism into Unity.

  • Each video = separate task
  • Independent progress tracking

βœ… Result

  • Parallel processing ⚑
  • Massive time savings

βš”οΈ Challenge 4: UX Was Terrible

❓ Problem

  • Users had to manually copy files
  • No feedback
  • No validation

πŸ’‘ Solution

I redesigned the tool:

  • πŸ“‚ Native file browser
  • ⚠️ Error/warning system
  • πŸ“Š Progress bars per video
  • 🧭 Clear UI layout

βœ… Result

From:

β€œHacky internal tool”

To:

β€œProduction-ready pipeline”


πŸ’₯ Final Impact

Before:

  • Manual, slow, frustrating workflow

After:

  • One-click automation
  • Scalable pipeline
  • Developer-friendly tool

πŸ•Ί Contribution 2: Full-Body Tracking System

🎯 The Goal

Build a system that tracks the entire human body in VR.

This is critical for:

  • Sports training πŸ‹οΈ
  • Motion analysis πŸ“ˆ

βš”οΈ Challenge 1: The Tracking Landscape is a Mess

❓ Problem

There is no single standard solution.

Options included:

  • IMU trackers
  • Lighthouse systems
  • Camera tracking
  • EMF systems

πŸ’‘ Solution

I performed a full breakdown of:

  • Accuracy
  • Latency
  • Cost
  • Reliability

βœ… Result

Identified IMU-based tracking as best balance.


βš”οΈ Challenge 2: Xsens Was a Dead End

❓ Problem

Trackers drifted over time.

Even when stationary:

They still moved.


🧩 Why it was Hard

  • Not a coding bug
  • Fundamental hardware limitation

πŸ’‘ Solution

  • Contacted Xsens support
  • Validated behavior experimentally

🚨 Realization

This solution will NEVER work for our use case.


βœ… Result

Pivoted away early β†’ saved huge time.


βš”οΈ Challenge 3: Bluetooth is a Nightmare

❓ Problem

Needed to communicate with trackers.


🧩 Why it was Hard

Bluetooth LE structure:

Device β†’ Service β†’ Characteristic

  • Poor documentation
  • Hard to debug
  • Platform-specific behavior

πŸ’‘ Solution

  • Learned BLE architecture deeply
  • Built Android test apps
  • Scanned and connected to devices

βœ… Result

Successfully detected and connected trackers.


βš”οΈ Challenge 4: β€œConnected” β‰  β€œWorking”

❓ Problem

Could connect to trackers…

…but received no usable data.


πŸ’‘ Solution

  • Studied BLE specs
  • Identified correct characteristics
  • Learned how data is structured

βœ… Result

Understood full communication pipeline.


βš”οΈ Challenge 5: Choosing the Right Hardware

❓ Problem

Xsens unusable β†’ needed alternative


πŸ’‘ Solution

Researched and proposed:

HaritoraX

Why:

  • πŸ’Έ Cheaper
  • 🧠 Provides full skeleton
  • πŸ”Œ Outputs via OSC

βœ… Result

Company adopted new solution.


βš”οΈ Challenge 6: OSC Pipeline Not Working

❓ Problem

No data received in Unity.

Silent failure.


🧩 Why it was Hard

  • No error messages
  • Platform restrictions (Android)

πŸ’‘ Solution

After deep debugging:

  • Found missing Android permissions
  • Modified AndroidManifest.xml

βœ… Result

OSC communication works πŸŽ‰


πŸ’₯ Final Impact

Before:

  • No working tracking solution

After:

  • Clear pipeline:
    • Trackers β†’ VR Manager β†’ OSC β†’ Unity

πŸ‘€ Zhangir After the Project

πŸš€ Growth

Before:

  • Strong programmer

After:

  • Real-world problem solver

🧠 What Changed

  • I now think in systems, not features
  • I question whether a problem is worth solving
  • I make decisions based on constraints, not assumptions

πŸ”‘ Key Takeaways

  • The hardest problems are uncertain ones
  • Engineering = decision-making under ambiguity
  • The best solutions often come from changing direction

🏁 Final Reflection

This internship proved that I can:

  • Build real production tools πŸ› οΈ
  • Navigate unknown technical domains 🌍
  • Make impactful engineering decisions 🎯

Most importantly:

I can turn chaos into working systems.