DGL https://delphigl.com/forum/ |
|
Open Rollercoaster Factory https://delphigl.com/forum/viewtopic.php?f=13&t=9159 |
Seite 1 von 1 |
Autor: | Ireyon [ Sa Apr 10, 2010 22:38 ] |
Betreff des Beitrags: | Open Rollercoaster Factory |
Moin. Ich melde mich mal einfach mit einem Projekt, das inzwischen seinen zweiten Anlauf hat und daher im Prinzip gerade erst angefangen ist, da der erste einfach scheisse gecoded war. Hatte aber für mich nen enormen Lerneffekt, ich weiß jetzt wenigstens, wie man es *nicht* macht. Der Grund, warum das Spielchen hier gerade entsteht, ist, dass sich viele Leute einen Nachfolger von Roller Coaster Tycoon 3 wünschen. Dachte ich mir also im November 2009 "Hm. Der alte Code ist mist, das alte Ziel ist mist. Warum lässt man das nicht ne komplette Parksimulation werden?" Auf genau dem Weg ist das jetzt. Auch wenn man nicht viel davon sieht. Inzwischen bin ich auch nicht mehr alleine. Hab jemanden ins Boot geholt, der hier afaik (noch) nicht angemeldet ist, mir aber immerhin schon allerlei kleineren und größeren Kram abgenommen hat. Programmiersprache ist natürlich (Free)Pascal, laufen tut es bis dato unter Linux und Mac OS X, irgendwie hatte ich das auch mal auf Windows am laufen. Wir arbeiten sehr modular, was den Vorteil hat, dass man z.B. verschiedene Context-Backends nutzen kann, man muss dies aber zur Compilierzeit einstellen. Dafür gibts ein (schlecht geschriebenes) configure-script. Standardmäßig wird das GLUT-backend genutzt, allerdings war ich bisher zu faul, alle Funktionen zu implementieren, die das Teil mal können soll. Da ist das SDL-Backend etwas weiter. Unter OSX läufts am besten mit GLFW, was natürlich voraussetzt, dass man die entsprechenden libs installiert hat. Momentan wird parallel zum eigentlichen Spiel ein Renderer entwickelt, der vollständig auf OpenGL aufbaut, die Module geben aber die Möglichkeit, bspw einen Raytracer zu verwenden - falls das irgendjemand mal macht, ist zumindest jetzt noch absolut unwichtig. Der OpenGL-Renderer rendert bisher auch einfach nur stumpf eine Terrain-Heightmap mit verschiedenen Texturleveln. Die Texturen stehen dabei allesamt mitsamt Bumpmap in einer einzigen Textur, sodass man 8 Layer in einer Landschaft unterbringen kann. Das Bild unten ist z.b. auf einer 2048x2048-Heightmap entstanden, wobei jeder einzelne Terrainblock 0.2x0.2 Meter groß ist. Im Vordergrund wird das auch mit dem Detailgrad gerendert, bis auf eine Distanz von etwa 120 Metern wird mit einem Viertel dieser Genauigkeit gerendert, danach mit einem Sechzehntel. Dabei gehen aber keine Normalen oder Texturinformationen verloren, da die ganze Map in einer Textur gespeichert und dann vom Vertexshader behandelt wird. Das Ergebnis ist ein meiner Meinung nach extrem detailliertes Terrain, das auf meiner Geforce 9800 GT ohne Posteffects über 100FPS kriegen kann (wenn man den sleep abschaltet). Frustum Culling, echtes Licht+Schatten usw. kann der Renderer in seinem derzeitigen Stadium nicht, aber das kommt alles noch. Momentan stehen andere Dinge im Vordergrund. Dafür gibts ein paar Posteffekte wie den auf dem Bild zu sehenden Schärfentiefeneffekt (auch wenn der nicht so super gelungen ist: er funktioniert ![]() Auch ein Anaglyph-Rendering ist möglich, wer also ne extrem starke Grafikkarte hat, wird das Spiel in "echtem" 3D genießen können. Allerdings ist das nur das Sichtbare. Intern ist inzwischen einiges mehr entwickelt. Dazu zählen einige billige Funktionen zum Dateizugriff, ein Loader für TGA-Dateien (auch komprimierte), ein Loader und Writer für ein eigenes, leicht verlustbehaftetes Format, das später intern verwendet werden soll, ein Loader+Writer für das später intern verwendete Dateiformat, welches übrigens teilweise auf XML setzt, und allerlei Kleinkram. Eine GUI-Basis ist natürlich auch schon da, es gibt bisher Fenster, Knöpfe, Knöpfe mit Icons, einzeilige Textfelder und Labels und Progressbars. Also immerhin schon das Wichtigste. Auch wenn ich versuche, möglichst bei OpenGL 2 zu bleiben: Die Anforderungen an die Hardware sind bereits jetzt sehr hoch, das wird sich auch nicht ändern. Zwar wird noch einiges optimiert, allerdings lege ich auch viel Wert auf gute Darstellung, und wie mir das gelingt, wird sich spätestens dann zeigen, wenn so Dinge wie Wasser und dynamische Grasbüschel erstmal implementiert sind. ![]() Ich hab garantiert noch irgendwas vergessen zu erzählen, aber ob euch jetzt alles so brennend interessiert, weiß ich nicht. ![]() Wenn das Terrain mitsamt seinen Materialien und vielleicht auch besseren Texturen irgendwann mal fertig ist, wirds interessannter, dann gehts erstmal ans Spiel. Das Projekt wird unter der Mozilla Public License veröffentlich werden (dummerweise war bisher niemand so nett, lizenz-infos o.ä. in die dateien zu schreiben), wer sich das noch sehr junge Projekt aber mal ansehen und vielleicht weiter verfolgen will, kann sich das GIT-Repository von git://github.com/ireyon/Open-Rollercoaster-Factory.git clonen. Ach ja, was ich noch sagen könnte: Sound gibts noch keinen, das Standard-Backend wird aber auf OpenAL aufbauen. Es wird eine möglichst dynamische und automatische Wetterengine geben, auch mit Wind, um Leben in die Szene zu bringen. Objekte werden gescripted werden können, wahrscheinlich in einer Pascal-ähnlichen Sprache. Und das, was alle an DX11 so toll finden, diese Tesselation, wird über Displacement-Maps umgesetzt. Das wären so die nächsten Dinge, die implementiert werden, auch wenn sie bisher im Grunde nur heiße Luft sind. Und selbst das ist vom eigentlichen Spiel noch meilenweit entfernt. In einiger Zeit nerve ich euch dann wieder mit Updates. Es geht zwar vergleichsweise schnell voran, aber es ist wirklich viel Arbeit, und zeitlich bin ich leicht eingeschränkt (Klasse 10 am Gymnasium ist nunmal leider kein Streichelzoo) Bis denne ![]() Dateianhang:
Dateikommentar: Ein kleiner Vorgeschmack
![]() Noch nie heruntergeladen |
Autor: | Ireyon [ Sa Aug 14, 2010 12:22 ] |
Betreff des Beitrags: | Re: Open Rollercoaster Factory |
Ich lasse einfach mal wieder ein Lebenszeichen hier. Auch wenn ich mehr oder weniger eine Sommerpause eingelegt habe: Es gibt eine minimale Neuerung, die man als Nutzer auch sehen kann. Um mit dem Terraineditor anzufangen, brauchte es eine Selektionsengine - und dazu wird mit einer Funktion, die auf dieser Seite zu finden ist, der Schnittpunkt zwischen Maus-Vektor und den Dreiecken eines Meshes bestimmt. Im Moment teste ich noch, wie zuverlässig das Ganze ist - dazu wird bei aktivierter Terrain-Markierung einfach die Textur des Terrains unter dem Mauscursor geändert. Aber man muss (dämlicherweise) noch auf 10 Meter Abstand runter. Dass das bisher ganz gut zu klappen scheint, sieht man auf dem Bild an den hellgrünen Stellen: ![]() Es geht also wieder weiter, und wohl auch in etwas höherem Tempo als im Sommer ![]() |
Autor: | Ireyon [ Mi Sep 08, 2010 20:47 ] |
Betreff des Beitrags: | Re: Open Rollercoaster Factory |
Keine 4 Wochen ist es her, dass ich mal ein kleines Update präsentiert habe, jetzt gibts wieder was größeres, nachdem ich fast jede einzelne Stunde in dieses Projekt gesteckt habe. Aber ich muss sagen: Ich habe es gerne gemacht, und den ersten Teil der Entwicklungen damit erfolgreich vorläufig abgeschlossen: Das Terrain. ![]() Zu sehen gibt es auf dem Bild erstmal nichts spektakuläres. Nur jeder, der die Entwicklung etwas mitverfolgt hat, vermisst den schwarzen Rand. ![]() ![]() Der Editor nochmal in Aktion. Zu sehen ist ein erstellter Berg mit den (nach wie vor hässlichen) Markierungen. Eine Höhenlinie gibt an, welcher Wert im Höhenregler gerade eingestellt ist. ![]() Der "Automatische Texturierer" texturiert das Terrain nach dem ausgewählten Kriterium. Entweder oberhalb/unterhalb der angegebenen Höhengrenze oder die Bereiche, wo das Terrain steiler ist, als der angegebene Wert. Wobei dieser Wert die Anzahl der Höhenmeter pro Streckenmeter angibt, ein Wert von 1 entspräche also 45°. Wer die nette Tangens-Funktion kennt, weiß bescheid. ![]() Auch das mit den Wasserebenen funktioniert jetzt angemessen. ![]() Nur ein kleines Beispiel für ein unrealistisches Insel-Terrain. Ach ja, der Beriech, der nichteditiert werden kann, wird ausgegraut, sobald der Terraineditor offen ist. ![]() Ein Dateiauswahl-Dialog im Hauptmenü. Damit kann man immerhin schon gespeicherte Parks laden, die natürlich auch im OCF-Format gespeichert werden. Und ja, OCF heisst so viel wie ORCF Compressed File. Nur damit ich nicht *schon* wieder gefragt werde ![]() Und wo wir gerade bei OCF-Dateien sind: Da hat sich einiges geändert. Sie werden nun verschiedenen Typen zugeordnet, zum Beispiel Textursammlungen fürs Terrain, Parks, später dann Objekte, Attraktionen usw. . Zu jedem dieser Typen kann die TOCFFile-Klasse jetzt Informationen wie Beschreibung, Name, Autor und Vorschau ausgeben. Das wird schon fleißig im Dateiauswahldialog benutzt - auch wenn gespeicherte "Parks" bisher noch keine Vorschaubilder speichern. Aber da kümmere ich mich noch drum. Ausserdem passiert das Laden jetzt parallel in einem Thread, um zu vermeiden, dass das Programm mal für 10 Sekunden steht. Allerdings wird bei bestimmten Aktionen doch synchronisiert, um z.b. zu verhindern, dass eine Datei, die noch auf der Warteliste steht, mehrfach geladen wird. Da kann der Eindruck kommen, das Programm würde "stehen". Übrigens hab ich an der Performanceschraube drehen können. Das entfernen einiger if-Abfragen in den Shadern hat nen Performanceschub von 100% gebracht - auf meiner GeForce 9800GT läuft ein durchschnittliches Terrain mit einem Wasserlayer nun wieder mit 30-40fps. Also: Lieber etwas mehr rechnen als if-Abfragen in den Shadern. Ich muss ganz offen zugeben, dass ich das Script, die das Programm unter Windows kompilieren soll, sehr vernachlässigt habe. Darum müsste ich mich mal kümmern. Aber hier gibt es das ganze schonmal zum Download mit einer 64bit-Linux-Binary und für Windows nötigen Win32-DLLs. Quellcodes zum Kompilieren sind enthalten, diverse Resourcen allerdings nicht. Wer die haben will, soll sich das Programm aus dem git-Repository von github clonen. Das ganze grenzt also sehr an Techdemo ![]() Das wars auch schon für heute. Demnächst werde ich mich um Objekte kümmern, und eine Maussteuerung für die Kamera wird es unbedingt geben. Und den Nachthimmel hab ich immer noch nicht richtig gemacht. Und neue Terraintexturen sind vonnöten. btw, feedback tut nicht weh ![]() |
Autor: | Ireyon [ Do Apr 21, 2011 18:07 ] |
Betreff des Beitrags: | Re: Open Rollercoaster Factory |
Erstmal Sorry, dass ich mich mehr als ein halbes Jahr nicht mehr gemeldet habe, aber so lange habe ich gebraucht, um dem Spiel eine neue Grafikengine zu verpassen. Das war auch bitter nötig, denn die alte war zu störrisch, zu langsam, zu unflexibel. Das neue Zauberwort heißt: Inferred Lighting. Wie ich das ganze gelöst habe, kann ich auf Wunsch ja nochmal erklären. Jedenfalls erlaubt das ganze jede Menge dynamischer Lichtquellen und eine ebenso große Menge Post-Processing-Filter wie zum Beispiel Sunrays: ![]() Screen Space Ambient Occlusion: ![]() Selbstleuchtende Materialien: ![]() Kaustik im Wasser: ![]() Unterwasseransicht: ![]() Beleuchtung eines einfachen transparenten Objekts mit einer Punktlichtquelle: ![]() Reflexionen auf Objekten: ![]() Einfache Partikel: ![]() Der Trick ist einfach, erstmal alles, was nicht durchsichtig ist, in einen Buffer zu rendern (Materialfarbe + Glanzlichtfaktor, Normale + Glanzhärte, absolute Vertexposition + Entfernung, Material-ID = 0, Reflexionsfarbe + Anteil, Lichtemissionsfarbe + Falloff-Distanz), dann die transparenten Teile mit Material-ID durch eine Art Lochmaske zu rendern, dann eine Beleuchtungsmap zu erstellen, in der jede Lichtquelle berücksichtigt wird und dann Postprocessing-Effekte durchzuführen. Hier wird Inferred Lighting sehr gut beschrieben, allerdings sollte man beachten, dass es bei der Transparenz zwingend Probleme gibt: - Die übliche Tiefensortierung ist nötig. - Die Lochmaske muss so gewählt und verschoben werden, dass mehrere transparente Objekte hintereinander funktionieren, allerdings ist das sehr schwierig und problembehaftet, und so ist in der Regel bei 2 transparenten Objekten hintereinander Schluss. Bei mehr Objekten wird die Lochmaske dann sichtbar, die Beleuchtung ist nicht mehr korrekt, die Materialzuweisung geht verloren. Ärgerlich, aber technik- und implementationsbedingt und hoffentlich verschmerzbar. Die neue Engine von ORCF wird zwar noch optimiert, allerdings ist sie bislang sehr langsam, in den Standardeinstellungen sind zwar bis zu 60 FPS drin, aber wenn man die Effekte hochregelt, landet man selbst bei 800x600 schon ganz schnell unter 10 FPS. Wie gesagt, es wird noch optimiert und es ist, gemessen an der Qualität der Ausgabe, sogar noch schneller als mit der alten Engine, aber wirklich flott ist das ganze leider nicht. Mal sehen, wie sich das im Laufe der Zeit entwickelt. Als nächstes soll dann endlich das Objektsystem entwickelt werden - das, was man in den Screenshots immer sieht, kam nur aus einer billigen ASE-Datei - denn das Objektsystem wird die Basis für alle Attraktionen, Menschen, Wege und so weiter, dann bekommt das Projekt vielleicht auch mal einen spielähnlicheren Charakter. |
Autor: | Ireyon [ Fr Jul 15, 2011 14:31 ] |
Betreff des Beitrags: | Re: Open Rollercoaster Factory |
Es gibt mal wieder ein paar kleine Neuigkeiten rund um das Projekt. So habe ich in den letzten Wochen das Bauen von einfachen Objekten implementiert, ähnlich werden nachher auch Wege und Attraktionen gebaut werden können. Man ist relativ frei in dem, was man tut, man kann innerhalb der bebaubaren Zone Objekte an beliebigen Stellen platzieren und auch beliebig an allen Achsen rotieren. Trotzdem kann man natürlich, um auch gerade Wände und so etwas zu ermöglichen, ein Gitter einschalten, das man aber auch beliebig durch die Gegend schieben kann. Der Freiheit ist also auch da keine extrem störende Grenze gesetzt. Das führte dann auch gerne mal zu solchen Aktionen (nein, in meinem Blut waren keine Substanzen): ![]() Auch an den Materialien kann man einiges verändern. Nicht alles, aber einiges. Bislang sind das die Farbe, die Farbe und Stärke des austretenden Lichts sowie die Reflexionsstärke. Für Achterbahnen wäre es aber zum Beispiel gar nicht schlecht, wenn man Flugrost über die Schienen legen könnte - nun, mit dem Gedanken spiele ich wirklich, aber solange es noch nichtmal Achterbahnen gibt.. ![]() Aber auch die sollten nicht mehr so übelst lange warten müssen. Die wird man mit Bézierkurven konstruieren können, was vielleicht mit sehr viel Aufwand verbunden ist, aber auch eine Menge Freiheiten bringt. Ich melde mich dann, wenn es so weit ist. Klar, es fehlt noch verdammt viel, aber es geht ganz gut voran. Zum Abschluss noch ein Video. |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |