Source Pureline - Windows Server Geliştirme Ortamı

Multilang ekledim ya zaten :D
Pet sistemi gibi şeyler eklemeyi düşünmüyorum ana konuda da belirttiğim gibi "quality of life" geliştirmeleri sistem eklemeye göre önceliğimdir.
Görmemişim sory 🤣
Bu tarz konular görünce kanım kaynıyor tekrardan ama kendimi tutuyorum başlayınca duramıyorsun takipteyim sabır ve başarılar dilerim
 
Ufak kod modernizasyonları ve World Editör için obje ve ağaç gölgeleri uyarlaması yaptım.

15 Ekim 2025:
Genişlet Daralt Kopyala
+------------+
| 15.10.2025 |
+------------+
~ Dynamic shadows for World Editor (Credits: m2Ciaran @Metin2Dev)
~ Minor code modernizations
    * auto
    * contains
    * insert -> try_emplace
    * push_back -> emplace_back
    * null -> nullptr
    * typedef -> using
    * 1.732f -> std::numbers::sqrt3_v<float>
    * std::ranges
    * .empty()

Screenshot 2025-10-15 094310.webp




Değişiklikleri GitHub'dan çekebilirsiniz.
 
Single thread olan antik yapıyı Multi thread yapma işi burası.😅
 
Single thread olan antik yapıyı Multi thread yapma işi burası.😅
Single thread metin2 gibi bir şeye gani gani yeter. Metin2'nin multi threadlik bir işi yok. Grafik işlerini işlemciden gpu'ya aldığın zaman (shader) metin2'de bilgisayarı kastıracak herhangi bir iş yapmak neredeyse imkansız hale gelir
 
Single thread metin2 gibi bir şeye gani gani yeter. Metin2'nin multi threadlik bir işi yok. Grafik işlerini işlemciden gpu'ya aldığın zaman (shader) metin2'de bilgisayarı kastıracak herhangi bir iş yapmak neredeyse imkansız hale gelir
malesef yeterli değil. sadece efektler bile geri kalan işlemlerle neredeyse aynı miktarda cpu kullanıyor, network tarafı, grafik güncellemeleri, actor(instance) ve map güncellemeleri ve python tarafıda işin içine girince single thread olduğu sürece özellikle yük altında oluşan donma ve takılma gibi şeyler düzelmez.
 
malesef yeterli değil. sadece efektler bile geri kalan işlemlerle neredeyse aynı miktarda cpu kullanıyor, network tarafı, grafik güncellemeleri, actor(instance) ve map güncellemeleri ve python tarafıda işin içine girince single thread olduğu sürece özellikle yük altında oluşan donma ve takılma gibi şeyler düzelmez.
Efektler ve grafik güncellemerinin kastırmasının sebebi zaten GPU'nun işlerini CPU'nun yapması değil mi?
 
Mesela ben hobi olarak Skyrim modluyorum, 2011'de çıkmış oyun, motoru single threaded, ama 4k 8k grafik modları bana mısın demiyor hiç kastırmıyor, tüm yükü GPU'ya veriyor
 
Efektler ve grafik güncellemerinin kastırmasının sebebi zaten GPU'nun işlerini CPU'nun yapması değil mi?
efektlerde sorun render değil update ağırlıklı, özellikle partiküllerden kaynaklı olarak metin gibi yoğun efektli şeylerde çok zaman alıyor

örnek olması açısından %7.85 kullanan sadece efekt update işlemleri kalan %8.90 kullanan oyunun geri kalanı

9ADn8FC.png

geri kalan grafik kısmında özellikle modellerdeki deform işlemleri shader'a alındığında büyük oranda fayda sağlıyor bunun dışında diğer bir konuda text render işlemleri mevcut haliyle fps'in %30 kısmını sadece texttail işlemleri azaltıyor
 
efektlerde sorun render değil update ağırlıklı, özellikle partiküllerden kaynaklı olarak metin gibi yoğun efektli şeylerde çok zaman alıyor

örnek olması açısından %7.85 kullanan sadece efekt update işlemleri kalan %8.90 kullanan oyunun geri kalanı

9ADn8FC.png

geri kalan grafik kısmında özellikle modellerdeki deform işlemleri shader'a alındığında büyük oranda fayda sağlıyor bunun dışında diğer bir konuda text render işlemleri mevcut haliyle fps'in %30 kısmını sadece texttail işlemleri azaltıyor
Bize öğret bunları ya. Kaiser'in text renderer'i geçirdiği gibi açık kaynaklı bir efekt kütüphanesi var mıdır?
 
Bize öğret bunları ya. Kaiser'in text renderer'i geçirdiği gibi açık kaynaklı bir efekt kütüphanesi var mıdır?

oyun custom bir formatta efekt sistemi kullandığı için bildiğim kadarıyla direkt olarak alıp başka bir lib ile değiştirmek mümkün değil malesef, belki shader adamın bir önerisi olabilir @Kaiser
 
oyun custom bir formatta efekt sistemi kullandığı için bildiğim kadarıyla direkt olarak alıp başka bir lib ile değiştirmek mümkün değil malesef, belki shader adamın bir önerisi olabilir @Kaiser
En son nicki değiştirecem ShaderMan diye :D


