Geometry Engine ใน Gaming GPUs: ยูทิลิตี้และการใช้งาน

Geometry Engine ใน GPU สำหรับเล่นเกม

กราฟิกสามมิติอยู่กับเรามานานกว่าสองทศวรรษแล้ว และด้วย GPU ที่มีหน้าที่สร้างและส่งไปยังหน้าจอมอนิเตอร์ของเรา วันนี้พวกเขาเป็นชิ้นส่วนที่ซับซ้อนอย่างยิ่งที่ประกอบด้วยองค์ประกอบต่าง ๆ บางชิ้นใหม่และอื่น ๆ ที่อยู่ภายในมานานหลายปี หนึ่งที่เราจะกล่าวถึงในบทความนี้คือ Geometry Engine

ในขณะที่กราฟิกแบบเรียลไทม์ก้าวหน้าขึ้น GPU ก็เช่นกันและด้วยปัญหาใหม่ ๆ ดูเหมือนจะได้รับการแก้ไขหรือปัญหาเก่า ๆ จะขยายใหญ่ขึ้น ซึ่งหมายความว่าโซลูชันเก่าไม่มีประสิทธิภาพอีกต่อไปและต้องสร้างโซลูชันใหม่ กราฟิกเจเนอเรชันใหม่จะไม่เพียงแต่อิงจาก Ray Tracing เท่านั้น แต่ยังรวมถึงรูปทรงเรขาคณิตของฉากที่เพิ่มขึ้นอย่างมาก นี่คือที่มาของ Geometry Engine ซึ่งเป็นส่วนสำคัญในการปรับปรุง GPU ประสิทธิภาพในกระบวนทัศน์ใหม่นี้

ประวัติเล็กน้อยเพื่อล้างความสับสน

ตาย

ในอดีต Geometry Engine หรือ Geometry Engine นั้นอ้างอิงถึงฮาร์ดแวร์ที่รับผิดชอบการดำเนินการตามกระบวนการปรับแต่งของเรขาคณิตของฉากที่เกิดขึ้นก่อนการแรสเตอร์ นั่นคือก่อนที่รูปสามเหลี่ยมที่ประกอบเป็นฉากสามมิติจะถูกแปลงเป็นชิ้นส่วนพิกเซล

Geometry Engine เครื่องแรกเป็นผลิตผลของ Jim Clark ในช่วงต้นทศวรรษ 1980 และเป็นจุดเริ่มต้นของกราฟิกซิลิคอนในตำนาน ด้วยนวัตกรรมนี้ จึงสามารถย้ายการปรับแต่งฉาก 3 มิติจากมินิคอมพิวเตอร์ไปยังเวิร์กสเตชันที่มีขนาดและค่าใช้จ่ายเพียงเล็กน้อยจากรุ่นก่อน

จนกระทั่งช่วงปลายยุค 90 เกม 3D เริ่มได้รับความนิยม แต่การ์ด 3D แรกไม่มี Geometry Engine และพึ่งพา ซีพียู พลังในการคำนวณเรขาคณิตของฉาก มันไม่ได้จนกว่าพีซีจะเปิดตัวครั้งแรก NVIDIA GeForce ที่ GE ถูกรวมเข้ากับชิปกราฟิกอย่างสมบูรณ์ ถูกขนานนามว่า T&L โดยการตลาด NVIDIA

หลายปีที่ผ่านมาและการมาถึงของ Shaders Geometry Engine ในฐานะชิ้นส่วนของฮาร์ดแวร์ได้ถูกแทนที่อย่างสมบูรณ์ และตอนนี้ก็เป็น Shader Units ที่ดูแลมัน การเปลี่ยนแปลงนี้เกิดขึ้นจาก DirectX 10 เมื่อ Geometry Engine เนื่องจากฮาร์ดแวร์หายไปจาก NVIDIA และ เอเอ็มดี GPU แม้ว่าเมื่อเร็ว ๆ นี้ความสำคัญของมันได้ถูกนำไปใช้โดยหน่วยประเภทใหม่ที่รวมอยู่ในสถาปัตยกรรมขั้นสูงที่สุดและนี่คือสิ่งที่เราจะพูดถึงในบทความนี้

ตัวประกอบดั้งเดิม

จุดยอด Primitivas Fragmentos

องค์ประกอบในฉากเกมสามมิติจะแสดงโดยใช้สามเหลี่ยมเพื่อประกอบองค์ประกอบต่างๆ ของฉาก ซึ่งประกอบขึ้นจากจุดยอด ตอนนี้ ขั้นแรกของไปป์ไลน์กราฟิกหลังจากตัวประมวลผลคำสั่งอ่านรายการหน้าจอคือ Vertex Shader และชื่อของมันเกิดจากการที่สิ่งที่มันทำนั้นใช้งานได้กับจุดยอด และมันไม่ได้ทำกับ primitives หรือ triangles ดังนั้นอิสระ .

