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

Kaiser

Admin
Admin
Geliştirici
Yardımsever Üye
Mesaj
4.545
Çözümler
451
Beğeni
5.400
Puan
2.849
Ticaret Puanı
0
Merhabalar, bu konuda sadece grafik alanında yaptığım düzenlemeleri paylaşacağım. Bugüne kadar yaptıklarımı önceki konularımdan az çok biliyorsunuz.
Bu konuda ise detaylı bir değişiklik günlüğü paylaşacağım. Ek olarak konu içerisinde farklı fikirler veya istekler gelmesi doğrultusunda bunları da uygulamayı deneyebilirim. Ancak şu an başlangıç olarak özelleştirme değil, tam stabilizasyon ve temizlik aşamasındayım.

Client dosyaları bütünüyle shader yapısına taşıdıktan sonra yaptığım tüm düzenlemeleri kendi filesıma aktardım. Kendi filesım normalde zenaris grafiklerini referans alıyordu ve mümkün olduğunca iyileştirilmiş haliydi. Şimdi ise zenarise ait tüm kodlar ve beraberinde metin2'nin kullandığı fixed pipeline kodların tamamı kaldırıldı.
Bu aktarma sürecinde aralarda kaynayan ufak tefek yerleri de crash yaşayarak tespit ettim ve onları da shadera taşıdım. Şu an itibariyle tam anlamıyla login ekranından oyun içindeki lonca simgesine kadar her şey shaderlar tarafından yönetiliyor.

Bunun getirisi olduğu kadar götürüsü de oluyor doğal olarak.

Örneğin; MOB_LAG_FIX, RENDER_TARGET vb. grafik bağlantılı sistemler artık doğrudan eklenip çalıştırılamaz, daha doğrusu derleme bile yapılamaz.
Shader yapısına entegre edilmesi zorunludur. Eğer mevcut shaderlarla uyumsuz-farklı bir sistem ise yeni shader yazılması ve bu shaderın sisteme tanıtılması gerekir.
Çünkü artık hem metin2'nin hem de bu gibi sistemlerin kullandığı STATEMANAGER.SetTransform, STATEMANAGER.SetTexture gibi çağrılar projede mevcut değil.
Aşağıda StateManager.cpp ve .h dosyalarından geriye kalanları görünce demek istediğimi anlayacaksınız;
StateManager.cpp
C++:
Genişlet Daralt Kopyala
#include "StdAfx.h"
#include "StateManager.h"
#define StateManager_Assert(a) assert(a)

struct SLightData
{
    enum
    {
        LIGHT_NUM = 8,
    };
    D3DLIGHT9 m_akD3DLight[LIGHT_NUM];
} m_kLightData;

void CStateManager::SetLight(DWORD index, CONST D3DLIGHT9* pLight)
{
    assert(index < SLightData::LIGHT_NUM);
    m_kLightData.m_akD3DLight[index] = *pLight;
    m_lpD3DDev->SetLight(index, pLight);
}
void CStateManager::GetLight(DWORD index, D3DLIGHT9* pLight)
{
    assert(index < 8);
    *pLight = m_kLightData.m_akD3DLight[index];
}

bool CStateManager::BeginScene()
{
    if (FAILED(m_lpD3DDev->BeginScene()))
        return false;
  
    return true;
}

void CStateManager::EndScene()
{
    m_lpD3DDev->EndScene();
}

CStateManager::CStateManager(LPDIRECT3DDEVICE9 lpDevice) : m_lpD3DDev(NULL)
{
    SetDevice(lpDevice);
}

CStateManager::~CStateManager()
{
    if (m_lpD3DDev)
    {
        m_lpD3DDev->Release();
        m_lpD3DDev = NULL;
    }
}

void CStateManager::SetDevice(LPDIRECT3DDEVICE9 lpDevice)
{
    StateManager_Assert(lpDevice);
    lpDevice->AddRef();

    if (m_lpD3DDev)
    {
        m_lpD3DDev->Release();
        m_lpD3DDev = NULL;
    }
    m_lpD3DDev = lpDevice;
}

StateManager.h
C++:
Genişlet Daralt Kopyala
#ifndef __CSTATEMANAGER_H
#define __CSTATEMANAGER_H

#include <directx/d3d9.h>
#include <directx/d3dx9.h>
#include "../eterBase/Singleton.h"

class CStateManagerState
{
    public:
        CStateManagerState()
        {
        }
};

