Qual é uma maneira possível de definir orçamentos de conteúdo (por exemplo, contagem de polígonos) para o nível de conteúdo em um título 3D?


13

Ao responder a essa pergunta por swquinn , a resposta levantou uma pergunta mais pertinente para a qual eu gostaria de ouvir respostas. Vou postar nossa própria estratégia (prometo não aceitá-la como resposta), mas gostaria de ouvir outras pessoas.

Especificamente: como você define um orçamento razoável para sua equipe de conteúdo. Geralmente, uma das primeiras perguntas feitas em um desenvolvimento é: qual é o nosso orçamento de polígono? É claro que hoje em dia é raro que a contagem de vértices / polissomos seja o fator limitador; em vez disso, a complexidade do sombreador, a taxa de preenchimento e a complexidade da iluminação entram em cena.

O que a equipe de conteúdo deseja são alguns números / limites rígidos para trabalhar, de modo que eles tenham uma expectativa razoável de que seu conteúdo, assim que entrar no mecanismo, não será muito pesado. Dado que 'depende' não é uma resposta particularmente útil, eu gostaria de ouvir uma estratégia que me permita fornecer limites viáveis ​​sem ser a) enganosa ou b) errada.


1
Isso é mais "pré-produção" do que "coisa de produção".
Patrick Hughes

Respostas:


5

Pelo meu entendimento, é muito mais fácil reduzir a complexidade de um modelo do que adicionar detalhes a um modelo que foi desenvolvido e adaptado. Sei que algumas empresas tiram vantagem disso agrupando ativos muito detalhados e diminuindo-os dependendo da situação.

A Valve faz isso com seus NPCs. Os NPCs são modelados em detalhes extremos, sem qualquer tipo de mapeamento, e os escalam para um nível aceitável pela tecnologia atual e truques, como várias técnicas de mapeamento aplicadas com base em modelos detalhados (ou mesmo criados automaticamente).

Isso também ajuda nas provas futuras, pois você nunca precisará recriar os ativos, apenas alterá-los para cada novo projeto. Isso também tem a vantagem de que não há necessidade de esperar que uma equipe realize benchmarking com contexto específico antes que os ativos possam começar a ser desenvolvidos. Os artistas podem estar totalmente envolvidos desde o primeiro dia.


2
No entanto, isso não está realmente fornecendo um orçamento: "torne-o tão complexo quanto você precisar e depois o reduziremos posteriormente" é uma estratégia de produção. : - /
MrCranky

16

Ok, então nossa estratégia é:

  • Crie uma geometria de espaço reservado, aproximadamente na escala correta para o conteúdo final. Isso pode ser edifícios ou personagens. Ele não precisa se parecer com o conteúdo final, pode ser caixas / esferas / etc., mas deve ser colocado em mosaico para ter um número decente de polígonos. Se você estiver fazendo personagens, faça com que eles tenham um número representativo de ossos.
  • Como alternativa, use a geometria de outra pessoa. Se você tem um título com o nível de qualidade que está tentando alcançar, encontre uma maneira de agarrar seus modelos (talvez usando um grabber de cena do DirectX).
  • Verifique se a sua geometria possui um sombreador representativo. Se você espera misturar várias texturas, faça isso, mesmo que as texturas sejam todas de uma cor. Verifique se as texturas são resoluções não triviais, mesmo que sejam todas de uma cor.
  • Coloque um número razoável de luzes.
  • Coloque a câmera em um local realista, apontando para a maior quantidade de geometria possível (por exemplo, de pé no topo de uma colina, olhando por cima do nível)
  • Carregue a cena no seu hardware alvo mais lento e mais rápido e meça o FPS.
  • Varie as quantidades de geometria / luzes / shaders / resolução de textura para cima ou para baixo para ter uma idéia de quais são as compensações (por exemplo, você pode ter uma dúzia de luzes extras, mas precisará reduzir a contagem de poligonos pela metade).

Finalmente: seja conservador com seus números. Renderizar não é a única coisa que seu jogo terá que fazer; portanto, decida qual a proporção do quadro que você deseja gastar renderizando e faça disso o seu alvo. Por exemplo, se você deseja gastar dois terços do seu quadro na renderização a 30fps, segmente 1s / 22ms (45 fps) em seus testes.

Fora de tudo isso, você deve ser capaz de dar exemplos de cenas. Por exemplo, aqui está uma cena com polígonos de 200K, 5 luzes estáticas e não mais que 3 luzes dinâmicas por modelo, com 15 caracteres de 50K polys e 30 ossos, e roda a 60fps e ocupa 30MB de memória.


2
tl; dr: Compare você mesmo;)
Nicol Bolas

+1 Esta é realmente a única maneira de construir e medir.
23912 Patrick Hughes

Verdade? Eu esperava que houvesse uma solução mais inteligente / barata em que não tivéssemos pensado.
precisa saber é o seguinte

@MrCranky infelizmente, sim. Se você estiver usando um mecanismo existente, poderá iniciar o processo medindo dados de amostra existentes e usando-os como base para personalizar os números do seu jogo em particular - cada jogo é diferente.
22712 Patrick Hughes

4

Contagem de vértices

Eu pesquisei "Polygon Count" por mais de 15 anos. Não existe uma maneira estrita de determinar quanto é o seu limite, especialmente com software e hardware mais modernos. Os limites eram muito mais úteis em mecanismos que suportavam apenas 4.000 triângulos para um nível inteiro. Agora, você encontrará muitos objetos no ambiente do jogo que excederão isso individualmente.

O que importa em última análise é o que o mecanismo está fazendo com as faixas poligonais.

