Seite 1 von 3

[Projekt] Ring Racer

Verfasst: 25.05.2023, 12:40
von scheichs
Ich hatte das Projekt ja schonmal kurz beim ZFX-Stammtisch im -oh Schreck- Januar gezeigt. Jetzt haben wir schon Ende Mai. Verdammt, die Zeit rast! Weiss jetzt gar nicht mehr so genau was da für ein Stand war. Die ganze Portierung und Optimierung für Nintendo Switch (auf der es zuerst releast werden soll) und vor allem die Implementierung der Online Highscore mit ihren zig Ausnahmefällen, die alle korrekt -gemäß Nintendo Richtlinien- gehandelt werden müssen, haben dabei die meiste Zeit verschlungen. Das grosse Problem dabei sind die beschränkten/aufwendigen Debugmöglichkeiten, sowie die langen Deployzeiten auf die Hardware und damit verbundenen Iterationszeiten. Aber genug davon! Lieber mal übers Spiel reden...

[Spielprinzip]
"Ring Racer" ist ein arcadiger Single Player Flug-Rennspiel, bei dem man innerhalb eines Zeitlimits in der richtigen Reihenfolge durch Ringe fliegen muss.
Wenn man einen Ring durchfliegt bekommt man einen kleinen Zeitbonus, der das Zeitlimit wieder erhöht, sowie einen kleinen Boostbonus. Dieser füllt die Boostleiste auf und kann natürlich auch per Knopfdruck als "Nachbrenner" benutzt werden.

Die 5 Rennstrecken finden auf Inselgruppen im Meer statt und sind zum größten Teil als "Canyon"-Rennen ausgelegt. Die Idee dazu entstand dabei beim Schauen von Top Gun 2. Die Levels steigern sich im Anspruch und sind deswegen auch erst nach und nach zugänglich.
Eine Energiekuppel verhindert, dass der Spieler sich beliebig weit von der Rennstrecke entfernt.

[Engine/Technik]
Umgesetzt wurde das Spiel mit Unity. Die Landschaft wurde mit der Technik, die ich hier im Showroom auch schonmal vorgestellt hatte, prozedural vorgeneriert. Zusätzlich habe ich noch ein paar Tools geschrieben um besondere Objekte ebenfalls prozedural zu generieren. In den meisten Fällen dienen diese als "Eyecandy", teilweise aber auch als Hindernisse und Orientierungsanker.
Das Landschaftsdarstellung und Shader habe ich so optimiert, dass sie besonders gut für die Nintendo Switch laufen. Ich wollte unbedingt die native Auflösung, sowie konstante 60FPS und eine "grosse" Weitsicht. Letzteres ist natürlich relativ zu sehen und wäre sicher noch besser zu machen. Es gibt z.B. kein LOD. Aber iwo will man für so eine Art von Spiel auch mal einen Schlussstrich ziehen. Ich denke ich habe da einen passablen Kompromiss gefunden.

Was habe ich genau gemacht?
Ich habe das Lightbaking von Unity verworfen, weil es in meinen Tests für solch grosse Landschaften zu wenig performant und zu viel Speicher frisst.
Stattdessen mache ich mein eigenes Lightbaking auf einer sehr hoch aufgelösten Version der Landschaft und speichere Farbe und NDotL-Beleuchtung in einer einzigen 4K Textur für die ganze Landschaft. Schatten werden im Alphakanal gespeichert, damit ich diese im Shader nach Bedarf finetunen kann. Diese einzige Textur nutze ich für die ganze Landschaft, welche selber in Chunks organisiert ist und deren Mesh dann wesentlich niedriger aufgelöst ist als in der Bake Phase. Das bemerkt man dann aber nur in seltenen Fällen. Um die virtuelle Texturauflösung noch zu erhöhen, gibt es eine Detail-Normal Map obendrauf.
Das Prinzip ist natürlich nicht neu, musste ich aber halt für meinen Fall nachimplementieren.

Hier z.B. die Textur für Level 1, mit dem Shadow-Alpha-Kanal in Schwarz.
Lightmap_Level1_Tiles.jpg
Für Die Bäume bestimme ich lediglich ob sie im Schatten liegen oder nicht und dunkle dann entsprechend ab.
Auf Echtzeitschatten verzichte ich komplett, es gibt lediglich einen Blobshadow für das Spielerschiff.


Das Ergebnis des Ganzen kann man sich hier im Vorabtrailer (basierend auf Nintendo Switch) ansschauen.


Sind jetzt noch ein paar Kleinigkeiten zu machen (Icons, Submissionpackage finalisieren, etc.) zu machen und dann gehts zur Zertifizierung an Nintendo.
Release plane ich gegen Ende Juni. Ausserdem soll es zeitgleich auch eine Demoversion geben.

