Das Konzept der Motivation

Im letzten Blogpost wurden 8 verschiedene Motivatoren, die NutzerInnen zum Handeln und Interagieren auffordern, erläutert. In diesem Blogpost soll dieses Wissen noch erweitern und ergänzt werden, indem näher auf die Kategorisierung der Motivatoren und die Unterschiede intrinsischer und extrinsischer Motivation eingegangen wird. Die 8 Hauptfaktoren, die im letzten Blogpost beschrieben wurden, sind:

  1. Bedeutung und Berufung
  2. Entwicklung, Leistung und Erfolg
  3. Bestärken von Kreativität und Feedback
  4. Eigentum
  5. Sozialer Einfluss und Bezug
  6. Mangel und Ungeduld
  7. Unberechenbarkeit und Neugier
  8. Vermeidung und Verlust

Bewusste Entscheidung vs. Dringlichkeit

Diese, gerade genannten, Faktoren funktionieren aber nicht auf dieselbe Art und Weise und können weiter in zwei verschiedene Kategorien eingeteilt werden. Die ersten 3 Möglichkeiten NutzerInnen zum Handeln zu bewegen beruhen auf dem Prinzip von Macht und Kontrolle, Nutzer und Nutzerinnen entscheiden sich bewusst zur Handlung, ohne, dass ein Gefühl von Dringlichkeit zu spüren ist. Viel mehr verspüren sie Macht und Kontrolle über ihr Handeln, Befriedigung und Erfüllung.

Die letzten drei Faktoren hingegen beruhen auf genau diesem Gefühl der Dringlichkeit. NutzerInnen fühlen sich dazu gedrängt schnell zu handeln, da die Möglichkeit sonst eventuell wieder verschwindet. Langfristig gesehen, führt dieser Ansatz jedoch dazu, dass sich NutzerInnen eher entmutigt fühlen und dadurch davon abgehalten werden zu reagieren, zu interagieren und zu handeln. Denn durch das Gefühl etwas unbedingt jetzt gleich machen zu müssen, kommt auch ein Gefühl des Kontrollverlustes mit, Nutzer und Nutzerinnen haben so weniger Kontrolle über ihr Verhalten und treffen Entscheidungen weniger bewusst und ohne lange darüber nachzudenken. Im schlimmsten Fall kommt es zu Gefühlen wie Sucht und Besessenheit.

Möchte man also ein Produkt oder eine Plattform entwerfen, für die Interaktionen notwendig sind, sollte man sich langfristig eher auf die Motivatoren Bedeutung und Berufung, Entwicklung, Leistung und Erfolg sowie dem Bestärken von Kreativität und Feedback konzentrieren. Gute Beispiele für die Mischung der beiden Kategorien sind Videospiele, es wird viel mit Belohnung, dem Bestärken von Kreativität oder der Messung von Erfolg gearbeitet. Doch auch Zeitdruck und zeitlich begrenzte Möglichkeiten werden oft genutzt um mehr Spannung zu kreieren. Wird ein zu großer Fokus auf die Motivatoren Mangel und Ungeduld, Unberechenbarkeit und Neugier oder Vermeidung und Verlust gelegt, führt das meist dazu, dass das Spiel gerade anfangs süchtig macht und NutzerInnen es fast zwanghaft spielen, jedoch nach einer Zeit das Interesse verlieren und ganz damit aufhören.

Extrinsisch vs. intrinsisch

Neben dieser Unterteilung, können die acht Hauptantriebe auch noch in extrinsisch und intrinsisch unterteilte werden. Von den acht Hauptfaktoren, die im letzten Blogpost näher beschrieben wurden gehören Nummer 2,4 und 6, also Entwicklung, Leistung und Erfolg, Eigentum und Mangel und Ungeduld zu den extrinsischen Antrieben. Nutzer und Nutzerinnen handeln um eine Belohnung zu bekommen oder einer Bestrafung zu entkommen. Also der Lohn motiviert und nicht die Handlung selbst. Beispiele dafür wären zu Arbeiten nur des Geldes wegen und nicht weil einen die Arbeit erfüllt, das Lernen um eine gute Note zu bekommen oder auch das Teilnehmen an Wettbewerben um etwas zu gewinnen.