class CStateManager : public CSingleton<CStateManager>
{
    public:
        CStateManager(LPDIRECT3DDEVICE9 lpDevice);
        virtual ~CStateManager();
        bool    BeginScene();
        void    EndScene();
        void    SetLight(DWORD index, CONST D3DLIGHT9* pLight);
        void    GetLight(DWORD index, D3DLIGHT9* pLight);
    private:
        void SetDevice(LPDIRECT3DDEVICE9 lpDevice);
    public:
        LPDIRECT3DDEVICE9    m_lpD3DDev;
};
#define STATEMANAGER (CStateManager::Instance())
#endif __CSTATEMANAGER_H

Son açtığım konudan bu yana geçen sürede temizlik ve bazı uyarlamalar yaptım. Render target sistemi tamamen shadera uyarlandı ve offline shop'un bazı gerektirdiği fonksiyonları da beraberinde uyarlandı. Şu an için en can sıkıcı durum debug modda FPS 10 civarlarında oluyor :D Ona da yapacak bir şey yok.

Bu projeyi sırf fantezi için geliştiriyorum, dolayısıyla oyun seçenekleri içerisindeki grafikle ilgili ayarlara çok derinlemesine değinmeyeceğim.
Bu alanda çok profesyonel olduğum söylenemez, bu yüzden biraz yavaş ilerleyen bir süreç olacak ama özelleştirmeler yaptıkça konu altından paylaşacağım. Genel olarak ana konu içeriği şimdilik bu kadar.

Son olarak;
Kod:
Genişlet Daralt Kopyala
EterLib/Decal.cpp ve .h
EterLib/GrpPixelShader.cpp ve .h
EterLib/GrpVertexShader.cpp ve .h
EterLib/ScreenFilter.cpp ve .h
EterLib/GrpShadowTexture.cpp ve .h
GameLib/TerrainDecal.cpp ve .h
GameLib/SnowParticle.cpp ve .h
Projeden tamamen kaldırıldı.

Ekran görüntüsü 2025-09-03 192421.webp
Ekran görüntüsü 2025-09-03 190236.webp

Ekran görüntüsü 2025-09-03 191933.webp
 
eline sağlık sonuç istediğin gibi olur inşallah
 
Güzel yorumlarınız için teşekkürler.


İlk güncelleme:
Dinamik Güneş Işığı

Metin2'de normalde ışığın gittiği yönde karşısına çıkan engeller için bir hesaplama bulunmuyor, önünde bir nesne olsun ya da olmasın doğrudan her şeyi yoksayarak çalışıyordu. Bunun için şimdilik C++ taraflı (temel amaçlı) bir oklüzyon hazırladım. Yani artık ışık karşısına çıkan objelerden etkilenecek ve gerektiğinde kırılacak. Daha sonra bunu ayrı bir vertex shadera dönüştüreceğim, şu an hala bazı ince noktalarda iyileştirilmesi gerek. Bu yüzden geliştirme sürecini C++ ile halledeceğim, fakat temel olarak hazır denilebilir.

 
Güzel yorumlarınız için teşekkürler.


İlk güncelleme:
Dinamik Güneş Işığı

Metin2'de normalde ışığın gittiği yönde karşısına çıkan engeller için bir hesaplama bulunmuyor, önünde bir nesne olsun ya da olmasın doğrudan her şeyi yoksayarak çalışıyordu. Bunun için şimdilik C++ taraflı (temel amaçlı) bir oklüzyon hazırladım. Yani artık ışık karşısına çıkan objelerden etkilenecek ve gerektiğinde kırılacak. Daha sonra bunu ayrı bir vertex shadera dönüştüreceğim, şu an hala bazı ince noktalarda iyileştirilmesi gerek. Bu yüzden geliştirme sürecini C++ ile halledeceğim, fakat temel olarak hazır denilebilir.


Ek güncelleme:
  • Oklüzyon artık C++ ile değil vertex shader ile yapılıyor.
  • Fade-in/out eklendi.
  • Işığa yakalanan tüm objeler için gerçek zamanlı çalışır. - Karakterin gezinmesi şart değil.
  • Güneş Z-Bufferdan çıkarıldı.
  • Performans tasarrufu için oyun seçeneklerine aç-kapa şeklinde eklenebilir. (Yaklaşık %1.5 GPU)

