مدل های سه بعدی را به برنامه خود اضافه کنید

هنگام کار با مدل های سه بعدی، Jetpack XR SDK از استاندارد باز glTF 2.0 پشتیبانی می کند. وقتی Android XR برنامه‌های ساخته شده با Jetpack XR SDK را رندر می‌کند، مدل‌های سه‌بعدی با تکنیک‌های رندر مبتنی بر فیزیکی (PBR) مشخص‌شده در استاندارد glTF 2.0 (همراه با extensions پشتیبانی‌شده) ارائه می‌شوند. اکثر ابزارهای ایجاد محتوای دیجیتال (dcc)، مانند Autodesk Maya ، Maxon ZBrush ، Blender و Spline می‌توانند مدل‌های سه بعدی را به فرمت glTF (فایل‌های .gltf یا .glb ) صادر کنند.

اگر یک اسکای باکس SpatialEnvironment توسط کاربر یا برنامه شما مشخص شده باشد، مدل های سه بعدی با اطلاعات نور ارائه شده توسط اسکای باکس محیط روشن می شوند. مواد انعکاسی و برجستگی های خاص نیز اسکای باکس محیط را منعکس می کنند. اگر عبور فعال باشد، نورپردازی، انعکاس ها و برجستگی های دیدنی بر اساس یک اتاق ساده و روشن با یک نور جهت دار خواهد بود.

برای مرور سریع مواد پشتیبانی شده، به ویژگی های glTF PBR در سایت Khronos مراجعه کنید.

دو راه اصلی برای برنامه های ساخته شده با Jetpack XR SDK برای بارگذاری مدل های سه بعدی وجود دارد.

یک مدل سه بعدی را در ActivitySpace قرار دهید

هنگامی که فایل glTF خود را دارید، گام بعدی این است که آن را به فهرست دارایی ها در Android Studio اضافه کنید. برای سازماندهی بهتر انواع دارایی خود، توصیه می کنیم یک فهرست models ایجاد کنید.

نمونه ای از افزودن دارایی ها به پوشه /models

برای بارگیری مدل glTF، createGltfResourceAsync فراخوانی کنید.

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

در این مرحله، مدل در حافظه بارگذاری می شود، اما هنوز رندر نشده است. اگر مدل های سه بعدی زیادی برای بارگذاری دارید یا مدل شما بزرگ است، بهتر است آنها را زودتر از موعد به صورت ناهمزمان بارگذاری کنید. به این ترتیب، کاربران مجبور نیستند منتظر بارگذاری مدل های شما در حافظه باشند.

باید glTF را به ActivitySpace اضافه کنیم. برای ایجاد یک موجودیت و قرار دادن آن در ActivitySpace ، createGltfEntity فراخوانی کنید. به عنوان بهترین تمرین، باید بررسی کنید که برنامه در حالتی است که قابلیت های فضایی را امکان پذیر می کند .

// 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 Volume قرار دهید

در حالی که هنوز باید glTF را با استفاده از createGltfResourceAsync در حافظه بارگیری کنید، اگر در حال ایجاد رابط کاربری با Jetpack Compose برای XR هستید، می توانید مدل های سه بعدی را در یک Volume قرار دهید. برای قرار دادن یک شیء سه بعدی در طرح خود به استفاده از حجم صدا مراجعه کنید.

متحرک سازی مدل های سه بعدی

به عنوان بخشی از مشخصات glTF، مدل‌های سه بعدی می‌توانند انیمیشن‌های تعبیه‌شده داشته باشند. انیمیشن های اسکلتی (تقلب شده)، سفت و سخت، هدف مورف (ترکیب اشکال) همگی در Jetpack XR SDK پشتیبانی می شوند. انیمیشن های مواد ایجاد شده با پسوند KHR_animation_pointer glTF نیز پشتیبانی می شوند.

برای پخش یک انیمیشن، با startAnimation تماس بگیرید و نام انیمیشن را مشخص کنید. شما می توانید به صورت اختیاری مشخص کنید که انیمیشن باید به طور نامحدود حلقه بزند یا خیر.

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

با تماس دوم startAnimation ، انیمیشن فعلی متوقف می شود و انیمیشن جدید شروع می شود.

شما می توانید وضعیت فعلی انیمیشن را از طریق getAnimationState() پرس و جو کنید.

اگر نام انیمیشن مشخص شده هنگام فراخوانی startAnimation() وجود نداشته باشد، تماس بی‌صدا انجام نمی‌شود، هر انیمیشن در حال اجرا متوقف می‌شود و getAnimationState() STOPPED برمی‌گرداند.

یک مدل سه بعدی را با استفاده از Scene Viewer بارگیری کنید

اگر به دنبال ساده‌ترین راه برای بارگذاری یک مدل سه بعدی با قابلیت‌های تعامل اولیه هستید، می‌توانید از Scene Viewer همانطور که در تلفن همراه استفاده می‌کنید استفاده کنید. یک تفاوت کلیدی بین Scene Viewer در Android XR و در تلفن همراه، این است که Scene Viewer فقط از پارامتر URI فایل که به فایل glTF اشاره می کند پشتیبانی می کند و همه پارامترهای دیگر نادیده گرفته می شوند.

Scene Viewer یک برنامه جداگانه است که از طریق یک intent فراخوانی می شود و در حالت Full Space اجرا می شود. در نتیجه، هنگامی که آن را فراخوانی می کنید، برنامه شما دیگر قابل مشاهده نخواهد بود و Scene Viewer فوکوس خواهد داشت. هر محیطی که ممکن است تغییر داده باشید به تنظیمات برگزیده سیستم کاربر بازنشانی می شود.

در اینجا مثالی از استفاده از 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)

برای اطلاعات بیشتر در مورد گزینه های تعاملی برای Scene Viewer، به مستندات طراحی مدل سه بعدی ما مراجعه کنید.

پسوندهای glTF

Jetpack XR SDK از چندین افزونه gfTF پشتیبانی می کند که قابلیت های مدل های سه بعدی را افزایش می دهد. این قابلیت ها از طریق GltfEntity و Scene Viewer در دسترس هستند.