Die Antriebe 3,5 und 7, also das Bestärken von Kreativität und Feedback, Sozialer Einfluss und Bezug, sowie Unberechenbarkeit und Neugier gehören zur Kategorie der intrinsischen Motivation. NutzerInnen beschäftigen sich mit einer Interaktion, weil sie, sie als bereichernd empfinden und nicht um eine Belohnung zu bekommen. Man handelt um des Handelns Willen und nicht wegen des Lohns. Beispiele dafür wären künstlerische Selbstverwirklichung oder das Teilnehmen an Events und Dingen, die einem selbst Spaß machen.

Hier ist es noch wichtig zu wissen, dass extrinsische Motivation oft ein Feind der intrinsischen Motivation ist. Ist ein Künstler dazu gezwungen mit seiner Kunst Geld zu verdienen, verliert er womöglich den Spaß daran, was die Motivation künstlerisch tätig zu sein zu einer extrinsischen Motivation werden lässt. Deshalb sollte man sich auch hier langfristig eher auf die intrinsische Motivation konzentrieren um die Neugier und das Interesse des Nutzers oder der Nutzerin zu wecken und sie so zu einer Interaktion oder Handlung zu bewegen.

Wie also zu erkennen ist, ist es wichtig den Nutzer oder die Nutzerin auf die richtige Art und Weise zu motivieren um langfristig gute Ergebnisse vorweisen zu können. Gamification kann Bedeutung in ein Produkt oder eine Plattform bringen indem man sich die Frage stellt: „Was bewegt einen Nutzer oder eine Nutzerin dazu, dieses Produkt, die Plattform oder den Service beispielsweise zu verwenden?“. Versteht man das Konzept der Motivation ist es viel einfacher eine gute User Experience zu schaffen und langfristig Kunden und Kundinnen zu gewinnen. Es lässt uns verstehen wieso bestimmte Dinge besonders gut funktionieren und anderen wieder nicht. Denn die richtige Verwendung der Motivatoren gibt dem Produkt oder dem Service nicht nur mehr Bedeutung, sondern auch mehr Wert.

Who inspires me #3

While looking at different artists/illustrators I realized that me liking their work has no connection to the fact if they create their work digitally, analog or with a mix of both. I find all three approaches equally fascinating, but might be personally leaning towards the mixed/digital approach with analog textures.

Ira Sluyterman van Langeweyde (@iraville) is an illustrator based in Munich with a passion for paper and watercolor. Most of her work is based around nature and landscapes but it also includes some character design. For her work she mostly uses earthy and natural colors. She mostly uses a white background and incorporates the white space into her compositions.

Wwise Implementierung in Unity (Teil 5: AkListener, AkGameObj & AkEnvironment)

In meinem letzten Blogeintrag habe ich das grundlegende Prinzip der Soundengine von Unity, die auf der Verwendung von Audio Listenern und Audio Sources basiert, vorgestellt. Die Wwise-Soundengine arbeitet auf dem selben Prinzip und hat standardmäßig bereits vorhandene Skripte mit welchen die selben System realsiert werden können. Diese Skripte heißen AkAudioListener und AkGameObj. AkAudioListener ist der Wwise-Ersatz für den Audio Listener von Unity.

Ist die Position und Blickrichtung eines GameObjects notwendig, was bei den meisten diegetischen Klänge einer dreidimensionalen Spielwelt der Fall ist, muss dieses GameObject auch als ein solches in Wwise registriert werden. Dafür gibt es das AkGameObj-Skript, das auf alle GameObjects gelegt wird.

Das GameObject, das als Main Camera dient und auf welchem das AkAudioListener-Skript liegt, muss ebenfalls mit einem AkGameObj-Skript versehen werden, weil auch dessen Position und Blickrichtung notwendig ist, um den Abstand und die Richtung zu anderen GameObjects berechnen zu können. In Wwise kann das Verhalten des Richtungshörens und auch des Pegelabfalls bei steigernder Distanz von Audio Listener zu klangerzeugenden GameObject (wie der Rolloff in Unity) konfiguriert werden.

Konfiguration des Klangverhaltens von Objekten in einer dreidimensionalen Spielwelt
Pegelabfallverhalten abhängig von der Distanz des Audio Listeners zum GameObject

Das AkGameObj-Skript kann zusätzlich auch noch andere Parameter aus dem Spiel übermitteln, wie Switches, RTPCs oder Umgebungsinformationen.

