- Mesaj
- 227
- Çözümler
- 4
- Beğeni
- 347
- Puan
- 784
- Ticaret Puanı
- 0
Merhaba arkadaşlar,
Uzun uğraşlar sonucunda SpeedTree 1.6'dan 4.1 sürümüne geçişi başarıyla tamamladım. Açıkçası beklediğimden çok daha meşakkatli bir süreç oldu.
Bu süreçte karşılaştığım önemli sorunları ve yaptığım modernizasyonları aşağıda paylaşıyorum.
SpeedTree 4.1 artık sorunsuz şekilde çalışıyor. Geçiş süreci oldukça zahmetliydi ama sonunda hem daha modern hem de daha sağlam bir altyapı ortaya çıktı. Umarım aynı geçişi yapmayı düşünen arkadaşlara motivasyon konusunda faydası olur.
SpeedTree 1.6 ve SpeedTree 4.1 sürümlerine ait karşılaştırmalı video ve ekran görüntülerini aşağıda paylaşıyorum.
İlk bakışta bile en belirgin farklar açıkça görülebiliyor. Özellikle ağaçlar artık tamamen bağımsız gölgelendirme çalışıyor. Bunun yanı sıra yapraklar çok daha dolgun, doğal ve hacimli görünüyor. Genel görüntü kalitesi, ışıklandırma(Halen Tam manasıyla bitmedi.. çok fazla baş ağrısı geçirdiğim için sonra bakacağım bu lanet probleme
) ve ağaçların sahneyle bütünleşmesi eski sürüme kıyasla belirgin şekilde iyileşmiş durumda.
SpeedTree 1.6
SpeedTree 4.1
Uzun uğraşlar sonucunda SpeedTree 1.6'dan 4.1 sürümüne geçişi başarıyla tamamladım. Açıkçası beklediğimden çok daha meşakkatli bir süreç oldu.
Bu süreçte karşılaştığım önemli sorunları ve yaptığım modernizasyonları aşağıda paylaşıyorum.
32-Bit Index Buffer Fix (Geometry Holes / Tearing):
1. 32-Bit Index Buffer Fix (Geometry Holes / Tearing)
When migrating from 16-bit to 32-bit index buffers (D3DFMT_INDEX32), the way the index buffer size is calculated and populated must be updated.
In the original 16-bit implementation, SpeedTree used pBranches->m_pStripLengths[i][0] as the index count, which rendered only the first strip of each branch.
After switching to D3DFMT_INDEX32, continuing to use the old logic while processing the complete index list resulted in severe geometry corruption, including holes and mesh tearing.
Fix:
Correctly calculate the index count using m_pGeometryCache->m_sBranches.m_pStripLengths[i][0].
Allocate the index buffer using sizeof(uint32_t) instead of sizeof(uint16_t) when D3DFMT_INDEX32 is used.
This resolves the geometry corruption and ensures all branch strips are rendered correctly.
Refactoring (Modern C++23):
Refactoring (Modern C++23)
SpeedTreeLib modülü, mevcut mimari korunarak (%100 davranış uyumluluğu) tamamen C++23 standartlarına uygun şekilde modernize edildi.
Yapılan iyileştirmeler
Smart Pointers
CSpeedTreeWrapper içerisindeki m_pSpeedTree artık std::unique_ptr kullanıyor.
Paylaşılan kaynaklar (m_pTextureInfo, m_pGeometryCache) std::shared_ptr ile yönetiliyor.
Böylece manuel SAFE_DELETE kullanımı ve olası bellek sızıntıları tamamen ortadan kaldırıldı.
Dynamic Arrays
new[] ile oluşturulan diziler (m_pBranchIndexCounts, m_pLeafVertexBuffer vb.) std::vector ile değiştirildi.
Bellek yönetimi artık tamamen otomatik.
Static Arrays
float m_afPos[3], float m_afBoundingBox[6] gibi C dizileri std::array ile değiştirildi.
.data() kullanımı sayesinde DirectX API'leriyle tam uyumluluk korundu.
Type Safety
#define tabanlı render flag'leri enum yapısına taşındı.
Eski C tarzı memcpy kopyalamaları mümkün olan yerlerde doğrudan C++ atama operatörleri (=) ile değiştirildi.
Virtual Functions
Tüm override edilen sanal fonksiyonlara override anahtar kelimesi eklendi.
Böylece derleme sırasında hataların yakalanması kolaylaştı ve kodun okunabilirliği arttı.
Kod Kalitesi
Eski C-style kalıntılar temizlendi.
Kod tabanı daha güvenli, okunabilir ve bakım yapılabilir hale getirildi.
SpeedTree 4.1 artık sorunsuz şekilde çalışıyor. Geçiş süreci oldukça zahmetliydi ama sonunda hem daha modern hem de daha sağlam bir altyapı ortaya çıktı. Umarım aynı geçişi yapmayı düşünen arkadaşlara motivasyon konusunda faydası olur.

SpeedTree 1.6 ve SpeedTree 4.1 sürümlerine ait karşılaştırmalı video ve ekran görüntülerini aşağıda paylaşıyorum.
İlk bakışta bile en belirgin farklar açıkça görülebiliyor. Özellikle ağaçlar artık tamamen bağımsız gölgelendirme çalışıyor. Bunun yanı sıra yapraklar çok daha dolgun, doğal ve hacimli görünüyor. Genel görüntü kalitesi, ışıklandırma(Halen Tam manasıyla bitmedi.. çok fazla baş ağrısı geçirdiğim için sonra bakacağım bu lanet probleme
) ve ağaçların sahneyle bütünleşmesi eski sürüme kıyasla belirgin şekilde iyileşmiş durumda.SpeedTree 1.6
SpeedTree 4.1
Son düzenleme: