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

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

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

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

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

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

بعد الحصول على ملف 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 لتطبيقات VR. راجِع مقالة استخدام وحدة تخزين لعرض عنصر ثلاثي الأبعاد في التنسيق.

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

كجزء من مواصفات 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 في Scene Viewer على Android XR:

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/FlightHelmet/glTF/FlightHelmet.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.setDataAndType(intentUri, "model/gltf-binary")
startActivity(sceneViewerIntent)

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

إضافات glTF

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