Reverb Zones werden Wwise mithilfe von Aux-Bussen realisiert, mit welchen innerhalb von Wwise ein Hall-Effekt zum Direktsignal hinzugemischt wird. Tatsächlich können auch andere Effekte statt Hall-Effekte verwendet werden. Das hierfür benötigte Skript ist das AkEnvironment-Skript, welches auf einen Collider gelegt wird. Im Inspector des Collider-GameObjects kann ausgewählt werden, welcher Aux-Bus aktiviert werden soll, sobald der Collider betreten wird.

AkEnvironment Skript, welches den “Testreverb” aktiviert

Dabei ist wichtig, dass das GameObject, wie z.B. der Audio Listener (also die Main Camera) im AkGameObj so konfiguriert wird, dass diese auf AkEnvironment-Skripte reagieren und damit ein Signal an den jeweiligen Aux-Bus senden.

Dieses GameObj ist Hall-fähig konfiguriert


Quellen:

[1] https://www.audiokinetic.com/courses/wwise301/?source=wwise301&id=Audio_Listener

[2] https://www.audiokinetic.com/library/edge/?source=Unity&id=class_ak_audio_listener.html

[3] https://www.audiokinetic.com/library/edge/?source=Unity&id=pg__wwise_components.html

[4] https://www.audiokinetic.com/library/edge/?source=Unity&id=class_ak_game_obj.html

[5] https://www.audiokinetic.com/library/edge/?source=Unity&id=unity_use__ak_environment__ak_environment_portal.html

Test: Digital theremin

Dieses Programm habe ich schon vor längerer Zeit geschrieben, nun habe ich es erweitert und umgeschrieben. Eigentlich wurde dieses Beispiel für die Anbindung einer Kinect Kamera und einer Beamer-Leinwand erstellt (Immersives Theremin) und aus diesen Daten eine Visualisierung zu generieren.

Beispiel

Ein User bewegt sich vor einer (Beamer)Leinwand und steuert ein Theremin. Visualisiert wird dies durch eine Kette an Kuben welche stereoskopisch dargestellt werden und den User beim Musizieren verfolgen.

Beim Tragen einer stereoskopischen 3D Brille sollte ein 3D-Effekt sichtbar sein.

Geht der User vor der Leinwand auf der X-Achse auf und ab (Lautstärkeänderung).

Die Größer der Boxen ändert sich durch die Entfernung des Nutzers zur Kinect.

Der User hebt den rechten Arm und die Frequenz ändert sich.

Ziel:

  1. Nachdem der stereoskopische Effekt mehr, oder weniger gut am Beamer funktioniert hat, möchte ich diesen nun überarbeiten und stärker hervorheben, um diesen Effekt direkt in Zukünftigen 3D Visualisierungen übernehmen zu können.

2. Das Programm nun für die Mausnutzung abwandeln und die Z/T-Tastenvariante einfügen, um die Z Achse zu simulieren.

X-Achse –> Mouse
Y-Achse –> Mouse

Z-Achse à Z/T – Taste

Ergebnis:

Die Überarbeitung des stereoskopischen 3D-Effekts hat sich bewährt, der Effekt tritt nun viel stärker hervor. Die Abstände der Rot/Blaulinien wurde etwas vergrößert. Des Weiteren habe ich die weißen Würfel auf einen leicht grauen Hintergrund platziert um diese so hervorzuheben.

Während dem Umbau für die Mausnutzung, habe ich auch das Z-Achsenhandling abgeändert und verbessert.

by ADAMS

Print experiment: “reality is analog”, part IV–proof press

Together with the linocut I placed and fixed the sets of lead letters on an Asbern Proof Press from 1959. Presses like these have originally been used to make a first proof print to see if adjustments to your set and additional printing blocks were needed.

Although this manually driven press provides it’s own inking unit, I decided to colour the letters and linocut by hand, using offset printing colours and a silicon covered hand roller. By this I was able to put on more colour on the area of the linocut and only very little colour on the comparably small letters–for printing it’s always important to ink bigger areas properly, as they physically do not provide as much pressure as small forms pressing the colour deeper into the structure of your paper or printing fabric.

More features of the Asbern proof press are the adjustable cylinder, with which you can adjust the height of the cylinder that runs over the printing image. This function helps again to increase or decrease pressure and thus optimizing your print result without the need to strengthen your whole set with paper or cardboard from beneath. In addition the so called “Anlage” is a feature that’s part of almost any printing as well as book binding machine (and can also be found in the extended field of crafts and production). From historic ones to high tech offset machines, this technical feature enables you to fine-tune the position of your print not by moving the printing set, but adjusting the position of the paper in order to have the print in the same position on every sheet. This feature is extremely important if you have to print more colours in separate print runs next to each other, but also if you want to print on the back of your sheet on the right position.

