INTERATIVIDADE CINEMATOGRÁFICA NO JOGO TOUR INTERACTION - IESB: Unity3D, microfone e interação do...

34
DANIEL CARDOSO TAVARES INTERATIVIDADE CINEMATOGRÁFICA NO JOGO TOUR INTERACTION - IESB: Unity3D, microfone e interação do público. BRASÍLIA - DF 2013

Transcript of INTERATIVIDADE CINEMATOGRÁFICA NO JOGO TOUR INTERACTION - IESB: Unity3D, microfone e interação do...

DANIEL CARDOSO TAVARES

INTERATIVIDADE CINEMATOGRÁFICA NO JOGO TOUR INTERACTION - IESB:

Unity3D, microfone e interação do público.

BRASÍLIA - DF

2013

DANIEL CARDOSO TAVARES

INTERATIVIDADE CINEMATROGRÁFICA NO JOGO TOUR INTERACTION - IESB:

Unity3D, microfone e interação do público.

Artigo apresentado ao curso de Tecnologia em Jogos

Digitais do IESB, como parte dos requisitos

necessários para obtenção de menção na matéria

Produção de Cenas de Corte, do 5º semestre.

BRASÍLIA – DF

2013

RESUMO

TAVARES, Daniel Cardoso. INTERATIVIDADE CINEMATROGRÁFICA NO JOGO

TOUR INTERACTION - IESB: Unity3D, microfone e interação do público. Brasília:

IESB, 2013.

O artigo “Interatividade cinematográfica no jogo Tour Interaction - IESB: Unity3D,

microfone e interação do público” tem por finalidade mostrar o trabalho de desenvolvimento

de jogo que procure criar experiência cinematográfica interativa. Nele, os espectadores

interagem, por meio do uso de microfone, com o ritmo de reprodução do filme, assim como

com sua tonalidade. O objetivo é demonstrar que a plataforma Unity3D é capaz de dar

interatividade às experiências cinematográficas.

Palavras-chave: Cinema. Jogos Digitais. Filme. Microfone. Programação de Jogos. Público.

ABSTRACT

TAVARES, Daniel Cardoso. Cinematographic interactivity in the game Tour Interaction

- IESB: Unity3D, microphone and audience interaction. Brasília: IESB, 2013.

The article “Cinematographic interactivity in the game Tour Interaction - IESB: Unity3D,

microphone and audience interaction” has the objective of showing the development work of

a game that creates an interactive cinematographic experience. By this game, an audience is

capable of interacting with scenes, using a microphone, modifying the reproduction rhythm of

the movie and its tonality. The main objective is to show that the game engine Unity3D is

capable of creating interactivity in cinematographic experiences.

Palavras-chave: Cinema. Games. Movie. Microphone. Game Programming. Audience.

LISTA DE FIGURAS

Figura 1. Tela de opções ........................................................................................................... 14

Figura 2. Planejamento de filmagem e programação ............................................................... 15

LISTA DE ABREVIATURAS

IESB Instituto de Educação Superior de Brasília

RGB Sistema de cores Red, Green e Blue.

SUMÁRIO

SUMÁRIO ................................................................................................................................. 7

1. INTRODUÇÃO .................................................................................................................... 8

2. A INTERATIVIDADE DOS JOGOS E A CINENATOGRAFIA ................................... 9

3. UM FILME INTERATIVO ................................................................................................. 9

4. A TECNOLOGIA QUE LEVA À INTERATIVIDADE ................................................ 11

5. A PRÁTICA DO DESENVOLVIMENTO DO JOGO ................................................... 13

6. CONCLUSÃO ..................................................................................................................... 16

7. BIBLIOGRAFIA ................................................................................................................ 17

APÊNDICE 1 – CÓDIGOS DE PROGRAMAÇÃO EM C#

(LIGHTCONTROLLER.CS) ................................................................................................ 19

APÊNDICE 2 – CÓDIGOS DE PROGRAMAÇÃO EM C# (MICROFONE.CS)........... 19

APÊNDICE 3 – CÓDIGOS DE PROGRAMAÇÃO EM C#

(SPAWNBYLOUDNESS.CS) ................................................................................................ 20

APÊNDICE 4 – CÓDIGOS DE PROGRAMAÇÃO EM C# (MOVIEPERFORM2.CS) 21

APÊNDICE 5 – ROTEIRO ................................................................................................... 30

8

1. INTRODUÇÃO

Este trabalho tem como inquietação inicial a aparente ausência de interação público-

filme nos cinemas modernos. Mesmo cercadas por tecnologia cada vez mais moderna, que na

prática coloca a cada dia computadores mais potentes (e mais completos) nas mãos de

milhões de milhões de pessoas em todo o mundo, o nível de interatividade nas salas de

cinema é praticamente zero. Os esforços de avanços tecnológicos prometidos para o futuro

focam-se sempre em qualidade de imagens e sons, assim como em riqueza de estímulos,

como a provável inserção de cheiros em salas de cinema, mas nada é falado a respeito de

permitir que o espectador participe ativamente dos filmes apresentados na tela grande.

Tendo esta visão como ponto de partida, surge o questionamento sobre se a indústria

de jogos, com seus recursos tradicionais, pode trazer maior interatividade às salas de cinema,

em especial com o uso da engine de jogos Unity3D. O presente estudo buscará entender, de

maneira prática, por meio da produção de jogo protótipo, o embrião dos recursos e formas que

permitam ao telespectador influenciar o desenrolar das tramas cinematográficas.

Ao longo de todo o desenvolvimento, optou-se por denominar o protótipo como

“jogo”, tendo em vista que ele é desenvolvido com os recursos tradicionais da indústria de

