55
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL FACULDADE DE INFORMÁTICA CURSOS DE CIÊNCIAS DA COMPUTAÇÃO E SISTEMAS DE INFORMAÇÃO JÚLIA MARA COLLEONI COUTO TIAGO MARCELINO APLICAÇÃO DO ALGORITMO DE PRUSINKIEWICZ NA GERAÇÃO DE QUEBRA DE SUPERFÍCIES EM JOGOS Porto Alegre 2010

Aplicação do Algoritmo de Prusinkiewicz

Embed Size (px)

Citation preview

Page 1: Aplicação do Algoritmo de Prusinkiewicz

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL

FACULDADE DE INFORMÁTICA

CURSOS DE CIÊNCIAS DA COMPUTAÇÃO

E SISTEMAS DE INFORMAÇÃO

JÚLIA MARA COLLEONI COUTO

TIAGO MARCELINO

APLICAÇÃO DO ALGORITMO DE PRUSINKIEWICZ NA GERAÇÃO DE QUEBRA

DE SUPERFÍCIES EM JOGOS

Porto Alegre

2010

Page 2: Aplicação do Algoritmo de Prusinkiewicz

JÚLIA MARA COLLEONI COUTO

TIAGO MARCELINO

APLICAÇÃO DO ALGORITMO DE PRUSINKIEWICZ NA GERAÇÃO DE QUEBRA

DE SUPERFÍCIES EM JOGOS

Trabalho de conclusão de curso de graduação

apresentado à Faculdade de Informática da

Pontifícia Universidade Católica do Rio

Grande do Sul, como requisito parcial para

obtenção do grau de Bacharel em Sistemas

de Informação e Ciências da Computação.

Orientadora: Profª. Drª. Soraia Raupp Musse

Porto Alegre

2010

Page 3: Aplicação do Algoritmo de Prusinkiewicz

JÚLIA MARA COLLEONI COUTO

TIAGO MARCELINO

APLICAÇÃO DO ALGORITMO DE PRUSINKIEWICZ NA GERAÇÃO DE QUEBRA

DE SUPERFÍCIES EM JOGOS

Trabalho de conclusão de curso de graduação

apresentado à Faculdade de Informática da

Pontifícia Universidade Católica do Rio

Grande do Sul, como requisito parcial para

obtenção do grau de Bacharel em Sistemas

de Informação e Ciências da Computação.

Aprovada em _____ de ___________________ de ________.

BANCA EXAMINADORA:

____________________________________

Profª Drª Soraia Raupp Musse

____________________________________

Profª Drª Isabel Manssour

____________________________________

Prof Dr Luiz Gustavo Leão Fernandes

Page 4: Aplicação do Algoritmo de Prusinkiewicz

AGRADECIMENTOS

Á nossa orientadora, Profª. Drª. Soraia Raupp Musse, que não apenas nos

ofereceu um trabalho norteado, onde as diretrizes são pré-definidas, mas uma

verdadeira parceria na pesquisa, nos apontado um mundo de possibilidades e

apoiando nossas decisões. Agradecemos imensamente sua generosidade em

compartilhar conhecimentos, discutir idéias e soluções, e sua dedicação ao trabalho

de formação de seus alunos.

Aos nossos pais que nos incentivaram incondicionalmente, depositando em

nós a confiança necessária para enfrentar qualquer dificuldade, e dando-nos o

prazer de compartilhar com eles a alegria de nossas conquistas.

Page 5: Aplicação do Algoritmo de Prusinkiewicz

Nem tudo que se enfrenta pode ser

modificado, mas nada pode ser

modificado até que seja enfrentado.

Albert Einstein

Page 6: Aplicação do Algoritmo de Prusinkiewicz

RESUMO

Essa monografia apresenta uma adaptação à um algoritmo criado por

Przemyslaw Prusinkiewicz [Runions, 2005], para utilização na geração de crack

surface em jogos 2D. O algoritmo mencionado foi desenvolvido originalmente para

simular o crescimento vascular em folhas de plantas, onde, a partir de nodos são

geradas ramificações pela folha. Neste trabalho, esse algoritmo foi parametrizado

para gerar diferentes formas de cracks. Crack é o nome que se utiliza nessa

monografia para denominar o processo de quebra ou fissura de superfícies.

Esse trabalho propõe uma solução mais realista para o problema de geração

de imagens de quebras de superfícies em jogos 2D, visto que atualmente esse

processo é gerado a partir de texturas, ou seja, substituição da imagem original por

outra imagem onde o objeto aparece já com o resultado intermediário ou final do

crack.

Realizou-se um levantamento dos padrões de quebras de superfícies mais

comuns, bem como um estudo dos algoritmos que podem ser utilizados para

simulação de quebras de superfícies.

Também foi desenvolvido um simulador gráfico para geração de cracks

baseado no algoritmo original de Prusinkiewicz [Runions, 2005]. Os resultados

obtidos através dos experimentos apresentam a possibilidade da aplicação do

algoritmo para geração de quebra de superfícies em jogos, em tempo real.

Palavras-chave: Cracking, computação gráfica, jogos, algoritmos.

Page 7: Aplicação do Algoritmo de Prusinkiewicz

APPLYING PRUZINKIEWICZ’S ALGORITHM ON GENERATION OF CRACKING

SURFACES IN GAMES

ABSTRACT

This work presents a new application to an algorithm proposed by Przemyslaw

Prusinkiewicz [Runions, 2005], specifically for using in the generation of crack

surface in 2D games. The cited algorithm was originally developed to simulate the

growth in leaves of vascular plants, where nodes are distributed through the leaf,

generating branches. In this work, we intend to use this algorithm in order to

generate different types of cracks. Crack is the name used in this work to denote the

process of breaking or cracking surfaces.

This work proposes a more realistic solution to the problem of generating

images of broken surfaces in 2D games, because this process is currently applied

using textures.

We conducted a survey of patterns of surface cracks, and a study of

algorithms that can be used for simulation of cracking surfaces.

In addition, we developed a simulator for the generation of cracks based on

original model of Prusinkiewicz [Runions, 2005]. Results show the feasibility of

applying the algorithm to generate cracking surfaces in real-time games.

Keywords: Cracking, graphics computer, games, algorithms.

Page 8: Aplicação do Algoritmo de Prusinkiewicz

LISTA DE ILUSTRAÇÕES

FIGURA 1: Exemplo de cracking surface em jogos .................................................. 13

FIGURA 2: Quebra de vidro provocada por um tiro ................................................. 14

FIGURA 3: Padrão de desenvolvimento vascular de folhas ...................................... 16

FIGURA 4: Ilustração do funcionamento do algoritmo .............................................. 18

FIGURA 5: Cracks em um dragão de vidro ............................................................... 21

FIGURA 6 e 7: Alterações no parâmetro kill_distance .............................................. 24

FIGURA 8 e 9: Alterações no parâmetro vein_radius ............................................... 25

FIGURA 10 e 11: Alterações no parâmetro num_interaction .................................... 25

FIGURA 12 e 13: Alterações no parâmetro num_lines_grid e num_columns_grid ... 26

FIGURA 14 e 15: Alterações no parâmetro esp_vein ............................................... 27

FIGURA 16 e 17: Alterações no parâmetro line_growth ........................................... 27

FIGURA 18 e 19: Alterações no parâmetro drawnodes ............................................ 28

FIGURA 20 e 21: Alterações no parâmetro drawconnections ................................... 28

FIGURA 22 e 23: Alterações no parâmetro closepoints ............................................ 29

FIGURA 24 e 25: Alterações no parâmetro background ........................................... 29

FIGURA 26: Tarefas realizadas pelo simulador ........................................................ 31

FIGURA 27: Resultado visual de crack de barro ....................................................... 34

FIGURA 28: Resultado visual de crack de concreto ................................................. 34

FIGURA 29: Resultado visual de crack de vidro ....................................................... 35

FIGURAS 30 a 45: Comparações entre imagens de cracks em barro do simulador e

imagens reais .................................................................................................... 37 a 40

FIGURAS 46 a 53: Comparações entre imagens de cracks em vidro do simulador e

imagens reais .................................................................................................... 41 e 42

Page 9: Aplicação do Algoritmo de Prusinkiewicz

FIGURAS 54 a 59: Comparações entre imagens de cracks em concreto do simulador

e imagens reais ................................................................................................. 43 e 44

FIGURAS 60 a 69: Comparações entre as novas imagens de cracks em barro do

simulador e imagens reais................................................................................. 46 a 48

FIGURAS 70 a 75: Comparações entre as novas imagens de cracks em vidro do

