Kaiser Graphic | Changelog

  • Konuyu açan Konuyu açan Kaiser
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 76
  • Gösterim Gösterim 5K
Güncelleme:
Önceki güncellemede bahsettiğim yeni sıralı render yapısına materyallerden sonra:
  • Gölgeler
  • İtemler
  • Su
  • Su yansıması
Dahil edildi.
Artık PythonApplication.cpp dosyasında:
C++:
Genişlet Daralt Kopyala
m_kChrMgr.Render();
m_pyItem.Render();
gibi çağrıların pek çoğu doğrudan kullanılmıyor/kullanılamaz. Çünkü bunlar ya artık çizim yapmıyor, ya da içleri tamamen boş.

Efektler ise bu konu çok baş ağrıtıyor, bunun için nasıl bir yol izleyeceğimden emin değilim. Şu an için efektlerde yaptığım tek güncelleme:
  • EffectUpdateDecorator.cpp
  • EffectUpdateDecorator.h
Dosyalarını ve bağımlılıklarını projeden kaldırmak oldu.
Bunları kaldırmanın sonucunda ise client akıllara durgunluk veren bir değişime uğradı:

Ayrıca bu yeni yapıya şu an deneysel gözüyle bakıyorum, eğer bir noktada çıkmaza girersem yedeğe/eskiye döneceğim.


Ek;
Gereklilik doğduğu için src içinden her yerden erişilebilen bir phase yöneticisi kuruldu.
Bu yönetici sayesinde sorgulanan phase anında veya istenilen bir fonksiyon içinde mevcut kod akışı bozulmadan clientin, fonksiyonun veya shaderın davranışı değiştirilir.
Video görelim böyle boş yazılar olmuyor.
 
Efektler ise bu konu çok baş ağrıtıyor, bunun için nasıl bir yol izleyeceğimden emin değilim.
cevabı önceki mesajında var aslında 😁 aynı mantık queue yapılması gerekiyor, örnek;

C++:
Genişlet Daralt Kopyala
#pragma once

#include <d3dx9.h>
#include <vector>
#include <memory>

class CEffectData;
class CEffectInstance;

enum class EEffectCommandType
{
    CREATE_EFFECT,
    DESTROY_EFFECT,
    UPDATE_EFFECT_POSITION,
    UPDATE_EFFECT_ROTATION,
    UPDATE_EFFECT_MATRIX,
    SHOW_EFFECT,
    HIDE_EFFECT,
    UPDATE_EFFECTS,
    RENDER_EFFECTS,
    UPDATE_SOUND_EFFECTS,
    SET_EFFECT_TEXTURES
};

struct SEffectCommandData
{
    EEffectCommandType type;
    DWORD instanceIndex;
    DWORD effectID;
    D3DXVECTOR3 position;
    D3DXVECTOR3 rotation;
    D3DXMATRIX matrix;
    std::vector<std::string> textures;
    bool visible;
    CEffectInstance* effectInstance;
    const char* fileName;

    SEffectCommandData()
        : type(EEffectCommandType::CREATE_EFFECT)
        , instanceIndex(0)
        , effectID(0)
        , position(0, 0, 0)
        , rotation(0, 0, 0)
        , visible(true)
        , effectInstance(nullptr)
        , fileName(nullptr)
    {
        D3DXMatrixIdentity(&matrix);
    }
};

class CEffectCommand
{
public:
    CEffectCommand(EEffectCommandType cmdType);
    ~CEffectCommand();

    EEffectCommandType GetType() const { return m_data.type; }
    const SEffectCommandData& GetData() const { return m_data; }
    SEffectCommandData& GetData() { return m_data; }