Quando o mecanismo renderiza cada modelo, as coordenadas mapeadas por UV são capturadas, a textura / material representado nos triângulos e cria tiras de triângulo. Na maioria dos casos, um ventilador de triângulo é dividido em tiras de triângulo separadas por triângulo. Isso aumenta o número de tiras de triângulo, diminuindo o desempenho.

Um excelente exemplo de consertar isso é a parte superior plana de um cilindro. Pacotes 3D geralmente montam um ventilador triangular com um vértice no centro. Eu apago as arestas e o vértice central e, em seguida, crio quadríceps na face. Isso deve triangular em uma única faixa triangular em vez de várias faixas de uma face, sem alterar a contagem de polígonos.

Tome a contagem de polígonos como um guia e cuide de como você modela e o Mapa UV da malha. Menos divisões na malha quando o mapeamento UV frequentemente pode ser mais benéfico.

Em seguida, considere o que pode ser falsificado com mapas normais. Uma face plana com muitos detalhes de caso geralmente pode ser mapeada normalmente. As curvas só precisam ser redondas onde você pode ver uma silhueta. Ao olhar para os rostos curvos de frente, você não deve notar a diferença entre o recurso de alta resolução e o recurso de resolução do jogo. A silhueta é o que faz a diferença no seu modelo quando há mapas normais. A silhueta agora pode ser modificada com o DirectX 11, usando mapeamento de mosaico e deslocamento.

Design de jogo

Considere o seguinte ao criar seu jogo:

  1. Defina o tipo de jogo (por exemplo, ação / aventura / corrida / rolagem)
  2. Defina o tipo de visualização (por exemplo, primeira pessoa / terceira pessoa / ortografia)
  3. Defina o poder computacional do seu mercado. (por exemplo, entusiasta / jogador casual)
  4. Crie um estilo visual que você deseja alcançar. Deseja que pareça, por exemplo, Crysis 2, Borderlands, Bloodforge ou Gears of War?
  5. Defina objetos importantes para o jogador. Seus objetos serão um centro de foco ou apenas um pano de fundo?
  6. As malhas visuais também são a malha de colisão?

Usando os tipos de jogo e exibição, decida qual será a profundidade de exibição. Você verá objetos distantes e com que clareza? Você está fazendo algo com visão limitada, como um atirador de corredor? (por exemplo, Gears of War) Você está fazendo algo de roaming gratuito com paisagens abertas? (por exemplo, Skyrim)

Depois de saber como deve ser, você pode pesquisar jogos semelhantes.

A animação limitará sua capacidade de aumentar a contagem de polígonos. Malhas estáticas, qualquer coisa que permaneça na mesma posição é mais barata na GPU e na CPU. Especialmente se não forem objetos de física. Para objetos de física, é possível criar cascos simples de colisão e malhas visuais complexas. Não há interação suficiente na maioria dos jogos para perceber a diferença. A animação move seu modelo tridimensionalmente, com vários ossos por vértice, misturando-se entre a ponderação de cada um deles. Isso pode ser caro no tempo da CPU, o que pode colidir com a IA e a física baseada em software. Quanto mais vértices forem afetados pelo número de ossos no modelo inteiro, menor o desempenho da CPU. Esta é a outra razão pela qual os personagens do jogo são considerados "art". É muito difícil definir um limite de polígono.

Meu exemplo

Eu uso o UDK, fazendo um jogo de tiro em terceira pessoa em ritmo lento, com número limitado de jogadores e NPCs na tela a qualquer momento. Para isso, pretendo aproximadamente 10.000 triângulos por jogador, 5.000 triângulos para inimigos típicos e genéricos, e se eu estivesse criando um personagem no estilo "chefe", cerca de 15.000. Além disso, armas para a terceira pessoa em torno de 4.000 triângulos aparecerão altamente detalhadas. Veículos em torno de 10.000 triângulos. Tudo exigirá nível de detalhe, porque eu preciso de longas distâncias de visualização.

Ao fazer uma primeira pessoa, eu basearia os braços em cerca de 2.000 triângulos, armas em torno de 5.000 triângulos, com mapeamento normal para cada um.

Conclusão

Provavelmente é isso que "depende", mas achei que poderia esclarecer algumas coisas sobre as quais as pessoas sempre se perguntam.

  1. Use a contagem de polígonos como um guia.
  2. Observe as áreas que podem ser mapeadas normalmente em vez de modeladas.
  3. Tenha cuidado ao colocar ventiladores triangulares, se possível, crie uma tira.
  4. Use menos divisões na malha ao mapear UV, mantendo as tiras em mente.

2

Um método em que consigo pensar é usar cenas construídas automaticamente para gerar dados estatísticos a partir dos quais você pode decifrar as informações que procura.

  1. Obtenha um grande volume de ativos (pode ser gerado automaticamente).

  2. Crie uma ferramenta para gerar cenas que podem ser carregadas pelo seu mecanismo usando o pool de ativos.

  3. Execute um bot que moverá sua câmera pela cena. Você também pode executar outros bots para tornar a cena mais dinâmica, incluindo luzes.

  4. Colete o máximo de informações possível e jogue-o em um banco de dados; fps, contagem de polietileno, alterações de sombreador, número de luzes, desenhar chamadas etc.

  5. Crie / obtenha algumas ferramentas para exibir os dados em seu banco de dados da maneira mais possível.

Este link pode fornecer mais algumas idéias: Dead Rising Tools


Gosto dessa resposta, pois aborda a parte mais cara da nossa própria estratégia: alguém precisa se esforçar para criar cenas representativas. A geração de algoritmos ou scripts para colocar rapidamente um grande número de ativos de tamanho sensível aceleraria bastante a criação de uma cena testável. Vou aceitar a resposta mais popular, mas acho que essa vale a pena.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.