Khi làm việc với 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 tạo bằng SDK Jetpack XR, 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 thực tế(PBR) được chỉ định trong tiêu chuẩn glTF 2.0 (cùng với extensions
đượ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 mô hình 3D sang định dạng glTF (tệp .gltf
hoặc .glb
).
Nếu người dùng hoặc ứng dụng của bạn đã chỉ định hộp ảo 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 ảo môi trường cung cấp. Vật liệu phản chiếu và điểm sáng phản chiếu cũng sẽ phản ánh hộp bầu trời môi trường. Nếu bạn đã bật tính năng truyền dẫn, thì ánh sáng, độ phản chiếu và điểm sáng phản chiếu sẽ dựa trên một căn phòng sáng, đơn giản với một nguồn sáng định hướng.
Để biết thông tin tổng quan nhanh về các chất liệu được hỗ trợ, hãy tham khảo Thuộc tính glTF PBR trên trang web Khronos.
Có hai cách chính để các ứng dụng được tạo bằng SDK Jetpack XR tải mô hình 3D.
- Tải mô hình này vào
ActivitySpace
như mô tả trong phần sau, Đặt mô hình 3D vào ActivitySpace - Sử dụng Trình xem cảnh tích hợp sẵn thông qua một ý định
Đặt mô hình 3D vào ActivitySpace
Sau khi bạn 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 một thư mục models
để sắp xếp các loại thành phần của mình hiệu quả hơn.
Để tải mô hình glTF, hãy gọi createGltfResourceAsync
.
// load the gltf file
val gltfModel = xrSession.createGltfResourceAsync("models/saturn_rings.glb").await()
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, 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 chờ tải mô hình vào bộ nhớ.
Chúng ta cần thêm glTF vào ActivitySpace
. Gọi createGltfEntity
để tạo một thực thể và đặt thực thể đó vào ActivitySpace
. Tốt nhất là bạn nên kiểm tra để đảm bảo ứng dụng đang ở trạng thái cho phép các tính năng không gian.
// 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)
}
Bây giờ, bạn sẽ thấy mô hình 3D đã tải khi chạy ứng dụng.
Đặt mô hình 3D vào một Compose Volume
Mặc dù vẫn cần tải glTF vào bộ nhớ bằng createGltfResourceAsync
, nhưng bạn có thể đặt các mô hình 3D vào Volume
nếu đang tạo giao diện người dùng bằng Jetpack Compose cho XR. Tham khảo bài viết Sử dụng Volume để đặt đối tượng 3D trong bố cục.
Tạo ảnh động cho mô hình 3D
Theo quy cách glTF, mô hình 3D có thể được nhúng ảnh động.
Tất cả ảnh động khung xương (rigged), cứng, mục tiêu biến đổi (hình dạng kết hợp) đều được hỗ trợ trong SDK Jetpack XR. Ảnh động Material được tạo bằng tiện ích glTF KHR_animation_pointer
cũng được hỗ trợ.
Để phát ảnh động, hãy gọi startAnimation
và chỉ định tên của ảnh động. Bạn có thể tuỳ ý chỉ định liệu ảnh động có lặp lại vô thời hạn hay không.
//start a looping walk animation for a model
gltfEntity.startAnimation(loop = true, animationName = "Walk")
Khi gọi startAnimation
lần thứ hai, ảnh động hiện tại sẽ dừng và ảnh động mới sẽ bắt đầu.
Bạn có thể truy vấn trạng thái hiện tại của ảnh động thông qua getAnimationState()
.
Nếu tên ảnh động được chỉ định khi gọi startAnimation()
không tồn tại, thì lệnh gọi sẽ không thành công, mọi ảnh động đang chạy sẽ dừng và getAnimationState()
sẽ trả về STOPPED
.
Tải mô hình 3D bằng Trình xem cảnh
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 Trình xem cảnh như trên thiết bị di động. Điểm khác biệt chính giữa Trình xem cảnh trên Android XR và trên thiết bị di động là Trình xem cảnh chỉ hỗ trợ tham số URI tệp trỏ đến tệp glTF và tất cả các tham số khác sẽ bị bỏ qua.
Trình xem cảnh là một ứng dụng riêng biệt được gọi thông qua một ý định và chạy ở Chế độ không gian đầy đủ. Do đó, khi bạn gọi ứng dụng này, ứng dụng của bạn sẽ không còn hiển thị và Trình xem cảnh sẽ có tiêu điểm. Mọi môi trường mà bạn có thể đã thay đổi sẽ được đặt lại về lựa chọn ưu tiên về hệ thống của người dùng.
Dưới đây là ví dụ về cách sử dụng Intent
để xem tệp glTF trong Trình xem cảnh trên 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)
Để biết thêm thông tin về các tuỳ chọn tương tác cho Trình xem cảnh, hãy tham khảo tài liệu 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 gfTF giúp mở rộng chức năng của mô hình 3D. Bạn có thể sử dụng các tính năng này thông qua cả GltfEntity
và Trình xem cảnh.
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