Bu güncelleme şimdilik son buldu.
Aslında bu bir özelleştirmeden ziyade uzun zaman önce fark ettiğim ve her gözüme çarptığında beni ayar eden saçma bir eksiklikti ve bunu gidermek istedim.
Neden bilmiyorum ama bu tarz detaylara takığım biraz.

 
Güncelleme:
- Tüm gölgeler su yüzeyinde de aktif edildi. + Suyun dalgalarıyla eş zamanlı olarak gölgeler de hareket eder.
- Speküler aydınlatma mantığı iyileştirildi:
  • Terrain için: Oyun seçeneklerinden gölgeler tamamen kapatıldığında speküler aydınlatma da kapanır. Önceden gölgeler kapalıyken de aktifti ve objelerin altından absürd bir şekilde parıldamaya devam ediyordu. Gölgeler aktifken zaten olması gerektiği gibi çalışır.
  • Su için: Her daim aktif kalacak ancak gölgeli kısımlarda doğal olarak parıltı olmayacak. Önceki halinde gölgeli alanlar da parlıyordu ve saçma bir görüntü oluyordu.
Ekran görüntüsü 2025-09-07 191733.webp

Sonraki:
Ekran görüntüsü 2025-09-07 221313.webp

Ekran görüntüsü 2025-09-07 220013.webp

Ekran görüntüsü 2025-09-07 220535.webp

Eğer bir değişiklik olmazsa; her ne kadar şüpheli olsa da bir sonraki güncelleme için planım su yüzeyine gerçek zamanlı yansıma oluşturmak.
 
Güncelleme:
Su yüzeyine gerçek zamanlı yansıma uygulandı fakat tamamlanmadı. Şu an için sadece gökyüzünü yansıtıyor.
Diğer nesneler farklı bir şekilde dahil edilecek. Oyun seçeneklerine aç-kapa şeklinde eklenebilir.
Su konusunda yapılması gerektiğini düşündüğüm birkaç düzenleme var, bir sonraki güncellemede umarım bunların hepsini tamamlamış olurum.

Ekran görüntüsü 2025-09-08 153648.webp

Ekran görüntüsü 2025-09-08 153625.webp

Ekran görüntüsü 2025-09-08 153609.webp

Ekran görüntüsü 2025-09-08 153552.webp

Ekran görüntüsü 2025-09-08 153533.webp
 
Güncelleme:
Su yüzeyine gerçek zamanlı yansıma uygulandı fakat tamamlanmadı. Şu an için sadece gökyüzünü yansıtıyor.
Diğer nesneler farklı bir şekilde dahil edilecek. Oyun seçeneklerine aç-kapa şeklinde eklenebilir.
Su konusunda yapılması gerektiğini düşündüğüm birkaç düzenleme var, bir sonraki güncellemede umarım bunların hepsini tamamlamış olurum.

25577 eklentisini görüntüle
25578 eklentisini görüntüle
25579 eklentisini görüntüle
25580 eklentisini görüntüle
25581 eklentisini görüntüle
Yapıyorsun bu işi
 
Güncelleme:
Özelleştirme olaylarını bir süre bekletmek zorunda kaldım. Birtakım tatsız olaylar oldu ve yeni bir işleme başlamam gerekti.
Özetle; projedeki mevcut material shaderı başlangıçtan bu yana tüm objeleri kapsayan global bir shaderdı. Bunu ayrıştırmam gerekti ama bu sefer de bazı istisnalar karşıma çıktı, ben de tercihimi LODController.cpp ve LODController.h dosyalarını tamamen projeden kaldırmaktan yana kullandım. Zaten benim için çok da işe yarayan bir şey olduğu söylenemez. Oldu bitti sevemedim bu ikisini..

Yaklaşık 2 günümü aldı ama kurtuldum sonunda. Biraz geniş çaplı bir değişiklik olduğu için bir süre oyun içinde iyice kurcalayıp test edeceğim.
Bellek yönetimine bağlı bazı crashler yaşadım ama hallettim.
Şu an için animasyonlarda-modellerde ve diğer bağlantılı faktörlerde bir sorun görünmüyor.

Kaynak tüketiminde de bir problem görünmüyor. Örnek olarak aşağıdaki değerler 4-5 defa üst üste ışınlanma sonrasına ait.
Test sürecinde her şey daha da net olacaktır, sonrasında ne olacağını ben de bilmiyorum henüz.

Ekran görüntüsü 2025-09-12 160245.webp

Ekran görüntüsü 2025-09-12 154534.webp
 
Hocam bu çimenlere el atacak mısın yeşil dds dosyasından da bi kurtulalım
 
Hocam bu çimenlere el atacak mısın yeşil dds dosyasından da bi kurtulalım
Evet o da yapılacaklar listesinde ama biraz zahmetli olacağı için sonraya bırakıyorum.