As mentioned in the previous post, the first proof of your letter set, reveals the correct reading direction of your text and letterings, including spacing. Besides, the proof will also show if the letters still have sharp edges or are rather worn out. Especially big wooden letters easily take on wear and due to minimal irregularities in height they may not take colouring evenly, resulting in a rather vintage look.

For the lino-cut I had to put quite a lot of paper beneath the print block to increase the height and thus gain pressure for a better printing result.


The inexact height of the letters (from various fonts), but also printing blocks and the combination of both often makes adjustment necessary. By simply putting thin pieces of paper like wrapping paper beneath forms that do not take colour and thus won’t appear in the print, it’s possible to raise the height of the single letters or areas of printing forms. Adjusting the height will not only make previously uninked areas visible, but will also increase pressure and thus create a better printing image. Here it’s interesting to mention that putting a single strip of adhesive tape beneath a letter can make a difference of a not printing, a printing or even an embossed letter in your print.

A simple rule for letterpress printing is that little pressure and little colouring will result in a rather “cloudy” appearance, while more pressure and more colour will give your image a more saturated look. Too much pressure may exceed the possibility of embossing, which may result in cracks of the paper. Also too much colour (in combination with high pressure) will result in blurry edges.

As soon as you’re happy with the result of your print proof, you’re ready for the actual print run.

For small editions you can go on with the proof press. If you ink your letter sets and printing blocks by hand you can make use of possibilities like varicoloured areas or adding different analog effects on purpose to your print.

However, as this again is a quite time consuming work, for higher editions, of more or less constant colouring and quality it’s the time to move on to a fully automated press. Get to know the Original Heidelberger Zylinder in my upcoming post: part five–print edition on OHZ.

Joyful Design

Survey Part 01

The following post will examine the findings of my survey on the topic of joyful design. The goal of this survey was to outline characteristics and/or differences in perception of joyful design/a joyful object.


Method: Interview/Survey

Goal: Find characteristics and/or differences in perception of joyful design.

Number of Participants: 10

Age: 23—65



Question 01:
Which color do you associate with joy?
(multiple answers possible)

7 x yellow
2 x orange
2 x turquoise blue


1 x green, 1 x lightblue, 1 x white, 1 x melon

Question 02:
Which shapes do you associate with joy?
(multiple answers possible)

9 x round/circle
4 x star

3 x trefoil


2 x triangle, 2 x spiral
1 x half circle, 1 x heart, 1 x rhombus

Question 03:
Which sounds do you associate with joy?
(multiple answers possible)

4 x birds
3 x sea sounds
3 x wind/trees


2 x high, clear sounds, 2 x laughter
1 x Horn (note: participant is musician/plays horn), 1 x Bass, 1 x fast rhythms, 1 x cartoon sounds, 1 x cooking/roasting sounds, 1 x bright music , 1 x 60’s Mod Music, 1 x K-Pop, 1 x opening carbonated drinks, 1 x Popcorn

Question 04:
Which scents do you associate with joy?
(multiple answers possible)

4 x flowers
2 x roses
2 x sea breeze
2 x fresh cut grass

1 x lavender, 1 x new leather, 1 x computer water cooling, 1 x cinamon, 1 x fruit market, 1 x coconut, 1 x lemon, 1 x new furniture, 1 x books, 1 x sunscreen, 1 x fresh showered , 1 x fresh baked, 1 x candles, 1 x magnolia , 1 x forest, 1 x wood

Question 05:
Which taste do associate with joy?
(multiple answers possible)

5 x fruity (watermelon, cherries, mango, raspberries)
4 x chocolate/nougat
2 x sour


1 x vanille, 1 x umami, 1 x coconut water, 1 x churches, 1 x sushi, 1 x summer wine, 1 x fresh orange juice

Question 06:
Which material feels better?

Options: glass, plastic, steel, wood, other

6 x wood
4 x glass

Question 07:
Which material feels better?

Options: silk, cotton, jute, faux fur, other

5 x cotton
4 x silk

1 x faux fur

Question 06:
Which images evokes the most positive feeling?

3 x

2 x

Question 06:
Which images evokes the most positive feeling?

9x

1 x

According to the survey a clear tendency to naturalistic elements is recognizable:

Color
Yellow, Orange, Turquoise:
According to my previous research, yellow could be described as the color of joy—that also reflects in my survey.