simulador e imagens reais................................................................................. 49 e 50

FIGURAS 76 a 81: Comparações entre as novas imagens de cracks em concreto do

simulador e imagens reais................................................................................. 51 e 52

FIGURA 82: Média de avaliação ............................................................................... 53

Page 10: Aplicação do Algoritmo de Prusinkiewicz

LISTA DE TABELAS

TABELA 1: Performance do algoritmo para cada padrão de crack ....................... 34

Page 11: Aplicação do Algoritmo de Prusinkiewicz

SUMÁRIO

1 INTRODUÇÃO ........................................................................................... 12

1.1 OBJETIVOS ............................................................................................... 15

1.1.1 Objetivo Geral ........................................................................................... 15

1.1.2 Objetivo Específico .................................................................................. 15

2 FUNDAMENTAÇÃO TEÓRICA ................................................................. 16

2.1 MODELO DE PRZEMYSLAW PRUSINKIEVICZ ........................................ 16

2.1.1 Funcionamento do Modelo ...................................................................... 17

2.2 CRACKING SURFACE .............................................................................. 18

3 MODELO DE QUEBRA DE SUPERFÍCIES............................................... 23

3.1 SIMULADOR DE CRACKING .................................................................... 31

2.1.1 Principais Funções do Simulador ........................................................... 33

3.1 CUSTO COMPUTACIONAL ....................................................................... 33

4 RESULTADOS ........................................................................................... 36

4.1 SURVEY INICIAL ....................................................................................... 36

4.1.1 Cracks em barro ....................................................................................... 36

4.1.2 Cracks em Vidro ....................................................................................... 40

4.1.3 Cracks em Concreto ................................................................................. 42

4.2 SURVEY FINAL .......................................................................................... 43

4.2.1 Cracks em barro ....................................................................................... 44

4.2.2 Cracks em Vidro ....................................................................................... 46

4.2.3 Cracks em Concreto ................................................................................. 49

5 CONCLUSÃO ............................................................................................ 52

REFERÊNCIAS .......................................................................................... 53

Page 12: Aplicação do Algoritmo de Prusinkiewicz

12

1 INTRODUÇÃO

A busca pela representação do comportamento real dos elementos da

natureza em computação gráfica é um dos grandes desafios dos desenvolvedores

de jogos. Um dos comportamentos que apresenta dificuldade em prover

representação gráfica fiel é a quebra ou fissura de superfícies. Atualmente esse

processo é feito de maneira estática, a partir da utilização de uma imagem

desenhada (textura), e não gerada dinamicamente.

Nesse trabalho, objetiva-se estudar a viabilidade de adaptar o algoritmo

desenvolvido por Przemyslaw Prusinkiewicz [Runions, 2005] para utilizá-lo no

processo de cracking surface (quebra de superfícies), especificamente em jogos. O

foco é verificar se é possível utilizar esse algoritmo para esse fim, apresentando

algumas características importantes, como por exemplo, processamento em tempo

real e qualidade visual dos resultados.

Przemyslaw Prusinkiewicz1 é pesquisador da Universidade de Calgary, e o

foco de seu trabalho é a modelagem, simulação e visualização do desenvolvimento

das plantas. Ele procura interligar os conceitos de computação gráfica, teoria da

linguagem formal e linguagens de programação com Biologia, Matemática e Física.

A finalidade de seus algoritmos é aplicar conceitos e métodos da Ciência da

Computação para obter uma melhor compreensão do surgimento de formas e

padrões na natureza. Prusinkiewicz recebeu o SIGGRAPH 1997 - Computer

Graphics Achievement Award - por seu trabalho. Seus algoritmos biologicamente

motivados já foram adaptados para outros fins, como simulação de comportamento

de multidões [Rodrigues, 2009], e agora se pretende utilizá-lo para simulação de

cracking surface em jogos.

Cracking surface é o nome utilizado nesse trabalho para designar o processo

computacional de quebra ou fissuras em superfícies. Crack é uma fissura

sistemática na conexão entre os materiais que formam determinado objeto. Essa

fissura forma uma linha contínua. Sua forma varia dependendo do material, da forma

geométrica e de outras variáveis externas. Um crack ocorre quando as tensões

internas do material são maiores que a resistência do mesmo. Ocorre a primeira

1 Curriculum Vitae disponível em http://pages.cpsc.ucalgary.ca/~pwp. Acesso em 25

de junho de 2010.

Page 13: Aplicação do Algoritmo de Prusinkiewicz

13

fissura no material devido à tensão, então ocorre uma fissura vizinha, e a próxima, e

isso ocorre num efeito dominó [Gobron, 2000].

Atualmente, nos jogos para computadores, onde há imagens de tiros ou

guerras, há uma deficiência gráfica no que tange as respostas das superfícies

atingidas. Nessas situações, observa-se que o usual é que, um momento após a

superfície ser atingida, a imagem seja substituída por uma textura, como um buraco

por exemplo, ou que a superfície simplesmente desapareça. Observa-se esse

comportamento em jogos como Final Fight Guy, da CAPCOM2, conforme ilustrado

na Figura 1, e no jogo Lethal Inforces, da KONAMI3, conforme Figura 2.

Figura 1. Exemplo de cracking surface em jogos, onde 1 segundo após o

vidro ser atingido por um golpe, a imagem é substituída por uma textura igual

à do vidro da esquerda (imagens extraídas do jogo Final Fight Guy).

2Site oficial http://www.capcom.com. Acesso em 25 de junho de 2010.

3Site oficial http://konami.com. Acesso em 25 de junho de 2010.

Page 14: Aplicação do Algoritmo de Prusinkiewicz

14

Figura 2. Quebra de vidro provocado por um tiro (magem extraída do

jogo Lethal Inforces – KONAMI).

Em pesquisas baseadas na leitura de alguns artigos, verifica-se que os

algoritmos desenvolvidos até agora, para resolver esse problema, ainda apresentam

desafios a serem considerados. Alguns dos trabalhos citados nessa monografia

podem simular a quebra de uma superfície, desencadeada por alguma ação, mas

não o fazem em tempo real, e isso é essencial para que sua implementação em

jogos seja viável. É importante citar que num jogo várias outras ações estão

ocorrendo, impactando o custo computacional.

A simulação de cracking, criando a partir dele peças pequenas e interligadas,

dando então mais credibilidade e realismo às cenas, é a principal motivação desse

trabalho. Criar esses fragmentos de maneira realista e em tempo real é desafiador,

dada a complexidade do padrão dos cracks.

Assim, a customização do algoritmo de Prusinkiewicz [Runions, 2005] é a

hipótese adotada nesse trabalho para tentar resolver parte dos problemas.

Page 15: Aplicação do Algoritmo de Prusinkiewicz

15

1.1 OBJETIVOS

Listados nessa seção encontram-se os objetivos geral e específicos desta monografia.

1.1.1 Objetivo Geral

O objetivo central deste trabalho é aplicar o algoritmo desenvolvido pelo Dr.

Przemyslaw Prusinkiewicz [Runions, 2005] para utilização em quebra de superfícies,

para jogos.

1.1.2 Objetivos Específicos

Os Objetivos Específicos deste trabalho são:

a) Estudar a lógica e implementação do algoritmo desenvolvido em

[Runions, 2005], bem como outras pesquisas relacionadas à cracking

surface.

b) Propor e desenvolver uma adaptação ao modelo original [Runions,

2005] que possa ser utilizada em quebra de superfícies em jogos.

c) Pesquisar em jogos de computadores imagens que possam ser úteis

contendo resultados de quebra de superfícies, objetivando comparar

os resultados.

d) Avaliação do algoritmo desenvolvido, em relação aos seguintes

parâmetros: tempo computacional e qualidade do aspecto visual.

e) Descrever os modelos e resultados em um trabalho escrito de

pesquisa.

Page 16: Aplicação do Algoritmo de Prusinkiewicz

16

2 FUNDAMENTAÇÃO TEÓRICA

Nesse capítulo apresenta-se o modelo original que é utilizado no

desenvolvimento do projeto proposto, bem como uma introdução a alguns trabalhos

relacionados à cracking.

2.1 Modelo de Przemyslaw Prusinkiewicz

No artigo Modeling and visualization of leaf venation patterns [Runions, 2005]

é apresentada uma classe de algoritmos biologicamente motivados para a geração

de padrões de formação vascular das folhas. Sua intenção é a constituição de

imagens realistas que mostrem o processo de desenvolvimento de veias nas folhas

das plantas, objetivando replicar seu padrão visual. Para tanto, foi desenvolvida uma

