ปรับแต่งโมเดล 3 มิติในแอป

อุปกรณ์ XR ที่รองรับ
คำแนะนำนี้จะช่วยคุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทนี้
ชุดหูฟัง XR
แว่นตา XR แบบมีสาย

หลังจากเพิ่มโมเดล 3 มิติลงในแอปแล้ว คุณสามารถปรับแต่งโมเดลเพื่อยกระดับประสบการณ์ด้านภาพ และประสบการณ์แบบอินเทอร์แอกทีฟได้ เช่น คุณสามารถเล่น และควบคุมภาพเคลื่อนไหว glTF ที่ฝังไว้ กำหนดพร็อพเพอร์ตี้วัสดุที่กำหนดเอง (เช่น สีพื้นฐานหรือความหยาบแบบเมทัลลิก) และใช้พื้นผิวที่กำหนดเองกับโมเดล 3 มิติ ความสามารถเหล่านี้ช่วยให้คุณเปลี่ยนลักษณะที่ปรากฏและลักษณะการทำงานของออบเจ็กต์แบบไดนามิกได้ขณะรันไทม์

สร้างภาพเคลื่อนไหวโมเดล 3 มิติ

โมเดล 3 มิติสามารถมีภาพเคลื่อนไหวแบบฝังได้ ซึ่งเป็นส่วนหนึ่งของข้อกำหนด glTF ภาพเคลื่อนไหวแบบโครงกระดูก (Rigged), แบบแข็ง และแบบเป้าหมายการเปลี่ยนรูป (Blend Shapes) ทั้งหมด รองรับใน Jetpack XR SDK นอกจากนี้ยังรองรับภาพเคลื่อนไหวของวัสดุที่สร้างด้วยKHR_animation_pointerส่วนขยาย glTF ด้วย

หากต้องการเล่นภาพเคลื่อนไหว ให้ระบุชื่อแทร็กที่ต้องการจาก รายการanimations โทรหา GltfAnimation.start() เพื่อเริ่มเล่น คุณระบุความเร็ว เวลาในการค้นหา และระบุว่าควรวนซ้ำภาพเคลื่อนไหวหรือไม่ก็ได้โดยใช้ GltfAnimationStartOptions

val animation = gltfEntity.animations.find { it.name == "Walk" }
animation?.start(GltfAnimationStartOptions(shouldLoop = true))

นอกจากนี้ คุณยังpause() resume() และstop()ภาพเคลื่อนไหว รวมถึงใช้ seekTo()เพื่อไปยังเวลาที่เฉพาะเจาะจงในแทร็กภาพเคลื่อนไหวได้ด้วย หากต้องการค้นหาสถานะปัจจุบันของภาพเคลื่อนไหว ให้ใช้ GltfAnimation.AnimationState

ปรับแต่งคุณสมบัติของวัสดุของโมเดล 3 มิติ

ระบบวัสดุของ Jetpack XR อิงตามข้อกำหนด glTF™ 2.0 และโมเดล 3 มิติจะได้รับการแสดงผลโดยใช้ การแสดงผลตามหลักการทางฟิสิกส์ (PBR) คุณปรับแอตทริบิวต์ของวัสดุได้ ในระหว่างรันไทม์เพื่อเปลี่ยนลักษณะที่ปรากฏของออบเจ็กต์แบบไดนามิกตามข้อมูลจากผู้ใช้ หรือสถานะปัจจุบันของแอป

Material กำหนดชุดคุณสมบัติภาพสำหรับพื้นผิวของออบเจ็กต์และ กำหนดวิธีที่พื้นผิวโต้ตอบกับแสงในฉาก

ใน Jetpack XR จะใช้คลาส KhronosPbrMaterial และ KhronosUnlitMaterial ในการสร้างและจัดการวัสดุเหล่านี้ ตามชื่อที่ระบุ KhronosUnlitMaterials จะไม่สว่างและไม่ได้รับผลกระทบจากแสงในฉาก KhronosPbrMaterial ช่วยให้คุณปรับแต่งพร็อพเพอร์ตี้ได้หลากหลายมากขึ้น เช่น สีเงา ความเป็นโลหะหรือความหยาบของออบเจ็กต์ และการเปล่งแสง

ดูข้อมูลเพิ่มเติมเกี่ยวกับพร็อพเพอร์ตี้ที่รองรับแต่ละรายการและพารามิเตอร์ที่ปรับแต่งได้ ใน Android XR ได้ที่เอกสารอ้างอิง ดูอภิธานศัพท์ของ Khronos เพื่อทำความเข้าใจพร็อพเพอร์ตี้เหล่านี้ให้ดียิ่งขึ้น

ตัวอย่างการเปลี่ยนสีพื้นฐานในโมเดล 3 มิติ

หากต้องการปรับแต่งคุณสมบัติของวัสดุในโมเดล 3 มิติ คุณจะต้องสร้าง วัสดุใหม่โดยใช้ KhronosPbrMaterial ก่อน คุณจะต้องตั้งค่า AlphaModeที่เหมาะสมสำหรับลักษณะที่ปรากฏที่คุณต้องการ

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

จากนั้นกําหนดพร็อพเพอร์ตี้ที่ต้องการแก้ไข ในตัวอย่างนี้ เราใช้ setBaseColorFactor เพื่อเปลี่ยนสีพื้นฐาน วิธีนี้ต้องใช้ Vector4 โดยที่คอมโพเนนต์ x, y, z และ w สอดคล้องกับค่า RGBA (แดง เขียว น้ำเงิน และอัลฟ่า) ตามลำดับ

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

สร้างพื้นผิวที่กำหนดเองสำหรับโมเดล 3 มิติ

Texture คือชิ้นงานรูปภาพที่คุณใช้กับพื้นผิวของโมเดล 3 มิติเพื่อระบุสี รายละเอียด หรือข้อมูลพื้นผิวอื่นๆ ได้ Jetpack XR Texture API ช่วยให้คุณโหลดข้อมูลรูปภาพ เช่น ไฟล์ PNG จากโฟลเดอร์ /assets/ ของแอปได้แบบไม่พร้อมกัน

เมื่อโหลดเท็กซ์เจอร์ คุณสามารถระบุ TextureSampler ซึ่งควบคุม วิธีแสดงผลเท็กซ์เจอร์ Sampler จะกำหนดพร็อพเพอร์ตี้การกรอง (เมื่อพื้นผิวปรากฏเล็กหรือใหญ่กว่าขนาดเดิม) และโหมดการตัดขอบ (สำหรับการจัดการพิกัดนอกช่วง [0, 1] มาตรฐาน) Texture ออบเจ็กต์เพียงอย่างเดียวเป็นเพียงข้อมูล คุณต้องกำหนดให้กับ Material เพื่อให้มีเอฟเฟกต์ภาพในโมเดล 3 มิติ

ตัวอย่างการเปลี่ยนพื้นผิวในโมเดล 3 มิติ

หากต้องการสร้างพื้นผิวที่กำหนดเอง ก่อนอื่นคุณจะต้องบันทึกไฟล์รูปภาพลงในโฟลเดอร์ /assets/ แนวทางปฏิบัติแนะนำคือคุณควรสร้างtextures ไดเรกทอรีย่อยในโฟลเดอร์นั้นด้วย

หลังจากบันทึกไฟล์ในไดเรกทอรีที่เหมาะสมแล้ว ให้สร้างพื้นผิวด้วย API Texture นอกจากนี้ คุณยังใช้TextureSamplerที่ไม่บังคับได้ที่นี่หากต้องการ

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

จากนั้นกําหนดประเภทของพื้นผิวและตั้งค่าพารามิเตอร์ที่เกี่ยวข้อง ในตัวอย่างนี้ เราใช้เท็กซ์เจอร์การบดบังและตั้งค่าความแรงดังนี้

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

ใช้วัสดุและพื้นผิวกับออบเจ็กต์ 3 มิติ

หากต้องการใช้วัสดุหรือพื้นผิวใหม่ ให้ลบล้างวัสดุที่มีอยู่สำหรับ โหนดที่เฉพาะเจาะจงในโหนด glTF โดยโทรไปที่ setMaterialOverride ใน GltfModelNode

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

หากต้องการนำวัสดุที่สร้างขึ้นใหม่นี้ออก ให้เรียกใช้ clearMaterialOverride ใน โหนดที่ลบล้างก่อนหน้านี้ใน GltfModelNode การดำเนินการนี้จะเปลี่ยนโมเดล 3 มิติกลับสู่สถานะเริ่มต้น ดังนี้

gltfModelNode.clearMaterialOverride()


glTF และโลโก้ glTF เป็นเครื่องหมายการค้าของ Khronos Group Inc.