Orange and yellow make us feel alive and alert. Blue calms us down—this reactions may be rooted in our species quest for survive (this knowledge in turn connects to our joyful experience of rural landscapes—landscapes that where livable and therefore crucial environments for our survival). Also, we instinctively experience yellow as a happy or joyful color, because it is the color of sunshine and waking life. Whereas blue is connected with peacefulness and rest. [1]

Shapes
Round/circle, Star, Trefoil:
In general, organic shapes (round, trefoil) have been described as joyful—which can be linked to elements of nature. On the other hand the star also has been mentioned to be received as a joyful shape—that result can be described through cultural connotation.  In our history they have become sacred and spiritual symbols and are symbolic for protection and guidance. Stars are connotated with many different meaning—the most recognised image is the star as a symbol of excellence.

Sounds
Birds, Sea sounds, Wind/trees:
Sounds from nature were described as most joyful. Also, sounds that are linked to positive experiences are remembered as joyful. (Popcorn, cooking, favorite music, etc.). Participants also mentioned to perceive bright, clear and high sounds as joyful.

Scents
Flowers, Roses, Sea breeze, Fresh cut grass:
Natural scents—especially flowers—where from a vast majority described as joyful.

Taste
Fruity (watermelon, cherries, mango, raspberries), Chocolate/nougat, Sour:
Primarily sweet has been described as a joyful taste, followed up by sour. Again, natural tastes—fruits—were mentioned by a vast majority.

Materials
Wood, Cotton:
Natural materials such as wood and cotton were preferred by the vast majority of participants.

Environment
Woods, Beach:
The environment of woods with lake was perceived as most joyful, followed up by the image of a beach. That cresult an be described through the theory of our preference for Pastoral landscapes (= safe, propitious and liveable environment). Pastoral scenes are a part of our evolution, which is also the reason why we are so drawn to those scenes. Typical landscape scenes include, according to Denis Dutton, hills, water, trees, birds, animals and a path moving through the scene – an ideal landscape for humans, containing protection, water and food. Dutton notes that our species has evolved to feel a need for certain types of beauty in our lives and that this pull towards things such as theses landscapes has helped us to survive as a species. He also notes that all cultures value artwork that includes these scenes – regardless where people come from. [2]

Colors/Multiplicity vs Minimalism
Colors, Multiplicity:
The picture of a building working with colorful elements and multiplicity was preferred by nine participants. Only one participant voted for the neutral, minimalistic option. This result matches with my previous research where visual cues that evoke a feeling of happiness work with bright colors, multi-colored palettes and multiplicity.


Survey:

https://docs.google.com/forms/d/e/1FAIpQLSe9bs06weEihFmH5nQdUv-5maDB3wymeLUoHY63TRp4ITTABw/viewform?usp=sf_link

Sources:

[1] Lupton, Ellen: Design is Storytelling. New York: Cooper Hewitt 2017, p. 108

[2] TED. Denis Dutton: A Darwinian theory of beauty. URL: https://www.ted.com/talks/denis_dutton_a_darwinian_theory_of_beauty (last retrieved November 14, 2020)

Audio Listener und Audio Sources in Unity

Eines der grundlegenden Prinzipien der Soundwiedergabe in der Gameengine Unity ist das Zusammenspiel aus sogenannten Audio Listenern und Audio Sources. Auf diesem Prinzip basieren alle mit Unity entwickelten Spiele und Klangrealisierungen. Man muss sich ein Spiel ein wenig, wie einen Film vorstellen, bei welchem der Regisseur (oder aber der Spieleentwickler) genau festlegt, was der Spieler sehen kann und was nicht. Zwar hat der Spieler viel mehr Freiheiten als im Film, aber im Grunde ist es ein ähnliches Prinzip. Auf visueller Ebene wird eine Kamera genutzt, die der Spieler lenken kann. Diese wird oft Main Camera genannt und ist oft an die eigene Spielfigur in der ersten oder dritten Person gebunden. Gesehen werden können alle GameObjects die im Blickwinkel der Kamera sind und mit sichtbaren Texturen belegt sind.

Ähnlich verhält es sich auch auf klanglicher Ebene. Analog zum Visuellen kann man Audio Listener als die Main Camera sehen und Audio Sources wie visuelle GameObjects. Tatsächlich ist der Audio Listener in den meisten Fällen mit der Main Camera verknüpft und Audio Sources mit den GameObjects, die Sound erzeugen. Der Audio Listener ist quasi ein Mikrofon, der Signale von Audio Sources erhält und weiter an die Audioausgänge schickt. In Unity kann es standardmäßig nur einen Audio Listener geben.

