פיתוח אפליקציות VR למובייל עבור Google Cardboard
Google Cardboard היא הדרך הנגישה ביותר לחוות VR: משקפי קרטון זולים, והסמארטפון שלכם בתוכם. עבור מפתחים, זה אומר רינדור סטריאוסקופי, מעקב כיוון באמצעות IMU, ומגבלות ביצועים קפדניות—הכל על חומרה ניידת רגילה ללא מעבד VR ייעודי. אנו מפתחים אפליקציות VR עבור Cardboard על iOS ו-Android באמצעות Swift ו-Kotlin. לצוות שלנו יש 5 שנות ניסיון בפיתוח VR למובייל עם למעלה מ-20 פרויקטים. שירותי הפיתוח שלנו מתחילים ב-$2,000 עבור חוויות VR פשוטות ומגיעים עד $15,000 עבור אפליקציות אינטראקטיביות מלאות. להלן אנו מפרטים את האתגרים הטכניים המרכזיים והפתרונות שלהם.
כיצד להימנע מבחילות VR ב-Google Cardboard
בחילות תנועה מתרחשות כאשר השהיית הראייה עולה על 20ms. ה-IMU פועל ב-200–1000Hz, אך הרינדור הוא ב-60Hz. כדי לפצות על כך, אנו משתמשים ב-Asynchronous TimeWarp (ATW)—הקרנה מחדש של הפריים האחרון עם כיוון הראש העדכני ביותר בין הרינדור לתצוגה. ה-Cardboard SDK מיישם ATW באופן אוטומטי. ודאו ש-Cardboard.SDK.UpdateScreenParams() נקרא בתחילת כל CardboardCamera, לא בתדירות נמוכה יותר.
המלצות לעיצוב סצנה להפחתת אי-נוחות:
- אין תנועה מבוססת תאוצה (טלפורטציה עדיפה)
- אופק יציב או התייחסות לתא הטייס (פנים) מפחיתים בחילה
- אל תשנו את קנה המידה של העולם ביחס לשחקן בזמן ריצה
רינדור סטריאוסקופי: מסך מפוצל
המסך מחולק לשניים: החצי השמאלי לעין שמאל, החצי הימני לעין ימין. כל חצי מרונדר עם היסט קל של המצלמה (IPD—מרחק בין אישונים, ~63–65mm). ההבדל בין שתי התמונות יוצר את האפקט הסטריאוסקופי.
ב-Unity, זה מנוהל באמצעות רכיב com.google.cardboard עם שתי טקסטורות רינדור. כל טקסטורה מרונדרת בנפרד, ולאחר מכן מוחל תיקון עיוות חבית.
בעיית ביצועים קריטית: רינדור דו-מעבר מכפיל את עומס ה-GPU. בסמארטפון בינוני ב-1080p, זה מניב 30–40 FPS ללא אופטימיזציה. פתרונות:
- רינדור פובאלי—הפחתת רזולוציה בקצוות (האזור המרכזי נראה דרך העדשות)
- Single Pass Instanced Rendering ב-Unity (שתי העיניים בקריאת ציור אחת). שיטה זו מהירה פי 2 מרינדור דו-מעבר.
- הפחתת רזולוציית טקסטורת הרינדור ל-0.7–0.8 מרזולוציית המסך
| שיטה | FPS (1080p, סמארטפון בינוני) | איכות תמונה |
|---|---|---|
| דו-מעבר | 30–40 | רזולוציה מלאה |
| Single Pass Instanced | 55–60 | רזולוציה מלאה |
| פובאלי + Single Pass | 60+ | מופחתת בקצוות |
מעקב כיוון ואינטגרציית SDK
לאחר ש-Google הפכה את ה-Cardboard SDK לקוד פתוח ב-2021(ויקיפדיה), הוא הפך לדרך הרשמית לאפליקציות Cardboard על iOS ו-Android. ה-SDK מספק:
- תיקון עיוות לעדשות (לכל משקף יש פרופיל עיוות עדשות משלו, הנסרק באמצעות קוד QR)
- מעקב ראש באמצעות מיזוג נתוני מד תאוצה וגירוסקופ (מיזוג IMU)
- מטריצות עיניים להקרנה נכונה לכל עין
- טיפול בכפתור ההדק (כפתור מגנטי במשקפי הקרטון)
אינטגרציית Unity: חבילת void Update() { Cardboard.SDK.UpdateScreenParams(); // Позиция/ротация головы применяется автоматически через CardboardCamera компонент } UPM. לאחר הוספה:
void Update()
{
Cardboard.SDK.UpdateScreenParams(); // Позиция/ротация головы применяется автоматически через CardboardCamera компонент
}אינטגרציה מקורית ל-Android באמצעות CardboardHeadTracker ו-CardboardLensDistortion:
headTracker = CardboardHeadTracker.create();
lensDistortion = CardboardLensDistortion.create(encodedDeviceParams, width, height);
headTracker.getPose(monotonic_time_nanos, target_time_nanos, outEyeFromHead); קלט: כפתור ומבט
ל-Cardboard הבסיסי יש כפתור אחד. כל האינטראקציה מבוססת על:
- קלט מבט—הסמן עוקב אחרי המבט, הפעלה באמצעות זמן שהייה (בדרך כלל 1.5–2 שניות)
- כפתור ההדק—מאשר בחירה, טלפורטציה
סמן המבט מרונדר במרחב העולם במרחק קבוע מהמצלמה. קרינת קרניים ממרכז כל עין קובעת את האובייקט מתחת לסמן:
void Update() {
Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
if (Physics.Raycast(ray, out RaycastHit hit, maxDistance, interactableLayer)) {
gazeTarget = hit.collider.GetComponent<IGazeable>();
gazeTarget?.OnGazeEnter();
gazeTimer += Time.deltaTime;
if (gazeTimer >= DWELL_TIME) {
gazeTarget?.OnGazeActivate();
gazeTimer = 0f;
}
} else {
gazeTarget?.OnGazeExit();
gazeTimer = 0f;
}
} סריקת QR של פרופיל המכשיר
בהפעלה הראשונה, המשתמש סורק את קוד ה-QR ממשקפי ה-Cardboard. ה-SDK טוען את פרופיל עיוות העדשות עבור המשקפיים הספציפיים. ללא שלב זה, העיוות שגוי—התמונה נראית מעוותת. ה-Cardboard SDK שומר את הפרופיל ב-headTracker = CardboardHeadTracker.create(); lensDistortion = CardboardLensDistortion.create(encodedDeviceParams, width, height); headTracker.getPose(monotonic_time_nanos, target_time_nanos, outEyeFromHead); / void Update() { Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward); if (Physics.Raycast(ray, out RaycastHit hit, maxDistance, interactableLayer)) { gazeTarget = hit.collider.GetComponent<IGazeable>(); gazeTarget?.OnGazeEnter(); gazeTimer += Time.deltaTime; if (gazeTimer >= DWELL_TIME) { gazeTarget?.OnGazeActivate(); gazeTimer = 0f; } } else { gazeTarget?.OnGazeExit(); gazeTimer = 0f; } } לאחר הסריקה. הוסיפו מסך הוראות עם אייקון QR בהפעלה הראשונה וכפתור מפורש "סריקה מחדש של המכשיר" בהגדרות.
מה אנו מספקים (תוצרים)
- קוד מקור של האפליקציה עם הערות
- תיעוד API ותיעוד רכיבים מרכזיים
- הוראות משתמש לסריקת QR
- גישה למאגר הפרויקט ולכלי הפיתוח
- מפגש הדרכה לצוות שלכם (עד שעתיים)
- תמיכה במהלך הפרסום ב-App Store וב-Google Play
- בדיקות על 5+ מכשירים בקטגוריות מחיר שונות
- דוח אבטחת איכות
- אספקה מובטחת בזמן ומפתחי Unity מוסמכים עם ניסיון מוכח
- תוכנית פרויקט מפורטת ודוחות התקדמות
- תמיכה לאחר ההשקה למשך 30 יום
התהליך שלנו
- ניתוח: קביעת סוג האפליקציה (חוויה פסיבית או אינטראקטיבית), קהל היעד ודרישות הביצועים.
- הגדרת Cardboard SDK: אינטגרציה של חבילת Unity או SDK מקורי, הגדרת הקרנה.
- פיתוח סצנה: עיצוב עם מגבלות VR בחשבון, יישום קלט מבט.
- אופטימיזציה: יישום Single Pass Instanced, רינדור פובאלי, LODs, בדיקות FPS.
- בדיקות: בדיקה על מכשירים בקטגוריות מחיר שונות, הערכת נוחות.
- פריסה: הכנת build, העלאה ל-App Store Connect ול-Google Play Console.
לוח זמנים והערכות עלות
חוויית VR פסיבית פשוטה (תוכן 360, ניווט מבט בסיסי) אורכת 1–2 שבועות. אפליקציית VR אינטראקטיבית עם מכניקת משחק, סצנות מרובות ו-UI מלא אורכת 2–3 חודשים.
עלות פיתוח: חוויות פשוטות מתחילות מ-$2,000, אפליקציות אינטראקטיביות נעות בין $5,000–$15,000. המחירים שלנו תחרותיים—אפליקציית VR טיפוסית ל-Cardboard עולה בין $2,000 ל-$15,000.
העריכו את הפרויקט שלכם: צרו קשר לקבלת לוח זמנים ועלות ראשוניים. הזמינו פיתוח אפליקציית VR למובייל עבור Google Cardboard—קבלו ייעוץ ממהנדס מנוסה עם רקורד מוכח של 20+ פרויקטים מוצלחים ושביעות רצון לקוחות של 100%.







