echotope Templates

Download voorbeeld uitwerkingen voor de echotope Virtual & Augmented Accoustics systemen bij HKU.

Deze zijn gericht op gebruikers die de omgevingen (zoals Unreal, Unity, Touch Designer, etc.) al goed genoeg kennen om met het voorbeeld uit de voeten te kunnen, en maken een directe mapping op een specifiek echotope protocol versie (deze zit in de naam, controleer of de template up-to-date is voordat je in de werkplaatsen aan de slag gaat).

Als je een verouderde template zelf kan updaten, dan ontvangen we die update ook graag!

We ontwikkelen momenteel nog aan Unity & Isadora. Heb je nog wensen voor specifieke templates, of heb je er zelf eentje uitgewerkt? Laat het weten!

Download hier de laatste versie van de echotope Templates

echotope met TouchDesigner

Overzicht

Er zijn een drie-tal COMPs gebouwd die voor elk van de soorten objecten waar echotope op gericht is zijn uitgewerkt: Sources, Rooms & Acoustics.

td_echotope_1.png

Elke COMP richt zich op één van deze, dus als je meerdere sources, rooms of acoustics wilt aanspreken, moet je ze dupliceren en de output ook weer routen zoals de voorbeelden. Er is één va_osc_out DAT die de data van de CHOPs ontvangt, en het systeem instuurt. Dat kan je ook anders aanpakken met eigen OSC Outs.

Je zal het Network Address en Port van de server moeten aanpassen zodat de informatie kan aankomen.
td_echotope_2.png

Als je de Room / Source / Acoustic COMP selecteert kan je via de Parameters direct waardes aanpassen die On Value Change worden doorgestuurd naar het systeem. De aangeraden workflow is om de rest van je TouchDesigner werk op deze parameters in te haken.

td_echotope_3.png

De COMPs meer in detail

Als je de COMPs open doet dan kan je zien hoe ze zijn opgebouwd. In essentie zijn het grotendeel Constant CHOPs (met uitzondering van wat invul-velden & de MUTE knop), die de waardes outputten. Deze zijn in groepjes verdeeld omdat niet alle waardes dezelve range hebben (0-100%, of -90 tot +90 graden, etc.)

td_echotope_4.png

Vanaf hier worden ze naar een rename node gestuurd, die op basis van de ID en type (room/acoustic/source) uitzoekt wat het OSC Adres van het berichtje moet zijn zodat het echotope systeem snapt wat het ermee moet doen. Hier kan je meer te weten komen over OSC: OSC Open Sound Control | HKU Bookstack

td_echotope_5.png

De MUTE is een soortgelijke setup, maar dan met een knop. En de Preset is apart uitgewerkt met een CHOP Execute en praat direct met de va_osc_out DAT in de parent layer. Dit kan je terugvinden in de scripts door deze te openen met de edit knop.

echotope met Unreal Engine

De Unreal Engine template is specifiek gemaakt in versie 5.7.4, maar zou ook moeten werken in nieuwere 5.7 varianten, en wellicht ook wel in nieuwere 5.x varianten. In oudere versies gaat het importeren van de Blueprints wel goed, maar zijn de Maps leeg / corrupt.

Import & Check

  1. Zorg dat je een bestaand Unreal project hebt, of maak een nieuw project aan in de juiste versie.
  2. Pak de template ZIP file uit zodat de VA_Sample folder in de Content folder van je project zit ([PROJECT_FOLDER]/Content/VA_Sample)

Vervolgens zou je 4 maps moeten hebben in de VA_Sample folder, en een aantal extra mappen.

ue5_echotope_1.png

Elke Map bevat een klein voorbeeldje wat gemaakt is met Blueprints die je kunt vinden in de Blueprints folder.

Als je de 4 Maps (hier rechts zichtbaar) niet kunt zien, of niet kan openen (of ze zijn leeg), dan is de Unreal Versie wellicht niet compatible, of is er iets fout gegaan bij het uitpakken.

