Trong SDK Jetpack XR, môi trường không gian là môi trường xung quanh sống động mà bạn có thể thêm vào ứng dụng để tuỳ chỉnh nền của cảnh ảo. Môi trường không gian chỉ hiển thị khi ứng dụng ở chế độ Toàn bộ không gian.
Tổng quan về môi trường không gian
SpatialEnvironment quản lý các lựa chọn ưu tiên về môi trường không gian của ứng dụng. Đây là sự kết hợp giữa hình ảnh skybox độc lập và hình học được chỉ định bằng glTF. Mỗi lần, bạn chỉ có thể đặt một hình ảnh skybox và một tệp hình học glTF.
Skybox đại diện cho hình ảnh mà người dùng nhìn thấy xung quanh họ trong cảnh ảo, tạo ra ảo ảnh về một môi trường nền ở xa, chẳng hạn như bầu trời, núi hoặc cảnh quan thành phố. Người dùng không thể tương tác hoặc đến gần skybox. SDK Jetpack XR hỗ trợ hộp bầu trời hình cầu theo tiêu chuẩn OpenEXR. Ngoài việc cung cấp nền sống động cho ứng dụng, hộp bầu trời EXR còn cung cấp ánh sáng dựa trên hình ảnh (IBL) cho các mô hình 3D mà ứng dụng tải. Để biết thêm thông tin, hãy tham khảo hướng dẫn làm việc với mô hình 3D.
Môi trường không gian cũng có thể bao gồm nội dung hình học 3D theo tiêu chuẩn glTF. Hình học môi trường được tải theo cách này sẽ tự động căn chỉnh với sàn thực tế. Hình học môi trường là một cách tuyệt vời để tăng độ chân thực cho môi trường của bạn thông qua các yếu tố tiền cảnh và trung cảnh hoà vào hộp bầu trời bằng hiệu ứng thị sai.
Trong hướng dẫn thiết kế cho môi trường không gian, bạn có thể tìm hiểu về các loại thành phần khác nhau mà bạn có thể sử dụng để tạo môi trường không gian, cũng như cách tạo môi trường không gian an toàn và thú vị.
Bạn có thể đặt môi trường không gian của ứng dụng thành một trong ba cấu hình sau:
- Sự kết hợp giữa hình ảnh skybox và hình học glTF.
- Bề mặt truyền qua, trong đó môi trường được hiển thị là nguồn cấp dữ liệu trực tiếp từ camera hướng ra ngoài của thiết bị. Ở độ mờ tối đa, bề mặt truyền qua này sẽ che khuất hoàn toàn hộp bầu trời và hình học.
- Cấu hình kết hợp, trong đó bề mặt truyền qua không có độ mờ hoàn toàn, cũng không có độ mờ bằng 0. Trong trường hợp này, bề mặt truyền qua sẽ trở thành bán trong suốt và kết hợp alpha với hộp bầu trời và hình học phía sau.
Các chức năng không gian cho môi trường không gian
SpatialCapability: Biểu thị các chức năng không gian của phiên hiện tại. Một số chức năng không gian nhất định có liên quan đến môi trường không gian.SpatialCapability.PASSTHROUGH_CONTROL: Cho biết liệu hoạt động có thể bật hoặc tắt tính năng truyền qua tại thời điểm hiện tại hay không.SpatialCapability.APP_ENVIRONMENT: Cho biết liệu hoạt động có thể đặt môi trường không gian riêng tại thời điểm hiện tại hay không.
Nhập và tải tài nguyên môi trường không gian
Tài nguyên glTF và EXR cho môi trường không gian được tải không đồng bộ bằng cách sử dụng lớp Session.
Tạo tài nguyên glTF
Bạn có thể tạo tài nguyên glTF dưới dạng GltfModel, trong đó glTF được tải từ một tệp cục bộ. Bạn có thể dùng GltfModel làm một phần của môi trường ứng dụng không gian.
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
Tạo tài nguyên chiếu sáng dựa trên hình ảnh
Bạn có thể tạo tài nguyên chiếu sáng dựa trên hình ảnh dưới dạng ImageBasedLightingAsset, trong đó ánh sáng được tải từ một tệp cục bộ.
Bạn có thể dùng ImageBasedLightingAsset với cmgen để tạo tệp ZIP của IBL cho hộp bầu trời. Hãy xem hướng dẫn của chúng tôi về cách tối ưu hoá thành phần môi trường để biết thêm thông tin chi tiết.
val lightingForSkybox = ImageBasedLightingAsset.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
Đặt SpatialEnvironmentPreference cho ứng dụng
Thuộc tính preferredSpatialEnvironment kiểm soát môi trường không gian ưu tiên cho một ứng dụng. Khi thuộc tính này được dùng để đặt lựa chọn ưu tiên, thuộc tính này sẽ không gây ra thay đổi ngay lập tức trừ phi isPreferredSpatialEnvironmentActive đã là true. Khi thiết bị chuyển sang trạng thái có thể thay đổi nền XR và có chức năng SpatialCapability.APP_ENVIRONMENT, môi trường không gian ưu tiên cho ứng dụng sẽ tự động hiển thị.
Việc đặt lựa chọn ưu tiên thành null sẽ tắt môi trường không gian ưu tiên cho ứng dụng, tức là môi trường hệ thống mặc định sẽ được hiển thị.
Nếu SpatialEnvironmentPreference đã cho không rỗng nhưng tất cả thuộc tính của đối tượng này đều rỗng, thì môi trường không gian sẽ bao gồm một skybox màu đen và không có thành phần hình học.
Để nhận thông báo về các thay đổi đối với trạng thái SpatialEnvironment, hãy sử dụng addOnSpatialEnvironmentChangedListener.
Cách sử dụng cơ bản
Đoạn mã này tạo tài nguyên hình học môi trường và skybox, sau đó đặt lựa chọn ưu tiên về môi trường không gian. Lựa chọn ưu tiên này sẽ được ghi nhớ và sẽ được áp dụng khi ứng dụng có khả năng thiết lập môi trường riêng.
val spatialEnvironmentPreference = SpatialEnvironment.SpatialEnvironmentPreference(lightingForSkybox, environmentGeometry) session.scene.spatialEnvironment.preferredSpatialEnvironment = spatialEnvironmentPreference if (session.scene.spatialEnvironment.isPreferredSpatialEnvironmentActive) { // The environment was successfully updated and is now visible, and any listeners // specified using addOnSpatialEnvironmentChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the SPATIAL_CAPABILITY_APP_ENVIRONMENT capability. // Then, any listeners specified using addOnSpatialEnvironmentChangedListener // will be notified. }
Cách sử dụng nâng cao
Đối với các trường hợp sử dụng nâng cao hơn, khi cần kiểm soát môi trường chặt chẽ hơn, bạn có thể kết hợp các bước kiểm tra SpatialCapability và triển khai addOnSpatialEnvironmentChangedListener để xác định thời điểm bạn muốn đặt lựa chọn ưu tiên về môi trường không gian.
Đặt PassthroughOpacityPreference cho môi trường không gian của ứng dụng
Một trong những thành phần của nền ảo sống động trong ứng dụng là bề mặt truyền qua. Trong trường hợp này, nền hiển thị là nguồn cấp dữ liệu trực tiếp từ camera hướng ra ngoài của thiết bị.
setPassthroughOpacityPreference được dùng để đặt độ mờ ưu tiên cho chế độ truyền qua của một ứng dụng. Phương thức này chỉ đặt một lựa chọn ưu tiên và không gây ra thay đổi ngay lập tức, trừ phi có chức năng SpatialCapability.PASSTHROUGH_CONTROL. Khi thiết bị chuyển sang trạng thái có thể thay đổi độ mờ của chế độ truyền qua và có chức năng SpatialCapability.PASSTHROUGH_CONTROL, thì độ mờ ưu tiên của chế độ truyền qua cho ứng dụng sẽ tự động được áp dụng.
Giá trị cho lựa chọn ưu tiên về độ mờ của chế độ nhìn xuyên qua nằm trong khoảng từ 0.0f (độ mờ bằng 0, trong đó bề mặt nhìn xuyên qua không hiển thị) đến 1.0f (độ mờ hoàn toàn, trong đó bề mặt nhìn xuyên qua ẩn môi trường không gian). Tham số setPassthroughOpacityPreference là một số thực có thể rỗng. Việc đặt giá trị thành rỗng cho biết ứng dụng không có lựa chọn ưu tiên về độ mờ của chế độ truyền qua và sẽ trả lại quyền kiểm soát chế độ truyền qua cho hệ thống.
Cách sử dụng cơ bản
Đoạn mã này đặt lựa chọn ưu tiên về độ mờ của chế độ nhìn xuyên thấu. Lựa chọn ưu tiên này sẽ được ghi nhớ và áp dụng khi ứng dụng có khả năng đặt độ mờ cho chế độ nhìn xuyên thấu.
session.scene.spatialEnvironment.preferredPassthroughOpacity = 1.0f if (session.scene.spatialEnvironment.currentPassthroughOpacity == 1.0f) { // The passthrough opacity request succeeded and should be visible now, and any listeners // specified using addOnPassthroughOpacityChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the // SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL capability. // Then, any listeners specified using addOnPassthroughOpacityChangedListener // will be notified. }
Cách sử dụng nâng cao
Đối với các trường hợp sử dụng nâng cao hơn, khi bạn cần kiểm soát chặt chẽ hơn độ mờ của chế độ truyền qua, bạn có thể kết hợp các bước kiểm tra SpatialCapability và thêm trình nghe bằng addOnPassthroughOpacityChangedListener để xác định thời điểm bạn muốn đặt lựa chọn ưu tiên về độ mờ của chế độ truyền qua.
Tối ưu hoá thành phần
Khi tạo các thành phần để thiết lập SpatialEnvironment cho người dùng, hãy đảm bảo rằng các thành phần có độ phân giải chất lượng cao mà vẫn duy trì kích thước tệp hợp lý. Để tìm hiểu thêm, hãy xem hướng dẫn của chúng tôi về cách tối ưu hoá thành phần Môi trường.
Xác định độ mờ truyền qua hiện tại
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity