ใน Jetpack XR SDK สภาพแวดล้อมเชิงพื้นที่คือสภาพแวดล้อมที่สมจริงซึ่งคุณ สามารถเพิ่มลงในแอปเพื่อปรับแต่งพื้นหลังของฉากเสมือนได้ สภาพแวดล้อมเชิงพื้นที่ จะมองเห็นได้เมื่อแอปอยู่ในพื้นที่เต็มเท่านั้น
ภาพรวมของสภาพแวดล้อมเชิงพื้นที่
SpatialEnvironment
ใช้เพื่อจัดการค่ากำหนดสภาพแวดล้อมเชิงพื้นที่ของแอป
โดยเป็นภาพกล่องท้องฟ้าแบบสแตนด์อโลนและรูปทรงที่ระบุใน glTF ตั้งค่าได้ครั้งละ 1 รูปภาพกล่องท้องฟ้าและไฟล์เรขาคณิต glTF 1 ไฟล์เท่านั้น
Skybox แสดงรูปภาพที่ผู้ใช้เห็นรอบตัวในฉากเสมือน สร้างภาพลวงตาของสภาพแวดล้อมพื้นหลังที่อยู่ไกล เช่น ท้องฟ้า ภูเขา หรือทิวทัศน์เมือง ผู้ใช้ไม่สามารถโต้ตอบหรือเข้าใกล้ Skybox ได้ Jetpack XR SDK รองรับ Skybox ทรงกลมในมาตรฐาน OpenEXR นอกจากจะให้พื้นหลังที่สมจริงสำหรับแอปแล้ว Skybox EXR ยังให้แสงตามรูปภาพ (IBL) แก่โมเดล 3 มิติที่แอปโหลดด้วย ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำสำหรับ การทำงานกับโมเดล 3 มิติ
สภาพแวดล้อมเชิงพื้นที่ยังสามารถมีเนื้อหาเรขาคณิต 3 มิติในมาตรฐาน glTF ได้ด้วย เรขาคณิตของสภาพแวดล้อมที่โหลดด้วยวิธีนี้จะ จัดแนวกับพื้นจริงโดยอัตโนมัติ เรขาคณิตของสภาพแวดล้อมเป็นวิธีที่ยอดเยี่ยมในการเพิ่มความสมจริงให้กับสภาพแวดล้อมผ่านองค์ประกอบในฉากหน้าและฉากกลางที่ผสานรวมเข้ากับกล่องท้องฟ้าด้วยเอฟเฟกต์พารัลแลกซ์
ในคำแนะนำด้านการออกแบบสำหรับสภาพแวดล้อมเชิงพื้นที่ คุณจะดูข้อมูลเกี่ยวกับ ชิ้นงานประเภทต่างๆ ที่ใช้สร้างสภาพแวดล้อมเชิงพื้นที่ได้ รวมถึงวิธี สร้างสภาพแวดล้อมเชิงพื้นที่ที่ปลอดภัยและสนุกสนาน
คุณตั้งค่าสภาพแวดล้อมเชิงพื้นที่ของแอปเป็นหนึ่งในการกำหนดค่า 3 แบบต่อไปนี้ได้
- การผสมผสานระหว่างรูปภาพสกายบ็อกซ์และรูปทรงเรขาคณิต glTF
- พื้นผิวพาสทรู ซึ่งสภาพแวดล้อมที่แสดงคือฟีดสดจากกล้องที่หันออกด้านนอกของอุปกรณ์ เมื่อมีความทึบแสงเต็มที่ พื้นผิวแบบส่งผ่านนี้จะบดบัง Skybox และรูปทรงเรขาคณิตโดยสมบูรณ์
- การกำหนดค่าแบบผสมที่พื้นผิวการส่งผ่านไม่ได้มีความทึบแสงเต็มรูปแบบ และไม่ได้มีความทึบแสงเป็น 0 ในกรณีนี้ พื้นผิวการส่งผ่านจะ กึ่งโปร่งใสและผสมอัลฟ่ากับ Skybox และรูปทรงเรขาคณิตที่อยู่ด้านหลัง
ความสามารถเชิงพื้นที่สำหรับสภาพแวดล้อมเชิงพื้นที่
SpatialCapabilities
: แสดงถึงความสามารถเชิงพื้นที่ของเซสชันปัจจุบัน ความสามารถเชิงพื้นที่บางอย่างเกี่ยวข้องกับสภาพแวดล้อมเชิงพื้นที่SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: ระบุว่ากิจกรรมสามารถเปิดหรือปิดใช้การส่งผ่านในขณะนี้ได้หรือไม่SPATIAL_CAPABILITY_APP_ENVIRONMENT
: ระบุว่ากิจกรรมตั้งค่าสภาพแวดล้อมเชิงพื้นที่ของตัวเองได้ในขณะนี้หรือไม่
นำเข้าและโหลดทรัพยากรสภาพแวดล้อมเชิงพื้นที่
ระบบจะโหลดทรัพยากร glTF และ EXR สำหรับสภาพแวดล้อมเชิงพื้นที่แบบไม่พร้อมกันโดยใช้คลาส Session
สร้างทรัพยากร glTF
สร้างทรัพยากร glTF เป็น GltfModel
ได้ โดยจะโหลด glTF
จากไฟล์ในเครื่อง GltfModel
สามารถใช้เป็นส่วนหนึ่งของสภาพแวดล้อมแอปเชิงพื้นที่ได้
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
สร้างทรัพยากรรูปภาพ EXR
สร้างทรัพยากรรูปภาพ EXR เป็น ExrImage
ได้โดยโหลด EXR จากไฟล์ในเครื่อง ExrImage
สามารถใช้กับ cmgen
เพื่อสร้างไฟล์ ZIP
ของ IBL สำหรับกล่องท้องฟ้า ดูรายละเอียดเพิ่มเติมได้ที่คำแนะนำเกี่ยวกับการเพิ่มประสิทธิภาพชิ้นงานสภาพแวดล้อม
val lightingForSkybox = ExrImage.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
ตั้งค่า SpatialEnvironmentPreference
สำหรับแอป
พร็อพเพอร์ตี้ preferredSpatialEnvironment
จะควบคุมสภาพแวดล้อมเชิงพื้นที่ที่ต้องการสำหรับแอป เมื่อใช้พร็อพเพอร์ตี้นี้เพื่อตั้งค่ากำหนด จะไม่มีการเปลี่ยนแปลงในทันที เว้นแต่ isPreferredSpatialEnvironmentActive
จะเป็น true
อยู่แล้ว เมื่ออุปกรณ์เข้าสู่สถานะที่เปลี่ยนพื้นหลัง XR ได้และมีความสามารถ SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT
ระบบจะแสดงสภาพแวดล้อมเชิงพื้นที่ที่ต้องการสำหรับแอปพลิเคชันโดยอัตโนมัติ
การตั้งค่าเป็น null
จะปิดใช้สภาพแวดล้อมเชิงพื้นที่ที่ต้องการ
สำหรับแอป ซึ่งหมายความว่าระบบจะแสดงสภาพแวดล้อมเริ่มต้นแทน
หาก SpatialEnvironmentPreference
ที่ระบุไม่ใช่ค่าว่าง แต่พร็อพเพอร์ตี้ทั้งหมดเป็นค่าว่าง สภาพแวดล้อมเชิงพื้นที่จะประกอบด้วย Skybox สีดำ
และไม่มีเรขาคณิต
หากต้องการรับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงสถานะ SpatialEnvironment
ให้ใช้
addOnSpatialEnvironmentChangedListener
การใช้งานพื้นฐาน
ข้อมูลโค้ดนี้จะสร้างรูปทรงเรขาคณิตของสภาพแวดล้อมและทรัพยากรกล่องท้องฟ้า จากนั้น ตั้งค่ากำหนดสภาพแวดล้อมเชิงพื้นที่ ระบบจะจดจำค่ากำหนดนี้และ จะใช้เมื่อแอปมีความสามารถในการตั้งค่าสภาพแวดล้อมของตนเอง
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. }
การใช้งานขั้นสูง
สำหรับกรณีการใช้งานขั้นสูงที่ต้องการควบคุมสภาพแวดล้อมอย่างละเอียดยิ่งขึ้น
คุณสามารถรวมการตรวจสอบ SpatialCapabilities
และใช้ addOnSpatialEnvironmentChangedListener
เพื่อกำหนดเวลาที่ต้องการตั้งค่ากำหนดสภาพแวดล้อมเชิงพื้นที่
ตั้งค่า PassthroughOpacityPreference สำหรับสภาพแวดล้อมเชิงพื้นที่ของแอป
คอมโพเนนต์หนึ่งของพื้นหลังเสมือนจริงแบบสมจริงของแอปคือพื้นผิวการส่งผ่าน ในกรณีนี้ พื้นหลังที่แสดงคือฟีดสดจากกล้องที่หันออกด้านนอกของอุปกรณ์
setPassthroughOpacityPreference
ใช้เพื่อตั้งค่าความทึบแสงแบบส่งผ่านที่ต้องการสำหรับแอป วิธีนี้จะตั้งค่ากำหนดเท่านั้นและจะไม่ทำให้เกิดการเปลี่ยนแปลงในทันที เว้นแต่จะมีความสามารถ SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
เมื่ออุปกรณ์เข้าสู่สถานะที่เปลี่ยนความทึบแสงของพาสทรูได้ และมีความสามารถ SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
ระบบจะใช้ความทึบแสงของพาสทรูที่ต้องการสำหรับแอปพลิเคชันโดยอัตโนมัติ
ค่าสำหรับการกำหนดค่าความทึบแสงของพาสทรูมีตั้งแต่ 0.0f
(ความทึบแสงเป็น 0
ซึ่งมองไม่เห็นพื้นผิวพาสทรู) ไปจนถึง 1.0f
(ความทึบแสงเต็ม
ซึ่งพื้นผิวพาสทรูจะซ่อนสภาพแวดล้อมเชิงพื้นที่) พารามิเตอร์
setPassthroughOpacityPreference
เป็นค่าลอยตัวที่กำหนดให้เป็น Null ได้ การตั้งค่า
เป็น null แสดงว่าแอปไม่มีค่ากำหนดความทึบแสงแบบส่งผ่าน และ
จะส่งคืนการควบคุมการส่งผ่านไปยังระบบ
การใช้งานพื้นฐาน
ข้อมูลโค้ดนี้จะตั้งค่ากำหนดความทึบแสงของโหมดส่งผ่าน ระบบจะจดจำค่ากำหนดนี้และจะนำไปใช้เมื่อแอปมีความสามารถในการตั้งค่า ความทึบแสงของโหมดส่งผ่าน
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. }
การใช้งานขั้นสูง
สำหรับกรณีการใช้งานขั้นสูงที่ต้องการควบคุมความทึบแสงของพาสทรูได้ละเอียดยิ่งขึ้น คุณสามารถรวมการตรวจสอบ SpatialCapabilities
และเพิ่ม Listener โดยใช้ addOnPassthroughOpacityChangedListener
เพื่อกำหนดเวลาที่ต้องการตั้งค่ากำหนดความทึบแสงของพาสทรู
การเพิ่มประสิทธิภาพชิ้นงาน
เมื่อสร้างชิ้นงานเพื่อตั้งค่า SpatialEnvironment
ของผู้ใช้ โปรดตรวจสอบว่าชิ้นงานมีความละเอียดคุณภาพสูงในขณะที่ยังคงขนาดไฟล์ที่เหมาะสม
ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำเกี่ยวกับการเพิ่มประสิทธิภาพชิ้นงานสภาพแวดล้อม
กำหนดความทึบแสงของการส่งผ่านปัจจุบัน
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity