Simulation 2

Anknüpfend an die erste Simulation werde ich eine zweite, ausgefeiltere Erstellen. Mithilfe des Programmes SoundParticles werden wieder 50 3D-Objekte im vorgefertigten Raumverteilt und durch sorgfältiges einstellen der Parameter eine Schwarmdynamik erzeugt. Das Produkt daraus wird nun in 4th-order Ambisonic gerendert und ausgegeben. Das so entstandene File importiere ich in Reaper um mit der IEM – Plugin Suite (Scene Rotator, Binaural Decoder) eine authentische Kopfbewegung zu realisieren. Das dadurch entstandene Produkt soll als Anhaltspunkt für die folgende, interaktive Installation gelten.

Es die Sounds können beliebig gewählt werden von natürlich bis abstrakt. Für diese Aufnahme habe ich in “Serum” wieder 7 leicht unterschiedliche Soundfiles erstellt, die zusammen den Flug von mehreren Maschinen mit Rotoren oder großen Insekten nachahmen sollten.

Des Weiteren wurde, zur besseren Veranschaulichung, eine binaurale (also bitte mit Kopfhörern wiedergeben) Bildschirmaufnahme des Programmfensters erstellt.

Automotive AR examples

| looking at some state of the art examples of in-car AR systems on the market

MBUX – the newest infotainment system of Mercedes-Benz

2018 was the year when Mercedes Benz introduced their newest infotainment system called MBUX. This uses the front camera (originally used for parking) to create a live stream of the road ahead, combined with graphics of navigation hints or finding adresses. Since then it was continuosly improved and the latest version was revealed in 2021 in the S/EQS-Class models, featuring an AR navigation display and a HUD with distance assist, lane keeping assist and dinamic arrows showing directions.

Video demostrations of the 2021 MBUX system:


Audi announced their augmented reality HUDs as an optional feature for the newest high-end electric SUV, the Q4 e-tron for 2021. The visual information shown in front of the driver are similar to the MBUX’s content. Audi explicitly defines two areas: the status field (in a visual distance of ca. 3 m) and the AR field (in a visual distance of ca. 10 m), which seems to be bigger than in the German competitor’s solution.

Demo video of the Q4 e-tron HUD:

Hyundai and WayRay

Looking at HUDs further, Hyundai/Genesis was the first brand to implement laser-holographic AR head-up displays in their G80 model, presented by the young AR developer company WayRay in 2019. It is said to have tremendous benefits compared to past HUDs (using reflected LCD screens) in terms of precision and visibility for the driver.

The Swiss startup WayRay claims to be the only company to have implemented holography to HUDs. Their holographic optical elements (HOEs) in their displays should provide unprecedented 3D images while remaining transparent and capable of being bent to windshields. The company presents its uniqueness in the field by covering “deep-tech” holography hardware development (e.g. blue-laser beams) as well as software development, all realised in-house.

They have already received large fundings by Hyundai and Porsche, have presented a 180° AR cockpit experience and offer different add-on solutions for vehicles, boats and airplanes. Their newest project is a shared car concept (“Holograktor”), designed for the “Metaverse” with a complete gaming / working / learning possibility while traveling autonomously. In their cooperation with Pininfarina on a concept car, they proposed solutions of the “True AR” displays also for side windows, providing new ways of passenger infotainment and entertainment experiences.

A report from the FIA Formula E on WayRay’s developments also predicts the use of HUD systems for race cars in the future. The pilots behind the wheels could get visualized ideal racing lines, brake points or a ghost car to chase on the race track.

Hyundai’s In-Car Noise Cancelling

Besides HUDs, Hyundai is pushing the development of AR solutions in cars in other aspects as well. Like in our headphones, noise cancelling also found its way into the car interiors, bringing more comfort to the passengers. According to Hyundai, the earlier systems were only capable of masking steady engine noises, but their newest solution (“Road Noise Active Noise Control”) in the upcoming Genesis GV80 will be capable of deleting different tire noises at different speeds. It uses multiple microphones placed directly into the wheel wells, accelerometers, amplifiers and a digital signal processor. As a result of the complex calculations for each individual wheel, the in-car noise should be reduced by half (3 dB).

