إضافة نماذج ثلاثية الأبعاد إلى تطبيقك

أجهزة XR المشمولة
تساعدك هذه الإرشادات في إنشاء تجارب لهذه الأنواع من أجهزة XR.
سماعات الرأس بنظام الواقع الممتد
نظارات سلكية بنظام الواقع الممتد

عند العمل مع النماذج الثلاثية الأبعاد، يتيح Jetpack XR SDK استخدام معيار glTF 2.0 المفتوح. عندما يعرض Android XR التطبيقات التي تم إنشاؤها باستخدام الـ Jetpack XR SDK، سيتم عرض النماذج الثلاثية الأبعاد باستخدام تقنيات العرض المستند إلى الخصائص الفيزيائية(PBR) المحدّدة في معيار glTF 2.0 (بالإضافة إلى الإضافات المتوافقة). يمكن لمعظم أدوات إنشاء المحتوى الرقمي (dcc) ، مثل Autodesk Maya وMaxon ZBrush و Blender وSpline، تصدير النماذج الثلاثية الأبعاد إلى تنسيق glTF (.gltf أو .glb ملفات).

إذا حدّد المستخدم أو تطبيقك خلفية SpatialEnvironment، سيتم إضاءة النماذج الثلاثية الأبعاد باستخدام معلومات الإضاءة التي توفّرها خلفية البيئة. ستعكس المواد العاكسة والإضاءات البارزة أيضًا خلفية البيئة. إذا تم تفعيل ميزة "الرؤية من خلال الكاميرا"، ستستند الإضاءة والانعكاسات والإضاءات البارزة إلى غرفة ساطعة ذات ضوء اتجاهي واحد.

للحصول على نظرة عامة سريعة على المواد المتوافقة، يُرجى الرجوع إلى خصائص glTF PBR على موقع Khronos الإلكتروني. للتعرّف على كيفية تخصيص النماذج الثلاثية الأبعاد باستخدام هذه الخصائص وغيرها، يُرجى الاطّلاع على مقالة تخصيص النماذج الثلاثية الأبعاد في تطبيقك

إضافة ملف glTF إلى مجلد مواد العرض

بعد الحصول على ملف glTF، تكون الخطوة التالية هي إضافته إلى مجلّد الموارد في استوديو Android. ننصحك بإنشاء دليل models لتنظيم أنواع مواد العرض بشكل أفضل.

مثال على إضافة مواد عرض إلى الدليل /models

إضافة كائن ثلاثي الأبعاد باستخدام SpatialGltfModel

يتوافق Android XR مع تنسيق glTF للنماذج الثلاثية الأبعاد، التي يتم حفظها عادةً كملفات .glb. لإضافة هذه العناصر إلى تصميمك، استخدِم الدالة المركّبة SpatialGltfModel. تسهّل واجهة برمجة التطبيقات هذه عملية تحميل مواد العرض وإدارة حالتها.

لعرض نموذج، حدِّد أولاً مصدره وحالته باستخدام rememberSpatialGltfModelState. يمكنك تحميل النماذج من مجلد assets في تطبيقك أو من URI أو raw data.

val modelState = rememberSpatialGltfModelState(
    source = SpatialGltfModelSource.fromPath(
        Paths.get("models/model_name.glb")
    )
)

بعد تحديد الحالة، استخدِم الدالة المركّبة SpatialGltfModel لعرضها ضمن مساحة فرعية.

SpatialGltfModel(state = modelState, modifier = SubspaceModifier)

وضع نموذج ثلاثي الأبعاد باستخدام عنصر SceneCoreEntity في Compose

لوضع نموذج ثلاثي الأبعاد باستخدام SceneCoreEntity، عليك أولاً تحميل ملف glTF في الذاكرة باستخدام GltfModel.create(). يمكنك بعد ذلك وضع نموذج ثلاثي الأبعاد في SceneCoreEntity لربط مكوّنات SceneCore بتصاميم Compose لتطبيقات XR. يُرجى الرجوع إلى مقالة استخدام SceneCoreEntity لوضع كائن ثلاثي الأبعاد في تصميمك.

وضع نموذج ثلاثي الأبعاد باستخدام Jetpack Scenecore

لتحميل نموذج glTF، استخدِم GltfModel.create().

val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))

في هذه المرحلة، يتم تحميل النموذج في الذاكرة، ولكن لم يتم عرضه بعد. إذا كان لديك العديد من النماذج الثلاثية الأبعاد لتحميلها أو كان حجم النموذج كبيرًا، ننصحك بتحميلها بشكل غير متزامن مسبقًا. بهذه الطريقة، لن يضطر المستخدمون إلى الانتظار حتى يتم تحميل نماذجك في الذاكرة.

أضِف ملف glTF إلى ActivitySpace. استخدِم GltfModelEntity.create لإنشاء كيان ووضعه في الـ ActivitySpace. من أفضل الممارسات التحقّق من أنّ التطبيق في حالة تسمح باستخدام الإمكانات المكانية.

if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

يجب أن يظهر لك الآن النموذج الثلاثي الأبعاد الذي تم تحميله عند تشغيل تطبيقك.

مثال على التصميم الثلاثي الأبعاد الذي تم تحميله

تحميل نموذج ثلاثي الأبعاد باستخدام Scene Viewer

إذا كنت تبحث عن أبسط طريقة لتحميل نموذج ثلاثي الأبعاد بإمكانات تفاعل أساسية، يمكنك اختيار استخدام Scene Viewer كما تفعل على الأجهزة الجوّالة. يتمثل الاختلاف الرئيسي بين Scene Viewer على Android XR وعلى الأجهزة الجوّالة في أنّ Scene Viewer لا يتيح سوى استخدام مَعلمة URI للملف التي تشير إلى ملف glTF، ويتم تجاهل جميع المَعلمات الأخرى.

‫Scene Viewer هو تطبيق منفصل يتم استدعاؤه باستخدام هدف ويتم تشغيله في وضع "المساحة الكاملة". نتيجةً لذلك، لن يظهر تطبيقك عندما تستدعيه، وسيركّز Scene Viewer على العرض. ستتم إعادة ضبط أي بيئات ربما غيّرتها إلى الإعدادات المفضّلة للنظام لدى المستخدم.

في ما يلي مثال على استخدام Intent لعرض ملف glTF في Scene Viewer على Android XR:

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/Avocado/glTF/Avocado.gltf"
val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
val intentUri =
    Uri.parse("https://arvr.google.com/scene-viewer/1.2")
        .buildUpon()
        .appendQueryParameter("file", url)
        .build()
sceneViewerIntent.setData(intentUri)
try {
    startActivity(sceneViewerIntent)
} catch (e: ActivityNotFoundException) {
    // There is no activity that could handle the intent.
}

لمزيد من المعلومات حول خيارات التفاعل في Scene Viewer، يُرجى الرجوع إلى مستندات تصميم النماذج الثلاثية الأبعاد .

إضافات glTF

يتوافق Jetpack XR SDK مع عدة إضافات gfTF توسّع إمكانات النماذج الثلاثية الأبعاد. تتوفّر هذه الإمكانات من خلال كل من الـ GltfModelEntity وScene Viewer.