jogos. Contudo, acredita-se que a presença massiva de características cinematográficas,

apenas pontuadas por momentos decisivos onde a interação terá peso crucial (ao menos a

princípio), e a aplicação em salas de cinema fará com que o jogo seja naturalmente entendido

como cinema interativo (ou interatividade cinematográfica).

Os desafios financeiros da produção de filmes de grande porte são conhecidos, por

isso optou-se por aproximação simplista, que gere número limitado de opções.

No capitulo dois, serão exploradas as visões que ligam e separam a interatividade dos

jogos e a experiência cinematográfica. No capítulo três, será feita avaliação de quais

perspectivas do capítulo anterior, somadas às que focam especialmente sobre interatividade

em filmes, serão aplicadas. No capítulo quatro, serão explanados os recursos tecnológicos

utilizados no desenvolvimento do protótipo, com um detalhamento dos desafios encontrados.

Na quinta parte, será feita explanação sobre a forma de aplicação prática dos conceitos na

produção do jogo.

9

2. A INTERATIVIDADE DOS JOGOS E A CINENATOGRAFIA

De acordo com Brandão1, os jogos cinematográficos são aqueles jogos eletrônicos

que trazem em seu ceio aspectos cinematográficos, que foram crescentemente inseridos

conforme a evolução do meio, especialmente a partir de sua quinta geração, com a inserção da

“câmera nos games”2. Os filmes diferenciam-se dos jogos no sentido de exigirem uma postura

lean back, onde o principal fator é a recepção de estímulos por parte do espectador, enquanto

os jogos exigem postura lean forward, que gera capacidade de agência, ou seja: de interação e

controle, que permite a realização de ações que geram resultados significativos.

Tais interações, contudo, na perspectiva de Williams3, são meramente reativos, no

sentido de estarem limitados às opções preestabelecidas determinadas pelos códigos de

programação anteriormente desenvolvidos. Tal característica encaixa-se com a perspectiva de

Oliver Grau4 que afirma que a interatividade é razoavelmente previsível nos jogos.

Deve ser lembrado, porém, que o avanço das técnicas de programação de inteligência

artificial leva a um novo nível de entendimento e prática, que supera a mera reatividade. Este

é o caso da “programação genética”5 [Tradução livre], por exemplo, que leva os

computadores a um nível de inteligência capaz de automaticamente resolverem problemas

(programas que geram programas).6 Aqui, contudo, não serão empreendidos esforços de

programação de qualquer tipo de interação mais elaborada que as reativas.

3. UM FILME INTERATIVO

Neste trabalho, o jogo desenvolvido, denominado “Tour Interaction – IESB”, recorrerá

às duas abordagens (lean forward e lean back) simultaneamente. Nos pontos de decisão, que

são sempre precedidos por trechos de filme, é permitido ao jogador interagir de forma

limitada, escolhendo uma dentre duas opções de direções a serem seguidas. Neste momento, o

jogador está atuando em postura lean forward, interagindo e decidindo o caminho futuro.

1 BRANDÃO, Rodrigo Gomes. Jogos Cinematográficos ou Filmes Interativos? A semiótica e a

interatividade da linguagem cinematográfica nos jogos eletrônicos. SBC – Proceedins of SBGames 2012. Disponível em: < http://sbgames.org/sbgames2012/proceedings/papers/artedesign/AD_Full21.pdf>. Acesso em 02 nov. 2013. 2 Ibidem. p. 1.

3 WILLIAMS. apud ibidem.

4 OLIVER GRAU. apud ibidem.

5 KOZA, John R. et al. Genetic Programming IV: Routine Human-Competitive Machine Intelligence. Estados

Unidos : Kluwer Academic Publishers, 2003. p. 1. 6 Ibidem.

10

Contudo, tendo em mente a predominância do fator cinematográfico, ressalta-se que

não há controle direto da câmera pelo jogador e o movimento, uma vez superado o ponto de

decisão onde se realiza a interação, é sempre adiante em caminho pré-determinado. Sendo

assim, é possível afirmar que se trata de uma experiência também fortemente influenciada

pela postura lean back.

O argumento que sustenta a simultaneidade das duas condições é a possibilidade (não

necessariamente obrigatoriedade, já que não há pausa compulsória no caso de inação) de

alteração do ritmo7 de reprodução do filme (assim como alteração da tonalidade

8) por meio de

dispositivo de recebimento de dados, instalado em computador e recebendo informações

diretamente do jogador. A partir de tal dispositivo interativo, é possível que o jogador

influencie a velocidade de reprodução do filme nos momentos não classificados como pontos

de interação, ou seja: na parte mais duradoura da experiência.

Em termos teóricos, o uso de filmes interativos já foi pensado é delineado por

Nakatsu9 como sendo dividido em três partes:

“(1) Uma história interativa que se desenvolve de forma diferente dependendo da

interação do público.

“(2) Um público que torna-se o principal personagem e experimenta o mundo criado

por uma história interativa.

“(3) Personagens que interagem com o principal personagem (público) na

história.”10

[Tradução livre]

Assim como tendo as seguintes funções:

1 – O uso de computação gráfica para a criação de um mundo de realidade virtual,

percebido pelo público como sendo seu ambiente no momento;

2 – A interação do público, por meio de gestos e fala, com os personagens no espaço

virtual.

Ao observar o presente trabalho de desenvolvimento de jogo, nota-se que há todos os

três pré-requisitos de um filme interativo, a saber: 1 – o personagem principal movimenta-se

de acordo com a interação do público (ou jogador(es)); 2 – o público torna-se o personagem

7 EISENSTEIN, Sergei. A Forma do Filme. Rio de Janeiro:Jorge Zahar Ed., 2002.

