สร้างภูมิประเทศบน GPU


9

ในเครื่องยนต์ของฉันฉันสร้างภูมิประเทศที่ไม่มีที่สิ้นสุดด้วยการใช้ Perlin noise alghoritm ที่คำนวณบน CPU

การสร้างภูมิประเทศเป็นเช่นนี้:

  • หากกล้องใกล้แพทช์ไม่โหลดให้สร้างขึ้น
  • คำนวณอาร์เรย์เสียง 513x513 พร้อมขอบเขต
  • คำนวณค่าปกติ, แทนเจนต์, ทวินาม, ดัชนี
  • ส่งผ่านข้อมูลไปยัง vbo

ข้อดี:

  • จำเป็นต้องแสดงผลเมื่อจำเป็นเท่านั้น
  • ง่ายต่อการชน

แย้ง

  • แพตช์ 64 6413x513 ที่ช้านั้นสร้างขึ้นใน 3,1 วินาที (หนึ่งเธรด) สำหรับแต่ละแผ่นสร้างเสียง 20 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 25 ~ ~ ~ ~ ~ ~ ~ จุดยอด 25 คะแนน, บรรทัดฐาน, สัมผัสแทน, bitangent, ดัชนี เมื่อกล้องเคลื่อนที่เร็วผู้ใช้จะสังเกตเห็นการโหลดไทล์
  • การใช้หน่วยความจำ ???

ตอนนี้ฉันสงสัยว่าจะเร่งความเร็วโดยการสร้างภูมิประเทศบน GPU โดยสมบูรณ์ แต่มีข้อสงสัยบางอย่าง:

  • หากผู้ให้บริการรันทุกเฟรมพลังในการคำนวณนี้จะไม่สูญเปล่าในการคำนวณเสียงซ้ำแล้วซ้ำอีกหรือไม่? สิ่งนี้สามารถหลีกเลี่ยงได้โดยการเขียนผลลัพธ์ลงในพื้นผิว RBGA และใช้ในจุดสุดยอดสำหรับการกำจัดในภายหลัง แต่เพิ่มการใช้หน่วยความจำ จากอีกด้านหนึ่งถ้าการสร้างนั้นเร็วมากเพียงแผ่นที่มองเห็นได้ควรอยู่ในหน่วยความจำ อย่างไรก็ตามการถอดบัฟเฟอร์ทำให้ gpu-cpu sync ซึ่งอาจทำให้แอปช้าลง (ฉันถูกใช่ไหม)
  • หากภูมิประเทศเป็นเพียงกริดที่ถูกแทนที่ด้วยจุดสุดยอดงานเดียวกันจะต้องทำบน CPU เพื่อคำนวณความสูงและปกติที่จุดที่กำหนดสำหรับการชน
  • นี่เป็นเพียงแนวคิด แต่เพื่อเพิ่มความเร็วทุกอย่างฉันคิดเกี่ยวกับการฉายกริดบนวิวพอร์ตดังนั้นจึงมีการใช้จุดยอดน้อยที่สุดเท่านั้น คุณคิดว่าจะใช้การได้ไหม

คำถามสุดท้ายของฉันคือ:

เทคนิคใดที่ดีที่สุด / เร็วที่สุด / ใช้กันอย่างแพร่หลายในการสร้างภูมิประเทศที่ไม่มีที่สิ้นสุดบน GPU?


8
เพิ่งทราบว่าการสร้างภูมิประเทศบน GPU จะทำให้ยากต่อการตรวจจับการชนการเลือกการตรวจจับหรือการโต้ตอบใด ๆ กับภูมิประเทศ
MichaelHouse

1
อาจใช้คอมพิวเตอร์คำนวณ (DX10 หรือ 11) เพื่อสร้างภูมิประเทศบน GPU แต่ตามที่ Byte56 ระบุไว้คุณจะต้องดึงค่าออกจาก GPU เพื่อที่จะโต้ตอบกับมัน msdn.microsoft.com/en-us/library/windows/desktop/ …
UnderscoreZero

การสร้างภูมิประเทศบนเสียง GPU เช่นเดียวกับความคิดที่ไม่ดีสำหรับฉัน มันอาจใช้งานได้ แต่ฉันคิดว่ามันน่าจะใช้งานได้ดีขึ้นเล็กน้อยถ้าคุณเพิ่งสร้างภูมิประเทศทางฝั่ง CPU และส่งรูปวาดมาตรฐานไปยัง GPU
Benjamin Danger Johnson

เพียงแค่ประสบการณ์ของฉัน จริง ๆ แล้วฉันเพิ่งทำสิ่งนี้ด้วย aparapi และใช้งานได้จริง แต่จริงๆแล้วมันช้ากว่าการให้ซีพียูทำงาน ฉันคิดว่าเพราะค่าใช้จ่ายในการส่งข้อมูลไปยัง / จาก GPU ถ้าฉันจำได้อย่างถูกต้องว่า GPU ทำงานได้ดีจริงๆถ้าการคำนวณนั้นมีขนาดใหญ่เมื่อเทียบกับขนาดของข้อมูล (และก็มีขนาดใหญ่ด้วยเงื่อนไขแบบสัมบูรณ์)
Richard Tingle

บทความนี้อาจให้แนวคิดบางอย่างกับคุณ http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html
Jeremiah Leslie

คำตอบ:


2

ถ้าฉันจะลองใช้ GPU เพื่อสิ่งนี้ฉันคิดว่าฉันจะไปเพื่อคำนวณ / opencl / cuda

อย่างไรก็ตามโดยไม่คำนึงถึงการใช้ GPU หรือ CPU (ซึ่งเป็นสิ่งที่ฉันทำจริง) ฉันจะทำในลักษณะอะซิงโครนัสการตัดสินใจว่าคุณต้องการภูมิประเทศใหม่สำหรับเฟรมปัจจุบันมีแนวโน้มช้าเกินไป (เช่นพิจารณา 1000ms / 60 = 16.666ms และเฟรมทั้งหมดต้องการให้พอดีกับที่)

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

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