ในเครื่องยนต์ของฉันฉันสร้างภูมิประเทศที่ไม่มีที่สิ้นสุดด้วยการใช้ Perlin noise alghoritm ที่คำนวณบน CPU
การสร้างภูมิประเทศเป็นเช่นนี้:
- หากกล้องใกล้แพทช์ไม่โหลดให้สร้างขึ้น
- คำนวณอาร์เรย์เสียง 513x513 พร้อมขอบเขต
- คำนวณค่าปกติ, แทนเจนต์, ทวินาม, ดัชนี
- ส่งผ่านข้อมูลไปยัง vbo
ข้อดี:
- จำเป็นต้องแสดงผลเมื่อจำเป็นเท่านั้น
- ง่ายต่อการชน
แย้ง
- แพตช์ 64 6413x513 ที่ช้านั้นสร้างขึ้นใน 3,1 วินาที (หนึ่งเธรด) สำหรับแต่ละแผ่นสร้างเสียง 20 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 25 ~ ~ ~ ~ ~ ~ ~ จุดยอด 25 คะแนน, บรรทัดฐาน, สัมผัสแทน, bitangent, ดัชนี เมื่อกล้องเคลื่อนที่เร็วผู้ใช้จะสังเกตเห็นการโหลดไทล์
- การใช้หน่วยความจำ ???
ตอนนี้ฉันสงสัยว่าจะเร่งความเร็วโดยการสร้างภูมิประเทศบน GPU โดยสมบูรณ์ แต่มีข้อสงสัยบางอย่าง:
- หากผู้ให้บริการรันทุกเฟรมพลังในการคำนวณนี้จะไม่สูญเปล่าในการคำนวณเสียงซ้ำแล้วซ้ำอีกหรือไม่? สิ่งนี้สามารถหลีกเลี่ยงได้โดยการเขียนผลลัพธ์ลงในพื้นผิว RBGA และใช้ในจุดสุดยอดสำหรับการกำจัดในภายหลัง แต่เพิ่มการใช้หน่วยความจำ จากอีกด้านหนึ่งถ้าการสร้างนั้นเร็วมากเพียงแผ่นที่มองเห็นได้ควรอยู่ในหน่วยความจำ อย่างไรก็ตามการถอดบัฟเฟอร์ทำให้ gpu-cpu sync ซึ่งอาจทำให้แอปช้าลง (ฉันถูกใช่ไหม)
- หากภูมิประเทศเป็นเพียงกริดที่ถูกแทนที่ด้วยจุดสุดยอดงานเดียวกันจะต้องทำบน CPU เพื่อคำนวณความสูงและปกติที่จุดที่กำหนดสำหรับการชน
- นี่เป็นเพียงแนวคิด แต่เพื่อเพิ่มความเร็วทุกอย่างฉันคิดเกี่ยวกับการฉายกริดบนวิวพอร์ตดังนั้นจึงมีการใช้จุดยอดน้อยที่สุดเท่านั้น คุณคิดว่าจะใช้การได้ไหม
คำถามสุดท้ายของฉันคือ:
เทคนิคใดที่ดีที่สุด / เร็วที่สุด / ใช้กันอย่างแพร่หลายในการสร้างภูมิประเทศที่ไม่มีที่สิ้นสุดบน GPU?