คุณเคยสงสัยหรือไม่ว่ารูปภาพที่คุณเห็นบนหน้าจอของพีซีคอนโซลหรืออุปกรณ์ PostPC ของคุณถูกเก็บไว้ที่ใด? ในบัฟเฟอร์ภาพ แต่ธรรมชาติของพวกมันคืออะไรและประกอบด้วยอะไร? มีผลต่อประสิทธิภาพของพีซีของเราอย่างไรมีรูปแบบการเรนเดอร์ฉากใดบ้างและมีความแตกต่างกันอย่างไร
A GPU สร้างข้อมูลจำนวนมหาศาลต่อวินาทีในรูปแบบของภาพหลายภาพที่ส่งผ่านเรตินาของเราอย่างรวดเร็วจากโทรทัศน์ขนาดของภาพเหล่านี้และข้อมูลที่จัดเก็บและประมวลผลนั้นมีขนาดใหญ่มาก บัฟเฟอร์รูปภาพเนื่องจากการจัดเก็บใน VRAM เป็นสาเหตุหนึ่งที่ต้องใช้หน่วยความจำแบนด์วิธสูง
บัฟเฟอร์ภาพคืออะไร?
บัฟเฟอร์ภาพเป็นส่วนหนึ่งของ VRAM ที่เก็บข้อมูลของแต่ละพิกเซลบนหน้าจอของเฟรมถัดไปบัฟเฟอร์นี้จะถูกเก็บไว้ใน VRAM และสร้างขึ้นโดย GPU ทุกๆ x มิลลิวินาที
GPU ปัจจุบันทำงานร่วมกับบัฟเฟอร์ภาพอย่างน้อยสองภาพโดยในตัวแรก GPU จะเขียนเฟรมถัดไปที่จะเห็นบนหน้าจอส่วนที่สองคือเฟรมก่อนหน้านี้ที่สร้างขึ้นแล้วซึ่งจะถูกส่งไปยังหน้าจอ
Backbuffer หรือบัฟเฟอร์ด้านหลังเรียกว่าสิ่งที่สร้างขึ้นโดย GPU และ Frontbuffer หรือบัฟเฟอร์ด้านหน้าคือสิ่งที่อ่านโดยไดรเวอร์การแสดงผลและส่งไปยังเอาต์พุตวิดีโอ ในขณะที่บัฟเฟอร์ด้านหน้าจะเก็บค่าของส่วนประกอบสีแดงสีเขียวและสีน้ำเงินสำหรับแต่ละพิกเซลในบัฟเฟอร์ด้านหลังจะสามารถเก็บองค์ประกอบที่สี่อัลฟาซึ่งเก็บค่าความโปร่งใสหรือกึ่งโปร่งใสของพิกเซล
ไดรเวอร์จอแสดงผลคืออะไร?
ไดรเวอร์การแสดงผลเป็นชิ้นส่วนของฮาร์ดแวร์ที่พบใน GPU ซึ่งมีหน้าที่อ่านบัฟเฟอร์ภาพใน VRAM และแปลงข้อมูลเป็นสัญญาณที่เอาต์พุตวิดีโอไม่ว่าจะเป็นประเภทใดก็สามารถเข้าใจได้
ในระบบเช่น NVIDIA จี-ซิงค์, เอเอ็มดี FreeSync / Adaptive Sync และในทำนองเดียวกันตัวควบคุมการแสดงผลไม่เพียง แต่ส่งข้อมูลไปยังจอภาพหรือโทรทัศน์เท่านั้น แต่ยังควบคุมเมื่อแต่ละเฟรมเริ่มต้นและสิ้นสุด
บัฟเฟอร์รูปภาพและการเรนเดอร์ 3 มิติแบบดั้งเดิม
แม้ว่าหน้าจอของเราจะเป็นแบบ 2 มิติ แต่มีการแสดงฉาก 3 มิติแบบเรียลไทม์มากว่ายี่สิบปีแล้ว ในการทำสิ่งนี้จำเป็นต้องแบ่งบัฟเฟอร์ด้านหลังออกเป็นสองบัฟเฟอร์ที่แตกต่างกัน:
- บัฟเฟอร์สี: ที่ซึ่งระบุค่าของสีและส่วนประกอบอัลฟาของแต่ละพิกเซล
- บัฟเฟอร์ความลึก: ที่ซึ่งค่าความลึกของแต่ละพิกเซลจะชี้
เมื่อแสดงฉาก 3 มิติเราจะพบว่าพิกเซลหลายพิกเซลมีค่าที่แตกต่างกันในบัฟเฟอร์ความลึก แต่อยู่ในตำแหน่งเดียวกันในอีกสองมิติซึ่งเป็นจุดที่พิกเซลส่วนเกินเหล่านั้นจะต้องถูกทิ้งไปเนื่องจากผู้ชมมองไม่เห็นสิ่งนี้ การทิ้งทำได้โดยการเปรียบเทียบตำแหน่งของแต่ละพิกเซลในความลึกบัฟเฟอร์ทิ้งกับพวกเขาที่อยู่ไกลที่สุดจากกล้อง
บัฟเฟอร์ความลึก
บัฟเฟอร์ความลึกหรือที่รู้จักกันดีในชื่อ Z-Buffer เก็บระยะห่างของแต่ละพิกเซลของฉาก 3 มิติตามมุมมองหรือกล้องซึ่งสามารถสร้างขึ้นได้ในช่วงเวลาหนึ่งในสองช่วงเวลานี้
- หลังจากขั้นตอนแรสเตอร์และก่อนขั้นตอนการสร้างพื้นผิว
- หลังจากขั้นตอนพื้นผิว
เนื่องจากขั้นตอนการคำนวณที่หนักหน่วงที่สุดคือ Pixel / Fragment Shader ความจริงของการสร้าง Z-Buffer หลังจากการสร้างพื้นผิวของฉากนั้นเกี่ยวข้องกับการคำนวณค่าสีดังนั้น Pixel หรือ Fragment Shader จำนวนหลายแสนและแม้แต่ล้านพิกเซลจึงไม่สามารถมองเห็น .
สิ่งที่คู่กันของการทำก่อนพื้นผิวคือการไม่มีค่าของสีและความโปร่งใสช่องอัลฟาเราจะพบว่าพิกเซลหนึ่งพิกเซลหลังจากโปร่งใสอีกอันจะถูกทิ้งไว้ล่วงหน้าทำให้ไม่สามารถมองเห็นได้ในฉากสุดท้าย
เพื่อหลีกเลี่ยงปัญหานี้นักพัฒนามักจะแสดงฉากเป็นสองส่วนส่วนแรกจะไม่แสดงผลวัตถุที่อยู่ด้านหลังวัตถุโปร่งใสหรือกึ่งโปร่งใสในขณะที่ส่วนที่สองแสดงเฉพาะวัตถุเหล่านั้น
การบัฟเฟอร์รูปภาพและการแสดงผลแบบขี้เกียจ
ความแปลกใหม่อย่างหนึ่งที่พบเห็นในช่วงปลายยุค 2000 เมื่อการแสดงผลกราฟิกคือการเรนเดอร์รอการตัดบัญชีหรือ Deferred Rendering ซึ่งประกอบด้วยการเรนเดอร์ฉากแรกที่สร้างชุดของบัฟเฟอร์เพิ่มเติมที่เรียกว่า G-Buffer จากนั้นในขั้นตอนต่อไปจะคำนวณแสงของ ฉาก.
ความจริงที่ว่าต้องการบัฟเฟอร์ภาพหลาย ๆ ภาพจะเพิ่มความต้องการหน่วยความจำให้ทวีคูณดังนั้นจึงต้องใช้หน่วยความจำจำนวนมากสำหรับการจัดเก็บรวมถึงอัตราการเติมข้อมูลจึงมีแบนด์วิดท์ที่สูงขึ้น
แต่การเรนเดอร์แบบขี้เกียจได้ทำขึ้นเพื่อแก้ไขปัญหาด้านประสิทธิภาพของการแรสเตอร์แบบคลาสสิกซึ่งการเปลี่ยนแปลงค่าในแต่ละพิกเซลไม่ว่าจะเป็นเพราะความส่องสว่างหรือโครเมียมเกี่ยวข้องกับการเขียนซ้ำในบัฟเฟอร์ภาพซึ่งแปลเป็นจำนวนมาก ข้อมูลที่จะส่งใน VRAM
เนื่องจากการเรนเดอร์ที่ขี้เกียจทำให้ต้นทุนของจำนวนไฟในฉากเปลี่ยนไปจากเลขชี้กำลังเป็นลอการิทึมซึ่งช่วยลดต้นทุนการคำนวณเมื่อแสดงฉากที่มีแหล่งกำเนิดแสงหลายแหล่ง
ภาพบัฟเฟอร์เป็นแผนที่เงา
เนื่องจากการแรสเตอร์ไม่ดีในการคำนวณแสงทางอ้อมจึงต้องหาเทคนิคต่างๆเพื่อสร้างแผนที่เงาในนั้น
วิธีที่ง่ายที่สุดคือการเรนเดอร์ฉากโดยใช้แหล่งกำเนิดแสงหรือเงาราวกับว่าเป็นกล้องถ่ายรูป แต่แทนที่จะสร้างภาพที่สมบูรณ์จะสร้างเฉพาะบัฟเฟอร์ความลึกเท่านั้นซึ่งจะใช้เป็นแผนที่เงาในภายหลัง
ระบบนี้จะหายไปในอีกไม่กี่ปีข้างหน้าเนื่องจากการเพิ่มขึ้นของ Ray Tracing ซึ่งช่วยให้สามารถสร้างเงาแบบเรียลไทม์ได้อย่างแม่นยำมากขึ้นโดยใช้พลังงานในการคำนวณน้อยลงและไม่จำเป็นต้องสร้างแผนที่เงาขนาดใหญ่ใน VRAM