Grafo de cena
# Grafo de cena

Um grafo de cena é uma estrutura de dados comumente usada por aplicações de edição de gráficos vetoriais, jogos e motores de jogo modernos. Exemplos de tais programas incluem AutoCAD, Adobe Illustrator, OpenSceneGraph e CorelDRAW.
Um grafo de cena é uma coleção de nós em uma estrutura de grafo ou árvore. O grafo de cena armazena todas as informações necessárias para que uma cena de computação gráfica possa ser montada e renderizada pelo gerenciador gráfico. A estrutura é geralmente composta de nós interligados na forma de árvore, portanto, com uma única raiz e sem ciclos. Utiliza-se um grafo de cena para agilizar as rotinas de renderização, separando os objetos em grupos e sub-grupos de forma a permitir que objetos mais complexos sejam formados por objetos simples. Com este agrupamento é possível manipular um componente visual complexo como um único objeto, simplificando o código e obtendo um melhor desempenho computacional.
Cada nó de um grafo de cena pode ser representado por um grupo de outros nós ou um objeto, que, por sua vez, pode ser um conjunto de pontos ou uma imagem. O conjunto de pontos, geralmente chamado de malha, possui informações suficientes para que seja criado um objeto completo na cena. Por exemplo, um malha de círculo, é computada tendo, como entrada, o ponto central, o raio e a textura ou a cor do círculo. Caso seja um polígono, ao invés de um ponto central e um raio é utilizado um conjunto de pontos e faces, onde cada ponto é relacionado com seus vizinhos criando a face do objeto. Objetos animados, imagens 2D, luzes e câmeras também são representados como nós no grafo de cena.
O grupo difere do nó pois a sua função não é desenhar alguma imagem, mas sim controlar objetos próximos ou que atuam em conjunto no espaço gráfico. Quando um único grupo é alterado, o gerenciador gráfico não precisa calcular toda a cena para ser mostrada na tela, o único objeto afetado é o grupo e, portanto, só ele e seus sub-grupos serão redesenhados.
Para serem utilizados com o máximo de vantagem, os nodos devem possuir informações espaciais e semânticas sobre os objetos que eles representam. Os nós de um grafo de cena podem receber instruções de rotação, translação e escala. Cada uma dessas instruções é executada no nó indicado e em toda a sua árvore descendente de nós. Por exemplo, em jogos de primeira pessoa é comum ter um grupo chamado de personagem, que possui todo o desenho do personagem em conjunto com uma câmera, que imita o olho do personagem. Se o personagem se mover, a câmera deve seguí-lo, então, coloca-se a câmera dentro do grupo do personagem e, ao rotacionar ou mover, o evento é computado para o grupo inteiro, incluindo a câmera.
Para ganhos de desempenho computacional, o grafo de cena implementa o corte de visão, ou em inglês, culling. Esta característica permite ao renderizador conhecer o estado visual do nó e se não puder ser visto pelo jogador, o gerenciador gráfico irá ignorá-lo, assim como seus filhos. Uma boa programação sobre o grafo de cena pode aumentar consideravelmente a velocidade de um jogo.