Engine sound enhancements

Writing about noises of the car, we also have to take a short look at the opposite effects to noise cancelling – the engine sound enhancement devices. Due to the downsizing of the engine displacements, the roars coming from the combustion got also reduced. To keep the emotions connected to sporty engine sounds though, manufacturers are using additional devices to create compensating sound effects.

These can be pipes from the intake manifold connected to the dashboard walls, in some cases with an extra flap to control the sound throughput only for the sporty driving situations (Toyota, Ford, Porsche).

BMW was known to use engine sound amplification through a synthesised reproduction of the actual engine noise played simply on the car’s speakers.

The Volkswagen Group made it a bit more complicated by adding a special speaker device (“Soundaktor”) below the windshield to produce deep, buzzing tones resembling larger engine sounds. In some models there are also speakers built into the exhaust pipes to alter the natural noises coming from the engine, to make them more emotional or masculin.

Soundmodule for the Mercedes G350d

3D ADAS system of Arkamys

Beeping noises in a car are existent since many years, with the intention to help drivers. But beeping on itself is not always enough to give an understandable signal about what is happening or dangerous around the driver. The company Arkamys presented an intuitive alerting concept for Advanced Driver Assistance Systems – parking, lane keeping, blind spot and other assistants – by placing many different speakers inside the cabin and generating a 3D sound experience. With this it is possible to signalize the direction where a possible danger can exist, making the recognition and processing of the information easier and more intuitive for the driver.

Electric cars

Electric cars are further good examples where in-car noise generators are used to give the driver and passengers the known feeling of vehicle driving dynamics. Porsche is a perfect example where specific sounds are developed for representing the brand’s identity within the driver experience. They call the system “Porsche Electric Sport Sound” that enhances some natural noises of the drivetrain but also reduces disturbing ones, while implementing sounds to compy with the legal regulations for electric vehicle alerting sounds.

Thinking further about sound augmentation in cars, probably the already most spread system is the parking assistant, giving beeping sound feedback on the remaining distance to obstacles around the car. The design of these systems could probably fill a chapter on its own, but as it is already an everday tool, I won’t go further into detail on it.

The above listed examples are not even close to a complete list of use cases. Therefor I want to further research the current technologies. The next step will then be to look into the reasons for these systems, why they were developed and what practical needs, feelings and experiences are the underlying causes.


Online article on Wired: With In-Car AR, Drivers Get a New View of the Road Ahead. Retrieved on 05.12.2021

Article on Wired: Hyundai’s Luxury SUV Mixes Mics and Math for a Silent Ride. Retrieved on 05.12.2021

Online Article on FIA Formula E: How AR and VR are revolutionising the car industry. Retrieved on 05.12.2021

WayRay – offical website. Retrieved on 05.12.2021

Online article on WayRay by CNET and Autocar. Retrieved on 05.12.2021

YouTube video by Roadshow: CES 2019: WayRay’s holographic AR windshield is real, hitting the road soon. Retrieved on 05.12.2021

AutoCar article on the Pininfarina concept car. Retrieved on 05.12.2021

Online article by AutoZeitung: Mercedes entwickelt MBUX weiter. Retreived on 05.12.2021

Mercedes-Benz MBUX System – online articles and images, retrieved on 05.12.2021

Audi AR HUD system: online article and Youtube video on Slashgear. Retreived on 05.12.2021

Online article on GeekDad: Augmented Reality for Your Ears. Retrieved on 01.02.2022

Image of Mercedes G350d soundmodule. Retrieved on 01.02.2022

CarThrottle article on sound enhancers. Retrieved on 05.12.2021

The Porsche Sound – online article, retrieved on 05.12.2021

Flocking Algorithmen

… Using computers, these patterns can be simulated by creating simple rules and combining them. This is known as emergent behavior, and can be used in games to simulate chaotic or life-like group movement. …–gamedev-3444

Im Jahr 1968 wagte Craig Reynolds einen revolutionären Schritt in der KI-Animation. Er erstellte viele individuelle Objekte, welche mit den jeweils anderen in Interaktion traten. Diese Objekte nannte er “Boids”. Ziel des Projektes war es, das Verhalten eines Vogelschwarms zu simulieren.

In der einfachsten Form folgten diese Boids 3 Grundregeln.

  1. Separation: wähle eine Richtung, die einer Häufung von Boids entgegenwirkt
  2. Angleichung: wähle eine Richtung, die der mittleren Richtung der benachbarten Boids entspricht
  3. Zusammenhalt: wähle eine Richtung, die der mittleren Position der benachbarten Boids entspricht

neighborhood diagram

Jeder Boid hat direkten Zugriff auf die gesamte geometrische Information der Szene, aber der Flocking Algorithmus erfordert, dass er nur auf Boids innerhalb einer bestimmten kleinen Umgebung (Neighbourhood) um sich selbst reagiert. Die Nachbarschaft ist durch eine Entfernung (gemessen vom Zentrum des Boids) und einen Winkel, gemessen von der Flugrichtung des Boids, gekennzeichnet. Boids außerhalb dieser lokalen Nachbarschaft werden ignoriert. Die Nachbarschaft könnte als ein Modell der eingeschränkten Wahrnehmung (wie bei Fischen in trübem Wasser) betrachtet werden, aber es ist wahrscheinlich richtiger, sie als die Region zu betrachten, in der die Artgenossen die Steuerung eines Boids beeinflussen.

In Zusammenarbeit mit einigen Mitarbeitern der Symbolics Graphics Division und Whitney / Demos Productions haben wir einen animierten Kurzfilm mit dem Boids-Modell namens Stanley und Stella in: “Breaking the Ice”. Dieser Film wurde erstmals im Electronic Theater auf der SIGGRAPH ’87 gezeigt. Auf der gleichen Konferenz wurde auch ein technischer Aufsatz über Boids veröffentlicht. In den Kursnotizen für die SIGGRAPH ’88 gab es einen informellen Beitrag über Hindernisvermeidung.

Seit 1987 gab es viele weitere Anwendungen des Boids-Modells im Bereich der Verhaltensanimation. Der erste war der Tim-Burton-Film Batman Returns von 1992. Er enthielt computersimulierte Fledermaus- und Pinguinschwärme, die mit modifizierten Versionen der ursprünglichen, bei Symbolics entwickelten boids-Software erstellt wurden. Andy Kopra (damals bei VIFX, das später mit Rhythm & Hues fusionierte) produzierte realistische Bilder von Fledermausschwärmen. Andrea Losch (damals bei Boss Films) und Paul Ashdown erstellten eine Animation einer “Armee” von Pinguinen, die durch die Straßen von Gotham City marschieren.


Das ist vorallem in diesen zwei Filmausschnitten zu sehen:

Für die objektorientierte Programmiersprache Processing gibt es ebenfalls eine sehr representative Darstellung zu Boids und der Programmierung.*





Unity Flocking

Auf der Unity Hompage findet sich praktischerweise ein simples Tutorial mit Videoanleitung, welches Flocking-Algorithmen verständlich machen soll. Da meine C# Kenntnisse noch recht bescheiden sind, hat mich das Ganze doch etwas Zeit und nerven gekostet, aber nun, endlich, habe ich es vollbracht.

Hier der Code des FlockingManagers und des Flock Files mit Erklärung:

Code Flock manager:

using UnityEngine;
public class FlockManager : MonoBehaviour {

//Erstellt den Flock Manager

    //Zugang zum Fish Game Object

    public GameObject fishPrefab;

    //Variierbare Startnummer an Fischen

    public int numFish = 20;

    //Array für die Erstellung der Fische

    public GameObject[] allFish; 

    //Räumliche Limits

    public Vector3 swimLimits = new Vector3(5.0f, 5.0f, 5.0f);

    //Gemeinsame Zielposition

    public Vector3 goalPos;

    //Variabel verstellbare Parameter in Unity

