Pavement Radio is a generative virtual simulation based on West African oral traditions and folktales. Oral communication before the invention of writing systems was the primary channel for transmitting ancestral cultural traditions, folktales of divinity and moral values through the generations in West Africa. This piece was created in the Unity3D game engine and performed in G05 to utilise the capabilities of real time storytelling and animation made with code.
produced by: Karen Okpoti
“When Griots die, they are not just buried in the ground like any normal man, that would be burying history and knowledge. Instead they are buried in the sacred baobab tree. We must ask our ancestors to protect the baobab.”
The conceptual idea for this project came from the old west African folktale about how stories came into the world. Anansi 'The Spider Trickster' completed challenges imposed by the SkyGod Nyame who held all the stories in the world captive. Through completion of the SkyGod's challenges, Anansi was rewarded with a golden box of stories holding all the wisdom in the world, which he spread across the village. This simulation follows a modern day griot (storyteller), who navigates around her city to find these stories and recites these folkales to her 12 year old niece Clara.
Links to project
Wetransfer link to FInal Project file - https://we.tl/t-7j8rfJC1qt
Link to full video - https://youtu.be/WiaEPcWE7qs
The origins of griots dates from the epic of Sundiata Keita who saved his people heroically and founded the Mali empire. During this time, Griots were a present each king gave his successor. Their main role for the aristocracy was to be an oral historian who recorded and recalled legacies of kings and their kingdoms.
Why are generative stories important?
This project focused particularly on generative storytelling because generally after research and the process of creation, artists often know the ins and outs of their work and lack the element of surprise. Therefore, the idea of generative systems intrigued me. I create the system however, I do not know what outcomes the system will produce, so I become the creator and the viewer. I was also intrigued by the idea of autopoetic systems, which are systems that reproduce themselves from within themselves, this can be likened to celled organisms which are self sufficient.
Inspirations and influences
The biggest artist influence for this work was Ian cheng's Missionary virtual simulation. Cheng utilized a video-game engine to create live simulations of imagined societies. A young girl tries to convince the inhabitants in this village to flee the mountainside. The story unfolds itself completely differently in every iteration.
The aesthetic of Pavement Radio is much like my other works which utilises very highly saturated colour values. This piece in particular has an ever evolving colour palette which changes based on the part of the story that is being told.
The interaction in this project is between the autonomous agent and her environment. I set up the griot character as a nav mesh agent which is usually used as an NPC in games. This allowed more control of the character in the scene. As the griot reaches different points or fulfills different requirements in the behaviour tree she moves on to the next set of decisions, She is also interacting with the other NPCs in the scene for example, through collisions. I set up a nav mesh surface across the whole terrain so that the griot could move around the scene freely. There are cameras embedded within the scene which are triggered based on the griots action and show different parts of the scenes.The distance between the griot and tseveral poins around the scene were measured to determine where her task had been completed or not.
The AI system I used to control the griots behavior were behaviour trees which are popular for NPCs in video games. I found this to be the easiest system to use for generative decision making and for controlling game logic. I generated 5 behaviour tree scripts BT1,BT2,BT5,BT8 and End choice animation. The other behaviour trees included in the project would have been used if all 12 stories were included. However I did not use BT3,BT4,BT6,BT7,BT9,B10.BT11,BT12 so I only had 4 African folktales.The griot starts with BT1 activated and when the task for choosing the type of stories are finished she moves on to behavior tree 2. She then has 4 options to choose from in behaviour tree 5, and 8 to continue the rest of the specific story chosen. The sequence nodes are displayed as a series of functions which correspond to the specific branch chosen in the behaviour tree.
BT1 -> BT2 -> BT5 -> BT8 - > End choice animation
Shader Code - I didn't want the procedural shader look to be too obvious but to be embedded in different scenes in an organic way. For example in the outro scene I used a plane with a dissolve shader as material for the and used sine waves in the code with the specific reference to change the noise strength of a dissolved shader to create the effect of rain.
Post-processing effects - I manipulated in code the properties of the post processing volume profile such as post exposure and saturation in order to create different visual effects.
Triggering and activating objects - Activating game objects based on either boolean conditions or distance to player was common in this simulation as it was a way not to clutter up or have to many objects in the scene.
Changing 3D animations - I needed 3D animations to showcase the different actions the griot was doing. This was all also controlled in the behaviour tree with the use of booleans as different animations were activated or deactivated based on what the griot was doing.
Teleporting objects - I split up separate buildings and rooms in tthe scene into different sections. This meant that if the griot reached different portal trigger positions she was able to teleport to a different point which was all also controlled in the behavior tree code. I also follwed a tutorial to created portals which showed camera footage from a different part of the scene.
Name generator and NPC’s in scene- This was not used for the rendered version in the exhibition but worked perfectly as each NPC character in the scene was given a random first and last name during each game play. I created a way point system which meant that when each NPC was instantiated in the scene they had to follow a particular route of waypoints.
Traffic system - Again for the traffic system I created two waypoint driving systems. The cars continuously followed their waypoints and if they were within a certain distance of the griot the cars would disappear and then reappear when the distance value was above the threshold.
3D environment - I created most of the 3D environment in blender using 2D images as planes and then extruding these planes to create the appearance of a real house.
Cinemachine Cameras - I used the cinemachine tool which is perfect for real time film as virtual cameras can be created and placed in different parts of the scene and can be controlled to follow specific points in the scene. I activated the virtual camera in the scene either to look at the griot but not follow or to follow the griot.
Scene transitions - All scene transitions were triggered by scene control code and coroutines. When a specific amount of time had passed in the coroutine or a specific condition was fulfilled the next scene was triggered to move gameplay along.
Audio - All audio was edited in Ableton and audacity, and any samples used were from freesoung.org.
Self evaluation / Future development
In the end, I was fairly satisfied with the outcome of this project as it was a great indication for me about the type of work I want to make in the future which is Experimental computational film and audiovisual storytelling. Although this project did not turn out exactly how I wanted it to, I was still pleased with the fact that I now have a starting point for creating real time films with game engines such as unity. This project improved my skill sets in unity specifically with AI coding, finite state machines, gameplay logic and behaviour trees, NPC behaviour, nav mesh agents, shadergraph. and manipulating post processing effects directly in code.
In terms of further improvement and things that did not work quite so well, I was quite disappointed because for the final show, I was only able to get one version with complete audio narration for all 5 days of the exhibition. Nearing the dates of the exhibition I realised I would not be able to get all 4 versions to the quality necessary for the show. Therefore, I decided to focus on one version with full narrated audio and visuals, which turned out to be the correct decision.
Line renderer - https://www.youtube.com/watch?v=RMM3BAick4I&t=180s
Line renderer - https://www.youtube.com/watch?v=SY2npMqaOpc
Screen walker test - https://docs.unity3d.com/ScriptReference/Camera.WorldToScreenPoint.html?_gl=1*ztbkwh*_ga*MjAxMDc5MzE0LjE2MTU4MjU1ODI.*_ga_1S78EFL1W5*MTYyNjYzNjYyOS4yMC4wLjE2MjY2MzY2MjkuNjA.&_ga=2.237915462.730607725.1626625827-201079314.1615825582 - screen walker test
Flickering light for introduction scene - https://www.youtube.com/watch?v=iCCFPOdUaNI&t=224s
Change post processing effets https://forum.unity.com/threads/urp-volume-cs-how-to-access-the-override-settings-at-runtime-via-script.813093/
Access post processing override settingshttps://forum.unity.com/threads/urp-volume-cs-how-to-access-the-override-settings-at-runtime-via-script.813093/
Text mesh pro type writing effecthttps://www.youtube.com/watch?v=-KqcvX1bE4E&t=416s
Building a behaviour tree - https://hub.packtpub.com/building-your-own-basic-behavior-tree-tutorial/
Name generator script - https://forum.unity.com/threads/would-love-a-bit-of-help-creating-a-name-generator.517108/
Bird flocking cotrols - https://learn.unity.com/tutorial/flocking?uv=2019.4&courseId=5dd851beedbc2a1bf7b72bed&projectId=5e0bb649edbc2a00260e5de3
WayPoints mover - https://learn.unity.com/tutorial/waypoints?uv=2019.4&courseId=5dd851beedbc2a1bf7b72bed&projectId=5e0b6dd4edbc2a00200e3641
Find the closest option - https://forum.unity.com/threads/clean-est-way-to-find-nearest-object-of-many-c.44315/
Rotate object back and forthhttps://answers.unity.com/questions/1126169/how-to-rotate-object-back-and-forth-from-one-rotat.html
Create a portalhttps://www.youtube.com/watch?v=cuQao3hEKfs
Text mesh pro - https://learn.unity.com/tutorial/working-with-textmesh-pro#5f86410eedbc2a00249a4928
Name generator - https://forum.unity.com/threads/would-love-a-bit-of-help-creating-a-name-generator.517108/
Sequences - https://forum.unity.com/threads/the-best-way-of-executing-sequences.416731/
Dissolve Shader - https://www.youtube.com/watch?v=taMp1g1pBeE&t=84s
Tiling and offset - https://www.youtube.com/watch?v=AzDl3oOtbQM
Change the texture via script - https://www.youtube.com/watch?v=OakD6vLj4uo
Anansi and Turtle folktales - http://www.nigeriannation.com/Explore/Nigeria/FolkTales/AnansiAndTheTurtle.asp
Thunder and Anansi - https://www.heritage-history.com/index.php?c=read&author=barker&book=folktales&story=thunder
Anansi And The Witch- http://www.manteno.k12.il.us/webquest/elementary/LanguageArts/Anasi/anansitrickster.
History of Folktales - https://www.amplifyafrica.org/post/once-upon-a-time-in-africa-the-history-of-african-folklore
Why Spider's Webs are on the ceiling - http://anansistories.com/Bro_Death.html - Anansi and...or, "
Why the hippos live in water - https://www.worldoftales.com/African_folktales/Nigerian_folktale_22.html#gsc.tab=0
Why the sun and moon live in the skyhttps://www.worldoftales.com/African_folktales/Nigerian_folktale_16.html#gsc.tab=0
Why worms are blind and elephants ave small eyes - https://www.worldoftales.com/African_folktales/Nigerian_folktale_14.html#gsc.tab=0
Why the moon waxes an wanes and why it dissappearshttps://www.worldoftales.com/African_folktales/Nigerian_folktale_26.html#gsc.tab=0
Why ants carry big bundle - https://www.heritage-history.com/index.php?c=read&author=barker&book=folktales&story=bundles - why ant carry big bundle
Why you should work hard to earn - https://briefly.co.za/48017-15-african-folktales-morals.html
Clever Jackal Gets Away Read more: https://briefly.co.za/48017-15-african-folktales-morals.html
African Folktales - https://www.worldoftales.com/Nigerian_folktales.html#gsc.tab=0