Re: [Projekt] Ring Racer

Verfasst: 25.05.2023, 21:40
von NytroX
Ich mag den StarFox-ähnlichen Stil :-)
Wünsche dir viel Glück beim Release.

Re: [Projekt] Ring Racer

Verfasst: 26.05.2023, 10:41
von scheichs
Danke! :)

Re: [Projekt] Ring Racer

Verfasst: 26.05.2023, 10:57
von xq
Goil! Gefällt mir sehr, sieht auch optisch sehr ansprechend aus.

Re: [Projekt] Ring Racer

Verfasst: 26.05.2023, 21:46
von bruebaker
Schaut echt gut aus, scheint aber auch ein krampf zu sein ein spiel aif der switch zu veröffentlichen (-:

Re: [Projekt] Ring Racer

Verfasst: 27.05.2023, 13:56
von Hannes
Sieht gut aus. Ich bin gespannt wie es läuft. Viel Glück. Ich drücke dir die Daumen.

Re: [Projekt] Ring Racer

Verfasst: 27.05.2023, 21:57
von Schrompf
Sieht cool aus, und mit den Sprach-Schnipseln hast Du echt was erreicht. Detail-Kram: bei 0:56 gibt's irgendnen Würfel mit Pfeilen nach Rechts einzusammeln - ich dachte, das wär ein Richtungshinweis. Vielleicht eher Pfeile nach oben für "VORWÄRTS!!!!"? Oder irgendwas Richtungsneutrales, konnte nicht erkennen, was man da eigentlich einsammelt. Hab nix vom Boost gesehen... wird der angemessen illustriert? Die Luftstreifen vermitteln ein schönes Geschwindigkeitsgefühl. Vielleicht die Vignette noch ein bissl bedrohlich pulsieren lassen, wenn die Zeit fast um ist, um das Gefühl von Dringlichkeit zu verstärken.

Re: [Projekt] Ring Racer

Verfasst: 28.05.2023, 15:54
von marcgfx
Sieht richtig nice/arcady aus und der Sound passt auch. Die flachen Wolken stören mich aber ein bisschen, vor allem wenn der Spieler sehr nah rankommt. Viel Erfolg!

Re: [Projekt] Ring Racer

Verfasst: 02.06.2023, 14:16
von Krishty
Die Konkurrenz schläft nicht und hat auch schon eine Möglichkeit gefunden, das Spielkonzept um DLC und Micro-Transactions zu erweitern:


Re: [Projekt] Ring Racer

Verfasst: 02.06.2023, 17:18
von scheichs
Krishty hat geschrieben: 02.06.2023, 14:16 Die Konkurrenz schläft nicht und hat auch schon eine Möglichkeit gefunden, das Spielkonzept um DLC und Micro-Transactions zu erweitern:

Oha... Krass! XD

Re: [Projekt] Ring Racer

Verfasst: 02.06.2023, 17:21
von scheichs
Schrompf hat geschrieben: 27.05.2023, 21:57 Sieht cool aus, und mit den Sprach-Schnipseln hast Du echt was erreicht.
Danke, ja ist so'n kleines Detail. Da könnte man noch mehr Liebe reinstecken. Vielleicht bei 'nem Nachfolger.
Schrompf hat geschrieben: Detail-Kram: bei 0:56 gibt's irgendnen Würfel mit Pfeilen nach Rechts einzusammeln - ich dachte, das wär ein Richtungshinweis. Vielleicht eher Pfeile nach oben für "VORWÄRTS!!!!"? Oder irgendwas Richtungsneutrales, konnte nicht erkennen, was man da eigentlich einsammelt. Hab nix vom Boost gesehen... wird der angemessen illustriert?
Ja, das ist'n Boost und da gibt's eigentlich 'nen Soundsample mit "Power-Up".
Schrompf hat geschrieben: Die Luftstreifen vermitteln ein schönes Geschwindigkeitsgefühl. Vielleicht die Vignette noch ein bissl bedrohlich pulsieren lassen, wenn die Zeit fast um ist, um das Gefühl von Dringlichkeit zu verstärken.
Das is 'ne super Idee! Werd ich mit 'nem Patch nachliefern.

Re: [Projekt] Ring Racer

Verfasst: 02.06.2023, 17:24
von scheichs
An alle anderen: Danke für das Lob! Ich werde berichten wie's weitergeht. Es ist heute bei Nintendo mit ein paar Issues durchgefallen. Hab 1 Testcase übersehen und sind noch ein 2-3 andere Bugs drin gewesen, weil ich im falschen Modus der Switch getestet hab.

Re: [Projekt] Ring Racer

Verfasst: 04.06.2023, 23:55
von mtorc1
Das Video schaut sehr cool aus und macht Lust auf mehr! Gefällt mir.
Kannst du etwas darüber verraten, was die Test Cases von Nintendo so vorsehen?

Re: [Projekt] Ring Racer

Verfasst: 09.06.2023, 16:15
von Jonathan
Kann nur zustimmen, sieht echt gut aus!

Re: [Projekt] Ring Racer

Verfasst: 20.06.2023, 20:50
von scheichs
Danke Leute!
Ich bin grade dabei von Unitys Built-In Renderpipeline auf die Universal Render Pipeline zu wechseln, weil erstere auf neueren Platformen (z.B. PSVR2) jetzt nicht mehr supportet wird.
In meinem Fall heisst das alle Customshader auf HLSL umzuschreiben.
Die Performance scheint durch die leichtere Pipeline doch etwas zu steigen. Jedenfalls kann ich jetzt einige "heavy" PostProcessing Sachen einschalten (Motion Blur, Depth Of Field), die vorher undenkbar waren. Schon erstaunlich was auf 'nem 8? Jahre alten mobile SoC noch geht. Laut Debugoverlay übrigens bei ca. 5W für den Chip.
Ich bin noch nicht ganz fertig aber hier ist mal das vorläufige Ergebnis meiner Konvertierung, aufgenommen direkt mittels HDMI Capture von der Switch.


Re: [Projekt] Ring Racer

Verfasst: 21.06.2023, 12:47
von Jonathan
Huh, find ich sehr interessant: Ich Spiele keine Handyspiele weil die Steuerung schlecht ist und habe keine Switch oder ähnliches. Und in dem Video sehe ich jetzt diese merkwürdige Kombination aus Fancy Shadern (Wasser / Postprocessing, etc) und mäßig detaillierten Landschaften mit Billboardbäumen (also von der Geometrie her auf dem Stand von vor 20 Jahren oder so). Aber das macht natürlich total Sinn, wenn der Bildschirm nicht sehr groß ist und die Bewegung relativ schnell ist, die der Detailgrad der Geometrie genau richtig. Man würde mehr Dreiecke eh nicht sehen und die Shader lassen es dann ziemlich gut aussehen. Ich weiß gar nicht, ob ich sowas in der Form schonmal gesehen habe.

Re: [Projekt] Ring Racer

Verfasst: 21.06.2023, 13:02
von Lord Delvin
Ich find's gut. Jenachdem was das Ziel ist würde ich's vielleicht noch ein bisschen Pixeliger aussehen lassen, um dem Ganzen einen gewollten Retrolook zu geben.

Re: [Projekt] Ring Racer

Verfasst: 21.06.2023, 13:03
von scheichs
Das hast Du genau richtig beschrieben. Eigentlich ist die TerrainTech für die FarTerrain-Darstellung eines anderen Spiels gedacht gewesen. Ich habe sie für Ring Racer nur angepasst. Aber während des Spiels hat man ja auch keine Zeit jeden einzelnen Baum im Detail zu betrachten.

Auch andere Rennspiele (auf Switch) haben lächerlich geringe Geoometriedetails und kaschieren das mit überladenem PostProcessing und Fancy FX. "Fast RMX" z.B. wird hochgelobt wegen seiner tollen, superflüssigen Grafik und Effekte. Wenn man sich aber mal einen Screenhot anschaut, und sich das PP wegdenkt, sieht das eigentlich relativ arm aus.

BTW: Das sind auch Billboardbäume. Die sehen nur schöner aus als meine. ;)