8 Ibidem.

9 NAKATSU, Ryohei. TOSA, Naoko. OCHI, Takeshi. Interactive Movie System with Multi-person Participation

and Anytime Interaction Capabilities. Disponível em: <http://www.tosa.media.kyoto-u.ac.jp/en/works2/im/im_thesis1/thesis.html#outline>. Acesso em: 02 nov. 2013. 10

Ibidem.

11

principal por meio da imersão gerada a partir de câmera em primeira pessoa, permitindo que

experimente um diferenciado sentido de realidade; 3 – há pequena interação entres outros

personagens e o personagem principal, apesar de limitado a três momentos onde há pessoas

próximas reagindo, em maior ou menor intensidade, à gravação de suas imagens (vídeos

“Play 4”, “Play 5” e “Play 12”). Este último ponto é tão sutil que deve sustentar-se apenas na

base de não existir indiferença (real, não aparente ou forçada) por parte de quem foi gravado e

tinha consciência disso. Em outros momentos diversos, há pouca profundidade na interação

com os demais personagens filmados (distantes do ponto de gravação ou de costas/sem

perceberem).

Em relação às duas funções reconhecidas pelo autor, contudo, nota-se que os dois

pontos não coincidem de forma plena, mas indireta ou de forma diferenciada, com o jogo

desenvolvido, sendo que não houve a criação de um mundo virtual por meio de computação

gráfica, mas sendo o mundo virtual (no sentido de diferente daquele em que o espectador está)

uma gravação de cenários reais, e havendo pouca opção de desenvolvimento da narrativa por

meio da interação, limitada à escolha de poucas opções de caminhos a serem seguidos e

levando sempre ao mesmo objetivo final, a sala de aula JB8, escolhida por ser o mais novo e

moderno laboratório para o curso de Jogos Digitais (edifício “J”, andar “B”, sala oito no

Campus Edson Machado do (IESB) Instituto de Educação Superior de Brasília - SGAS

Quadra 613/614 – Lotes 97/98 Av. L2 Sul Brasília - DF - CEP: 70.200-730). Tais diferenças

tornam a experiência aqui proposta como uma alternativa inicial ao modelo proposto por

Nakatsu.

4. A TECNOLOGIA QUE LEVA À INTERATIVIDADE

O jogo foi desenvolvido, como é a praxe da área de desenvolvimento de jogos digitais,

por meio de game engine. Game engines são programas desenvolvidos a partir do

entendimento de que não é possível criar jogos do zero a cada novo projeto, devido à

complexidade e aos custos envolvidos. Tais programas criam jogos por meio da separação

entre função e conteúdo. As funções são fixas ou pré-configuradas, enquanto os conteúdos são

flexíveis e dependem dos desenvolvedores e seus recursos. Na definição de Michael Lewis e

Jeffrey Jacobson11

, “as engines de jogo referem-se à coleção de módulos de código de

simulação que não especificam de forma direta o comportamento do jogo (lógica do jogo) ou

11

LEWIS, Michael. JACOBSON, Jeffrey. Games engines: in scientific research. Disponível em: <http://publicvr.info/publications/Lewis2002.pdf>. Acesso em 02 nov. 2013.

12

o ambiente do jogo (informações do nível)”12

[Tradução livre] trazendo, “módulos para lidar

com informações de entrada, saída (renderização 3D, desenho 2D e som) e física/dinâmicas

genéricas para mundos de jogos”13

[Tradução livre]. O processo de desenvolvimento fica,

então na mão dos programadores, game designers e artistas envolvidos na produção14

.

A game engine utilizada para o desenvolvimento do jogo foi a Unity3D, em sua versão

4.2.0f415

edição profissional educativa, disponibilizada pelo IESB em máquina da instituição.

Houve a necessidade de utilização da versão profissional (ou “pro”) já que, devido a

limitações de licença, não é permitida à versão gratuita a inserção de vídeos. Por meio desse

software, foram inseridos os códigos de programação em linguagem C# (vide apêndices) que

permitem que os vídeos rodem no momento certo, que as interações aconteçam e que

dispositivo de microfone receba dados do público a fim de possibilitar a interação com o jogo.

Como dispositivo de entrada de informações, como já referido acima, foi utilizado

microfone genérico. O uso de microfone não foi a escolha inicial do

desenvolvedor/programador, tendo-se em vista que existem dispositivos semelhantes a

controles remotos, conhecidos como “clickers”16

, que trariam resultado mais preciso, mas que

possuem distribuição demorada, por serem importados, e fora dos limites de custo imaginados

para o projeto. Sendo assim, o uso de microfone foi o escolhido pois, diferente de mouses e

teclados, permitem a participação de muitas pessoas ao mesmo tempo.

Existem, contudo, desafios relacionados ao uso de microfones como dispositivos de

entrada de dados: o principal deles é a incerteza a respeito do nível de ruído gerado pelo

público (em quantidade incerta, variando de dois a mais de dez pessoas) em ambientes com

diferente repercussão sonora. Da mesma forma, não existe padrão para ruídos externos

(construções, grupos de pessoas em passagem ou estacionárias etc.), assim como não foi

prevista a reação do captador de som ao ruído gerado por dispositivos de ar condicionado e

projetores de vídeo. Há também possíveis problemas de compatibilidade com o computador

que roda o jogo. Todos esses aspectos devem ser geridos no momento da execução do jogo.

Como forma automática, mas não profundamente pesquisada, de resolução desses

desafios relacionados aos ruídos e volume de captação, foi inserido código de programação

12

Ibidem. 13

Ibidem. 14

Ibidem. 15

