The Adventures Of Detective BaoBao

Av Eirin Sognnes og Markus Løland

Det siste året har vore prega av store framsteg innan kunstig intelligens. Plutseleg kunne alle skape avanserte kunstverk med berre nokre tastetrykk. Då DALL·E 2 blei tilgjengeleg i lukka beta, sat vi oss ned for å utforske moglegheitene som denne nye og spennande teknologien kunne gi oss som utviklarar. Raskt byrja vi å tenke på spelutvikling, særleg peik-og-klikk-spel.

 

Då vi hadde laga ein prototype til spelet, var vi så fornøgde med resultata at vi bestemte oss for å sende inn eit forslag til konferansen Booster i Bergen. Til vår store glede blei presentasjonen akseptert, og vi fekk mogelegheita til å dele vår erfaring med eit publikum av likesinna.

Om du er nysgjerrig på korleis det gjekk, sjå linken nederst i innlegget.

Vår veg til å skape eit spel med generativ AI

Generativ AI er ei grein av kunstig intelligens som kan skape nye og originale data. DALL·E 2 er eit døme på ein generativ AI-modell som kan lage nye bilde frå eit tekst-pompt. For å lage eit bilde med DALL·E 2 skriv ein inn ein tekst-prompt, til dømes "eit hus", og får ut eit unikt bilde basert på teksten. Det finst òg fleire modellar enn DALL·E 2, slik som for eksempel Stable Diffusion og Midjourney. ChatGPT er eit anna eksempel på generativ AI, men medan DALL·E 2 lagar bilde, lagar ChatGPT tekst. 

Vi brukte både DALL·E 2 og ChatGPT då vi utforska moglegheitene generativ AI kan gi oss. For å lage alle bilda og grafikken i spelet, brukte vi DALL·E 2 og Leonardo AI, medan vi brukte ChatGPT til å generere historia og teksten i spelet. Begge desse teknologiane har vist seg å vere svært nyttige og har opna opp nye kreative moglegheiter for oss.

Då vi starta prosjektet hadde vi nokre idear til kva vi skulle lage. Vi ville for eksempel bruke ein detektivpanda som hovudkarakter  (Detective BaoBao), og vi ville lage eit puzzle-spel. Handlinga i spelet skulle skje i eit gammalt herskapshus, der BaoBao går gjennom alle romma på jakt etter hint for å løyse eit mysterium.

Bilde 1: Opningsscenen til spelet

Frå tekst-prompt til ferdig scene

For å illustrere prosessen med å lage ulike bilde til spelet, kan vi sjå nærmare på soverommet i herskapshuset. Ved første augekast kan det sjå ut som det er enkelt å lage. Kanskje ser det ut som vi fant det perfekte tekst-promptet for å få ut scena akkurat slik vi ville. I realiteten var prosessen for å skape scenene alt anna enn enkel. Berre for å lage soverommet brukte vi fleire dagar. Det tok mange forsøk for å få eitt bilde vi likte, men sjølv då var det mykje arbeid igjen. Bildet var ikkje stort nok, så det måtte utvidast, og i tillegg redigerte vi det ganske mykje for å få på plass detaljar og interaktive element. For å redigere og utvide bilda brukte vi verktøy tilgjengelige saman med modellane, men vi gjorde også endringar i andre bilderedigeringsverktøy, for eksempel til å beskjære eller flytte rundt på gjenstandar i scenene. 

Bilde 2: Soverommet generert av DALL·E 2. Her er det brukt redigeringsverktøy for å fjerne element i bildet som vi ikkje ønska å ha i det ferdige bildet.

Bilde 2 viser vårt beste forsøk på å lage eit utgangspunkt for soverommet. Det hadde nokre forstyrrande element som vi redigerte vekk, men elles var grunnlaget for å lage ei bra soveromsscene på plass. Dessverre var bildet ganske lite, og det var få klikkbare element vi kunne bruke. Dermed bestemte vi oss for å utvide bildet. Både DALL·E 2 og Leonardo AI (ein teneste som let oss bruke Stable Diffusion modellar) har støtte for det, og vi kunne utvide bildet samtidig som vi beheldt stilen og perspektivet. Vi enda opp med å utvide bildet seks gongar for å få det slik vi ønska (bilde 6).

Bilde 3: Utvida bilde: Bildet etter å ha utvida det til å bli passe størrelse for ei scene. Her er det også gjort endringar. Legg for eksempel merke til at golvet har blitt rutete.

