*Descriere:
Au dat turcii mega release la sistemul de umbre dinamice (complet - usor de adaugat).
Edit: Testat personal de mine, merge perfect!
Ce este de fapt "Dynamic Shadow"?
- Ei bine, inloc sa fie "desenate" umbrele pe jos, acestea vor reprezenta cu adevarat umbre in timp real pe jos de la obiecte/NPC/mobi/copaci/frunze/etc.
- Face atmosfera de pe joc sa fie mai dinamica, sa para totul mai "viu"
- De asemenea, umbrele isi vor modifica dimensiunea si intesitatea in functie de timpul zilei (dimineata/pranz/seara) si pozitia caracterului pe harta.
Va las si voua arhiva FULL + explicatii despre cum sa modificati / retusati setarile. Daca aveti erori vizuale cu umbrele trebuie sa va jucati cu setarile la umbre, deci cititi totul cu atentie. Am tradus fisierul in romana cu chatgpt.
Acest sistem de umbre dinamice are si alte functii precum:
- Sincronizare umbre in interfata UI (ex. poti adauga in rendertarget umbre in real time)
- Optimizare prin cache bazat pe coordonate. (coordonate pre-calculate pentru umbre, astfel încât jocul să nu recalculeze aceleași umbre de mai multe ori.)
- Poti sincroniza umbrele cu soarele din joc.
Acest release este foarte important, deoarece va schimba in totalitate experienta Metin2. NU ESTE UPDATE DE GRAFICA, doar pe partea de umbre!
Tutorialul este in Turca. (Link Internal) si Engleza (Link github). In caz ca nu este explicat ceva bine in varianta in engleza, verificati pe cea in turca - acolo cica ar fi explicat mai bine.
Edit: Dupa ce ai facut tutorialul, fa si urmatoarele fixuri:
*Poze / Video:
*Link download / Code:
Va las github (recomand sa folositi acest link, deaorece e posibil sa se mai faca update-uri)
Link backup:
Au dat turcii mega release la sistemul de umbre dinamice (complet - usor de adaugat).
Edit: Testat personal de mine, merge perfect!
Ce este de fapt "Dynamic Shadow"?
- Ei bine, inloc sa fie "desenate" umbrele pe jos, acestea vor reprezenta cu adevarat umbre in timp real pe jos de la obiecte/NPC/mobi/copaci/frunze/etc.
- Face atmosfera de pe joc sa fie mai dinamica, sa para totul mai "viu"
- De asemenea, umbrele isi vor modifica dimensiunea si intesitatea in functie de timpul zilei (dimineata/pranz/seara) si pozitia caracterului pe harta.
Va las si voua arhiva FULL + explicatii despre cum sa modificati / retusati setarile. Daca aveti erori vizuale cu umbrele trebuie sa va jucati cu setarile la umbre, deci cititi totul cu atentie. Am tradus fisierul in romana cu chatgpt.
Acest sistem de umbre dinamice are si alte functii precum:
- Sincronizare umbre in interfata UI (ex. poti adauga in rendertarget umbre in real time)
- Optimizare prin cache bazat pe coordonate. (coordonate pre-calculate pentru umbre, astfel încât jocul să nu recalculeze aceleași umbre de mai multe ori.)
- Poti sincroniza umbrele cu soarele din joc.
Acest release este foarte important, deoarece va schimba in totalitate experienta Metin2. NU ESTE UPDATE DE GRAFICA, doar pe partea de umbre!
Tutorialul este in Turca. (Link Internal) si Engleza (Link github). In caz ca nu este explicat ceva bine in varianta in engleza, verificati pe cea in turca - acolo cica ar fi explicat mai bine.
Edit: Dupa ce ai facut tutorialul, fa si urmatoarele fixuri:
1) Deschidem SphereLib/frustum.cpp si cautam:
Modificam asa:
2) Daca nu aveti software tiling dezactivat: Deschidem GameLib/MapOutdoorRenderSTP.cpp si cautati:
Modificati asa:
Cautati:
Modificati asa:
3) Faceti urmatorul tutorial pentru a avea umbre mai calitative + render distance mai mare:
increase-dynamic-shadow-render-distance-t4566.html
Cod: Selectaţi tot
ViewState Frustum::ViewVolumeTest(const Vector3d &c_v3Center,const float c_fRadius) constCod: Selectaţi tot
ViewState Frustum::ViewVolumeTest(const Vector3d &c_v3Center,const float c_fRadius) const
{
const auto dynamicShadowExtend = 2.0f; // idk i think even 1.5 should do it
if (m_bUsingSphere)
{
D3DXVECTOR3 v(
c_v3Center.x-m_v3Center.x,
c_v3Center.y-m_v3Center.y,
c_v3Center.z-m_v3Center.z);
if ((c_fRadius * dynamicShadowExtend + m_fRadius) * (c_fRadius * dynamicShadowExtend + m_fRadius) < D3DXVec3LengthSq(&v))
{
return VS_OUTSIDE;
}
}
const int count=6;
D3DXVECTOR3 center = c_v3Center;
int i;
float distance[count];
for(i=0;i<count;i++)
{
distance[i] = D3DXPlaneDotCoord(&m_plane[i],¢er);
if (distance[i] <= -c_fRadius * dynamicShadowExtend)
return VS_OUTSIDE;
}
for(i=0;i<count;i++)
{
if (distance[i]<=c_fRadius)
return VS_PARTIAL;
}
return VS_INSIDE;
}2) Daca nu aveti software tiling dezactivat: Deschidem GameLib/MapOutdoorRenderSTP.cpp si cautati:
Cod: Selectaţi tot
if (isFogEnable)
{
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, TRUE);
STATEMANAGER.SetRenderState(D3DRS_FOGCOLOR, 0xFFFFFFFF);
STATEMANAGER.SetTexture(0, pTerrain->GetShadowTexture());
STATEMANAGER.DrawIndexedPrimitive(ePrimitiveType, 0, m_iPatchTerrainVertexCount, 0, wPrimitiveCount);
STATEMANAGER.SetRenderState(D3DRS_FOGCOLOR, rkTPRS.m_dwFogColor);
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE);
}
else
{
STATEMANAGER.SetTexture(0, pTerrain->GetShadowTexture());
STATEMANAGER.DrawIndexedPrimitive(ePrimitiveType, 0, m_iPatchTerrainVertexCount, 0, wPrimitiveCount);
}Cod: Selectaţi tot
if (isFogEnable)
{
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, TRUE);
STATEMANAGER.SetRenderState(D3DRS_FOGCOLOR, 0xFFFFFFFF);
STATEMANAGER.SetTexture(0, nullptr);
STATEMANAGER.DrawIndexedPrimitive(ePrimitiveType, 0, m_iPatchTerrainVertexCount, 0, wPrimitiveCount);
STATEMANAGER.SetRenderState(D3DRS_FOGCOLOR, rkTPRS.m_dwFogColor);
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, FALSE);
}
else
{
STATEMANAGER.SetTexture(0, nullptr);
STATEMANAGER.DrawIndexedPrimitive(ePrimitiveType, 0, m_iPatchTerrainVertexCount, 0, wPrimitiveCount);
}Cod: Selectaţi tot
void CMapOutdoor::__SoftwareTransformPatch_ApplyStaticShadowRenderState()
{
STATEMANAGER.SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
STATEMANAGER.SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR);
STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
STATEMANAGER.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
STATEMANAGER.SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
STATEMANAGER.SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
}Cod: Selectaţi tot
void CMapOutdoor::__SoftwareTransformPatch_ApplyStaticShadowRenderState()
{
STATEMANAGER.SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
STATEMANAGER.SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR);
STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_CURRENT);
STATEMANAGER.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
}3) Faceti urmatorul tutorial pentru a avea umbre mai calitative + render distance mai mare:
increase-dynamic-shadow-render-distance-t4566.html
*Poze / Video:
*Link download / Code:
Va las github (recomand sa folositi acest link, deaorece e posibil sa se mai faca update-uri)
Conținut: Ascuns
Reacționează
la acest mesaj și conținutul se va afișa automat.
la acest mesaj și conținutul se va afișa automat.Link backup:
Conținut: Ascuns
Reacționează
la acest mesaj și conținutul se va afișa automat.
la acest mesaj și conținutul se va afișa automat.








![[RELEASE] C++ Dynamic Shadows - Mesaj 4 - Imagine 1 [RELEASE] C++ Dynamic Shadows - Mesaj 4 - Imagine 1](https://i.imgur.com/bZH4TW7.jpeg)
![[RELEASE] C++ Dynamic Shadows - Mesaj 4 - Imagine 2 [RELEASE] C++ Dynamic Shadows - Mesaj 4 - Imagine 2](https://i.imgur.com/vRHSHWN.jpeg)
