Samsung Galaxy XR พร้อมจำหน่ายแล้วขับเคลื่อนโดย Android XR บล็อกโพสต์นี้เป็นส่วนหนึ่งของ สัปดาห์พิเศษของ Android XR ซึ่งเราจะนำเสนอแหล่งข้อมูลต่างๆ เช่น บล็อกโพสต์ วิดีโอ โค้ดตัวอย่าง และอื่นๆ อีกมากมาย ซึ่งออกแบบมาเพื่อช่วยให้คุณได้เรียนรู้ สร้าง และเตรียมแอปให้พร้อมสำหรับ Android XR
สัปดาห์นี้ Samsung ได้เปิดตัว Galaxy XR ซึ่งสร้างขึ้นโดยความร่วมมือกับ Google และ Qualcomm นี่เป็นช่วงเวลาที่น่าตื่นเต้นสำหรับนักพัฒนาแอป และเราต้องการช่วยให้คุณได้รับประสิทธิภาพที่ดีที่สุดจากแอป XR
แม้ว่าประสิทธิภาพที่ไม่ดีในเกมและแอปบนอุปกรณ์ที่ไม่ใช่ XR อาจทำให้ผู้ใช้รู้สึกหงุดหงิด แต่ในโลกของ XR ประสิทธิภาพไม่ใช่แค่ตัวเลือก แต่เป็นพื้นฐานสำคัญที่ทำให้แอปประสบความสำเร็จ หากคุณไม่สามารถรักษาอัตราเฟรมตามเป้าหมายใน XR ได้ ก็อาจทำให้เกิดปัญหาที่ร้ายแรงกว่ามาก เช่น อาการเมารถเมาเรือ
ในคู่มือนี้ เราจะอธิบายการเพิ่มประสิทธิภาพที่จำเป็นที่คุณต้องเข้าใจสำหรับการพัฒนา Android XR คุณจะได้เรียนรู้ว่าฟีเจอร์ใดให้ประสิทธิภาพที่ดีที่สุด ควรใช้ฟีเจอร์เหล่านั้นเมื่อใด และฟีเจอร์ต่างๆ ทำงานร่วมกันอย่างไรเพื่อช่วยให้คุณบรรลุเป้าหมายอัตราเฟรม
เป้าหมายของเราคือ
- ขั้นต่ำ: 72 FPS (เป็นส่วนหนึ่งของหลักเกณฑ์ด้านคุณภาพของ Play)
- ไม่บังคับ: 90 FPS โดยมีงบประมาณ 11 มิลลิวินาทีต่อเฟรม
ดูข้อมูลเพิ่มเติมเกี่ยวกับเหตุผลที่การรักษาอัตราเฟรมสูงเช่นนี้จึงมีความสำคัญได้ที่หลักเกณฑ์ด้านประสิทธิภาพ
ฟีเจอร์ด้านประสิทธิภาพเฉพาะสำหรับ XR
เราจะเริ่มต้นด้วยการพูดถึงฟีเจอร์ด้านประสิทธิภาพ 2 รายการที่เฉพาะสำหรับ XR ได้แก่ Foveated Rendering และ Vulkan Subsampling
Foveated Rendering
Foveated Rendering เป็นการเพิ่มประสิทธิภาพที่มี 2 โหมด โหมดแรกคือโหมดคงที่ ซึ่งจะแสดงผลตรงกลางหน้าจอด้วยความละเอียดสูงกว่า และค่อยๆ ลดความละเอียดลงเมื่อมองออกไปด้านนอก
โหมดที่ 2 คือโหมดติดตามดวงตา ซึ่งจะแสดงผลพื้นที่ที่คุณกำลังมองอยู่โดยเฉพาะด้วยรายละเอียดทั้งหมด ขณะเดียวกันก็ลดคุณภาพที่แสดงในบริเวณรอบข้าง โดยพื้นฐานแล้วโหมดนี้จะเลียนแบบการทำงานของสายตามนุษย์ ซึ่งเราจะเห็นรายละเอียดที่ชัดเจนเฉพาะในพื้นที่ที่เรากำลังจดจ่ออยู่เท่านั้น
Foveated Rendering ช่วยลดภาระงานของ GPU ได้อย่างมากโดยไม่ลดคุณภาพของภาพที่ผู้ใช้รับรู้ ข้อดีของ Foveated Rendering คือผู้ใช้จะไม่สังเกตเห็นคุณภาพที่ลดลงในบริเวณรอบข้าง แต่ GPU จะสังเกตเห็นประสิทธิภาพที่เพิ่มขึ้นอย่างแน่นอน
ลองนึกภาพว่าคุณกำลังสร้างประสบการณ์การใช้งานพิพิธภัณฑ์ที่มีสิ่งประดิษฐ์ 3 มิติที่ซับซ้อน หากไม่มี Foveated Rendering คุณจะพยายามรักษา 90 FPS เพื่อแสดงผลทุกอย่างใน "ขอบเขตการมองเห็น" ได้อย่างยากลำบาก แต่ด้วย Foveated Rendering คุณจะเก็บรายละเอียดที่มีโพลีสูงไว้ในบริเวณที่ผู้ใช้กำลังมองอยู่ได้ แต่สภาพแวดล้อมเบื้องหลังจะแสดงผลด้วยคุณภาพที่ต่ำกว่า ผู้ใช้จะไม่สังเกตเห็นความแตกต่าง แต่คุณจะมีพื้นที่เหลือให้เพิ่มรายละเอียดลงในฉากได้มากขึ้น
Vulkan Subsampling
Vulkan Subsampling คือเพื่อนที่ดีที่สุดของ Foveated Rendering ในขณะที่ Foveated Rendering จะตัดสินใจว่าจะแสดงผลอะไรด้วยคุณภาพระดับต่างๆ Vulkan Subsampling จะจัดการวิธีแสดงผลระดับคุณภาพต่างๆ อย่างมีประสิทธิภาพ โดยใช้ Fragment Density Maps
เมื่อใช้ร่วมกับ Foveated Rendering, Vulkan Subsampling จะช่วยเพิ่มประสิทธิภาพให้คุณได้อีก 0.5 มิลลิวินาที นอกจากนี้ ยังช่วยลดขอบหยักในบริเวณรอบข้าง ทำให้ภาพโดยรวมดูสะอาดตาขึ้น
ตัวอย่างเช่น ในเกมจำลองการบินที่ผู้ใช้จดจ่ออยู่กับเครื่องมือและส่วนควบคุม การใช้ Foveated Rendering ร่วมกับ Vulkan Subsampling จะทำให้ส่วนควบคุมที่มีรายละเอียดแสดงผลได้อย่างคมชัด แต่โครงสร้างห้องนักบินรอบข้างจะใช้ทรัพยากรน้อยลง 0.5 มิลลิวินาทีที่เพิ่มขึ้นอาจดูไม่มากนัก แต่ก็เป็นความแตกต่างระหว่างการมีพื้นที่สำหรับองค์ประกอบแบบอินเทอร์แอกทีฟเพิ่มเติมหรือการลดเฟรมในช่วงเวลาที่เข้มข้น
ฟีเจอร์ GPU สำหรับฉากที่ซับซ้อน
นอกเหนือจาก Foveated Rendering และ Vulkan Subsampling แล้ว ยังมีฟีเจอร์ GPU บางอย่างที่ช่วยลดความตึงเครียดที่ไม่จำเป็นผ่านการสร้างอินสแตนซ์และการคัดกรองอย่างชาญฉลาด ฟีเจอร์เหล่านี้มีประสิทธิภาพเป็นพิเศษสำหรับฉากที่ซับซ้อนซึ่งมีรูปทรงเรขาคณิตซ้ำๆ หรือมีการบดบังอย่างมาก
GPU Resident Drawer
GPU Resident Drawer จะใช้การสร้างอินสแตนซ์ GPU โดยอัตโนมัติเพื่อลดการเรียกการแสดงผลและเพิ่มเวลาประมวลผลของ CPU ดังนั้น แทนที่ CPU จะบอก GPU เกี่ยวกับออบเจ็กต์แต่ละรายการ GPU จะจัดกลุ่มออบเจ็กต์ที่คล้ายกันเข้าด้วยกัน
ฟีเจอร์นี้มีประสิทธิภาพมากที่สุดสำหรับฉากขนาดใหญ่ที่มีเมชซ้ำๆ เช่น ต้นไม้ในป่า เฟอร์นิเจอร์ในอาคารสำนักงาน หรืออุปกรณ์ประกอบฉากที่กระจัดกระจายอยู่ทั่วสภาพแวดล้อม
ลองนึกภาพฉากป่าที่มีต้นไม้ 200 ต้นซึ่งใช้เมชพื้นฐานเดียวกัน หากไม่มี GPU Resident Drawer คุณจะมีคำสั่งการแสดงผล 200 รายการที่ใช้ GPU และทำให้ CPU มีพื้นที่ว่างมากขึ้น เมื่อคุณเปิดใช้ฟีเจอร์นี้ GPU จะสร้างอินสแตนซ์ต้นไม้เหล่านั้นอย่างชาญฉลาด ซึ่งจะช่วยลดคำสั่งการแสดงผลเหลือเพียง 5-10 รายการ ซึ่งเป็นการประหยัด GPU ได้อย่างมากที่คุณสามารถนำไปลงทุนในตรรกะการเล่นเกมหรือการคำนวณทางฟิสิกส์
GPU Occlusion Culling
GPU Occlusion Culling ใช้ GPU แทน CPU เพื่อระบุและข้ามการแสดงผลออบเจ็กต์ที่ซ่อนอยู่ ฟีเจอร์นี้จะตรวจหาโดยอัตโนมัติว่ามีอะไรถูกบดบัง (ซ่อนอยู่) อยู่เบื้องหลังออบเจ็กต์อื่นๆ เพื่อไม่ให้ GPU เสียทรัพยากรไปกับสิ่งต่างๆ ที่ผู้ใช้มองไม่เห็น
ฟีเจอร์นี้มีประสิทธิภาพเป็นพิเศษในพื้นที่ภายในอาคารที่มีหลายห้อง สภาพแวดล้อมที่หนาแน่น หรือฉากสถาปัตยกรรมที่ผนัง พื้น และออบเจ็กต์ต่างๆ บดบังมุมมองโดยธรรมชาติ
ตัวอย่างเช่น สมมติว่าคุณกำลังสร้างประสบการณ์การใช้งานบ้านที่มีหลายห้อง เมื่อผู้ใช้อยู่ในห้องนั่งเล่น ทำไมต้องเสียรอบการทำงานของ GPU ไปกับการแสดงผลห้องครัวที่มีรายละเอียดครบถ้วนซึ่งซ่อนอยู่หลังผนัง GPU Occlusion Culling จะข้ามการแสดงผลออบเจ็กต์ที่ซ่อนอยู่โดยอัตโนมัติ ทำให้คุณมีงบประมาณด้านประสิทธิภาพมากขึ้นสำหรับสิ่งที่มองเห็นได้จริง
การตรวจสอบประสิทธิภาพ
การใช้ฟีเจอร์เหล่านี้เพียงอย่างเดียวไม่เพียงพอ คุณต้องวัดผลการเพิ่มประสิทธิภาพด้วย เพื่อให้สามารถระบุผลกระทบและยืนยันว่าการเปลี่ยนแปลงของคุณได้ผลจริง
Performance Metrics API
Performance Metrics API ช่วยให้คุณตรวจสอบการใช้หน่วยความจำ ประสิทธิภาพของ CPU และประสิทธิภาพของ GPU ของแอปแบบเรียลไทม์ โดยจะให้ข้อมูลที่ครอบคลุมจากเลเยอร์ Compositor และเลเยอร์รันไทม์ เพื่อให้คุณเห็นสิ่งที่เกิดขึ้นในแอปพลิเคชันได้อย่างชัดเจน
สร้างเกณฑ์มาตรฐานก่อนทำการเปลี่ยนแปลง ใช้การเพิ่มประสิทธิภาพ วัดผลกระทบ และทำซ้ำ แนวทางที่อิงตามข้อมูลนี้หมายความว่าคุณ รู้ ว่ากำลังปรับปรุงประสิทธิภาพจริง ไม่ใช่แค่คาดเดา
ก่อนเปิดใช้ Foveated Rendering เวลาที่ใช้ในการแสดงผลเฟรมของ GPU อาจอยู่ที่ 13 มิลลิวินาที ซึ่งเกินงบประมาณ 11 มิลลิวินาที เปิดใช้ Foveated Rendering แล้ววัดอีกครั้ง คุณอาจเห็นเวลาเฟรมลดลงเหลือ 9 มิลลิวินาที ซึ่งเป็นพื้นที่ว่าง 4 มิลลิวินาทีที่คุณได้รับเพื่อเพิ่มรายละเอียดลงในฉาก ปรับปรุงคุณภาพของภาพในส่วนอื่นๆ หรือเพียงแค่ทำให้มั่นใจว่าประสิทธิภาพจะราบรื่นยิ่งขึ้นในเนื้อหาที่หลากหลาย
หากไม่มีเมตริกเหล่านี้ คุณจะเพิ่มประสิทธิภาพแบบไม่เห็นภาพ Performance Metrics API จะบอกความจริงเกี่ยวกับสิ่งที่ช่วยให้กรณีการใช้งานเฉพาะของคุณดีขึ้น
Frame Debugger
Frame Debugger เป็นเครื่องมือในตัวของ Unity สำหรับทำความเข้าใจวิธีแสดงผลฉากของคุณแบบเฟรมต่อเฟรม เครื่องมือนี้จะแสดงลำดับการเรียกการแสดงผลและช่วยให้คุณดูทีละขั้นตอนเพื่อยืนยันว่าการเพิ่มประสิทธิภาพของคุณทำงานได้อย่างถูกต้อง
ต้องการยืนยันว่า SRP Batcher ทำงานอยู่หรือไม่ ให้มองหารายการ "RenderLoopNewBatcher" ใน Frame Debugger ต้องการตรวจสอบว่า GPU Resident Drawer จัดกลุ่มอย่างถูกต้องหรือไม่ ให้มองหารายการ "Hybrid Batch Group" การยืนยันด้วยภาพเหล่านี้จะช่วยให้คุณเข้าใจว่าการตั้งค่าการเพิ่มประสิทธิภาพมีผลจริงหรือไม่
ดูคำสั่งการแสดงผล 50 รายการแรกของฉากทีละขั้นตอน หากเห็นออบเจ็กต์ที่คล้ายกันแสดงผลทีละรายการแทนที่จะจัดกลุ่ม แสดงว่าการสร้างอินสแตนซ์หรือการจัดกลุ่มของคุณทำงานไม่ถูกต้อง Frame Debugger จะแสดงปัญหาเหล่านี้ให้เห็นทันทีเพื่อให้คุณแก้ไขได้
การเพิ่มประสิทธิภาพเพิ่มเติม
นอกเหนือจากการเพิ่มประสิทธิภาพที่เราได้กล่าวถึงข้างต้นแล้ว คู่มือด้านประสิทธิภาพฉบับเต็มของเรายังครอบคลุมการเพิ่มประสิทธิภาพอื่นๆ อีกด้วย สรุปสั้นๆ ดังนี้
- การตั้งค่า URP: ปิดใช้ HDR และ Post Processing สำหรับ XR บนอุปกรณ์เคลื่อนที่ ฟีเจอร์เหล่านี้มีผลกระทบต่อภาพน้อยมากเมื่อเทียบกับค่าใช้จ่ายด้านประสิทธิภาพบนฮาร์ดแวร์ของอุปกรณ์เคลื่อนที่ ดังนั้นคุณจะได้รับประสิทธิภาพที่วัดผลได้โดยมีความแตกต่างของภาพที่แทบมองไม่เห็น
- SRP Batcher: ลดค่าใช้จ่ายของ CPU สำหรับฉากที่มีวัสดุจำนวนมากซึ่งใช้ Shader Variant เดียวกัน การลดการเปลี่ยนแปลงสถานะการแสดงผลระหว่างการเรียกการแสดงผลจะช่วยลดเวลาที่ CPU ใช้ในการแสดงผลได้อย่างมาก
- อัตราการรีเฟรชของจอแสดงผล: ปรับแบบไดนามิกระหว่าง 72 FPS และ 90 FPS ตามความซับซ้อนของฉาก ลดอัตราเฟรมระหว่างลำดับที่ซับซ้อนเพื่อรักษาความเสถียร แล้วเพิ่มอัตราเฟรมในช่วงเวลาที่ง่ายกว่าเพื่อการโต้ตอบที่ราบรื่นเป็นพิเศษ
- Depth/Opaque Textures: ปิดใช้ฟีเจอร์เหล่านี้ เว้นแต่จะจำเป็นสำหรับเอฟเฟกต์ Shader ฟีเจอร์เหล่านี้ทำให้เกิดการดำเนินการคัดลอก GPU ที่ไม่จำเป็น ซึ่งทำให้เสียประสิทธิภาพโดยไม่ให้ประโยชน์แก่แอปพลิเคชันส่วนใหญ่
- URP Render Scale: การตั้งค่านี้ช่วยให้คุณแสดงผลด้วยความละเอียดที่ลดลงเพื่อเพิ่มประสิทธิภาพ หรือเพิ่มขนาดการแสดงผลเพื่อปรับปรุงคุณภาพของภาพ
ดูวิธีการทีละขั้นตอนสำหรับการเพิ่มประสิทธิภาพเหล่านี้และอื่นๆ ได้ที่คู่มือด้านประสิทธิภาพของ Unity ฉบับสมบูรณ์สำหรับ Android XR
บทสรุป
ประสิทธิภาพของแอป XR ไม่ใช่แค่ช่องทำเครื่องหมายทางเทคนิค แต่เป็นความแตกต่างระหว่างประสบการณ์การใช้งานที่สะดวกสบายและน่าดึงดูดใจกับประสบการณ์การใช้งานที่ทำให้ผู้ใช้รู้สึกไม่สบาย การเพิ่มประสิทธิภาพที่เราได้กล่าวถึงเป็นชุดเครื่องมือที่จะช่วยให้คุณบรรลุเป้าหมายอัตราเฟรมที่สำคัญบนอุปกรณ์ XR รุ่นใหม่ล่าสุด
แผนงานของคุณมีดังนี้
- เริ่มต้นด้วย Foveated Rendering และ Vulkan Subsampling ฟีเจอร์เฉพาะสำหรับ XR เหล่านี้ช่วยประหยัด GPU ได้ทันทีและเห็นผลชัดเจน
- เพิ่ม GPU Resident Drawer และ Occlusion Culling หากคุณมีฉากที่ซับซ้อนซึ่งมีรูปทรงเรขาคณิตซ้ำๆ หรือพื้นที่ภายในอาคาร
- ตรวจสอบทุกอย่างด้วย Performance Metrics API เพื่อให้แน่ใจว่าการเปลี่ยนแปลงของคุณได้ผลจริง
- สำรวจการเพิ่มประสิทธิภาพ URP เพิ่มเติมเพื่อเพิ่มพื้นที่ว่างด้านประสิทธิภาพ
การวัดผลอย่างต่อเนื่องและการทำซ้ำเป็นสิ่งสำคัญ การเพิ่มประสิทธิภาพบางอย่างอาจไม่ได้เป็นประโยชน์ต่อทุกโปรเจ็กต์เท่ากัน ดังนั้นให้ใช้ Performance Metrics API เพื่อให้ได้แนวคิดที่ชัดเจนเกี่ยวกับสิ่งที่ช่วยให้กรณีการใช้งานเฉพาะของคุณดีขึ้น
ขั้นตอนถัดไป: การพัฒนาทักษะ
พร้อมเจาะลึกแล้วยัง ลองดูแหล่งข้อมูลเหล่านี้
- คู่มือด้านประสิทธิภาพของ Unity สำหรับ Android XR - วิธีการใช้งานทีละขั้นตอนฉบับสมบูรณ์สำหรับฟีเจอร์ทั้งหมดที่กล่าวถึงในที่นี้ ที่นี่
- เริ่มต้นใช้งาน Unity และ Android XR - ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์และ เริ่มสร้าง
- เอกสารประกอบสำหรับนักพัฒนาแอป Android XR - คู่มือที่ครอบคลุมสำหรับฟีเจอร์ทั้งหมดของ Android XR features
-
ข่าวสารเกี่ยวกับผลิตภัณฑ์เรายินดีที่จะประกาศว่าการรองรับ Unreal Engine และ Godot อย่างเป็นทางการสำหรับ Android XR พร้อมให้บริการแล้ว นอกจากนี้ เรายังเปิดตัวเครื่องมือใหม่ที่ออกแบบมาเพื่อเพิ่มประสิทธิภาพการทำงานและเปิดใช้ความสามารถใหม่ๆ ของ XR ได้แก่ Android XR Engine Hub และ Android XR Interaction Framework
Luke Hopkins, Ryan Bartley • ใช้เวลาอ่าน 4 นาที -
ข่าวสารเกี่ยวกับผลิตภัณฑ์Android Studio Quail 2 มีเสถียรภาพแล้วและพร้อมให้คุณใช้ในเวอร์ชันที่ใช้งานจริง โดยจะเปลี่ยน IDE ของคุณด้วยเวิร์กโฟลว์แบบเอเจนต์ที่ทำงานพร้อมกัน การสร้างโปรไฟล์การรั่วไหลของหน่วยความจำแบบผสานรวม และการแก้ไขข้อขัดข้องที่คำนึงถึงบริบท
Amman Asfaw • ใช้เวลาอ่าน 3 นาที -
ข่าวสารเกี่ยวกับผลิตภัณฑ์ในเดือนมีนาคมที่ผ่านมา เราได้เปิดตัว Android Bench ซึ่งเป็นลีดเดอร์บอร์ด LLM สำหรับงานพัฒนา Android ในโลกจริง ตั้งแต่นั้นมา เราได้ปรับปรุงเกณฑ์มาตรฐานตามความคิดเห็นของคุณ ซึ่งรวมถึงการประเมินโมเดลแบบโอเพนเวท และเพิ่มมิติข้อมูลด้านต้นทุนและประสิทธิภาพลงในลีดเดอร์บอร์ด
Zoe Lopez-Latorre • ใช้เวลาอ่าน 3 นาที
รับข้อมูลเชิงลึกด้านการพัฒนา Android ล่าสุดส่งตรงถึงกล่องจดหมายของคุณ ทุกสัปดาห์