Unity – What´s new in Unity 4.2. Disponível em: <http://unity3d.com/unity/whats-new/unity-4.2>. Acesso em: 02 nov. 2013. 16

Audience response – Wikipedia, the free encyclopedia. Disponível em: <http://en.wikipedia.org/wiki/Audience_response>. Acesso em: 02 nov. 2013.

13

que permite um ajuste automático da sensibilidade do captador de som caso sejam

extrapolados os limites mínimos e máximos preestabelecidos. Desta forma, a sensibilidade

aumentará caso os sons sejam pouco presentes e diminuirá com a recorrência de sons

demasiadamente altos.

5. A PRÁTICA DO DESENVOLVIMENTO DO JOGO

Como afirmado anteriormente, alguns momentos do jogo serão de interação no sentido

de modificar a velocidade de reprodução de vídeo e outros a fim de que seja escolhido o

caminho a ser seguido pela câmera. Durante os momentos de reprodução contínua de vídeo,

foi inserido código de programação que altera, de acordo com o nível de som gerado pelo

público (alto, médio ou baixo) os seguintes parâmetros da experiência visual:

Velocidade de reprodução: sons altos levem a reprodução em velocidade três

vezes maior que a original; sons moderados têm reprodução duas vezes o

normal; sons moderados baixos levam a reprodução ao nível normal de

gravação; e sons baixos tocam o vídeo em velocidade três vezes menor que a

original;

A coloração da iluminação ambiente (visualizada como filtro colorido

modificando os parâmetros RGB17

– sistema de cores vermelho, verde e azul -

do vídeo): vermelho com sons altos; branco (ou normal) com sons medianos; e

preto com sons baixos.

17

RGB. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2013. Disponível em: <http://pt.wikipedia.org/w/index.php?title=RGB&oldid=36034422>. Acesso em: 02 nov. 2013.

14

Figura 1. Tela de opções

Nos momentos de decisão, onde é requisitado ao público decidir que direção tomar, os

modificadores de velocidade e coloração são desligados e aparecem na tela setas indicando as

possíveis direções. A seta posicionada acima indica o requisito por maior nível de som para

sua escolha, ficando a opção de baixo com o menor nível de ruído e escolha automática em

caso de silêncio da plateia.

A imagem a seguir (deslocada para a próxima página por precisar ser grande)

representa mostra a relação entre os vídeos produzidos, os pontos de decisão e o espaço do

IESB a ser percorrido no jogo.

15

Figura 2. Planejamento de filmagem e programação

Legenda:

Círculo com borda clara:

início (entrada do IESB).

Círculo com borda

escura: fim (sala JB8).

Triângulos: pontos de

decisão.

Setas azuis: direções do

movimento.

Losangos verdes: nome

do vídeo a ser tocado.

Losangos azuis: vídeo em

loop nos pontos de

decisão.

Losangos laranja:

indicativo de existência

de GUI (graphic user

Interface) com opções de

escolha na forma de setas

vermelhas.

Círculos vermelhos:

indicam se é preciso mais

(+) ou menos (-) ruído

para ir em determinada

direção.

Caixas de borda azul:

comentários.

16

6. CONCLUSÃO

O artigo buscou compreender se era possível o desenvolvimento de experiência

cinematográfica interativa a partir de um jogo digital utilizando como engine a plataforma de

desenvolvimento de jogos Unity 3D.

A primeira etapa do estudo disse respeito ao entendimento das noções de

interatividade proporcionada pelos jogos e a cinematografia. Ali foram estudados os

pensadores que influenciam os parâmetros de estudo que foram utilizados no decorrer do

estudo. Foi constatado que o jogo aqui desenvolvido utiliza uma interatividade que integra os

aspectos de lean forward e lean back. Foi também discutida a questão dos jogos serem

limitados em sua disponibilidade de opções de interação e como isso pode vir a ser superado.

Em seguida, foram levantados os aspectos relacionados à interatividade do filme, a

serem trazidas pelo jogo. Foi mostrada a forma como o jogo oferece possibilidades ao público

de interagir, criando uma experiência cinematográfica nova. Foi mostrado que já existem

estudos sobre o tema, mas que eles têm como foco principal a criação de ambientes virtuais,

diferente do que foi tentado aqui, com o uso exclusivo de imagens reais, na forma de vídeos

alinhados de forma a criar a sensação de continuidade.

Nas duas partes finais, foram mostrados os desafios tecnológicos envolvidos na

produção do jogo. A princípio foi mostrada a engine de jogo utilizada para o

desenvolvimento. Em seguida, foi explanado o motivo pelo qual utilizou-se o microfone

como meio de recepção de dados do público, assim como as limitações envolvidas na escolha.

Por fim, na parte cinco, foram demonstradas as formas escolhidas de interação entre os

usuários (público) e o jogo que, juntas, formam a experiência cinematográfica interativa.

Ao final, compreende-se que a plataforma Unity3D, aliada ao uso de dispositivo de

microfone pode produzir uma experiência cinematográfica interativa, capaz de unir atividade

do público e opções de modificar o curso do filme em exibição, criando interatividade em

experiência cinematográfica. Este estudo, aliado a outros, reforça a possibilidade de um

cinema mais rico em experiências interativas no futuro, com processos que permitam aos

espectadores uma postura lean forward em relação aos filmes, mesmo que apenas em

momentos-chave.

17

7. BIBLIOGRAFIA

Livros

EISENSTEIN, Sergei. A Forma do Filme. Rio de Janeiro : Jorge Zahar Ed., 2002.

KOZA, John R. et al. Genetic Programming IV: Routine Human-Competitive Machine

Intelligence. Estados Unidos : Kluwer Academic Publishers, 2003.

Material online

