Yardım Belli bir süre sonra render etkisinin kaybolması

  • Konuyu açan Konuyu açan DeadLyEscaPe
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 5
  • Gösterim Gösterim 136
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

DeadLyEscaPe

Üye
Üye
Mesaj
446
Çözümler
28
Beğeni
108
Puan
474
Ticaret Puanı
0
Oyuna ilk girişte harita, objeler, efektler vs ilk defa yüklenir. Bu yüzden ilk loading ekranı hep uzun olur. Fakat oyuna girip ışınlandıktan sonra loading ekranı kısalır çünkü daha önceki etkiler hala devam etmektedir. (Client kapanmadığı sürece.) Burada da buna benzer bir durum söz konusu. Aslında ilk zırh giyişte de kasma oluşmaması gerek. İlk giyilen zırhın ardından belli bir saniye sonra tekrar giyildiğinde sanki ilk defa giyiliyormuşçasına tekrardan bir kasma mevcut. Umarım düzgün bir şekilde anlatabilmişimdir. Daha önceki konuma benzer bir sorun gibi görünüyor fakat burada daha detaylı anlatmak istedim. Konum kapatılmaz ise sevinirim.

Öncelikle, bunun sebebi;
1-) %100 client source tarafında mıdır? Game source tarafında bir etkisi olabilir mi?
2-) Eğer öyle ise RENDER_TARGET sistemi ile bir bağlantısı olabilir mi?
3-) Harita optimizasyon kodları ile ilgili olabilir mi?
4-) Bu sorun için öncelikli olarak hangi dosyalara ve fonksiyonlara göz atılmalı?

Not: Sorun sadece ekipman giyip-çıkartma değil. Evet, oyunu alta alınca veya belli bir süre sonra bu sorunun olması gayet normal. Fakat asıl sorun ilk giyişte de olmaması gerekir.
Kısaca sorun özeti: Daha önce bir defa render alınmış kodlar, belli bir zaman sonra sanki render alınmamış gibi oluyor. (Client kapanmadıkça olmaması gerekir.)

İkinci zırh giyiş saniyesi: 01.08

 
Öncelikle senin senaryonda cache ile alakalı bir durum söz konusu değil. Sorunun kaynağı birden fazla sebebe bağlı olabilir.
Bunu çözebilmek için öncelikle kendine bir yol çizmen gerekiyor, konuda belirttiklerin ve + olarak tam hangi durumlarda bu sorun yaşanıyor? Hangi zamanda yaşanıyor? ne yapınca yaşanıyor veya ne giyince yaşanıyor?

İç ve dış itemlerin giy-çıkar olayı en genel anlamda equip olayına bağlanır. Eğer equip ve bağlantıları ile alakalı olsaydı tüm itemlerde aynı şey olurdu.

İç itemlerin dünya sahnesi ile alakası olmadığı için böyle bir şeye sebep olacaklarını sanmıyorum zaten.
Dış itemlere gelince; saçlar, kostümler, silahlar ve sonradan eklenen giyilebilir sistemler (kuşak-kanat-aura vs) her birinde bu sorun yaşanıyor mu?

Eğer sadece zırhlarda bu sorunu yaşıyorsan bu sana bir başlangıç noktası gösterir.
O da InstanceBase.cpp içindeki SetArmor ve ChangeArmor fonksiyonları. Özellikle de ChangeArmor fonksiyonunda bir takım farklı olaylar gerçekleşiyor, fonksiyon içeriğine bakarsan fark edeceksin.

En basit test olarak da fonksiyonun içeriğini gösterdiğim gibi düzenle.
C++:
Genişlet Daralt Kopyala
bool CInstanceBase::ChangeArmor(DWORD dwArmor)
{
    return false;
    [...]
}

Yani fonksiyonu tamamen devre dışı bırak.
Ve videoda yaptığın işlemin aynısını tekrar dene. Syserr veya oyun içi hatalar alabilirsin doğal olarak, onları boşver. O esnada client'ın takılıp takılmaması önemli sadece, bu senaryoda zırhın değişmesini zaten beklemiyoruz.
Bunu denedikten sonra client donma sorunu çözülürse burası sana ikinci referans noktası olacaktır.

Daha sonrasında fonksiyonu eski haline getirip içerisindeki çağrıların her birini live debug ile sırasıyla yoruma çevir ve tekrar tekrar dene. Bu şekilde ilerlemen gereken yolu visual studio sana gösterecektir.
 
