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

دستگاه‌های XR قابل اجرا
این راهنما به شما کمک می‌کند تا برای این نوع دستگاه‌های XR تجربه ایجاد کنید.
هدست‌های XR
عینک‌های XR سیمی

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

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

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

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

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

وقتی فایل glTF خود را ایجاد کردید، مرحله بعدی اضافه کردن آن به دایرکتوری assets در اندروید استودیو است. توصیه می‌کنیم برای سازماندهی بهتر انواع asset، یک دایرکتوری models ایجاد کنید.

مثالی از افزودن دارایی‌ها به دایرکتوری /models

برای بارگذاری مدل glTF، تابع GltfModel.create() را فراخوانی کنید.

val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))

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

ما باید glTF را به ActivitySpace اضافه کنیم. برای ایجاد یک موجودیت و قرار دادن آن در ActivitySpace ، GltfModelEntity.create را فراخوانی کنید. به عنوان بهترین روش، باید بررسی کنید که برنامه در وضعیتی باشد که امکان استفاده از قابلیت‌های مکانی را فراهم کند .

if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

اکنون باید هنگام اجرای برنامه، مدل سه‌بعدی بارگذاری‌شده را ببینید.

نمونه‌ای از مدل سه‌بعدی بارگذاری‌شده

اضافه کردن یک شیء سه‌بعدی با استفاده از SpatialGltfModel

اندروید XR از فرمت glTF برای مدل‌های سه‌بعدی پشتیبانی می‌کند که معمولاً به صورت فایل‌های .glb ذخیره می‌شوند. برای افزودن این اشیاء به طرح‌بندی خود، از SpatialGltfModel composable استفاده کنید. این API فرآیند بارگذاری دارایی‌ها و مدیریت وضعیت آنها را ساده می‌کند.

برای نمایش یک مدل، ابتدا منبع و وضعیت آن را با استفاده از rememberSpatialGltfModelState تعریف کنید. می‌توانید مدل‌ها را از پوشه assets برنامه، یک URI یا raw data بارگذاری کنید.

val modelState = rememberSpatialGltfModelState(
    source = SpatialGltfModelSource.fromPath(
        Paths.get("models/model_name.glb")
    )
)

پس از تعریف حالت، از SpatialGltfModel composable برای رندر کردن آن در یک زیرفضا استفاده کنید.

SpatialGltfModel(state = modelState, modifier = SubspaceModifier)

یک مدل سه‌بعدی را در یک Compose SceneCoreEntity قرار دهید

برای قرار دادن یک مدل سه‌بعدی با استفاده از SceneCoreEntity ، ابتدا باید glTF را با استفاده از GltfModel.create() در حافظه بارگذاری کنید. سپس می‌توانید یک مدل سه‌بعدی را در SceneCoreEntity قرار دهید تا اجزای SceneCore را با Compose برای طرح‌بندی‌های XR متصل کنید. برای قرار دادن یک شیء سه‌بعدی در طرح‌بندی خود، به بخش «استفاده از SceneCoreEntity» مراجعه کنید.

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

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

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

در اینجا مثالی از استفاده از Intent برای مشاهده فایل glTF در Scene Viewer در اندروید XR آورده شده است:

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/Avocado/glTF/Avocado.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.setData(intentUri)
try {
    startActivity(sceneViewerIntent)
} catch (e: ActivityNotFoundException) {
    // There is no activity that could handle the intent.
}

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

افزونه‌های glTF

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