Videokaart bandbreedte besparen

Pagina: 1
Acties:

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 14:22
De laatste tijd is de bandbreedte van een videokaart bepalend voor de prestaties in hoge resolutie. En de nieuwe ATI RadeOn gebruikt bandbreedte besparende technieken, waarmee de effectieve bandbreedte wordt vergroot en de kaart dus sneller is dan bijvoorbeeld de GeForce 2.

Ik weet niet hoeveel van jullie kennis hebben van 3D Graphics, dit kan namelijk wel een beetje technisch worden.

Ik denk namelijk dat ik een oplossing weet voor het beperken van de bandbreedte, mogelijk met 30 - 60% (dus meer dan een halvering van het bandbreedte gebruik).

De ATI RadeOn gebruikt al enkele technieken zoals het niet tekenen van onzichtbare vlakken. Dit zou een normale videokaart al moeten doen. De techniek heet Hidden Surface Removal of BackFace Removal.

Het proces van het tekenen van een enkel beeld geschiedt door een verzameling vlakken op het scherm te tekenen. Deze vlakken vallen gedeeltelijk over elkaar heen. Dus de dichtbijzijnde vlakken moeten eigenlijk als laatste getekend worden. Maar sorteren van vlakken kost meer dan O(n) (lees: Orde N) aan tijd, namelijk O(nlogn). Dus wordt de Z-buffer techniek gebruikt.
Dat betekent dat je een Z-buffer naast je normale buffer houdt om de diepte bij te houden. Deze Z-buffer wordt geinitialiseerd op "oneindig" en de onafhankelijke pixels van de vlakken worden na het renderen (= bandbreedte verspillen) alleen getekend als de dieptewaarde aangeeft dat het vlak dichterbij als de al eerder getekende vlakken. Anders worden de pixels gewoon gedumpt (en is dus verspilling van bandbreedte).

Over het algemeen (gemeten dus) wordt iedere pixel zo'n 2 tot 3 maal overschreven, voordat het plaatje goed is.

Kan iedereen dit nog volgen??

Mijn idee is dus om eerst alle vlakken langs te gaan, maar NIET de pixels renderen. Alleen de dieptewaardes ophalen. Dit kost wel tijd, maar verspilt aanzienlijk minder bandbreedte.
Immers een pixel renderen, betekent in MIPMAPing dat er vaak zo'n 8 texels (trilineair filtering) van 32 bits uit het geheugen moeten worden gehaald.
Dus NIET renderen, alleen de dieptewaarde bepalen en deze alvast in de Z-buffer gooien.
Dan begin je weer van voor af aan (er is immers nog niets gerenderd) en dan haal je (alweer) de dieptewaarde van de pixels op. (zou je toch al doen). Dan ga je de pixels ALLEEN renderen als de dieptewaarde overeenkomt met die in de Z-buffer.
Dus niets 3 maal overschrijven, maar gewoon in 1 keer het goed plaatje.
Kost geen extra geheugen, slechts 1 maal extra alle dieptewaardes ophalen.
Dus dit kost 1 maal 32-bits extra voor alle diepte waardes, maar bespaart 8 (trilineair filtering) maal 32-bits maal 2 (besparen op overschrijven) = 512 bits.

Dus normaal renderen:
3 maal 8 maal 32 bits (renderen) + 32 bits (Z-buffer) = 800 bits per pixel

Mijn manier:
1 maal 8 maal 32 bits (renderen) + 2 maal 32 bits (Z-buffer) = 320 bits.

Dit is een 60% besparing in geheugen bandbreedte!! Oftewel een performance gain van factor 2,5!

Iemand commentaar??

Kan ik hier nu patent op aanvragen?? ;)

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 17-01 08:36

Macros

I'm watching...

Hmmm, ik heb een paar dagen geleden ook die artikelen over dit soort onderwerpen gelezen, maar ik denk dat er ergens iets fout zit in je redenatie.
Kan er niet echt mijn vinger op leggen.

"Beauty is the ultimate defence against complexity." David Gelernter


  • Vinnienerd
  • Registratie: Juli 2000
  • Laatst online: 16:58
Zou leuk zijn :) Veel succes! :) :) :) :) :)

Verwijderd

Heb je al gehoord over het spel The Revolution(of hoe het ook heet). Die lui hebben een super engine.

  • Aaargh!
  • Registratie: Januari 2000
  • Laatst online: 07:33

Aaargh!

Bow for me for I am prutser

Je bedoelt Republic: The Revolution.
die hebben zeker een vette engine, "Totality" heet ie geloof ik.
zie www.elixir-studios.co.uk

Those who do not understand Unix are condemned to reinvent it, poorly.