Registriert seit: 30. Jul 2008
125 Beiträge
|
Re: schneller Panoramaviewer, Überlegungen (Diskussion)
28. Dez 2009, 14:13
Vielen Dank für eure Vorschläge. Natürlich habe ich schon an die Skybox gedacht, aber nun eines nach dem anderen:
Es soll ich um eine Erweiterung der Standardzeichenroutinen handeln, die auf normalen Bitmaps rechnet. So habe ich schon eine Stretchdraw-routine implementiert, die 1600x1200 auf einer alten CPU (1,83 GHz single core "Barton 2500+") in 5-6ms rendert, MMX-optimiertes Alphablending vergleichbarer performance und noch ein paar andere Sachen. Es zählt zu den Anforderungen des Programms, dass es auch auf älteren Systemen gut lauffähig sein soll, daher würden sich schon 32MB und 64MB Grafikkarten an der Skybox eines 8000x4000-Panoramas verschlucken (~72MB für sechs 2000x2000x24bit-Bilder).
Ein weiteres Problem, das sich dabei ergibt, ist die Initialisationszeit. Der Nutzer soll maximal 1 Sekunde warten müssen, bis der Viewport gestartet ist, das geht nur mit Approximationen. 12000x2000 Pixel exakt berechnen dauert sehr, sehr lange. Für eine 50%-Ansicht des angehängten Panoramas (~1600x800) läuft die Berechnung hier schon etwa 650ms. Durch Optimierung wird man es wohl nach viel Arbeit auf 150-200ms herunterprügeln können (mit SSE und Tricks... der SSE-Befehlssatz bietet Wurzeln und trigonometrische Funktionen im Viererpack).
Was das Kugelgerüst abelangt, so haftet diesem leider auch der Speicherverbrauch auf der Grafikkarte an, allerdings lässt sich die Bildfeldwölbung beim zoomen anpassen. Schnell ist es dafür, ja, aber der Rechenaufwand ist nicht geringer und wird nur durch viele Recheneinheiten der GPU getragen.
Zum Erzeugen der Stützstellen für die lookup-Funktionen benötige ich bei dem 8000x4000x24bit Panorama etwa 10-20MB Arbeitsspeicher (die Speicherreservierung benötigt hier etwa 300ms) und anhand meiner bisherigen Implementierung extrapoliert 250-450ms (zwei der sechs Seiten des source lookups rechne ich gerade für 8000x4000 Pixel des Quellbilds in ~30ms).
Die sechs lookup tables, die an die Stelle der Skybox treten, zu deren Rendering ich wiederum Trigonometrie bräuchte, beinhalten nur ~300x300 Stützstellen, die aus 4-5 Koeffizienten bestehen.
Vielleicht sollte ich mein Anliegen in diesem Thread noch präzisieren:
Ich weiß, dass man sich mit der Thematik etwas befassen muss, um mögliche Probleme zu sehen, aber was könnte mich bei den ganzen Interpolationen noch schlimmes erwarten?
Momentan grüble ich über die Interpolationskoeffizienten...
|