Isto não é um Blog
Introdução
Se você está visitando este blog pela primeira vez, pode ser interessante ler
os posts em ordem cronólogica, já que eles possuem uma seqüência bem definida.
Para auxiliar o leitor novato, coloquei no link abaixo uma versão
do blog ordenada da mais antiga mensagem para a mais nova. Divirta-se!
Blog em ordem cronológica
Dia 16
Quando eu penso em criar um mundo, a primeira coisa que me
vem à cabeça é sempre o Tolkien, afinal foi dele a descrição
mais completa de um universo fictício. Por outro lado, quando
eu penso em uma história que sofre do problema inverso,
ou seja, falta de planejamento, aí não dá pra deixar Star Wars de lado.
Não me levem a mal, eu gosto de Star Wars. Mas, considerando a quantidade
de contradições nos filmes, percebe-se claramente que a história
foi sendo escrita enquanto os filmes iam saindo. Um exemplo simples é
o Darth Vader, que no primeiro filme foi a pessoa que matou o pai do Luke,
enquanto que no segundo era o próprio pai do Luke. É claro que sempre tem
uma explicação (no caso, Obi-Wan estava mentindo), mas são explicações criadas
a posteriori para que a saga faça sentido.
E, além do problema com o roteiro, Star Wars ainda sofre de um problema
comercial. Aparentemente, o George Lucas acredita que crianças não
gostam de épicos complexos, e de uns tempos pra cá vem sempre colocando
elementos demasiadamente infantis para agradar uma faixa maior de público.
No Retorno de Jedi, temos os Ewoks, que pelo menos são meigos e dão bons
bichos de pelúcia. No Episódio 1, temos os Gungans, que nem pra bichos de
pelúcia servem. Na verdade, Gungans são tão inúteis, que se eu fosse um
caçador de recompensas, sairia por aí estrangulando alguns deles para extrair
a pele impermeável e fazer guarda-chuvas, sucesso de vendas em Kamino.

Mesmo com os furos na história, Star Wars ainda é uma saga com muitas
qualidades. Em especial, o nível de detalhe técnico em que o universo
é apresentado. A LucasArts tem uma grande equipe de biólogos que percorrem
o mundo tirando fotos de animais pouco convencionais, para depois adaptar
suas características em alguns dos aliens do filme. Um exemplo pode ser
visto nos próprios Gungans, que possuem uma pigmentação peculiar em sua pele,
formando listras sem padrão aparente.
Na vida real, a formação de listras tem origem no momento que as
as células-tronco começam a se diferenciar para formar células de pele.
Por algum motivo, algumas delas podem falhar na produção de alguma
proteína, como a melanina, e se reproduzir com a falha. O processo
de migração durante o desenvolvimento do feto acaba gerando as listras
e manchas características de cada animal.
E, é claro, se queremos criar um mundo que seja pelo menos tão complexo
como Star Wars, então a pigmentação dos animais desse mundo tem que ser
simulada também. Em última instância, os habitantes do mundo irão usar
peles de animais que tem as pigmentações que iremos gerar.
Computacionalmente, tudo se passa como se as enzimas inibitórias
e excitatórias tivessem uma direção preferencial durante a migração.
Baseado nessa idéia, podemos criar uma matriz de convolução com
essas direções, e iterar um automato celular em cima de ruído branco.
O fonte matlab abaixo mostra como isso pode ser feito:
function c=pigmento(s,size);
c=rand(size);
for i=1:6,
c=conv2(c,s,'same');
end;
c=interp2(c,3);
|
Após apenas seis iterações com a matriz s=(0 2 −1.2; −1.2 1 −0.4; −2 1 1), obtemos o padrão abaixo. Note que é bastante
similar a padrões de pigmentos da vida real!

E uma vez com o padrão de pigmentação pronto, você pode criar seus
próprios animais e vestimentas, sendo capaz até mesmo de criar um guarda-chuva
com pele de Gungan!