Audience response – Wikipedia, the free encyclopedia. Disponível em:

<http://en.wikipedia.org/wiki/Audience_response>. Acesso em: 02 nov. 2013.

BRANDÃO, Rodrigo Gomes. Jogos Cinematográficos ou Filmes Interativos? A semiótica

e a interatividade da linguagem cinematográfica nos jogos eletrônicos. SBC –

Proceedings of SBGames 2012. Disponível em: <

http://sbgames.org/sbgames2012/proceedings/papers/artedesign/AD_Full21.pdf>. Acesso em

02 nov. 2013.

LEWIS, Michael. JACOBSON, Jeffrey. Games engines: in scientific research. Disponível

em: <http://publicvr.info/publications/Lewis2002.pdf>. Acesso em 02 nov. 2013.

NAKATSU, Ryohei. TOSA, Naoko. OCHI, Takeshi. Interactive Movie System with Multi-

person Participation and Anytime Interaction Capabilities. Disponível em:

<http://www.tosa.media.kyoto-u.ac.jp/en/works2/im/im_thesis1/thesis.html#outline>. Acesso

em: 02 nov. 2013.

RGB. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2013.

Disponível em: <http://pt.wikipedia.org/w/index.php?title=RGB&oldid=36034422>. Acesso

em: 02 nov. 2013.

18

Unity – What´s new in Unity 4.2. Disponível em: <http://unity3d.com/unity/whats-

new/unity-4.2>. Acesso em: 02 nov. 2013.

19

APÊNDICE 1 – CÓDIGOS DE PROGRAMAÇÃO EM C# (LIGHTCONTROLLER.CS)

using UnityEngine;

using System.Collections;

public class LightController : MonoBehaviour

{

public GameObject audioInputObject;

void Start ()

{ }

void Update ()

{

if(MoviePerform2.iteration != 13 && MoviePerform2.iteration != 14 && MoviePerform2.iteration != 15 && MoviePerform2.iteration != 16 && MoviePerform2.iteration != 17)

{

if(SpawnByLoudness.checkedLoudness > 8) {

light.color = Color.red;

} if(SpawnByLoudness.checkedLoudness <= 8 && SpawnByLoudness.checkedLoudness > 0.3f)

{

light.color = Color.white; }

if(SpawnByLoudness.checkedLoudness <= 0.3f)

{ light.color = Color.black;

}

} else

{

light.color = Color.white; }

}

}

APÊNDICE 2 – CÓDIGOS DE PROGRAMAÇÃO EM C# (MICROFONE.CS)

using UnityEngine; using System.Collections;

