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

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

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

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

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

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

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

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

لتحميل نموذج glTF، استخدِم createGltfResourceAsync.

// load the gltf file
val gltfModel = xrSession.createGltfResourceAsync("models/saturn_rings.glb").await()

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

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

// check for spatial capabilities
if (xrSession.getSpatialCapabilities().hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)){
  // create the gltf entity using the gltf file from the previous snippet
   val gltfEntity = xrSession.createGltfEntity(gltfModel)
}

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

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

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

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

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

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

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

//start a looping walk animation for a model
gltfEntity.startAnimation(loop = true, animationName = "Walk")

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

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

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

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

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

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

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

val THREED_MODEL_URL = "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/FlightHelmet/glTF/FlightHelmet.gltf"
val MIME_TYPE = "model/gltf-binary"
val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
val intentUri =
  Uri.parse("https://arvr.google.com/scene-viewer/1.2")
     .buildUpon()
     .appendQueryParameter("file", THREED_MODEL_URL)
     .build()
sceneViewerIntent.setDataAndType(intentUri, MIME_TYPE)
startActivity(sceneViewerIntent)

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

إضافات glTF

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