No próximo update: linguística! E até lá espero ter acabado também um sistema
de comentários, para todos possam deixar suas opiniões.
Dia 13
Felizmente, a recepção ao blog foi boa. Um dos retornos que recebi
dizia "Você me fez pensar em como as formigas andam"! Eu achei ótimo,
é claro, a proposta desse blog é fazer as pessoas pensarem.
Outro feedback, do acidx,
comentava que existem, sim, pessoas que vivem exclusivamente em regiões
montanhosas. E ele ainda citou um exemplo recente: o Bin Laden. Mas convenhamos,
embora um pequeno grupo até consiga viver de carne de bode, para comportar
uma civilização inteira você precisa ter agricultura. E a primeira chuva
que caísse na sua plantação em terreno íngreme levaria embora todas as sementes
que você plantou!
E, incidentalmente, isso nos leva à resposta da pergunta que eu
deixei no post anterior: para criar regiões planas, basta adicionar
erosão no modelo!
E como simular erosão computacionalmente? A maneira mais simples
é supor que o terreno é formado de um material bem macio, de modo
que uma chuva qualquer leve embora a terra, fazendo com que ela
se deposite nas depressões do terreno. É intuitivo que a terra
dos picos montanhosos vai rolar pra baixo com mais facilidade,
então a simulação só precisa procurar os picos e aplainá-los.
Procurar os picos é simples: basta calcular o gradiente do terreno
e procurar pelos vetores nulos, eles indicam máximos e mínimos da função.
Mas o terreno é discreto, e não contínuo, portanto zeros não vão surgir.
A maneira então é utilizar um autômato celular para encontrar os picos.
Sempre que um dado ponto do terreno for maior que todos os seus vizinhos,
a matéria neste ponto é removida e espalhada por igual para todos
os lados (satisfazendo assim a conservação de massa, Lavoisier ficaria
feliz com isso).
O fonte matlab abaixo mostra como a função foi feita, os shifts são
rotações simples da matriz:
function hh=erosao(h,nivel);
hh=h;
for i=1:nivel,
c=(hh>shiftr(hh)).*(hh>shiftl(hh));
c=c.*(hh>shiftu(hh)).*(hh>shiftd(hh));
hx=hh.*c.*0.01;
hh=hh-hx+(shiftr(hx)+shiftl(hx)+shiftu(hx)+shiftd(hx))/4;
end
|
Para testar o modelo, inicialmente criei um terreno simples com o método Perlin
que citei no post anterior, mas utilizando harmônicos de baixa freqüência, para
que o terreno representasse uma área pequena. As imagens abaixo mostram o
terreno original, o modelo erodido após 3000 iterações, e o resultado após
10000 iterações.



Como esperado, a rotina gerou as superfícies planas que eu queria. Mas não
resolveu todos os meus problemas, já que ele gerou planaltos, mas nenhuma
planície! Isso acontece pelo modelo de erosão: estou supondo simplesmente
erosão por chuva, quando na verdade planícies surgiriam de erosão por efeito de maré.
Mas este blog não é só sobre geração de terrenos, então vamos a uma pausa
temporária e depois voltamos a esse assunto. Na próxima atualização: biologia e
moda! E se alguém quiser fazer algum comentário enquanto eu não implemento
um sistema online, sintam-se à vontade para mandar um email
(ricbit@700km.com.br), ou então
uma mensagem no ICQ, pelo meu UIN 61392017.
Dia 12
Bem vindos!
Um bom início de blog deveria ter uma apresentação de quem é o autor.
Mas isto não é um blog, ou pelo menos não é um blog convencional, e, como
tal, não terá um início convencional. Sobre mim, basta a descrição
que uma amiga fez outro dia: "Esse é o Ricardo. Ele gosta de pingüins."
O resto vocês aprendem com o tempo.
Mas se o blog não começa com o autor, começa com o quê? Na minha opinião,
os melhores blogs são os temáticos, que focam em um único assunto, e, dia
a dia, tentam explorá-lo com mais profundidade. Para mim, escolher um único
assunto é difícil, considerando a quantidade de coisas que gosto. Por isso,
resolvi usar este blog para realizar um de meus antigos sonhos: escrever
um livro.
E que tipo de livro será esse? Meus livros preferidos sempre foram
os épicos: Senhor dos Anéis, Fundação, Duna (talvez porque grandes doses
de Kirby fluem por meu sangue). Em comum, essas séries têm um universo
coeso onde se desenrola a história, e que muitas vezes tem papel maior
que os próprios personagens.
Veja o exemplo do Tolkien: antes de escrever o Senhor dos Anéis, foram
mais de 30 anos desenvolvendo a Terra-Média, Valinor, Númenor e outros.
E isso pode ser visto com clareza nos livros, pela riqueza de detalhes
em todos os aspectos de desenvolvimento, seja nos hábitos de cada raça,
em sua linguagem, seu aspecto e assim por diante.
Mas, se o Tolkien tinha 30 anos para desenvolver seu mundo, eu não tenho.
Afinal, não trabalho exclusivamente com literatura e não posso dedicar
o resto da minha vida para isso. Concluí-se então que jamais conseguirei
fazer algo tão grande quanto o Senhor dos Anéis? Não! Pois eu tenho
uma habilidade que o Tolkien não tinha: sei programar computadores!
E, com isso, todo o trabalho de criar um mundo coeso pode ser relegado à maquina.
Deixemos que o computador crie os ambientes, os povos, as guerras.
Como dizia Hari Seldon com sua psico-história: "Não é possível prever
o comportamento de uma única pessoa, mas posso prever o comportamento das massas."
De maneira análoga, deixo para o computador o comportamento da massas,
e ao escritor resta apenas controlar os poucos personagens que protagonizarão
os livros.
E por onde começar? Desenvolvo primeiro os povos? As linguas que eles falam?
O estilo de roupas que usam? Os animais que vivem em suas terras? Não há uma
resposta certa, por isso arbitrariamente escolhi começar pela geografia do mundo.
O precedente histórico é relevante: muito da sociedade é moldada pelo local
onde vive. A antiga Iugoslávia, por exemplo, é cercada por uma série de montanhas,
muito difíceis de serem transpostas. Como a comunicação entre tribos era
prejudicada, acabou-se formando micro-sociedades independentes. Ou seja,
boa parte da diversidade cultural da região tem origem no terreno. Outro
exemplo é o Japão: uma ilha isolada do continente, e que acabou formando
costumes totalmente diferentes dos povos que viviam ligados por terra.
E no mundo fictício não é diferente. Meu exemplo preferido de como
a geografia é importante para uma história vem novamente do Senhor dos Anéis.
Quando escreveu o Hobbit, Tolkien ainda não tinha dado importância suficiente
à criação do mapa. Por isso, a trajetória de Bilbo é uma linha reta
onde os obstáculos são colocados de acordo com a necessidade da
história (agora ele precisa passar por um rio... agora vai atravessar uma caverna...
agora eu quero colocar uma floresta... e assim por diante). A trajetória
do Bilbo pode ser vista no mapa abaixo como a seta vermelha.

Já no Senhor dos Anéis, Tolkien tinha mais experiência e fez a coisa com
mais cuidado. Na verdade, boa parte da tensão no segundo livro vem de um dilema
geográfico. A Sociedade precisa chegar a Mordor, do outro lado de uma cordilheira.
Mas como atravessá-la? Tentaram por cima (seta azul), e não conseguiram devido às fortes
nevascas (que Gandalf não podia neutralizar sem usar magias que revelariam
sua posição a Saruman). Dar a volta pelo norte demoraria demais, e, portanto seria arriscado.
Pelo sul (seta verde), seria ainda mais arriscado, pois teria que passar
ao lado de Orthanc, fortaleza do inimigo. Daí a única solução é ir por dentro
das minas de Moria, mesmo sabendo que lá habita um terror invencível.
Conferida então a importância da geografia, vamos à criação!
Quando eu penso em criação automática de terrenos, a primeira coisa
que me vem à cabeça é o meu encontro com Ken Perlin,
um americano que
foi o criador do conceito de hipertexturas, e que vocês provavelmente
conhecem como o programador dos efeitos especiais do filme Tron. Perdemos
uma manhã conversando sobre qual é o melhor método para modelar o movimento
das pernas de um formiga, realisticamente, em 3D (isso é típico de programadores
quando se encontram, conversar sobre coisas absolutamente bizarras).
E, entre uma formiga e outra, eu acabei aprendendo o método do Ruído Perlin.
A teoria é bastante simples. Ruídos tracicionais tem muito pouco controle.
Você pode determinar a largura de autocorrelação do ruído, sua amplitude,
a distribuição de probabilidade, e não muito mais que isso. Já os Ruídos
Perlin tem mais flexibilidade, com aplicação direta deles você pode
criar texturas de mármore, de madeira, e até mesmo... terrenos!
Para criar o Ruído Perlin, basta somar uma série de ruídos tradicionais,
a cada iteração aumentando a freqüência e dimunuindo a amplitude dos ruídos.
Controlando a taxa de variação da freqüência e amplitude, você parametriza
seu ruído de acordo com o resultado que gostaria de obter. No meu caso,
utilizei uma fonte de ruídos 2D, como pode ser visto no fonte matlab abaixo.
function y=perlin (n,level);
size=floor(log2(n));
y=zeros(n);
for i=level:size,
r=randn(2^i)./(2^i);
y=y+interpft(interpft(r',n)',n);
end
|
A utilização imediata da função acima gera um relevo com partes acima do mar
e subaquáticas. Fazendo um corte ao nível do mar, conseguimos as curvas de nível:

O relevo obtido lembra muito um rio que passa pelo meio de montanhas.
Renderizando o Ruído Perlin como um mapa de alturas, e utilizando um
pouco de Photoshop para colocar uma textura artificial no mar, conseguimos
a imagem abaixo, que é bastante realista!

Bonito, não é? Mas ainda não atingimos o objetivo. Os relevos criados por Ruído Perlin
não são aplicáveis diretamente para a criação de um mundo que possa ser usado em um livro.
O motivo é simples: o método gera paisagens montanhosas, mas nenhuma planície ou planalto
onde as civilizações possam viver! Para resolver esse problema, well, voltem no blog
na próxima atualização que eu conto o segredo :-)
Autor: Ricardo Bittencourt
Copyright © 2002 Ricardo Bittencourt