Three.js Post-Processing: เจาะลึก 192 การทดลองบนเดสก์ท็อป
เผยผลทดสอบ Three.js post-processing กว่า 192 ครั้งบนฮาร์ดแวร์ RTX 5070 Ti เพื่อวัดผลกระทบด้านประสิทธิภาพนอกเหนือจากตัวเลข FPS

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- รันการทดลองสด 192 ครั้งครอบคลุม 3 ฉากและ 64 เงื่อนไขบนเดสก์ท็อป
- ใช้ฮาร์ดแวร์ RTX 5070 Ti, Ryzen 9 9950X และ Chromium 156
- พบว่าการเปิด bloom ที่ความเข้มศูนย์ยังคงสร้าง draw calls เพิ่มขึ้น 16 ครั้ง
- ให้ข้อมูลช่วงเวลาแบบโปร่งใสแทนตารางตัวเลขตายตัว
การเปิดใช้งานเอฟเฟกต์ post-processing มักทำให้เบราว์เซอร์แสดงผลอยู่ที่ราว 60 เฟรมต่อวินาที แต่นั่นไม่ได้หมายความว่าภาระงานเบื้องหลังของการเรนเดอร์จะยังคงเดิม นักพัฒนา Alicia ได้ทำการทดสอบใหม่โดยรันหน้าเว็บสดถึง 192 ครั้ง ครอบคลุมฉากต่างๆ 3 ฉาก ทั้งเอฟเฟกต์ N8AO, bloom, tone mapping, ลำแสง volumetric, การสะท้อน และความละเอียดของ render-buffer เพื่อดูผลลัพธ์ที่แท้จริงนอกเหนือจากตัวเลข FPS ทั่วไป
ผลลัพธ์ที่มีประโยชน์ที่สุดชิ้นหนึ่งคือการควบคุมเชิงลบ (negative control) ซึ่งพบว่าเอฟเฟกต์ bloom ที่ตั้งค่าความเข้มเป็นศูนย์ให้ภาพ Reliquary ออกมาเหมือนกับการถอด bloom ออกไปเลยทุกประการ แต่กลับยังคงสร้าง draw calls เพิ่มขึ้นมาถึง 16 ครั้งโดยไม่จำเป็น นอกจากนี้ ผลลัพธ์ด้านเวลายังแสดงให้เห็นคำเตือนสำคัญว่า การรันซ้ำบนเดสก์ท็อปบางครั้งมีความแปรปรวนสูงกว่าผลกระทบเล็กน้อยที่พยายามวัดเสียอีก บทความนี้จึงรักษาช่วงความแปรปรวนเหล่านี้ไว้ให้มองเห็นได้ เพื่อเสนอการวัดผลที่ทำซ้ำได้จริงแทนที่จะเป็นตารางมิลลิวินาทีแบบครอบจักรวาล

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
จุดเริ่มต้นของการทดสอบอ้างอิงจากโปรเจกต์ Dioramas ที่คอมมิต 868539f โดยปรับแต่งหน้า Reliquary และ Kōen เพื่อตรึงกล้องตัวแรกและสถานะฉากไว้ ฉาก Reliquary มีพื้นผิวสะท้อนแสงและแสง volumetric ส่วน Kōen มีต้นบอนไซและฉากหลังที่สว่างจ้าแตกต่างกันอย่างสิ้นเชิง นอกจากนี้ยังมีฉากที่สามที่วางอินสแตนซ์ต้นไม้ Houdini 1,000 ต้นในฉาก WebGL แยกต่างหาก โดยยังคงสี vertex เชิงวินิจฉัยไว้ทั้งหมด
สภาพแวดล้อมฮาร์ดแวร์ที่ใช้ในการทดสอบประกอบด้วยการ์ดจอ RTX 5070 Ti ที่มีหน่วยความจำ 16,303 MiB, โปรเซสเซอร์ Ryzen 9 9950X, ไดรเวอร์ NVIDIA 617.42 และ Windows บิิลด์ 26300.9711 ทำงานบนเบราว์เซอร์ Chromium 156 ผ่านแบ็กเนนด์ ANGLE's D3D11 WebGL2 โดยมีการพินเวอร์ชันของไลบรารี Three.js ไว้ที่ 0.186.1, postprocessing ที่ 6.39.5 และ n8ao ที่ 2.0.1 ในไฟล์ล็อก
การวิเคราะห์เพิ่มเติม: การทดสอบในลักษณะนี้นับว่ามีความสำคัญอย่างยิ่งสำหรับนักพัฒนาเว็บกราฟิกยุคใหม่ เนื่องจากไลบรารีอย่าง Three.js มีการเพิ่มฟีเจอร์ post-processing ที่ซับซ้อนขึ้นเรื่อยๆ การทราบต้นทุนที่แท้จริงของแต่ละเอฟเฟกต์ (เช่น Draw Calls ที่เพิ่มขึ้นแม้ปิดการใช้งานฟังก์ชันหลัก) ช่วยให้วิศวกรสามารถตัดสินใจปรับแต่งประสิทธิภาพบนเดสก์ท็อปและอุปกรณ์พกพาได้อย่างแม่นยำยิ่งขึ้น แทนที่จะคาดเดาจากอัตราเฟรมเรตเพียงอย่างเดียว
ชุดการทดสอบทั้งสามชุดมีจำนวนรวมกันถึง 92,160 เฟรม RAF ที่วัดผล และมีตัวอย่าง GPU ที่ผ่านการยอมรับ 11,520 ตัวอย่าง ครอบคลุม 64 เงื่อนไข โดยมีการรีโหลดซ้ำเงื่อนไขละ 3 ครั้ง ซึ่งการรีโหลดครั้งที่สองจะสลับลำดับเงื่อนไขย้อนกลับ และครั้งที่สามจะทำการหมุนลำดับใหม่ทั้งหมด เพื่อให้มั่นใจว่าข้อมูลที่ได้มีความน่าเชื่อถือและปราศจากข้อผิดพลาดจากการจับภาพเรนเดอร์
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น