Samsung Galaxy XR มาแล้ว ขับเคลื่อนโดย Android XR บล็อกโพสต์นี้เป็นส่วนหนึ่งของ สัปดาห์ Android XR Spotlight ซึ่งเราจะจัดเตรียมแหล่งข้อมูลต่างๆ เช่น บล็อกโพสต์ วิดีโอ โค้ดตัวอย่าง และอื่นๆ อีกมากมาย ซึ่งทั้งหมดนี้ออกแบบมาเพื่อช่วยให้คุณเรียนรู้ สร้าง และเตรียมแอปให้พร้อมสำหรับ Android XR
สัปดาห์นี้ Samsung ได้เปิดตัว Galaxy XR ซึ่งสร้างขึ้นโดยความร่วมมือกับ Google และ Qualcomm นี่เป็นช่วงเวลาที่น่าตื่นเต้นสำหรับนักพัฒนาแอป และเราต้องการช่วยให้คุณได้รับประสิทธิภาพที่ดีที่สุดจากแอป XR
แม้ว่าประสิทธิภาพที่ไม่ดีในเกมและแอปบนอุปกรณ์ที่ไม่ใช่ XR อาจทำให้ผู้ใช้หงุดหงิด แต่ในโลกของ XR ประสิทธิภาพไม่ใช่แค่ตัวเลือก แต่เป็นพื้นฐานของความสำเร็จของแอป หากคุณไม่บรรลุเป้าหมายอัตราเฟรมใน XR อาจทำให้เกิดปัญหาร้ายแรงกว่ามาก เช่น อาการเมาภาพเคลื่อนไหว
ในคู่มือนี้ เราจะอธิบายการเพิ่มประสิทธิภาพที่จำเป็นซึ่งคุณต้องเข้าใจสำหรับการพัฒนา Android XR คุณจะได้เรียนรู้ว่าฟีเจอร์ใดช่วยเพิ่มประสิทธิภาพได้มากที่สุด ควรใช้ฟีเจอร์เหล่านั้นเมื่อใด และฟีเจอร์เหล่านั้นทำงานร่วมกันอย่างไรเพื่อช่วยให้คุณบรรลุเป้าหมายอัตราเฟรม
สิ่งที่เรามุ่งหวังมีดังนี้
- ขั้นต่ำ: 72 FPS (ส่วนหนึ่งของหลักเกณฑ์ด้านคุณภาพการเล่น)
- ไม่บังคับ: 90 FPS โดยมีงบประมาณ 11 มิลลิวินาทีต่อเฟรม
ดูข้อมูลเพิ่มเติมเกี่ยวกับความสำคัญของการรักษาอัตราเฟรมที่สูงเช่นนี้ได้ที่หลักเกณฑ์ด้านประสิทธิภาพ
ฟีเจอร์ด้านประสิทธิภาพเฉพาะ XR
เราจะเริ่มด้วยการพูดถึงฟีเจอร์ด้านประสิทธิภาพ 2 รายการที่เฉพาะเจาะจงสำหรับ XR ได้แก่ การเรนเดอร์แบบ Foveated และการสุ่มตัวอย่างย่อยของ Vulkan
การแสดงผลแบบ Foveated Rendering
การแสดงผลแบบ Foveated เป็นการเพิ่มประสิทธิภาพที่มี 2 โหมด โหมดแรกคือโหมดคงที่ซึ่งจะแสดงผลตรงกลางหน้าจอด้วยความละเอียดสูงขึ้น และลดความละเอียดลงเรื่อยๆ เมื่อคุณมองออกไปไกลขึ้น
โหมดที่ 2 คือโหมดการติดตามดวงตา ซึ่งจะแสดงผลบริเวณที่คุณกำลังมองอย่างละเอียด ขณะเดียวกันก็ลดคุณภาพที่แสดงในบริเวณรอบข้าง โดยพื้นฐานแล้ว เทคโนโลยีนี้จะเลียนแบบการทำงานของการมองเห็นของมนุษย์ ซึ่งเราจะเห็นรายละเอียดที่ชัดเจนเฉพาะในบริเวณที่เราโฟกัสเท่านั้น
การแสดงผลแบบ Foveated จะช่วยลดภาระงานของ GPU ได้อย่างมากโดยไม่ลดคุณภาพของรูปภาพที่ผู้ใช้รับรู้ ข้อดีของการเรนเดอร์แบบ Foveated คือผู้ใช้จะไม่สังเกตเห็นคุณภาพที่ลดลงในภาพรอบข้าง แต่ GPU จะสังเกตเห็นประสิทธิภาพที่ดีขึ้นอย่างแน่นอน
ลองนึกภาพว่าคุณกำลังสร้างประสบการณ์การเข้าชมพิพิธภัณฑ์ที่มีวัตถุโบราณ 3 มิติที่ซับซ้อน หากไม่มีการแสดงผลแบบโฟเวต คุณจะรักษาอัตราเฟรม 90 FPS ได้ยากเมื่อพยายามแสดงผลทุกอย่างใน "ขอบเขตการมองเห็น" แต่เมื่อใช้การแสดงผลแบบโฟเวต คุณจะเก็บรายละเอียดโพลีสูงไว้ในจุดที่ผู้ใช้มองได้ แต่สภาพแวดล้อมเบื้องหลังจะแสดงผลด้วยคุณภาพที่ต่ำลง ผู้ใช้จะไม่สังเกตเห็นความแตกต่าง แต่คุณจะมีพื้นที่ว่างในการเพิ่มรายละเอียดให้กับฉากมากขึ้น
การสุ่มย่อย Vulkan
การสุ่มตัวอย่างย่อยของ Vulkan เป็นเพื่อนที่ดีที่สุดของการเรนเดอร์แบบ Foveated แม้ว่าการแสดงผลแบบ Foveated จะตัดสินใจว่าจะแสดงผลอะไรในระดับคุณภาพที่แตกต่างกัน แต่ Vulkan Subsampling จะจัดการวิธีแสดงผลระดับคุณภาพที่แตกต่างกันอย่างมีประสิทธิภาพโดยใช้แผนที่ความหนาแน่นของ Fragment
เมื่อใช้ร่วมกับการแสดงผลแบบ Foveated การสุ่มตัวอย่างย่อยของ Vulkan จะช่วยเพิ่มประสิทธิภาพได้อีก 0.5 มิลลิวินาที นอกจากนี้ยังช่วยปรับขอบหยักในมุมมองรอบข้างให้เรียบเนียนขึ้น ทำให้ภาพรวมดูสะอาดตาขึ้น
ตัวอย่างเช่น ในเกมจำลองการบินที่ผู้ใช้มุ่งเน้นไปที่เครื่องมือและการควบคุม การรวมการเรนเดอร์แบบ Foveated เข้ากับการสุ่มตัวอย่างย่อยของ Vulkan จะทำให้การควบคุมโดยละเอียดเรนเดอร์ได้อย่างคมชัด แต่โครงสร้างห้องนักบินรอบข้างจะใช้ทรัพยากรน้อยลง เวลาที่เพิ่มขึ้น 0.5 มิลลิวินาทีอาจดูไม่มากนัก แต่ก็เป็นความแตกต่างระหว่างการมีพื้นที่สำหรับองค์ประกอบแบบอินเทอร์แอกทีฟเพิ่มเติมหรือการสูญเสียเฟรมในช่วงเวลาที่เข้มข้น
ฟีเจอร์ GPU สำหรับฉากที่ซับซ้อน
นอกจาก Foveated Rendering และ Vulkan Subsampling แล้ว ยังมีฟีเจอร์ GPU บางอย่างที่ช่วยลดภาระที่ไม่จำเป็นผ่านการสร้างอินสแตนซ์และการคัดออกอย่างชาญฉลาด ซึ่งมีประสิทธิภาพอย่างยิ่งสำหรับฉากที่ซับซ้อนซึ่งมีรูปทรงเรขาคณิตซ้ำๆ หรือมีการบดบังอย่างมาก
ลิ้นชักที่อยู่ใน GPU
GPU Resident Drawer จะใช้การสร้างอินสแตนซ์ GPU โดยอัตโนมัติเพื่อลดคำสั่งประมวลผลและเพิ่มเวลาในการประมวลผลของ CPU ดังนั้น แทนที่ CPU จะบอก GPU เกี่ยวกับออบเจ็กต์แต่ละรายการแยกกัน GPU จะจัดกลุ่มออบเจ็กต์ที่คล้ายกันเข้าด้วยกัน
ฟีเจอร์นี้มีประสิทธิภาพสูงสุดสำหรับฉากขนาดใหญ่ที่มี Mesh ซ้ำๆ เช่น ต้นไม้ในป่า เฟอร์นิเจอร์ในอาคารสำนักงาน หรือพร็อพที่กระจายอยู่ทั่วสภาพแวดล้อม
ลองนึกภาพฉากป่าที่มีต้นไม้ 200 ต้นโดยใช้เมชฐานเดียวกัน หากไม่มี GPU Resident Drawer คุณจะมีคำสั่งประมวลผล 200 รายการที่ใช้ GPU อยู่ จึงทำให้ CPU ว่าง เมื่อเปิดใช้ฟีเจอร์นี้ GPU จะสร้างอินสแตนซ์ต้นไม้เหล่านั้นอย่างชาญฉลาด ซึ่งจะช่วยลดคำสั่งประมวลผลเหลือเพียง 5-10 คำสั่ง ซึ่งช่วยประหยัด GPU ได้อย่างมาก และคุณสามารถนำไปใช้กับการคำนวณตรรกะหรือฟิสิกส์ของเกมเพลย์ได้
การคัดออกจากการบดบัง GPU
การคัดออกจากการบดบังด้วย GPU จะใช้ GPU แทน CPU เพื่อระบุและข้ามการแสดงผลออบเจ็กต์ที่ซ่อนอยู่ โดยจะตรวจจับสิ่งที่ถูกบดบัง (ซ่อน) อยู่หลังวัตถุอื่นๆ โดยอัตโนมัติ คุณจึงไม่ต้องเสีย GPU ไปกับสิ่งที่ผู้ใช้มองไม่เห็น
ฟีเจอร์นี้มีประสิทธิภาพอย่างยิ่งในพื้นที่ภายในอาคารที่มีหลายห้อง สภาพแวดล้อมที่หนาแน่น หรือฉากสถาปัตยกรรมที่ผนัง พื้น และวัตถุบดบังมุมมองตามธรรมชาติ
ตัวอย่างเช่น สมมติว่าคุณกำลังสร้างประสบการณ์การใช้งานบ้านแบบมัลติรูม เมื่อผู้ใช้อยู่ในห้องนั่งเล่น เหตุใดจึงต้องเสียรอบ GPU ในการแสดงผลห้องครัวที่มีรายละเอียดครบถ้วนซึ่งซ่อนอยู่หลังผนังอย่างสมบูรณ์ การคัดออกจากการบดบังของ GPU จะข้ามการแสดงผลออบเจ็กต์ที่ซ่อนอยู่โดยอัตโนมัติ ซึ่งจะช่วยให้คุณมีงบประมาณด้านประสิทธิภาพมากขึ้นสำหรับสิ่งที่มองเห็นได้จริง
การตรวจสอบประสิทธิภาพ
การใช้ฟีเจอร์เหล่านี้เพียงอย่างเดียวยังไม่เพียงพอ นอกจากนี้ คุณยังต้องวัดผลการเพิ่มประสิทธิภาพเพื่อให้สามารถระบุผลลัพธ์เป็นตัวเลขและยืนยันได้ว่าการเปลี่ยนแปลงได้ผลจริง
Performance Metrics API
Performance Metrics API ช่วยให้คุณตรวจสอบการใช้งานหน่วยความจำ ประสิทธิภาพ CPU และประสิทธิภาพ GPU ของแอปได้แบบเรียลไทม์ ซึ่งจะให้ข้อมูลที่ครอบคลุมจากเลเยอร์คอมโพสิเตอร์และรันไทม์ คุณจึงเห็นสิ่งที่เกิดขึ้นในแอปพลิเคชันได้อย่างชัดเจน
กำหนดเกณฑ์พื้นฐานก่อนทำการเปลี่ยนแปลง ใช้การเพิ่มประสิทธิภาพ วัดผลลัพธ์ และทำซ้ำ แนวทางที่อิงตามข้อมูลนี้ช่วยให้คุณทราบว่าคุณกำลังปรับปรุงประสิทธิภาพจริงๆ ไม่ใช่แค่คาดเดา
ก่อนเปิดใช้การแสดงผลแบบ Foveated เวลาที่ใช้ในการแสดงผลเฟรม GPU อาจอยู่ที่ 13 มิลลิวินาที ซึ่งเกินงบประมาณ 11 มิลลิวินาที เปิดใช้การแสดงผลแบบ Foveated วัดอีกครั้ง และหวังว่าคุณจะเห็นว่าลดลงเหลือ 9 มิลลิวินาที ซึ่งหมายความว่าคุณมีเวลาเพิ่มขึ้น 4 มิลลิวินาทีในการเพิ่มรายละเอียดให้กับฉาก ปรับปรุงคุณภาพภาพในส่วนอื่นๆ หรือเพียงแค่ทำให้ประสิทธิภาพราบรื่นขึ้นในเนื้อหาที่หลากหลายมากขึ้น
หากไม่มีเมตริกเหล่านี้ คุณจะเพิ่มประสิทธิภาพโดยไม่มีข้อมูล Performance Metrics API จะบอกความจริงเกี่ยวกับสิ่งที่ช่วยกรณีการใช้งานที่เฉพาะเจาะจงของคุณได้จริงๆ
โปรแกรมแก้ไขข้อบกพร่องของเฟรม
Frame Debugger เป็นเครื่องมือในตัวของ Unity สำหรับทำความเข้าใจว่าฉากของคุณแสดงผลอย่างไรแบบเฟรมต่อเฟรม โดยจะแสดงลำดับของคำสั่งประมวลผลและให้คุณทำตามขั้นตอนเพื่อยืนยันว่าการเพิ่มประสิทธิภาพทำงานได้อย่างถูกต้อง
หากต้องการยืนยันว่า SRP Batcher ทำงานอยู่หรือไม่ มองหารายการ "RenderLoopNewBatcher" ในโปรแกรมแก้ไขข้อบกพร่องของเฟรม ตรวจสอบว่า GPU Resident Drawer กำลังจัดกลุ่มอย่างถูกต้องหรือไม่ มองหารายการ "Hybrid Batch Group" การยืนยันด้วยภาพเหล่านี้ช่วยให้คุณเข้าใจว่าการตั้งค่าการเพิ่มประสิทธิภาพมีผลจริงหรือไม่
ดูคำสั่งประมวลผล 50 รายการแรกของฉาก หากคุณเห็นออบเจ็กต์ที่คล้ายกันถูกวาดทีละรายการแทนที่จะเป็นแบบกลุ่ม แสดงว่าการสร้างอินสแตนซ์หรือการจัดกลุ่มทำงานไม่ถูกต้อง เครื่องมือแก้ไขข้อบกพร่องของเฟรมจะแสดงปัญหาเหล่านี้ให้เห็นทันทีเพื่อให้คุณแก้ไขได้
การเพิ่มประสิทธิภาพเพิ่มเติม
นอกจากการเพิ่มประสิทธิภาพที่เราได้กล่าวถึงข้างต้นแล้ว คู่มือประสิทธิภาพฉบับเต็มของเรายังครอบคลุมการเพิ่มประสิทธิภาพอื่นๆ อีก 2-3 รายการด้วย สรุปสั้นๆ มีดังนี้
- การตั้งค่า URP: ปิดใช้ HDR และการประมวลผลภายหลังสำหรับ XR บนอุปกรณ์เคลื่อนที่ ฟีเจอร์เหล่านี้ส่งผลต่อภาพน้อยมากเมื่อเทียบกับต้นทุนด้านประสิทธิภาพบนฮาร์ดแวร์มือถือ คุณจึงจะได้รับประสิทธิภาพที่วัดได้โดยแทบไม่เห็นความแตกต่างของภาพเลย
- SRP Batcher: ลดภาระการทำงานของ CPU สำหรับฉากที่มีวัสดุจำนวนมากซึ่งใช้ตัวแปร Shader เดียวกัน การลดการเปลี่ยนแปลงสถานะการแสดงผลระหว่างคำสั่งประมวลผลจะช่วยลดเวลา CPU ที่ใช้ในการแสดงผลได้อย่างมาก
- อัตราการรีเฟรชจอแสดงผล: ปรับแบบไดนามิกระหว่าง 72 FPS ถึง 90 FPS ตามความซับซ้อนของฉาก ลดอัตราเฟรมในระหว่างลำดับที่ซับซ้อนเพื่อรักษาความเสถียร จากนั้นเพิ่มอัตราเฟรมในช่วงเวลาที่ซับซ้อนน้อยกว่าเพื่อการโต้ตอบที่ราบรื่นเป็นพิเศษ
- พื้นผิวแบบลึก/ทึบแสง: ปิดใช้พื้นผิวเหล่านี้ เว้นแต่จะจำเป็นสำหรับเอฟเฟกต์เฉดสีโดยเฉพาะ ซึ่งทำให้เกิดการดำเนินการคัดลอก GPU ที่ไม่จำเป็นซึ่งทำให้ประสิทธิภาพลดลงโดยไม่ให้ประโยชน์สำหรับแอปพลิเคชันส่วนใหญ่
- ขนาดการแสดงผล URP: การตั้งค่านี้ช่วยให้คุณแสดงผลที่ความละเอียดต่ำลงเพื่อประโยชน์ด้านประสิทธิภาพ หรือเพิ่มขนาดการแสดงผลเพื่อปรับปรุงคุณภาพของภาพ
ดูวิธีการทีละขั้นตอนเกี่ยวกับการเพิ่มประสิทธิภาพเหล่านี้และอื่นๆ ได้ที่คู่มือประสิทธิภาพ Unity สำหรับ Android XR ฉบับสมบูรณ์
บทสรุป
ประสิทธิภาพของแอป XR ไม่ใช่แค่เรื่องทางเทคนิคเท่านั้น ซึ่งเป็นความแตกต่างระหว่างประสบการณ์ที่สะดวกสบายและน่าสนใจกับประสบการณ์ที่ทำให้ผู้ใช้รู้สึกไม่สบายหรืออึดอัด การเพิ่มประสิทธิภาพที่เราได้พูดถึงไปเป็นชุดเครื่องมือที่จะช่วยให้คุณบรรลุเป้าหมายอัตราเฟรมที่สำคัญในอุปกรณ์ XR รุ่นใหม่ล่าสุด
แผนกลยุทธ์มีดังนี้
- เริ่มต้นด้วยการเรนเดอร์แบบ Foveated และการสุ่มตัวอย่างย่อยของ Vulkan ฟีเจอร์เฉพาะ XR เหล่านี้ช่วยประหยัด GPU ได้อย่างเห็นได้ชัดและทันที
- เพิ่ม GPU Resident Drawer และ Occlusion Culling หากคุณมีฉากที่ซับซ้อนซึ่งมีเรขาคณิตหรือพื้นที่ภายในซ้ำๆ
- ตรวจสอบทุกอย่างด้วย Performance Metrics API เพื่อให้มั่นใจว่าการเปลี่ยนแปลงช่วยได้จริง
- สำรวจการเพิ่มประสิทธิภาพ URP เพิ่มเติมเพื่อเพิ่มประสิทธิภาพให้ดียิ่งขึ้น
การวัดผลและปรับปรุงอย่างต่อเนื่องเป็นสิ่งสำคัญ การเพิ่มประสิทธิภาพบางอย่างอาจไม่เป็นประโยชน์ต่อทุกโปรเจ็กต์อย่างเท่าเทียมกัน ดังนั้นให้ใช้ Performance Metrics API เพื่อให้เห็นภาพที่ชัดเจนว่าสิ่งใดช่วยกรณีการใช้งานของคุณได้จริง
ขั้นตอนถัดไป: ขยายทักษะของคุณ
พร้อมเจาะลึกแล้วหรือยัง ลองดูแหล่งข้อมูลเหล่านี้
- คู่มือประสิทธิภาพของ Unity สำหรับ Android XR - วิธีการติดตั้งใช้งานแบบทีละขั้นตอนอย่างสมบูรณ์สำหรับฟีเจอร์ทั้งหมดที่ครอบคลุมที่นี่
- เริ่มต้นใช้งาน Unity และ Android XR - ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์และ เริ่มสร้าง
- เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ Android XR - คู่มือที่ครอบคลุมสำหรับฟีเจอร์ทั้งหมดของ Android XR
-
ข่าวสารเกี่ยวกับผลิตภัณฑ์เรายินดีที่จะประกาศว่า Android XR รองรับ Unreal Engine และ Godot อย่างเป็นทางการแล้ว นอกจากนี้ เรายังเปิดตัวเครื่องมือใหม่ที่ออกแบบมาเพื่อเพิ่มประสิทธิภาพการทำงานและเปิดใช้ความสามารถใหม่ๆ ของ XR ซึ่งได้แก่ Android XR Engine Hub และ Android XR Interaction Framework
Luke Hopkins, Ryan Bartley • ใช้เวลาอ่าน 4 นาที -
ข่าวสารเกี่ยวกับผลิตภัณฑ์วันนี้ที่งาน Android Dev Summit เราขอประกาศความพร้อมให้บริการในวงกว้างของเครื่องมือและ API จำนวนมากที่ออกแบบมาเพื่อลดความยุ่งยากในชีวิตประจำวันและช่วยให้คุณสร้างแอป Android ที่ยอดเยี่ยมได้อย่างยืดหยุ่นมากขึ้น
Matthew McCullough • ใช้เวลาอ่าน 4 นาที -
ข่าวสารเกี่ยวกับผลิตภัณฑ์Android Studio Rabbit 2 มีความเสถียรและพร้อมให้คุณใช้งานในเวอร์ชันที่ใช้งานจริงแล้ว รุ่นนี้มีฟีเจอร์หลักๆ ที่จะช่วยปรับปรุงการพัฒนาของคุณ เช่น Bring Your Own Agent, ฟีเจอร์ใหม่ของโปรแกรมจำลอง XR, การอัปเดต LeakCanary, เครื่องมือจัดการทักษะ Agent ใหม่, รีวิวโค้ดด้วย AI และอื่นๆ
Matthew Warner • ใช้เวลาอ่าน 3 นาที
รับข้อมูลเชิงลึกเกี่ยวกับการพัฒนา Android ล่าสุดที่ส่งไปยังกล่องจดหมายของคุณทุกสัปดาห์