Come disegnare un mondo 3D con linee, più come uno schizzo o un cartone animato


9

Prendi in considerazione la possibilità di realizzare un disegno a inchiostro, senza ombreggiatura e con tutte le linee di uguale peso, come puoi vedere in un fumetto a strisce come Dilbert. Ciò rappresenta un mondo tridimensionale attivo, ma gli oggetti non hanno trame, ma non si vedono nemmeno triangoli tassellati.

Per fare un esempio, considera di disegnare la superficie della luna. Le linee che potresti tracciare sarebbero lungo il bordo superiore delle colline, fino al punto in cui incontrano il livello generale della superficie. Dietro quelli che faresti lo stesso per le colline più grandi, in lontananza e dietro ciò che era visibile all'orizzonte. Per i crateri, potresti disegnare un cerchio vicino per il bordo esterno, e parzialmente mascherato, un cerchio per il bordo inferiore. I massi avrebbero una linea attorno al bordo e lungo i principali bordi visibili. Gli astronauti avrebbero una linea lungo il loro bordo esterno e lungo le principali caratteristiche della loro tuta spaziale.

Sono un programmatore esperto ma nuovo nella programmazione 3D. Non riesco a pensare a un gioco simile a questo: è stato fatto? E come si farebbe? Mi vengono in mente due problemi: trovare i contorni significativi e disegnarlo. Avrebbe bisogno di un "motore" codificato da matrici, basato su linee, piuttosto che un normale motore 3D?


Voglio solo avvertirti che gli umani non sono bravi a percepire il 3D su uno schermo 2D così com'è, quindi togliere l'ombreggiatura, che è una parte molto importante per comprendere la profondità di una scena, potrebbe non funzionare bene in un gioco basato sul 3D gameplay
Jeff

C'è un gioco che si adatta allo stile che stai descrivendo: Okami, rilasciato per PS2 qualche anno fa en.wikipedia.org/wiki/%C5%8Ckami
Eran Galperin,

1
Bene, ho pensato di farlo da solo. Penso che dovresti usare una sorta di cel shading , non solo linee.
mpnk121,

Risposte:


11

Fondamentalmente, ciò di cui stai parlando è la ricerca di bordi, e ci sono una serie di giochi che lo fanno, in una varietà di modi diversi.

Probabilmente il primo fu Jet Set Radio (pubblicato in occidente come "Jet Grind Radio"). Rilasciato solo un mese o due dopo quello era il gioco per il quale avevo sviluppato una tecnica di rendering simile: Looney Tunes: Space Race . (Su Space Race, abbiamo fatto del nostro meglio per mantenere uno spessore della linea uniforme, mentre Jet Set Radio ha reso le linee irregolari larghe una parte del suo stile visivo).

Entrambi questi giochi hanno funzionato allo stesso modo; per ogni oggetto da delineare, disegna l'oggetto due volte. Per prima cosa, esegui il rendering con il backfacing invertito, con una spinta del vertice applicata (ovvero sposta ogni vertice di una certa distanza lungo il suo vettore normale) e in qualunque colore desideri che appaiano le "linee". Quindi disegnare di nuovo, senza la spinta del vertice e con il normale backfacing. Questa coppia di operazioni ti dà una silhouette colorata che borda un oggetto, ed è tutto ciò che questi primi due giochi hanno usato. In Space Race, ho mantenuto l'illusione di una larghezza della linea costante spingendo i vertici a una distanza variabile, in base alla distanza dell'oggetto dalla telecamera. In Jet Set Radio, non lo hanno fatto (il che ha portato a linee sempre più grandi, man mano che gli oggetti si avvicinavano o allontanavano dalla telecamera)

NVidia e ATI hanno diverse dimostrazioni di altri modi per ottenere questo effetto, principalmente ruotando attorno a pixel shader alla ricerca di normali perpendicolari al vettore da fotocamera a pixel per ciascun pixel, ma tutti richiedono mesh ad altissima risoluzione e producono incoerenti spessori di linea in pratica. Non so se alcuni giochi utilizzino effettivamente questo tipo di approccio; Non credo di aver visto nessuno che assomigli ai campioni di queste aziende.

Ti indicherò anche Dragon's Lair 3D , che è l'unico gioco che conosco e che sembra farlo davvero correttamente; prendendo il prodotto punto di camera-a-poligono e il poligono normale per ciascun poligono in un modello per vedere se ciascun poligono è rivolto verso o lontano dalla fotocamera e quindi controllare tutte le coppie di poligoni collegati; se una coppia di poligoni condivide un bordo e un poligono è rivolto verso la telecamera e un poligono no, allora traccia una linea sottile a larghezza costante lungo quel bordo nello spazio dello schermo. (Non riuscivo a rendere questo lavoro abbastanza veloce su Dreamcast per Space Race, o l'avrei usato. Oggi, sui computer moderni, questo è totalmente il modo in cui proverei a fare questo effetto, anche se '

Dragon's Lair 3D è anche l'unico gioco di cui sono a conoscenza che in realtà traccia linee tra aree di colore diverso o con discontinuità normali ai vertici, anche se non c'è un bordo silhouette per trovarlo. Sospetto che avessero uno strumento personalizzato che consentiva ai loro artisti di nominare i bordi poligonali per ricevere sempre una linea.

Okami , che è stato menzionato da alcune altre persone, sembra utilizzare un approccio a vertex push doppio rendering, simile a Jet Set Radio e Space Race, ma utilizza anche trame che sono state costruite usando uno stile artistico spazzolato. (Le colline in lontananza, ad esempio, vengono disegnate come pennellate in una trama che viene disegnata come un quad standard). Okami è adorabile, ma non penso che tocchi davvero la tecnologia di cui stai chiedendo; certamente, sta usando l'approccio più vecchio per il suo effetto.

Ora, nel tuo caso, ti stai chiedendo di farlo senza un riempimento di colore, disegnando il mondo solo con linee. È facile da fare; disegna semplicemente tutti i poligoni senza illuminazione e in un unico colore costante che corrisponda al colore di sfondo. Ognuno di questi approcci dovrebbe funzionare usando quell'approccio senza cambiare affatto il motore di gioco. È importante disegnare effettivamente quei poligoni "dello stesso colore dello sfondo", in quanto impediranno ai bordi dello sfondo di essere visualizzati attraverso oggetti in primo piano, il che potrebbe creare confusione molto rapidamente.


+1 risposta brillante che include sia teoria che esempi interessanti
Maik Semder,

Risposta fantastica, grazie per averci scritto.
impetuosa palude

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.