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

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

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

للحصول على نظرة عامة سريعة على المواد المتوافقة، يُرجى الرجوع إلى glTF PBR Properties على موقع Khronos الإلكتروني.

تتوفّر طريقتان أساسيتان للتطبيقات المُنشأة باستخدام حزمة تطوير البرامج (SDK) لـ Jetpack XR لتحميل نماذج 3D.

ضع تصميمًا ثلاثي الأبعاد في "مساحة النشاط".

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

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

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

val gltfModel = GltfModel.create(session, "models/saturn_rings.glb").await()

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

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

if (session.scene.spatialCapabilities
    .hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)
) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

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

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

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

على الرغم من أنّه سيظل عليك تحميل glTF إلى الذاكرة باستخدام GltfModel.create()، يمكنك وضع النماذج الثلاثية الأبعاد في Volume إذا كنت بصدد إنشاء واجهة المستخدم باستخدام Jetpack Compose لتجربة الواقع المعزّز. راجِع مقالة استخدام حجم لشدّد عنصر ثلاثي الأبعاد في التنسيق.

تحريك التصاميم الثلاثية الأبعاد

كجزء من مواصفات glTF، يمكن أن تتضمّن النماذج الثلاثية الأبعاد صورًا متحركة. إنّ الصور المتحركة للعظام (المُعدّة) والصور المتحركة الثابتة والصور المتحركة التي تستهدف تغيير الشكل (دمج الأشكال) كلها متوفرة في حزمة تطوير البرامج (SDK) لمنصة Jetpack XR. يمكن أيضًا استخدام الصور المتحركة للمواد التي تم إنشاؤها باستخدام إضافة glTF‏ KHR_animation_pointer.

لتشغيل صورة متحركة، استخدِم الرمز startAnimation() وحدِّد اسم الصورة المتحركة. يمكنك اختياريًا تحديد ما إذا كان يجب تكرار الصورة المتحركة إلى ما لا نهاية أم لا.

gltfEntity.startAnimation(loop = true, animationName = "Walk")

عند طلب الإجراء startAnimation مرة ثانية، سيتم إيقاف الصورة المتحرّكة الحالية وسيبدأ العرض المتحرّك الجديد.

يمكنك الاستعلام عن الحالة الحالية للحركة من خلال getAnimationState().

إذا لم يكن اسم الصورة المتحركة المحدّد عند استدعاء startAnimation() متوفّرًا، تنتهي المكالمة بصمت، ويتم إيقاف أي صور متحركة قيد التشغيل، ويعرض getAnimationState()STOPPED.

تحميل تصميم ثلاثي الأبعاد باستخدام "عارض المشهد"

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

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

في ما يلي مثال على استخدام Intent لعرض ملف glTF في "عارض المشاهد" على 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.
}

لمزيد من المعلومات عن خيارات التفاعل في "عارضة المشاهد"، يُرجى الرجوع إلى مستندات تصميم النماذج الثلاثية الأبعاد.

إضافات glTF

تتوافق حزمة تطوير البرامج Jetpack XR SDK مع العديد من إضافات gfTF التي تُوسّع إمكانات التصاميم الثلاثية الأبعاد. تتوفّر هذه الإمكانات من خلال GltfEntity و"عارض المَشاهد".