ใน Jetpack XR SDK สภาพแวดล้อมเชิงพื้นที่คือสภาพแวดล้อมที่สมจริงซึ่งคุณเพิ่มลงในแอปเพื่อปรับแต่งพื้นหลังของฉากเสมือนได้ สภาพแวดล้อมเชิงพื้นที่จะปรากฏขึ้นเมื่อแอปอยู่ในโหมดเต็มพื้นที่เท่านั้น
ภาพรวมของสภาพแวดล้อมเชิงพื้นที่
SpatialEnvironment
ใช้เพื่อจัดการค่ากําหนดสภาพแวดล้อมเชิงพื้นที่ของแอป โดยประกอบด้วยรูปภาพสกายบ็อกซ์แบบสแตนด์อโลนและเรขาคณิตที่ระบุโดย glTF คุณจะตั้งค่าได้เพียงรูปภาพสกายบ็อกซ์ 1 รูปและไฟล์เรขาคณิต glTF 1 ไฟล์เท่านั้น
พื้นหลังเสมือนจริงแสดงภาพรอบตัวที่ผู้ใช้เห็นในฉากเสมือนจริง ซึ่งสร้างภาพลวงตาของสภาพแวดล้อมเบื้องหลังที่ไกลออกไป เช่น ท้องฟ้า ภูเขา หรือภาพเมือง ผู้ใช้ไม่สามารถโต้ตอบหรือเข้าใกล้ฉากหลังได้ Jetpack XR SDK รองรับพื้นหลังท้องฟ้าทรงกลมในมาตรฐาน OpenEXR นอกจากจะให้พื้นหลังที่สมจริงสำหรับแอปแล้ว พื้นหลังฟ้า EXR ยังให้แสงตามภาพ (IBL) แก่โมเดล 3 มิติที่แอปโหลดอีกด้วย ดูข้อมูลเพิ่มเติมได้ที่คู่มือสำหรับการทำงานกับโมเดล 3 มิติ
สภาพแวดล้อมเชิงพื้นที่ยังอาจมีเนื้อหาเรขาคณิต 3 มิติในมาตรฐาน glTF ด้วย เรขาคณิตของสภาพแวดล้อมที่โหลดด้วยวิธีนี้จะจัดแนวให้สอดคล้องกับพื้นจริงโดยอัตโนมัติ เรขาคณิตของสภาพแวดล้อมเป็นวิธีที่ยอดเยี่ยมในการเพิ่มความสมจริงให้กับสภาพแวดล้อมผ่านองค์ประกอบของพื้นหน้าและพื้นหลังที่ผสานเข้ากับพื้นหลังด้วยเอฟเฟกต์ภาพพาโนรามา
ในคำแนะนำด้านการออกแบบสำหรับสภาพแวดล้อมเชิงพื้นที่ คุณจะดูข้อมูลเกี่ยวกับชิ้นงานประเภทต่างๆ ที่ใช้สร้างสภาพแวดล้อมเชิงพื้นที่ และวิธีสร้างสภาพแวดล้อมเชิงพื้นที่ที่ปลอดภัยและน่าเพลิดเพลินได้
คุณสามารถตั้งค่าสภาพแวดล้อมเชิงพื้นที่ของแอปเป็นการกำหนดค่าอย่างใดอย่างหนึ่งต่อไปนี้
- การรวมรูปภาพพื้นหลังและเรขาคณิต glTF
- พื้นผิวที่แสดงภาพผ่าน ซึ่งสภาพแวดล้อมที่แสดงคือฟีดสดจากกล้องที่หันออกของอุปกรณ์ เมื่อมีความทึบแสงเต็มที่ พื้นผิวนี้บดบังพื้นหลังและเรขาคณิตโดยสมบูรณ์
- การกําหนดค่าแบบผสม ซึ่งพื้นผิวที่แสดงผลผ่านไม่ได้มีความทึบแสงเต็ม และไม่มีความทึบแสงเป็น 0 ในกรณีนี้ พื้นผิวที่ส่งผ่านจะกลายเป็นแบบโปร่งแสงบางส่วนและอัลฟ่าจะผสมผสานกับพื้นหลังท้องฟ้าและรูปทรงเรขาคณิตที่อยู่เบื้องหลัง
ความสามารถของพื้นที่สำหรับสภาพแวดล้อมเชิงพื้นที่
SpatialCapabilities
: แสดงถึงความสามารถเชิงพื้นที่ของเซสชันปัจจุบัน ความสามารถบางอย่างของพื้นที่ทำงานมีความเกี่ยวข้องกับสภาพแวดล้อมเชิงพื้นที่SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: ระบุว่ากิจกรรมเปิดหรือปิดใช้การส่งต่อได้หรือไม่ ณ เวลาปัจจุบันSPATIAL_CAPABILITY_APP_ENVIRONMENT
:บ่งบอกว่ากิจกรรมสามารถตั้งค่าสภาพแวดล้อมเชิงพื้นที่ของตนเองได้หรือไม่ ณ เวลาปัจจุบัน
นําเข้าและโหลดทรัพยากรสภาพแวดล้อมเชิงพื้นที่
ระบบจะโหลดทรัพยากร glTF และ EXR สําหรับสภาพแวดล้อมเชิงพื้นที่แบบไม่พร้อมกันในคลาส Session
ไฟล์เหล่านี้ต้องจัดเก็บไว้ในโฟลเดอร์เนื้อหา
สร้างทรัพยากร glTF
ทรัพยากร glTF สามารถสร้างเป็น GltfModel
ซึ่งระบบจะโหลด glTF จากไฟล์ในเครื่อง GltfModel
สามารถใช้เป็นส่วนหนึ่งของสภาพแวดล้อมแอปเชิงพื้นที่ได้
val environmentGeometryFuture = GltfModel.create(session, "DayGeometry.glb") val environmentGeometry = environmentGeometryFuture.await()
สร้างทรัพยากรรูปภาพ EXR
ทรัพยากรรูปภาพ EXR สามารถสร้างเป็น ExrImage
ซึ่งจะโหลด EXR จากไฟล์ในเครื่อง คุณใช้ ExrImage
เป็นส่วนหนึ่งของสภาพแวดล้อมแอปเชิงพื้นที่เพื่อวาดภาพพื้นหลังได้
val skybox = ExrImage.create(session, "BlueSkybox.exr")
ตั้งค่า SpatialEnvironmentPreference สําหรับแอป
setSpatialEnvironmentPreference
ใช้เพื่อตั้งค่าสภาพแวดล้อมเชิงพื้นที่ที่ต้องการสําหรับแอป วิธีนี้จะตั้งค่าเฉพาะค่ากําหนดเท่านั้นและจะไม่ทําให้เกิดการเปลี่ยนแปลงในทันที เว้นแต่ว่า isSpatialEnvironmentPreferenceActive
จะจริงอยู่แล้ว เมื่ออุปกรณ์เข้าสู่สถานะที่เปลี่ยนพื้นหลัง XR ได้และSpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT
ใช้งานได้ สภาพแวดล้อมเชิงพื้นที่ที่ต้องการสำหรับแอปพลิเคชันจะแสดงขึ้นโดยอัตโนมัติ
การตั้งค่าเป็นค่าว่างจะปิดใช้สภาพแวดล้อมเชิงพื้นที่ที่ต้องการสำหรับแอป ซึ่งหมายความว่าระบบจะแสดงสภาพแวดล้อมเริ่มต้นแทน
หาก SpatialEnvironmentPreference
ที่ระบุไม่ใช่ค่าว่าง แต่พร็อพเพอร์ตี้ทั้งหมดเป็นค่าว่าง สภาพแวดล้อมเชิงพื้นที่จะประกอบด้วยท้องฟ้าจำลองสีดําและไม่มีเรขาคณิต
หากต้องการรับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงสถานะของ SpatialEnvironment ให้ใช้
addOnSpatialEnvironmentChangedListener
การใช้งานพื้นฐาน
ข้อมูลโค้ดนี้จะสร้างเรขาคณิตของสภาพแวดล้อมและทรัพยากรสกายบ็อกซ์ จากนั้นจึงตั้งค่าค่ากําหนดของสภาพแวดล้อมเชิงพื้นที่ ระบบจะจดจำค่ากำหนดนี้ไว้ และจะนำไปใช้เมื่อแอปมีความสามารถในการตั้งค่าสภาพแวดล้อมของตนเอง
val spatialEnvironmentPreference = SpatialEnvironment.SpatialEnvironmentPreference(skybox, environmentGeometry) val preferenceResult = session.spatialEnvironment.setSpatialEnvironmentPreference(spatialEnvironmentPreference) if (preferenceResult == SpatialEnvironment.SetSpatialEnvironmentPreferenceChangeApplied()) { // The environment was successfully updated and is now visible, and any listeners // specified using addOnSpatialEnvironmentChangedListener will be notified. } else if (preferenceResult == SpatialEnvironment.SetSpatialEnvironmentPreferenceChangePending()) { // The environment is in the process of being updated. Once visible, any listeners // specified using addOnSpatialEnvironmentChangedListener will be notified. }
การใช้งานขั้นสูง
สําหรับ Use Case ขั้นสูงที่ต้องการการควบคุมสภาพแวดล้อมอย่างละเอียดยิ่งขึ้น คุณสามารถใช้การตรวจสอบ SpatialCapabilities
และติดตั้งใช้งาน addOnSpatialEnvironmentChangedListener
เพื่อระบุเวลาที่คุณต้องการตั้งค่าค่ากําหนดของสภาพแวดล้อมเชิงพื้นที่
ตั้งค่า PassthroughOpacityPreference สําหรับสภาพแวดล้อมเชิงพื้นที่สําหรับแอป
หนึ่งในคอมโพเนนต์ของพื้นหลังเสมือนจริงที่สมจริงของแอปคือพื้นผิวที่ส่งผ่าน ในกรณีนี้ พื้นหลังที่แสดงคือฟีดสดจากกล้องที่หันออกด้านนอกของอุปกรณ์
setPassthroughOpacityPreference
ใช้เพื่อตั้งค่าความทึบของโหมดแสดงผลที่คุณต้องการสำหรับแอป วิธีนี้จะตั้งค่ากำหนดเท่านั้นและจะไม่ทำให้เกิดการเปลี่ยนแปลงในทันที เว้นแต่จะมีความสามารถของ SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
เมื่ออุปกรณ์เข้าสู่สถานะที่เปลี่ยนความทึบของโหมดพาสทรูได้ และSpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
ความสามารถดังกล่าวพร้อมใช้งาน ระบบจะใช้ความทึบของโหมดพาสทรูที่ต้องการสำหรับแอปพลิเคชันโดยอัตโนมัติ
ค่าสำหรับค่ากําหนดความทึบแสงของโหมดแสดงผลแบบพาสทรูอยู่ในช่วง 0.0f
(ความทึบแสง 0 ซึ่งมองไม่เห็นพื้นผิวของโหมดแสดงผลแบบพาสทรู) ถึง 1.0f
(ความทึบแสงเต็ม ซึ่งพื้นผิวของโหมดแสดงผลแบบพาสทรูจะซ่อนสภาพแวดล้อมเชิงพื้นที่) พารามิเตอร์ setPassthroughOpacityPreference
เป็นตัวเลขทศนิยมที่อนุญาตค่า Null การตั้งค่าเป็นค่า Null บ่งชี้ว่าแอปไม่มีค่ากําหนดความทึบของพาสทรู และจะส่งการควบคุมพาสทรูกลับไปยังระบบ
การใช้งานพื้นฐาน
ข้อมูลโค้ดนี้จะตั้งค่าความทึบของการส่งผ่าน ระบบจะจดจำค่ากำหนดนี้ไว้ และจะนำไปใช้เมื่อแอปมีความสามารถในการตั้งค่าระดับทึบแสงของโหมดพาสทรู
val preferenceResult = session.spatialEnvironment.setPassthroughOpacityPreference(1.0f) if (preferenceResult == SpatialEnvironment.SetPassthroughOpacityPreferenceChangeApplied()) { // The passthrough opacity request succeeded and should be visible now, and any listeners // specified using addOnPassthroughOpacityChangedListener will be notified } else if (preferenceResult == SpatialEnvironment.SetPassthroughOpacityPreferenceChangePending()) { // 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
ของผู้ใช้ คุณจะต้องตรวจสอบว่าชิ้นงานมีความละเอียดคุณภาพสูงในขณะที่ยังคงมีขนาดไฟล์ที่เหมาะสม โปรดตรวจสอบว่า glb ใช้พื้นผิวแบบ MIPMAP และ KTX2 นอกจากนี้ คุณควรคำนึงถึงจำนวนพอลิก้อนในไฟล์ glb ด้วย เนื่องจากจำนวนพอลิก้อนที่สูงอาจทำให้สิ้นเปลืองพลังงานโดยไม่จำเป็น ขนาดไฟล์ส่วนใหญ่ของอินสแตนซ์ SpatialEnvironment
ส่วนใหญ่มาจากรูปภาพที่ใช้สําหรับท้องฟ้า ตรวจสอบว่ารูปภาพได้รับการเพิ่มประสิทธิภาพแล้วโดยเรียกใช้ชิ้นงานผ่านเครื่องมือเพิ่มประสิทธิภาพ (เช่น ktx)
กำหนดระดับทึบแสงของการส่งผ่านปัจจุบัน
val currentPassthroughOpacity = session.spatialEnvironment.getCurrentPassthroughOpacity()