Konuya gelince;
Ben text render yapısını farklı bir kütüphaneye tamamen taşıdım ancak şu an performans yönünden henüz optimizasyona dokunmadım. Oyun içinde hala çok ince noktalarda ufak tefek tutarsızlıklar mevcut, onları uyarladıktan sonra optimizasyona gireceğim.
Text rendererı değiştirmiş olmamın eski yapıya göre evet bir tık etkisi oldu ama hala optimize istiyor. Bu gibi güncel kütüphanelere geçişin bir diğer artısı ise, src içindeki diğer eski yapıların birini veya birkaçını artık boşa düşürüyor olması. Yani her halükarda bir miktar da olsa iş yükünü azaltıyor.

Performans konusunda ise, shaderın bu noktada en büyük görevi, çizim görevini CPU'dan devralıp üstlenmesi. Ama yine de çizim çağrılarını kontrol edemez. Çizim çağrısı gibi kontrolsüz faktörler söz konusu olduğunda shader ile de çizilse performans olumsuz etkileniyor.

Metin2'nin font render yapısı üzerinden konuşacak olursak,

Ufak bir random örnek ile;
Ekranda chat yazıları-karakter isimleri vb. dahil olmak üzere her biri 5 karakter olan toplam 300 tane text var diyelim.
Outline kapalı: Her metnin her karakteri 1 defa çizilir. 300x5x1 den 1.500 çizim çağrısı yapılır.
Outline açık: Her metnin her karakteri yaklaşık 5 defa(fazla da olabilir) çizilir. Bu da 300x5x5 den 7.500 çizim çağrısı demek.
Outline gibi ufacık bir özelliğin bile bu senaryoda yarattığı fark: fazladan 6.000 çizim çağrısı..
Şimdi bu ufak örnek tabloyu zihninizde daha da büyütüp ortaya çıkan devasa sayıları tahmin edebilirsiniz.

Efektler,materyaller,şunlar bunlar bir kenara dursun, sadece text renderı bile binlerce kez CPU'yu (shader varsa GPU'yu) yoruyor.
Bir de üstüne diğer renderlar var...
Efektlerde de benzer durum söz konusu, onların da bu denli kötü çalışmasının sebebi text renderda olduğu gibi c++ tarafının tam bir performans düşmanı olması.

Özetle, textler ve efektler başta olmak üzere neredeyse metin2'nin geneli immediate render yapısına sahip. (Anında çizim)
Bu renderları batch render'a(toplu çizim) dönüştürmek ve bir buffer ile çizimleri tek seferde göndermek bu konudaki en büyük ilaç olacaktır.
Her ihtimale karşı fixed pipelıne yapıda ekstra dikkat ve titizlik gerektirebilir.
 


merak edenler için şöyle bir fonksiyon kullanım istatistiklerini atayım ( 300 metin )

ve bu hali sadece tek kişinin olduğu bir senaryoda, bunu aktif bir oyunda ve özellikle world boss gibi yoğun olan bir etkinlik alanında düşününce yukarıda yazdığım tüm etkenler tek thread da birleşip darboğaz yapması kaçınılmaz oluyor
 
Single thread metin2 gibi bir şeye gani gani yeter. Metin2'nin multi threadlik bir işi yok. Grafik işlerini işlemciden gpu'ya aldığın zaman (shader) metin2'de bilgisayarı kastıracak herhangi bir iş yapmak neredeyse imkansız hale gelir
Single thread olmasının sebebi o zamanın islemcileriydi. Yoksa yettiği için single thread seçilmedi. Ayrıca Multi thread bir yapı ile çok daha fazla performans elde edilebilir. Şuan her bilgisayarda ( antik çağdan kalmadıysa ) en az 2 - 4 çekirdek vardır. Bu çekirdekleri kullanmak varken yeterli demek ne kadar doğru olur ? O zamanlarda single thread bir zorunluluktu şimdi ise verimsizlik. Tabi bunu Multi thread yapmak AP ayri bir iş yükü fakat bence değer. Aynı mapte bulunan concurrent oyuncu sayısını bile önemli derecede etkiler.
 
Gölge çizim mesafesini üç katına çıkardım.
Gölge kalitesi slider'ını aktif hale getirdim.
Ve sliderin çalışma mantığını biraz iyileştirdim(0-100 arası pürüzsüz hareket etmek yerine 6 basamaklı hareket edecek çünkü Client source'da 6 gölge seviyesi var.).

1760766567717.webp


Her bir gölge kalitesi seviyesini de biraz artırdım ki gölgeler artan gölge çizim mesafesinden çok etkilenmesin.


1760796721308.webp
 
Gölge çizim mesafesini üç katına çıkardım.
Gölge kalitesi slider'ını aktif hale getirdim.
Ve sliderin çalışma mantığını biraz iyileştirdim(0-100 arası pürüzsüz hareket etmek yerine 6 basamaklı hareket edecek çünkü Client source'da 6 gölge seviyesi var.).

26228 eklentisini görüntüle

Her bir gölge kalitesi seviyesini de biraz artırdım ki gölgeler artan gölge çizim mesafesinden çok etkilenmesin.


26240 eklentisini görüntüle
Gölge etkileşimi var mı? Yani karakterler ağaçların gölgesine girdiğinde gölgeleniyor mu?
 
Geri
Üst