[RequireComponent(typeof(AudioSource))] public class Microfone : MonoBehaviour {

public float sensitivity = 100;

public float loudness = 0; public float timeBeforeNewSensitivity = 0.5f;

void Start() {

audio.clip = Microphone.Start(null, true, 10, 44100);

audio.loop = true; // Set the AudioClip to loop audio.mute = true; // Mute the sound, we don't want the player to hear it

while (!(Microphone.GetPosition(null) > 0)){} // Wait until the recording has started

audio.Play(); // Play the audio source! }

void Update() {

loudness = GetAveragedVolume() * sensitivity;

StartCoroutine(CoroutineLoudnessAdapter()); }

IEnumerator CoroutineLoudnessAdapter()

{

if(loudness >= 10f) {

sensitivity -= 1f;

yield return new WaitForSeconds(timeBeforeNewSensitivity);

20

} if(loudness <= 0.2f)

{

sensitivity += 1f; yield return new WaitForSeconds(timeBeforeNewSensitivity);

}

if(sensitivity <= 99f)

{

sensitivity = 100f; }

if(sensitivity >= 200f)

{ sensitivity = 200f;

}

}

float GetAveragedVolume()

{ float[] data = new float[1024];

float a = 0;

audio.GetOutputData(data,0); foreach(float s in data)

{

a += Mathf.Abs(s); }

return a/1024;

} }

APÊNDICE 3 – CÓDIGOS DE PROGRAMAÇÃO EM C# (SPAWNBYLOUDNESS.CS)

using UnityEngine;

using System.Collections;

public class SpawnByLoudness : MonoBehaviour {

public GameObject audioInputObject;

public float threshold = 1.0f;

public float checkingWait; Microfone micIn;

public GUIStyle guiMeasurement;

float loudness = 0;

public static float checkedLoudness = 0; bool checking = true;

float updatedTimeScale = 0;

public float thresholdMedium = 0.5f;

public float thresholdHigh = 2.0f;

Microfone scriptMicrofone;

void Start() {

micIn = (Microfone) audioInputObject.GetComponent("Microfone");

scriptMicrofone = GetComponent<Microfone>(); }

void Update () {

loudness= micIn.loudness;

// if(checkedLoudness< thresholdMedium)

// {

// Time.timeScale = 0.5f; // }

// if (checkedLoudness >= thresholdMedium && checkedLoudness < thresholdHigh)

// { // Time.timeScale = 1.0f;

// }

21

// if (checkedLoudness >= thresholdHigh) // {

// Time.timeScale = 1.5f;

// } }

IEnumerator checkingLag() {

if(checking)

{ checking = false;

yield return new WaitForSeconds(checkingWait);

checking = true; checkedLoudness = loudness;

if(checkedLoudness > 12)

{ checkedLoudness = 12;

}

updatedTimeScale = Time.timeScale; }

}

void OnGUI()

{

StartCoroutine(checkingLag()); GUI.Box (new Rect(10, Screen.height - 10, 30, -1 * (checkedLoudness * 50)), "", guiMeasurement);

GUI.Label(new Rect(10, Screen.height - 20, 50, 25), checkedLoudness.ToString());

GUI.Label(new Rect(100, Screen.height - 20, 200, 25), "Sensitivity: " + scriptMicrofone.sensitivity.ToString()); }

}

APÊNDICE 4 – CÓDIGOS DE PROGRAMAÇÃO EM C# (MOVIEPERFORM2.CS)

using UnityEngine;

using System.Collections;

public class MoviePerform2 : MonoBehaviour {

public GUIStyle guiInstructions1;

public GUIStyle guiInstructions2; public GUIStyle guiInstructions3;

public GUIStyle guiInstructions4;

public string textToShow = ""; public string textToShow2 = "";

public string textToShow3 = "";

public string textToShow4 = ""; bool showInstructions = true;

public GameObject audioInputObject; public MovieTexture[] play;

public Texture2D textureUp; public Texture2D textureLeft;

public Texture2D textureRight;

public int lowPlace = 0;

public int highPlace = -200;

public int instructionsTime = 10;

public static int iteration = 1; public static float movieLenght = 0f;

public float loudnessThreshold = 5.0f;

public float timeToWait = 2f; int repetitionA = 0;

int repetitionB = 0;

bool waitingA = true; bool waitingB = true;

int round = 0;

int screenshotNumber = 1; bool canTakeShot = true;

22

Microfone scriptMicrofone;

void Start ()

{ scriptMicrofone = GetComponent<Microfone>();

audio.clip = play[1].audioClip;

}

void Update ()

{ LoudnessChecker();

IterationChecker();

if(Input.GetKey(KeyCode.F12))

{

StartCoroutine(CoroutineScreenshot()); }

}

IEnumerator CoroutineScreenshot()

{

if(canTakeShot) {

canTakeShot = false;

Application.CaptureScreenshot("Screenshot" + screenshotNumber + ".jpg"); yield return new WaitForSeconds(2);

screenshotNumber++;

canTakeShot = true; }

}

void LoudnessChecker()

{

if(iteration != 13 && iteration != 14 && iteration != 15 && iteration != 16 && iteration != 17)

{

if(SpawnByLoudness.checkedLoudness > 8)

{ audio.pitch = 3.0f;

} if(SpawnByLoudness.checkedLoudness <= 8f && SpawnByLoudness.checkedLoudness > 5.0f)

{

audio.pitch = 2.0f; }

if(SpawnByLoudness.checkedLoudness <= 5f && SpawnByLoudness.checkedLoudness > 0.3f)

{ audio.pitch = 1.0f;

}

if(SpawnByLoudness.checkedLoudness <= 0.3f) {

audio.pitch = 0.3f;

} }

}

void IterationChecker()

{

switch(iteration) {

case 0:

break; case 1:

if(round == 0)

{ round++;

gameObject.renderer.material.mainTexture = play[iteration];

audio.pitch = 1.0f;

play[iteration].loop = false;

play[iteration].Play ();

audio.Play ();

}

if(!play[iteration].isPlaying)

{

play[iteration].Stop(); audio.Stop();

23

Debug.Log ("Stoped Playing! " + play[iteration].ToString());

round = 0;

iteration = 17; }

break;

case 2: if(round == 0)

{

round++; gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f;

play[iteration].loop = false;

play[iteration].Play (); audio.Play ();

}

if(!play[iteration].isPlaying )

{

play[iteration].Stop(); audio.Stop();

Debug.Log ("Stoped Playing! " + play[iteration].ToString());

round = 0;

iteration = 16; }

break;

case 3: if(round == 0)

{

round++;

gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f;

play[iteration].loop = false; play[iteration].Play ();

audio.Play ();

}

if(!play[iteration].isPlaying )

{ play[iteration].Stop();

audio.Stop();

Debug.Log ("Stoped Playing! " + play[iteration].ToString());

round = 0; iteration = 17;

}

break;

case 4:

if(round == 0) {

round++;

gameObject.renderer.material.mainTexture = play[iteration]; audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f; play[iteration].loop = false;

play[iteration].Play ();

audio.Play (); }

if(!play[iteration].isPlaying )

{

play[iteration].Stop();

audio.Stop();

Debug.Log ("Stoped Playing! " + play[iteration].ToString());

round = 0;

24

iteration = 15; }

break;

case 5: if(round == 0)

{

round++; gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f;

play[iteration].loop = false;

play[iteration].Play (); audio.Play ();

}

if(!play[iteration].isPlaying )

{

play[iteration].Stop(); audio.Stop();

Debug.Log ("Stoped Playing! " + play[iteration].ToString());

round = 0;

iteration = 15; }

break;

case 6: if(round == 0)

{

round++;

gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f;

play[iteration].loop = false; play[iteration].Play ();

audio.Play (); }

if(!play[iteration].isPlaying ) {

play[iteration].Stop();

audio.Stop();

Debug.Log ("Stoped Playing! " + play[iteration].ToString());

round = 0;

iteration = 15;

}

break;

case 7: if(round == 0)

{

round++;

gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f;

play[iteration].loop = false; play[iteration].Play ();

audio.Play ();

}

if(!play[iteration].isPlaying )

{

play[iteration].Stop();

audio.Stop();

Debug.Log ("Stoped Playing! " + play[iteration].ToString());

round = 0; iteration = 14;

25

}

break;

case 8: if(round == 0)

{

round++;

gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f;

play[iteration].loop = false; play[iteration].Play ();

audio.Play ();

}

if(!play[iteration].isPlaying )

{ play[iteration].Stop();

audio.Stop();

Debug.Log ("Stoped Playing! " + play[iteration].ToString());

round = 0; iteration = 13;

}

break; case 9:

break;

case 10: if(round == 0)

{

round++;

gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f; play[iteration].loop = false;

play[iteration].Play ();

audio.Play (); }

break;

case 11: if(round == 0)

{

round++;

gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f;

play[iteration].loop = false; play[iteration].Play ();

audio.Play ();

}

if(!play[iteration].isPlaying )

{ play[iteration].Stop();

audio.Stop();

Debug.Log ("Stoped Playing! " + play[iteration].ToString());

round = 0; iteration = 14;

}

break;

case 12:

if(round == 0)

{ round++;

gameObject.renderer.material.mainTexture = play[iteration]; audio.clip = play[iteration].audioClip;

26

audio.pitch = 1.0f;

play[iteration].loop = false;

play[iteration].Play (); audio.Play ();

}

if(!play[iteration].isPlaying )

{

play[iteration].Stop(); audio.Stop();

Debug.Log ("Stoped Playing! " + play[iteration].ToString());

round = 0;

iteration = 13; }

break;

case 13:

if(!play[iteration].isPlaying)

{ gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f;

play[iteration].loop = true;

play[iteration].Play (); audio.Play ();

}

break; case 14:

if(!play[iteration].isPlaying)

{

gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f; play[iteration].loop = true;

play[iteration].Play ();

audio.Play (); }

break;

case 15:

if(!play[iteration].isPlaying)

{ gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f;

play[iteration].loop = true;

play[iteration].Play (); audio.Play ();

}

break; case 16:

if(!play[iteration].isPlaying) {

gameObject.renderer.material.mainTexture = play[iteration];

audio.clip = play[iteration].audioClip;

audio.pitch = 1.0f;

play[iteration].loop = true; play[iteration].Play ();

audio.Play ();

}

break;

case 17:

if(!play[iteration].isPlaying)

{

gameObject.renderer.material.mainTexture = play[iteration]; audio.clip = play[iteration].audioClip;

27

audio.pitch = 1.0f;

play[iteration].loop = true;

play[iteration].Play (); audio.Play ();

}

break; case 18:

break;

case 19: break;

case 20:

break; case 21:

break;

} }

void CheckPointReached(int number) {

if(number == 1)

{ iteration++;

}

if(number == 0) {

iteration--;

} }

void OnGUI() {

switch(iteration)

{

case 0:

break;

case 1: break;

case 2: break;

case 3:

break; case 4:

break;

case 5: break;

case 6:

break; case 7:

break;

case 8: break;

case 9:

break; case 10:

break;

case 11: break;

case 12:

break; case 13:

GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + highPlace, 100, 100),

textureRight, ScaleMode.ScaleToFit, true, 1.0f); GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + lowPlace, 100, 200),

textureUp, ScaleMode.ScaleToFit, true, 1.0f);

GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 + 150, 100 ,25), "Option Hard: " +