    static std::unique_ptr<CEffectCommand> CreateEffect(DWORD effectID, const D3DXVECTOR3& position, const D3DXVECTOR3& rotation);
    static std::unique_ptr<CEffectCommand> CreateEffect(const char* fileName, const D3DXVECTOR3& position, const D3DXVECTOR3& rotation);
    static std::unique_ptr<CEffectCommand> DestroyEffect(DWORD instanceIndex);
    static std::unique_ptr<CEffectCommand> UpdateEffectPosition(DWORD instanceIndex, const D3DXVECTOR3& position);
    static std::unique_ptr<CEffectCommand> UpdateEffectRotation(DWORD instanceIndex, const D3DXVECTOR3& rotation);
    static std::unique_ptr<CEffectCommand> UpdateEffectMatrix(DWORD instanceIndex, const D3DXMATRIX& matrix);
    static std::unique_ptr<CEffectCommand> ShowEffect(DWORD instanceIndex);
    static std::unique_ptr<CEffectCommand> HideEffect(DWORD instanceIndex);
    static std::unique_ptr<CEffectCommand> UpdateEffects();
    static std::unique_ptr<CEffectCommand> RenderEffects();
    static std::unique_ptr<CEffectCommand> UpdateSoundEffects();
    static std::unique_ptr<CEffectCommand> SetEffectTextures(DWORD effectID, const std::vector<std::string>& textures);

private:
    SEffectCommandData m_data;
};
 
Video görelim böyle boş yazılar olmuyor.
Videoluk bir şey yapmadım henüz co-adminim

cevabı önceki mesajında var aslında 😁 aynı mantık queue yapılması gerekiyor, örnek;

C++:
Genişlet Daralt Kopyala
#pragma once

#include <d3dx9.h>
#include <vector>
#include <memory>

class CEffectData;
class CEffectInstance;

enum class EEffectCommandType
{
    CREATE_EFFECT,
    DESTROY_EFFECT,
    UPDATE_EFFECT_POSITION,
    UPDATE_EFFECT_ROTATION,
    UPDATE_EFFECT_MATRIX,
    SHOW_EFFECT,
    HIDE_EFFECT,
    UPDATE_EFFECTS,
    RENDER_EFFECTS,
    UPDATE_SOUND_EFFECTS,
    SET_EFFECT_TEXTURES
};

struct SEffectCommandData
{
    EEffectCommandType type;
    DWORD instanceIndex;
    DWORD effectID;
    D3DXVECTOR3 position;
    D3DXVECTOR3 rotation;
    D3DXMATRIX matrix;
    std::vector<std::string> textures;
    bool visible;
    CEffectInstance* effectInstance;
    const char* fileName;

    SEffectCommandData()
        : type(EEffectCommandType::CREATE_EFFECT)
        , instanceIndex(0)
        , effectID(0)
        , position(0, 0, 0)
        , rotation(0, 0, 0)
        , visible(true)
        , effectInstance(nullptr)
        , fileName(nullptr)
    {
        D3DXMatrixIdentity(&matrix);
    }
};

class CEffectCommand
{
public:
    CEffectCommand(EEffectCommandType cmdType);
    ~CEffectCommand();

    EEffectCommandType GetType() const { return m_data.type; }
    const SEffectCommandData& GetData() const { return m_data; }
    SEffectCommandData& GetData() { return m_data; }

    static std::unique_ptr<CEffectCommand> CreateEffect(DWORD effectID, const D3DXVECTOR3& position, const D3DXVECTOR3& rotation);
    static std::unique_ptr<CEffectCommand> CreateEffect(const char* fileName, const D3DXVECTOR3& position, const D3DXVECTOR3& rotation);
    static std::unique_ptr<CEffectCommand> DestroyEffect(DWORD instanceIndex);
    static std::unique_ptr<CEffectCommand> UpdateEffectPosition(DWORD instanceIndex, const D3DXVECTOR3& position);
    static std::unique_ptr<CEffectCommand> UpdateEffectRotation(DWORD instanceIndex, const D3DXVECTOR3& rotation);
    static std::unique_ptr<CEffectCommand> UpdateEffectMatrix(DWORD instanceIndex, const D3DXMATRIX& matrix);
    static std::unique_ptr<CEffectCommand> ShowEffect(DWORD instanceIndex);
    static std::unique_ptr<CEffectCommand> HideEffect(DWORD instanceIndex);
    static std::unique_ptr<CEffectCommand> UpdateEffects();
    static std::unique_ptr<CEffectCommand> RenderEffects();
    static std::unique_ptr<CEffectCommand> UpdateSoundEffects();
    static std::unique_ptr<CEffectCommand> SetEffectTextures(DWORD effectID, const std::vector<std::string>& textures);

private:
    SEffectCommandData m_data;
};
Zaten ilk iş queue denedim, ama işin içinde shader olduğundan işler daha da karışıyor. C++ tarafını yapsam shader tarafı uyumsuz oluyor, shaderı uyarlasam c++ tarafı sıkıntı çıkarıyor bir şekilde.. mesh ve particle tek shaderda çalışıyor malum.. bu yüzden garip olaylar silsilesi :D Olmadı mesh ve particle shaderı olarak ikiye ayıracağım.
 
