ตั้งแต่รุ่น alpha04 ของไลบรารี Jetpack XR เป็นต้นไป จะมีการอัปเดตที่สำคัญเกี่ยวกับวิธีจัดเตรียมชิ้นงานสภาพแวดล้อมเชิงพื้นที่เพื่อให้ได้ประสิทธิภาพและคุณภาพของภาพที่ดีที่สุด การเปลี่ยนแปลงเหล่านี้ส่งผลต่อความเข้ากันได้และจำเป็นต้องอัปเดตแอปที่มีอยู่ซึ่งตั้งค่าสภาพแวดล้อมเชิงพื้นที่
หากต้องการระบุสภาพแวดล้อมเชิงพื้นที่ คุณต้องมีองค์ประกอบหลัก 2 อย่าง ได้แก่
- ไฟล์ .glb หรือ .gltf สำหรับเรขาคณิตของสภาพแวดล้อม (เช่น พื้นดิน วัตถุที่อยู่ใกล้เคียง) และพื้นผิวท้องฟ้าหลักที่ผู้ใช้เห็น
- ไฟล์ ZIP แยกต่างหากที่มีข้อมูลการจัดแสงตามภาพ (IBL) ซึ่งสร้างจากภาพ EXR แบบ High Dynamic Range โดยใช้เครื่องมือ cmgen ระบบจะใช้ไฟล์ ZIP สำหรับการคำนวณแสง เช่น ภาพสะท้อนบนวัตถุ ไม่ใช่สำหรับพื้นผิวภาพท้องฟ้า
เหตุผลที่เลือกใช้แนวทางนี้
โครงสร้างชิ้นงานที่อัปเดตนี้มีข้อดีดังนี้
- ขนาดไฟล์ที่เล็กลง: เมื่อเทียบกับวิธีการก่อนหน้านี้ เช่น การใช้ไฟล์พื้นหลังท้องฟ้า HDR ความละเอียดสูงไฟล์เดียวสำหรับทั้งการแสดงภาพและข้อมูลการจัดแสง วิธีนี้ช่วยลดขนาดไฟล์
- ประสิทธิภาพที่ดีขึ้น: การแยกพื้นผิวของพื้นหลังท้องฟ้า (ซึ่งฝังอยู่ใน glb) ออกจากข้อมูล IBL (ในไฟล์ ZIP) ช่วยให้คุณเพิ่มประสิทธิภาพของคอมโพเนนต์แต่ละรายการได้อย่างอิสระ ซึ่งส่งผลให้แบนด์วิดท์การอ่านหน่วยความจำของพื้นผิวลดลงและการใช้พลังงานลดลง
- การจัดแสงที่เพิ่มประสิทธิภาพ: การใช้ทรัพยากรพื้นหลังท้องฟ้าที่มีความละเอียดต่ำโดยเฉพาะสำหรับแผนที่การจัดแสงจะส่งผลดีต่อประสิทธิภาพโดยไม่ส่งผลกระทบต่อผลลัพธ์ภาพการจัดแสงบนวัตถุอย่างมีนัยสำคัญ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มสภาพแวดล้อมเชิงพื้นที่ในแอปได้ที่คำแนะนำเกี่ยวกับการเพิ่มสภาพแวดล้อมในแอป
เพิ่มประสิทธิภาพ glb
glb จะแสดงเรขาคณิตรอบๆ ผู้ใช้ และคุณรวมพื้นผิวภาพท้องฟ้าไว้ในนั้น สำหรับเรขาคณิต คุณควรพยายามรักษาขนาดไฟล์ให้ไม่เกิน 80 MB
ซึ่งทำได้หลายวิธีเพื่อทำให้สภาพแวดล้อมมีประสิทธิภาพมากขึ้นโดยยังคงรักษาคุณภาพไว้ เช่น ความหนาแน่นของเมชควรหนาแน่นที่สุดใกล้กับผู้ใช้ และคุณลดความหนาแน่นของเมชที่อยู่ห่างจากผู้ใช้ได้
- ระยะมอง: ระยะมองสำหรับสภาพแวดล้อมใน Android XR คือ 200 เมตรจากจุดที่ผู้ใช้อยู่ และพื้นผิวของพื้นหลังควรเป็นไปตามข้อจำกัดนี้ วิธีนี้ช่วยให้ได้รับประสบการณ์การใช้งานที่ดีที่สุดเนื่องจากภาพพารัลแลกซ์จะมองไม่เห็นในระยะดังกล่าว
ความสูงของผู้ใช้: ภูมิศาสตร์อาจแตกต่างกันไป แต่ให้วางผู้ใช้บนเนินดินที่สูงประมาณ 1.5 เมตรเพื่อหลีกเลี่ยงการครอบตัดองค์ประกอบ UI ที่ใหญ่ขึ้นในแอป
จํานวนพอลลีโกล: โปรดคำนึงถึงจํานวนพอลลีโกลในไฟล์ glb เนื่องจากจํานวนพอลลีโกลที่สูงอาจทําให้สิ้นเปลืองพลังงานโดยไม่จําเป็น แต่ละแพตช์ของรูปทรงเรขาคณิตไม่ควรมีจุดยอดเกิน 10,000 จุด
การบีบอัด KTX: เพิ่มประสิทธิภาพ GPU ของไฟล์ glb โดยตรวจสอบว่าไฟล์ glb ใช้พื้นผิว MIPMAP และ KTX2
สิ่งที่จําเป็นในการเพิ่มประสิทธิภาพ IBL
ดาวน์โหลดยูทิลิตีบรรทัดคำสั่ง cmgen
- คุณดูรุ่นล่าสุดได้ในที่เก็บ Filament
- ค้นหาไฟล์ .tgz ที่มี cmgen เวอร์ชันที่สร้างไว้ล่วงหน้าสำหรับแพลตฟอร์มของคุณและแตกไฟล์
- เครื่องมือที่สร้างไว้ล่วงหน้าจะอยู่ภายใต้ไดเรกทอรี /bin ของไฟล์ .tgz ที่แตกไฟล์แล้ว
เนื้อหาที่ต้องเตรียมเพื่อสร้างไฟล์ .zip สำหรับ IBL
- EXR ความละเอียดต่ำที่ตรงกับพื้นผิวของพื้นหลังท้องฟ้า
- อินพุตพื้นผิวของพื้นหลังควรเป็นไฟล์ EXR แม้ว่า cmgen จะรองรับรูปแบบอื่นๆ แต่เราขอแนะนำให้ใช้ EXR เนื่องจากมีข้อมูล High Dynamic Range ที่สำคัญต่อการสร้าง IBL คุณภาพสูง การใช้รูปแบบอื่นๆ เช่น PNG จะทำให้แสงสว่างไม่แม่นยำ
- รูปภาพต้นฉบับ (EXR) ต้องมีสัดส่วน 2:1 และมีขนาดเป็นค่ายกกำลัง 2 ใช้ไฟล์ EXR ขนาด 1024 x 512 พิกเซล หมายเหตุ: แม้ว่าความละเอียด 1024 x 512 อาจดูต่ำเกินไป แต่ความละเอียดนี้ส่งผลดีต่อประสิทธิภาพ สำหรับ IBL ผลลัพธ์ภาพสำหรับผู้ใช้จะคล้ายกับชิ้นงาน IBL ที่มีความละเอียดสูงกว่ามาก
- ไฟล์ PNG สีดําทึบ
- ชิ้นงานนี้ต้องมีอัตราส่วน 2:1 ด้วย ใช้ขนาด 100 x 50 พิกเซล
- ซึ่งใช้เป็นพื้นผิวที่เพิ่มประสิทธิภาพเพื่อใช้ร่วมกับ IBL ผู้ใช้จะไม่ดูข้อมูลนี้ เราจึงมุ่งเน้นที่การเพิ่มประสิทธิภาพของชิ้นงาน
ต่อไปนี้แสดงตัวอย่างการใช้ cmgen เพื่อสร้างไฟล์ .zip สำหรับ IBL ในตัวอย่างนี้ เราใช้ไฟล์อินพุตชื่อ my_360_skybox_1024_x_512.exr และ black_skybox.png และสร้างไฟล์ .zip ชื่อ my_ibl.zip
# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png
# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr
# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512
# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old
# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox
# Change into the child directory.
cd ./skybox_ibl
# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*
# Return to the directory you started in.
cd ..