    [Header("Fish Settings")]

    [Range(0.0f, 5.0f)]

    public float minSpeed;          // Minimum speed range

    [Range(0.0f, 5.0f)]

    public float maxSpeed;          // Maximum speed range

    [Range(1.0f, 10.0f)]

    public float neighbourDistance; //Distanz zum Nachbarn

    [Range(0.0f, 5.0f)]

    public float rotationSpeed;   //Rotationsgeschwindigkeit der FishPrefabs

 void Start() {

       // Erstellung der Fische

        allFish = new GameObject[numFish];

       //looped und instantiiert (Fisch)

        for (int i = 0; i < numFish; ++i) {

//Erstellt Position des Fisches → Flockmanager+randomVektor

            Vector3 pos = this.transform.position + new Vector3(Random.Range(-swimLimits.x, swimLimits.x),

                                                                Random.Range(-swimLimits.x, swimLimits.x),

                                                                Random.Range(-swimLimits.x, swimLimits.x));

            allFish[i] = (GameObject)Instantiate(fishPrefab, pos, Quaternion.identity);

            allFish[i].GetComponent<Flock>().myManager = this;


        //Ziel zu dem sich die Fische hinbewegen

        goalPos = this.transform.position;


   //Wird pro Frame upgedatet

    void Update() {

      //dem Ziel wird jedes mal ein neuer randomisierter Faktor hinzugefügt

        if (Random.Range(0.0f, 100.0f) < 10.0f) {

            goalPos = this.transform.position + new Vector3(Random.Range(-swimLimits.x, swimLimits.x),

                                                            Random.Range(-swimLimits.x, swimLimits.x),

                                                            Random.Range(-swimLimits.x, swimLimits.x));




Code Flocking:

using UnityEngine;

public class Flock : MonoBehaviour {

  //Zugriff auf den Flock Manager

    public FlockManager myManager;

    //Initial Speed vom fisch

    float speed;

    // Bool um die Raumlimitation zu checken

    bool turning = false;

    void Start() {

        // Random speed für jeden einzelnen Fisch

        speed = Random.Range(myManager.minSpeed, myManager.maxSpeed);


    //Wird pro Frame upgedated

    void Update() {

        // Bbox des Manager Cubes

        Bounds b = new Bounds(myManager.transform.position, myManager.swimLimits * 2.0f);

        // wenn der Fisch auf Widerstand trifft oder an die Grenzen des Cubes kommt, muss er umdrehen

              RaycastHit hit = new RaycastHit();

        Vector3 direction =;

        if (!b.Contains(transform.position)) {

            turning = true;

            direction = myManager.transform.position - transform.position;

        } else if (Physics.Raycast(transform.position, this.transform.forward * 50.0f, out hit)) {

            turning = true;

            // Debug.DrawRay(this.transform.position, this.transform.forward * 50.0f,;

            direction = Vector3.Reflect(this.transform.forward, hit.normal);

        } else {

            turning = false;


        // Test ob gedreht wird

        if (turning) {

            // Drehen zum Cube Center

            transform.rotation = Quaternion.Slerp(transform.rotation,


                                                  myManager.rotationSpeed * Time.deltaTime);

        } else {

            // 10% chance of altering prefab speed

            if (Random.Range(0.0f, 100.0f) < 10.0f) {

                speed = Random.Range(myManager.minSpeed, myManager.maxSpeed);


            // 20& chance of applying the flocking rules

            if (Random.Range(0.0f, 100.0f) < 20.0f) {




        transform.Translate(0.0f, 0.0f, Time.deltaTime * speed);


    void ApplyRules() {

        GameObject[] gos;

        gos = myManager.allFish;

        Vector3 vcentre =;

        Vector3 vavoid =;

        float gSpeed = 0.01f;

        float nDistance;

        int groupSize = 0;

        foreach (GameObject go in gos) {

            if (go != this.gameObject) {

                nDistance = Vector3.Distance(go.transform.position, this.transform.position);

                if (nDistance <= myManager.neighbourDistance) {

                    vcentre += go.transform.position;


                    if (nDistance < 1.0f) {

                        vavoid = vavoid + (this.transform.position - go.transform.position);


                    Flock anotherFlock = go.GetComponent<Flock>();

                    gSpeed = gSpeed + anotherFlock.speed;




        if (groupSize > 0) {

            // Find the average centre of the group then add a vector to the target (goalPos)

            vcentre = vcentre / groupSize + (myManager.goalPos - this.transform.position);

            speed = gSpeed / groupSize;

            Vector3 direction = (vcentre + vavoid) - transform.position;

            if (direction != {

                transform.rotation = Quaternion.Slerp(transform.rotation,


                                                      myManager.rotationSpeed * Time.deltaTime);





Flocking Tutorial:

Swarm 2

“Trotz seiner Anonymität ist ein Schwarm oft hochgradig geordnet, d.h., die Einzeltiere verhalten sich räumlich und zeitlich eng koordiniert…”

Langsam aber sicher beginnt die Idee sich zu formen. Wir befinden uns immernoch im Larvenstadium, aber unter der harten hüllen formen sich die ersten Auswüchse, welche später zu standfesten Beinen werden. Konkret bedeutet das, ich habe eine Vision.

Nach einem Erstgespräch mit Benjamin Stahl (meiner wissenschaftlichen Betreuung und Ideenmaschine seitens des IEM) sehe ich nun ein nicht mehr ganz so trübes Bild vor meinem inneren Auge. Und zwar ein Raum, aus intrinsisch ästhetischer Entscheidung eine Halbkugel, schwarz ausgefüllt. Jeder Besucher_in wir ein paar Kopfhörer aufgesetzt und ein Tablet in die Hände gegeben. Nun können die Neugierigen auf Entdeckungsreise gehen, und dem Schwarm lauschen. Durch ein Motiontracking-System, welches auf den Kopfhörern platziert ist, weiß auch der Schwarm wo sich die Besucher_innen aufhalten und kann ihnen so gekonnt ausweichen. Als kleine visuelle Stütze werden am Boden LED`s installiert sein, die schwach Leuchten sobald sich der Schwarm an einem Platz akkumuliert. Als weitere visuelle Stütze können die 3D Objekte mit dem Tablet in AR-Manier sichtbar gemacht werden und, als kleines aber interessantes Feature, auch angelockt werden.

Die Kommunikation zwischen 3D Objekten, Sound und Licht wird voraussichtlich über OSC (OpenSoundControl) passieren. Nach langem überlegen, wird Unity als Fundament eingesetzt und dann mit Middleware (Fmod, Touchdesigner, etc…) erweitert.

Als nächste große, zu überschreitende Hürde gilt es, eine gute Lösung für räumlichen Sound in Unity zu finden.


Schwarmsimulation mit SoundParticles

Um einen kleinen Eindruck zu bekommen, wie sich das Produkt möglicherweise anhören könnte, habe ich mit der Software SoundParticles (welche für Studenten und nicht-kommerzielle Zwecke frei zur Vefügung steht) eine Simulation eines Schwarms kreiirt, der sich in einem virtuellen 3D Raum über den Beobachter hinweg bewegt. Praktischerweise kann man in SoundParticles mit wenigen einfachen Klicks die verschiedensten Outputmöglichkeiten auswählen. Ich habe das Projekt nun in Stereo gerendert, aber ebenfalls ein File für die Lautsprecheraufstellung im CUBE des IEM erstellt. So kann ich bei Gelegenheit (falls dieser Lockdown jemals endet) auch die Wirkung in verschiedenen Ambisonic-Klassen testen.

Für die “Partikel” habe ich fünf 30-Sekunden Soundfiles mit Xfer Serum erstellt. Speziell wurde darauf geachtet, dass das Signal möglichst trocken bleibt und sich die verschiedenen Spuren nur leicht im Pitch und Frequenzanteil unterschieden, um eine möglichst homogene, aber doch leicht variierte Masse zu erreichen. Für den Effekt eines schlagenden Flügels verwende ich einen Sawtooth-Layer mit einem relativ schnellen LFO der auf die Volume geroutet wurde (Tremolo) und einem wenige ms kurzen Transienten um mehr Charakter hineinzubringen.

Danach füge ich die Soundfiles in SoundParticles ein und erstelle eine Particle-Group. Dies scheint anfangs etwas kompliziert, da ich erst die Navigation für die Automation lernen muss (welche meiner Meinung auch noch ausbaufähig ist) aber mit etwas tüftelei fliegt mein Schwarm bald durch den 3D Raum. Hier und da noch ein paar randomisierte Parameter hinzugefügt wirkt das Ganze auch schon etwas lebendig und das Ergebnis kann sich auch schon hören lassen.

WICHTIG! Das Soundfile wurde Stereo für Lautsprecher exportiert, darum wird das Erlebnis auf Kopfhörern beeinträchtigt sein.

Es ist möglicherweise noch wichtig anzumerken, dass es sich hier nicht um eine Schwarmsimulation handelt, sondern nur um eine Darstellung mit festen Parametern um sich das auditive Abbild vor Augen (oder eher Ohren) führen zu können.

Swarm 1

“Schwarm, umgangssprachliche Bezeichnung für einen großen, einheitlich formierten, dreidimensionalen mobilen Verband …” 

Jedem Studenten wurde die Aufgabe gestellt, sich innerhalb von drei Tagen ein Projekt zu überlegen, welches er/sie über den Master hinweg realisieren möchte. Dass Zeit relativ ist, wusste nicht nur schon Einstein. Drei Tage feiern erscheint einem dann doch etwas ergiebiger als drei Tage für ein gutes Konzept. So saß ich grübelnd auf meiner Couch und bewaffnet mit einem Tee in der Linken und einem Kugelschreiber in der Rechten fing das Rad in mir an sich zu drehen.

Als zentrale Frage versuchte ich als erstes herauszufinden, was mich überhaupt interessiert. Einige A4 Seiten später driftete die Tätigkeit in einen dämmernden Zustand über und mich überkam der Schlaf. Plötzlich fand ich mich in einer absolut anderen Umgebung wieder. Mein Schlaf lockte mich zurück in den Sommer, wo ich fasziniert durch die Unterwasserwelt der kroatischen Küste schnorchelte. Eingebettet in warmen Wasser schwebte ich den fremdartigen Felsformationen entlang um eine Schule kleiner Fische zu verfolgen. Wieder zurück an Land fand ich mich zwar nicht in der Sonne wieder, doch beschäftigte mich in meinem Bett eine andere Frage:

“Wie funktioniert eigentlich ein Schwarm?”

Grundsätzlich folgt ein Schwarm drei Regeln:

  • Bleibt zusammen. Das bedeutet, das einzelne Tier sieht sich immer nach Artgenossen um und schwimmt zu ihnen.
  • Bewege dich in dieselbe Richtung. Das verhindert, dass ein chaotisches Durcheinander entsteht.
  • Halte einen konstanten Abstand. Diese Regel erhöht die Ordnung.

Sofort fragte ich mich selbst, ob und wie sich mit dieser Erkenntnis ein Projekt umsetzen lässt, welches auch noch einen Sounddesign-bezogenen Mehrwert besitzt. Nach kurzem überlegen, kam mir ein Programm in den Sinn, welches ich schon zu einem früheren Zeitpunkt getestet hatte. Sound-particles* ist ein mittlerweile sehr beliebtes “CGI-like” Programm, mit dem man 3D-Objekte in einem Raum erstellen und und diesen verschiedene Sounds zuweisen kann. Dies funktioniert jedoch nur sehr statisch und wird, meines derzeitigen Wissens auch fast ausschließlich in Filmen verwendet. Mir war es jedoch wichtig, dem Projekt einen dynamischen und interaktiven Charakter zu geben und so bildete sich aus der wagen Erleuchtung langsam eine Idee. Und zwar ein abgedunkelter Raum, in welcher Besucher mit einem unsichtbaren, aber hörbaren Schwarm in Kontakt treten können.