Ein richtig großes Update: Exoframe-Feel, fertige Bänder & Baseplates
Hinweis: Dieser Blogpost wurde maschinell aus dem englischen Original übersetzt. Zum englischen Original.
Überblick
Das war ein inspirierter Monat und ich glaube, man sieht's.
Eine ganze Menge kam dazu: richtig gut aussehende spline-basierte Förderbänder sind fertig, Gebäudesnapping ist jetzt ziemlich nice umgesetzt, es gibt ein neues einzigartiges Stromsystem, das meiner Meinung nach nur Bevy so möglich macht, und dazu eine Menge zusätzlicher "Feel", der das emotionale Gefühl des Spiels wirklich verstärkt. FYI, der Förderband-Abschnitt ist technischer. Wenn das nicht dein Ding ist, lohnt es sich vielleicht, ihn zu überspringen.
Außerdem gibt es weiter unten mehr Details, aber ich werde auf der GPN24 einen Talk halten und einen Workshop machen. Wenn dich das interessiert, schau gern mal rein.
Also ohne großes Drumherum, los geht's.
Wie immer: Wenn du diesen Post interessant findest oder dich das Spiel interessiert, würde ich empfehlen, es auf Steam auf die Wunschliste zu setzen. Das hilft enorm.
Endlich fertige Spline-Förderbänder
Nach viel Arbeit kann ich endlich sagen, dass ich ein Förderbandsystem habe, mit dem ich happy bin. In einem Fabrikspiel ziemlich wichtig.
Das Beste daran ist, dass sich das Belt-Routing-System vorhersehbar verhält, 90-Grad-Kurven und gerade Strecken bevorzugt, aber gleichzeitig mit seltsamen Winkeln und enger Platzierung umgehen kann. Der Belt-Router bricht sogar seine eigenen Regeln, damit Spielende unter fast allen Umständen Gebäude verbinden können.
Dass die Bänder dabei auch noch gut aussehen, ist dann nur das Tüpfelchen auf dem i.
Ordentliche Geometrie
Ich bin sehr happy, jetzt richtig gut aussehende spline-basierte Förderbänder zu haben, die auf den ursprünglichen tile-basierten Bändern basieren. Es hat ein paar Anläufe gebraucht, aber wie sich herausgestellt hat, konnte ich den "richtigen" Ansatz am Ende nicht vermeiden, egal wie sehr ich es versucht habe.
Der erste Ansatz (wie im letzten Blogpost zu sehen) war, einfach einen "Slice" aus dem ursprünglichen tile-basierten Band zu nehmen und darauf Geometrie aufzubauen. Einfach, aber sah echt schlecht aus.
Der nächste Ansatz war eine Weiterentwicklung davon: Ich habe mehrere "Slices" oder Profile an wichtigen Punkten aus dem Original genommen und sie entlang des Splines geloopt, während ich entlang des Splines Dreiecke gebaut habe, um alles zu verbinden. Das war deutlich besser, und wenn du beim RustWeek-Bevy-Workshop warst, hast du diese Version in Aktion gesehen.
Das Problem war, dass die Texturen unter manchen Umständen okay aussahen, aber unter anderen falsch ausgerichtet waren, besonders auf längeren Abschnitten eines CubicHermite-Splines mit Änderungen entlang mehrerer Achsen.
Der hoffentlich finale und wahrscheinlich "richtige" Ansatz war dann einfach, die Dreiecke zu extrahieren, sie in einen eigenen *.belt_geometry.ron-Typ zu backen, und das Mesh manuell entlang des Splines zu rekonstruieren.
Wir haben das ursprüngliche gute Mesh aus Blender, und passen das ganze Ding, inklusive Normals und allem, so an, dass es zum Spline passt. Der einzige Nachteil ist, dass manchmal das letzte wiederholte "Segment" des Bands etwas gequetscht aussehen kann. Aber an diesem Punkt bin ich happy.
Das Coole ist: Weil wir jetzt *.belt_geometry.ron haben, wird es einfacher, zusätzliche schnellere/bessere Bänder hinzuzufügen. Ich kann eine Artist-Person einfach bitten, ein 1-m-Segment des neuen vorgeschlagenen Bands zu bauen, und ich sollte es neu backen können.
Für die Beine und Füße der Bänder habe ich etwas Ähnliches gemacht, aber Avian3D-Raycasts verwendet, um sicherzustellen, dass alle Füße den Boden berühren, auch auf unebenem Terrain.
Item-Ausrichtung
Kurzer Abschnitt, aber mit den zusammengesetzten Kurven im Band sieht das einfach so elegant aus. (Finde ich zumindest.) Nach dem Belt-Kram war das einfach: Die Dinge auf dem Band bleiben einfach tangential zum Spline, der das Band definiert.
Förderbandhöhe
Zuletzt bei den Bändern: Wir können jetzt die Förderbandhöhe anpassen, während wir sie platzieren. Die UI hinzuzufügen war simpel, aber die Höhenregeln waren schwieriger, als man vielleicht denkt. Wir können nicht einfach per Raycast nach unten prüfen, ob alles gültig ist. Was ist, wenn wir eine tiefe, aber kurze Lücke überqueren?
Die Lösung, die ich umgesetzt habe, läuft auf Folgendes hinaus: WENN alle anderen Bedingungen erfüllt sind, außer elevation_too_high, UND beide Enden des Bands mit einer bestehenden Struktur verbunden sind, DANN platzieren wir das Band trotzdem. Alle Beine, die nach der elevation_too_high-Regel zu lang wären, werden nicht erzeugt.
Die In-Game-Begründung könnte sein, dass das Band von den verbundenen Strukturen getragen wird.
Gebäudesnapping fürs Ausrichten
Das hier ist eine coole Quality-of-Life-Änderung, die organisierte und sauber aussehende Fabriken wirklich möglich macht.
Nachdem ich viele 3D-Fabrikspiele gespielt habe, wollte ich es universell genug machen, damit es Dinge wie Snapping an Inputs oder Outputs oder beides abdecken kann, oder Inputs an Outputs snappen kann und umgekehrt.
Ich glaube, das Ziel wurde ziemlich gut erreicht.
Ich hatte kurz über einen Avian-Raycasting-Ansatz nachgedacht, bin dann aber mit einem ECS-Ansatz gegangen, bei dem wir Input- und Output-Ports abfragen und einfach gegen die potenziellen globalen x-, y- und z-Positionen des Gebäudes plus Toleranz matchen.
Damit können wir clevere Dinge tun, wie "stärkere" Ausrichtungen priorisieren und so weiter. Ich mache noch nichts so Fancy, aber ich könnte mir eine Welt vorstellen, in der du deine lokalen Snaps bekommst, aber auch Snaps gegen 40 Maschinen, selbst wenn die nächste davon 200 m entfernt ist, einfach weil 40 Maschinen alle in einer Linie ein sinnvoller Hinweis wären.
Alles in allem ist das Gebäudesnapping-System das, was ich mir in einem Fabrikspiel wünschen würde. Sobald Leute anfangen, es zu testen, vermute ich aber, dass noch Änderungen nötig sein werden.
Voll funktionierende Baseplates
Bisher ging es im Spiel darum, Fabrikmaschinen direkt auf dem Boden zu platzieren. Auf dem perfekt flachen Boden der kleinen Demo-Welt mag das okay sein, aber wenn die Fabrik größer wird, braucht man mehr Organisation.
Das Spiel lässt Spielende jetzt ein Grid aus Baseplates platzieren, das bestehende Grid erweitern oder es verkleinern, alles mit Snapping und dem Kram, den man erwarten würde.
Was Baseplates in Exofactory besonders macht, ist, dass sie nicht nur "etwas zum Draufbauen" sind. Sie funktionieren auch als Stromübertragung für alle Gebäude darauf, ohne Kabel und manuelles Anschließen.
Ein Grid aus Baseplates ist außerdem ein unabhängiges Stromnetz, das über mehrere Substations, die auf dem Grid platziert werden können, an das "traditionelle" Stromnetz angeschlossen wird. Anders als traditionelle Stromnetze können diese Substations nur eine bestimmte Menge Strom an das Baseplate-Grid übertragen. Wenn du nur ein paar Gebäude hast, kommst du vielleicht mit einer einzigen aus, aber wenn immer mehr Gebäude auf dem Grid platziert werden, müssen mehr Substations gebaut werden, damit das mithalten kann.
Das bringt mich zu meinen neuen Assets, die eindeutig nach "von einer Backend-Dev gemacht" aussehen. Nachdem ich das klassische Blender-Donut-Tutorial beendet hatte, wollte ich temporäre Assets bauen, die dem Feel des Spiels nicht aktiv schaden oder davon ablenken. Das hier ist dabei rausgekommen. Die Power Substation und der kleinere Power Relay.
Ich will die natürlich irgendwann ersetzen, und ich würde lieber mit jemandem arbeiten, der mehr über Blender weiß als ich, aber wegen äußerer Umstände sind die Ressourcen gerade knapp.
Das Spiel muss weitergehen, also sind selbstgemachte Assets der Weg. (Vorerst.)
Unter der Haube ist das alles ECS- und Bevy-idiomatischer Code. Wenn wir eine Baseplate platzieren oder löschen, fügen wir Komponenten hinzu, die eine Bevy-Relationship zwischen dieser Baseplate und einer Baseplate-Grid-Entity definieren.
So können wir die Menge relevanter Baseplates leicht abfragen, selbst wenn es potenziell Zehntausende oder mehr davon geben könnte.
Gebäude, die auf den Baseplates platziert werden, bekommen wiederum eine Relationship mit diesem Baseplate-Grid.
Für Stromberechnungen fragen wir einfach die relevanten Relationships ab. Schnell und idiomatisch. Was ich wirklich mag: Die Power-UI für ein Baseplate-Grid zeigt alle Gebäudedetails, aber wenn du ins "Haupt"-Grid schaust, siehst du nur den Stromverbrauch der Substations.
Ich habe es noch nicht hinzugefügt, aber ich könnte mir vorstellen, dass man Baseplate-Grids benennen kann und dieser Name dann in den Stats des Hauptstromnetzes auftaucht. Sowas wie Schraubenfabrik 1: 18.5MW/30.0MW, und für die feinen Details müsste man die UI der Substations anschauen.
Große Game-Feel-Verbesserungen
Während der RustWeek 2026 (übrigens starke Empfehlung) habe ich freiwillig beim Bevy-Workshop geholfen. Als Teil dieses Workshops habe ich am Ende eine spontane Demo des Spiels gegeben.
Dadurch habe ich eine Menge Feedback von neuen und erfahrenen Bevy-Devs bekommen, und von neuen und erfahrenen Game-Devs. Wirklich nützliches, informatives Zeug.
Im Großen und Ganzen lief es auf Folgendes hinaus:
- Spiel mehr damit, der kleine Roboter-Typ zu SEIN. Das Spiel sollte das visuell und akustisch an die Spielenden signalisieren. Man sollte eine kleine Verbindung zu ihm fühlen.
- Der globale Modus muss visuell markanter sein; ein bisschen Dialog am Anfang, der ihn erklärt, reicht nicht.
- Der Übergang zwischen den beiden sollte eindeutig und bedeutungsvoll sein.
- Füge Signale hinzu, was Spielende tun können, selbst wenn es nur "neuer Geschwindigkeitsrekord erreicht" ist, wenn man auf einem Band läuft.
Es gab noch viel mehr, aber das sind ein paar der größeren Punkte.
Für den globalen Modus habe ich ziemlich hart an mehreren Fullscreen-Material-Shadern und ein paar einfacheren Add-ons gearbeitet. Jetzt haben wir einen sehr coolen Ladeeffekt beim Wechsel. Das Ziel ist, die digitale Natur des Modus irgendwie zu zeigen.
Mir ist beim Spielen von Silksong etwas aufgefallen, das ich hier umgesetzt habe. In Silksong bekommst du, wenn du das Spiel zum ersten Mal lädst oder einen Boss zum ersten Mal seit einer Weile bekämpfst, die volle Bossfight-Startanimation. Wenn du den Kampf verlierst und es immer wieder versuchst, wird diese Introanimation übersprungen.
Ich mache hier etwas Ähnliches. Wenn du eine Weile nicht gewechselt hast, bekommst du den vollen Transition-Effekt. Wenn du häufig wechselst, bekommst du einen VIEL kürzeren. Außerhalb des Spiels nervt es dadurch weniger. Im Spiel stelle ich mir vor, dass das Rendering noch gecached ist.
Bis jetzt ziemlich happy damit. Aber es gibt noch mehr zu tun.
Für den Exoframe (Roboter-Modus) hatten wir schon chromatische Aberration, aber ich habe zusätzlich Lens Flare in der Form der Exoframe-Linse hinzugefügt, etwas Kamera-Grit, eine Lens-Focus-Animation, Lauf-Waddle, ein Exoframe-spezifisches HUD und deutlichere Sounds.
Das alles sorgt WIRKLICH dafür, dass sich der Exoframe verbundener anfühlt. Mit dem Silksong-artigen Animation-Cooldown gibt es nur Vorteile und keine Nachteile.
Nochmals danke an alle, die Feedback gegeben haben.
RustWeek 2026 & anstehende GPN-Präsentation
Das ganze Feedback oben kam auf der RustWeek 2026, und trotz etwas sozialer Erschöpfung meinerseits war es richtig spaßig. Ich hatte die Chance, mit dem hervorragenden Chris Biscardi zu arbeiten und ein paar Dinge rund um den glTF-Code auszuarbeiten, den ich zu Bevy beitragen will.
Hoffentlich sehen wir da bald erste Früchte.
Wenn mich jemand fragt: "Warum hast du Bevy gewählt? Ist das nicht ein Risiko gegenüber einer Corpo-Engine?", würde ich antworten: "Bevy ist die einzige Game Engine, die ich kenne, deren Kultur es mir erlaubt, ein Problem zu finden, einen Patch einzureichen und das Ganze in unter einem Monat upstream gefixt zu haben." Es ist die einzige Engine, bei der ich als Indie-Dev eine architektonische Änderung einreichen kann, diese Änderung vom Core-Team reviewt wird und dann ohne rituellen Tanz gemerged wird.
Etwas zurückgezoomt: Ich plane, vom 4. bis 7. Juni auf der GPN24 zu sein, dort einen Talk über Spieleentwicklung in Rust mit Bevy zu halten und einen Workshop zu geben. Details gibt es hier:
Wenn dich das interessiert, komm gern vorbei.
Fazit
RustWeek war eine Quelle von Inspiration und Drive, sogar als relative Introvertierte. Super happy mit dem Fortschritt, den ich gemacht habe, und gespannt darauf, mehr zu Bevy beizutragen. Auf jeden Fall ein aufregender Monat.
Und wieder einmal: Wenn du das hier angenehm oder informativ fandest oder einfach das Spiel magst, würde ich vorschlagen, das Spiel auf die Wunschliste zu setzen.