Vi var fortsatt ikkje fornøgd med korleis pandaen (Detective BaoBao) såg ut, og heller ikkje med kvaliteten på bildet. For å få ein konsistent representasjon av BaoBao i ulike scener, bestemte vi oss for å trene ein eigen modell for å generere pandaer i frakk og hatt. I Leonardo AI så fins det ein funksjon for å trene modellar basert på Stable Diffusion. Bilde 4 viser GUI-et der man kan sette opp modellen sin. For å trene ein spesialisert modell, så må ein også ha eit datasett å trene på. I vårt tilfelle brukte vi eit utvalg genererte bilde av BaoBao som vi var fornøgd med. Då vi hadde trent modellen ferdig, kunne vi enten generere nye versjonar av BaoBao og klippe han inn i scenene, eller så kunne vi skrive prompta våre slik at vi genererte scener med BaoBao i. Vi enda opp med å gjere litt av begge. På soverommet valde vi å klippe han inn.

Bilde 4: GUI for å trene eigne modellar i Leonardo AI. Her kan ein velje kva modell ein skal basere seg på, oppløysing på bilda, og kva prompt som skal gjere at modellen genererer eit bilde basert på treningsdataen. For eksempel brukte vi promptet “BaoBao” for å generere bilde av pandaen i frakk og hatt.

Leonardo AI har også ein funksjon for å oppskalere bilde. Oppskaleringa i Leonardo bruker tekst-promptet og det originale bildet for å auke kvaliteten på bildet. Det gjer at oppskaleringa har litt kreativ frihet, som igjen fører til at det kan dukke opp nye gjenstandar i bildet, eller at eksisterande element kan endre seg. Stort sett er det ein fordel, då det kan reparere problem i det originale bildet. Vi brukte oppskaleringa til å auke kvaliteten på soverommet. Bilde 3 viser soverommet før oppskalering, medan bilde 5 viser resultatet etter oppskaleringa. Med litt meir redigering og nokre tilpassingar for å lage betre interaktive element til peik-og-klikk spelet, så enda vi opp med bilde 6, som er den endelege scena for soverommet.

 

Bilde 5: Soverommet etter å ha blitt oppskalert i Leonardo AI. Fleire gjenstandar har endra seg. For eksmepel har dragestatuen frå venstre side blitt bytta ut med oransje behaldarar. Krukkedekorasjonen over senga har blitt ein ape og det har dukka opp fleire nye detaljar i bildet.

Bilde 6: Den ferdige scena for soverommet i spelet vårt. Her har vi lagt til skrift på den blå dagboka, lagt til eit nøkkelhol på skuffen, og vi har fjerna apen over og gjenstandane i senga.

ChatGPT - verktøyet som endra måten vi laga historia på

Medan vi jobba med prosjektet lanserte OpenAI ChatGPT. ChatGPT er ein språkmodell som er trent til å forstå og generere svar på ein måte som liknar menneskeleg samtale. Når du skriv inn ei melding til ChatGPT, analyserer den kva du har skrive og prøver å generere eit svar som gir meining i samanheng med samtalen. Dette kan den gjere fordi den har lært seg å gjenkjenne mønster i språket og å gjere kvalifiserte gjettingar basert på konteksten i samtalen.

Sidan vi jobba med praktisk bruk av kunstig intelligens, var det vanskelig å la vere å teste ut det siste og beste innan generativ AI. Hadde vi hatt meir tid, så kunne vi prøvd å lage koden til spelet i ChatGPT òg, men vi nøgde oss med å lage teksten og historia til spelet. 

Ganske kjapt fant vi ut at ChatGPT hadde blitt trent på lite tekst frå peik-og-klikk spel. Det tok oss mange forsøk før vi endeleg fekk teksten på eit brukbart format, men sjølv då var det vanskeleg å lage tekst som både ga meining og som passa inn i spelet. Vi gjekk gjennom store mengder tekst av typen du ser på bildet under, før vi fekk noko vi kunne bruke.

Om vi blei for kritiske til forslaga frå ChatGPT så fekk vi også grei beskjed:

Det er altså ikkje berre menneske som går lei av dårlege ordspel.

Etter mykje hardt arbeid og litt krangling med ChatGPT, så klarte vi til slutt å nekke koden og få ut den perfekte teksten, og resten er historie - eller i det minste historia til spelet vårt.

Lær av våre feil - tips og triks når du skal generere bilde

Å lære seg kunsten å generere bilde ved hjelp av AI kan vere utfordrande. Det må meir til enn å berre skrive det du vil sjå på bildet. Det er her prompt engineering kjem inn. Dette er ein prosess der du optimaliserer input-teksten for å oppnå best mulig resultat. Å finne riktig detaljnivå, eller å forandre på rekkefølga i teksten kan gjere  store forskjellar. For eksempel kan det hjelpe å flytte detaljar du vil ha vektlagt til starten av promptet, eller å skrive dei fleire gongar. 