เป็นหน่วยที่เรียกว่า Primitive Assembler ซึ่งมีหน้าที่ในการรวมจุดยอดเหล่านี้ ไม่เพียงแต่สร้างสามเหลี่ยมเท่านั้น แต่ยังสร้างแบบจำลองต่างๆ ที่ประกอบเป็นฉากขึ้นใหม่ด้วยการรวมจุดยอดที่แตกต่างกันเข้าด้วยกัน Primitive Assembler เป็นชิ้นส่วนของฟังก์ชันแบบตายตัวใน GPU ทั้งหมดที่ทำงานฟังก์ชันนี้โดยอัตโนมัติโดยไม่ต้องใช้โค้ดในรายการหน้าจอ ธรรมดาและเรียบง่าย ทุกอย่างที่ทำงานบนสเตจ Vertex Shader ภายในไปป์ไลน์ 3 มิติจะถูกส่งไปยัง Primitive Assembler และจากที่นั่นไปยังกระบวนการถัดไปในสเตจ

Teselacion

ในกรณีที่มีหน่วยเทสเซลเลชันใน GPU ซึ่งมีหน้าที่แบ่งย่อยจุดยอด Primitive Assembler จะทำงานหลังจากกระบวนการเทสเซลเลชัน เนื่องจากการกำหนดค่าใหม่ของจุดยอดต้องใช้การคำนวณแบบรวมนอกเหนือจากจุดยอดที่จะประกอบเป็น องค์ประกอบต่าง ๆ ของฉาก

ปัตตาเลี่ยนและการกำจัดเรขาคณิตฟุ่มเฟือย

เครื่องยนต์รูปทรงเรขาคณิตคัด

ในฉากสามมิติ มีภาพกราฟิกดั้งเดิมหรือสามเหลี่ยมมากมายในฉาก อย่างไรก็ตาม ผู้เล่นบางคนไม่สามารถมองเห็นได้ทั้งหมดในแต่ละเฟรม ดังนั้นจึงจำเป็นต้องละทิ้งรูปทรงเรขาคณิตที่มองไม่เห็นทั้งหมดในแต่ละเฟรมก่อนขั้นตอนการแรสเตอร์ เนื่องจากทุกจุดยอดที่มองไม่เห็นแต่ที่ไม่ทิ้งคือจุดยอดที่จะถูกแรสเตอร์ เท็กซ์เจอร์ ในภายหลัง และถึงแม้จะถูกทิ้งในภายหลังเพราะมีอีกพิกเซลหนึ่งที่มีลำดับความสำคัญสูงกว่าเมื่อวาด

เหตุผล? โปรดทราบว่าภายในไพพ์ไลน์ 3 มิติแบบเดิม Vertex Shader จะดำเนินการสำหรับแต่ละจุดยอดในฉาก แต่ Pixel Shader สำหรับแต่ละจุดยอดและจำนวนพิกเซลต่อสามเหลี่ยมมักจะมีลำดับความสำคัญมากกว่า นี่คือเหตุผลสำคัญที่ต้องแยกแยะเรขาคณิตที่มองไม่เห็นในฉากออก สำหรับสิ่งนี้จะใช้สองอัลกอริธึม:

  • สิ่งแรกตรวจพบจุดยอดนอกขอบเขตการมองเห็นของผู้เล่นและเรียกว่า View Frustum Culling
  • อย่างที่สองจะกำจัดสิ่งที่อยู่ภายในขอบเขตการมองเห็น แต่ที่ถูกซ่อนโดยองค์ประกอบที่ใหญ่กว่าและใกล้กว่าอื่นๆ และเรียกว่า Back Face Culling

ตอนนี้ กระบวนการ Culling สามารถทำได้ผ่านฟังก์ชันคงที่ และสิ่งที่ทำคือกำจัดรูปสามเหลี่ยมและแม้แต่วัตถุที่มองไม่เห็นอย่างสมบูรณ์ แต่จะเกิดอะไรขึ้นเมื่อมองเห็นวัตถุเพียงบางส่วน ขึ้นอยู่กับวิธีการใช้ฮาร์ดแวร์ มันไม่ได้กำจัดหรือกำจัดวัตถุอย่างสมบูรณ์

Geometry Engine ใน GPU ปัจจุบันคืออะไร

เครื่องยนต์เรขาคณิตแรเงาตาข่าย LOD

