Como desenhar um mundo 3D com linhas, mais como um desenho ou desenho animado

9

Considere fazer um desenho a tinta, sem sombreamento e todas as linhas com peso igual - como você vê em uma história em quadrinhos como Dilbert. Isso representa um mundo tridimensional ativo, mas os objetos não têm texturas, mas você também não vê triângulos em mosaico.

Por uma questão de exemplo, considere desenhar a superfície da lua. As linhas que você pode desenhar seriam ao longo da borda superior das colinas, até onde elas atendem ao nível geral da superfície. Atrás deles, você faria o mesmo por colinas maiores, à distância e por trás daquilo que era visível no horizonte. Para crateras, você pode desenhar um círculo próximo para a borda externa e parcialmente mascarado, um círculo para a borda inferior. Os pedregulhos teriam uma linha ao redor da borda e ao longo das principais bordas visíveis. Os astronautas teriam uma linha ao longo de sua borda externa e ao longo das principais características de seu traje espacial.

Sou um programador experiente, mas novo na programação 3D. Não consigo pensar em um jogo que se parece com isso - já foi feito? E como alguém faria isso? Dois problemas vêm à mente - encontrar as arestas significativas e desenhá-las. Seria necessário um "mecanismo" codificado a partir de matrizes, com base em linhas, em vez de um mecanismo 3D comum?

pântano triste
fonte
Eu só quero avisá-lo que os humanos não são bons em perceber 3D em uma tela 2D como é, então tirar o sombreamento, que é uma parte muito importante para entender a profundidade de uma cena, pode não funcionar bem em um jogo baseado em 3D jogabilidade
Jeff
Não é um jogo que se encaixa no estilo que você está descrevendo - Okami, lançado para o PS2 há alguns anos atrás en.wikipedia.org/wiki/%C5%8Ckami
Eran Galperin
11
Bom, estive pensando em fazer isso sozinho. Eu acho que você gostaria de usar algum tipo de sombreamento , mas não apenas linhas.
mpnk121

Respostas:

11

Fundamentalmente, o que você está falando é a descoberta de borda, e há vários jogos que fazem isso, de várias maneiras diferentes.

Provavelmente o primeiro foi o Jet Set Radio (lançado no oeste como "Jet Grind Radio"). Lançado apenas um ou dois meses depois, foi o jogo para o qual eu desenvolvi uma técnica de renderização semelhante: Looney Tunes: Space Race . (Na Space Race, fizemos o possível para manter uma espessura uniforme da linha, enquanto o Jet Set Radio transformou as larguras irregulares em linhas em grande parte de seu estilo visual).

Ambos os jogos funcionaram da mesma maneira; para cada objeto a ser descrito, desenhe o objeto duas vezes. Primeiro, renderize-o com backfacing invertido, com uma pressão de vértice aplicada (ou seja, mova cada vértice por alguma distância ao longo de seu vetor normal) e em qualquer cor que você deseja que as 'linhas' pareçam. Em seguida, desenhe novamente, sem o impulso do vértice e com o backfacing normal. Esse par de operações oferece uma silhueta colorida em torno de um objeto, e é tudo o que esses dois primeiros jogos usaram. No Space Race, mantive a ilusão de largura constante da linha empurrando os vértices a uma distância variável, com base na distância que o objeto estava da câmera. No Jet Set Radio, eles não o fizeram (o que levou as linhas a ficarem maiores ou menores, à medida que os objetos se aproximavam ou se afastavam da câmera)

A NVidia e a ATI têm várias demos de outras maneiras de obter esse efeito, girando principalmente em torno de pixel shaders, procurando normais que são perpendiculares ao vetor de câmera para pixel para cada pixel, mas todos eles exigem malhas de alta resolução e produzem inconsistências larguras de linha na prática. Não sei se algum jogo realmente usa esse tipo de abordagem; Acho que não vi nenhum que se pareça com as amostras dessas empresas.

Também vou apontar para você no Dragon's Lair 3D , que é o único jogo que conheço que parece estar realmente fazendo isso corretamente; pegando o produto escalar de câmera para polígono e o polígono normal para cada polígono em um modelo para ver se cada polígono está voltado para a câmera ou para longe dela e, em seguida, verificando todos os pares de polígonos conectados; se algum par de polígonos compartilhar uma borda, e um polígono estiver voltado para a câmera e um polígono não, ele desenha uma linha fina e de largura constante ao longo dessa borda no espaço da tela. (Eu não poderia fazer isso funcionar rápido o suficiente no Dreamcast for Space Race, ou eu o teria usado. Hoje, em computadores modernos, é totalmente assim que eu tentaria fazer esse efeito, mesmo que seja '

Dragon's Lair 3D também é o único jogo que conheço que realmente desenha linhas entre áreas de cores diferentes ou em descontinuidades normais do vértice, mesmo que não exista uma borda de silhueta para encontrar lá. Suspeito que eles tivessem uma ferramenta personalizada que permitisse aos artistas nomear arestas de polígono para sempre receber uma linha.

Okami , que já foi mencionado por outras pessoas, parece estar usando uma abordagem de duplo impulso de vértice, semelhante ao Jet Set Radio e Space Race, mas também usa texturas que foram construídas usando um estilo de arte escovado. (As colinas à distância, por exemplo, são desenhadas como pinceladas em uma textura que é desenhada como um quad padrão). Okami é adorável, mas não acho que realmente toque na tecnologia que você está perguntando; certamente, está usando a abordagem mais antiga para seu efeito.

Agora, no seu caso, você está perguntando sobre fazer isso sem um preenchimento de cor, apenas desenhando o mundo apenas com linhas. Isso é fácil de fazer; basta desenhar todos os polígonos sem iluminação e em uma única cor constante que corresponda à cor do plano de fundo. Qualquer uma dessas abordagens deve funcionar usando essa abordagem sem alterar seu mecanismo de jogo. É importante desenhar esses polígonos da "mesma cor do plano de fundo", pois eles impedem que as bordas do plano de fundo sejam exibidas através de objetos em primeiro plano, o que pode ficar confuso rapidamente.

Trevor Powell
fonte
+1 brilhante resposta incluindo tanto, teoria e exemplos interessantes
Maik Semder
Resposta incrível, obrigado pelo seu tempo escrevendo.
triste atolar