Son attığım fotoda gr2 çimenler var, onlar normalde gr2 olmalarına rağmen speedtree tarafından işleniyordu. Ama şimdi speedtree ve material shaderlari ayrı ayrı olunca o gr2 çimenler de speedtree'nin içinde arafta kaldılar ve simsiyah görünür oldular. İki shader tarafından da algilanmiyorlar.

Zaten niyetimde böyle bir çimen kullanmak yoktu, daha işlevsel bir yol düşünüyorum ama dediğim gibi biraz zahmetli olacağından şimdilik erteliyorum. Bu düz yeşil terrainden ben de pek memnun değilim :D
 
Güncelleme:
  • Eski yapıya ait shadow receiver kaldırıldı.
  • PCBlocker tamamen kaldırıldı.
  • Bir önceki güncellemeye ek olarak; LODController kaldırılması sonrasında birkaç yerde ekstra düzenleme yapıldı.
    Genel olarak bunun getirisi; itemler LODController gibi wrapper gereksinimi olmadan gecikmeli değil doğrudan bağlanır. + Objeler için ekstradan lüzumsuz hesaplamalar yapılmaz.
  • Dynamic Sphere Build kaldırıldı.
  • Yine önceki güncellemede belirttiğim şekilde; global olan material shaderı ayrıştırıldı. Artık karakterlerin ve objelerin shaderı ayrıdır. Daha kontrolcü bir yapı için ikisinin render yapısını da ayıracaktım fakat performans açısından pratik olmayacağından ikisi tek bir render çatısında buluşur, çağrıldıkları yere göre hangi shaderı kullanacağına fonksiyonun kendisi karar verir.
  • Bu ayrıştırma sonrasında: İtemlerdeki varsayılan specular işleme mantığı kaldırıldı, bunun yerine itemlere environment specular mapping uygulandı. Şu an için hoş göründüğünden olduğu gibi bıraktım, ileride belki daha da geliştiririm emin değilim.
Lod sonrası test(Sağ taraf önce - sol taraf sonra):


Itemler için yeni specular map:

Yakından:



Görseller:
Ekran görüntüsü 2025-09-15 210131.webp

Ekran görüntüsü 2025-09-15 210152.webp

Ekran görüntüsü 2025-09-15 210140.webp

Ekran görüntüsü 2025-09-15 210350.webp
 
Güncelleme:
Bir süredir rahatsız olduğum için çok ilgilenemiyorum. O yüzden bu güncelleme daha önceden başlayıp bitirmeye fırsat bulamadığım bir güncellemedir.

- Önceki güncellemede belirtilen specular kalitesi arttırıldı.
Ekran görüntüsü 2025-09-25 141550.webp



- Yansıma eklendi. (Tamamlanmadı)
Ekran görüntüsü 2025-09-25 135553.webp

Ekran görüntüsü 2025-09-25 140727.webp

Ekran görüntüsü 2025-09-25 135637.webp

Ekran görüntüsü 2025-09-25 140519.webp

Şimdilik bu kadar.
 
Bu shaderı yazarken hani yapay zekadan destek aldın veya hangi kaynakları kullandın bilgi verebilir misin? Bu arada çok güzel olmuş emeğine sağlık.
 
Bu shaderı yazarken hani yapay zekadan destek aldın veya hangi kaynakları kullandın bilgi verebilir misin? Bu arada çok güzel olmuş emeğine sağlık.
Shader konusunda genellikle gemini ve grok kullanıyorum, geriye kalan kısımlar ise c++ bilgisiyle doğru orantılı.
 
Güncelleme:

Su yansıması tamamlandı.
Ağaçlar yansımaya dahil edildi. + Shader uyarlaması yapıldı.
Gökyüzü dahil edildi. + Shader uyarlaması yapıldı.
Ekran görüntüsü 2025-09-28 223440.webp

Ekran görüntüsü 2025-09-28 223517.webp


Tüm haritalar için otomatik arazi düzeltme yapısı eklendi.
Hangi harita olduğu fark etmeksizin bulunan sivri-keskin kenarlar otomatik tespit edilip yumuşatılır.
(
Başlangıç seviyesindedir ve geliştirilmeye ihtiyaç duyulabilir. Şuan olduğu gibi saldım.)

Öncesi:
Ekran görüntüsü 2025-09-28 223258.webp
Sonrası:
Ekran görüntüsü 2025-09-28 223352.webp
 
Geri
Üst