17 de maio de 2013

Construindo e renderizando SimCity

Você é um intusiasta de jogos? Tem interesse em modelação 3D ou até mesmo em construção de jogos? Pois este tópico de blog é para você. Confira o que Ryan Ingram - desenvolvedor de gráficos - postou no blog de SimCity.

------

Oi a todos - eu sou Ryan Ingram, Desenvolvedor de Gráficos em SimCity. Estou animado para apresentar a nossa tecnologia de renderização de construção, a parte do jogo que eu, pessoalmente, derramei meu coração e alma ao longo dos últimos anos. Estou orgulhoso de como ele se parece e espero que você aprecie este espreitar os mecanismos de prestação de SimCity.



Como é que vamos chegar lá? Bem, tudo começa com triângulos. Um mil, duzentos e vinte triângulos, para ser específico.





Não há muito para olhar ainda. Vamos corrigir isso.


Aqui estão as páginas de textura que a equipe de arte juntos para esta classe de edifício. Eles têm todos os elementos arquitetônicos necessários para um estilo de construção particular.





Para obter o melhor desempenho, re-utilizar a mesma fachada set textura em todos os edifícios desse estilo. Isso nos permite prestar muitos edifícios no mesmo lote, que é crucial dado apenas quantos edifícios pode haver em sua cidade.A primeira textura é o mapa de cores. Usamos uma paleta nele. Paletização é uma técnica que permite a reutilização da mesma textura com todos os tipos de cores diferentes. As cores podem ser alteradas em diferentes construções, ou mesmo em diferentes partes do mesmo edifício.A segunda textura é um mapa normal. Você pode tipo de ver a forma da textura no mapa normal, já, e ele é usado exatamente para isso.Veja como este edifício parece antes e depois de ter sido coloridas com um de seus possíveis paletas:



Eu uso o mapeamento interior para o interior dos edifícios - você pode ver muitos exemplos de mapeamento de interior em vídeos noite da Creative Director Oceano Quigley, onde as luzes se acendem arranha-céus em seu interior. A construção é dividido em quartos e I tornar a aparência do chão, de tecto, paredes laterais e paredes posteriores em cada quarto.



As áreas cinzentas piegas são realmente muitas e muitas salas muito pequenas - a equipe de arte não sintonizar nessas áreas, uma vez que não têm janelas e não são visíveis.Colocando tudo isso junto, um edifício finalmente emerge! Um bonito procurando apartamento, mas ele está começando a olhar reconhecível.



O próximo passo é a iluminação. Usando o mapa normal a descobrir ângulos de reflexão, o nosso modelo de luz nos dá a contribuição da luz atmosférica (luar, neste caso), juntamente com as luzes do próprio edifício. Isto também inclui o nosso oclusão de ambiente e sombreamento.



Juntando tudo, ele está começando a parecer uma espécie de bem:



Você pode ver um belo realce especular sobre as janelas deste ângulo.Nós não estávamos satisfeitos com apenas isso, porém. As escadas sentiu plana, e as janelas e portas estão faltando alguma coisa. Então, se você estiver executando em nossa especificação recomendada (iluminação "Medium" ou superior), é hora de trazer as grandes armas: mapeamento alívio.Aqui está o que eu quero mostrar:



Nós não queremos armazenar um grande malha de resolução para cada edifício embora - para uma coisa, que é um monte de memória vértice, e é um desperdício de repetir a mesma malha de tijolos, escadas, janelas, portas, e assim por diante. Não só isso, mas armazenar geometria altamente detalhado torna muito mais difícil de dimensionar a memória usar para baixo para máquinas de menor especificação.Em vez disso, mantivemos todos os dados em uma textura para que uma malha de alta resolução podem ser reconstruídos em tempo real. O apartamento malha baixa polígono é ray tracing em bonito geometria de alta resolução, com centenas de milhares de pequenos polígonos virtuais.Temos um modo de depuração que me permite ter a textura e re-construir a malha 3D, que foi originalmente exportados. Aqui eu tomei a porta no canto inferior direito da textura original e transformou-o em uma verdadeira malha 3D:



Este não é apenas um truque de iluminação. Por exemplo, se estamos olhando para a porta do chão, você pode ver a parte de baixo do batente da porta:



Eis que de tela anterior com mapeamento alívio ligado. Note-se que a fachada do prédio possui relevo da superfície real.



Estas duas caixas de zoom estão mostrando exatamente no mesmo local em relação à câmera e do polígono de construção. O centro de um "plano" mostra a janela, com o mapeamento de relevo, mas vê através da janela do recesso para a borda da porta.Então, para encontrar o alvo, nós vamos para a etapa ao longo desse raio do ponto de vista, pedindo a malha "o que você olha como aqui?" Há uma troca, no entanto - a consulta a malha leva tempo, por isso queremos fazê-lo como algumas vezes quanto possível.



Para facilitar isso, nós pré-calculado um cone para cada ponto da malha. Fizemos o cone grande o suficiente para se cruzam com a geometria em torno dele, e talvez um pouco mais. É um cone de "cobertura garantida", porque nenhum raio descendo e indo pelo centro-line do cone pode passar todo o caminho através da malha de superfície e sai do outro lado sem bater o interior do cone.


Neste caso, o cone apenas mal intersecta a superfície. Claro, queremos que os mais amplos cones que podemos fazer - cones mais amplas permitem passos maiores, tornando a técnica mais eficiente. Grandes passos significa menos amostras são necessários para encontrar o alvo, fazendo com que o shader menos desgastante para a sua placa gráfica.Uma vez que o raio vai dentro da malha, temos tanto o nosso velho ponto que está do lado de fora e do novo ponto que está no interior. Agora sabemos que a superfície da malha está em algum lugar entre eles. Para saber exatamente onde a superfície é, usamos uma busca binária. Com cada passo, dividiu-se o espaço entre os pontos no meio, mantendo sempre um ponto no interior e o outro exterior. Isso restringe o espaço muito rápido, leva apenas alguns passos para chegar o mais próximo à superfície como nós precisamos.Isto é o que todo o processo é semelhante:




Ampliada, notar que o centro do cubo de luz azul é quase exatamente na borda da superfície:





Agora, a partir do topo, o alvo foi atingido exatamente no lugar certo.




Aqui está outro exemplo - desta vez nós funcionamos fora dos testes de cone muito antes de chegar a borda, portanto, deram a esse ponto. Isso pode levar a pequenos objetos, mas geralmente não é perceptível no jogo. Ele vai olhar como as curvas de superfície para a ponta, em vez de ser um corte limpo.



A coisa surpreendente é que sua placa de vídeo vai fazer todo este cálculo para cada pixel de cada edifício no jogo, cada frame.


É isso aí - Espero que tenham gostado de ler sobre como podemos tornar edifícios no jogo.