ampla pesquisa morfológica nas folhas mais comuns encontradas na natureza.

Dessa maneira, encontraram os padrões de formação vascular de folhas que

embasaram o desenvolvimento de seus algoritmos. Esses algoritmos servirão de

base para a implementação do projeto aqui proposto.

“O algoritmo é baseado na hipótese biologicamente plausìvel de que a

vascularização resulta de uma interpolação entre o crescimento da folha, colocação

dos hormônios de auxina e desenvolvimento das veias” [Runions, 2005]. Cabe

esclarecer que a auxina é um hormônio das plantas que promove o crescimento de

células em seus tecidos.

Um exemplo inspirador para o desenvolvimento desse trabalho é apresentado

na Figura 3, retirada de [Runions, 2005], que ilustra as veias secundárias e terciárias

formando um padrão reticulado irregular.

Figura 3. Padrão de desenvolvimento vascular de folhas [Runions, 2005]. f, g

e h mostram o impacto visual causado pelo número de auxinas distribuídas

nas folhas em cada passo – quanto maior o número, maior a vascularização.

Page 17: Aplicação do Algoritmo de Prusinkiewicz

17

Esses padrões assemelham-se com o que se pretende reproduzir com o

simulador desenvolvido, sendo uma das diferenças o fato de que em uma quebra de

superfìcie, como o vidro, há um ponto central de onde saem as „veias‟ por todos os

lados. Já nas folhas, o crescimento sai do ponto de ligação da folha com o pecíolo

indo a uma direção determinada.

2.1.1 Funcionamento do modelo

A lógica do modelo original é a seguinte: as auxinas são distribuídas pela

folha, e a vascularização ocorre de maneira que as nervuras/veias tendem a se

aproximar desse hormônio. Define-se um ponto inicial de onde se origina a

nervura/veia principal, e distribui-se um determinado número de auxinas na folha. A

partir de então, o algoritmo seleciona as nervuras mais próximas de cada auxina e

calcula vetores direção que indicam o crescimento das nervuras. As auxinas são

eliminadas assim que uma veia chega a uma distância determinada, chamada kill

distance. Quando isso ocorre, inicia-se o processo de criação de auxinas nos pontos

mais distantes da folha, para assim reiniciar o processo de crescimento vascular e

subdivisão dos vasos.

Esse processo é ilustrado na Figura 4: no estado inicial o sistema vascular da

folha, nesse exemplo, é constituído por três nodos (círculos pretos com centros

brancos) e quatro auxinas (círculos vermelhos) (a). Cada auxina é associada ao

nodo que está mais próximo a ela (b, linhas vermelhas), o que estabelece o conjunto

de auxinas que influencia cada nó. São encontrados os vetores direção de cada

nodo (c, setas pretas). Esses vetores são adicionados e sua soma normalizada

novamente (d, setas violetas), fornecendo a base para encontrar os nodos de novo

(d, círculos violeta). Os novos nodos são incorporados ao sistema vascular (e). As

distâncias entre as auxinas e os nodos são verificadas de maneira a eliminar as

muito próximas (f, g). A folha cresce (h); neste exemplo assume-se um crescimento

marginal, por isso as auxinas existentes e os nós de veia não são movidos. Novas

auxinas são colocadas aleatoriamente no interior da folha crescida (i). Auxinas muito

próximas das outras são eliminadas (j) e os nodos próximos a essas auxinas são

identificados (k). Este é o início da próxima iteração da execução do algoritmo, com

estágios (j) e (k), correspondentes aos estádios (a) e (b) da iteração anterior.

Page 18: Aplicação do Algoritmo de Prusinkiewicz

18

Figura 4. Ilustração do funcionamento do algoritmo [Runions, 2005].

Para utilização em cracking, ocorrem algumas diferenças. A principal é que o

campo onde é gerado o cracking tem um tamanho fixo, não ocorrendo o crescimento

durante o processo de vascularização como ocorre com as folhas. Outra diferença

está no fato de que serão geradas várias ramificações em direções diversas, e o tipo

de ramificação poderá ser parametrizado, podendo ocorrer cruzamento entre as

linhas secundárias. De qualquer forma, é importante salientar que as definições

sobre a adaptação do modelo original em crack serão feitas durante o

desenvolvimento desse trabalho, especificamente no capítulo 3.

2.2 Cracking Surface

Existem diversos trabalhos na literatura versando sobre cracking surfaces,

sendo alguns deles citados nessa seção.

No artigo de Gobron [Gobron, 2000] são apresentados algoritmos onde a

propagação de cracks é feita automaticamente, usando um método que eles

denominam “fìsico-intuitivo”. Fìsico porque do ponto de vista de um cientista da

computação o modelo pode aparecer bastante teórico, mas o modelo esta longe do

ponto de vista realístico de um físico, por isso é intuitivo. Apresentam-se aqui as

principais idéias desse trabalho.

Segundo os autores, uma das dificuldades é representar o stress que gera os

cracks, visto que ele pode ir a qualquer direção, com intensidades diferentes. Stress

é uma tensão multidirecional nas células formadoras dos materiais, e quando o

Page 19: Aplicação do Algoritmo de Prusinkiewicz

19

stress interno do material é maior que a resistência desse material, ocorrem fissuras

e podem ocorrer cracks.

Há uma função recursiva entre stress e crack. Stress gera crack e estes por

sua vez modificam o stress, e o entendimento dessa relação é a chave para a

geração e simulação de qualquer tipo de cracks em qualquer material. Módulos de

fissuras são formados por células instáveis (células que contém uma intensidade de

stress mais forte que a resistência do material). Esses módulos têm direção

determinada, e originam as fissuras.

Determinar a direção inicial do crack não é trivial, então assume-se que ele

sempre inicia com pelo menos duas direções, e quatro padrões de crack são

definidos abaixo [Gobron, 2000]:

“I” é o mais comum, consiste de dois módulos de fissuras propagados em

direções opostas.

“T” são três módulos de fissuras, dois similares ao padrão I e outro ortogonal

a esses.

“Y” também três módulos de fissuras, mas o da direção inicial forma ângulos

de aproximadamente 120°.

“X” é extremamente raro, e consiste de quatro módulos de fissuras orientados

de maneira que formam ângulos de 90°.

Baseados nessas idéias, Gobron e Chiba conseguiram simular imagens

realistas de cracking em materiais diversos, como concreto, cerâmica, barro e vidro.

No artigo [Smith, 2003], é utilizada para a simulação de cracks a linguagem

de programação vv, que é uma extensão de C++. Com esse paradigma de

modelagem é possível representar expressões algébricas que acarretam em

movimentos entre as malhas de polígonos, que formarão os cracks. Segundo os

autores, esse paradigma de modelagem simplifica a implementação de algoritmos

individuais, tratando-os como programas de modelagem para múltiplos propósitos. É

utilizada para a representação gráfica de malhas de polígonos a álgebra vertex-

vertex, que é uma classe de sistemas rotatórios vertex-vertex com uma série de

operações definidas nela, utilizando notação matemática. Utilizam informações como

forma geométrica, topologia e coordenação na seqüência das operações como

parâmetros para a reprodução de cracks. A relação de vizinhança entre os

elementos de uma malha de polígonos e as modificações locais em objetos

estruturados são a essência do desenvolvimento proposto em [Smith, 2003]. Malhas

Page 20: Aplicação do Algoritmo de Prusinkiewicz

20

de polígonos são coleções de vértices, nodos reunidos por pares de vértices e

polígonos feitos por seqüências de nodos e vértices. São apresentados alguns

algoritmos de subdivisão que podem ser representados utilizando o modelo de

desenvolvimento proposto por eles. Apresentam algoritmos de inserção de vértices,

de subdivisão de poliedros, o esquema de subdivisão que utiliza loops, o algoritmo

borboleta e o algoritmo de subdivisão . Esses algoritmos são explicados de

maneira mais completa em [Smith, 2006].

O artigo de [Martinet, 2004] apresenta uma abordagem procedural para a

geração de fragmentos e fissuras em materiais como vidro, metal e pedra. Essa

abordagem utiliza a passagem de parâmetros possibilitando a geração de diversos

tipos de fissuras. Seu método também permite controlar as regiões em que as

fissuras se propagam e a forma que os fragmentos podem ter. Seu método utiliza a

Modelagem de Árvore Híbrida, que combina superfícies implícitas como um

esqueleto e malhas de triângulos. Suas fissuras e fragmentos são definidos usando

operações booleanas entre o modelo original e volumes talhados ou máscaras de

fissuras.

O procedimento é realizado em três passos: no primeiro é mapeado o padrão