Güncelleme:
Biraz rahatsız olduğum için artık eskisi kadar aktif olamıyorum, bu yüzden artık bazı güncellemeler daha yavaş veya küçük olacak.
  • Önceki güncellemelerdeki queue render yapısı tamamen değiştirildi, yerine daha okunaklı ve stabil bir yapı kuruldu.
  • GPU Skinning'e geçiş için öncesinde vertex buffer ve index buffer yönetimleri tamamen revize edilmeye başlandı.
    Yeni buffer yönetimi sonrasında:
    - Artık CPU'ya yapılan yüzlerce-binlerce deform işlemleri ortadan kalkacak. Yani kalabalık ortamlarda client artık CPU'yu değil GPU'yu yoracak.
    - Bütün modellerin kemikleri-meshleri ve hareket işlemleri shadera(GPU)'ya aktarılacak.
    - GrpVertexBuffer / GrpIndexBuffer projeden kaldırılacak.(Şu an zaten bu dosyalara olan bağımlılıklar kaldırıldı.)
    - Efektler gibi belki metin2'nin en önemli darboğazlarından biri tamamen ortadan kaldırılmış olacak.
  • Water, minimap gibi ufak alanların bufferları tamamen yeni yapıya aktarıldı.

    GPU skinninge giriş için şu an sadece objelere uygulandı, karakterler-dungeon vb. renderları geçici olarak kapatıldı. Tüm shaderlar için FVF kullanımını zaten çok önceden kaldırıp her birine özel declaration kullanmıştım, bu işlem sonrasında karakterler ve objeler doğrudan granny struct kullanacaklar.

    Ekran görüntüsü 2025-11-09 193332.webp
Kısmet olursa tüm bunlardan sonra altyapı dosyaları büyük oranda eski kodlardan arındırılmış olacak. O noktadan sonra ya dx11 denerim, ya da görsel düzenlemelere devam ederim. Dx11'den umudum pek yok ama denemekten zarar gelmez.
 
Rahatsızlığım nedeniyle bir süre uzak kaldım, çok da toparlamış sayılmam. Genellikle istirahat ediyorum ama yine de fırsat buldukça ufak tefek bir şeyler yapıyorum. Dolayısıyla sonraki güncelleme Allah'a emanet desem yeridir.. Ek olarak @hasanmacit 'e selam olsun.. izindeyim hocam.

Güncelleme:
  • Index bufferlar kaldırıldı. Artık kullanılmıyor.
  • GrpVertexBuffer.cpp , GrpIndexBuffer.cpp vb. kullanımdan kaldırıldı.
  • Karakterler, objeler ve zindanlar için daha önceden hazırladığım declaration kullanımı kaldırıldı. Proje artık vertexleri doğrudan Granny API'den çekiyor.
  • Önceki maddeye bağlı olarak; arka planda/derinlerde sinsi bir şekilde FVF kullanmaya devam eden birkaç yer tamamen silindi.
  • C++ tarafında shader yönetimiyle alakalı bazı iyileştirmeler uygulandı. String, std::map, std::unordered_map vb. kullanımının bir kısmı iptal edildi. Bazı shaderlar handle yapısına taşındı, diğerleri ise hala mevcut yapıdan devam ediyor.. Uzun vakit ayıramadığım için böyle kaldı.
Görsellik konusunda:
  • Objelere ve itemlere normal map uygulandı. Şu anki hali sadece temel düzeydir ve kullanılan map üzerinde çok özenmeden rastgele bir seçim yaptım. Ek olarak bunu daha çok itemlerde kullanmayı düşünüyorum, objeler itemler gibi sorgu ve yönetim potansiyeline sahip olmadığı için pek taraftarı değilim şimdilik. String ile yapılabilir ama metin2'deki obje sayısını göz önüne aldığımızda bunu yapmak imkansız. Yine de altyapı olarak durmasının bir zararı yok, şimdilik böyle bıraktım. İleride kısmet olursa bunu çok daha geniş bir yelpazeye yayacağım.
Öncesi:
Ekran görüntüsü 2026-01-08 194850.webp
Sonrası:
Ekran görüntüsü 2026-01-08 194805.webp


Öncesi:
Ekran görüntüsü 2026-01-08 174619.webp
Sonrası:
Ekran görüntüsü 2026-01-08 174531.webp


Öncesi:
Ekran görüntüsü 2026-01-08 161551.webp
Sonrası:
Ekran görüntüsü 2026-01-08 161520.webp


Öncesi:
Ekran görüntüsü 2026-01-08 194025.webp
Sonrası:
Ekran görüntüsü 2026-01-08 194138.webp


Öncesi:
Ekran görüntüsü 2026-01-08 200237.webp
Sonrası:
Ekran görüntüsü 2026-01-08 200332.webp
 
Son düzenleme:
Rahatsızlığım nedeniyle bir süre uzak kaldım, çok da toparlamış sayılmam. Genellikle istirahat ediyorum ama yine de fırsat buldukça ufak tefek bir şeyler yapıyorum. Dolayısıyla sonraki güncelleme Allah'a emanet desem yeridir.. Ek olarak @hasanmacit 'e selam olsun.. izindeyim hocam.

Güncelleme:
  • Index bufferlar kaldırıldı. Artık kullanılmıyor.
  • GrpVertexBuffer.cpp , GrpIndexBuffer.cpp vb. kullanımdan kaldırıldı.
  • Karakterler, objeler ve zindanlar için daha önceden hazırladığım declaration kullanımı kaldırıldı. Proje artık vertexleri doğrudan Granny API'den çekiyor.
  • Önceki maddeye bağlı olarak; arka planda/derinlerde sinsi bir şekilde FVF kullanmaya devam eden birkaç yer tamamen silindi.
  • C++ tarafında shader yönetimiyle alakalı bazı iyileştirmeler uygulandı. String, std::map, std::unordered_map vb. kullanımının bir kısmı iptal edildi. Bazı shaderlar handle yapısına taşındı, diğerleri ise hala mevcut yapıdan devam ediyor.. Uzun vakit ayıramadığım için böyle kaldı.
Görsellik konusunda:
  • Objelere ve itemler normal map uygulandı. Şu anki hali sadece temel düzeydir ve kullanılan map üzerinde çok özenmeden rastgele bir seçim yaptım. Ek olarak bunu daha çok itemlerde kullanmayı düşünüyorum, objeler itemler gibi sorgu ve yönetim potansiyeline sahip olmadığı için pek taraftarı değilim şimdilik. String ile yapılabilir ama metin2'deki obje sayısını göz önüne aldığımızda bunu yapmak imkansız. Yine de altyapı olarak durmasının bir zararı yok, şimdilik böyle bıraktım. İleride kısmet olursa bunu çok daha geniş bir yelpazeye yayacağım.
Öncesi:
Sonrası:


Öncesi:
Sonrası:


Öncesi:
Sonrası:


Öncesi:
Sonrası:


Öncesi:
Sonrası:
adam gibi adamlara selam olsun abim bende senin izindeyim
 
Rahatsızlığım nedeniyle bir süre uzak kaldım, çok da toparlamış sayılmam. Genellikle istirahat ediyorum ama yine de fırsat buldukça ufak tefek bir şeyler yapıyorum. Dolayısıyla sonraki güncelleme Allah'a emanet desem yeridir.. Ek olarak @hasanmacit 'e selam olsun.. izindeyim hocam.

