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?
Respostas:
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.
fonte
O que você está falando é sobre renderização não foto-realista (também conhecida como NPR). Em um jogo 3D em tempo real, isso é feito usando sombreadores de fragmentos / pixels.
Role até aqui para ver alguns exemplos: http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html
fonte