Khi làm việc với các mô hình 3D, SDK Jetpack XR hỗ trợ tiêu chuẩn mở glTF
2.0. Khi Android XR kết xuất các ứng dụng được xây dựng bằng
SDK Jetpack XR, các mô hình 3D sẽ được kết xuất bằng các kỹ thuật kết xuất dựa trên vật lý(PBR) được chỉ định trong tiêu chuẩn glTF 2.0
(cùng với các tiện ích được hỗ trợ). Hầu hết các công cụ tạo nội dung kỹ thuật số (dcc)
, chẳng hạn như Autodesk Maya, Maxon ZBrush,
Blender và Spline đều có thể xuất các mô hình 3D sang
định dạng glTF (.gltf hoặc .glb tệp).
Nếu người dùng hoặc ứng dụng của bạn đã chỉ định một hộp bầu trời SpatialEnvironment, thì các mô hình 3D sẽ được chiếu sáng bằng thông tin chiếu sáng do hộp bầu trời môi trường
cung cấp. Các vật liệu phản chiếu và điểm nổi bật phản chiếu cũng sẽ phản ánh hộp bầu trời môi trường. Nếu tính năng truyền qua đã được bật, thì ánh sáng, phản xạ và điểm nổi bật phản chiếu sẽ dựa trên một căn phòng sáng với một nguồn sáng định hướng.
Để biết thông tin tổng quan nhanh về các vật liệu được hỗ trợ, hãy tham khảo bài viết Thuộc tính PBR glTF trên trang web Khronos. Để tìm hiểu cách tuỳ chỉnh các mô hình 3D bằng các thuộc tính này và các thuộc tính khác, hãy xem bài viết Tuỳ chỉnh mô hình 3D trong ứng dụng
Thêm tệp glTF vào thư mục tài sản
Sau khi có tệp glTF, bước tiếp theo là thêm tệp đó vào thư mục tài sản trong Android Studio. Bạn nên tạo thư mục models để sắp xếp các loại tài sản của mình một cách hiệu quả hơn.

Thêm đối tượng 3D bằng SpatialGltfModel
Android XR hỗ trợ định dạng glTF cho các mô hình 3D, thường được lưu dưới dạng
.glb tệp. Để thêm các đối tượng này vào bố cục, hãy sử dụng thành phần kết hợp
SpatialGltfModel. API này giúp đơn giản hoá quá trình tải tài sản và quản lý trạng thái của chúng.
Để hiển thị một mô hình, trước tiên hãy xác định nguồn và trạng thái của mô hình đó bằng cách sử dụng
rememberSpatialGltfModelState. Bạn có thể tải
các mô hình từ thư mục assets của ứng dụng, URI hoặc
raw data.
val modelState = rememberSpatialGltfModelState( source = SpatialGltfModelSource.fromPath( Paths.get("models/model_name.glb") ) )
Sau khi xác định trạng thái, hãy sử dụng thành phần kết hợp SpatialGltfModel để kết xuất thành phần đó trong một không gian con.
SpatialGltfModel(state = modelState, modifier = SubspaceModifier)
Đặt mô hình 3D bằng SceneCoreEntity của Compose
Để đặt mô hình 3D bằng SceneCoreEntity, trước tiên, bạn cần tải
glTF vào bộ nhớ bằng cách sử dụng GltfModel.create(). Sau đó, bạn có thể đặt mô hình 3D
vào SceneCoreEntity để kết nối các thành phần SceneCore với
Compose cho bố cục XR. Tham khảo bài viết
Sử dụng SceneCoreEntity để đặt đối tượng 3D trong bố cục.
Đặt mô hình 3D bằng Jetpack Scenecore
Để tải mô hình glTF, hãy gọi GltfModel.create().
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
Tại thời điểm này, mô hình được tải vào bộ nhớ nhưng chưa được kết xuất. Nếu bạn có nhiều mô hình 3D cần tải hoặc mô hình của bạn có kích thước lớn, thì bạn nên tải các mô hình đó không đồng bộ trước. Bằng cách này, người dùng không phải đợi các mô hình của bạn được tải vào bộ nhớ.
Thêm glTF vào ActivitySpace. Gọi
GltfModelEntity.create để tạo một thực thể và đặt thực thể đó vào
ActivitySpace. Theo các phương pháp hay nhất, bạn nên kiểm tra để đảm bảo rằng ứng dụng đang ở trạng thái
cho phép các tính năng không gian.
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
Bây giờ, bạn sẽ thấy mô hình 3D đã tải khi chạy ứng dụng.

Tải mô hình 3D bằng Scene Viewer
Nếu đang tìm cách đơn giản nhất để tải mô hình 3D có các tính năng tương tác cơ bản, bạn có thể chọn sử dụng Scene Viewer như trên thiết bị di động. Điểm khác biệt chính giữa Scene Viewer trên Android XR và trên thiết bị di động là Scene Viewer chỉ hỗ trợ tham số URI tệp trỏ đến tệp glTF và tất cả các tham số khác đều bị bỏ qua.
Scene Viewer là một ứng dụng riêng biệt được gọi bằng ý định và chạy ở Chế độ toàn bộ không gian. Do đó, khi bạn gọi ứng dụng này, ứng dụng của bạn sẽ không còn xuất hiện và Scene Viewer sẽ ở trong tâm điểm. Mọi môi trường mà bạn có thể đã thay đổi sẽ được đặt lại thành lựa chọn ưu tiên của hệ thống người dùng.
Dưới đây là ví dụ về cách sử dụng Intent để xem tệp glTF trong Scene Viewer
trên 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. }
Để biết thêm thông tin về các lựa chọn tương tác cho Scene Viewer, hãy tham khảo tài liệu về thiết kế mô hình 3D của chúng tôi .
Tiện ích glTF
SDK Jetpack XR hỗ trợ một số tiện ích glTF giúp mở rộng các tính năng của mô hình 3D. Các tính năng này có sẵn thông qua cả the
GltfModelEntity và 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