Öncelikle senin senaryonda cache ile alakalı bir durum söz konusu değil. Sorunun kaynağı birden fazla sebebe bağlı olabilir.
Bunu çözebilmek için öncelikle kendine bir yol çizmen gerekiyor, konuda belirttiklerin ve + olarak tam hangi durumlarda bu sorun yaşanıyor? Hangi zamanda yaşanıyor? ne yapınca yaşanıyor veya ne giyince yaşanıyor?

İç ve dış itemlerin giy-çıkar olayı en genel anlamda equip olayına bağlanır. Eğer equip ve bağlantıları ile alakalı olsaydı tüm itemlerde aynı şey olurdu.

İç itemlerin dünya sahnesi ile alakası olmadığı için böyle bir şeye sebep olacaklarını sanmıyorum zaten.
Dış itemlere gelince; saçlar, kostümler, silahlar ve sonradan eklenen giyilebilir sistemler (kuşak-kanat-aura vs) her birinde bu sorun yaşanıyor mu?

Eğer sadece zırhlarda bu sorunu yaşıyorsan bu sana bir başlangıç noktası gösterir.
O da InstanceBase.cpp içindeki SetArmor ve ChangeArmor fonksiyonları. Özellikle de ChangeArmor fonksiyonunda bir takım farklı olaylar gerçekleşiyor, fonksiyon içeriğine bakarsan fark edeceksin.

En basit test olarak da fonksiyonun içeriğini gösterdiğim gibi düzenle.
C++:
Genişlet Daralt Kopyala
bool CInstanceBase::ChangeArmor(DWORD dwArmor)
{
    return false;
    [...]
}

Yani fonksiyonu tamamen devre dışı bırak.
Ve videoda yaptığın işlemin aynısını tekrar dene. Syserr veya oyun içi hatalar alabilirsin doğal olarak, onları boşver. O esnada client'ın takılıp takılmaması önemli sadece, bu senaryoda zırhın değişmesini zaten beklemiyoruz.
Bunu denedikten sonra client donma sorunu çözülürse burası sana ikinci referans noktası olacaktır.

Daha sonrasında fonksiyonu eski haline getirip içerisindeki çağrıların her birini live debug ile sırasıyla yoruma çevir ve tekrar tekrar dene. Bu şekilde ilerlemen gereken yolu visual studio sana gösterecektir.

Merhaba. Sizinle discord üzerinden aylar önce yardımlaşmıştık. Epey bir vakit ayırıp yardımcı olmuştunuz. Bu durum sadece zırhta oluyor. Dediğiniz gibi süper bir başlangıç noktası oldu. Aylardır silahı denememem de ayrı bir acemilik. En azından artık sorunun zırhla ilgili olduğunu biliyorum. Dediğiniz gibi return false koyduktan sonra zırh envanter üzerinde değişiyor fakat karakterin üzerinde değişmiyor. Donma söz konusu değil. Bundan sonra çağırdığı fonksiyonlara bakıp ilerleyeceğim.

Ekstra şöyle bir durum mevcut. (Birbirleriyle bağlantılı olabilir mi diye soruyorum...) İlk kez karakter ekranına giriş yapalım. Karakterler arasında ilk kez gezmeye çalıştığımızda yine bir gecikme söz konusu. Bu da karakterin üzerinde giyili olan zırhlardan mı kaynaklanır yoksa komple karakter modellemesinden mi? O da bir soru işareti. Devamında karakterler arasında gezdiğimizde takılma söz konusu değil. (İki karakterinde zırhlarını çıkartıp öyle test ettim.) Sorun karakter ekranında karakterlerin zırhlarından kaynaklı değil, bizzat kendi modellemesinin ilk kez yüklendiğinde olan gecikmesi. Bu konuyu çok uzattım, bu sorun zaten metin2 bilindiğinden beri mevcut. Asıl konuya gelecek olursak;

Konuda bahsetmeyi unuttuğum bir şey var. Oyunun official, bilinen en ham halinde karakter ekranındaki durum mevcut. Peki ya bu zırh değiştirme konusu mevcut mu? İlk kez açılan bir clientte, ilk kez değiştirilen bir zırhta donma yaşanıyor mu? O bir problem mi? Hayır... O bir problem değil, 1 dakika geçmeden tekrardan donma gerçekleşmesi mi asıl olan problem?

Bana kalırsa mevcut sorun tamamen render optimizasyonu ile alakalı. Oyun özellikle alt sekmeye alınınca arkada biriken her ne ise oyunu yavaşlatıyor. Bu da modellerden mi efektlerden mi kaynaklanıyor bilemiyorum.

Kafanızı çok karıştırdıysam kusura bakmayın.
 
