Das ist echt ne gute Frage und die Antwort hängt stark von der verwendeten Grafikkarte und dem Prozessor des Rechners ab.
>Engines arbeiten ja intern iDR. mit Triangels
Ja, das ist so. Der Renderer von Cinema4D versteht allerdings Triangles und Quads - beim Raytracing ist aber ohnehin einiges ganz anders.
Ich versuche mal grob zu umreissen wie sich das alles in Shockwave3D bzw. Biont3D zusammensetzt.
Texturen: Texturen werden im VRAM der Grafikkarte immer unkomprimiert gespeichert. Damit hängt der benötigte Speicherplatz allein von den Ausmassen der Grafik ab. Liegen die Grafiken nicht in brauchbaren Pixelseitenverhältnissen vor, werden die Texturen auf das nächste brauchbare Mass hoch- oder runterskaliert. (
http://biont3d.com/doku/#punkt51 )
In Cinema4D kann man den Benötigten Speicherplatz für Texturen auch ablesen. Dazu einfach in einem Material unter "Illumination" die "Textur: Vorschaugrösse" verstellen bzw. ablesen was in Klammern hinter den Auflösungen steht.
512x512 (1 MB)
1024x1024 (4 MB)
usw.
Es lohnt sich also hier schon mit dem Haushalten zu beginnen. Für Internetanwendungen ist es besser man geht (abhänging von der Zielgruppe) von kleineren Werten aus (z.B. 128 MB).
Shader:Je mehr Shader in einer Szene Verwendet werden, desto langsamer. Für gute Performance sollten es ~100 sein.
Je mehr Shader auf einem Modell verwendet werden (über Selektionen) desto langsamer wird es. Unter umständen lieber in seperate Modelle aufteilen.
Anzahl der Modelle:Je mehr Modelle, desto langsamer (das ist relativ unabhängig von der Menge der Polygone). Wenn möglich also so gut es geht Modelle zusammenfassen.
Anzahl der Polygone:Je mehr Polygone in einer Szene verwendet werden, desto langsamer wird es. Sind die Polygone auf wenige Objekte verteilt, wird es schneller.
Wie optimiert Biont3D?1. Sichtfeld der KameraIn Biont3D werden zunächst nur die Modelle gerendert, die auch im Sichtfeld der Kamera sind. Dieses Sichtfeld kann man mit dem "biont_fog" nach hinten clippen.
Es werden dann nur die Modelle gerendert, die sich innerhalb des Sichtpyramide der Kamera befinden.
Ob ein Modell gerendert wird, hängt davon ab, ob die "Boundingsphere" des Modelles innerhalb des Sichtfeldes der Kamera liegt.
Hierzu habe ich mal eine kleine "Terrain"-Demo gebaut:
http://biont3d.com/demo/terrain/(~9 MB)
Zu sehen ist eine Szene mit insgesamt 281 250 Polygonen aufgeteilt auf 225 Modelle. Die Sichtweite wurde auf 7500 Einheiten begrenzt.
2. Dynamisch PolygonreduktionAls zweite Methode zur verbesserung der Performance gibt es eine dynamische Polygonreduktion. Diese versucht zunächst bei Modelle die weiter von der Kamera entfernt sind polygone zu reduzieren.
Hierzu eine andere Demo:
http://biont3d.com/demo/highpoly(~10 MB)
Hier sind 27 Modelle zu sehen, die insgesamt fast 1 000 000 Polygone besitzen. Die Polygonreduktion wird besonders dann sichtbar, wenn man unter "Options" auf "renderstyle: wire" umschaltet.
Wenn zusätzlich auch die "polygonereduction" auf "false" gesetzt wird, wird der Performanceunterschied deutlich.
Wenn man mit dem Button der unter der FPS Anzeige angebracht ist, die Framerate verringert, dann wird auch die dynamisch Polygonreduktion weniger aggressiv.
3. "Backfaceculling" Standardmässig werden alle Polygone nur von einer Seite gerendert. Wer Modelle braucht, die von beiden Seiten sichtbar sein sollen, kann das auf zwei wegen machen.
Die erste Methode ist das "Shockwave3D-beidseitig" Tag zu verwenden (alternativ auch "mymodel|both") oder das Modell einmal kopieren, normalen umdrehen und mit dem Original "verbinden".
Der Unterschied ist, dass bei Modellen die mit "both" oder dem "Shockwave3D-beidseitig"-Tag markiert sind immer beide Seiten des Modelles gerendert werden. Damit ist die Anzahl der zu rendernden Polygone doppelt so hoch wie die eigentliche Anzahl der Polygone. Wenn man nun die doppelte Anzahl von Polygonen verwendet, wird stets die hälfte ausortiert und die resultierende Menge entspricht lediglich der einmaligen Polygonzahl des Ausgansobjektes. (Ich hoffe das war irgendwie halbwegs verständlich).
Kurzes Fazit:Wenn die Polygone gleichmässig in der Szene verteilt sind, könnte das ganze theoretisch Funktionieren (Vorrausgesetzt es soll nur auf einem neuere Rechner mit schneller CPU und guter Grafikkarte laufen).
Biont3D ist eigentlich nicht wirklich dafür ausgelegt mit solch grossen Szenen zu hantieren, es sollte primär dazu dienen mit möglichst kleinen Dateien auch übers Internet 3D Inhalte zu verbreiten (und diese Dateien recht schnell und einfach anzufertigen).
Sollte das Projekt nicht in Biont3D funktionieren, kannst du Szene natürlich auch in anderen Engines verwenden. Das geht natürlich deswegen ganz gut, weil alle Arbeiten in Cinema4D erledigt werden und kein gesonderter Leveleditor verwendet werden muss.
Grundsätzlich ist es aber echt eine nicht ganz einfache Angelegenheit solche Szenen vernünftig zu handlen, ich glaube im neuen GTA4 ist das recht gut gelöst.
Grüsse
Lutz