ฮัลล์โดเมนและรูปทรงเรขาคณิตใช้สำหรับทำอะไร?


21

ฉันทำส่วนแบ่งการเขียนโปรแกรมเกมสามมิติสำหรับนายจ้าง (อดีต) ของฉันแล้วและในเอ็นจิ้นกำหนดเองของฉันสำหรับเกมอินดี้ของฉันเอง

เริ่มแรกฉันเริ่มด้วย Direct3D 9 และ D3DX9 ซึ่งทำทุกอย่างให้ฉันและไม่ต้องการให้ฉันคิดในแง่ของความแตกต่างทั้งหมด

หลังจากนั้นฉันเขียน Direct3D 9 shader ครั้งแรกของฉัน แต่ส่วนใหญ่ใช้ shader ง่าย ๆ สำหรับทุกสิ่งที่ฉันทำ

ในการทำซ้ำเกมเอ็นจิ้นล่าสุดของฉันฉันย้ายไปที่ Direct3D 11 และด้วยการที่ฉันสร้างเฉดสีมากมาย ฉันทำสกิน GPU, อนุภาคที่คำนวณจาก GPU, แสงจำนวนมากและเอฟเฟกต์การประมวลผลทั้งหมดใน GPU สิ่งที่เจ๋งจริงๆ

จนถึงตอนนี้ฉันเพิ่งใช้จุดสุดยอดและพิกเซล / ชิ้นส่วน แม้ว่าจะยังมีอีกหลายสิ่งที่ฉันยังไม่ได้ทำ แต่ฉันเชื่อว่าฉันมีความรู้ที่ดีเกี่ยวกับสิ่งที่ยอดและพิกเซล / ชิ้นส่วนเงาทำและวิธีการทั้งหมดที่เหมาะกับไปป์ไลน์ 3D ทั้งหมด

ติดตามความคืบหน้าของการพัฒนาเมื่อเร็ว ๆ นี้ฉันเริ่มให้ความสนใจกับขั้นตอนการสร้างภาพที่ใหม่กว่า นั่นคือ Geometry Shader และใหม่กว่าคือ Hull และ Domain shaders

ฉันไม่เคยใช้ขั้นตอนเหล่านี้ แต่จากสิ่งที่ฉันรู้ Geometry shader หากเปิดใช้งานจะทำงานหลังจากจุดยอด shader หนึ่งครั้งสำหรับแต่ละจุดสุดยอดที่แปลงสภาพแล้ว และสร้างรายการใหม่ (ซึ่งฉันเดาว่ากลับไปที่จุดเริ่มต้นของท่อส่งก๊าซ?)

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

ในส่วนของฮัลล์และโดเมนนั้นดูเหมือนว่าพวกมันเกี่ยวข้องกับ tessellation (การสร้างพื้นผิวที่เรียบเนียนออกจากพื้นผิวที่ขรุขระ?) และต้องใช้ร่วมกันหรือไม่ คำว่า "patch" ก็ดูเหมือนจะเป็นเรื่องธรรมดาที่นี่

ใครบ้างที่จะอธิบายให้ฉันฟังในแง่ของการปฏิบัติสิ่งเหล่านี้คืออะไรสำหรับ shader ระยะใหม่พวกเขาเข้ากับท่อ 3D และในกรณีใดที่ฉันควรพิจารณาใช้


ฉันคิดว่าคุณกำลังถามวิธีที่ผิด - มากกว่า "สิ่งที่พวกเขาใช้สำหรับ" คุณควรจะถามว่า "พวกเขาทำอะไร" - ถ้าคุณเข้าใจทรัพยากรที่ได้รับ (และแนวคิดภายใต้ประทุน) เพียงท้องฟ้าเท่านั้นที่ จำกัด สิ่งที่คุณเป็น จริงสามารถทำได้กับพวกเขา
พุธที่

@wondra: มันเกือบจะเป็นคำถามเดียวกัน แต่ฉันต้องการที่จะมุ่งเน้นไปที่ตัวอย่างการใช้งานจริงมากกว่าที่จะอธิบายทางทฤษฎีของสิ่งที่พวกเขาทำ อันที่จริงมีภาพรวมเกี่ยวกับ MSDN ที่ฉันอ่านมาหลายครั้งแล้ว แต่ก็ยังไม่เข้าใจว่าพวกเขาสามารถทำอะไรให้ฉันได้บ้าง ฉันเป็นคนฉลาดและฉันสามารถเชื่อมต่อ A และ B และคิดออก C, D, E และ F จากที่
Panda Pyjama

ฉันไม่รู้ว่า "ตัวอย่างการใช้งานจริง" นั้นค่อนข้างกว้างสำหรับฉัน ฉันเอาไปแทงที่มัน แต่ก่อนหน้าความคิดเห็นนี้ดังนั้นมันอาจจะเน้นมากเกินไปที่ "สิ่งที่พวกเขาทำ" สำหรับคุณ

@ จอช: คุณใช้หรือคุณเคยใช้ทุกขั้นตอนเหล่านี้ในโลกแห่งความจริงหรือไม่?
Panda Pajama

1
FYI สำหรับผู้ที่มีพื้นหลังที่ไม่ใช่ directx (เช่นตัวฉัน) ทั้งสองนี้เรียกว่า "ตัวควบคุมเทสเซลเลเตอร์" และ "เทสเซลเลชันการประเมินเทสซาเลชัน" ใน OpenGL และ Vulkan
Shahbaz

คำตอบ:


13

ฮัลล์และโดเมน

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

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

เอาท์พุทของฮัลล์ shader วิ่งผ่าน (ถาวรฟังก์ชัน) tessellation เวทีซึ่งก่อให้เกิดการเรียงโดเมนโดเมนปกติประเภทที่เหมาะสม (e กรัมล่ามหรือสามเหลี่ยม)

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

เฟสเทสเซลเลชันเกิดขึ้นหลังจากสเตจเดอร์ยอดสุดในไพพ์ไลน์

เรขาคณิต Shaders

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

ขั้นตอนเรขาคณิต shader เกิดขึ้นหลังจากจุดสุดยอด shader และหลังเวที tessellation

การใช้ประโยชน์

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

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

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

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

สำหรับการอ่านเพิ่มเติมรวมถึงรายละเอียดมากกว่าที่ฉันจำได้พอสมควรหรือเข้าไปที่นี่:


4
โปรดทราบว่าตัวฮัลล์และโดเมนจำเป็นต้องมี Direct3D Feature Level 11.0 หรือฮาร์ดแวร์รุ่นใหม่กว่าและส่วนรูปทรงเรขาคณิตต้องการ Direct3D Feature Level 10.0 หรือฮาร์ดแวร์รุ่นใหม่กว่า นอกจากนี้การออกแบบการ์ดแสดงผลส่วนใหญ่ยังให้รูปทรงเรขาคณิตที่มีฮาร์ดแวร์น้อยมากดังนั้นยูทิลิตี้ในทางปฏิบัติของพวกเขาจึงน้อยกว่าที่พวกเขาคาดการณ์ไว้ในตอนแรก
Chuck Walbourn

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