tessellation ฮาร์ดแวร์ทำงานอย่างไร


34

ฉันแค่อยากให้ใครบางคนอธิบายอย่างชัดเจนเกี่ยวกับวิธีการทำงานของฮาร์ดแวร์ tessellation เนื่องจากมันเป็นคำศัพท์ใหม่ของ DX11

ขอบคุณ

คำตอบ:


42

ฉันจะให้รุ่น "ง่าย" ให้คุณและให้คนอื่นกรอกรายละเอียดของคุณหากคุณสนใจ :)

โดยทั่วไปมีสองวิธีในการจำลองวัตถุ 3 มิติ สิ่งแรกคือสิ่งที่คุณไม่เห็นในเกมจำนวนมากและมันเกี่ยวข้องกับการใช้เส้นโค้งที่กำหนดอย่างแม่นยำทางคณิตศาสตร์เพื่อกำหนดรูปร่างของวัตถุ ใช้วิธีนี้ระดับของรายละเอียดคือ (พูดจริง) "ไม่มีที่สิ้นสุด" ยกตัวอย่างเช่น ทรงกระบอกสามารถนิยามได้ในศัพท์ทางคณิตศาสตร์อย่างง่าย: สิ่งที่คุณต้องรู้คือรัศมีที่ปลายและความยาวของทรงกระบอก ในแง่ของรูปทรงเรขาคณิตข้อมูลนี้เป็นสิ่งที่เราต้องการเพื่อสร้างรูปทรงกระบอกในฉาก 3 มิติ ยิ่งไปกว่านั้นเราสามารถปรับขนาดกระบอกสูบให้ใหญ่ขึ้นหรือเล็กลงได้อย่างง่ายดาย สิ่งที่เราต้องทำคือรักษาอัตราส่วนของความยาวต่อรัศมี เราสามารถใช้สูตรเดียวกันเพื่อแสดงรูปทรงเรขาคณิต แต่มีพารามิเตอร์ต่างกัน เราสามารถเป็นตัวแทนของพรู ("โดนัท" รูปร่าง) ได้อย่างง่ายดายเช่นกัน: เราเพียงแค่ต้องรู้ว่ารัศมีด้านในและรัศมีด้านนอก จากนั้นเราสามารถคำนวณเส้นผ่านศูนย์กลาง (และรัศมี) ของร่างโดนัท ("เค้ก") โดยการลบรัศมีภายในออกจากรัศมีด้านนอก ร่างกายวงกลมล้อมรอบส่วนโค้งที่กำหนดโดยรัศมีด้านใน คำจำกัดความ 3D ประเภทนี้ดีเพราะค่อนข้างง่าย (ส่งผลให้เป็นแบบจำลองไฟล์ขนาดเล็ก) และไม่มีข้อ จำกัด อย่างมีนัยสำคัญกับระดับรายละเอียด ข้อเสียคือฮาร์ดแวร์วิดีโอของวันนี้ไม่ได้ออกแบบมาเพื่อดำเนินการกับแบบจำลองประเภทเหล่านี้ได้อย่างมีประสิทธิภาพ (ถ้าเลย) ร่างกายวงกลมล้อมรอบส่วนโค้งที่กำหนดโดยรัศมีด้านใน คำจำกัดความ 3D ประเภทนี้ดีเพราะค่อนข้างง่าย (ส่งผลให้เป็นแบบจำลองไฟล์ขนาดเล็ก) และไม่มีข้อ จำกัด อย่างมีนัยสำคัญกับระดับรายละเอียด ข้อเสียคือฮาร์ดแวร์วิดีโอของวันนี้ไม่ได้ออกแบบมาเพื่อดำเนินการกับแบบจำลองประเภทเหล่านี้ได้อย่างมีประสิทธิภาพ (ถ้าเลย) ร่างกายวงกลมล้อมรอบส่วนโค้งที่กำหนดโดยรัศมีด้านใน คำจำกัดความ 3D ประเภทนี้ดีเพราะค่อนข้างง่าย (ส่งผลให้เป็นแบบจำลองไฟล์ขนาดเล็ก) และไม่มีข้อ จำกัด อย่างมีนัยสำคัญกับระดับรายละเอียด ข้อเสียคือฮาร์ดแวร์วิดีโอของวันนี้ไม่ได้ออกแบบมาเพื่อดำเนินการกับแบบจำลองประเภทเหล่านี้ได้อย่างมีประสิทธิภาพ (ถ้าเลย)

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

รูปภาพของกระบอกที่มีรูปสามเหลี่ยม

หรือสำหรับพรู:

รูปภาพทอรัสแบบสามเหลี่ยม

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

