เพิ่มประสิทธิภาพชิ้นงานสภาพแวดล้อม

ตั้งแต่รุ่น 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 ..