De overige mappen zijn:

Workflow

De manier waarop je dit in je eigen Maps kan integreren, is door de VA_OSC Blueprint in je scene te plaatsen, en dan in je eigen Blueprints (of door gebruik te maken van een van de voorbeelden) functies van VA_OSC aanroept om informatie naar echotope te sturen.

Zorg ervoor dat de juiste Send IP & Send Port van het echotope systeem zijn ingevuld. Je kan hier ook een Receive Port instellen (de Receive IP moet meestal 0.0.0.0 blijven) om ook dingen te kunnen ontvangen, en die berichten worden dan geprint op het scherm (bijv. om te testen of je wel de juiste informatie stuurt)

ue5_echotope_2.png

Om echt effectief te kunnen werken met echotope zal je wel wat kennis moeten hebben van Blueprints, dus overweeg daar ook wat starter-tutorials voor te bekijken. Hier zijn enorm veel bronnen vool, die ook constant veranderen, dus voegen we hier niet allemaal in. Hier is een voorbeeld van een preview van een uitgewerkte Udemy course (Blueprints for Beginners in Unreal Engine 5.6 - Learn Blueprints in 30 Minutes).

VA_OSC Functies

De VA_OSC Blueprint bevat functies die met het echotope systeem praten. Deze zijn opgedeeld zodat het zo makkelijk mogelijk wordt om specifieke dingen te doen: enkele waardes aanpassen (Set...Setting), alle waardes aanpassen (Set...Settings), mute/unmute (Mute...), & preset switching (Set...Preset). Zie het echotope protocol voor meer informatie over wat elke parameter precies doet met het geluid / systeem.

De Helpers worden de andere categorieën gebruikt. Als je precies wil weten wat er gebeurd kan je elke functie openen en kijken hoe deze is uitgewerkt.

ue5_echotope_6.png

Voorbeeld Maps

FollowObjectSample

Deze Map is een voorbeeld van hoe je een object de richting waar een Source / Room / Accoustic vandaan komt kan bepalen. Dit bestaat dus uit een AccousticTargetPanner, die in het midden van de Map staat, en een ControllableSphere die je met instelbare toetsen kunt besturen om het te testen. Dit kan natuurlijk ook een object zijn dat op basis van andere informatie beweegt (zoals gameplay!)

ue5_echotope_3.png

Het TargetObject is waar naar gekeken wordt. De Spread waarde bepaald hoe breed het geluid moet zijn (dit is een specifieke echotope parameter), de ID is de identifier van de source / room / accoustic. De OSCClient is de VA_OSC blueprint in de scene (zodat de communicatie kan plaatsvinden). Distance bepaald hoe ver weg het geluid moet klinken (dat is momenteel in echotope 1.6 nog niet actief, en staat dus nog op 0). En de Type kan "room", "accoustic" of "source" zijn zodat het Blueprint Script (FollowTargetPanner) weet wat voor soort bericht het moet sturen.

Je kan de FollowTargetPanner blueprint openen, en van links naar rechts de Event Tick volgen om dit te bevestigen.

ue5_echotope_5-1.pngRekent de richting uit waar het TargetObject is in polar coordinates waar echotope mee werkt.

ue5_echotope_5-2.png
Voert een ander pad uit op basis van het geluidstype dat we aansturen (source / accoustic / room).

ue5_echotope_5-3.pngStuurt de relevante waardes voor het Room-pad door, door de functies van de VA_OSC Blueprint aan te roepen. De overige paden zijn zeer vergelijkbaar.

ManualPresetSwitch

Deze Map is een heel simpele opzet, waarmee via de PresetSwitcher Blueprint specifieke knoppen kunnen worden gekoppeld aan een preset waarde.

