După cum probabil știți, Metin2 folosea inițial Granny2 2.4. În timp, comunitatea a trecut la DLL-ul și librăriile din Granny2 2.11, însă mare parte din codul care procesează modelele a rămas legacy.
Pe scurt: avem Granny2 2.11, dar clientul nu profită suficient de el.
Scopul acestui update este simplu:
mai puține sacadări, frametime mai bun și mai multe FPS în zone aglomerate.
1. Conversia modelelor 2.4 → 2.11
Primul pas este conversia tuturor modelelor `.gr2` din client în format Granny2 2.11.
Aici intră practic majoritatea elementelor 3D din joc: caractere, monștri, NPC-uri, arme, armuri, animații etc.
Impactul principal:
Pentru cine vrea să își facă propriile tool-uri:
Link backup:
2. Runtime Rewrite + GPU Skinning
Conversia modelelor este doar primul pas.
În următoarea etapă lucrez la:
De exemplu, anumite fișiere Granny sunt compilate în Release cu MinSpace în loc de MaxSpeed.
În plus, skinning-ul actual poate recalcula și reîncărca date chiar și atunci când pose-ul caracterului nu s-a schimbat.
Noul backend va evita aceste operații inutile.
Asta devine important mai ales când ai zeci sau sute de caractere, monștri și efecte pe ecran, adică exact situațiile în care Metin2 începe să piardă masiv FPS.
Legacy vs New Backend
Implementarea va fi complet separată.
va rămâne backend-ul legacy.
Noul cod va fi în:
și va putea fi activat prin:
Dacă define-ul este dezactivat, clientul revine direct la varianta veche.
GPU Skinning și celelalte optimizări vor avea și ele define-uri independente pentru testare.
Ce urmează
În zilele următoare voi continua testele și implementarea.
Reveniți la acest post săptămâna viitoare. Dacă totul merge conform planului, voi adăuga:
Granny2 2.11 există în source de mulți ani, dar mare parte din engine încă îl folosește ca pe vechiul Granny2.
Acum încerc să schimb asta și să mut o parte din workload-ul inutil de pe CPU, să reduc procesarea repetitivă și să obțin FPS mai stabil acolo unde contează cel mai mult: în zonele cu mulți playeri, monștri și modele animate.
Pe scurt: avem Granny2 2.11, dar clientul nu profită suficient de el.
Scopul acestui update este simplu:
mai puține sacadări, frametime mai bun și mai multe FPS în zone aglomerate.
1. Conversia modelelor 2.4 → 2.11
Primul pas este conversia tuturor modelelor `.gr2` din client în format Granny2 2.11.
Aici intră practic majoritatea elementelor 3D din joc: caractere, monștri, NPC-uri, arme, armuri, animații etc.
Impactul principal:
- procesare mai eficientă a modelelor;
- mai puține micro-sacadări;
- FPS și frametime mai stabile;
- performanță mai bună când sunt multe caractere pe ecran.
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.Pentru cine vrea să își facă propriile tool-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.2. Runtime Rewrite + GPU Skinning
Conversia modelelor este doar primul pas.
În următoarea etapă lucrez la:
- GPU Skinning;
- rescrierea wrapper-ului Granny2;
- optimizarea shaderelor;
- Shape caching;
- batching;
- reducerea calculelor și upload-urilor inutile către GPU.
De exemplu, anumite fișiere Granny sunt compilate în Release cu MinSpace în loc de MaxSpeed.
În plus, skinning-ul actual poate recalcula și reîncărca date chiar și atunci când pose-ul caracterului nu s-a schimbat.
Noul backend va evita aceste operații inutile.
Asta devine important mai ales când ai zeci sau sute de caractere, monștri și efecte pe ecran, adică exact situațiile în care Metin2 începe să piardă masiv FPS.
Legacy vs New Backend
Implementarea va fi complet separată.
Cod: Selectaţi tot
ModelInstanceUpdate.cpp
Noul cod va fi în:
Cod: Selectaţi tot
ModelInstanceUpdateGranny2.cpp
Cod: Selectaţi tot
ENABLE_GRANNY2_RUNTIME_REWRITE
GPU Skinning și celelalte optimizări vor avea și ele define-uri independente pentru testare.
Ce urmează
În zilele următoare voi continua testele și implementarea.
Reveniți la acest post săptămâna viitoare. Dacă totul merge conform planului, voi adăuga:
- varianta publică;
- GPU Skinning;
- Granny2 Runtime Rewrite;
- comparații legacy vs noul backend;
- teste FPS / frametime;
- video-uri în scene aglomerate.
Granny2 2.11 există în source de mulți ani, dar mare parte din engine încă îl folosește ca pe vechiul Granny2.
Acum încerc să schimb asta și să mut o parte din workload-ul inutil de pe CPU, să reduc procesarea repetitivă și să obțin FPS mai stabil acolo unde contează cel mai mult: în zonele cu mulți playeri, monștri și modele animate.


