לקוח מגיע עם קטלוג של 2000+ פריטי רהיטים ומבקש אולם תצוגה VR. מודלי תלת-ממד שוקלים 50 MB כל אחד, עם 15 אובייקטים לסצנה — האפליקציה קורסת באייפון X. כאב טיפוסי: VR נייד עם Cardboard, 3DoF, ללא בקרים, ומשתמשים סובלים מבחילות מתנועה חלקה. ניגשנו לפתרון דרך רטופולוגיה, טעינת אזורים אסינכרונית, וטלפורטציה במבט. כתוצאה מכך, זמן טעינת האזור ירד ב-40%, וההמרה לתצוגות פרטים עלתה ב-25%. מקרה זה הפך לבסיס הצינור שלנו, שמתאים לכל SKU. ויתרנו על הרעיון של "לעשות את זה יפה" והתמקדנו במדדים קונקרטיים: זמן טעינת סצנה, קצב פריימים, מספר אצוות. כל אופטימיזציה מאומתת על ידי פרופיילינג במכשירים אמיתיים. להלן הפרטים הטכניים של איך השגנו ביצועים יציבים תחת Cardboard ו-Google VR.
איך אנו בונים את ארכיטקטורת אולם התצוגה VR?
החלל מחולק לאזורים עצמאיים, כל אחד הוא סצנת Unity נפרדת. מעברים בין אזורים מתרחשים דרך טלפורטציה במבט. זה מפחית בחילות פי 3 בהשוואה לתנועה חלקה. מבנה הסצנה:
Showroom
├── EntryZone (фойе с категориями)
├── Zone_Furniture (мебельный зал)
│ ├── ProductPedestal_001 (диван)
│ ├── ProductPedestal_002 (стол)
│ └── NavigationPortal → Zone_Lighting
├── Zone_Lighting (зал освещения)
└── Zone_Outdoor (уличная экспозиция)כל אזור נטען דרך Addressables בעת טלפורטציה. כך התוכן לא מוחזק בזיכרון כל הזמן אלא נטען לפי דרישה. Addressables מספק טעינה מהירה פי 4 בהשוואה ל-AssetBundles, ומפחית עלויות אחסון ורוחב פס ב-25%. עבור קטלוג עם עדכוני מודלים תכופים, זה גם מאפשר עדכונים חלקים — פשוט פרסם מחדש את קבוצת ה-Addressables על CDN.
אופטימיזציה של מודלי תלת-ממד
מודלי CAD מקוריים מכילים לעיתים מיליוני מצולעים. צינור האופטימיזציה שלנו כולל רטופולוגיה, אפיית נורמלים, הכנת טקסטורות PBR, והמרה.
| שלב | כלי | תוצאה יעד |
|---|---|---|
| רטופולוגיה | ZBrush, Blender | 5,000–20,000 מצולעים |
| אפיית נורמלים | Substance Painter | פרטים מה-high-poly למפת נורמלים |
| טקסטורות PBR | Substance Designer | 1K–2K Albedo/Normal/Roughness/Metallic |
| המרה | Unity Addressables | iOS: USDZ, Android: glTF + KTX2 |
KTX2 עם Basis Universal הוא חובה עבור Android — הוא מספק פענוח בלתי תלוי GPU ודחיסה ללא אובדן. עבור iOS אנו משתמשים בטקסטורות סטנדרטיות עם mipmaps.
השוואת פורמטי טקסטורה
| פורמט | פלטפורמה | דחיסה | איכות | גודל (1K) |
|---|---|---|---|---|
| KTX2 + Basis | Android | אוניברסלית | גבוהה | ~1.5 MB |
| ETC2 | Android | מבוססת בלוקים | בינונית | ~1.3 MB |
| ASTC | Android | חומרה | גבוהה | ~1 MB |
| PNG | iOS | ללא דחיסה | מקורית | ~5 MB |
KTX2 מציע את האיזון הטוב ביותר בין גודל ואיכות בכל ה-GPUs. עבור iOS אנו משתמשים ב-ASTC אם המכשיר תומך בכך — דחיסת Metal מובנית.
תאורה: מראה ריאליסטי ללא ray tracing
במכשירים ניידים ray tracing אינו זמין — ריאליזם מושג דרך תאורה מחושבת מראש. לפי הנחיות Apple Human Interface Guidelines ל-VR, גישה זו מבטיחה אינטראקציה חלקה.
מפת אור אפויה
צללים סטטיים ו-GI מחושבים בעורך ונשמרים בטקסטורה. עבור אולם תצוגה עם גיאומטריה קבועה, זה אופטימלי. ה-Progressive Lightmapper של Unity נותן תוצאות טובות. הגדרות ניידות: רזולוציית מפת אור 20–40 טקסלים/יחידה, דחיסת מפות אור מופעלת.
Reflection Probes
קיובמפות אפויות להחזרים על משטחי מתכת ומבריקים. אנו ממקמים אחת לכל אזור ועוד נוספות ליד אובייקטים מבריקים.
חומרים פולטי אור
אורות כגיאומטריה עם shader פולט אור, אפויים למפת האור. אורות בזמן אמת משמשים רק לאפקטים (למשל, הבהוב שלט) ומוגבלים לאחד לסצנה.
// Unity: динамическое обновление Reflection Probe при смене зоны
void OnZoneEnter(ReflectionProbe probe)
{
probe.RenderProbe(); // обновляем при телепортации, не в runtime
} אינטראקציה עם מוצרים ואינטגרציית קטלוג
בנקודת הבדיקה, משתמשים יכולים:
- לסובב את המודל במבט — המשתמש מסתכל על חיצי בקרה, הפעלת שהייה מסובבת את המודל.
public class ProductRotator : MonoBehaviour
{
[SerializeField] private Transform productRoot;
private float currentRotation = 0f;
public void RotateLeft() => StartCoroutine(SmoothRotate(-45f));
public void RotateRight() => StartCoroutine(SmoothRotate(+45f));
IEnumerator SmoothRotate(float delta)
{
float target = currentRotation + delta;
float elapsed = 0f;
float duration = 0.4f;
while (elapsed < duration)
{
productRoot.rotation = Quaternion.Euler(
0,
Mathf.LerpAngle(currentRotation, target, elapsed / duration),
0);
elapsed += Time.deltaTime;
yield return null;
}
currentRotation = target;
}
} - וריאציות צבע — מעבר בין חומרים של אותו מודל דרך כפתורי מבט עם דוגמיות צבע.
- נקודות מידע — נקודות על המודל עם תיאורי תכונות: "עור פרימיום", "מערכת הרכבה מהירה". הן נפתחות בפאנלים במרחב העולם בהפעלת מבט.
מצב AR זמין גם לצפייה במוצרים במרחב אמיתי. אולם תצוגה ללא חיבור לקטלוג הוא הדגמה, לא מוצר. תוכן נטען דינמית:
- מטא-דאטה של מוצר (שם, תיאור, מחיר, וריאציות) — מ-REST API.
- מודלי תלת-ממד — מ-Addressables CDN לפי product_id.
- זמינות ומחיר — בזמן אמת מהקטלוג.
כשהקולקציה משתנה, אין צורך בשחרור מחדש של האפליקציה: קבוצות Addressables מתעדכנות דרך Content Delivery.
למה ניווט במבט הוא הבחירה הטובה ביותר ל-VR נייד?
ב-VR נייד, אין בקרים, כך שהאינטראקציה מסתמכת על מבט. ניווט במבט הוא פשוט ואינטואיטיבי: המשתמש מסתכל על יעד, מחזיק מבט למשך 1–2 שניות, ומטלפורט. זה מבטל בחילות ודורש ללא אימון. חלופות כמו ג'ויסטיק או כפתורים על המסך מסיחות דעת ופחות ארגונומיות עבור 3DoF. ניווט במבט הוא הבחירה הטובה ביותר ל-VR נייד בשל הטבעיות שלו והפחתת בחילות פי 3.
להפעלת שהייה, אנו משתמשים בטיימר של 1.2–1.8 שניות עם אינדיקציה ויזואלית. כשמשתמשים בקולידר כדורי לאזור הטלפורטציה, חשוב להגדיר את הזווית הנכונה: 15° מכיוון המבט. זה מונע הפעלות מקריות.
איך להבטיח 60 FPS יציב במכשירי VR ניידים?
מכשירי יעד: iPhone 12 ו-Android עם Snapdragon 865. כלי פרופיילינג עיקריים: Unity Profiler, Xcode GPU Frame Capture, Android GPU Inspector. אופטימיזציות טיפוסיות:
- GPU Instancing לאלמנטים חוזרים (למשל, כיסאות באולם).
- Occlusion Culling — אובייקטים מאחורי קירות לא מעובדים.
- LOD עם שלוש רמות: low poly >20 מטר, בינוני >10 מטר, גבוה עד 5 מטר.
- הפחתת איכות צללים ל-512×512 או השבתה לאובייקטים רחוקים.
כתוצאה מכך אנו משיגים 60 FPS יציב גם באזורים עם 50+ מודלים. אם הביצועים יורדים ל-30 FPS במכשירים ישנים יותר, אנו מפחיתים אוטומטית את איכות הטקסטורה ל-1K ומשביתים צללים בזמן אמת.
תהליך עבודה ולוחות זמנים
- ביקורת קטלוג: מספר SKUs, פורמטי מודלי תלת-ממד, דרישות עדכון תוכן.
- עיצוב חלל: אזורים, ניווט, נקודות בדיקה.
- צינור אופטימיזציה של מודלי תלת-ממד וטקסטורות.
- פיתוח: סצנות, תאורה, אינטראקציה עם מוצרים, מצב Cardboard VR.
- אינטגרציה עם קטלוג ועגלת קניות.
- אופטימיזציית ביצועים, בדיקות במכשירי יעד.
מה כלול בעבודה
- תיעוד: זרימת משתמש, מפרט טכני, מדריך עדכון תוכן.
- גישה: מאגר קוד מקור, מפתחות Addressables CDN, חשבונות מפתחים (App Store / Google Play).
- הדרכה: הקלטת וידאו של עדכון קטלוג, בדיקות ותהליכי פריסה.
- תמיכה: אחריות לחודש, SLA 8/5 לבאגים קריטיים.
הערכות לוחות זמנים
אולם תצוגה עם אזור אחד ו-10–20 מוצרים: 3–5 שבועות. פלטפורמה רב-אזורית עם קטלוג דינמי ועגלת קניות: 2–4 חודשים. העלות מחושבת בנפרד לפי נפח תוכן ומורכבות אינטגרציה.
לצוות שלנו יש 5+ שנות ניסיון בפיתוח VR נייד והשלים 20+ פרויקטים בתעשיות שונות. קבלו ייעוץ לפרויקט שלכם או הזמינו פיתוח אולם תצוגה וירטואלי — נעזור לכם לבחור את הפתרון הטוב ביותר. צרו קשר כדי לדון בפרויקט שלכם.