de fissura em cima do modelo de entrada para gerar um esqueleto. O padrão de

fissura é uma imagem 2D feita em um editor específico. Essa imagem é um gráfico

que define sua geometria e características de ramificação. Os nodos do gráfico

possuem informações sobre a largura e profundidade da fissura no vértice

correspondente.

No artigo Generating Surface Crack Patterns [Iben, 2006] são apresentados

alguns métodos de geração de padrões de quebra de superfícies como lama,

cerâmica e vidros, onde o usuário pode controlar as características e aparência da

quebra, manipulando alguns parâmetros pré-estabelecidos. Dessa maneira, é

possível gerar diferentes padrões muito próximos da realidade, se comparados com

imagens do mundo real. Segundo os autores, a quebra de superfícies depende do

material e de fatores externos. A quebra é simulada com a triangulação na superfície

dos objetos.

Apesar dessa implementação ser eficaz em reproduzir quebra de superfícies

com imagens realistas, ela ainda não é eficiente para utilização em tempo real, visto

que para simular a quebra de vidro do dragão representado na Figura 5 por exemplo

Page 21: Aplicação do Algoritmo de Prusinkiewicz

21

foram necessárias 2.7 horas de processamento computacional. Nesse caso, o

tempo computacional despendido seria inviável para aplicação em jogos.

Figura 5. Cracks em um dragão de vidro [Iben, 2006]

No artigo de [Shen, 2007], os autores enfrentaram o desafio de representar de

maneira realista os movimentos de fluidos, como o mar, uma pia com água, geléia

caindo sobre um pão, etc. Os resultados podem ser vistos no filme de animação

longa metragem Ratatouille4, da Disney em parceria com a Pixar. Na simulação de

movimento de partículas, como um fluido, o número de partículas é pequeno demais

para dar a aparência de uma superfície contínua. Para resolver isso, foi

desenvolvida uma técnica para simular de maneira eficiente temporal e

espacialmente, superfícies de partículas coerentes, com uma parametrização que

permite visualizar os detalhes de textura, que são posteriormente adicionadas na

composição. Foram construídas funções implícitas que definem os campos de

distância assinados para o fluido de superfícies. Para um ponto de avaliação, a

técnica faz consultas de um conjunto de partículas em uma determinada região de

apoio, em seguida, cria uma partícula de referência com uma posição média

ponderada e raio. A distância entre o ponto de avaliação e o ponto mais próximo da

partícula de referência é atribuída como o valor da função implícita. Usando uma

estrutura de dados hierárquica, por exemplo, uma árvore KD [de Berg, 2008], o

tempo computacional do modelo pode ser significativamente melhorado. Esta função

implícita é então processada por um procedimento de contorno, tais como marching

4 Site oficial http://disneydvd.disney.go.com/ratatouille.html/. Acesso em 25 de junho de 2010.

Page 22: Aplicação do Algoritmo de Prusinkiewicz

22

cubes [Lorensen, 1987] que extrai o contorno em uma malha de triângulos. Quando

essa técnica foi aplicada a cada frame em uma simulação de movimento de

partículas, foram extraídas uma seqüência de superfícies para animação de fluidos.

Para criar detalhes de superfícies similares aos que ocorrem na natureza, são

utilizados alguns parâmetros que influenciam na aparência das malhas formadoras

dos objetos.

Todos os artigos citados mostram pesquisas atuais no campo de quebras de

superfícies, e alguns deles contribuíram de alguma maneira para a adaptação do

modelo de [Runions, 2005] no desenvolvimento desse trabalho.

Page 23: Aplicação do Algoritmo de Prusinkiewicz

23

3 MODELO DE QUEBRA DE SUPERFÍCIES

O modelo desenvolvido nesse trabalho apresenta algumas modificações em

relação ao modelo original proposto por Prusinkiewicz [Runions, 2005]. A principal

alteração é que no modelo original é utilizado, no cálculo do posicionamento das

auxinas, uma adaptação do algoritmo denominado dart-throwing (lançamento do

dardo) [Cook 1986; Mitchell 1987]. Neste algoritmo, há um gerador aleatório de

amostras e um validador, de forma que os pontos são gerados randomicamente e

dispostos de maneira uniforme sobre a área a ser preenchida. Quando a distância

de um ponto em relação aos demais na área for menor do que um ou mais limites

predefinidos, esse ponto é rejeitado. Satisfeitas as restrições, o ponto é adicionado à

área e o processo continua. Este processo é repetido até que novos pontos não

possam ser adicionados à área, conforme adaptado por [Runions, 2005] para “lançar

dardos” a cada iteração.

No modelo original, para controlar a regularidade do padrão de nervuras, o

usuário define o número de dardos por unidade de área da folha, a cada passo do

algoritmo. O problema é que esse algoritmo é computacionalmente caro, visto que

sua intenção é simular padrões bem próximos da realidade. Por esse motivo, o

algoritmo dart-throwing foi susbtituido por uma estrutura similar a uma malha, de

modo que a área de desenho é dividida em linhas verticais e horizontais e as

auxinas são colocadas na intersecção dessas linhas, ainda de maneira aleatória e

respeitando uma quantidade máxima pré-definida de auxinas. Dessa maneira a

performance aumentou significativamente no processo de criação de auxinas,

conforme mostrado no capítulo 3.2 de custo computacional.

A base para o algoritmo desenvolvido para este trabalho é apresentada em

[Runions, 2005]. O modelo original gera imagens que simulam o crescimento

vascular em folhas de plantas. A partir de um ponto central, chamado de VeinNode,

tem início o crescimento do crack para todos os lados a partir da orientação do

crescimento dos VeinNodes atraídos pelos pontos chamados de auxinas. As

auxinas são espalhadas dentro de uma área quadrada e limitada. Para a geração de

padrões de crack diferentes foram definidos parâmetros que alteram o

comportamento de crescimento e ligação dos nodos.

Os seguintes dados são entradas do modelo:

Page 24: Aplicação do Algoritmo de Prusinkiewicz

24

KILL_DISTANCE: Distância mínima entre um VeinNode e uma

auxina para que a auxina seja morta. Quanto menor o seu valor mais

ramificações existirão no modelo, porque as auxinas morrerão mais

tarde; quanto maior esse parâmetro, menos ramificações serão

geradas, conforme ilustrado nas Figuras 6 e 7. Esse parâmetro faz

parte do algoritmo original. Na Figura 6 (à esquerda), o valor de

kill_distance é 0.01, na Figura 7 é 0.1. As auxinas são mostradas como

pontos azuis. Outros parâmetros utilizados na formação dessas figuras:

EspVein = 0.2, Raio VeinNode = 0.9, Número de Iterações = 100,

Número de linhas e número de colunas = 7.

Figuras 6 e 7. Alterações no parâmetro kill_distance

VEIN_RADIUS ou Raio Vein Node: é o raio ao redor da auxina no qual

ela pode afetar os VeinNodes que estão ao seu alcance, a fim de

escolher o mais próximo e influenciar seu crescimento. Esse parâmetro

faz parte do algoritmo original. Quanto menor o valor desse parâmetro,

as imagens apresentam curvas mais suaves, conforme ilustrado na

Figura 8, que foi gerada com vein_radius = 0.5. Já na Figura 9, utiliza-

se vein_radius = 20, formando linhas mais retas. Outros parâmetros

utilizados: EspVein = 0.2, Número de Iterações = 100, Número de

linhas e número de colunas = 20, kill distance = 0.1.

Page 25: Aplicação do Algoritmo de Prusinkiewicz

25

Figuras 8 e 9. Alterações no parâmetro vein_radius

NUM_INTERACTION: esse parâmetro indica quantas vezes será

executado o algoritmo principal para criar as ramificações. No algoritmo

original a parada do crescimento se dá pelo término das auxinas

existentes. Na Figura 10, foi atribuído o valor de 100 a esse

parâmetro, dessa maneira gerando mais ramificações. Na figura 11,

sendo atribuído o valor de 10, o crack gerado não tem muitas

ramificações. Outros parâmetros utilizados na formação dessas figuras:

EspVein = 0.2, Raio VeinNode = 0.9, Kill distance = 0.08, Número de

linhas e número de colunas = 20.

Figuras 10 e 11. Alterações no parâmetro num_interaction

NUM_LINES_GRID e NUM_COLUMNS_GRID: esses parâmetros

indicam quantas linhas e colunas terão na área de crescimento (grid).

A área de crescimento é dividida em linhas e colunas, nas quais a

intersecção das mesmas é o ponto de referência para a criação das

auxinas. Esses parâmetros não existem no algoritmo original de

