Rechenleistung sparen?

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

NightPhoenix

Betreff: Rechenleistung sparen?

BeitragFr, Okt 20, 2006 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Rolling Eyes Jede dieser Palmen ist genau das gleiche Objekt. Ist es möglich die Palmen so vorzuberechnen, dass B3D nicht alle 500 immer wieder neu berechnet?

MfG. NightPhoenix

Blitzcoder

Newsposter

BeitragFr, Okt 20, 2006 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Okt 20, 2006 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Okt 20, 2006 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Okt 20, 2006 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Blitzcoder

Newsposter

BeitragFr, Okt 20, 2006 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Okt 20, 2006 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

MfG. NightPhoenix

Blitzcoder

Newsposter

BeitragFr, Okt 20, 2006 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Okt 20, 2006 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau das meine ich Smile
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 Wink

Blitzcoder

Newsposter

BeitragFr, Okt 20, 2006 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Okt 20, 2006 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey danke, das funzt perfekt =)
Bei 100 Palmen immernoch 65fps ^^

aMul

Sieger des Minimalist Compo 01/13

BeitragSa, Okt 21, 2006 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleine Anmerkung, wenn du Copyentity benutzen würdest, könntest du sicher nochmal 5-15 Fps raushauen Wink
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

BeitragSa, Okt 21, 2006 10:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Okt 21, 2006 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die ganzen Tipps! Very Happy

Hier mal ein Bild vom Ergebnis:

user posted image

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? Wink

MfG. NightPhoenix

Blitzcoder

Newsposter

BeitragSa, Okt 21, 2006 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Okt 21, 2006 11:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Rolling Eyes

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 Wink

Kann da jemand helfen?

BladeRunner

Moderator

BeitragSa, Okt 21, 2006 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Okt 22, 2006 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Okt 25, 2006 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragMi, Okt 25, 2006 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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 .

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group