Tuỳ chỉnh mô hình 3D trong ứng dụng

Các thiết bị XR áp dụng
Hướng dẫn này giúp bạn tạo trải nghiệm cho các loại thiết bị XR này.
Kính XR
Kính XR có dây

Sau khi thêm một mô hình 3D vào ứng dụng, bạn có thể cải thiện trải nghiệm hình ảnh bằng cách xác định các thuộc tính vật liệu tuỳ chỉnh và áp dụng hoạ tiết cho đối tượng. Hệ thống vật liệu của Jetpack XR dựa trên quy cách glTF™ 2.0 và các mô hình 3D được kết xuất bằng phương pháp kết xuất đồ hoạ dựa trên vật lý (PBR). Đây là các tiêu chuẩn mở do Khronos Group duy trì.

Bạn có thể điều chỉnh các thuộc tính của vật liệu trong thời gian chạy để thay đổi giao diện của một đối tượng một cách linh động dựa trên thông tin đầu vào của người dùng hoặc trạng thái hiện tại của ứng dụng.

Để biết thông tin chi tiết về từng thuộc tính được hỗ trợ và các tham số có thể tuỳ chỉnh trong Android XR, hãy xem tài liệu tham khảo của chúng tôi. Để hiểu rõ hơn về các thuộc tính này, hãy xem bảng chú giải thuật ngữ của Khronos.

Tuỳ chỉnh các thuộc tính vật liệu của mô hình 3D

Material xác định một tập hợp các thuộc tính trực quan cho bề mặt của một đối tượng và xác định cách bề mặt đó tương tác với ánh sáng trong cảnh.

Trong Jetpack XR, các lớp KhronosPbrMaterialKhronosUnlitMaterial được dùng để tạo và thao tác với các thành phần này. Như tên gọi của nó, KhronosUnlitMaterials không được chiếu sáng và không chịu ảnh hưởng của ánh sáng trong cảnh. KhronosPbrMaterial cho phép bạn tuỳ chỉnh nhiều thuộc tính hơn, chẳng hạn như màu sắc bóng, độ bóng hoặc độ thô của một đối tượng và liệu đối tượng đó có phát ra ánh sáng hay không.

Ví dụ về cách thay đổi màu cơ bản trên mô hình 3D

Để tuỳ chỉnh các thuộc tính vật liệu của mô hình 3D, trước tiên, bạn sẽ tạo vật liệu mới bằng cách sử dụng KhronosPbrMaterial. Bạn cần đặt AlphaMode thích hợp cho giao diện mà bạn đang cố gắng đạt được:

val pbrMaterial = KhronosPbrMaterial.create(
    session = xrSession,
    alphaMode = AlphaMode.OPAQUE
)

Tiếp theo, hãy xác định những thuộc tính mà bạn muốn sửa đổi. Trong ví dụ này, chúng ta sẽ dùng setBaseColorFactor để thay đổi màu cơ bản. Phương thức này yêu cầu Vector4, trong đó các thành phần x, y, zw tương ứng với các giá trị RGBA (Đỏ, Lục, Lam và Alpha):

pbrMaterial.setBaseColorFactor(
    Vector4(
        x = 0.5f,
        y = 0.0f,
        z = 0.5f,
        w = 0.0f
    )
)

Tạo hoạ tiết tuỳ chỉnh cho mô hình 3D

Texture là một thành phần hình ảnh mà bạn có thể áp dụng cho bề mặt của một mô hình 3D để cung cấp màu sắc, chi tiết hoặc thông tin khác về bề mặt. Jetpack XR Texture API cho phép bạn tải dữ liệu hình ảnh (chẳng hạn như tệp PNG) từ thư mục /assets/ của ứng dụng một cách không đồng bộ.

Khi tải một kết cấu, bạn có thể chỉ định một TextureSampler. Tham số này kiểm soát cách kết cấu được kết xuất. Bộ lấy mẫu xác định các thuộc tính lọc (khi hoạ tiết xuất hiện nhỏ hơn hoặc lớn hơn kích thước ban đầu) và các chế độ bao bọc (để xử lý các toạ độ bên ngoài phạm vi [0, 1] tiêu chuẩn). Bản thân đối tượng Texture chỉ là dữ liệu; bạn phải chỉ định đối tượng này cho Material để có hiệu ứng hình ảnh trên mô hình 3D.

Ví dụ về cách thay đổi hoạ tiết trên mô hình 3D

Để tạo một hoạ tiết tuỳ chỉnh, trước tiên, bạn cần lưu tệp hình ảnh vào thư mục /assets/. Tốt nhất là bạn cũng nên tạo một thư mục con textures trong thư mục đó.

Sau khi bạn lưu tệp vào thư mục thích hợp, hãy tạo hoạ tiết bằng API Texture. Đây cũng là nơi bạn sẽ áp dụng TextureSampler không bắt buộc (nếu cần):

val texture = Texture.create(
    session = xrSession,
    path = Path("textures/texture_file.png")
)

Tiếp theo, hãy xác định loại hoạ tiết và đặt các thông số tương ứng. Trong ví dụ này, chúng ta áp dụng một kết cấu che khuất và đặt độ mạnh:

pbrMaterial.setOcclusionTexture(
    texture = texture,
    strength = 1.0f
)

Áp dụng vật liệu và hoạ tiết cho các đối tượng 3D

Để áp dụng chất liệu hoặc hoạ tiết mới, hãy ghi đè chất liệu hiện có cho một nút cụ thể trên thực thể glTF. Thực hiện việc này bằng cách gọi setMaterialOverride trên GltfModelEntity:

gltfModelEntity.setMaterialOverride(
    material = pbrMaterial,
    nodeName = "Node Name"
)

Để xoá các thành phần mới tạo, hãy gọi clearMaterialOverride trên nút bị ghi đè trước đó trên GltfModelEntity. Thao tác này sẽ đưa Mô hình 3D về trạng thái mặc định:

gltfModelEntity.clearMaterialOverride(
    nodeName = "Node Name"
)


glTF và biểu trưng glTF là các nhãn hiệu của Khronos Group Inc.