Bild
Bild

Re: [Projekt] Ring Racer

Verfasst: 21.06.2023, 15:32
von grinseengel
Wenn die Hardware nicht mitmacht, dann muss man halt tricksen. Ich meine, wenn man das im laufenden Spiel wegen der Geschwindigkeit nicht sehen kann, dann ist doch egal wie es im Screenshot aussieht.

Re: [Projekt] Ring Racer

Verfasst: 21.06.2023, 21:09
von Hannes
Das Wasser sieht gut aus. Die Felsenlandschaft auch. Nur es sieht für mich so aus, als wären die Bäume alle geklont. Weiß nicht ob das wirklich so ist, oder sie sich nur zu ähnlich sehen.

Hannes

P.S. Meine Switch freut sich schon.

Re: [Projekt] Ring Racer

Verfasst: 21.06.2023, 21:29
von scheichs
Ja, die Bäume... da müsste ich etwas mehr Variation reinbringen. Das wäre sogar sehr einfach machbar. Unterschiedliche Größen, Ausrichtung, Typen, Farben. Ist eigentlich alles einfach umsetzbar. Glaube, das würde nochmal einiges an optischen Gewinn bringen.

Übrigens... die sind nicht mal instanziiert oder so, sondern alle, pro Chunk, in einem grossen VertexBuffer.
Naja. Es muss ja noch Luft für 1 Ring Racer 2 geben.