Prusinkiewicz [Runions, 2005], pois o posicionamento das auxinas se

dá pela utilização do algoritmo de lançamento de dardos(Dart

Throwing). A utilização de linhas e colunas melhorou a performance.

Page 26: Aplicação do Algoritmo de Prusinkiewicz

26

Quanto maiores os valores de linhas e colunas mais auxinas serão

criadas na área de crescimento do crack, mas isso gera um aumento

no custo computacional: a Figura 12 levou 0,14 segundos para formar-

se, enquanto a Figura 13 levou 11,439 segundos. Isso é ilustrado na

Figura 12, onde foi utilizado o valor número de linhas e colunas igual a

7, e Figura 13, onde foi atribuído o valor 40. Outros parâmetros

utilizados na formação dessas figuras: EspVein = 0.2, Raio VeinNode =

0.9, Número de Iterações = 100 e Kill distance = 0.08

Figuras 12 e 13. Alterações nos parâmetros num_lines grid e

num_columns_grid

ESPVEIN: define um valor que será aplicado à distância de

um VeinNode (ponto geradono grid) em relação ao que deu origem a

ele. Dependendo do valor atribuído a esse parâmetro, poderão ser

criados VeinNodes muito próximos ou muito distantes, quanto maior

este valor, mais longe será criado o VeinNode. Quando esse parâmetro

recebe um valor pequeno cria pontos mais próximos uns dos outros,

assim como valores altos criam pontos mais distantes. Esse parâmetro

é bastante útil na geração de cracks em barro. Na Figura 14, utiliza-se

espvein = 0.1, enquanto na Figura 15 o valor atribuído a esse

parâmetro é igual a 4.0. Esse parâmetro também causa impacto no

custo computacional, visto que a Figura 14 leva 8,164 segundos para

ser gerada, enquanto a Figura 16 leva 0,198 segundos. Outros

parâmetros utilizados na formação dessas figuras: Raio VeinNode =

0.9, Número de Iterações = 100, Kill distance = 0.08 e Número de

linhas e número de colunas = 20.

Page 27: Aplicação do Algoritmo de Prusinkiewicz

27

Figuras 14 e 15. Alterações nos parâmetros esp_vein

LINEGROWTH: é o parâmetro da taxa de crescimento da espessura

das ramificações pai. Cada vez que uma linha se ramifica para linhas

filho, a linha pai é engrossada, recebendo o valor de sua espessura

mais a taxa de crescimento multiplicada pelo número de filhos. Esse

parâmetro é utilizado na Figura 17, onde foi atribuído o valor de 0.5, e

na Figura 16 foi atribuído o valor zero. Para a geração dessas figuras,

foi desmarcado o parâmetro drawnodes, que desenha as auxinas, para

uma melhor visualização do resultado. Outros parâmetros utilizados na

formação dessas figuras: EspVein = 0.2, Raio VeinNode = 0.9, Número

de Iterações = 100, Kill distance = 0.08 e Número de linhas e número

de colunas = 20.

Figuras 16 e 17. Alterações nos parâmetros linegrowth

DRAWNODES: este parâmetro foi criado para que possa ser

visualizado onde estão as auxinas criadas, e caso ele seja marcado na

tela do gerenciador (Desenhar Pontos) ele desenha os pontos

(auxinas) em azul antes de gerar os cracks. Os parâmetros utilizados

Page 28: Aplicação do Algoritmo de Prusinkiewicz

28

na formação dessas figuras são: EspVein = 0.2, Raio VeinNode = 0.9,

Número de Iterações = 100, Kill distance = 0.08 e Número de linhas e

número de colunas = 20. Na Figura 18 esse parâmetro, que é um

booleano, recebeu valor falso, enquanto na figura 19 foi marcado como

verdadeiro.

Figuras 18 e 19. Alterações nos parâmetros drawnodes

DRAWCONNECTIONS: este parâmetro é utilizado para

simular cracks de vidro, ligando os pontos de maneira semelhante a

uma circunferência crescente. Ele liga novos VeinNodes a cada

iteração do algoritmo. Os parâmetros utilizados na formação dessas

figuras são: EspVein = 0.2, Raio VeinNode = 100, Número de Iterações

= 80, Kill distance = 0.02 e Número de linhas e número de colunas =

20. Na Figura 20, o parâmetro drawconnections, que é do tipo

booleano, teve atribuído valor falso, enquanto na figura 21 foi marcado

como verdadeiro.

Figuras 20 e 21. Alterações nos parâmetros drawconnections

Page 29: Aplicação do Algoritmo de Prusinkiewicz

29

CLOSEPOINTS: Forma “ilhas” aleatórias entre os cracks. Para tanto,

ele liga novos VeinNodes à um VeinNode mais próximo. Os

parâmetros utilizados na formação das Figuras 22 e 23 são: EspVein =

0.2, Raio VeinNode = 100, Número de Iterações = 80, Kill distance =

0.02 e Número de linhas e número de colunas = 20. Na Figura 20, o

parâmetro closepoints, que é do tipo booleano, teve atribuído valor

falso, enquanto na figura 21 foi marcado como verdadeiro.

Figuras 22 e 23. Alterações nos parâmetros closepoints

BACKGROUND: usado para colocar imagens de fundo, conforme

ilustrado na Figura 25; produz imagens mais realistas. A cada vez que

é iniciada a execução do programa, a imagem de fundo é carregada.

Na figura 24, a imagem levou 0,039 segundos, enquanto a figura 25 foi

formada em 1,998 segundos. Parâmetros utilizados na formação das

Figuras 24 e 25: EspVein = 1.0, Raio VeinNode = 0.4, Número de

Iterações = 100, Kill distance = 0.08 e Número de linhas e colunas = 7.

Figuras 24 e 25. Alterações nos parâmetros background

Page 30: Aplicação do Algoritmo de Prusinkiewicz

30

A simulação é executada em dois passos: a leitura dos parâmetros de

configuração e a execução do algoritmo principal. Na figura 6 está a arquitetura do

modelo.

Na fase de configuração, o simulador lê os parâmetros do arquivo

"config.xml", que é gerado pelo Gerenciador de Parâmetros. Caso tenha sido

definida uma figura de fundo, no parâmetro BACKGROUND, é nessa fase que a

figura é desenhada.

A fase de criação de auxinas utiliza os parâmetros

NUM_LINES_GRID e NUM_COLUMNS_GRID para criar e posicionar as auxinas na

área de crescimento. A posição base para a criação de uma auxina é o vértice entre

linha e coluna; porém se essa fosse sempre a mesma posição, as imagens de crack

geradas seriam sempre as mesmas. Para isso foi incluído um cálculo randômico

para posicionamento das auxinas ao redor da intersecção de acordo com o número

randômico gerado. Caso o parâmetro DRAWNODES esteja marcado, as auxinas

geradas serão desenhadas na tela em sua posição final.

Na fase de crescimento, é iniciado o loop principal do modelo, onde para cada

auxina "viva" é buscado o VeinNode mais próximo à ela, com uma distância mínima

definida pelo parâmetro VEIN_RADIUS. Depois de encontrado, a auxina modifica o

vetor de influência desse nodo somando o vetor que existe entre a auxina e o

VeinNode ao vetor de influência já existente do próprio VeinNode. Dessa maneira

mais de uma auxina pode influenciar o crescimento de um VeinNode. Após todas as

auxinas terem influenciado algum VeinNode é iniciada a criação de novos

VeinNodes, e para isso todos os que possuem um vetor de influência com tamanho

diferente de zero têm esse vetor normalizado e multiplicado pelo parâmetro

ESPVEIN. Dessa maneira é criado um novo VeinNode na posição encontrada, e

então esse vetor de influência é zerado novamente.

Page 31: Aplicação do Algoritmo de Prusinkiewicz

31

Figura 26: Tarefas realizadas pelo simulador

Terminada a fase de crescimento é hora de verificar se alguma auxina deve

ser removida da área de crescimento. Todas as auxinas são verificadas para

descobrir se estão a uma distância igual ou inferior ao parâmetro KILL_DISTANCE;

caso estejam, essa auxina é removida. Quanto mais tarde uma auxina for removida

Page 32: Aplicação do Algoritmo de Prusinkiewicz

32

da área de crescimento mais VeinNodes ela irá influenciar em seu crescimento até

que seja removida.

Após terem sido efetuadas as fases de crescimento e destruição de auxinas,

é realizado o desenho das conexões entre os VeinNodes, objetivando formar as

linhas de crack. Nessa fase, caso o parâmetro LINEGROWTH tenha um valor

