• Nenhum resultado encontrado

Compara¸c˜ ao de algoritmos de renderiza¸c˜ ao de terreno

4 O Motor Gr´ afico

4.4 Estruturas para Renderiza¸c˜ ao do Terreno

4.4.4 Compara¸c˜ ao de algoritmos de renderiza¸c˜ ao de terreno

Como foi notado, o terreno ´e uma parte muito delicada na maioria de cen´arios abertos em ambientes 3D, como ´e o caso de nosso editor de cidades. Portanto a implementa¸c˜ao de algoritmos eficientes se mostrou necess´aria neste contexto. Entretanto n˜ao foi abordado, at´e ent˜ao, o porquˆe da implementa¸c˜ao de trˆes algoritmos diferentes que atendam ao mesmo prop´osito.

Nesta se¸c˜ao explanaremos o porquˆe da implementa¸c˜ao de diversos algoritmos de ren- deriza¸c˜ao de terreno, analisando os pr´os e contras de cada uma das implementa¸c˜oes e entrando em certos detalhes da implementa¸c˜ao necess´arios ao nosso entendimento. Pri- meiramente, analisaremos o algoritmo que batizamos de Trivial e posteriormente os outros algoritmos mais complexos.

4.4.4.1 Algoritmo Trivial

Apesar de sua simplicidade vejamos nesta se¸c˜ao as caracter´ısticas que, apesar de poucas e simples, tornam o algoritmo Trivial compar´avel com os outros algoritmos listados a seguir. Entre as virtudes do algoritmo trivial podemos citar:

• Simplicidade.

• Por n˜ao ter mudan¸ca da representa¸c˜ao geom´etrica do terreno durante o processo de renderiza¸c˜ao, permite o uso total de mecanismos de acelera¸c˜ao por hardware. • Permite, atrav´es do ajuste do passo no mapa, a sua adapta¸c˜ao `as capacidades de-

sejadas para a m´aquina.

• Recomendado para terrenos suaves, sem rugosidades. J´a entre os defeitos podemos enumerar:

• Falta da adaptibilidade ao terreno:

– N˜ao recomendado para terrenos n˜ao suaves, com regi˜oes ´ıngremes ou rugo- sas, pois tende a desprezar os detalhes por conta da quantidade de v´ertices ignorados pelo passo do algoritmo.

– Se o passo for extremamente pequeno, como a unidade do mapa por exemplo, n˜ao reduz a quantidade de triˆangulos necess´aria `a renderiza¸c˜ao, mas preserva os detalhes do mapa.

– Terreno com regi˜oes tanto suaves quanto outras regi˜oes extremamente detalha- das n˜ao podem sequer ser adaptados a um passo espec´ıfico.

– Nenhum c´alculo ´e feito em tempo de execu¸c˜ao para adaptar o passo ao tipo de terreno.

• N˜ao leva em considera¸c˜ao a posi¸c˜ao do usu´ario no espa¸co e, por isso, n˜ao otimiza regi˜oes distantes ou escondidas de um terreno grande.

4.4.4.2 Algoritmo R¨ottger

O algoritmo de R¨ottger, conforme j´a visto, ´e um algoritmo baseado em uma Quad Tree, assim como seu antecessor, o algoritmo de Lindstrom, dispon´ıvel em (LINDSTROM, 1996). Esta referˆencia define um benchmark para compara¸c˜ao de algoritmos de renderiza¸c˜ao de terreno. Contudo, a grande diferen¸ca entre os dois algoritmos ´e que o algoritmo de R¨ottger atinge a mesma eficiˆencia do de Lindstrom, melhorando seus pontos fracos como a alta utiliza¸c˜ao de mem´oria, pois emprega estruturas de dados bem mais enxutas, e a complexidade do algoritmo final.

Entre as virtudes deste algoritmo podemos enumerar: • Redu¸c˜ao do numero de pol´ıgonos a ser renderizado.

– Esta redu¸c˜ao leva em conta a complexidade do terreno, envolvendo quest˜oes como n´ıveis aspereza e mudan¸cas abruptas de altitude a exemplo do que ocorre em penhascos e desfiladeiros.

• Mudan¸ca cont´ınua e suave entre v´arios n´ıveis de detalhamento do terreno.

– Este item ´e excepcionalmente importante para que se mantenha o realismo do resultado final, j´a que o usu´ario n˜ao deveria notar a mudan¸ca do terreno entre as mudan¸cas da estrutura final a ser renderizada.