Eit eksempel på korleis detaljar og utfyllande prompt kan gi vidt forskjellige resultat ser du på bilda under. Der skreiv vi “a house” i promptet på venstre side. Då vi fekk eit bilde av eit hus, men det var, naturleg nok, ikkje akkurat det huset vi såg for oss då vi skreiv promptet. For å forbetre dette, så skreiv vi “a house by a waterfall, red light, midnight, red moon and intense crimson red flashing lightning, winter”, som gir eit mykje meir detaljert bilde som også sannsynligvis er nærare intensjonen bak promptet. Å gå frå det første bildet til det siste tok ein del meir enn to forsøk, men det illustrerer poenget bak prompt engineering.

Men sjølv med nok detaljar og beskrivingar, kan det vere vanskeleg å oppnå det perfekte bildet, spesielt om ein vil ha eit bestemt kunstnerisk uttrykk. Heldigvis finst det fleire teknikkar ein kan bruke for å forbetre resultata. Ein effektiv måte å skape eit bilde i ein bestemt stil, er å velje ut bestemte kunstnarar som representerer ulike stilartar og bruke deira stil til å skape ditt eige bilde. Til dømes kan du skrive Wassily Kandinsky for å skape eit abstrakt kunstverk, eller Claude Monet for å skape eit maleri i hans ikoniske stil. I tillegg til dette, så kan du kombinere ulike stilar, for eksempel Monet og Kandinsky, i eitt og same prompt. Då vil du få ut eit bilde med Kandinsky sin abstrakte stil i kombinasjon med Monet sin impresjonisme.

 

Men det er ikkje berre promptet som kan forbetrast. Ved hjelp av redigeringsverktøy eller teikneverktøy, kan ein enkelt legge til nye detaljar til eit bilde. For eksempel kan ein leggje til ein kvit hatt på eit bilde av ein katt. Det kan ein gjere ved å lage ei enkel skisse av hatten, og deretter bruke AI-modellane til å generere variasjonar av bildet med skissa. Det gir eit nytt og unikt bilde av ein katt med hatt, der hatten ser ut som ein organisk del av det bildet. Med litt betre tegneferdigheter enn det vi har, kan ein lage gode skisser som gjer det endå enklare å få generert det ein ser for seg.

 

Det finnast også nokre triks for å lage bilde med høg kvalitet. Desse kallar ein gjerne for magic words. Det er ord som i seg sjølv ikkje eigentleg har noko med bildet å gjere, men som kan gi høgare kvalitet på bildet. Så om du er fornøgd med innhaldet i bildet, men skulle ønske kvaliteten er betre, kan du prøve å skrive f.eks. professional, high quality, photorealistic, HD, ultra detailed, sharp focus, eller lignande. Akkurat kva magic words som fungerer vil variere frå modell til modell, avhengig av korleis dei har vore trena.

Kva er framtida for generativ AI?

Prosjektet vårt er sannsynligvis ikkje eit typisk eksempel på praktisk bruk av kunstig intelligens. Vi gjorde eit poeng ut av å la mest mulig vere AI-generert. All grafikken i spelet er lagd av AI, teksten er lagd av AI, til og med musikken er AI-generert. I eit meir realistisk eksempel ville ein sannsynligvis brukt teknologien mykje meir med måte.

Det er selvfølgelig vanskeleg å spå framtida, men vi trur framtida for generativ AI er nyansert. Vi ser for oss at det vil gi stor nytteverdi for visualisering og prototyping av idear, men at det kanskje ikkje er like effektivt for å lage komplette løysingar. Noko anna vi merka etter kvart som vi hadde jobba ein del med AI-bilde, er at spesialiserte modeller som regel gir betre resultat enn generelle modeller. Vi trur altså at framtida er modellar som er spissa mot spesifikke bruksområde, i staden for modellar som prøver å gjere alt. Som sagt er det vanskeleg å spå framtida, men noko som er ganske sikkert, er at dersom utviklinga fortset som den har gjort det siste året, kjem det til å bli eit veldig nyttig verktøy i mange samanhengar.

Prøv sjølv!

Om du er nysgjerrig på korleis det gjekk, kan du prøve spelet her: adventures-of-baobao.kraftlauget.no

Presentasjonen vår frå Booster kan du sjå via BoosterConf sitt program for 2023 

 
Forrige
Forrige

Velkommen til oss Ahl👋

Neste
Neste

Grattis med UX sertifisering, Cathrine🥳