Yaşadığınız problem speculardan olabilir normal bir fileste bu tarz bir durum mevcut değil. Kullandığınız fileste grafik geliştirmesi adı altında yapılan bir çok işlem olduğu için oralara bakmanızda fayda var.
 
Yaşadığınız problem speculardan olabilir normal bir fileste bu tarz bir durum mevcut değil. Kullandığınız fileste grafik geliştirmesi adı altında yapılan bir çok işlem olduğu için oralara bakmanızda fayda var.

Evet. Directx9 ve grafikleri zenaristen çekmiştim. Specular kısımlarına tekrar bakacağım ama ben daha önceden eklediğim Render target sisteminden şüpheleniyorum. Ya komple kaldırmayı deneyeceğim ya da grafikleri çektiğim filestan render target çekmeyi deneyeceğim.


Buradan bir çıkış yolu bulamıyorum.
Adsız.webp
 
Merhaba. Sizinle discord üzerinden aylar önce yardımlaşmıştık. Epey bir vakit ayırıp yardımcı olmuştunuz. Bu durum sadece zırhta oluyor. Dediğiniz gibi süper bir başlangıç noktası oldu. Aylardır silahı denememem de ayrı bir acemilik. En azından artık sorunun zırhla ilgili olduğunu biliyorum. Dediğiniz gibi return false koyduktan sonra zırh envanter üzerinde değişiyor fakat karakterin üzerinde değişmiyor. Donma söz konusu değil. Bundan sonra çağırdığı fonksiyonlara bakıp ilerleyeceğim.

Ekstra şöyle bir durum mevcut. (Birbirleriyle bağlantılı olabilir mi diye soruyorum...) İlk kez karakter ekranına giriş yapalım. Karakterler arasında ilk kez gezmeye çalıştığımızda yine bir gecikme söz konusu. Bu da karakterin üzerinde giyili olan zırhlardan mı kaynaklanır yoksa komple karakter modellemesinden mi? O da bir soru işareti. Devamında karakterler arasında gezdiğimizde takılma söz konusu değil. (İki karakterinde zırhlarını çıkartıp öyle test ettim.) Sorun karakter ekranında karakterlerin zırhlarından kaynaklı değil, bizzat kendi modellemesinin ilk kez yüklendiğinde olan gecikmesi. Bu konuyu çok uzattım, bu sorun zaten metin2 bilindiğinden beri mevcut. Asıl konuya gelecek olursak;

Konuda bahsetmeyi unuttuğum bir şey var. Oyunun official, bilinen en ham halinde karakter ekranındaki durum mevcut. Peki ya bu zırh değiştirme konusu mevcut mu? İlk kez açılan bir clientte, ilk kez değiştirilen bir zırhta donma yaşanıyor mu? O bir problem mi? Hayır... O bir problem değil, 1 dakika geçmeden tekrardan donma gerçekleşmesi mi asıl olan problem?

Bana kalırsa mevcut sorun tamamen render optimizasyonu ile alakalı. Oyun özellikle alt sekmeye alınınca arkada biriken her ne ise oyunu yavaşlatıyor. Bu da modellerden mi efektlerden mi kaynaklanıyor bilemiyorum.

Kafanızı çok karıştırdıysam kusura bakmayın.
Eğer return false işleminden sonra takılma sorunu olmuyorsa ChangeArmor içindeki çağrıları tek tek yorum satırına çevirip (pasif hale getirip)
live debug ile hangi çağrının buna sebep olduğunu tespit edebilirsin. Konunun modellerle veya render ile doğrudan bir alakası olduğunu düşünmüyorum. Yine de emin değilim. Ancak böylesine basit bir işlemde bile clientın donması, öte yandan yanlış bellek yönetimi ihtimalini de aklıma getiriyor. Bunu yüzeysel olarak test etmek için görev yöneticisinde metin2.exe nin bellek kullanımını zırh değiştirme ve donma anında takip et. Eğer arka arkaya zırh değiştirirken 1-2MB gibi bir oynama oluyorsa bellek yönünden sorun yoktur. Ancak daha fazla miktarda oynama olursa bu durum da dikkate alınmalı.
Ama en nihayetinde tüm bunlardan farklı olarak çok basit bir çözümü de olabilir.. Metin2 bu gibi konularda çok şaşırtabiliyor.

ChangeArmor içindeki şüpheli çağrıyı tespit ettikten sonra o çağrının yapısını incelemen gerekir.
GameLib/ActorInstance ailesi ve EterGrnLib kütüphanesiyle bağlantısı olması muhtemel.
 
Geri
Üst