קטלוג מוצרי AR: מדריך יישום טכני
בפיתוח קטלוג AR, האתגר המרכזי הוא טעינה והצגה של מודלים תלת־ממדיים במכשירים ניידים ללא עיכובים. המשתמש פותח כרטיס מוצר ומצפה שהמודל יופיע תוך 2–3 שניות. כל עיכוב נוסף — ההמרה יורדת ב־20%. הגישה הסטנדרטית של איגוד כל המודלים באפליקציה אינה ניתנת להרחבה: קטלוג של 1000 פריטים שוקל מעל 10 ג״ב. הפתרון הוא טעינה לפי דרישה מ־CDN עם שמירה במטמון מקומי. במאמר זה, אנו מפרקים את הארכיטקטורה, בעיות אופייניות, והניסיון שלנו באוטומציה. אנו בונים קטלוגי AR לאפליקציות מובייל עם אינטגרציית CMS ותמיכה בפורמטים USDZ ו־GLB. חיסכון בזמן הטעינה מגיע ל־40% בהשוואה לפתרונות ללא שמירה במטמון.
בעיות שאנו פותרים
טעינה ושמירה במטמון של מודלים תלת־ממדיים
קטלוג AR עם מאות פריטים אינו יכול לאחסן את כל המודלים בחבילת האפליקציה. נדרשת הורדה לפי דרישה מ־CDN. הגישה הסטנדרטית:
- קטלוג המוצרים מ־CMS מכיל
model_url— כתובת URL ל־USDZ (iOS) או GLB (Android). - כאשר כרטיס מוצר נפתח — בדוק את המטמון המקומי (
FileManager). - אם אינו קיים — הורד ברקע באמצעות
URLSession.downloadTask, הצג פס התקדמות. - לאחר ההורדה — אתחל סצנת AR.
func loadModel(url: URL, completion: @escaping (ModelEntity?) -> Void) {
let cacheURL = cacheDirectory.appendingPathComponent(url.lastPathComponent)
if FileManager.default.fileExists(atPath: cacheURL.path) {
completion(try? ModelEntity.loadModel(contentsOf: cacheURL))
return
}
URLSession.shared.downloadTask(with: url) { tempURL, _, _ in
guard let tempURL else { completion(nil); return }
try? FileManager.default.moveItem(at: tempURL, to: cacheURL)
DispatchQueue.main.async {
completion(try? ModelEntity.loadModel(contentsOf: cacheURL))
}
}.resume()
}גודל המודל חשוב. רהיטים: 5–15 מ״ב USDZ הוא נורמלי. 50+ מ״ב — המשתמש ממתין ועוזב. אופטימיזציה: func loadModel(url: URL, completion: @escaping (ModelEntity?) -> Void) { let cacheURL = cacheDirectory.appendingPathComponent(url.lastPathComponent) if FileManager.default.fileExists(atPath: cacheURL.path) { completion(try? ModelEntity.loadModel(contentsOf: cacheURL)) return } URLSession.shared.downloadTask(with: url) { tempURL, _, _ in guard let tempURL else { completion(nil); return } try? FileManager.default.moveItem(at: tempURL, to: cacheURL) DispatchQueue.main.async { completion(try? ModelEntity.loadModel(contentsOf: cacheURL)) } }.resume() } לדחיסת טקסטורות ל־ASTC, דחיסת גיאומטריה של Draco (באמצעות TextureConverter או צינור עבודה של Blender).
קנה מידה ומיקום מדויק
זיהוי מישור בסיסי → raycast → מיקום מתואר היטב בתיעוד ARKit. בקטלוג AR, אנו מוסיפים:
קנה מידה עם שמירה על גודל אמיתי. מודלי USDZ חייבים להיות בקנה מידה נכון: ספה של 2 מטר צריכה להיות 2 מטר ב־AR. אם הגודל נמצא במטא־דאטה של CMS — החל באמצעות usdz_converter. אם לא — הגדר דרך תצורת המודל. המשתמש לא צריך לשנות קנה מידה ידנית — זה פוגע בתפיסת הגודל האמיתי.
סיבוב באצבע אחת. ModelEntity.scale בRealityKit הוא הנתיב הפשוט ביותר. אבל סיבוב רק סביב ציר Y (אנכי): רהיטים אינם נוטים, הם מסתובבים סביב עצמם. קבע את הציר באמצעות אילוצים:
entity.components[PhysicsMotionComponent.self] = PhysicsMotionComponent() // Rotation constraint — только Y מעבר בין וריאנטים/צבעים ללא טעינה מחדש של המודל. ספה זמינה ב־5 צבעים. טעינת 5 מודלים היא יקרה. נכון: גיאומטריה אחת, חומרים שונים. ב־USDZ, ניתן לשנות חומרים באמצעות EntityRotationGestureRecognizer:
var materials = entity.model?.materials ?? []
materials[0] = SimpleMaterial(color: .init(selectedColor), isMetallic: false)
entity.model?.materials = materialsעבור חומרי PBR עם טקסטורות — entity.components[PhysicsMotionComponent.self] = PhysicsMotionComponent() // Rotation constraint — только Y עם טקסטורות שנטענו.
איך להאיץ טעינת מודלים?
טעינה דרך CDN היא בממוצע פי 3 מהירה יותר מאשר מהחבילה כאשר המודל גדול מ־10 מ״ב. אנו משתמשים ב־ModelComponent.materials עם מחוון התקדמות ושמירה במטמון ב־var materials = entity.model?.materials ?? [] materials[0] = SimpleMaterial(color: .init(selectedColor), isMetallic: false) entity.model?.materials = materials . למהירות גדולה עוד יותר, אנו מיישמים הורדות מקבילות — עד 3 מודלים בו־זמנית. אנו גם מיישמים טעינה מוקדמת: טעינת המודל בעת לחיצה על כרטיס מוצר לפני שהמשתמש לוחץ על ׳הצג ב־AR׳. גישה זו מפחיתה את זמן ההמתנה ב־50%.
למה קנה מידה אמיתי חשוב?
הצגת גודל מדויק היא גורם האמון המרכזי. אם ספה ב־AR קטנה או גדולה יותר מהאמיתית, המשתמש יתאכזב. אנו מבטיחים קנה מידה נכון הודות לסקריפטים של נורמליזציה במהלך ההמרה מפורמטי מקור. בניסיוננו, נתקלנו במודלים תלת־ממדיים מספקים ביחידות שרירותיות (יחידה אחת = אינץ׳ אחד עבור אחד, סנטימטר אחד עבור אחר). כתבנו סקריפט שקורא אוטומטית ממדים אמיתיים ממפרט המוצר ומתאים את קנה המידה. זה הפחית את זמן האימות הידני של מודלים ב־80%.
איך לשלב קטלוג AR עם CMS קיים?
תרחיש אופייני: Shopify, WooCommerce, או CMS מותאם אישית בקצה האחורי. אנו מוסיפים שדה מותאם אישית PhysicallyBasedMaterial למוצר. בלקוח הנייד — כפתור ׳הצג ב־AR׳ מופיע רק אם השדה מלא.
לניהול תוכן תלת־ממדי ללא מתכנתים — CMS פשוט או פאנל ניהול עם העלאת קבצי USDZ/GLB ואופטימיזציה אוטומטית בצד השרת (המרה, דחיסה, העלאה ל־CDN). זה מסיר תלות במפתחים בעת הוספת מוצרים חדשים.
מקרה מבחן: אוטומציית המרה ל־2000 פריטים
הלקוח שלנו — חנות רהיטים למסחר אלקטרוני עם 2000+ פריטים. עדיפות: לכסות את 100 ה־SKU המובילים במודלי AR. בשלבים: תחילה iOS (ARKit + USDZ), לאחר חודשיים Android (SceneViewer + GLB). המרה ממודלי FBX של הספק ל־USDZ/GLB — צינור עבודה אוטומטי באמצעות סקריפטים של Blender Python + URLSession CLI. זמן למודל: 3–7 דקות. הבעיה העיקרית הלא־טכנית — יחידות שונות במודלי מקור. נפתרה עם סקריפט נורמליזציית קנה מידה שמאמת ממדים אמיתיים ממפרט המוצר. לאחר ההשקה, ההמרה במדור AR עלתה ב־25%.
מה כלול בעבודה
- מודול AR ל־iOS ו/או Android באמצעות ARKit/RealityKit או SceneViewer.
- מערכת שמירה במטמון של מודלים עם חיווי התקדמות הורדה.
- אינטגרציית CMS — הוספת שדה מודל AR, API לאחזור נתונים.
- פאנל ניהול להעלאה וניהול של מודלים תלת־ממדיים (אופציונלי).
- צינור המרת מודלים מפורמטי מקור ל־USDZ/GLB עם נורמליזציית קנה מידה.
- אנליטיקה — מעקב אחר צפיות ואינטראקציות.
- תיעוד והדרכה של צוות הלקוח.
- תמיכה עם אחריות ל־3 חודשים לאחר ההשקה.
השוואה: iOS לעומת Android
| קריטריון | iOS (ARKit + RealityKit) | Android (SceneViewer + ARCore) |
|---|---|---|
| פורמט מודל | USDZ | GLB |
| מורכבות יישום | גבוהה (SDKs מקוריים) | בינונית (תלוי בגרסת Google Play Services for AR) |
| מחוות זמינות | מזהים מובנים | באמצעות Sceneform / SceneView |
| ביצועים | מצוינים במכשירים עם A12+ | טובים במכשירים מוסמכי ARCore |
לוח זמנים והשקעה
| תכונה | לוח זמנים |
|---|---|
| מציג AR בסיסי לפריט אחד | 1–2 שבועות |
| קטלוג AR עם שמירה במטמון ווריאנטים של צבע | 4–6 שבועות |
| מערכת מלאה עם CMS, אנליטיקה, iOS+Android | 3–5 חודשים |
העלות מחושבת באופן אישי בהתאם לגודל הקטלוג ולצורך בהמרת מודלים. השקעה בקטלוג AR מחזירה את עצמה באמצעות המרה מוגברת וחוויית משתמש משופרת. צרו קשר לייעוץ והערכה מקדימה. הזמינו פיתוח קטלוג AR — קבלו פתרון שמגביר המרה.
טיפים להכנת מודלים תלת־ממדיים
- השתמשו במטרים כיחידות.
- ודאו כיוון נכון (ציר Y למעלה).
- בצעו אופטימיזציה למספר פוליגונים: לרהיטים ~50 אלף משולשים.
- דחסו טקסטורות ל־2K.
- בדקו מודלים במכשירים אמיתיים.