Hieronder zie je de PresetSwitcher in de Outliner geselecteerd, en daaronder zichtbaar de VA_OSC instance die is gelinked. Overige informatie is de ID (welke source / accoustic / room spreken we aan?), Muted (moet je het horen ja/nee?), en de InputMap die een knop koppeld aan een preset nummer (1-15). Dit is nu een directe mapping van de knoppen 1-5, naar de presets 1-5. Als laatste is er nog de Type waarde die bepaald wat er wordt aangesproken (source / accoustic / room). 

ue5_echotope_7.png

Als je de PresetSwitcher Blueprint opent kan je dit ook bevestigen:

ue5_echotope_8-1.png
Gaat door elke knop/preset koppeling in de InputMap heen, en kijkt of deze knoppen nu net zijn ingedrukt door de speler (index: 0). Zo ja: stuurt dit via VA_OSC functies door naar echotope voor de relevante types (room / accoustic)

ue5_echotope_8-2.png
Kijkt of de M toets is ingedrukt, en zo ja zet het de Mute functie aan/uit voor de relevante Type (room/accoustic). Hiervoor gebruikt het wederom VA_OSC functies.

SourceSettingContinuesSample

Deze Map doet eigenlijk wat er in de ietwat lange naam al wordt geïnsinueerd: stuurt continu de settings van een source aan.

Dit gebeurd via de SourceSetter blueprint, die maar 3 variabelen bevat:

  1. VA OSC: de VA_OSC instance om de informatie te kunnen sturen
  2. Source ID: de ID van de source die we aanpassen in het echotype systeem
  3. Source Settings: een verwijzing naar een Data Asset waar de op te sturen settings in staan.

ue5_echotope_9.png

De situatie waar dit voor bedacht is, is als je vanuit de Data Asset live wilt kunnen editen, en deze waardes wil opslaan tussen speelsessies. Op die manier kan je bijv. makkelijk eigen presets maken, door die Data Asset vervolgens te dupliceren en een herkenbare naam te geven.

Als je de Blueprint van de SourceSetter opent kan je dit gedrag bevestigen:

ue5_echotope_10.png
Stelt elke Tick de Source Settings in op de Source met ID "Source ID", via een functie van VA_OSC

 

TriggerSample

Deze Map bevat een vier-tal doorzichte kubussen die een Preset instellen op een room, accoustic of source wanneer je met een object (in dit geval de speler) binnen het volume van de kubus terecht komt. Dit kan je bevestigen door er in Play-mode doorheen te vliegen. De kubussen printen dan "BUMP" op het scherm.

ue5_echotope_11.png

Dit voorbeeld is gericht op een veel voorkomende situatie in games: dat je op het moment van verplaatsing naar een specifiek gebied iets wilt laten gebeuren. In het geval van dit systeem: de akoestiek veranderen (bijvoorbeeld binnen/buiten, verschillende soorten omgevingen, etc.)

De Blueprint bevat variabelen voor de VA_OSC instance, het Type (room, accoustic, source), de ID van de room/accoustic/source, en naar welke Preset (1-15) er moet worden gewisseld (zie het echotope protocol voor meer informatie over wat elke preset voorstelt).

Als je de Blueprint opent kan je dit gedrag ook bevestigen:

ue5_echotope_12.png
Als er een andere Actor overlapt met dit object: voor het relevante type stelt het de ingestelde Preset in via een functie van VA_OSC.

Om te zorgen dat Actors elkaar kunnen overlappen moeten er wel twee zaken samenkomen:

  1. Het object moet een component hebben dat collision toestaat (bijv. de StaticMeshComponent van de kubussen)
  2. De "Collision Preset" instellingen moeten zo ingesteld staan dat er een OverlapEvent wordt uitgevoerd. In dit geval: 
    1. Generate Overlap Events AAN
    2. Collision Presets: OverlapAll

Het object dat naar binnen vliegt moet mogelijk ook Collision hebben. Dat is in dit geval de "SimplePawn" Blueprint in de VA_Sample/Blueprints map, die via de "MyGameMode" wordt ingesteld als "Default Pawn Class" (waar je mee begint te spelen als je op Play drukt)