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