Audio Listener empfangen also Signale von Audio Sources, welche aber noch durch Effekte, wie z.B. einen Hall, geschickt werden können, wenn der Audio Listener sich in einer sogenannten Reverb Zone befindet. Reverb Zones sind kugelförmige GameObjects, die ein bestimmtes Gebiet umfassen und nach Eintreten des Audio Listeners den Anteil des Halls hinzumischen, je nachdem, wie nah sich der Audio Listener am Zentrum der Reverb Zone befindet.

Audio Reverb Zone im Unity Inspector mit verschiedenen Konfigurationsmöglichkeiten
Visualisierung des Hall-Verhaltens. Innerhalb des “Full Reverb”-Bereichs ist der Anteil des Diffussignals bei 100%. Im “Gradient Reverb”-Bereich sinkt der Anteil des Diffussignals zugunsten des Direktsignals, je weiter außen der Audio Listener sich befindet

Audio Sources können auf zwei Arten implementiert sein: 2D und 3D, diese können mit dem Spatial Blend-Regler reguliert werden.

2D bedeutet, dass sowohl Abstand als auch Richtung zum Audio Listener nicht relevant sind und der Sound unabhängig davon abgespielt wird. Der Sound, außer er wird im Unity-Mixer oder im Inspector des selben GameObjects noch weiter bearbeitet, wird so wie er ist abgespielt. Das wird vor allem für Soundtracks oder klangliche Hintergrundkulissen, wie Atmo-Aufnahmen, verwendet.

Audio Source mit verschiedenen Konfigurationsmöglichkeiten

3D hingegen setzt einen Sound Source in die dreidimensionale Spielwelt und erlaubt Richtungshören und zugleich variable Pegel, je nach Abstand des Audio Sources zum Audio Listener. Das Richtungshören wird ermöglicht, indem das ausgehende Audiosignal in ein Monosignal gewandelt wird und durch Pegelunterschiede ein Panning erhält. Es gibt zwar auch Lösungen für komplexere Surround-Sound-Verfahren, aber standardmäßig arbeitet Unity nur mit dieser vereinfachten Form, welches das Richtungshören ermöglicht. Von den verschiedenen 3D-Konfigurationsmöglichkeiten ist vor allem der Rolloff von großer Bedeutung. Damit lässt sich bestimmen, wie der Pegel, je nach Abstand zum Audio Listener, abfällt. Standardmäßig verwendet man entweder einen logarithmischen oder einen linearen Rolloff. Alternativ kann auch ein eigener, händisch eingezeichneter, Rolloff erstellt werden. Zusätzlich bestimmt man noch die Parameter Min Distance und Max Distance. Diese markieren einen Bereichen, in dem der Audio Listener sich befinden muss, um den Audio Source hören zu können und in welchem der Rolloff sich abspielt. Ist der Audio Listener außerhalb dieses Bereichs, wird das Signal nicht an diesen weitergegeben und folglich wird das Signal auch nicht abgespielt.

Die unterschiedlichen Rolloff-Verhalten

Quellen:

[1] https://docs.unity3d.com/Manual/class-AudioListener.html

[2] https://docs.unity3d.com/Manual/class-AudioReverbZone.html

[3] https://docs.unity3d.com/Manual/class-AudioSource.html

[4] https://docs.unity3d.com/Manual/AudioSpatializerSDK.html

[5] https://docs.unity3d.com/Manual/AmbisonicAudio.html

Wwise Implementierung in Unity (Teil 4: Scripting)

Neben der Nutzung vorgefertigter Skripte, die für die Implementierung von Wwise in Unity mitliefert sind, gibt es auch die Möglichkeit eigene Skripte bzw. eigenen Code zu schreiben, um Befehle an Wwise zu senden. Der Vorteil davon ist, dass man ganz genau bestimmen kann, an welcher Stelle Befehle an Wwise übermittelt werden sollen. Viele Funktionen werden außerdem von den mitgelieferten Skripten nicht abgedeckt und müssen deshalb selbst erstellt werden. Häufig muss z.B. ein Sound abgespielt werden, wenn ein Spieler eine Taste betätigt oder etwas im Spiel geschieht, was nicht mit Triggercollidern zu tun hat.

