เมื่อทำงานกับโมเดล 3 มิติ Jetpack XR SDK จะรองรับมาตรฐานเปิด glTF
2.0 เมื่อ Android XR แสดงผลแอปที่สร้างด้วย Jetpack XR SDK โมเดล 3 มิติจะได้รับการแสดงผลด้วยเทคนิคการแสดงผลตามหลักการทางกายภาพ(PBR) ที่ระบุไว้ในมาตรฐาน glTF 2.0
(พร้อมกับส่วนขยายที่รองรับ) เครื่องมือสร้างเนื้อหาดิจิทัล (DCC) ส่วนใหญ่ เช่น Autodesk Maya, Maxon ZBrush, Blender และ Spline สามารถส่งออกโมเดล 3 มิติเป็นรูปแบบ glTF (ไฟล์ .gltf หรือ .glb) ได้
หากผู้ใช้หรือแอปของคุณระบุ SpatialEnvironment สกายบ็อกซ์ โมเดล 3 มิติจะสว่างขึ้นด้วยข้อมูลแสงที่สกายบ็อกซ์ของสภาพแวดล้อมระบุ วัสดุสะท้อนแสงและไฮไลต์แบบกระจกจะสะท้อน
Skybox ของสภาพแวดล้อมด้วย หากเปิดใช้การแสดงภาพแล้ว แสง เงา และไฮไลต์แบบกระจกจะอิงตามห้องที่สว่างซึ่งมี แสงส่องทิศทางเดียว
หากต้องการดูภาพรวมโดยย่อของวัสดุที่รองรับ โปรดดูคุณสมบัติ PBR ของ glTF ในเว็บไซต์ Khronos
แอปที่สร้างด้วย Jetpack XR SDK จะโหลดโมเดล 3 มิติได้ 2 วิธีหลักๆ ดังนี้
- โหลดลงใน
ActivitySpaceตามที่อธิบายไว้ในวางโมเดล 3 มิติลงในActivitySpace - ใช้ Scene Viewer ในตัวผ่าน Intent
วางโมเดล 3 มิติลงใน ActivitySpace
เมื่อมีไฟล์ glTF แล้ว ขั้นตอนถัดไปคือการเพิ่มไฟล์ลงในไดเรกทอรี Asset ใน Android Studio เราขอแนะนำให้สร้างไดเรกทอรี models เพื่อจัดระเบียบ
ประเภทเนื้อหาได้ดียิ่งขึ้น

หากต้องการโหลดโมเดล glTF ให้เรียกใช้ GltfModel.create()
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
ตอนนี้ระบบจะโหลดโมเดลลงในหน่วยความจำ แต่ยังไม่ได้แสดงผล หากคุณมีโมเดล 3 มิติจำนวนมากที่ต้องโหลดหรือโมเดลมีขนาดใหญ่ คุณควร โหลดโมเดลแบบไม่พร้อมกันล่วงหน้า วิธีนี้จะช่วยให้ผู้ใช้ไม่ต้องรอ โหลดโมเดลลงในหน่วยความจำ
เราต้องเพิ่ม glTF ลงใน ActivitySpace เรียกใช้
GltfModelEntity.create เพื่อสร้างเอนทิตีและวางไว้ใน
ActivitySpace แนวทางปฏิบัติแนะนำคือคุณควรตรวจสอบว่าแอปอยู่ในสถานะ
ที่อนุญาตให้ใช้ความสามารถเชิงพื้นที่
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
ตอนนี้คุณควรเห็นโมเดล 3 มิติที่โหลดแล้วเมื่อเรียกใช้แอป

เพิ่มออบเจ็กต์ 3 มิติโดยใช้ SpatialGltfModel
Android XR รองรับรูปแบบ glTF สำหรับโมเดล 3 มิติ ซึ่งโดยปกติจะบันทึกเป็นไฟล์
.glb หากต้องการเพิ่มออบเจ็กต์เหล่านี้ลงในเลย์เอาต์ ให้ใช้ Composable
SpatialGltfModel API นี้ช่วยลดความซับซ้อนของ
กระบวนการโหลดชิ้นงานและจัดการสถานะของชิ้นงาน
หากต้องการแสดงโมเดล ให้กำหนดแหล่งที่มาและสถานะของโมเดลก่อนโดยใช้
rememberSpatialGltfModelState คุณโหลดโมเดลได้จากโฟลเดอร์ assets ของแอป, URI หรือ raw data
val modelState = rememberSpatialGltfModelState( source = SpatialGltfModelSource.fromPath( Paths.get("models/model_name.glb") ) )
เมื่อกำหนดสถานะแล้ว ให้ใช้ Composable SpatialGltfModel เพื่อแสดงผลภายในพื้นที่ย่อย
SpatialGltfModel(state = modelState, modifier = SubspaceModifier)
วางโมเดล 3 มิติลงใน Compose SceneCoreEntity
หากต้องการวางโมเดล 3 มิติโดยใช้ SceneCoreEntity คุณต้องโหลด
glTF ลงในหน่วยความจำก่อนโดยใช้ GltfModel.create() จากนั้นคุณจะวางโมเดล 3 มิติลงใน SceneCoreEntity เพื่อเชื่อมคอมโพเนนต์ SceneCore กับเลย์เอาต์ Compose for XR ได้ ดูที่
ใช้ SceneCoreEntity เพื่อวางออบเจ็กต์ 3 มิติในเลย์เอาต์
โหลดโมเดล 3 มิติโดยใช้ Scene Viewer
หากกำลังมองหาวิธีที่ง่ายที่สุดในการโหลดโมเดล 3 มิติที่มีความสามารถในการโต้ตอบขั้นพื้นฐาน คุณอาจเลือกใช้ Scene Viewer เหมือนกับที่ใช้ใน อุปกรณ์เคลื่อนที่ ความแตกต่างที่สำคัญระหว่าง Scene Viewer ใน Android XR กับในอุปกรณ์เคลื่อนที่คือ Scene Viewer รองรับเฉพาะพารามิเตอร์ URI ของไฟล์ที่ชี้ ไปยังไฟล์ glTF และจะไม่สนใจพารามิเตอร์อื่นๆ ทั้งหมด
Scene Viewer เป็นแอปแยกต่างหากที่เรียกใช้โดยใช้ Intent และทำงานในโหมด Full Space ด้วยเหตุนี้ เมื่อคุณเรียกใช้แอป แอปของคุณจะไม่ปรากฏอีกต่อไป และ Scene Viewer จะได้รับโฟกัส สภาพแวดล้อมที่คุณอาจเปลี่ยนแปลง จะได้รับการรีเซ็ตเป็นการตั้งค่าระบบของผู้ใช้
ต่อไปนี้เป็นตัวอย่างการใช้ Intent เพื่อดูไฟล์ glTF ใน Scene Viewer
บน Android 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 ได้ในเอกสารประกอบการออกแบบโมเดล 3 มิติ
ส่วนขยาย glTF
Jetpack XR SDK รองรับส่วนขยาย gfTF หลายรายการที่ขยายความสามารถของโมเดล 3 มิติ ความสามารถเหล่านี้พร้อมให้บริการผ่านทั้ง
GltfModelEntity และ Scene Viewer
KHR_animation_pointerKHR_draco_mesh_compressionKHR_lights_punctualKHR_materials_clearcoatKHR_materials_sheenKHR_materials_unlitKHR_materials_variantsKHR_mesh_quantizationKHR_texture_basisuKHR_texture_transformEXT_texture_webp