عند العمل مع النماذج الثلاثية الأبعاد، تتوافق حزمة تطوير البرامج (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 لتحميل نماذج ثلاثية الأبعاد.
- حمِّله في
ActivitySpace
كما هو موضَّح في القسم التالي: وضع نموذج ثلاثي الأبعاد في ActivitySpace - استخدام عارض المَشاهد المدمج من خلال نية
ضع تصميمًا ثلاثي الأبعاد في "مساحة النشاط".
بعد الحصول على ملف glTF، تكون الخطوة التالية هي إضافته إلى دليل مواد العرض
في "استوديو Android". ننصحك بإنشاء دليل 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
و"عارض المشهد".
KHR_animation_pointer
KHR_draco_mesh_compression
KHR_lights_punctual
KHR_materials_clearcoat
KHR_materials_sheen
KHR_materials_unlit
KHR_materials_variants
KHR_mesh_quantization
KHR_texture_basisu
KHR_texture_transform
EXT_texture_webp