Für das Implementieren von Wwise in Unity mittels Skripte gibt es grundsätzlich zwei Möglichkeiten: Die direkte Hardkodierung eines Befehls oder die Kodierung mithilfe von Wwise-Types, die im Unity-Inspector einen Property Drawer anzeigen, mit welchem man Wwise-Objekte (Event, State, Switch usw.) auswählen kann.

Jeder hardkodierte Befehl beginnt mit dem Begriff AkSoundEngine, der quasi eine Information für Unity darstellt, dass ein Wwise-Objekt aufgerufen werden soll. Daraufhin wird bestimmt, welche Wwise-Funktion ausgeführt werden soll. Eine der grundlegendsten Funktionen ist “PostEvent” für das Aufrufen eines Wwise-Events. Desweiteren gibt es noch die Funktionen “setState” bzw. “setSwitch” zum Bestimmen eines States bzw. Switches, “setPosition“, damit Wwise die Position eines GameObjects bekommt, was für die korrekte dreidimensionale Wiedergabe von diegetischen Sounds benötigt wird, “setRTPC“, mit welchem Parameter aus dem Spiel an Wwise übermittelt werden und viele weitere Funktionen, die in der Wwise-Dokumentation nachgeschlagen werden können.
In den runden Klammern wird immer der Name des Wwise-Objekts als String mit angegeben. Manchmal werden noch andere Argumente benötigt, wie das GameObject, von dem der Befehl ausgeht.

Das Aufrufen eines hartkodierten Trigger-Events, das Sounds für Fußschritte abspielt

Alternativ dazu kann man auch mithilfe von Wwise-Types Implementierungen realisieren. Dazu wird zunächst eine Variable mit einer Wwise-Type-Klasse initialisiert. Wwise-Type-Klassen sind die verschiedenen Arten von Wwise-Objekten. Das ist z.B. AK.Wwise.Event für Wwise-Events, AK.Wwise.State für Wwise-States und viele andere. Auch alle Wwise-Type-Klassen können in der Wwise-Dokumentation nachgeschlagen werden.

Daraufhin kann im Unity-Inspector im Property Drawer des Skripts das jeweilige Wwise-Objekt, welches im Wwise-Editor angelegt ist, ausgewählt werden.

Variable “Play_SFX_Ellen_Run” mit dem gleichnamigen Wwise-Objekt im Property Drawer belegt


Nach der Initialisierung wird die Variable in einer Funktion im Skript aufgerufen. Dabei wird die Variable mit der jeweiligen Wwise-Funktion aufgerufen, wie z.B. “Post()” bei Wwise-Events oder “SetValue()” bei RTPCs, States oder Switches.

Variable “EllenFootsteps” wird mit Wwise-Type “AK.Wwise.Event” initialisiert und in der darauffolgenden Funktion “FootstepWwiseType()” mit der “Post()”-Funktion aufgerufen

Quellen:

[1] https://www.audiokinetic.com/courses/wwise301/?source=wwise301&id=Posting_Events_using_WwiseTypes#read

[2] https://www.audiokinetic.com/courses/wwise301/?source=wwise301&id=Creating_a_WwiseType_Event_property#read

[3] https://www.audiokinetic.com/library/edge/?source=SDK&id=waapi_functions_index.html

[4] https://www.audiokinetic.com/library/edge/?source=Unity&id=annotated.html

Wwise Implementierung in Unity (Teil 3: AkState, AkSwitch)

Bei meinem letzten Blogeintrag habe ich die Wwise-Implementierungsskripte AkInitializer und AkBank, die eine grundlegende Voraussetzung für die Nutzung der Wwise Audio-Engine bilden und das Laden von Soundbanks ermöglichen, beschrieben.

Ein Grundbaustein eines adaptiven Sounddesigns ist das adaptive Verhalten von Sounds, das auf unterschiedliche Gegebenheiten im Spiel reagiert. Dafür gibt es Switches und States, die quasi Zustände repräsentieren und wie Schalter aktiviert werden können. Der Hauptunterschied zwischen Switches und States ist, dass ein Switch jeweils einem einzigen GameObject zugeordnet wird, während States von unterschiedlichen GameObjects aktiviert werden können. Die Nutzung und Konfiguration beider Parameter ist hingegen identisch.

