Motorumda, CPU'da hesaplanan Perlin gürültü alghoritm'i kullanarak sonsuz bir arazi yaratıyorum.
Arazi oluşturulması şu şekilde olur:
- Kamera yüksüz yama yakınındaysa oluşturun
- 513x513 gürültü dizisini verilen sınırlarla hesapla
- Normalleri, teğet, binormal, endeksleri hesaplayın
- Verileri vbo'ya aktarın
Artıları:
- Yalnızca gerektiğinde oluşturulmalıdır
- Kolay çarpışma
aleyhte
- 3,1 saniyede (bir iplik) yavaş 64 513x513 yama oluşturulur. Her kiremit için ~ 20ms gürültü oluşturma, ~ 25ms köşeleri, normaller, teğet, bitanjant, endeksler. Kamera hızlı hareket ettiğinde, kullanıcı döşemelerin yüklendiğini fark edebilir.
- bellek tüketen ???
Şimdi tamamen GPU'da arazi oluşturarak bunu nasıl hızlandıracağımı merak ediyordum ama bazı şüpheler var:
- Gölgelendiriciler her kareyi çalıştırıyorsa, bu hesaplama gürültüyü defalarca hesaplamak için güç tüketmez mi? Sonuç RBGA dokusuna yazılarak önlenebilir ve daha sonra yer değiştirme için köşe gölgelendiricide kullanılabilir, ancak bellek kullanımını arttırır. Öte yandan, eğer yaratılış çok hızlı olacaksa, sadece görünür karolar bellekte kalmalıdır. Ancak arabelleği ayırmak, uygulamayı yavaşlatabilecek gpu-cpu senkronizasyonuna neden olur (haklı mıyım?)
- Arazi sadece tepe gölgeleyici tarafından değiştirilen düz bir ızgara ise, aynı işin çarpma için belirli bir noktada yüksekliği ve normali hesaplamak için CPU üzerinde yapılması gerekir.
- Bu sadece bir kavram, ancak her şeyi hızlandırmak için ızgarayı görüntü alanına yansıtmayı düşünüyordum, bu yüzden sadece minimum miktarda köşe kullanıldı. Bunun işe yarayacağını düşünüyor musunuz?
Son sorum:
GPU'da sonsuz arazi oluşturmak için en iyi / en hızlı / yaygın olarak kullanılan teknik nedir?