Güncelleme:
  • Index bufferlar kaldırıldı. Artık kullanılmıyor.
  • GrpVertexBuffer.cpp , GrpIndexBuffer.cpp vb. kullanımdan kaldırıldı.
  • Karakterler, objeler ve zindanlar için daha önceden hazırladığım declaration kullanımı kaldırıldı. Proje artık vertexleri doğrudan Granny API'den çekiyor.
  • Önceki maddeye bağlı olarak; arka planda/derinlerde sinsi bir şekilde FVF kullanmaya devam eden birkaç yer tamamen silindi.
  • C++ tarafında shader yönetimiyle alakalı bazı iyileştirmeler uygulandı. String, std::map, std::unordered_map vb. kullanımının bir kısmı iptal edildi. Bazı shaderlar handle yapısına taşındı, diğerleri ise hala mevcut yapıdan devam ediyor.. Uzun vakit ayıramadığım için böyle kaldı.
Görsellik konusunda:
  • Objelere ve itemler normal map uygulandı. Şu anki hali sadece temel düzeydir ve kullanılan map üzerinde çok özenmeden rastgele bir seçim yaptım. Ek olarak bunu daha çok itemlerde kullanmayı düşünüyorum, objeler itemler gibi sorgu ve yönetim potansiyeline sahip olmadığı için pek taraftarı değilim şimdilik. String ile yapılabilir ama metin2'deki obje sayısını göz önüne aldığımızda bunu yapmak imkansız. Yine de altyapı olarak durmasının bir zararı yok, şimdilik böyle bıraktım. İleride kısmet olursa bunu çok daha geniş bir yelpazeye yayacağım.
Öncesi:
Sonrası:


Öncesi:
Sonrası:


Öncesi:
Sonrası:


Öncesi:
Sonrası:


Öncesi:
Sonrası:
Görseller o kadar güzel gözüküyoki hangisi sonrası karar veremedim. Bence hepsi çok güzel. 😂😂
Ellerine sağlık. Çooookkkk geçmiş olsun. Acil şifalar dilerim.
 
Önceki güncellemeye ek:

  • Terraine normal map desteği eklendi.
Özetle;
Öncesi:
Ekran görüntüsü 2026-01-09 203425.webp


Sonrası:
Ekran görüntüsü 2026-01-09 203252.webp



Ekran görüntüsü 2026-01-09 203818.webp

Ekran görüntüsü 2026-01-09 203850.webp

Ekran görüntüsü 2026-01-09 203926.webp

Ekran görüntüsü 2026-01-09 204012.webp

Ekran görüntüsü 2026-01-09 204555.webp
 
Öncesi kısmı gözüme daha hitap etti hocam bu zemin siyahlık ve atmosfer saltanatçıların zikko zeminleri gibi olmuş.

Bir de bu tr nin ağaçları çok yavan birkaç ay sonra tüm hepsini değiştireyim isterseniz en son wom ağaçlarını yapay zeka ile iyileştirip upscale etmiştim. Muazzam hd olmuşlardı ücretisiz tüm köleri yenileyebiliriz.
 
Öncesi kısmı gözüme daha hitap etti hocam bu zemin siyahlık ve atmosfer saltanatçıların zikko zeminleri gibi olmuş.

Bir de bu tr nin ağaçları çok yavan birkaç ay sonra tüm hepsini değiştireyim isterseniz en son wom ağaçlarını yapay zeka ile iyileştirip upscale etmiştim. Muazzam hd olmuşlardı ücretisiz tüm köleri yenileyebiliriz.
Kullandığım normal mapi rastgele seçtim. Çok detaya girecek vaktim ve fırsatım yok maalesef.
Ayrıca belirtmemde fayda olabilir, o siyahlıklar gölgenin kendisidir ve sabit değildir. Kullanılan map ve eğimlere göre o gölgeler/siyahlıklar da değişiyor. Tabi güneşe bağlı olarak da değişiyor.

Son olarak evet ileride ağaçları değiştirme gibi bir düşüncem var. Şuan aciliyeti olmadığı için o topa girmiyorum ama ileride elbet değiştireceğim, teşekkür ederim.
 
Geri
Üst