ปัญหาอีกประการหนึ่งคือความซับซ้อนทางเรขาคณิต: ในขณะที่คำจำกัดความที่อิงตามส่วนโค้งของทรงกระบอกนั้นง่ายมาก (รัศมีและความยาว) คำจำกัดความของ tessellated น่าจะรวมสามเหลี่ยมหลายร้อยรูป ดังนั้นไฟล์โมเดล tessellated ของเราจะใหญ่ขึ้นมาก สมมติว่าเรามีแบบจำลองทางคณิตศาสตร์ที่กำหนดสิ่งที่ซับซ้อนเหมือนบุคคล ไฟล์โมเดลของเราอาจมีขนาดเพียง 24kb เมื่อโมเดลนั้นถูก tessellated แล้วไฟล์ที่ได้อาจเป็น 24mb (24,000kb) นั่นเป็นข้อแตกต่าง

Tessellation ของฮาร์ดแวร์ใช้ประโยชน์จากรูปทรงเรขาคณิตเพื่อทำการสอนด้วยฮาร์ดแวร์ที่ช่วยในเวลาจริง (หรือในเวลาจริงเกือบ) โดยพื้นฐานแล้วมันมีกลไกในการใช้แบบจำลอง 3 มิติที่กำหนดทางคณิตศาสตร์และแปลงเป็นรูปแบบ tessellated ที่การ์ดแสดงผลสามารถแสดงผลได้อย่างมีประสิทธิภาพ ตามเนื้อผ้าผู้พัฒนาเกมทำการแสดงที่สตูดิโอและจัดส่งแบบจำลอง tessellated กับเกม การสอนฮาร์ดแวร์ช่วยให้เราสามารถเลื่อนขั้นตอนนี้ไปได้จนกว่าเกมจะทำงานบนคอมพิวเตอร์ของผู้เล่น สิ่งนี้มีประโยชน์อย่างมาก:

  1. ขนาดของเนื้อหา 3D ของเกมจะลดลงอย่างมาก (ดิสก์น้อยลงหรือการดาวน์โหลดที่น้อยลงและจำเป็นต้องใช้พื้นที่ฮาร์ดดิสก์น้อยลง)

  2. เราสามารถควบคุมระดับของรายละเอียดในเวลาจริง เรากำลังทำงานบนสัตว์ร้ายที่ทันสมัยของเครื่องเกมหรือไม่? ถ้าเป็นเช่นนั้นเราสามารถทำการทดสอบได้โดยใช้รายละเอียดในระดับสูงมาก เรากำลังใช้งานแล็ปท็อปรุ่นเก่าที่มีกราฟิกในตัวหรือไม่? ไม่มีปัญหา; เราสามารถลดระดับรายละเอียดเพื่อเพิ่มประสิทธิภาพ

นั่นคือส่วนสำคัญของมัน อาจไม่ถูกต้อง 100% เนื่องจากฉันไม่ใช่โปรแกรมเมอร์ 3 มิติ แต่ควรให้ความคิดที่ดีขึ้นเกี่ยวกับความยุ่งยากทั้งหมดเกี่ยวกับ :)

ไชโย
ไมค์


ว้าว ... เยี่ยมเลย! ภาพรวมที่ยาวที่สุดที่ฉันเคยอ่าน: P

6
มีอีกสิ่งหนึ่งที่กำหนดระดับของการจัดการที่ต้องการ - ขนาดของวัตถุบนหน้าจอ รันไทม์ tessellation ช่วยให้คุณมีรายละเอียดในระดับที่ถูกต้องทุกที่โดยไม่ต้องสร้างวัตถุหลายรุ่น
อดัม

นั่นเป็นบิตของ CPU หรือไม่
jcora

@Bane คุณหมายถึง GPU มากหรือเปล่า CPU สามารถดูแลได้น้อยลง
Nate Zaugg

0

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


เครื่องมือและท่อการผลิตจะต้องมีการคิดใหม่และสร้างขึ้นมาใหม่ (เนื่องจากฉันแน่ใจว่าคุณรู้ดีกว่า @SamHocevar มากที่สุดดังนั้นความคิดเห็นนี้ไม่ได้มีจุดมุ่งหมายเพื่อคุณ) และฮาร์ดแวร์ใหม่จะต้องมีเปอร์เซ็นต์ที่สำคัญ
Rob Craig

@ RobCraig โปรดทราบว่าฉันเพิ่งแก้ไขการสะกดคำในความคิดเห็นนั้น ฉันไม่ใช่ผู้เขียนดั้งเดิม
sam hocevar

@ SamHocevar Yup ฉันคิด - ขอบคุณสำหรับการชี้แจงแม้ว่า!
Rob Craig
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.