PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grafikengine mit Vorrenderung möglich ?


2phil4u
2013-04-05, 17:23:48
Als ich gestern ein Gesicht im Fernsehen gesehen habe, musst ich dran denken, wie aufwaendig es ist ein halbwegs photorealistisches Gesicht zu rendern, man muss sogar die Haare weglassen und dann verbraet das Ganze schon die Haelfte der Leistung einer Titan.
Dann habe ich mir gedacht. Warum muss man das eigentlich jedes Mal neu rendern, ein Gesicht verbiegt sich ja nicht in alle möglichen Richtungen, gibt ja nur einige Möglichkeiten.
Und das ganze könnte man natürlich verallgemeinern. Ein Körper hat ja auch nur beschraenkte Möglichkeiten.
Nun die Idee. Da wir in Zukunft immer mehr Ram haben, waere es da nicht einfach einfach bsp 4 GB mit allen möglichen Perspektiven von diversen Objekten, die vorher schon gerendert wurden zu füllen, um dann im Spiel einfach nur die Information aus dem Speicher zu holen.
Ist jetzt natürlich alles etwas vereinfacht ausgedrückt und natürlich gibt es da zahlreiche Schwierigkeiten (Beleuchtung bsp), aber man könnte mit Sicherheit einige staendig wiederholte Berechnungen sparen.
Sehe da einen gewissen Zusammenhang mit dem Videokompressionsverfahren, das mit extremen Algorythmen sehr viel weniger Speicher braucht, weil es Objekte als ganzes erfasst.

kevsti
2013-04-05, 17:35:55
Ich denke du stellst dir das zu einfach vor mit den "wenigen" Möglichkeiten. Ein Gesicht mag zwar in seiner Grundform immer gleich sein, aber wir haben eine Fülle von Muskeln die teilweise extrem feinen Bewegungen ausführen können. Auf einem Standbild mag man zwar den Unterschied nicht sehen und auch in der Bewegung ist es Objektiv schwer - aber subjektiv, im unterbewussten erfassen wir sehr wohl die ganzen kleinen Bewegungsänderung.
Kurz um: Auch wenn man 10.000 vorgerenderte Gesichter hätte - wäre zwar vielleicht objektiv recht gut alles möglichen "Gesichtsbilder" abgedeckt, aber der Übergang wäre viel zu unrealistisch und grob. Und wenn man wirklich Millionen an Gesichtsbilder hätte, stell sich dann auch die Frage, wie diese aufgerufen werden sollen... Woher sollt der Computer wissen welches nachfolgende Gesichtsbild nun optimal wäre? Man müsste alles bis ins Detail vorher planen und scripten und das würde zur Ursache haben dass wir uns eher zurückbewegen als vorwärtsbewegen...

Kurzum: Viel zu viel Entwicklungsarbeit, Zu unflexibel und zu unrealistisch - das ist das bisschen mehr Detail nicht Wert...

CosmiChaos
2013-04-07, 12:46:06
4Gb perspektisches Overlay im RAM. Ja klar, ziel 60fps und dann zieh mal ausm RAM von "übermorgen", auf der ja auch noch alles des Spiels berechnet werden muss, was non-graphic ist.... viel Spass. Aber wie kommt die Grafikkarte eigentlich an den PC_RAM? :D Wenn schon dann im Vram. Aber hey auch in Zukunft hat nich jeder 4gb Vram, und wer nich genug hat sieht dann einfach keine Models oder was? Zumal der reine Rechenoverhead für so ein Müll teurer ist als gleich zu Rasterizen.

Ausserdem wieviel Winkel von einem Objekt willst du denn recorden. 360? Das könnt für 2D schon ungenau werden. Weißt du wieviele perspektivische Möglichkeiten ein 3d-Objekt hat.

Junge du hast dir gerade überlegt ob man mit der Steinzeit die Moderne revolutionieren könnte. So funktionieren uralte 2D-Spiele mit isometrischer Kameradarstellung. Machn Startup mit irgendwelchen Buzzwords und lass dich aufkaufen. ;D

Noch nie son Schwachsinn gehört sry.

