Die Spieleentwicklung und Simulationen in Echtzeit erfordern effiziente und flexible Physik-Engines, die nahtlos in moderne Game-Engines integriert sind. Hier setzt Avian an, eine auf Entity Component System (ECS) basierende Physik-Engine, die speziell für Bevy entwickelt wurde – eine einfache, datengetriebene Game-Engine geschrieben in der Programmiersprache Rust. Mit der Veröffentlichung von Avian 0.3 wurde ein großer Schritt gemacht, der die Benutzererfahrung deutlich verbessert, die Leistung steigert und innovative Werkzeuge für Entwickler bereitstellt. Avian versteht sich als modularer und ergonomischer Ansatz, der vorrangig auf die nativen ECS-Prinzipien von Bevy setzt.
So entsteht eine einfache, aber kraftvolle Integration der Physik, die besonders für Entwickler interessant ist, die effiziente und skalierbare Spiele oder Simulationen umsetzen wollen. Avian 0.3 konzentriert sich insbesondere auf Verbesserungen bei der Kollisionsbehandlung, der Kontaktverwaltung und bringt zahlreiche Performance-Optimierungen mit sich, die bislang unerreicht waren. Ein zentrales Highlight von Avian 0.3 ist das sogenannte Opt-In Contact Reporting.
In früheren Versionen wurden Kollisionsereignisse für alle Kontaktpaare generiert, was vor allem bei vielen Objekten und Kontakten großen Overhead erzeugte. Mit der neuen Version ist es möglich, Kollisionsereignisse nur für ausgewählte Entitäten zu aktivieren. Über die Komponente CollisionEventsEnabled können Entwickler gezielt festlegen, für welche Collider wirklich Events erzeugt werden sollen. Das reduziert nicht nur unnötige Verarbeitung, sondern erleichtert die Handhabung, da nur relevante Kollisionen berücksichtigt werden. Außerdem wurde das veraltete Collision Event entfernt und durch sinnvollere Strukturen wie Collisions und CollidingEntities ersetzt, was den Umgang mit Kollisionsdaten vereinfacht.
Erheblich verbessert wurde ebenfalls das beobachtbare Kollisions-Event-System. Während in früheren Versionen die Ereignisse CollisionStarted und CollisionEnded lediglich global über EventReader zugänglich waren, integriert Avian 0.3 diese Signale jetzt direkt in die Beobachter (Observers) von Bevy. Das heißt, man kann nun gezielt für einzelne Entitäten Kollisionsereignisse abonnieren und darauf reagieren, was besonders in gameplay-relevanten Szenarien, wie beim Betreten eines Druckplatten-Triggerbereiches oder dem Aufsammeln von Gegenständen, äußerst nützlich ist. Entwickler profitieren von einer eleganten und performanten Möglichkeit, auf kollisionsbezogene Zustandsänderungen individuell zu reagieren, ohne sich durch alle Events hindurchkämmen zu müssen.
Eine bedeutende Neuerung für komplexe Kollisionsszenarien sind die sogenannten Collision Hooks. Diese ermöglichen es, gezielt in die Kollisionspipeline einzugreifen, Kontakte zu filtern oder zu modifizieren. Typische Anwendungsfälle sind One-Way-Plattformen, Förderbänder oder die Variante unterschiedlicher Reibungs- und Restitutionswerte innerhalb eines Terrains. Das frühere System PostProcessCollisions wurde durch dieses leistungsfähigere und performantere Hook-System ersetzt, das mit der ECS-Parallelität kompatibel ist. Entwickler können nun während der Broadphase oder Narrowphase eigene Logik einbauen, um Kontakte effizient zu beeinflussen.
So lassen sich etwa Kollisionen zwischen unterschiedlichen Interaktionsgruppen verhindern oder Kontakte basierend auf der Bewegungsrichtung ablehnen. Im Bereich der Materialeigenschaften ist es nun möglich, pro Kontaktmanifold spezifische Parameter wie Reibung, Elastizität und Tangentialgeschwindigkeit einzustellen. Das bedeutet, dass Avian eine detaillierte und realistische Simulation von verschiedenen Oberflächenarten unterstützt, etwa um auf Förderbändern dynamisch unterschiedliche Geschwindigkeiten oder Haftreibung zu simulieren. Diese Funktion eröffnet vielfältige Möglichkeiten für Entwickler, reale physikalische Bedingungen noch genauer nachzubilden. Auch das Thema Physik-Picking wurde mit Avian 0.
3 überarbeitet. Der PhysicsPickingFilter bietet nun eine flexible Möglichkeit, kollidierbare Objekte aus der Spielwelt mit Raycasts gezielt herauszufiltern. So kann etwa die Kamera so konfiguriert werden, dass nur bestimmte Kollisionsebenen oder Spielfiguren ausgewählt werden können, was nicht nur die Usability verbessert, sondern auch unnötige Berechnungen reduziert. Performance ist für eine Physik-Engine essentiell und wurde in Avian 0.3 umfangreich optimiert.
Besonders beeindruckend ist die völlige Umgestaltung des Kontaktpaar-Managements. Zuvor sorgten mehrfaches Iterieren, Allokationen und komplexe Statusverwaltung für hohe Kosten und Komplexität. Jetzt nutzt Avian einen sogenannten ContactGraph, ein undirektionales Graph-Datenmodell, das sowohl effizienten Zugriff als auch parallele Verarbeitung erlaubt. Die Kollisionen werden nicht mehr in simplen Listen abgelegt, sondern als Knoten und Kanten verwaltet, was deutlich schnellere Zugriffe auf relevante Kontakte ermöglicht. Die Arbeit orientiert sich hierbei am Vorbild von Box2D v3 und setzt modernste Bit-Vektor-Operationen ein, um nur den tatsächlich geänderten Kontaktstatus zu verarbeiten.
Resultat ist eine drastische Beschleunigung gerade für Szenarien mit vielen Kontakten. Ebenfalls neu in Avian 0.3 ist die parallele Erzeugung von Kontakt-Constraints direkt in der Narrow Phase. Dadurch entfällt ein nachgelagerter Verarbeitungsschritt, der vorher für zusätzlichen Aufwand sorgte. Obwohl die Multithread-Ausführung die Reihenfolge der Constraints vorübergehend nicht-deterministisch macht, sorgt eine abschließende Sortierung für reproduzierbare Simulationsergebnisse.
Dies verbessert die Leistung deutlich, ohne Kompromisse bei der Stabilität einzugehen. Im Zuge dieser Überarbeitungen wurden auch die Kontakt-Modelle verfeinert. Die Typen ContactPair und ContactManifold wurden überarbeitet und bieten nun klare Strukturen mit Flags für unterschiedliche Kontaktarten wie Sensoren oder aktive Kollisionen. So wird die Arbeit mit Kontaktpunkten für Entwickler intuitiver. Besonders spannend für fortgeschrittene Nutzer ist die Einführung des Collider Context.
Dieser ermöglicht es, eigene Collider-Typen zu definieren, die Zugriff auf das ECS-Kontext-System erhalten. Dies bietet etwa die Möglichkeit, komplexe Voxel-Collider zu implementieren, die weitere Komponenten oder Ressourcen abfragen können. So lässt sich die Funktionalität der Physik-Engine erheblich erweitern, ohne die Grundarchitektur zu kompromittieren. Eine wichtige Anpassung erfolgte auch in Bezug auf Bevy 0.16 mit der Einführung von Entity-Entity-Relationships.
Avian 0.3 setzt konsequent auf die neuen Konzepte von ColliderOf-Beziehungen, die die Bindung von Collider-Entitäten an Rigid Bodies klarer und automatisiert ermöglichen. Dadurch wird die Verwaltung von Kollidern im Entity-Hierarchy-System deutlich robuster und einfacher. Avian 0.3 ergänzt zudem ein integriertes Diagnostik-System, das Entwicklern vielseitige Möglichkeiten zur Laufzeit-Analyse bietet.
Es liefert präzise Zeit- und Zählerwerte für diverse Phasen der Physikberechnung und lässt sich bequem in Bevy’s eigenes DiagnosticsStore einbinden. Dank einer optionalen Debug-UI können diese Messwerte übersichtlich visualisiert werden – hilfreich, um Performance-Flaschenhälse schnell zu identifizieren und Optimierungen gezielt vorzunehmen. Auch unter der Haube finden sich viele wichtige Fixes und Verbesserungen, wie beispielsweise die Berücksichtigung deaktivierter Entitäten in der Physik, Optimierungen im Spatial Query Pipeline oder Korrekturen zur Berechnung von Trägheitstensoren. Diese Detailverbesserungen laufen zusammen in einem robusteren und stabileren Physiksystem. In Zukunft arbeitet das Avian-Team außerdem an noch umfangreicheren Features und Verbesserungen.
Geplant sind unter anderem ein komplett neuer Solver-Body-Ansatz, der drastisch schneller arbeiten soll, ein Rework der Joint-Mechaniken hin zu impulsbasierten Lösungen, sowie die Einführung eines Bounding Volume Hierarchy (BVH) basierten Broad Phase Collision Detection-Systems. Mit diesen Neuerungen werden die Performance und die Skalierbarkeit noch weiter gesteigert. Weiterhin befindet sich eine Neuentwicklung der Spatial Query Pipeline in Arbeit, die die Entkopplung von der Parry-Bibliothek anstrebt und eine flexiblere Nutzung unterschiedlicher Kollisionsbackends ermöglicht. Parallel dazu wächst Peck, eine native Bevy-Collision-Bibliothek, die mit geringem Overhead und effizienteren Algorithmen die Zukunft der Kollisionsberechnung in Avian sichern soll. Auch im Bereich der Benutzerfreundlichkeit schlägt Avian neue Wege ein.
Die geplante Überarbeitung der Kraft- und Impuls-API bringt ein intuitiveres Handling von einwirkenden Kräften, ähnlich bekannten Engines wie Unity oder Godot. Persistente und temporäre Kräfte können damit einfacher und flexibler definiert werden. Zudem formiert sich aktuell eine Character Controller Working Group, die daran arbeitet, robuste und vielseitige Steuerungssysteme für Avian zu etablieren. Ziel ist es, offizielle Beispiele und Codebasen zu schaffen, die verschiedene Gameplay-Szenarien abdecken und die Integration von Bewegungslogiken für unterschiedlichste Charaktertypen erleichtern. Avian 0.
3 stellt damit einen bedeutenden Meilenstein für die Bevy-Gemeinschaft und alle Nutzer dar, die eine leistungsfähige, ECS-kompatible Physiklösung suchen. Die Kombination aus hoher Performance, Modularität und einfacher Bedienbarkeit macht Avian zu einem der vielversprechendsten Projekte im Bereich der Rust-basierten Spielphysik. Entwickler profitieren von einer umfassend überarbeiteten Kollisionsinfrastruktur, smarter Ereignissteuerung und einem zukunftssicheren Design, das bereits auf kommende Features vorbereitet ist. Dank der aktiven Community und der kontinuierlichen Arbeit am Projekt werden auch zukünftige Versionen spannende Funktionen und Verbesserungen bieten. Für Projekte, die robuste Physiksimulationen in Bevy integrieren möchten, ist Avian 0.
3 ein hervorragender Ausgangspunkt und das Fundament für realistische und performante Spielwelten oder Simulationen jeglicher Art.