definido, a grossura da linha entre um VeinNode e seus "filhos" será dada pelo valor

do parâmetro multiplicado pelo número de filhos.

As duas últimas fases descritas são o desenho de conexões e o fechamento

de pontos. Essas fases opcionais não fazem parte do algoritmo principal, pois são

implementações feitas para gerar padrões específicos, como vidro e barro. O

desenho de conexões, parâmetro DRAWCONNECTIONS, liga os últimos pontos

gerados para fechar um círculo entre eles, esse círculo foi visto nas figuras de vidro

pesquisadas. O fechamento de pontos, parâmetro CLOSEPOINTS, ocorre com

todos os VeinNodes que não possuam ramificações, neste caso é buscado o

VeinNode mais próximo à outro e desenhada uma ligação entre eles. Esse

comportamento ocorre em todas as iterações da simulação.

Se o número de iterações definidas no parâmetro NUM_INTERACTION tenha

sido alcançado a simulação termina, caso contrário é repetido o processo a partir do

bloco de crescimento.

3.1 Simulador de Cracking

O simulador possui 7 classes, Auxin, ComparerListA, ComparerListB,

ComparerListC, ComparerListD, Simulador e Coordenada. O programa foi

desenvolvido em .net C++, e o gerenciador de parâmetros em C# .net, versão 3.5,

usando a biblioteca OpenGL para gerenciar a parte gráfica do software (classes

glut.h e glu.h), bem como todos as funções de mostrar os resultados na tela.

As classes ComparerListA, ComparerListB, ComparerListC, ComparerListD

são utilizadas para fazer o padrão circular que ocorre nas imagens de crack de vidro.

Como o próprio nome diz, são classes de comparação, que visam ordenar as listas

dos pontos de forma que sejam geradas imagens numa circunferência.

Page 33: Aplicação do Algoritmo de Prusinkiewicz

33

Os parâmetros que influenciam na geração dos cracks foram descritos no

capítulo anterior.

3.1.1 Principais funções do simulador

GeraAuxina: Função que diz se deve gerar uma auxina ou não; há 75%

de chance de gerar.

insideCircuference: Método para verificar a existência de um ponto

dentro do alcance de uma circunferência.

DrawLineByDeepness: Método que desenhará as linhas; gera o padrão

de crescimento da espessura da linha, conforme o número de filhos.

DrawWeb: cria o padrão de ligação circular entre os nodos, em cada

iteração do algoritmo, com randomicidade igual a 50 %.

GetLeaveNodes: pega os últimos nodos folhas que não possuem filhos,

nele é utilizado o parâmetro closePoints, gerando as ilhas do padrão de

barro.

Configura: gera um arquivo XML com parâmetros padrão de

inicialização do programa. Caso não haja o arquivo ele cria, caso

contrário carrega as configurações indicadas pelo usuário.

3.2 Custo Computacional

De acordo com os testes realizados com os parâmetros que compõem a

Tabela 1, verifica-se que o custo computacional para a geração de imagens de

cracks de concreto – Figura 28 - é o mais baixo. Um dos motivos é que este padrão

utiliza menos pontos de orientação – auxinas – pois possui um grid de tamanho

menor – 7 linhas por 7 colunas.O padrão gerado para o vidro, ilustrado na Figura 29,

é o mais custoso computacionalmente pois utiliza um grid maior, 20 linhas por 20

colunas, além de utilizar um algoritmo adicional para a geração as circunferências do

vidro. O padão para gerar cracks de barro fica com um valor intermediário.

Para obter estes resultados utilizou-se um netbook com um processador de

1,6 Ghz e 2Gb de memória RAM.

Page 34: Aplicação do Algoritmo de Prusinkiewicz

34

Tabela 1: Performance do algoritmo para cada padrão de crack

Padrão

de

crack

Variável

Valor

atribuí

do

Tempo de

execução

em

segundos

Resultado visual

Ba

rro

KILL_DISTANCE 0.08

3,14

Figura 27

VEIN_RADIUS 0.4

NUM_INTERACTION 100

NUM_LINES_GRID 20

NUM_COLUMNS_GRID 20

ESPVEIN 0.8

LINEGROWTH 0.5

DRAWNODES false

DRAWCONNECTIONS false

CLOSEPOINTS false

BACKGROUND false

Con

cre

to

KILL_DISTANCE 0.08

0,78

Figura 28

VEIN_RADIUS 0.4

NUM_INTERACTION 100

NUM_LINES_GRID 7

NUM_COLUMNS_GRID 7

ESPVEIN 1

LINEGROWTH 1

DRAWNODES false

DRAWCONNECTIONS false

CLOSEPOINTS false

BACKGROUND false

Vid

ro

KILL_DISTANCE 0.02

VEIN_RADIUS 100

NUM_INTERACTION 80

Page 35: Aplicação do Algoritmo de Prusinkiewicz

35

NUM_LINES_GRID 20

6,59

Figura 29

NUM_COLUMNS_GRID 20

ESPVEIN 0,03

LINEGROWTH 0

DRAWNODES false

DRAWCONNECTIONS true

CLOSEPOINTS false

BACKGROUND false

Page 36: Aplicação do Algoritmo de Prusinkiewicz

36

4 RESULTADOS

Nesse capítulo, apresentam-se alguns resultados de imagens geradas pelo

simulador, que foram avaliados por 84 voluntários. O grupo de pessoas que

respondeu às duas pesquisas são parecidos: colegas da Faculdade de Informática,

amigos e familiares dos autores e da orientadora. O objetivo da avaliação foi

identificar como estava a aceitação das imagens geradas pelo simulador, bem como

saber o que deveria ser revisado objetivando a geração de cracks mais realistas.

4.1 Survey Inicial

Foi feita uma pesquisa inicial, à qual 48 participantes responderam entre os

dias 24 de maio a 04 de junho de 2010, às seguintes questões:

1. Similaridade entre as imagens de crack em barro reais e as do

simulador

2. Similaridade entre as imagens de crack em vidro reais e as do

simulador

3. Similaridade entre as imagens de crack em concreto reais e as do

simulador

Foi escolhido realizar simulação de cracks de barro, vidro e concreto devido a

facilidade de encontrar-se imagens desses três tipos disponíveis na internet.

Como resposta às perguntas, havia uma escala de 1 a 5, onde 1 significa

“Totalmente Diferente” e 5 significa “Muito semelhante”. As imagens de comparação

estavam hospedadas em http://crackingsurface.blogspot.com/, e havia um formulário

do Google Docs armazenando as respostas. Também foi enviado por email um

arquivo do tipo apresentação de slides para melhor visualização das imagens.

Abaixo, as figuras avaliadas na primeira etapa da pesquisa. Foram colocadas lado a

lado imagens do simulador imagens reais para a avaliação.

4.1.1 Cracks em barro

Para geração das imagens de barro, utiliza-se os seguintes parâmetros:

EspVein: 0.8

NumIteration: 100

VeinRadius: 0.4

Page 37: Aplicação do Algoritmo de Prusinkiewicz

37

KillDistance: 0.08

NumLinesGrid: 20

NumColunsGrid: 20

DrawNodes: false

BackGround: barro.bmp ou false (quando o fundo é branco).

Mostra-se as comparações entre cracks de barro do simulador e reais da

Figura 30 até a Figura 45.

Imagens do Simulador Imagens Reais

Figura 30

Figura 315

Figura 32

Figura 336

5Disponível em

http://www.maureenwilksdigitalfineart.com/Original%20Photos/Mud%20Cracks%2002.JPG.

6Disponível em

http://2.bp.blogspot.com/_cXPcg6ZxQ7U/SLQJTfIiAsI/AAAAAAAAAmY/R8SYKU0_6Kc/s400/cracks.jp

g

Page 38: Aplicação do Algoritmo de Prusinkiewicz

38

Imagens do Simulador Imagens Reais

Figura 34

Figura 357

Figura 36

Figura 378

Figura 38

Figura 399

7Disponível em http://upload.wikimedia.org/wikipedia/commons/2/2c/Desiccation-cracks_hg.jpg

8Disponível em http://www.pensionriskmatters.com/uploads/image/Cracks.jpg

9Disponível em http://neriah-stock.deviantart.com/art/Nasty-Cracks-IV-82744169

Page 39: Aplicação do Algoritmo de Prusinkiewicz

39

Imagens do Simulador Imagens Reais

Figura 40

Figura 4110

Figura 42

Figura 4311

10

Disponível em http://www.public-domain-photos.com/free-stock-photos-3/miscellaneous/cracks-in-

dry-mud-2.jpg.

