Cómo dibujar un mundo en 3D con líneas, más como un boceto o una caricatura

9

Considere hacer un dibujo a tinta, sin sombras y todas las líneas tengan el mismo peso, como puede ver en una tira cómica como Dilbert. Esto representa un mundo tridimensional activo, pero los objetos no tienen texturas, pero tampoco se ven triángulos teselados.

Por el bien de un ejemplo, considera dibujar la superficie de la luna. Las líneas que podría dibujar serían a lo largo del borde superior de las colinas, hasta donde se encuentran con el nivel general de la superficie. Detrás de ellos harías lo mismo para colinas más grandes, en la distancia, y detrás de eso lo que era visible en el horizonte. Para los cráteres, puede dibujar un círculo cercano para el borde exterior y, en parte, un círculo para el borde inferior. Los cantos rodados tendrían una línea alrededor del borde y a lo largo de los bordes visibles principales. Los astronautas tendrían una línea a lo largo de su borde exterior, y a lo largo de las principales características de su traje espacial.

Soy un programador experimentado pero nuevo en la programación 3D. No puedo pensar por casualidad en un juego que se ve así: ¿se ha hecho? ¿Y cómo lo haría uno? Se me ocurren dos problemas: encontrar los bordes significativos y dibujarlos. ¿Necesitaría un "motor" codificado a partir de matrices, basado en líneas, en lugar de un motor 3D normal?

pantano triste
fuente
Solo quiero advertirte que los humanos no son buenos para percibir 3D en una pantalla 2D tal como está, por lo que quitar el sombreado, que es una parte muy importante para comprender la profundidad de una escena, puede no funcionar bien en un juego que se basa en 3D jugabilidad
Jeff
Hay un juego que se ajusta al estilo que estás describiendo: Okami, lanzado para PS2 hace unos años en.wikipedia.org/wiki/%C5%8Ckami
Eran Galperin
1
Bien, he estado pensando en hacer esto yo mismo. Sin embargo, creo que querrás usar algún tipo de sombreado de celdas, no solo líneas.
mpnk121

Respuestas:

11

Básicamente, de lo que estás hablando es de encontrar bordes, y hay varios juegos que lo hacen, en una variedad de formas diferentes.

Probablemente el primero fue Jet Set Radio (lanzado en el oeste como "Jet Grind Radio"). Lanzado solo un mes o dos después de eso, fue el juego para el que había desarrollado una técnica de renderización similar: Looney Tunes: Space Race . (En Space Race, hicimos todo lo posible para mantener un grosor de línea uniforme, mientras que Jet Set Radio hizo que los anchos de línea desiguales fueran una gran parte de su estilo visual).

Ambos juegos funcionaron de la misma manera; para cada objeto a delinear, dibuje el objeto dos veces. Primero, renderícelo con el reverso invertido, con un empuje de vértice aplicado (es decir, mueva cada vértice a cierta distancia a lo largo de su vector normal) y en cualquier color que desee que aparezcan las 'líneas'. Luego dibuje nuevamente, sin el empuje del vértice y con la orientación normal hacia atrás. Este par de operaciones te da una silueta de color alrededor de un objeto, y es todo lo que usaron estos dos primeros juegos. En Space Race, mantuve la ilusión de un ancho de línea constante empujando los vértices a una distancia variable, en función de qué tan lejos estaba el objeto de la cámara. En Jet Set Radio, no lo hicieron (lo que llevó a que las líneas se hicieran más grandes o más pequeñas, a medida que los objetos se acercaban o alejaban de la cámara)

NVidia y ATI tienen varias demostraciones de otras formas de lograr este efecto, principalmente en torno a sombreadores de píxeles que buscan valores normales que son perpendiculares al vector de cámara a píxel para cada píxel, pero todos requieren mallas de muy alta resolución y producen inconsistencias anchos de línea en la práctica. No sé si algún juego realmente usa este tipo de enfoque; No creo haber visto ninguna que se parezca a las muestras de estas compañías.

También te señalaré Dragon's Lair 3D , que es el único juego que conozco que parece estar haciendo esto correctamente; tomar el producto de punto de cámara a polígono y la normalidad del polígono para cada polígono en un modelo para ver si cada polígono se enfrenta a la cámara o alejarse de ella, y luego verificar todos los pares de polígonos conectados; Si cualquier par de polígonos comparte un borde, y un polígono mira hacia la cámara y un polígono no, entonces dibuja una línea delgada y de ancho constante a lo largo de ese borde en el espacio de la pantalla. (No pude hacer que esto funcionara lo suficientemente rápido en Dreamcast for Space Race, o lo hubiera usado. Hoy, en computadoras modernas, esta es la forma en que estaría tratando de hacer este efecto, aunque '

Dragon's Lair 3D también es el único juego que conozco que realmente dibuja líneas entre áreas de diferentes colores o en discontinuidades de vértice normal, incluso si no hay un borde de silueta para que encuentre allí. Sospecho que tenían una herramienta personalizada que permitía a sus artistas nominar bordes de polígonos para recibir siempre una línea.

Okami , que ha sido mencionado por otras personas, parece estar usando un enfoque de doble vértice, similar al Jet Set Radio y Space Race, pero también usa texturas que se han construido con un estilo de arte cepillado. (Las colinas en la distancia, por ejemplo, se dibujan como pinceladas en una textura que se dibuja como un quad estándar). Okami es encantador, pero no creo que realmente toque la tecnología por la que estás preguntando; ciertamente, está usando el enfoque anterior para su efecto.

Ahora, en su caso, está preguntando sobre hacer esto sin un relleno de color, solo dibujando el mundo solo con líneas. Eso es fácil de hacer; simplemente dibuje todos los polígonos sin iluminación y en un solo color constante que coincida con el color de fondo. Cualquiera de estos enfoques debería funcionar usando ese enfoque sin cambiar su motor de juego. Es importante dibujar esos polígonos del "mismo color que el fondo", ya que evitarán que los bordes del fondo se muestren a través de los objetos en primer plano, lo que podría confundirse muy rápidamente.

Trevor Powell
fuente
+1 respuesta brillante que incluye ambos, teoría y ejemplos interesantes
Maik Semder
Impresionante respuesta, gracias por tu tiempo escribiéndolo.
pantano triste