repetitionA.ToString());

GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 +180, 100 ,25), "Option Easy: " +

repetitionB.ToString());

if(SpawnByLoudness.checkedLoudness > loudnessThreshold) {

StartCoroutine(CoroutineWaiterA());

if(repetitionA == 4) {

28

play[iteration].Stop(); audio.Stop();

iteration = 11;

repetitionA = 0; repetitionB = 0;

} }

if(SpawnByLoudness.checkedLoudness <= loudnessThreshold)

{ StartCoroutine(CoroutineWaiterB());

if(repetitionB == 4)

{ play[iteration].Stop();

audio.Stop();

iteration = 10; repetitionA = 0;

repetitionB = 0;

} }

break;

case 14: GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + highPlace, 100, 100),

textureRight, ScaleMode.ScaleToFit, true, 1.0f);

GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + lowPlace, 100, 200), textureLeft, ScaleMode.ScaleToFit, true, 1.0f);

GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 + 150, 100 ,25), "Option Hard: " + repetitionA.ToString());

GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 +180, 100 ,25), "Option Easy: " +

repetitionB.ToString());

if(SpawnByLoudness.checkedLoudness > loudnessThreshold)

{

StartCoroutine(CoroutineWaiterA());

if(repetitionA == 4)

{ play[iteration].Stop();

audio.Stop(); iteration = 12;

repetitionA = 0;

repetitionB = 0;

}

} if(SpawnByLoudness.checkedLoudness <= loudnessThreshold)

{

StartCoroutine(CoroutineWaiterB()); if(repetitionB == 4)

{

play[iteration].Stop(); audio.Stop();

iteration = 8;

repetitionA = 0; repetitionB = 0;

}

} break;

case 15:

GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + highPlace, 100, 100), textureLeft, ScaleMode.ScaleToFit, true, 1.0f);

GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + lowPlace, 100, 200),

textureUp, ScaleMode.ScaleToFit, true, 1.0f);

GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 + 150, 100 ,25), "Option Hard: " +

repetitionA.ToString()); GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 +180, 100 ,25), "Option Easy: " +

repetitionB.ToString());

if(SpawnByLoudness.checkedLoudness > loudnessThreshold)

{

StartCoroutine(CoroutineWaiterA()); if(repetitionA == 4)

{

play[iteration].Stop(); audio.Stop();

29

iteration = 6; repetitionA = 0;

repetitionB = 0;

}

}

if(SpawnByLoudness.checkedLoudness <= loudnessThreshold) {

StartCoroutine(CoroutineWaiterB());

if(repetitionB == 4) {

play[iteration].Stop();

audio.Stop(); iteration = 7;

repetitionA = 0;

repetitionB = 0; }

}

break; case 16:

GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + highPlace, 100, 100),

textureUp, ScaleMode.ScaleToFit, true, 1.0f); GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + lowPlace, 100, 200),

textureRight, ScaleMode.ScaleToFit, true, 1.0f);

GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 + 150, 100 ,25), "Option Hard: " +

repetitionA.ToString());

GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 +180, 100 ,25), "Option Easy: " + repetitionB.ToString());

if(SpawnByLoudness.checkedLoudness > loudnessThreshold) {

StartCoroutine(CoroutineWaiterA());

if(repetitionA == 4)

{

play[iteration].Stop();

audio.Stop(); iteration = 3;

repetitionA = 0; repetitionB = 0;

} }

if(SpawnByLoudness.checkedLoudness <= loudnessThreshold)

{ StartCoroutine(CoroutineWaiterB());

if(repetitionB == 4)

{ play[iteration].Stop();

audio.Stop();

iteration = 5; repetitionA = 0;

repetitionB = 0;

} }

break;

case 17: GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + lowPlace, 100, 100),

textureUp, ScaleMode.ScaleToFit, true, 1.0f);

GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + highPlace, 100, 200), textureRight, ScaleMode.ScaleToFit, true, 1.0f);

GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 + 150, 100 ,25), "Option Hard: " + repetitionA.ToString());

GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 +180, 100 ,25), "Option Easy: " +

repetitionB.ToString());

if(SpawnByLoudness.checkedLoudness > loudnessThreshold)

{

StartCoroutine(CoroutineWaiterA());

if(repetitionA == 4)

{ play[iteration].Stop();

audio.Stop();

iteration = 2; repetitionA = 0;

30

repetitionB = 0;

}

} if(SpawnByLoudness.checkedLoudness <= loudnessThreshold)

{

StartCoroutine(CoroutineWaiterB()); if(repetitionB == 4)

{

play[iteration].Stop(); audio.Stop();

iteration = 4;

repetitionA = 0; repetitionB = 0;

}

} break;

default:

break; }

if(Time.time < 10f) {

GUI.Label(new Rect(Screen.width/2 - 25, 0, 50, 300), textToShow, guiInstructions1);

GUI.Label(new Rect(Screen.width/2 - 150, 200, 300, 30), textToShow2, guiInstructions2); GUI.Label(new Rect(Screen.width/2 - 250, 250, 500, 30), textToShow3, guiInstructions3);

GUI.Label(new Rect(Screen.width/2 - 150, 300, 300, 30), textToShow4, guiInstructions4);

} if(iteration == 10 && !play[iteration].isPlaying)

{

GUI.Label(new Rect(Screen.width/2 - 150, 300, 300, 30), textToShow4, guiInstructions2); }

}

IEnumerator CoroutineWaiterA()

{

if(waitingA) {

waitingA = false; repetitionA++;

yield return new WaitForSeconds(timeToWait);

waitingA = true; }

}

IEnumerator CoroutineWaiterB()

{

if(waitingB) {

waitingB = false;

repetitionB++; yield return new WaitForSeconds(timeToWait);

waitingB = true;

} }

}

APÊNDICE 5 – ROTEIRO

EXT. ENTRADA IESB. DIA

Caminhada em velocidade moderada até final da passarela coberta.

Em todos os vídeos: câmera em primeira pessoa.

Virada para frente, com olhar para a direita (obra) no meio do percurso.

31

EXT. FIM DA PASSARELA. DIA

Vídeo de "idle" (termo comum de jogos para "esperando").

Câmera olhando para frente.

EXT. CAMINHADA ATÉ SALA DE MAGIC. DIA

Caminhada até sala de Magic (sala que deveria ser ocupada por loja, mas ociosa e com

presença de cadeiras. Tradicional local de encontro para jogadores de Magic (cartas)).

Câmera olhando para frente, evitando visualização da lanchonete. Foco nas cadeiras e,

ao sentar, evitar visualização do ambiente externo.

INT. SALA DE MAGIC. DIA

Vídeo de "idle".

Câmera olhando para parede.

INT. CAMINHADA DE VOLTA ATé FIM DA PASSARELA

Caminhada de volta até a posição "fim da passarela".

Câmera olha para baixo.

EXT. FIM DA PASSARELA. DIA

Caminhada até entrada do bloco H.

EX. SALA DE MAGIC. DIA

Caminhada até entrada do bloco H.

EXT. BLOCO H. DIA

32

Vídeo de idle.

Câmera olha para lado esquerdo e volta a visão de frente.

INT. BLOCO H. DIA

Caminhada até interior do banheiro dos professores (masculino). Câmera olha para

pia. Retorno pelo mesmo caminho até a entrada do bloco H.

EXT. BLOCO H. DIA

Caminhata até encruzilhada bloco I.

INT. ENCRUZILHADA BLOCO I. DIA

Câmera entra no bloco I. Olha para o corredor à direita e sobe as escadas caminhando

até o ponto em que os blocos I e J são divididos. Visualização do bebedouro.

INT. ENCRUZILHADA BLOCO I. DIA

Câmera caminha até o bloco D. Percorre o corredor até o

final (cruza com mulher no caminho), sobe as escadas e retorna pelo corredor. Sai do

bloco D e caminha pela passarela até o bloco C. Dirigi-se até o bloco I/J e vai para o ponto

onde os dois dividem-se. Foco final no bebedouro.

INT. BLOCO I/J. DIA

Câmera percorre caminho até encruzilhada do bloco I, passando pela passarela entre

os blocos C e D e descendo pela escada do bloco D. Passa pela parte de fora da escada

(próxima ao bloco D) e caminha até ponto final.

INT. BLOCO I/J. DIA

33

Câmera caminha até a sala JB8. Olha para os lados no meio do caminho, nas portas.

Abre a porta da sala JB8, entra e ssenta-se em computador na primeira fileira. Termina

olhando para o quadro.