11Disponível em http://pespmc1.vub.ac.be/Photos/MudCracks.jpg

Page 40: Aplicação do Algoritmo de Prusinkiewicz

40

Imagens do Simulador

Imagens Reais

Figura 44

Figura 4512

Figuras 30 a 45: comparações entre imagens de cracks em barro do

simulador e imagens reais

4.1.2 Cracks em vidro

Com os parâmetros geram-se as imagens de cracks de vidro representadas

nas Figuras 46, 48, 50 e 52:

EspVein: 2

NumIteration: 100

VeinRadius: 0.9

KillDistance: 0.08

NumLinesGrid: 20

NumColunsGrid: 20

DrawNodes: false

BackGround: false

As Figuras 47, 49, 51 e 53 mostram as imagens reais de cracks de vidro que

foram utilizadas na comparação.

12

Disponível em http://pespmc1.vub.ac.be/Photos/HumiditySeepingCracks1405-W.jpg

Page 41: Aplicação do Algoritmo de Prusinkiewicz

41

As notas que foram atribuídas pelos participantes às imagens de vidro

utilizadas nessa pesquisa inicial, mostraram que essa era a maior deficiência do

modelo, fazendo com que na segunda parte da pesquisa o tenha sido incluído o

padrão de circunferência.

Imagens do Simulador Imagens Reais

Figura 46

Figura 4713

Figura 48

Figura 4914

13

Disponível em http://www.faqs.org/photo-dict/photofiles/list/2134/2794cracks.jpg.

14Disponível em

http://image.shutterstock.com/display_pic_with_logo/98964/98964,1245494257,3/stock-photo-there-is-

a-broken-car-glass-of-windscreen-with-hole-in-picture-center-32348800.jpg

Page 42: Aplicação do Algoritmo de Prusinkiewicz

42

Imagens do Simulador Imagens Reais

Figura 50

Figura 5115

Figura 52

Figura 5316

Figuras 46 a 53: comparações entre imagens de cracks em vidro do

simulador e imagens reais

4.1.3 Cracks em concreto

Para imagens de cracks de vidro utilizam-se os seguintes parâmetros:

NumIteration: 100

VeinRadius: 0.4

KillDistance: 0.08

15

Disponível em

http://www.istockphoto.com/file_thumbview_approve/9820572/2/istockphoto_9820572-broken-car-

glass-of-windscreen.jpg

16Disponível http://farm4.static.flickr.com/3039/2312963468_15636583df.jpg.

Page 43: Aplicação do Algoritmo de Prusinkiewicz

43

NumLinesGrid: 7

NumColunsGrid: 20

DrawNodes: false

BackGround: false

Com esses parâmetros, consegue-se gerar as Figuras 54, 56 e 58. As Figuras

55, 57 e 59 mostram comparativos com imagens de cracks de concreto reais.

Imagens do Simulador Imagens Reais

Figura 54

Figura 5517

Figura 56

Figura 5718

17

Disponível em http://th.physik.uni-frankfurt.de/~hossi/Bilder/BR/cracks_small.jpg.

18Disponível em

http://primerestorationinc.com/images/ConcreteRestoration&Repair/CrackedConcreteSample.jpg

Page 44: Aplicação do Algoritmo de Prusinkiewicz

44

Imagens do Simulador Imagens Reais

Figura 58

Figura 5919

Figuras 54 a 59: comparações entre imagens de cracks em concreto do

simulador e imagens reais

Como resposta às imagens de barro, houve média igual a 3,17, o número que

mais se repetiu (moda) foi 4, e o desvio padrão foi 1,00. Isso significa que os

resultados foram satisfatórios, concentrando-e entre os números 2,17 (imagens

parcialmente semelhantes) e 4,17 (muito semelhantes).

Como resposta às imagens de crack em vidro, tivemos uma média de 2,46,

com uma moda de 2 e desvio padrão de 1,21; foi a média de notas mais baixa,

porém foi também a de maior desvio padrão, ou seja, houve maior discordância

entre as respostas dadas. As avaliações concentraram-se entre 0,71 e 4,71, ou seja,

de imagens totalmente diferentes a muito semelhantes,

Para as imagens de concreto, tivemos uma maior aceitação, com média de

3,70, moda de 4 e desvio padrão de 1,15. As avaliações variaram de 2,55 a 4,85,

sendo avaliadas como parcialmente semelhantes a muito semelhantes.

4.2 Survey Final

Após analisarmos as respostas dadas sobre as imagens do simulador na

primeira fase da pesquisa, foram feitas alterações no simulador, com o intuito de

19

Disponível em http://www.elated.com/res/Image/imagekits/137/cracks-in-rocks-2.jpg.

Page 45: Aplicação do Algoritmo de Prusinkiewicz

45

deixar as imagens mais realistas. À essa segunda pesquisa, 38 participantes

responderam entre os dias 06 a 19 de junho de 2010, às mesmas questões feitas

anteriormente. A seguir, colocamos as imagens que foram enviadas por email para

análise dos participantes da pesquisa.

Para melhorar as imagens geradas, foram incluídos os parâmetros

NumColumnsGrid (para geração de imagens com número de colunas diferente do

número de linhas), LineGrowth (para engrossar a linha pai cada vez que ele tiver um

filho) e DrawConnections (para gerar o padrão de ilhas entre os nodos filhos).

4.2.1 Cracks em barro

Para geração das Figuras 60, 62, 64, 66 e 68 mostradas a seguir, foram

utilizados os seguintes parâmetros:

EspVein: 0.8

NumIteration: 100

VeinRadius: 0.4

KillDistance: 0.08

NumLinesGrid: 20

NumColunsGrid: 20

DrawNodes: false

BackGround: marrom.bmp, cinza.bmp ou bege.bmp

LineGrowth: 0.5

DrawConnections: false

ClosePoints: false

As Figuras 61, 63, 65, 67 e 69 são as imagens reais selecionadas para

comparação. As referências bibliográficas são repetidas a partir daqui porque as

imagens reais utilizadas na segunda parte do survay são as mesmas da primeira

parte.

Page 46: Aplicação do Algoritmo de Prusinkiewicz

46

Imagens do Simulador Imagens Reais

Figura 60

Figura 6120

Figura 62

Figura 6321

20

Disponível em

http://www.maureenwilksdigitalfineart.com/Original%20Photos/Mud%20Cracks%2002.JPG.

21Disponível em

http://2.bp.blogspot.com/_cXPcg6ZxQ7U/SLQJTfIiAsI/AAAAAAAAAmY/R8SYKU0_6Kc/s400/cracks.jp

g

Page 47: Aplicação do Algoritmo de Prusinkiewicz

47

Imagens do Simulador Imagens Reais

Figura 64

Figura 6522

Figura 66

Figura 6723

22

Disponível em http://www.pensionriskmatters.com/uploads/image/Cracks.jpg.

23Disponível em http://neriah-stock.deviantart.com/art/Nasty-Cracks-IV-82744169.

Page 48: Aplicação do Algoritmo de Prusinkiewicz

48

Imagens do Simulador Imagens Reais

Figura 68

Figura 6924

Figuras 60 a 69: comparações entre as novas imagens de cracks em

barro do simulador e imagens reais

4.2.2 Cracks em vidro

Para geração das Figuras 70, 72 e 74 mostradas a seguir, foram utilizados os

seguintes parâmetros:

EspVein: 0.3

NumIteration: 80

VeinRadius: 100

KillDistance: 0.02

NumLinesGrid: 20

NumColunsGrid: 20

DrawNodes: false

BackGround: C:\ vidro.bmp

LineGrowth: 0 (para linhas pretas) ou 0.5 (para linhas brancas)

DrawConnections: false (para linhas pretas) ou true (para linhas

brancas)

ClosePoints: false

24

Disponível em http://pespmc1.vub.ac.be/Photos/MudCracks.jpg.

Page 49: Aplicação do Algoritmo de Prusinkiewicz

49

Para comparação com as imagens do simulador, foram utilizadas as Figuras

71, 73 e 75.

Imagens do Simulador Imagens Reais

Figura 70

Figura 7125

Figura 72

Figura 7326

25

Disponível em http://www.faqs.org/photo-dict/photofiles/list/2134/2794cracks.jpg.

Page 50: Aplicação do Algoritmo de Prusinkiewicz

50

Imagens do Simulador Imagens Reais

Figura 74

Figura 7527

Figuras 70 a 75: Comparações entre as novas imagens de cracks em

vidro do simulador e imagens reais

4.2.3 Cracks em concreto

Para geração das Figuras 76, 78 e 80 mostradas a seguir, foram utilizados os