Für das Verändern eines Switches oder eines States gibt es extra dafür vorgefertigte Skripte namens AkSwitch und AkState. In Wwise müssen dafür bereits die unterschiedlichen States bzw. Switches und die State bzw. Switch-Container mit den Audiofiles vorhanden sein, damit man sie in Unity implementieren kann. Ist das gegeben legt man ein AkSwitch- bzw. AkState-Skript auf ein GameObject. In diesen kann man nun über den Unity-Inspector den Switch bzw. State wählen, der aktiviert werden soll.

Auswahl des States im Unity Inspector

Des Weiteren muss noch bestimmt werden, was den Switch bzw. State triggert. Klassischerweise ist es das Betreten oder Verlassen eines Colliders.

Der State wird hier beim Verlassen des Triggers verändert

Hierbei sollte noch ein AkTriggerEnter– bzw. AkTriggerExit-Skript hinzugefügt werden, der spezifiziert, welches GameObject den Trigger auslöst, ansonsten löst jede Kollision mit irgendeinem anderen GameObject den Trigger aus, was in den meisten Fällen nicht gewünscht ist.

AkTriggerExit-Skript mit dem Player als auslösendes GameObject

Quellen:

[1] https://www.audiokinetic.com/library/edge/?source=SDK&id=soundengine_switch.html

[2] https://www.audiokinetic.com/courses/wwise301/?source=wwise301&id=Setting_States_using_the_AkState_Component

Wwise Implementierung in Unity (Teil 2: AkInitializer & AkBank)

Im letzten Blogpost habe ich die für Unity vorgefertigten Skripte AkEvent und AkTriggerEnter beschrieben, die in Kombination für das Auslösen von Wwise-Events genutzt werden. Dieses Mal möchte ich einige grundlegende Skripte zur Nutzung von Wwise vorstellen.

Damit die Unity-Engine allerdings überhaupt erkennt, dass es Wwise als Audio-Engine nutzen soll, muss zunächst Wwise beim Spielstart initialisiert werden. Das wird mit dem Skript AkInitializer realisiert. Hierfür wird ein leeres GameObject benötigt, das beim Starten des Spiels bereits vorhanden ist. Das GameObject wird im Inspector von Unity mit dem AkInitializer-Skript versehen, das automatisch beim Starten des Spiels geladen wird. Während des Spiels sorgt das Skript zusätzlich dafür, dass Frame für Frame Daten an die Wwise-Engine übetragen werden und somit die Kommunikation unter den beiden Engines gewährleistet wird. Das ist eine der Grundvoraussetzungen für die Nutzung von Wwise.

Leeres GameObject (links) mit AkInitializer-Skript (rechts)

Eine mit AkInitializer nah verwandte Funktion von Wwise ist das Laden von sogenannten Soundbanks. Soundbanks sind Audiodaten und Befehle, die während des Spiels in den Arbeitsspeicher geladen werden und somit unmittelbar ohne längeren Wartezeiten abgerufen werden können. Große Spiele arbeiten mit vielen Soundbanks, die abhängig von der Position des Spielers oder anderen Bedingungen einzeln geladen und wieder entladen werden. Das ermöglicht die Realisierung von großen und komplexen Spielwelten auf einem PC oder einer Konsole. Häufig wird vom Entwicklerteam ein Datenmengenlimit vorgegeben, welches das Audio-Team nicht überschreiten darf.

Das Skript für das Laden von Soundbanks heißt AkBank und kann an unterschiedlichen Stellen ausgeführt werden. In der Regel hat man immer eine Soundbank, die beim Starten des Spiels geladen wird. Weitere Soundbanks werden unter anderem geladen, wenn ein neues Gebiet betreten wird. Das Laden einer Soundbank dauert eine Weile, weshalb einige Spiele währenddessen eine Ladesequenz anzeigen. Bei der praktischen Anwendung erfordert das Skript im Unity-Inspector eine Information, wann die Soundbank geladen, wann sie entladen werden soll. Dabei muss auch bestimmt werden, welche Soundbank geladen werden soll. Es gibt noch weitere Optionen, mit welchen sich einstellen lassen, wie dekodiert und wie genau mit den Daten verfahren werden soll. Das hilft beim Datenmanagement und ist vor allem für umfangreiche Spiele mit großen Datenmengen praktisch.

Die Soundbank “Footsteps” wird beim Starten des Spiels geladen und beim Zerstören des GameObjects entladen

Quellen:

[1] https://www.audiokinetic.com/library/edge/?source=Unity&id=class_ak_initializer.html

[2] https://www.audiokinetic.com/library/edge/?source=WwiseFundamentalApproach&id=understanding_soundbanks_understanding_soundbanks