– Isto s´o ´e poss´ıvel por conta da f´acil inclus˜ao no algoritmo de t´ecnicas de Geo- morphing.

• Permite a gera¸c˜ao de n´ıveis de detalhamento do terreno em tempo real. Isto, entre- tanto, n˜ao foi inserido no nosso motor por n˜ao vir ao contexto do tipo de aplica¸c˜ao desejada.

• Pouca mem´oria necess´aria para rodar o algoritmo. S´o ´e necess´ario carregar uma matriz do tamanho do mapa de alturas e uma matriz do mesmo tamanho com elementos de 1 byte cada. Esta ´ultima matriz servir´a para guardar o fator necess´ario para aferi¸c˜ao do n´ıvel de profundidade da Quad Tree indispens´avel `a adaptabilidade do algoritmo, bem como a aspereza do v´ertice atual.

• Permite acelera¸c˜ao por hardware com o uso de uma estrutura de OpenGL chamada strip vertex. Esta estrutura permite que uma certa quantidade de v´ertices seja mandada em cascata para o pipeline gr´afico.

• N˜ao pode renderizar o terreno num detalhe maior do que sua matriz da Quad Tree. O que no nosso caso, n˜ao ´e um grande empecilho, uma vez que que nosso detalhe m´aximo ´e o do mapa de alturas.

• Apesar de termos anteriormente citado a mem´oria como uma vantagem do al- goritmo. Ela se perde quando adicionamos ao algoritmo caracter´ısticas de Geo- morphing ou Propaga¸c˜ao de erros dos v´ertices pais para os filhos. Com estes dois mecanismos o gasto de mem´oria do algoritmo ´e aumentado em trˆes vezes, sendo que

1

3 disso ´e mem´oria gasta inutilmente em nome da eficiˆencia.

Assim chegamos ao fim da explana¸c˜ao do algoritmo com s´erias cr´ıticas mas tamb´em tornando claras certas caracter´ısticas desejadas que ele oferece, no contexto do nosso motor.

4.4.4.3 Algoritmo ROAM

Por fim chegamos `a an´alise algoritmo de renderiza¸c˜ao de terrenos ROAM. Este algo- ritmo atende a todos os requisitos de (LINDSTROM, 1996) e tamb´em oferece Geomorphing. De uma maneira geral, as caracter´ısticas do algoritmo podem ser descritas pelos se- guintes pr´os e contras. Entre os pr´os podemos citar:

• Gera uma malha ´otima com o menor n´umero de triˆangulos poss´ıvel no terreno. • Imperfei¸c˜oes da malha podem ser concertadas sem nenhuma estrutura auxiliar, como

´e o caso no algoritmo de R¨ottger em que um bit ´e utilizado com este fim. Tudo ´e feito com a estrutura ligada de triˆangulos, a ´arvore bin´aria.

• Adaptabilidade do algoritmo `a taxas de frame desejadas; esta adapta¸c˜ao ´e feita em tempo real pelo algoritmo.

Ap´os esta r´apida avalia¸c˜ao, poder´ıamos, a princ´ıpio, pensar que este algoritmo ´e o melhor entre os algoritmos citados. Contudo isto n˜ao ´e real, pois o algoritmo ROAM apresenta os seguintes problemas:

• Implementa¸c˜ao mais complexa que os algoritmos que s˜ao baseados em Quad Tree. • N˜ao ´e adapt´avel aos mecanismos de acelera¸c˜ao por hardware existentes. Isto acon-

tece por que exigiria um tempo muito grande de CPU adapt´a-lo `a estruturas como strip de triˆangulos ou fans.

• N˜ao ´e um algoritmo bem documentado, dado que toda sua teoria ´e fornecida de forma resumida em um pequeno artigo, com poucos detalhes da implementa¸c˜ao. Assim chegamos ao fim da an´alise do algoritmo ROAM, que apesar de ter suas li- mita¸c˜oes tamb´em tem suas qualidades, o que justifica nossa decis˜ao de termos `a disposi¸c˜ao v´arias implementa¸c˜oes diferentes de algoritmos de renderiza¸c˜ao de terreno no motor. Gos- tar´ıamos tamb´em de deixar claro que, por conta da complexidade de certos ´ıtens sugeridos em (DUCHAINEAU, 1997), a implementa¸c˜ao presente no motor ´e uma vers˜ao simplificada do algoritmo original.