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

أجهزة 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 الإلكتروني.

هناك طريقتان أساسيتان لتحميل التصاميم الثلاثية الأبعاد في التطبيقات التي تم إنشاؤها باستخدام Jetpack XR SDK.

وضع تصميم ثلاثي الأبعاد في ActivitySpace

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

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

لتحميل نموذج 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)
}

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

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

إضافة تصميم ثلاثي الأبعاد باستخدام 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)

وضع تصميم ثلاثي الأبعاد في Compose SceneCoreEntity

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

تحميل تصميم ثلاثي الأبعاد باستخدام 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.