Merhaba Turkmmo
Oyunun orijinal halinde veya Skybox kullanıpta bulutlu gökyüzüne sahip olanlarda bir grafik aksaklık mevcut.Şöyle ki oyun küçük ekran modundayken oyunu mause ile sürüklediğiniz zaman yada oyuncunuzla ışınlandığınız zaman gökyüzündeki bulutlar saçma bir şekilde atlayarak ilerliyor, örneğini şöyle göstereyim ;
Yavaş İlerleyen Bulutlarda Oyunu Sürüklerseniz;
Hızlı İlerleyen Bulutlarda Oyunu Sürüklerseniz ;
Karakterinizi Işınlarsanız ;
Nasıl Düzelteceğiz ?
Client Source: \EterLib\SkyBox.cpp açılır ve aşağıdaki kod bulunur ;
Tüm Bu Kod Bloğu ;
Bununla Değiştirilir ;
İşlem Sonrası Kodlar Böyle Gözükmeli ;
Oyunun orijinal halinde veya Skybox kullanıpta bulutlu gökyüzüne sahip olanlarda bir grafik aksaklık mevcut.Şöyle ki oyun küçük ekran modundayken oyunu mause ile sürüklediğiniz zaman yada oyuncunuzla ışınlandığınız zaman gökyüzündeki bulutlar saçma bir şekilde atlayarak ilerliyor, örneğini şöyle göstereyim ;
Yavaş İlerleyen Bulutlarda Oyunu Sürüklerseniz;
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Hızlı İlerleyen Bulutlarda Oyunu Sürüklerseniz ;
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Karakterinizi Işınlarsanız ;
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Nasıl Düzelteceğiz ?
Client Source: \EterLib\SkyBox.cpp açılır ve aşağıdaki kod bulunur ;
Kod:
void CSkyBox::RenderCloud()
Tüm Bu Kod Bloğu ;
Kod:
DWORD dwCurTime = CTimer::Instance().GetCurrentMillisecond(); m_fCloudPositionU += m_fCloudScrollSpeedU * (float)( dwCurTime - m_dwlastTime ) * 0.001f; if (m_fCloudPositionU >= 1.0f) m_fCloudPositionU = 0.0f; m_fCloudPositionV += m_fCloudScrollSpeedV * (float)( dwCurTime - m_dwlastTime ) * 0.001f; if (m_fCloudPositionV >= 1.0f) m_fCloudPositionV = 0.0f; m_dwlastTime = dwCurTime;
Bununla Değiştirilir ;
Kod:
if (m_fCloudPositionU >= 1.0f) m_fCloudPositionU = 0.0f; if (m_fCloudPositionV >= 1.0f) m_fCloudPositionV = 0.0f; m_fCloudPositionU += m_fCloudScrollSpeedU * 0.030f; m_fCloudPositionV += m_fCloudScrollSpeedV * 0.030f;
İşlem Sonrası Kodlar Böyle Gözükmeli ;
> * 0.030f - En uygun değerdir.
Düzeltme Yapıldıktan Sonra ;
Yavaş İlerleyen Bulutlarda Oyunu Sürüklerseniz [Düzeltilmiş Hali];
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Hızlı İlerleyen Bulutlarda Oyunu Sürüklerseniz [Düzeltilmiş Hali];
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Karakterinizi Işınlarsanız [Düzeltilmiş Hali];
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Metin2Dev Nirray'dan Alıntıdır.
C++ ile Metin2 Skybox Bulut Kesme Sorunu Giderme
Metin2 özel sunucularında geliştirme yaparken karşılaşılan sorunlardan birisi de görsel deneyimle ilgilidir. Özellikle yüksek çözünürlüklü skybox (gökyüzü kutusu) dosyaları kullanıldığında, bulutların belirli bir yükseklikten sonra ortadan ikiye bölünmüş gibi görünmesi durumu oluşabilir. Bu sorun genellikle rendering (renderlama) sırasında clipping (kesme) seviyesinden kaynaklanmaktadır. Bu küçük ama etkili C++ fix, tam olarak bu konuyu ele alacak ve çözüm sunacaktır.
Skybox Nedir?
Skybox, oyunda gökyüzünü temsil eden doku veya modeldir. Metin2 özel sunucularında görsel estetiği artırmak amacıyla değiştirilebilir. Ancak bazı yüksek kaliteli skybox dosyaları, rendering sırasında clipping seviyesine takılabilmektedir. Bu da bulutların belirli mesafede ani olarak ortadan kalkması ya da bölünmesi şeklinde gözlemlenir.
Sorunun Neden Kaynağı?
Bu problem genellikle far clipping plane (uzaklık kesme düzlemi) ayarlarından dolayı meydana gelir. Uzak nesnelerin renderlanmaması için belirlenen bu mesafe, yüksek çözünürlüklü skybox'lar için yeterli olmayabilir. Bu durumda, bulutlar renderlanmadığı için ekranda görünmezler veya bölünmüş gibi görünürler.
C++ Koduyla Çözüm
Aşağıdaki örnek kod parçası, DirectX tabanlı bir rendering sisteminde far clipping değerini ayarlayarak bu problemi çözebilir:
D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4, (float)width / height, 0.1f, 5000.0f);
pDevice->SetTransform(D3DTS_PROJECTION, &matProj);
5000.0f değeri burada far clipping mesafesidir. Bu değeri yükselterek, daha uzak objelerin de renderlandığından emin olabilirsiniz. Örneğin, 10000.0f gibi daha yüksek bir değere çekmek skybox bulutlarının doğru şekilde renderlanmasını sağlayabilir.
Metin2 Özel Sunucularda Uygulama
Metin2 özel sunucularında bu ayarı genellikle rendering motoru dosyalarında bulabilirsiniz. Client kaynak kodlarında genellikle GrannyModel.cpp, Camera.cpp veya EffectManager.cpp gibi dosyalarda far clipping ayarları yapılır. Bu dosyalardan birinde yukarıdaki gibi bir fonksiyon çağrısı bulunabilir. Değerin artırılması, skybox renderlaması sırasında yaşanan clipping sorununu ortadan kaldırabilir.
Not: Bu değişikliği yaparken performans etkilerini göz önünde bulundurmalısınız. Daha uzak objeleri renderlamak GPU üzerinde fazladan yük oluşturabilir. Bu nedenle, bu değeri dengeli bir şekilde seçmek önemlidir.
Özetle, Metin2 özel sunucularında görsel kaliteyi artırmak isteyen geliştiriciler için skybox clipping problemi ciddi bir sorun teşkil edebilir. Ancak C++ seviyesinde yapılan küçük bir değişiklikle bu sorun kolayca giderilebilir. Bu fix, rendering sistemine daha uzak objeleri de renderlama yetkisi verdiği için hem estetik hem de kullanıcı deneyimi açısından faydalıdır.
Fixing Skybox Cloud Clipping in Metin2 with C++
When developing Metin2 private servers, visual issues can sometimes arise. One common issue involves high-resolution skybox files where clouds appear to be split or cut off at certain altitudes. This problem typically stems from rendering clipping levels. This small but effective C++ fix addresses exactly this issue and offers a solution.
What is a Skybox?
A skybox represents the sky in-game using textures or models. In Metin2 private servers, these can be replaced to enhance visual aesthetics. However, some high-quality skyboxes may not render correctly due to clipping planes during rendering. This causes clouds to suddenly disappear or appear split at certain distances.
Why Does This Happen?
This issue usually occurs due to the far clipping plane settings. The distance set for not rendering distant objects might be insufficient for high-resolution skyboxes. As a result, clouds may not render properly, appearing to vanish or split on screen.
Solution with C++ Code
The following code snippet adjusts the far clipping value in a DirectX-based rendering system to resolve the issue:
D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4, (float)width / height, 0.1f, 5000.0f);
pDevice->SetTransform(D3DTS_PROJECTION, &matProj);
The value 5000.0f here refers to the far clipping distance. Increasing this value ensures that more distant objects are rendered. For instance, setting it to 10000.0f could allow skybox clouds to render correctly.
Implementation in Metin2 Private Servers
In Metin2 private servers, you can typically find this setting within rendering engine files. In client source codes, look for files such as GrannyModel.cpp, Camera.cpp, or EffectManager.cpp. A function call similar to the one above might exist in one of these files. Adjusting this value can resolve clipping issues during skybox rendering.
Note:[/COORD]
Keep performance impacts in mind when applying this change. Rendering more distant objects may increase the load on the GPU. Therefore, selecting a balanced value is crucial.
In summary, skybox clipping issues can be a significant visual concern for developers aiming to improve graphics quality in Metin2 private servers. However, a minor adjustment at the C++ level can easily solve this problem. This fix allows the rendering system to include even more distant objects, enhancing both aesthetics and user experience.
