Bruce Slater
2002-06-19, 13:06:47
Viele sagen "dieses Spiel ist toll, aber das andere ist noch besser"
usw. - da weiß man nicht mehr was man haben will und nicht wenige
wünschen sich ein perfektes Spiel und perfekte hardware.
Beim PC-Spiel will ich jetzt nur auf die 3D-Features eingehen,aber
vielleicht schreibe noch allgemeines.
Wie soll nun ein grafisch perfektes Spiel aussehen?
Es muss Reflexionen,Lichteffekte,Schatteneffekte,Morphingeffekte,
Farbveränderungen darstellen können, räumlich wirken,
hochdetailliert (sehr viele Details, sehr viele Polygone,Curved Surfaces)
sein, viele weitere 3D-Effekte (Transparenz,Raucheffekte)
nutzen, dazu noch scharf sein (hochwertige Filter einsetzen)
und dennoch große Landschaften perfekt darstellen können.
Zu guter letzt dürfen keine Defizite an der Bildqualität
(Aliasing,Polygonpopping,Dithering-Effekte) entstehen und
das Spiel muss mit ABSOLUT flüssigen 90fps laufen.
(einige werden sagen 60fps sind ausreichend aber zwischen
60 und 90fps gibt es deutlichen Unterschied)
Wie kriegt man das nun hin? Spiele wie Unreal 2 und Doom 3 haben
das schon teilweise geschafft!
a) Generell gilt: Je mehr Effekte man nutzen will umso mehr Textur-
schichten muss man einsetzen. In diesem Fall:
1.) Base Texture (Basis Textur)
2.) Detail Texture (Detail)
3.) Morphing-Map (Veränderungen am Objekt/Textur)
4.) Lightmap (Beleuchtung)
5.) Reflexion-Map (Reflexionen)
6.) Bump-Map (3D-Illusion)(am besten Displacement-Map)
7.) Effect-Map (für weitere 3D-Effekte an der Textur)
8.) Color-Map (für Farbveränderungen an der Textur)
9.) 8 Shadowmaps/Lichtquellen (Schatteneffekte)
= insgesamt 16 Texturschichten
Einige werden sagen die Bump Maps könnten die Reflexionen ersetzen
aber ich finde es ist unbefriedigend (höchstens Cube Environment
Mapping (könnte) in Frage kommen)
Mit Effect Maps könnte man weitere Effekte (Etwa Motion Blur,
Tiefenunschärfe,Hitzeflimmern,Fata Morgana etc.) ermöglichen
DirectX-9 fordert mindestens 16 Texturschichten um zu laufen. D.h.
mit DirectX-9 ist man (fast) gerüstet. Zudem unterstützt es Displace-
ment Mapping.
Nun müssen 3D-Effekte frei programmierbar sein. Seit DX8 und
Nvidia GeForce3 ist das möglich,aber nicht perfect. DX9 ist schon
besser. DX10 sollte die Anforderungen erfüllen.
(Man könnte sagen DirectX10 und OpenGl 2.0 werden das Tor zum
Fotorealismus sein)
Soviel zu den 3D-Effekten
b) 3D-Effekte allein reichen für Realismus nicht aus - die Texturen
und die Spielewelt muss detailliert sein (Mercedes Benz Truck Ra-
cing ist schon ein Versuch). In Doom 3 und Unreal 2 gibt es
Szenen mit einer Rekordzahl von über 200000 Polygonen - bis zu
10000 für die Spielfiguren.
Mein Vorschlag:
mindestens 100000 Polygone für Spielfiguren
mindestens 10000000 Polygone für die Umwelt/Landschaften
bis zu 35000 Polygone Gegenstände
und 3500 - 10000 Polygone für 3D-Effekte
mindestens 2048x2048 Texturen bis 16k x 16k*Texturen
...Und der Einsatz von Curved Surfaces
* = vor allem bei Objekten mit vielen Einzelheiten(z.B Bäume)
Hinzu kommt noch eine große Sichtweite (z.B. bei Grand Prix 4,
F12002) von mehreren Kilometern. Dabei muss folgendes beachtet
werden: je entfernter das Objekt umso weniger kann das mensch-
liche Auge sehen - das kann man nutzen um die Performance zu
steigern indem man die Trianglezahl verringert da diese bei
großen Entfernungen keine Rolle mehr spielt. Vor allem bei
komplexen Objekten (Bäume bzw. Blätter, Wolken,kugelförmige
Objekte,Verformte Objekte) sollte die Trianglezahl extrem hoch
sein - da diese sonst unrealistisch aussehen (Die Bäume in Ser.
Sam 1/2 sehen beschissen aus weil die Blatter scharf und kantig
sind - was an der ungenügenden Polygonzahl liegt) - da sollten
schon "mindestens" 150000 Polygone stecken.
Die Umwelt muss zudem mit vielen Objekten und Gebäuden bestattet
werden (z.B komplexe Denkmäler,Autos in großer Zahl,Bäume mit
vielen Blättern, viele Wolken in verschiedenen Formen,hochdetaill
ierter Himmel/Nachthimmel mit sehr vielen komplexen Himmelskörpern
,Gebäude mit vielen Details z.B. mit detaillierten Fenstern,Werbe-
tafeln, viele Lichteretc.)
Kurz: alles muss so aussehen wie im richtigen Leben, sogar noch
besser. 10 Millionen Polygone würden ausreichen.
c) Damit das Bild in ALLEN Bereichen scharf bleibt, sollte 128x Aniso
tropisches Filtering und 8-16x Anti-Aliasing und sehr hohe Auflö-
sungen (mindestens 1600x1200) eingesetzt werden.
d) Zudem darf keine der 3D-Effekte unrealistisch wirken. Daher muss
vorher berechnet werden wie stark zum beispiel eine Lichtquelle ist
oder wie groß die visuelle Reichweite einer Druckwelle ist und wie
es aussehen muss und welche Faktoren noch hinzukommen usw.)
Wie hoch ist nun die Speicherbandbreite eines solchen Spiels?
X-Res. x Y-Res. x Farbtiefe x Owerdraw (entfällt bei Tilebased-cards)
x Schreibrate (0.33 bis 0.5)
Das perfekte Spiel (Game X): (1600x1200er Auflösung)
1600x1200x8(64Bit= 8 Bytes)x1x0.3333333
= 5120000 Bytes = 5.12 MB/Frame für Frame buffer
Dies ist der Framebuffer.
Ich gehe vom optimalen Fall aus,bei der Annahme eines tilebased
Karte- so das ich den Z-Buffer hier auslaussen kann und es kein
Owerdraw entsteht und komme deswegen schon zur Texturspeicherband-
breite:
X-Res. x Y.-Res. x Farbtiefe x Owerdraw(entfällt)xAnzahl Texturen x
Anzahl Texturschichten.
Unser Spiel "Game X" benutzt ja 16 Texturschichten und Anisotropisch-
Filtering. Aniso. Filtering benötigt 4 Texturen. Also schreiben wir:
1600x1200x8x1x4x16
= 983400000 Bytes = 983,4 MB/Frame für Texturspeicher
Addieren wir nun diese Werte:
5.12MB + 983.4 MB = ca. 988 MB
Hinzu kommt noch die Speicherbandbreite für die Schattenerzeugung
aber darauf will ich jetzt nicht eingehen-weil es sehr kompliziert
ist. Ich ergänze den letzten Wert auf 1000 MB also 1GB/Frame
Ergebnis: Unser Spiel "Game X" benötigt ca. 1GB Speicherbandbreite
um EIN Bild zu rendern. Wir benötigen aber ja 90 Bilder
pro Sekunde (oder auch 90 Frames). Also multiplizieren wir
den Wert mit 90:
90Frames x 1GB / Frame = 90 GB Speicherbandbreite
Das ist nicht alles: wir wollen ja auch Anti-Aliasing einsetzen.
Bei 16x AA ergibt das dann ca. 1.5 Terabyte/sekunde.
Das ist das 150fache was eine GF4 Ti4600 bieten kann!!!
Aber da es bereits Techniken gibt die den Leistungsverlust durch
AA verringern kann man sagen das unser Spiel "Game X" 350GB Speicher
bandbreite in einer Sekunde benötigt, das 30fache was eine GF4 Ti
4600 vielleicht schafft.
Das ist immer noch nicht alles - die Polygone müssen auch noch berechnet werden. Nehmen wir an Game X hat durchschnittlich
30 Spielfiguren (ich spreche hier jetzt von Ego-Shooter)
die jeweils aus 100000 Poly's bestehen und alle Waffen haben
die jeweils 35000 Poly's aufbringen.Alle schiessen aufeinander.
10000 Poly's für die entstehenden 3D-Effekte und zum Schluß
10 Millionen Polygone für die Außenwelt. Das macht dann etwa
15 Millionen Polygone pro Bild. Bei 90 Bildern in einer Sekunde
ergibt das 1.3 GigaTriangles/sek. , das 10 fache einer GF4 Ti4600
. Aber um diesen Polygondurchsatz zu ermöglichen muss der AGP slot
und der Prozessor noch mehr Leistung haben. Nicht einmal AGP 8x
würde hier ausreichen. Hier gehe ich vom worstcase aus (also nicht
das sich die Polygone verringern da die Spielfigur nicht weit
entfernt ist).
Erst AGP16X(und höher) und die Prozessoren der nächsten Jahre
könnten mit einer solchen Menge fertigwerden.
Das war's. Mehr fällt mir nicht ein.
Die perfekte Grake wäre:
8 ixel Pipelines mit jeweils 8 Texturpipelines
500 Mhz Chiptakt
500 Mhz Speichertakt mit Quad Date Rate (effektiv also 2Ghz)
1024Bit - Speicherinterface
Curved Surface Unterstützung
Quad Vertex Shader mit Poly-Leistung von 1.4 gigatriangles
Tile Based Renderer
DirectX-10 Unterstützung
OpenGl 2.0 compatibel
PixelShader 2.0
"Fusion"-API (die sowohl CPU als auch GPU leitung profitiert)
Was sagt 3D-Center dazu?
usw. - da weiß man nicht mehr was man haben will und nicht wenige
wünschen sich ein perfektes Spiel und perfekte hardware.
Beim PC-Spiel will ich jetzt nur auf die 3D-Features eingehen,aber
vielleicht schreibe noch allgemeines.
Wie soll nun ein grafisch perfektes Spiel aussehen?
Es muss Reflexionen,Lichteffekte,Schatteneffekte,Morphingeffekte,
Farbveränderungen darstellen können, räumlich wirken,
hochdetailliert (sehr viele Details, sehr viele Polygone,Curved Surfaces)
sein, viele weitere 3D-Effekte (Transparenz,Raucheffekte)
nutzen, dazu noch scharf sein (hochwertige Filter einsetzen)
und dennoch große Landschaften perfekt darstellen können.
Zu guter letzt dürfen keine Defizite an der Bildqualität
(Aliasing,Polygonpopping,Dithering-Effekte) entstehen und
das Spiel muss mit ABSOLUT flüssigen 90fps laufen.
(einige werden sagen 60fps sind ausreichend aber zwischen
60 und 90fps gibt es deutlichen Unterschied)
Wie kriegt man das nun hin? Spiele wie Unreal 2 und Doom 3 haben
das schon teilweise geschafft!
a) Generell gilt: Je mehr Effekte man nutzen will umso mehr Textur-
schichten muss man einsetzen. In diesem Fall:
1.) Base Texture (Basis Textur)
2.) Detail Texture (Detail)
3.) Morphing-Map (Veränderungen am Objekt/Textur)
4.) Lightmap (Beleuchtung)
5.) Reflexion-Map (Reflexionen)
6.) Bump-Map (3D-Illusion)(am besten Displacement-Map)
7.) Effect-Map (für weitere 3D-Effekte an der Textur)
8.) Color-Map (für Farbveränderungen an der Textur)
9.) 8 Shadowmaps/Lichtquellen (Schatteneffekte)
= insgesamt 16 Texturschichten
Einige werden sagen die Bump Maps könnten die Reflexionen ersetzen
aber ich finde es ist unbefriedigend (höchstens Cube Environment
Mapping (könnte) in Frage kommen)
Mit Effect Maps könnte man weitere Effekte (Etwa Motion Blur,
Tiefenunschärfe,Hitzeflimmern,Fata Morgana etc.) ermöglichen
DirectX-9 fordert mindestens 16 Texturschichten um zu laufen. D.h.
mit DirectX-9 ist man (fast) gerüstet. Zudem unterstützt es Displace-
ment Mapping.
Nun müssen 3D-Effekte frei programmierbar sein. Seit DX8 und
Nvidia GeForce3 ist das möglich,aber nicht perfect. DX9 ist schon
besser. DX10 sollte die Anforderungen erfüllen.
(Man könnte sagen DirectX10 und OpenGl 2.0 werden das Tor zum
Fotorealismus sein)
Soviel zu den 3D-Effekten
b) 3D-Effekte allein reichen für Realismus nicht aus - die Texturen
und die Spielewelt muss detailliert sein (Mercedes Benz Truck Ra-
cing ist schon ein Versuch). In Doom 3 und Unreal 2 gibt es
Szenen mit einer Rekordzahl von über 200000 Polygonen - bis zu
10000 für die Spielfiguren.
Mein Vorschlag:
mindestens 100000 Polygone für Spielfiguren
mindestens 10000000 Polygone für die Umwelt/Landschaften
bis zu 35000 Polygone Gegenstände
und 3500 - 10000 Polygone für 3D-Effekte
mindestens 2048x2048 Texturen bis 16k x 16k*Texturen
...Und der Einsatz von Curved Surfaces
* = vor allem bei Objekten mit vielen Einzelheiten(z.B Bäume)
Hinzu kommt noch eine große Sichtweite (z.B. bei Grand Prix 4,
F12002) von mehreren Kilometern. Dabei muss folgendes beachtet
werden: je entfernter das Objekt umso weniger kann das mensch-
liche Auge sehen - das kann man nutzen um die Performance zu
steigern indem man die Trianglezahl verringert da diese bei
großen Entfernungen keine Rolle mehr spielt. Vor allem bei
komplexen Objekten (Bäume bzw. Blätter, Wolken,kugelförmige
Objekte,Verformte Objekte) sollte die Trianglezahl extrem hoch
sein - da diese sonst unrealistisch aussehen (Die Bäume in Ser.
Sam 1/2 sehen beschissen aus weil die Blatter scharf und kantig
sind - was an der ungenügenden Polygonzahl liegt) - da sollten
schon "mindestens" 150000 Polygone stecken.
Die Umwelt muss zudem mit vielen Objekten und Gebäuden bestattet
werden (z.B komplexe Denkmäler,Autos in großer Zahl,Bäume mit
vielen Blättern, viele Wolken in verschiedenen Formen,hochdetaill
ierter Himmel/Nachthimmel mit sehr vielen komplexen Himmelskörpern
,Gebäude mit vielen Details z.B. mit detaillierten Fenstern,Werbe-
tafeln, viele Lichteretc.)
Kurz: alles muss so aussehen wie im richtigen Leben, sogar noch
besser. 10 Millionen Polygone würden ausreichen.
c) Damit das Bild in ALLEN Bereichen scharf bleibt, sollte 128x Aniso
tropisches Filtering und 8-16x Anti-Aliasing und sehr hohe Auflö-
sungen (mindestens 1600x1200) eingesetzt werden.
d) Zudem darf keine der 3D-Effekte unrealistisch wirken. Daher muss
vorher berechnet werden wie stark zum beispiel eine Lichtquelle ist
oder wie groß die visuelle Reichweite einer Druckwelle ist und wie
es aussehen muss und welche Faktoren noch hinzukommen usw.)
Wie hoch ist nun die Speicherbandbreite eines solchen Spiels?
X-Res. x Y-Res. x Farbtiefe x Owerdraw (entfällt bei Tilebased-cards)
x Schreibrate (0.33 bis 0.5)
Das perfekte Spiel (Game X): (1600x1200er Auflösung)
1600x1200x8(64Bit= 8 Bytes)x1x0.3333333
= 5120000 Bytes = 5.12 MB/Frame für Frame buffer
Dies ist der Framebuffer.
Ich gehe vom optimalen Fall aus,bei der Annahme eines tilebased
Karte- so das ich den Z-Buffer hier auslaussen kann und es kein
Owerdraw entsteht und komme deswegen schon zur Texturspeicherband-
breite:
X-Res. x Y.-Res. x Farbtiefe x Owerdraw(entfällt)xAnzahl Texturen x
Anzahl Texturschichten.
Unser Spiel "Game X" benutzt ja 16 Texturschichten und Anisotropisch-
Filtering. Aniso. Filtering benötigt 4 Texturen. Also schreiben wir:
1600x1200x8x1x4x16
= 983400000 Bytes = 983,4 MB/Frame für Texturspeicher
Addieren wir nun diese Werte:
5.12MB + 983.4 MB = ca. 988 MB
Hinzu kommt noch die Speicherbandbreite für die Schattenerzeugung
aber darauf will ich jetzt nicht eingehen-weil es sehr kompliziert
ist. Ich ergänze den letzten Wert auf 1000 MB also 1GB/Frame
Ergebnis: Unser Spiel "Game X" benötigt ca. 1GB Speicherbandbreite
um EIN Bild zu rendern. Wir benötigen aber ja 90 Bilder
pro Sekunde (oder auch 90 Frames). Also multiplizieren wir
den Wert mit 90:
90Frames x 1GB / Frame = 90 GB Speicherbandbreite
Das ist nicht alles: wir wollen ja auch Anti-Aliasing einsetzen.
Bei 16x AA ergibt das dann ca. 1.5 Terabyte/sekunde.
Das ist das 150fache was eine GF4 Ti4600 bieten kann!!!
Aber da es bereits Techniken gibt die den Leistungsverlust durch
AA verringern kann man sagen das unser Spiel "Game X" 350GB Speicher
bandbreite in einer Sekunde benötigt, das 30fache was eine GF4 Ti
4600 vielleicht schafft.
Das ist immer noch nicht alles - die Polygone müssen auch noch berechnet werden. Nehmen wir an Game X hat durchschnittlich
30 Spielfiguren (ich spreche hier jetzt von Ego-Shooter)
die jeweils aus 100000 Poly's bestehen und alle Waffen haben
die jeweils 35000 Poly's aufbringen.Alle schiessen aufeinander.
10000 Poly's für die entstehenden 3D-Effekte und zum Schluß
10 Millionen Polygone für die Außenwelt. Das macht dann etwa
15 Millionen Polygone pro Bild. Bei 90 Bildern in einer Sekunde
ergibt das 1.3 GigaTriangles/sek. , das 10 fache einer GF4 Ti4600
. Aber um diesen Polygondurchsatz zu ermöglichen muss der AGP slot
und der Prozessor noch mehr Leistung haben. Nicht einmal AGP 8x
würde hier ausreichen. Hier gehe ich vom worstcase aus (also nicht
das sich die Polygone verringern da die Spielfigur nicht weit
entfernt ist).
Erst AGP16X(und höher) und die Prozessoren der nächsten Jahre
könnten mit einer solchen Menge fertigwerden.
Das war's. Mehr fällt mir nicht ein.
Die perfekte Grake wäre:
8 ixel Pipelines mit jeweils 8 Texturpipelines
500 Mhz Chiptakt
500 Mhz Speichertakt mit Quad Date Rate (effektiv also 2Ghz)
1024Bit - Speicherinterface
Curved Surface Unterstützung
Quad Vertex Shader mit Poly-Leistung von 1.4 gigatriangles
Tile Based Renderer
DirectX-10 Unterstützung
OpenGl 2.0 compatibel
PixelShader 2.0
"Fusion"-API (die sowohl CPU als auch GPU leitung profitiert)
Was sagt 3D-Center dazu?