เมื่ออธิบายปัญหาใน Primitive Assembler และ Clipper แล้ว เราต้องพูดถึงว่า Geometry Engine คืออะไร ซึ่งไม่ใช่อะไรมากไปกว่าฮาร์ดแวร์ชิ้นใหม่ที่รวบรวมความสามารถเช่นเดียวกับ Primitive Assembler และ Clipper แต่ด้วย ความแม่นยำที่มากขึ้น เนื่องจากมีความสามารถในการขจัดเรขาคณิตฟุ่มเฟือย แต่อยู่ที่ระดับจุดยอด ซึ่งหมายความว่าหากวัตถุอยู่นอกหน้าจอบางส่วนหรือไม่ได้ซ่อนไว้ทั้งหมด สิ่งที่ทำคือลบจุดยอดที่มองไม่เห็นและสร้างเฉพาะส่วนที่มองเห็นขึ้นใหม่เท่านั้น

ยูทิลิตี้อื่นๆ ของ Geometry Engine เกี่ยวข้องกับการสร้างระดับรายละเอียดของวัตถุในฉาก โดยสิ่งเหล่านี้มีระดับรายละเอียดที่แตกต่างกัน ระดับของรายละเอียด หรือ LOD ในภาษาอังกฤษ ตามระยะทาง Geometry Engine มีความสามารถในการลบจุดยอดที่มองไม่เห็นอย่างชาญฉลาดตามระยะทาง และรักษารูปร่างดั้งเดิมของวัตถุไว้ ให้คิดว่านี่เป็นการทดสอบแบบย้อนกลับ ซึ่งแทนที่จะเพิ่มจำนวนจุดยอดเพื่อสร้างรายละเอียด สิ่งที่คุณทำคือลดจุดยอดเหล่านั้น

สิ่งนี้ก็สำคัญเช่นกันเมื่อเผชิญกับปัญหา over-tessellation ซึ่งต้องคำนึงว่าเมื่อจุดยอดถูกเทสเซลลาแล้ว GPU ไม่มีหลักฐานตำแหน่งที่แท้จริงในพื้นที่เฟรม ดังนั้นปัญหาจึงเกิดขึ้นซึ่งก็คือ การทดสอบเกิน ซึ่งก็คือ GPU คำนวณจุดยอดมากขึ้นในวัตถุในระยะทางที่มองไม่เห็น แต่มีข้อมูลอยู่ที่นั่น Geometry Engine ที่มีการเข้าถึงข้อมูลของเรขาคณิตของฉากสามารถกำจัดได้อย่างง่ายดาย อย่าลืมว่า Clipper แบบดั้งเดิมจะลบเฉพาะสิ่งที่อยู่นอกภาพหรือซ่อนไว้เท่านั้น

Geometry Engine ใน DX12 Ultimate ไปป์ไลน์ใหม่

DX12 สุดยอด

ด้วย DirectX 12 Ultimate ส่วนของไปป์ไลน์ 3D ก่อนการแรสเตอร์จะเปลี่ยนแปลงโดยสิ้นเชิง เนื่องจากส่วนที่ดีของฟังก์ชันเปลี่ยนจากการทำงานผ่านฟังก์ชันคงที่ไปเป็นการทำงานในหน่วย Shader ของ GPU ตัวอย่างเช่น เทสเซลเลชันจะไปถึงจุดที่จะหยุดดำเนินการในยูนิตฟังก์ชันคงที่เพื่อส่งผ่านไปยังยูนิตดังกล่าว ดังนั้นยูนิตดังกล่าวจะหายไป

ในกรณีของ Geometry Engine สิ่งนี้จะไม่หายไป แต่เป็นเพียงสิ่งเดียวเท่านั้นที่สามารถเข้าถึงข้อมูลเกี่ยวกับวิธีการเชื่อมต่อจุดยอดซึ่งกันและกัน อัลกอริธึมใดๆ ที่เกี่ยวข้องกับการเข้าถึงรายการเรขาคณิตของฉากหมายความว่าต้องผ่าน Geometry Engine ซึ่งเป็นกลไกที่ควบคุมรายการจุดยอดและความสัมพันธ์ซึ่งกันและกัน

เมื่อมองไปข้างหน้า สิ่งหนึ่งที่เราจะเห็นคือการสร้างโครงสร้าง BVH สำหรับ Ray Tracing จาก GPU ชิ้นส่วนของฮาร์ดแวร์ที่จะพัฒนาสำหรับงานนี้คือ Geometry Engine ซึ่งวันนี้มีการเข้าถึงแคช L2 ของ GPU ซึ่งข้อมูลของจุดยอดถูกเก็บไว้ชั่วคราว จำนวนหน่วยความจำภายใน GPU คาดว่าจะเพิ่มขึ้นอย่างมากในปีต่อๆ ไป