פיתוח VR ו-AR
כשאנחנו משיקים פרויקט ראשון במשקפי VR, רוב הצוותים נתקלים באותה תופעה: טכנית הכל עובד, אבל במשקפיים או שמופיעה מחלת תנועה, או שהידיים "צפות" באיחור, או שהסצנה נראית מקוטעת בפריפריה. אלה לא באגים במובן הרגיל — הם תוצאה של העובדה שפיתוח VR/AR דורש גישה שונה לארכיטקטורת רינדור, אינטראקציה ו-UX כבר מתחילת הפרויקט. הניסיון שלנו: מעל 7 שנים בפיתוח משחקים, 15+ פרויקטי VR/AR שהושלמו עבור Meta Quest, SteamVR, PSVR2, HoloLens. אנחנו עובדים עם צוותים שצריכים לא רק אב טיפוס אלא אפליקציה מוכנה לייצור עם קצב פריימים יציב.
פלטפורמות ו-SDK
אנחנו עובדים עם כל הערימות הרלוונטיות. אנחנו משתמשים ב-OpenXR כשכבת הבסיס בכל מקום אפשרי — הוא מספק תאימות חוצת פלטפורמות בין Meta, Valve Index, HP Reverb ומכשירי PC VR אחרים. על גבי OpenXR, אנחנו בונים על XR Interaction Toolkit (Unity) או VR Expansion Plugin (Unreal). צרו קשר להערכת ערימה מותאמת לפרויקט שלכם.
| פלטפורמה | SDK / Framework |
|---|---|
| Meta Quest 2/3/Pro | Meta XR SDK, OpenXR |
| PC VR (SteamVR) | SteamVR Plugin, OpenXR |
| PlayStation VR2 | Sony PSVR2 SDK |
| HoloLens 2 | Mixed Reality Toolkit (MRTK) |
| ARKit (iOS) | AR Foundation + ARKit XR Plugin |
| ARCore (Android) | AR Foundation + ARCore XR Plugin |
| WebXR | Unity WebXR Export |
איך למזער מחלת תנועה בתנועת VR?
תנועה (Locomotion) — המקור העיקרי למחלת תנועה עבור משתמשי VR חסרי ניסיון. לפי מחקרים, כ-70% מהמשתמשים חווים אי-נוחות עם הגדרות תנועה לא נכונות Oculus Developer Guidelines. טלפורטציה — שיטת ניווט סטנדרטית כאשר תנועה חלקה אינה רצויה.
רכיבים מ-XR Interaction Toolkit: TeleportationArea, TeleportationAnchor, TeleportationProvider. יישום בסיסי עובד ישירות מהקופסה, אבל לייצור אנחנו משכללים אותו בארבעה שלבים:
- הגדרת
XRRayInteractorעם קרן מעוקלת (Bend Ray) — קשת הטלפורטציה נראית טבעית יותר מקרן ישרה ונתפסת טוב יותר על ידי משתמשים. - הוספת אזור נחיתה תקף — מחוון חזותי משנה צבע כאשר מרחפים מעל מכשול (אדום/ירוק).
- יישום מעבר דהייה — דהיית מסך חלקה (black fade) לפני טלפורטציה מפחיתה חוסר התמצאות.
- הצמדת סיבוב — לאחר טלפורטציה אנו מציעים סיבוב קפיצי של 45° או 90° במקום חלק, מה שמפחית את הסיכון למחלת תנועה.
לפרויקטים הדורשים תנועה חלקה (משחקי פעולה, סימולטורים), אנו משתמשים בהגדרות נוחות: וינייטינג בזמן תנועה, הפחתת FOV בזמן האצה. ההגדרות זמינות למשתמש בתפריט — לאנשים שונים יש ספי רגישות שונים. ההבדל בין תנועה קינמטית לתנועה מבוססת פיזיקה: קינמטית נותנת מעקב ידיים מיידי אבל מאפשרת לחפצים לעבור דרך קירות; מבוססת פיזיקה דרך Joint מספקת התנגשויות ריאליסטיות אבל דורשת שיכוך מהירות וכיוונון כוח מקסימלי של המפרק. אנחנו בוחרים לפי סוג האינטראקציה.
איך להפוך אחיזת חפצים ב-VR לריאליסטית פיזית?
זה החלק הכי מוערך בחסר בפיתוח VR. לקוחות לעתים קרובות תופסים את זה כ"סתם אנימציית יד", אבל בפועל זו מערכת מורכבת שבה נכונות פיזית, היענות ונוחות מתנגשים.
אחיזה (Grabbing)
XR Interaction Toolkit מספק שלושה סוגי Interactable לאחיזה:
-
XRGrabInteractable— אחיזה סטנדרטית, חפץ עוקב אחרי הבקר דרך מפרק פיזי או מיקום/סיבוב ישיר -
XRSimpleInteractable— לחפצים ללא תנועה פיזית (כפתורים, מנופים) - Interactable מותאם אישית על ידי ירושה מ-
XRBaseInteractable
Attach Transform — פרט שמתעלמים ממנו לעתים קרובות. לכל Interactable חייב להיות Attach Transform מוגדר כראוי (הנקודה שבה היד "נצמדת"). בלעדיו, אחיזת האקדח תהיה במרכז הרשת, לא במקום שבו מחזיקים אותו.
לנשקים וכלים עם אחיזה דו-ידנית — מערכת TwoHandGrab נפרדת: היד המובילה קובעת מיקום, השנייה — כיוון. XR Interaction Toolkit תומך בזה דרך XRTwoHandGrabInteractable או לוגיקה מותאמת אישית עם שתי נקודות חיבור.
זריקה (Throwing)
החלקת מהירות היא קריטית לזריקה ריאליסטית כי Rigidbody.velocity ברגע שחרור הבקר משקף מהירות מיידית, שלעתים קרובות שגויה בגלל דיסקרטיזציה של מעקב. המשתמש עושה תנועת פרק כף יד מהירה — אבל החפץ עף במחצית המהירות.
פתרון: החלקת מהירות על פני N הפריימים האחרונים (בדרך כלל 5–10 פריימים, ~80–160 אלפיות השנייה ב-60 הרץ) לפני השחרור. XR Interaction Toolkit עושה זאת דרך VelocityEstimator. בנוסף, אנו מיישמים מכפיל קנה מידה למהירות — הגדלת מהירות קטנה (1.2–1.5×) הופכת זריקות למספקות יותר מבחינה סובייקטיבית. מהירות זוויתית (לחפצים שאמורים להסתובב באוויר) גם היא ממוצעת באופן דומה.
AR: מעקב מישורים ואינטראקציה עם הסביבה
AR מוסיף סוג אחר של בעיות — עבודה עם סביבה אמיתית ובלתי צפויה. AR Foundation — שכבה חוצת פלטפורמות על גבי ARKit ו-ARCore. רוב התכונות הבסיסיות (זיהוי מישורים, raycasting, מעקב תמונות, מעקב פנים) זמינות דרך API אחיד.
זיהוי מישורים
ARPlaneManager מזהה מישורים אופקיים ואנכיים. ניואנסים מעשיים:
- האתחול לוקח זמן — המשתמש חייב להסתכל סביב החדר בזמן שהמערכת בונה מפה. יש צורך ב-onboarding מפורש עם הוראה "הזיזו לאט את המצלמה על פני משטחים".
- מישורים אינם יציבים — הגבולות והמיקום שלהם מתעדכנים ככל שמצטברים נתונים. חפצים המוצבים על מישור צריכים להיות מחוברים דרך parent ל-ARPlane, לא לקואורדינטות עולם.
- מיזוג מישורים — שני קטעי רצפה שזוהו עשויים להתמזג לאחד, מה שמזיז את העוגן. לעוגנים קריטיים, השתמשו ב-
parentingבמקום חיבור ישיר למישור.
איכות מעקב התמונות (דרך ARAnchor) תלויה ישירות באיכות תמונות הייחוס. תמונות עם תדירות פרטים גבוהה וקצוות מנוגדים (כמו קוד QR אבל מסוגנן) עוקבות בצורה אמינה יותר מלוגואים חלקים. ARCore Geospatial API — ל-AR חיצוני עם קישור לקואורדינטות עולם אמיתיות (דיוק עד 10 ס"מ באזורים ממופים היטב).
אופטימיזציה ל-VR: קצב פריימים ונוחות
VR דורש קצב פריימים גבוה ויציב. כ-60% מזמן הפיתוח ב-VR נייד מוקדש לאופטימיזציה, לא לפונקציונליות — שיפוץ רטרואקטיבי עולה פי שניים מארכיטקטורה נכונה מהספרינט הראשון.
| מכשיר | יעד הרץ | סף קריטי |
|---|---|---|
| Meta Quest 2 | 72 / 90 הרץ | < 72 הרץ — מורגש |
| Meta Quest 3 | 90 / 120 הרץ | < 90 הרץ — מורגש |
| Valve Index | 90 / 120 / 144 הרץ | < 90 הרץ — מורגש |
| PSVR2 | 90 / 120 הרץ | < 90 הרץ — מורגש |
Single Pass Instanced Rendering
אופטימיזציית הרינדור העיקרית ב-VR. בלעדיו, הסצנה מרונדרת פעמיים (פעם לכל עין), מה שמכפיל את קריאות הציור. Single Pass Instanced מר�דר את שתי העיניים במעבר אחד דרך instancing: הגאומטריה מעובדת פעם אחת, ה-shader מקבל שתי מטריצות view/projection דרך GPU instancing. מופעל ב-Unity דרך ARTrackedImageManager. חשוב: shaders מותאמים אישית חייבים לתמוך ב-SPI — shaders סטנדרטיים של URP/HDRP תומכים בזה, HLSL מותאם אישית דורש שינויים (XR Plug-in Management > Rendering Mode: Single Pass Instanced ומאקרו קשורים). יישום טכניקה זו מפחית קריאות ציור ב-40–50%, מה שהופך אותה ליעילה פי שניים מרינדור כפול נאיבי.
Foveated Rendering
ב-Meta Quest, Fixed Foveated Rendering (FFR) זמין — הפחתת רזולוציה בפריפריה שבה חדות הראייה נמוכה יותר. מוגדר דרך OVRManager או Meta XR SDK:
OVRManager.fixedFoveatedRenderingLevel = OVRManager.FixedFoveatedRenderingLevel.High; OVRManager.useDynamicFixedFoveatedRendering = true; Dynamic FFR מעלה אוטומטית את הרמה כאשר קצב הפריימים יורד — נוח יותר מקבוע בסצנות עם עומס משתנה.
IPD והגדרות נוחות
IPD (מרחק בין אישונים) — משפיע על תפיסת העומק. ברמה התכנותית ברוב המכשירים, זמינה רק קריאת IPD (UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX), התאמה פיזית היא על המשקפיים. ליישומים הדורשים מיקום מדויק (סימולטורים רפואיים, אימונים), אנו מתחשבים ב-IPD בחישובי קנה המידה של הסצנה.
הפטיקה
משוב הפטי — כלי מוערך בחסר. אפילו תגובת רטט פשוטה בעת אחיזת חפץ או פגיעה מגבירה משמעותית את תחושת הנוכחות. בממוצע, שילוב דפוסי הפטיקה לוקח 30–80 שעות לפרויקט.
XR Haptics דרך OpenXR:
var hapticImpulse = new UnityEngine.XR.HapticCapabilities(); InputDevice device = InputDevices.GetDeviceAtXRNode(XRNode.RightHand); device.SendHapticImpulse(0, amplitude: 0.5f, duration: 0.1f); לדפוסים מורכבים ("מרקם" מישוש של משטח במגע, רטט גובר בעת מתיחת קשת) אנו משתמשים ב-Meta Haptics Studio — מאפשר עיצוב קליפים הפטיים חזותית. זה יכול לחסוך כ-30% מהזמן המושקע בכיוונון הפטי ידני.
מה כולל פיתוח אפליקציות VR/AR?
בהזמנת פרויקט מפתח, אנו מספקים את התוצרים הבאים:
- מסמך ארכיטקטוני עם תיאור הערימה, לוגיקת הרינדור ומערכת האינטראקציה
- אב טיפוס עובד (MVP) לבדיקה על המכשיר הממוקד
- אינטגרציה של SDK נדרשים (Meta XR, OpenXR, AR Foundation וכו')
- אופטימיזציה לתדרי יעד 72/90/120 הרץ עם פרופילינג של קריאות ציור ו-FPS
- בדיקות על חומרה פיזית (Quest, SteamVR, HoloLens) עם מעורבות משתמשים
- תיעוד מלא לבנייה, פריסה ותמיכה
- הכשרה לצוות הלקוח (סדנה על XR Toolkit)
- תמיכה באחריות למשך חודש לאחר המסירה
מה משפיע על עלות ולוחות זמנים?
פרויקטי VR/AR יקרים יותר ממשחקים רגילים בהיקף דומה. איטרציות איטיות יותר — כל תיקון חייב להיבדק במשקפיים, אמולטור לא מעביר את החוויה האמיתית. מחלת תנועה מאלצת עיבוד מחדש של כמה החלטות קונספטואליות לאחר הפלייט�ט הראשון. אופטימיזציה תופסת חלק משמעותי מהזמן — ל-VR נייד (Quest) עד 60–70% מהמחזור. לפרויקטי Quest, אנו מתחילים אופטימיזציה מהספרינט הראשון. העלות של אינטגרציית SDK בסיסית (XR Interaction Toolkit) משתנה בהתאם להיקף ה-Interactable המותאמים אישית. תקציבים טיפוסיים לפרויקט Quest מלא נעים בין $25,000 ל-$80,000 בהתאם למורכבות, מספר האינטראקציות המותאמות אישית ועומק האופטימיזציה. תכנון ארכיטקטוני נכון מהספרינט הראשון חוסך בדרך כלל 40% בעיבוד מחדש מאוחר יותר בהשוואה לתיקון צווארי בקבוק בביצועים רטרואקטיבית.
קבלו ייעוץ לפרויקט שלכם — אנו נעריך את המשימה, הערימה ולוחות הזמנים. הזמינו פיתוח אפליקציית VR/AR מפתח עם קצב פריימים יציב מובטח.





