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