Archiv verlassen und diese Seite im Standarddesign anzeigen : blöde Frage
Keiner
2006-06-21, 14:43:17
Hallo Freunde,
ich hab da mal ne Frage aus reiner Neugierde zum technischen Verständnis was die Arbeitsweise von Grafikchips angeht.
Wenn mich nicht alles täuscht, dann gibt es in Spielen doch oft identisch aussehende Objekte, die aus ein und den selben Texturen bestehen, wie z.B. Blätter oder Ähnliches. Auch sonst kommen einige Texturen eventuell mehrmals vor.
Meine Frage: Läd die GraKa in so einem Fall dann ein und die selben Texturen immer wieder neu aus dem Speicher, oder läd sie die Textur nur einmal und verarbeitet sie dann für mehrere Objekte parallel?
Ein Ziel der Hersteller von Grafikchips ist ja immer, Speicherbandbreite einzusparen. Vielleicht habe ich aber einfach nur zu wenig Ahnung, was überhaupt möglich ist, da ich zu wenig über die Arbeitsweise von Grakas weiss.
Gruss
Monger
2006-06-21, 14:56:29
Du liegst völlig richtig. Alle notwendigen Texturen werden in den Grafikspeicher geladen, von wo aus man schnell auf ihn zugreifen kann. Das selbe wird auch mit Modellen gemacht - viele Gegenstände haben ja auch die selbe Form.
Das macht wohl insgesamt auch üblicherweise das Gros der Daten auf dem Videospeicher aus.
normalerweise sollten die texturen im relativ schnellen VRAM liegen, aus dem langsamen systemspeicher sollte normalerweise wenig bis garnichts nachgeladen werden.
aktuelle GPUs rendern normalerweise 1 dreieck nach dem anderen, in welcher reihenfolge diese reinkommen hängt von der grafikengine ab (normalerweise versucht man von vorne nach hinten zu rendern, damit early-Z-mechanismen wirkung zeigen, für spezialfälle, beispielsweise halbtransparente texturen muss man aber zwingend von hinten nach vorne rendern sonst gibt es grafikfehler).
die GPU selbst besitzt einen sehr kleinen cache (genaue angaben gibt es nirgends) für die texturen. da passen allerdings nur relativ kleine teile einer ganzen textur hinein. wenn also als nächstes wieder ein dreieck mit der gleichen textur gerendert wird, muss auf jeden fall der rest der textur noch mal aus dem lokalen speicher geladen werden.
wenn das rendering gerade an stellen stattfindet, wo hohe mipstufen (also kleine mips) benötigt werden, wäre es denkbar, dass hier die ganze mip in den texturcache passt und für mehrere dreiecke verwendet werden kann. um genaurere aussagen zu machen müsste man die cacheorganisation der gpus kennen, was aber außer deh IHVs selbst niemand kennt.
generell ist die bandbreite, insbesondere die texturbandbreite heutzutage keinn großes problem mehr. durch aufwändige filterungen und/oder shaderprogramme ist ein pixel heutzutage meistens lang genug in der pipeline um eventuelle bandbreitenprobleme zu verstecken, und für einfache sachen, wo die bandbreite eine rolle spielt (bilineares single-texturing) ist eh jede karte schnell genug.
texturen sollten idealerweise DXTC-komprimiert im VRAM liegen und brauchen dementsprechend wenig bandbreite.
die bandbreite könnte möglicherweise mit HDR-rendering wieder zu einem größeren problem werden, FP16-texturen und framebuffer benötigen da schon einiges.
bisherige titel, die HDR-rendering verwenden zeigen aber auch, dass es eher an rechenleistung als an bandbreite mangelt, und erste karten die HDRR wirklich schnell beherrschen (frühestens die nächste generation an GPUs) verfügen dank GDDR4 auch über in etwa doppelt so viel bandbreite wie heutige.
kompressionsverfahren für FP16-texturen wären auch denkbar, und sparen damit wieder bandbreite.
Ich vermute, dass die Grafikkarte für jedes Objekt die Textur neu aus dem Grafikkartenspeicher läd (evtl. mit Cache).
Keiner
2006-06-22, 22:33:28
Gast[/POST]']
die GPU selbst besitzt einen sehr kleinen cache (genaue angaben gibt es nirgends) für die texturen. da passen allerdings nur relativ kleine teile einer ganzen textur hinein. wenn also als nächstes wieder ein dreieck mit der gleichen textur gerendert wird, muss auf jeden fall der rest der textur noch mal aus dem lokalen speicher geladen werden.
wenn das rendering gerade an stellen stattfindet, wo hohe mipstufen (also kleine mips) benötigt werden, wäre es denkbar, dass hier die ganze mip in den texturcache passt und für mehrere dreiecke verwendet werden kann. um genaurere aussagen zu machen müsste man die cacheorganisation der gpus kennen, was aber außer deh IHVs selbst niemand kennt.
Wieso muss denn unbedingt erst ein Dreieck oder mip zuende gerendert werden, bevor unter Verwendung der im Cache gespeicherten Daten, mit der Berechnung eines Anderen an einer anderen Stelle begonnen werden kann?
Keiner[/POST]']Wieso muss denn unbedingt erst ein Dreieck oder mip zuende gerendert werden, bevor unter Verwendung der im Cache gespeicherten Daten, mit der Berechnung eines Anderen an einer anderen Stelle begonnen werden kann?
logisch gesehen rendert eine aktuelle GPU immer ein dreieck nach dem anderen. real sind in der gesamten renderpipeline ständig jede menge pixel im form von quadblöcken (ein block von 2x2 pixel)
ein quad gehört immer zu einem dreieck, verschiedene quads können durchaus zu verschiedenen dreiecken gehören.
allerdings werden immer alle quads die zum aktuellen dreieck gehören in die pipeline geschoben, dann kommt erst das nächste drann (wenn noch platz in der pipeline ist)
bei nvidia beispielsweise ist der texturcache in 2 ebenen unterteilt.
der L1-cache gehört fix zu einem quad, und kann auch nur von diesem benutzt werden, auf den L2-cache haben alle quadpipes zugriff und können dementsprechend auch deren inhalt verwenden.
wie genau diese caches organisiert sind ist allerdings nicht öffentlich bekannt.
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.