ดังนั้นฉันจึงทำการพัฒนา DirectX บางอย่างโดยใช้ SharpDX ภายใต้. NET เพื่อให้แน่นอน (แต่โซลูชัน DirectX / C ++ API สามารถใช้ได้) ฉันกำลังมองหาวิธีที่เร็วที่สุดในการเรนเดอร์เส้นในการฉายฉากมุมฉาก (เช่นการจำลองการวาดเส้นสองมิติสำหรับแอปเชิงวิทยาศาสตร์) โดยใช้ DirectX
สกรีนช็อตของแปลงต่าง ๆ ที่ฉันพยายามจะทำดังนี้
มันไม่ใช่เรื่องแปลกสำหรับการแปลงประเภทนี้มีเส้นที่มีหลายล้านส่วนของความหนาของตัวแปรที่มีหรือไม่มีการลดรอยหยักต่อบรรทัด (หรือเปิด / ปิด AA แบบเต็มหน้าจอ) ฉันจำเป็นต้องอัปเดตจุดยอดสำหรับสายบ่อยมาก (เช่น 20 ครั้ง / วินาที) และถ่ายให้ GPU มากที่สุดเท่าที่จะทำได้
จนถึงตอนนี้ฉันได้ลอง:
- การแสดงผลซอฟต์แวร์เช่น GDI + จริง ๆ แล้วประสิทธิภาพไม่ดี แต่เห็นได้ชัดว่าหนักบน CPU
- Direct2D API - ช้ากว่า GDI โดยเฉพาะเมื่อเปิดใช้การลดรอยหยัก
- Direct3D10 ใช้วิธีนี้เพื่อจำลอง AA โดยใช้สีจุดยอดและเทสเซลเลชันด้านซีพียู ยังช้า (ฉันทำประวัติและใช้เวลา 80% ในการคำนวณตำแหน่งจุดสุดยอด)
สำหรับวิธีที่ 3 ฉันใช้ Vertex Buffers เพื่อส่งแถบสามเหลี่ยมไปยัง GPU และอัปเดตทุก ๆ 200 มิลลิวินาทีด้วยจุดยอดใหม่ ฉันได้รับอัตราการรีเฟรชประมาณ 5FPS สำหรับ 100,000 ส่วนของเส้น ฉันต้องการคนเป็นล้าน!
ตอนนี้ฉันคิดว่าวิธีที่เร็วที่สุดคือการทำ tessellation บน GPU เช่นใน Geometry Shader ฉันสามารถส่งจุดยอดเป็นรายการหรือแพ็คในพื้นผิวและแกะใน Geometry Shader เพื่อสร้างล่าม หรือเพียงแค่ส่งคะแนนดิบไปที่พิกเซลเชดเดอร์แล้วนำภาพวาดเส้น Bresenham Line มาใช้ในการสร้างพิกเซล HLSL ของฉันเป็นสนิม, shader รุ่นที่ 2 จากปี 2006 ดังนั้นฉันไม่รู้เกี่ยวกับ GPU ที่ทันสมัยอย่างบ้าคลั่งที่สามารถทำได้
ดังนั้นคำถามคือ: - เคยมีใครทำมาก่อนและคุณมีข้อเสนอแนะให้ลอง? - คุณมีข้อเสนอแนะเพื่อปรับปรุงประสิทธิภาพด้วยการอัพเดทรูปทรงเรขาคณิตอย่างรวดเร็วหรือไม่ (เช่นรายการจุดสุดยอดใหม่ทุก ๆ 20ms)
อัพเดท 21 มกราคม
ฉันได้ใช้วิธีตั้งแต่ (3) ข้างต้นโดยใช้ Geometry shaders โดยใช้ LineStrip และ Dynamic Vertex Buffers ตอนนี้ฉันได้รับ 100FPS ที่ 100k คะแนนและ 10FPS ที่ 1,000,000 คะแนน นี่เป็นการปรับปรุงครั้งใหญ่ แต่ตอนนี้ฉันเพิ่มอัตราและคำนวณ จำกัด ดังนั้นฉันจึงคิดเกี่ยวกับเทคนิค / ความคิดอื่น ๆ
- สิ่งที่เกี่ยวกับฮาร์ดแวร์อินสแตนซ์ของเรขาคณิตส่วนบรรทัด
- สิ่งที่เกี่ยวกับสไปรท์แบทช์?
- วิธีการอื่น ๆ (Pixel Shader) เป็นวิธีการที่มุ่งเน้น?
- ฉันสามารถเลือก GPU หรือซีพียูได้อย่างมีประสิทธิภาพหรือไม่?
ความคิดเห็นและข้อเสนอแนะของคุณชื่นชมมาก!