Rechenleistung sparen?
Übersicht

![]() |
NightPhoenixBetreff: Rechenleistung sparen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe schon öfters darüber gelesen dass einiges in einem Spiel "vorberechnet" werden kann. Sind das diese Ladebalken? Spart bestimmt eine Menge Rechenleistung, oder?
Ich wollte nämlich per Zufallsverfahren (Rnd) ca. 500 Palmen als Dschungel, bzw. Wald setzen. Bei 500 Palmen mit jeweils 1400Polys sind das.. mmh... 700.000 Polygone, also ein wirklich winziges bissl zu viel. ![]() MfG. NightPhoenix |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Teile von Spielen werden vorberechnet. Das hat nichts mit Ladebalken zu tun. EIn gutes Beispiel, sind Schatten. die werden, auf der Welt vorberechnet, und dann in die Bodentextur eingebracht. Natürlich nur feste Objekte, wie Bäume, Häuser Berge etc. Nur Figuren, Autos usw. werden in Echtzeit berechnet, da diese sich ja bewegen und drehen können. Wird übrigends auch in allen komerziellen Spielen so gemacht.
Mit deinen Palmen geht das nicht, die werden ja aus unterschiedlichen Richtungen und Winkeln betrachtet. MfG Blitzcoder |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
- Zuletzt bearbeitet von Blitzcoder am Fr, Okt 20, 2006 21:24, insgesamt einmal bearbeitet
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein, mit vorberechnen meint man daten vorberechnen, die sich im Spiel nicht ändern. (steigungen an bestimten orten oder auch PVS Daten)
Modeldaten kann man nicht vorberechnen, die werden gerendert. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mmmh... Wie macht das FarCry dann zum Beispiel? Es hat ja auch ein zeimlich großes Terrain mit ziemlich vielen Bäumen. Gibt es eine Funktion in B3D die Polygone auf Entfernung senken kann? | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ersetzen durch niedrig detailierte Modelle sprich ein eigenes LoD (Level of Detail) System.
Und halt PVS (potential visibility system) in einem grossen Masse. Aber das ist beides kein "einfaches" Thema, sonst würden Systeme die zB Grünzeug effizient und schön darstellen würden, nicht so richtig schön viel Kohle kosten ^^ (wobei speedtree da noch harmlos ist) Darüber hinaus helfen EntityAutoFade sowie CameraFogRange. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
- Zuletzt bearbeitet von Dreamora am Fr, Okt 20, 2006 21:31, insgesamt 2-mal bearbeitet
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Senken nicht, aber camerarange() kann sie ab einer bestimmten Entfernung ausblenden. Natürlich werden bei den meisten Spielen auch immer nur Teile der Welt gerendert, die eben, die man sieht. Im übrigen lassen sich mit Normalmaps und guten Texturen unmengen an Polygonen sparen.
MfG Blitzcoder |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die Antworten =)
Da ich jetz nicht schonwieder ein neues Thema aufmachen will schreib ichs mal einfach hier mit rein: Wie erstelle ich Meshs mit Rnd (zufall) in einer möglichst kurzen Programmschleife? Ich hab mir mal das Beispiel unter Hilfe für Rnd/Rand angeschaut, aber werde daraus nicht viel schlauer... vielleicht weils in 2d gehalten ist... Kann mir einer das mal mit 3D Objekten erklären wie das funktioniert? So ein kleines Tutorial für solche Zufallssachen wäre mal ganz nett, auch für den Rest der Beginner hier ![]() MfG. NightPhoenix |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie Zufallsmeshs? Willst du viele Meshs zufällig verteilen, oder was? Wenn ja, dann musst du dir eben minimale und maximale Werte überlegen. z.B. von -10 Blitzeinheiten bis +10. Dann machst du z.B. 100 Mal einen Zufallswert mir Rand(-10,10) und positionierst dann das mesh danach positionentity baum ,x,0,z
MfG Blitzcoder |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau das meine ich ![]() Aber ich weiß nicht wie ich deinen Vorschlag richtig umsetzen kann, wie schon gesagt das Beispiel aus der Hilfe bringt mir wenig. Kann mir jemand mal einen kleinen Beispielcode mit zufällig angeordneten Würfeln geben, die sich nicht schneiden? Wenns nicht zu viel Aufwand ist ![]() |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] dim baum(100) seedrnd millisecs() for blubb=1 to 100 baum(blubb)=loadmesh("gfx/baum.3ds") positionentity baum(blubb),rand(-10,10),0,rand(-10,10) next |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey danke, das funzt perfekt =)
Bei 100 Palmen immernoch 65fps ^^ |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kleine Anmerkung, wenn du Copyentity benutzen würdest, könntest du sicher nochmal 5-15 Fps raushauen ![]() |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nicht wirklich.
Copyentity macht nur sinn wenn die Objekte nahe beieinander stehen. Sonst kann man sich damit ganz übel ins eigene Bein schiessen. Ist in etwa so gut wie die Idee, alles Grass in der Welt mit AddMesh zusammen zu fügen. Da kann man auch ein default "leave game again" einbauen, das macht mehr Sinn und weniger Arbeit. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die ganzen Tipps! ![]() Hier mal ein Bild vom Ergebnis: ![]() Ich habe die Palmen zufällig angeordnet und jede von ihnen zufällig um ihre Y-Achse rotiert [Rand(0,360)], damit es nicht ganz so monoton aussieht. Leider überschneiden sich 8 Palmen von 500 im Wald, aber sieht schon ganz nett aus, oder? ![]() MfG. NightPhoenix |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie schnell läuft das jetzt....? | ||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
500 Palmen ohne Nebel bei 46 fps... mit dem Nebel den du da siehst aus der Perspektive bei ca. 100fps. Das sind immernoch die alten Palmen mit den 1500Polys pro Palme ![]() Es ist ja so dass umso weniger FPS die Kamera sich durch MoveEntity auch langsamer bewegt. So bin ich bei 500fps rasend schnellm, bei 50 allerdings lahm wie ne Schnecke. Ist mir schon öfters aufgefallen. Kann man das irgendwie umgehen? Selbst in Spielen wo ich nur 10 fps habe rennt die spielfigur genauso schnell wie bei 100fps ode mehr. Ich brauche einen FPS Regulator oder Limiter, wie auch immer das heißt ![]() Kann da jemand helfen? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du suchst nach frameunabhängigem Programmieren. Dazu gibts per Suche mehrere nützliche Links hier im Forum und wenn ich nicht irre auch ein Tutorial.
Der Grundgedanke ist das ermitteln der Durchlaufzeit pro frame und dann die Bewegungsweite mit der Durchlaufzeit zu multiplizieren, da bei einer hohen Frametime auch die Bewegungsweite erhöht werden muss. Was die Palmen angeht: -Versuch dich auf Dauer besser an einem Singlesurface-System, dass wird deine Geschwindigkeit massiv boosten. - Auf Überschneidungen kann man prüfen. Speichere die Koordinaten in einem Type (oder Array) und überprüf schon beim erstellen ob die Koordinaten zu nah an anderen liegen (array/type durchlaufen lassen und vergleichen...) |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Nescio |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest bei jedem Durchlauf testen, ob eine bestimmte Zeit vergangen ist ( mit Millisecs() ).
Und zu den Palmen ist mir noch eingefallen, dass z.B. im TrainSimulator die Bäume durch zwei Sprites dargestellt werden, die überkreuzt stehen. Sähe zwar nicht so schön aus, wäre aber sicher um einiges schneller. (4 Polygone pro Baum) Ist aber vielleicht eher was für wirklick große Wiesen. |
||
Quod est faciendum? Nescio! |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
@NightPhoenix: man kann es nicht oft genug sagen -gerade bei sehr vielen Objekten macht es keinen Sinn mehr, tausend einzelne Entities darzustellen. Jedes Entity hat (mindestens) eine Surface. Je öfter Blitz (bzw. DX) intern zwischen Surfaces wechseln muss, desto langsamer ist dein Spiel -ganz abgesehen davon, das jedes Entity dann auch noch unnötig viel Speicher belegt, weil pro Mesh auch ein Haufen Settings mitverwaltet werden.
Da sollte man sich eine eigene, effizientere Lösung programmieren. Die wäre z.B., das du "Cluster" benutzt, also mehrer Palmen in ein einziges Mesh hineinkopierst. Fünf Palmen in einem Mesh ergibt schon fünf mal weniger Surfaces. Theoretisch könntest du ALLE Palmen in einem einzigen Mesh unterbringen (das nennt man "single surface", da man dann ja nur eine einzige Surface benötigt), das hat aber wieder einen Nachteil: Blitz rendert Meshes, die sich ausserhalb des Kamerabereichs befinden, normalerweise nicht (und das ist gut so). Da sich ein Mesh mit 500 Palmen aber eigentlich immer im Kamerabereich befindet, werden dann auch mit jedem Frame immer alle 500 Palmen gerendert. Deshalb muss man hier einen vernünftigen Mittelweg finden, also z.B. Gruppen von zehn Palmen in einem einzigen Mesh vereinigen und dann statt einzelnen Palmen Gruppen (Clusters) plazieren. |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also CopyEntity ist schon ganz gut da das Drahtgittermodel nicht
doppelt im Speicher landet . An deiner Stelle würde ich an einer Pos. zwei Palmen setzen und nach Entfernung eine Hi und eine Low Poly Version anzeigen . Oder auch Palmengruppen , so 3 Stück in einem 3D Editor zusammen setzen und als 1 Objekt speichern . Wenn man die dann auf dem Land verteilt braucht man sie nur um den Mittelpunkt zu drehen und es fällt kaum auf das die aus einer Gruppe bestehen . Das gleiche dann auch wieder als Low Poly . Bei der Gruppe hat man nur das Problem das bei einem Hügel die Stiele tiefer im Boden stecken müssen damit andere nicht in der Luft hängen . |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group