seguintes parâmetros:

EspVein: 1

NumIteration: 100

VeinRadius: 0.4

KillDistance: 0.08

26

Disponível em

http://image.shutterstock.com/display_pic_with_logo/98964/98964,1245494257,3/stock-photo-there-is-

a-broken-car-glass-of-windscreen-with-hole-in-picture-center-32348800.jpg.

27Disponível em

http://www.istockphoto.com/file_thumbview_approve/9820572/2/istockphoto_9820572-broken-car-

glass-of-windscreen.jpg.

Page 51: Aplicação do Algoritmo de Prusinkiewicz

51

NumLinesGrid: 7

NumColunsGrid: 7

DrawNodes: false

BackGround: C:\ concreto.bmp

LineGrowth: 1.0

DrawConnections: false

DrawPoints: false

Para comparação, utiliza-se as Figuras 77, 79 e 81.

Imagens do Simulador Imagens Reais

Figura 76

Figura 7728

Figura 78

Figura 7929

28

Disponível em http://th.physik.uni-frankfurt.de/~hossi/Bilder/BR/cracks_small.jpg.

29Disponível em

http://primerestorationinc.com/images/ConcreteRestoration&Repair/CrackedConcreteSample.jpg.

Page 52: Aplicação do Algoritmo de Prusinkiewicz

52

Imagens do Simulador Imagens Reais

Figura 80

Figura 8130

Figuras 73 a 78: comparações entre as novas imagens de cracks em

concreto do simulador e imagens reais

Para melhorar a aparência das imagens de barro, foi utilizado o parâmetro

LINEGROWTH, que engrossa a linha pai a cada filho que ele tem. Com a utilização

desse parâmetro, a média baixou de 3,17 para 2,71, sendo o valor 2 o número mais

repetido e tendo 1,25 como desvio padrão. Isso significa que as notas concentraram-

se entre 1,46 e 3,96 variando de “totalmente diferentes” a “muito semelhantes”.

Pode-se supor, analisando as respostas, duas coisas: ou o parâmetro que engrossa

a linha pai não ficou bem colocado nesse tipo de crack, ou as imagens de vidro e

concreto ficaram melhores que anteriormente, fornecendo uma nova referência de

avaliação para as pessoas que responderam,e baixando o conceito para os cracks

de barro.

Em relação às imagens de crack em vidro, com a utilização do parâmetro

DRAWCONNECTIONS para gerar o padrão de circunferência ao redor dos cracks.

Dessa maneira, a média subiu de 2,46 na primeira pesquisa para 3,45, sendo 4 o

valor mais repetido e tendo um desvio padrão de 1,11. A maior concentração de

notas ficou entre os valores 2,34 e 4,56, sendo considerados semelhantes à muito

semelhantes.

Quanto às imagens de concreto, representadas nas Figuras 73 a 78,

continuaram sendo as imagens melhor avaliadas, com média de 3,97, moda igual a

30

Disponível em http://www.elated.com/res/Image/imagekits/137/cracks-in-rocks-2.jpg.

Page 53: Aplicação do Algoritmo de Prusinkiewicz

53

4 e desvio padrão de 0,88. As avaliações variaram de 3,09 a 4,86, sendo avaliadas

como semelhantes a muito semelhantes.

Mostram-se dois gráficos, Figuras 59 e 60, onde visualiza-se uma melhora

significativa nas avaliações dos padrões de vidro e concreto, e também uma

diferença observada no padrão de barro.

Figura 82: Média de avaliação atribuída aos cracks

Page 54: Aplicação do Algoritmo de Prusinkiewicz

54

5 CONCLUSÃO

Nesse trabalho foi proposto um modelo para simulação de geração de

cracking surface em jogos. Aspectos como apresentação visual e similaridade com

cracks reais são abordados.

O custo computacional melhorou ao remover-se o algoritmo dart throwing. Ao

utilizar-se de um algoritmo para dividir a área de distribuição das auxinas como uma

malha de linhas horizontais e verticais, houve melhora significativa n a performance

de geração das imagens.

A partir de pesquisas iniciais realizadas com algumas pessoas, descobriu-se

que os padrões gerados pelo simulador precisavam ser aprimorados para que

pudessem reproduzir fielmente imagens de cracks. A pesquisa e o desenvolvimento

baseados no algoritmo de Prusinkiewicz [Runions, 2005] mostraram que é possível a

utilização desse algoritmo para uso em geração de cracks surface em jogos, mas

para tanto foi necessário um trabalho de aprimoramento e otimização.

Uma das melhorias que foram feitas em relação à proposta dessa monografia,

foi fazer com que as ramificações fossem desenhadas com linhas em substituição

aos pontos. Outra melhoria implementada e que gerou bastante diferença visual foi o

acréscimo do parâmetro LINEGROWTH, que permite que sejam gerados cracks com

linhas pais mais grossas que as linhas filho. Também o parâmetro

DRAWCONNECTIONS permitiu que fossem gerados padrões de cracks de vidro

bastante semelhantes com os reais.

Ao iniciar-se esse trabalho, tinha-se a hipótese de que o algoritmo de

Prusinkiewicz [Runions, 2005] poderia ser utilizado para geração de cracks em

materiais como vidro, barro e concreto. Concluímos que a adaptação desse

algoritmo para a geração de cracks é viável, e que com as modificações estruturais

que foram implementadas, o modelo referenciado pôde ser utilizado para simulação

de cracking surface em jogos.

Page 55: Aplicação do Algoritmo de Prusinkiewicz

55

REFERÊNCIAS

[Bohn, 2005] Bohn, S; Platkiewicz, J; Andreotti, B; Adda_Bedia, M; Couder, Y. Hierarchical crack pattern as formed by successive domain divisions. II From disordered to deterministic behavior. Physical Review E 71, 2005.

[Cook, 1986] Cook, R. L.. Stochastic sampling in computer graphics. In: ACM Transaction on Graphics 5, 1, pp 225–240, 1986.

[de Berg, 2008] de Berg, Mark et al. Computational Geometry: Algorithms and Applications, 3rd Edition, pp 99-101. Springer, 2008.

[Gobron, 2000] Gobron, Stéphane; Chiba, Norishige. Crack pattern simulattion based on 3D surface cellular automata. In: Proc. Of the International Conference on Computer Graphics, pp. 153-162, 2000.

[Iben, 2006] Iben, Haylen N.; O‟Brien, James F.. Generating Surface Crack Patterns. In: ACM SIGGRAPH Symposium on Computer Animation, 2006.

[Lorensen, 1987] Lorensen, William E; Cline, Harvey E.: Marching Cubes: A high resolution 3D surface construction algorithm. In: Computer Graphics, Vol. 21, Nr. 4, July 1987

[Martinet, 2004] Martinet, Aurélien; Galin, Eric; Desbenoit, Brett; Akkouche, Samir; Alpes, Artis–GRAVIR INRIA Rhône; Lyon 1, LIRIS CNRS UCB. Procedural Modeling of Cracks and Fratures. In: International Conference on Shape Modeling and Applications, pp 346-349, 2004.

[Mitchell, 1987] Mitchell, D. 1987. Generating antialiased images at low sampling densities. In Computer Graphics, vol. 21, 65–78. (Proceedings of SIGGRAPH 1987)

[Rodrigues, 2009] Rodrigues, Rafael; Paravisi, Marcelo; Bicho, Alessandro; Jung, Claudio; Magalhaes, Leo Pini; Musse, Soraia. Tree Paths: A New Model for Steering Behaviors. In IVA 2009 – Intelligent Virtual Agents, Amsterdam.

[Runions, 2005] Runions, Adam; Fuhrer, Martin; Lane, Brendan; Federl, Pavol; Rolland−Lagan, Anne−Gaëlle; Prusinkiewicz, Przemyslaw. Modeling and visualization of leaf venation patterns. ACM Transactions on Graphics 24(3), pp. 702−711, 2005.

[Shen, 2007] Shen, Chen; Shah, Apurva. Extracting and parametrizing temporally coherent surfaces from particles. In: ACM SIGGRAPH 2007 Sketches.

[Smith, 2003] Smith, Colin; Prusinkiewicz, Przemyslaw; Samavati, Faramarz. Local Specification of Surface Subdivision Algorithms. In: Proceedings of AGTIVE 2003, vol. 3062 of Lecture Notes in Computer Science, pp 313-327.

[Smith, 2006] Smith, Colin. On Vertex-Vertex Systems and Their Use in Geometric and Biological Modelling. Tese submetida à Universidade de Calgary como requisito parcial para obtenção de doutorado em filosofia, 2006.