Re: [Projekt] Ring Racer

Verfasst: 21.06.2023, 21:36
von scheichs
Die Demoversion wurde heute übrigens von Nintendo genehmigt. Die Vollversion leider noch nicht... :(

Re: [Projekt] Ring Racer

Verfasst: 22.06.2023, 09:30
von Lord Delvin
Wenn sich das Geschwindigkeitsmäßig wie Trackmania oder Redout anfühlt, dann wird das keinen ernsthaft stören, weil du das eh nur bemerken kannst, wenn du irgendwo dagegen geknallt bist und deswegen stehenbleibst was in der Regel nicht dazu führt, dass du anfängst dir die Landschaft anzusehen. Bei so Spielen würde ich auch eher flüssige Physiksimulation optimieren als alles andere weil das mehr zum Feeling beiträgt. Gerade bei Trackmania war man irgendwann an dem Punkt an dem man ganz bestimmt schräg aus dem Looping fahren musste, um später wieder auf der Bahn zu landen. Da hätte man gerne, dass sich das jedes Mal gleich anfühlt und man am selben Ort landet, wenn man mit derselben Geschwindigkeit denselben Punkt im Looping trifft.

Re: [Projekt] Ring Racer

Verfasst: 23.06.2023, 10:46
von joeydee
Das sieht brauchbar aus :)
die sind nicht mal instanziiert oder so, sondern alle, pro Chunk, in einem grossen VertexBuffer.
Würde ich bei statisch platzierten kleinen Meshes genauso machen (bzw. mache das auch immer so :))
Ich habe da zwar kaum Praxiserfahrung mit Instancing-Performance, aber bin mir nicht sicher ob da Instancing überhaupt noch was in der Rendergeschwindigkeit bringen würde? Vielleicht aber noch interessant wenn Buffersize ein Thema ist, 8 Verts vs. 1 Matrix z.B.

Re: [Projekt] Ring Racer

Verfasst: 23.06.2023, 14:52
von Schrompf
Instancing bringt schon noch was gegenüber einzelnen DrawCalls. Gegenüber einem Buffer mit allen Instanzen sind sie aber langsamer, weil der Input Assembler komplexer ist. Das merkt man aber nur bei wirklich vielen Instanzen. Sechsstellig, würd ich sagen.

Re: [Projekt] Ring Racer

Verfasst: 23.06.2023, 15:51
von joeydee
Instancing bringt schon noch was gegenüber einzelnen DrawCalls.
Das ist klar, ging nur um den 1-Drawcall-Vergleich z.B. n Cross-Billboards == n * 8 vortransformierte Verts im VB, vs. n mal 1 Matrix (== n * 4 Verts) im Instancebuffer, beides würde ja nur einmalig statisch als Buffer angelegt, beides benötigt nur 1 Call. VB in dem Fall zwar doppelt so groß, aber der Weg ist direkter.

Re: [Projekt] Ring Racer

Verfasst: 23.06.2023, 15:53
von Krishty
Huch, das Thema hatte ich jetzt glatt verpasst.

Die Leistungsverbesserung durch Instancing kann schon bei ein paar Dutzend Modellen bemerkbar sein; je nachdem, wie hoch die Render-Last ist und wie viele Dreiecke in jeder Instanz stecken.

Bei sehr einfachen Modellen sind Geometry Shaders nochmal schneller als Instancing. „Einfach“ hängt hier von der Anzahl Vertices ab (bedenken, dass Geometry Shader keine indizierten Dreiecke erzeugen können!). Ganz hilfreich fand ich diese beiden Artikel:
Instancing vs Geometry Shader vs Vertex Shader – Round 1
Instancing vs Geometry Shader vs Vertex Shader – Round 2

Die Bäume sehen sehr einfach aus – vier Dreiecke aus acht Vertices? Die sind eigentlich perfekte Kandidaten für Geometry Shaders. Da würde ich Instancing erst gar nicht versuchen. Aber ich habe auch keine Erfahrung mit der Switch.

Re: [Projekt] Ring Racer

Verfasst: 23.06.2023, 16:33
von Matthias Gubisch
Heutzutage macht man Indirekte Drawcalls
Da braucht man kein Instancing mehr 😉

Und die Drawcalls lässt man auch noch die GPU zusammen bauen

Re: [Projekt] Ring Racer

Verfasst: 23.06.2023, 17:40
von Schrompf
AAaaaangeber :-)

Re: [Projekt] Ring Racer

Verfasst: 23.06.2023, 17:54
von Krishty
Auch wenn’s wahr ist, ist die Implementierung eine echte PITA :( Noch mehr als Instancing, meine ich.