Kaiser Graphic | Changelog

  • Konuyu açan Konuyu açan Kaiser
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 82
  • Gösterim Gösterim 6K
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.
 
Önemli güncelleme:

Son birkaç ay içinde pek çok deneme yapıp her defasında başarısız olduğum GPU Skinning işlemi nihayet tamamen bitti.

Hareketli objelerin tamamı (karakterler-mob-npc-obje vs.) artık CPU tarafından değil GPU tarafından işleniyor ve her objenin her bir kemiği ve animasyonu shader tarafından işlenip yürütülüyor. Dolayısıyla bu yenilikle beraber pek çok eski kod ve buffer işlemleri de tamamen silindi ve daha iyi optimizasyonlar için önümdeki en büyük engellerden biri kalkmış oldu.
Yeni yapının hem sayısal değerlerde, hem de oyun içinde gözle görülür farkları mevcut. Elbet üzerine ekstra iyileştirmeler de uygulanacak.
Ancak şu an en zor kısmı atlattığım için biraz rahat hissediyorum ve dinlenmeye geçiyorum..

İlk olarak chrono sonuçlarına bakalım.
Aşağıdaki değerler her 1000 çağrı sonrasına aittir ve her iki test esnasında da oyunda/mapte sadece 2 adet karakter vardır. (At ve oyuncu)

Varsayılan sistemde vertexlerin cpu da işlenme süresi ve bindirilen yük(karakter başına):
Kod:
Genişlet Daralt Kopyala
(CPU Skinning): 0.0262 ms (1000 calls avg)
(CPU Skinning): 0.0280 ms (1000 calls avg)
(CPU Skinning): 0.0244 ms (1000 calls avg)
(CPU Skinning): 0.0282 ms (1000 calls avg)
(CPU Skinning): 0.0272 ms (1000 calls avg)
(CPU Skinning): 0.0273 ms (1000 calls avg)
(CPU Skinning): 0.0275 ms (1000 calls avg)
(CPU Skinning): 0.0280 ms (1000 calls avg)
(CPU Skinning): 0.0275 ms (1000 calls avg)
(CPU Skinning): 0.0271 ms (1000 calls avg)
(CPU Skinning): 0.0279 ms (1000 calls avg)
(CPU Skinning): 0.0275 ms (1000 calls avg)

Gpu skinning sonrası(karakter başına):
Kod:
Genişlet Daralt Kopyala
(GPU Skinning): 0.0038 ms (1000 calls avg)
(GPU Skinning): 0.0022 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0022 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0022 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0021 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)

Değerlere göre; Karakterlerin CPU üzerine bindirdiği vertex işleme yükünün ortalama %65'i tamamen GPU'ya aktarılmış. Geriye kalan kısımlar ise çoğunlukla gpu skinningin dışında kalan matris hesapları vb. faktörlerdir.

Video:
Clientin ilk açılışıdır ve ilk girişte 500 adet NPC mevcuttur. Haritalarda dolanmamın nedeni; ara sıra da olsa görüş açısına giren karakterlerin-mobların yarattığı anlık takılmaların neredeyse yok olmasını göstermek içindir.
 
Önemli güncelleme:

Son birkaç ay içinde pek çok deneme yapıp her defasında başarısız olduğum GPU Skinning işlemi nihayet tamamen bitti.

Hareketli objelerin tamamı (karakterler-mob-npc-obje vs.) artık CPU tarafından değil GPU tarafından işleniyor ve her objenin her bir kemiği ve animasyonu shader tarafından işlenip yürütülüyor. Dolayısıyla bu yenilikle beraber pek çok eski kod ve buffer işlemleri de tamamen silindi ve daha iyi optimizasyonlar için önümdeki en büyük engellerden biri kalkmış oldu.
Yeni yapının hem sayısal değerlerde, hem de oyun içinde gözle görülür farkları mevcut. Elbet üzerine ekstra iyileştirmeler de uygulanacak.
Ancak şu an en zor kısmı atlattığım için biraz rahat hissediyorum ve dinlenmeye geçiyorum..

İlk olarak chrono sonuçlarına bakalım.
Aşağıdaki değerler her 1000 çağrı sonrasına aittir ve her iki test esnasında da oyunda/mapte sadece 2 adet karakter vardır. (At ve oyuncu)

Varsayılan sistemde vertexlerin cpu da işlenme süresi ve bindirilen yük(karakter başına):
Kod:
Genişlet Daralt Kopyala
(CPU Skinning): 0.0262 ms (1000 calls avg)
(CPU Skinning): 0.0280 ms (1000 calls avg)
(CPU Skinning): 0.0244 ms (1000 calls avg)
(CPU Skinning): 0.0282 ms (1000 calls avg)
(CPU Skinning): 0.0272 ms (1000 calls avg)
(CPU Skinning): 0.0273 ms (1000 calls avg)
(CPU Skinning): 0.0275 ms (1000 calls avg)
(CPU Skinning): 0.0280 ms (1000 calls avg)
(CPU Skinning): 0.0275 ms (1000 calls avg)
(CPU Skinning): 0.0271 ms (1000 calls avg)
(CPU Skinning): 0.0279 ms (1000 calls avg)
(CPU Skinning): 0.0275 ms (1000 calls avg)

Gpu skinning sonrası(karakter başına):
Kod:
Genişlet Daralt Kopyala
(GPU Skinning): 0.0038 ms (1000 calls avg)
(GPU Skinning): 0.0022 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0022 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0022 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)
(GPU Skinning): 0.0021 ms (1000 calls avg)
(GPU Skinning): 0.0020 ms (1000 calls avg)

Değerlere göre; Karakterlerin CPU üzerine bindirdiği vertex işleme yükünün ortalama %65'i tamamen GPU'ya aktarılmış. Geriye kalan kısımlar ise çoğunlukla gpu skinningin dışında kalan matris hesapları vb. faktörlerdir.

Video:
Clientin ilk açılışıdır ve ilk girişte 500 adet NPC mevcuttur. Haritalarda dolanmamın nedeni; ara sıra da olsa görüş açısına giren karakterlerin-mobların yarattığı anlık takılmaların neredeyse yok olmasını göstermek içindir.

gelmiş en sevdiğim konu dx11 geçek artık hadi
 
Geri
Üst