Kaiser Graphic | Changelog

  • Konuyu açan Konuyu açan Kaiser
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 63
  • Gösterim Gösterim 4K
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.
 
Geri
Üst