F
@KahnSoft sagte in Rail Road Tycoon MFC in Action:
Chunks ein fixes LOD
Das Chunksystem ist Dynamisch und passt sich der Netzgröße an, es hat 5 Stufen, und nur durch genaue Verteilung aller Chunks
(in dem Fall viele hunderte) basieren immer auf einem 8ter System also chunksize zb 256 / 512 usw, auch das passiert volldynamisch.
Sowie krumme Werte einspielen bekommst Du sogenannte gefürchtete Cracks im Gitter --) Hier mal der Creator der Crackfrei arbeitet.
Hab da nicht ganz die Muße, mir den Code anzusehen, aber ich tippe mal wenn der "crackfrei" ist, dass er die Kanten irgendwie "zusammennäht" (nennt man glaube ich auch stitching). Für beliebige Geometrie kann das recht aufwändig werden, aber z.B. bei diesem Landschaftsrenderer mit kontinuierlichem LOD den ich beschrieben hab, ergaben sich die Nähte "natürlich" durch die Morphing-Zwischenstufen von höherer zu niedrigerer Auflösung.
Heightmap-basierten Landschaftsrenderer
Jo die Engine kann sowohl über HighMaps arbeiten, das kann ich hier optional Schalten, sogar Highmap kombiniert mit einer Passenden FarbTextur. Das Verfahren existiert parallel und ist teil meines 3DViews der Kamera Bilder in Echtzeit erzeugt, aber für das Spiel hier wird ein Netzverwendet dessen Größe ich in LuaSkript an die Engine übertrage zb 12000 Seitenlänge * 1000 dann habe ich genügend Rasterzellen die mit dem PerlinGenerator Hügelig gerechnet wird. die Höhen ergeben dann im sog. JetColorraum die Farben für nur Color Anzeige , bzw über die Shader lader ich dann wiederum 5 Texturen für jedes Z So entsteht eine Wellige Landschaft mit nur 5 kleinen Texturen 512*512 Damit wird dann das gesammte Terrain von der GRafikkarte im ShaderMode gerendert, und die Chunks handhaben die Auflösung dann automatisch im Shaderprogramm dem TexelMixer das läuft mit 1Khz Frameraten.
Das heißt die Berglandschaft in dem Video ist nicht unbedingt eine Heightmap-Geometrie sondern ein eventuell generischeres 3D-Modell? Ich könnte mir vorstellen, dass ne Heightmap vielleicht noch etwas mehr Performance bringt, da die Berechnungen auf darauf deutlich einfacher sind.
Die Ränder der Scene im Shader haben tatsächlich kanten umbrüche, die befinden sich dann aber außerhalb der Skybox, man kann quasi entscheiden ob man Cracks in der Szene hat, oder eine Treppen form an den außenkannten die ja nicht stören da sie keiner sehen kann (Sphere SkyBox)
Nur die Ränder der "Szene", oder? Die dürften ja weit hinten am Horizont liegen und eh nicht zu sehen sein. Solange die Chunk-Ränder keine Löcher haben ist ja alles gut
Hah! Und das hüpfen der Lok.
Das Video ist ziemlich alt, inzwischen fahren 200 Loks mit 1Khz bildrate auf den dynamisch gerenderten Tracks die mit dem VBO gestreamt werden, Basis bleiben die Kontrollpunkte die der User Erzeugt hat und Du sagst es es ist der Catmul Raum der hier massiv für 3D Splines verwendet wird. Den Link habe ich repariert, man kann die aktuelle Demo laden, und spielen lassen. Die Rotationen der Loks auf der Spline erfolgen mit unterschiedlichen Translationen, das ist hoch komplex der Spline 1:1 zu folgen , während deine Hauptkamera das betrachten muss
Auch auf die Gefahr hin, dass ich dir vermutlich nichts neues erzähle (einfach ignorieren in dem Fall ):
Ich kann mir vorstellen, dass ein Problem dabei ist, dass solche Parametrischen Kurven (Splines) meist eine Variable "Geschwindigkeit" haben. D.h. wenn du für f(t)f(t)f(t) das ttt konstant erhöhst, dann bewegt sich der Kurvenpunkt, den du erhältst, nicht immer mit der selben Geschwindigkeit. Die Lösung dafür ist Bogenlängenparametrisierung (arc length parameterization).
Ein weiteres Problem mit diesen Splines ist, dass sie keine natürliche "Normale" haben und man nicht wirklich weiß wo "oben" ist, wenn man einen Zug draufsetzt. Wie handhabst du das? Ich kann mir vorstellen die simpelste Lösung ist einfach die Normale des Bodens zu "erben", auf dem die Schiene liegt. Für freie Kurven im Raum (z.B. für Kamerafahrten) kann man denke ich die Normale auch mit dazu "modellieren": Man gibt einfach für die Endpunkte jedes Spline-Segments an, wo die "oben"-Richtung ist (im lokalen Koordinatensystem der Kamera oder des Fahrzeugs auf der Kurve). Die Normale kann man dann für die Kurvenpunkte dazwischen interpolieren. So hab ichs zumindest mal für ein Projekt gemacht, wo wir Kamerafahrten mit Catmull-Rom-Splines definiert haben.
lleicht kann man auch schauen ob die Schienen dabei die Unterseite der Lok berühren
Nee das währe viel zu langsam, es folgt also den Kontrollpunkten mit entsprechenden Offsets, die spline zwischen den Kontrollpunkten wird bei der Fahrt tatsächlich ständig im Voraus berechnet, da ich auch Weichen folgen muss was die Hölle war, die Gleise speichern also das Netzwerk was mit was verbunden ist, und die Lok generiert asynchron über threads den neusten Fahrweg über das Kontrollpunkt Netzwerk.
Man muss das ja nicht in jedem Frame machen. Die Geometrie der Lok und Waggons bedingt ja einen minimalen Krümmungsradius. Ich würde Behaupten, für nen einfachen 4-Räder-Wagen und für vertikale Krümmungen ist das der kleinste Kreis der durch Vorder- und Hinterräder läuft, und den Boden des Wagens nicht berührt. Man kann die Kurve dann stückweise prüfen, dass sie den minimalen Krümmungsradius nicht unterschreitet. Für Horizontale Krümmung will man das vielleicht sowieso haben. Ich denke nicht, dass eine Lok mit angezogener Handbremse eine nahezu 180°-Wende im Stand hinlegen kann. Da will man vielleicht prüfen, ob ein Stück überhaupt befahrbar ist, und kann das eben auch auf die vertikale Krümmung ausweiten (über "Hubbel" fahren), berechnet aus Radabstand und Bodenhöhe des Wagens. Für mehr Spielspaß kann das dann auch ne "Crash-Bedingung" sein
Kurve wirkt dann oft ein wenig "matschig".
Ja also mit der Maus drop't der User automatisch beiom tracken diese Kontrollpunkte die einen gewissen pitch haben, der Mechanismus verhindert zb Hakenschläge oder 90° Richtungsänderungen, so entsteht durch das Kontrollpunkt System automatisch im Vorfeld das es keine Gleisbrüche durch unterschrittene Winkel gibt.
Ah. Hatte ich eben überlesen. Ja, man kann die Kontrollpukte auch so "tunen" dass illegale Gleise gar nicht baubar sind.
"Überschwingen"
Genau man muss wissen das der Catmull Algorithmus einem 5wer System unterliegt man also damit keine Strecken abbilden kann die nicht im Moduls 5 sind, macht man es kleiner wird es garstiger mit der Streuung, also das ist am ende alles Feinabgestimmt. Ein Heiden Aufwand.
Ich frage mich, ob es nicht einfacher sein könnte, dem User das Feintuning zu überlassen, indem man eben z.B. auch ermöglicht, die selbe Kurve als Bézier- oder B-Spline zu bearbeiten (kann man hin- und zurück-transformieren). Die mathematisch zu "glätten" stell ich mir schwieriger und letztendlich "volatiler" vor. Man kann sich dann z.b. darauf beschränken dass, gewisse Krümmungen nicht überschritten werden. Aber das weisst du sicher besser.
Aber vielleicht hast du ja ganz andere Prioritäten im Moment,
Ja im Moment bin ich dabei die Codemenge zu reduzieren , unnütze Daten zu entfernen, und einen sauberen Editor herzustellen, das Projekt ist 10 RNA Stufen gesplittet RNA1 -10
Das ist auf jeden fall ein komplexes Projekt. Das konnte man schon direkt im Video erkennen
Du scheinst da schon recht Tief drinnen zu stecken Also danke für deine Analysen / Interesse
Ich mach da stupide Weiter und es wird Jahre brauchen bis es ein 50 Player MMPGO abbildet so wie Sid Mayer es vor 30 Jahren vorlegte, unglaublich was die da auf dem Amiga oder PC integriert haben mit den Rechnern früher unglaublich....
Hehe. 50 Spieler "MMO" ist schon nen hartes Ziel. Da kommt mir gleich in den Sinn dass es auf jeden Fall gute Mechanismen braucht, um Trollen und Griefern Einhalt zu gebieten. So Späße wie den Startpunkt des Anfängers mit einer kreisrunden Bahnstrecke einzubauen. Villeicht so was wie einen sicheren "Startbereich" um das Gebiet, in dem man anfängt, wo man gut was bauen kann für den Anfang und bevor man sich ins "offene PvP-Gebiet" wagt
Grüße aus Berlin, und danke für deine Hinweise Mega Antwort leider geworden sorry...
Kein Problem. Fand ich alles sehr interessant zu lesen! Viel Erfolg damit! Ich glaub da gibts auch sicher einige Foren und Communities für derartige Spiele. Da kann man vielleicht auch mal für Interessenten werben. Und du weißt sicher, dass es da auch eine Reihe Spiele in die Richtung gibt. Da kann man sich später auch sicher etwas Inspiration abholen. Für Spielmechanik finde ich persönlich OpenTTD ganz interessant. "Railway Empire" hab ich auch mal ne Weile gespielt und fand es spaßig. Das wäre eins mit 3D-Streckenbau wenn ich mich recht entsinne. Und das hatte auch ein nettes Feature, wo man einfach mal relaxen und in Ego-Perspektive (Lokführer) mit einem Seiner Züge durch die Landschaft fahren konnte. Das ist etwas dass am Ende nicht fehlen sollte - eine gemütliche Zugfahrt durch die eigene Kreation