Spasstiger
2013-04-07, 13:28:52
Da gibt es viel zu viele Varianten, die man speichern müsste.
Erstmal die Kameraperspektiven. Würde man mit einer Winkelgenauigkeit von 0,1° abbilden wollen, bräuchte man dafür schon 3600*1800=6,48 Mio. Perspektiven.
Dann kommen die möglichen Gesichtsausdrücke. Würde man z.B. 10000 verschiedene Gesichtsanimationen von je einer Sekunde Dauer mit einer zeitlichen Auflösung von 60 fps abbilden wollen, ergäben sich 600.000 Möglichkeiten. Multipliziert mit den 6,48 Mio. Perspektiven sind wir schon bei 4 Bilionen Kombinationen.
Und dann das ganz große Problem: Die Anzahl und Positionen der Lichtquellen. Will man auch indirektes Licht berücksichtigen, muss man eine sehr große Anzahl von Lichtquellen in das Vorrendering einbeziehen. Alleine für eine angemessene Anzahl an Lichtquellenkombinationen würde ich nochmal weit über 1 Mrd. Kombinationen ansetzen.
Letztlich kommen wir in den Bereich von Quadrillionen Kombinationen. Das resultiert selbst nach effizienter Komprimierung in Trilliarden an Bytes (Zettabytes). Und das Vorberechnen all der Bilder würde selbst bei Nutzung aller Computer auf der Welt gleichzeitig bis zum Ende der Zeit dauern.
/EDIT: Wenn man die Haardarstellung einbezieht und viele Charaktere rendern will, wirds nur noch lächerlicher.
Echtzeitrendering ist NICHT ineffizient.

Nasenbaer
2013-04-07, 13:57:36
Deine Idee hatten übrigens schon andere, z.B. hier für Terrains: http://www.dgp.toronto.edu/~schubert/imposter.html

Habe auch mal eine Diplomarbeit Dissertation dazu gesehen. Dort wurde die Szenerie auch vorgerendert und entfernungsabhängig "Scheiben" daraus geschnitten (z.B. alles was 100m-110m entfernt ist könnte solch ein Scheibchen sein). Zusätzlich hat man aber die Kamerabewegung stark eingeschränkt - die Szene war eine enge Straßengasse und die Kamera in Augenhöhe eines Menschen.
Dadurch kann man natürlich die Daten "gering" halten aber die Einschränkungen bestehen trotzdem. Ein Dozent hatte das als total cool angesehen und gedacht das wäre die Zukunft - LOOL. Das Problem ist nämlich, dass sich so ein vorgerendertes Bild natürlich nicht gescheit nachträglich beleuchten lässt, denn die Geometrieinformationen fehlen ja. D.h. die Beleuchtung muss gleich sein. Gleiches gilt auch für die Texturen des Objektes. Und natürlich sind weiterhin nur wenige Perspektiven möglich aus denen man das Objekt betrachten kann - andererseits würde die Datenmenge explodieren (siehe Spasstigers Rechnung).

Also ums kurz zu machen: bringt für Objekte des näheren Umgebung, wie Charakteren. Dort wo der Sichtwinkel eingeschränkt ist, z.B. der Mond, gesehen von der Erde aus, dort wird es so gemacht. Das sind stinknormale Billboards, die genau auf dieser Idee basieren. :)

RLZ
2013-04-07, 15:06:34
Nun die Idee. Da wir in Zukunft immer mehr Ram haben, waere es da nicht einfach einfach bsp 4 GB mit allen möglichen Perspektiven von diversen Objekten, die vorher schon gerendert wurden zu füllen, um dann im Spiel einfach nur die Information aus dem Speicher zu holen.
Ist jetzt natürlich alles etwas vereinfacht ausgedrückt und natürlich gibt es da zahlreiche Schwierigkeiten (Beleuchtung bsp), aber man könnte mit Sicherheit einige staendig wiederholte Berechnungen sparen.
Die Daten für das Gesicht stammen ja einzelnen Bildern (https://www.youtube.com/watch?v=wT2uFlP0MlU).
Allerdings kommen da aus einer einziger Perspektive allein für die Beleuchtung gigantische Datenmengen zusammen. Im Prinzip hat man diese Daten schon extrem komprimiert und ist mit der heutigen Rechenleistung auch endlich in der Lage diese wieder in Echtzeit zu rendern.

Milchkanne
2013-04-07, 15:13:59
Nicht so wie der OT das vorgeschlagen hat, aber im Prinzip ist doch jede art des Bakings ein vorrendern der Szene. Also Lightmaps, Bumpmaps, Subsurface Scattering... auch Physik wird oft vorberechnet.
Früher bei Wolfenstein, Doom usw. waren die Gegner auch nur Sprites und damit quasi vorgerendert/-gezeichnet. Aber das skaliert ja wie hier bereits erwähnt einfach nicht.
Genau andersherum geht der Trend ja gerade in die Richtung eben nichts vorzurendern. Nicht nur erlaubt das volldynamische Szenen, es erleichtert und beschleunigt auch die Arbeit der Artisten.

CosmiChaos
2013-04-07, 15:30:16
Das meine ich ja... uralte 2d-Games bei denen man von oben herab auf eine Schachbrett/Kaskaden-Grafik schaut haben sowas verwenden weil realistisches/dynamisches/freies 3D zu viel Grafikleistung gefressen hätte. Die Objekte ließen sich dann auf 4 verschiedene Seitenansichten rotieren. Das ganze lief auf dem CPU. Funktioniert nur nicht mit einer Freien-Kameraperspektive bzw echtem 3D oder besser gesagt realistisch emuliertem 3D (man kommt ja leicht durcheinander mit der neuen Stereoskopischen-Technik). Die Anzahl der Möglichkeiten ist durch den hohen ANspruch an die Genauigkeit so astronomisch um das Verarbeiten zu können brauch man Rechen- und Transferleistungen jenseits von gut und böse, so dass man mit solcher Hardware und im vernünftigen GPU-3D-Rasterezing-Verfahren wahrscheinlich zig Spiele parralell auf 60fps laufen lassen könnte bevor da mal ein HD-Gesicht auf einem Model in einer 3D-Umgebung so auf die Art daherruckelt. Die Idee ist absolut Plemm Plemm. Derjenige der den Thread gestartet hat, begreift nichtmal dass der Grafikprozessor garnicht direkt auf den RAM zugreifen kann, sondern vom CPU gespeist wird. Weiterhin versteht er nicht, dass RAM-Menge nichts mit High-Performance-Tauglichkeit zu tun hat wenn es um benötigte gigantische Bandbreiten geht, fern ab davon, dass genaue perspektivisch unabhängige vorgerenderte Daten von Objekten für den herkömlichen Inhalt eines 3D-Spieles sicherlich eher im bereich von Terabytes liegt... mit 4GB is da nich viel zu reißen. Mit dem Rastererizer gibts ein Model und Texturen und fertig ist ein komplexes 3D-Model im Megabyte-Bereich. Und wenn, dann müsste der vorgerendert Kram immernoch irgendwovon zusammengefügt werden, kostet zusätzliche Rechenleistung. Spätestens jetzt merkt auch der letzte, dass die ABKEHR von solchen Verfahren überhaupt erst realistisches, dynamisches und freie 3D-EMulation ermöglicht. Ob jetzt irgendwo ein Mond ungefähr auf die Art auf den Himmel gepflansht wird spielt dabei auch keine große Rolle. 2 Meter weiter denken... sollen die SPieleschmieden den ganzen Tag irgendwelche nummerierten Ordner mit Gigabyteweise Daten füllen und die Spiele letztendlich aus Platzgründen für 500 Euro auf SSDs zu verkaufen anstatt richtig zu arbeiten. Als Konzept ist das auf keienr Ebene haltbar. Sowas kommt höchstens mal zum Einsatz wenn sich eben Einzelne Objekte einfach, kompakt und ohne Rechenaufwand darstellen lassem, wie eben den Mond. Für alles was aus SPielersicht nich (mehrere Millionen) Kilometer weit entfernt ist - also fast alles - ist das Unnütz. Jeder einzelne Objekt-Zustand mehr VERDOPPELT den Platzbedarf. Vergessen, Thread schließen.

Erinnert mich an diese Nostalgiker-Pfosten die ernsthaft behaupten PhysikBERECHNUNG wäre nix neues nur weil es Anno 198x schon irgendwelche 2D-Sprite-Animationen gab und die Scene aus der einen festen Kameraperspektive halbwegs 3D anmutete. Wenn die anfangen Ihre Ideen für die Spielerevolution zu posten könnt ich brechen.

Zum Glück kam damals T&L
http://de.wikipedia.org/wiki/Transform_and_Lighting

Zitat:
„Transform“ bezeichnet die Transformation der Weltkoordinaten eines Vertex in zweidimensionale Bildschirmkoordinaten mittels einer Transformationsmatrix. Da sich sowohl die Weltkoordinaten (Objekt bewegt sich in der virtuellen Welt) als auch die Transformationsmatrix („Kamera“ bewegt sich oder ändert ihren Zoom) ständig ändern können, muss die Transformation für jedes Bild aufs Neue durchgeführt werden.

Das bedeutet zumindestens auf der Rechenebene realistische/dynamische/genaue und performante 3D-Emulation auf dem GPU und dagegeben kommt das was du dir da ausgedacht hast niemals an. :D

Also ich bin zufrieden und bekomm nich gleich die hellsten "Geistesblitze" nur weil zu viel RAM frei ist... bzw der so billig ist.

Kurz gefasst: Modeldatei (geringer AUfwand) + Texturdatei (geringer Aufwand) + Vektor-Transformierung = LÄUFT (wenig Rechenaufwand, platzsparend, winkelunabhängige 3D-realistische Darstellung von dynamischem Inhalt). Alles andere für 3D-Emulation: Vergiss es!