Illusione 3D di una trama del pianeta 2D


10

Diversi anni fa ho sentito una tecnica che dà all'utente l'illusione di un pianeta in rotazione usando una trama 2D. Dato che l'utente non è in grado di cambiare posizione o finestra.

Come si chiama questa tecnica?

Risposte:


25

OK, penso di avere il rappresentante ora. Contenuto del post precedente con immagini incorporate. È questo l'effetto del pianeta rotante che stai cercando? È semplicemente un'immagine 2D a scorrimento visualizzata attraverso un "buco" semitrasparente nel campo stellare.

Ho messo insieme una piccola gif animata di come sarebbe l'effetto. Chiaramente potrebbe essere animato molto più agevolmente: ho spostato la superficie del pianeta di 4 pixel per fotogramma. Inoltre, non è impostato per avvolgere l'immagine, quindi c'è un problema tecnico alla fine del loop.

planet http://www.perludus.com/orbit.gif

L'ho fatto tutto in Photoshop, ma il concetto dovrebbe funzionare in un ambiente di rendering 2D che ti consente di realizzare trasparenze alfa, ecc. Ecco una serie di schermate che mostrano il processo ...

  1. Crea uno sfondo a stelle vuoto e crea un buco rotondo.
    testo alternativo
  2. Trova una sfera ombreggiata in scala di grigi per il tuo pianeta, come questa
    testo alternativo
  3. Ecco le nostre stelle con foro e la sfera ombreggiata in alto, semi trasparente
    testo alternativo
  4. Crea un cerchio blu delle dimensioni del foro e dagli un bagliore blu esterno. Impostalo anche come semi-trasparente. Ecco come appare con la sfera ombreggiata
    testo alternativo
  5. Ora trova una trama di superficie del pianeta. Ho trovato questo solo googling "trama della superficie del pianeta"
    testo alternativo
  6. Posiziona la trama del pianeta SOTTO l'immagine stellare con il buco semitrasparente in essa per ottenere questo aspetto
    testo alternativo

Per animare la superficie del tuo pianeta, basta spostare la struttura della superficie del pianeta sottostante. Dovrai essere intelligente nel spostare la trama quando raggiunge il bordo per ottenere una rotazione continua e senza fine.

Spero che questo aiuti ed è l'effetto che stavi cercando!

PS Ho visto questo articolo sugli artisti con un modo piuttosto nuovo di creare trame planetarie - mi ha fatto pensare a questa risposta :) http://www.behance.net/gallery/Pan-Planets/9557465


np Henrik. Appena ho visto il tuo post ho pensato "Scommetto di sapere cosa significa questo ragazzo". Non sono sicuro al 100%, ma penso che sia stato così l'effetto del pianeta rotante nell'originale programma televisivo Star Trek.
Tim Holt,

Questa è stata un'ottima risposta, mi dà un'idea per un progetto di gioco che ho. La prossima volta che carico di Starcraft 2 devo vedere se è così che funziona =)
Bryan Harrington l'

Risposta fantastica, fantastici screenshot!
Errore 454

La tua immagine è morta. Pensi di poterlo riparare?
Mithical

3

ho intenzione di indovinare cosa vuoi dire, e semplicemente lanciare un'idea là fuori, ma sicuramente non sarà il modo "famoso" per farlo.

tutto in 2D

prendi 2 trame. una la tua massa terrestre, l'altra le tue nuvole. le nuvole dovrebbero avere uno strato alfa che corrisponda in modo da poter 'vedere attraverso di loro'.

rendere piastrellabili le trame, ovvero avvolgere senza soluzione di continuità. ci sono programmi che ti aiutano a realizzare questi o tutorial in Photoshop che puoi seguire.

poi finalmente crei una maschera da stencil che è solo un cerchio, quindi stai effettivamente osservando attraverso un foro rotondo le tue trame quadrate, mascherando così gli angoli.

ora animate le matrici di trama della terra e le trame delle nuvole per farle muovere. farli muovere in diverse direzioni e velocità e sembrerà ruotare. dipende tutto da quanto hai realizzato le tue trame senza soluzione di continuità.


2

Penso che questo articolo descriva la tecnica. (È in russo, quindi inserisco un link tradotto.)

https://translate.googleusercontent.com/translate_c?depth=1&hl=en&rurl=translate.google.com&sl=auto&sp=nmt4&tl=en&u=https://habrahabr.ru/post/248381/&usg=ALkJrhgViuYdAi-Vav3cyhxvydkaBKh6EQ

L'ho implementato qui. http://github.com/meric/renderplanet

Fondamentalmente si prende un'immagine che codifica la proiezione ortografica ( http://mathworld.wolfram.com/OrthographicProjection.html ) e si avvolge il pianeta e la trama nuvola attorno ad esso usando uno shader. Spostare la trama del pianeta in base a dt per farlo ruotare. Usa un'immagine traslucida preparata per l'anello e l'ombra dell'atmosfera, o generala disegnando archi traslucidi e alcuni sperimentando lo shader per l'ombra.

Ecco l'immagine:

ortografico

Per ogni pixel all'interno del cerchio, Red + Green/255viene normalizzata la coordinata X della trama del pianeta / nuvola da cercare e la Blue + Alpha/255coordinata Y normalizzata.

Ecco il risultato:

campione

Le trame del pianeta e delle nuvole dovrebbero essere in proiezione equirettangolare.


1

La tua domanda non è chiara in merito alle restrizioni sul contesto in cui stai lavorando. La stragrande maggioranza delle trame nel rendering 3D sono 2D. Quindi, se stai solo mostrando una sfera 3D con una trama di superficie 2D mappata attorno ad essa, questo non è davvero un problema. Se non puoi usare il rendering 3D, devi dire esattamente cosa puoi usare.

Il problema di base è che devi renderizzare una trama piatta sulla superficie di una sfera, che puoi ottenere gratuitamente con il rendering 3D. Mentre il pianeta ruota, le parti visibili della superficie del pianeta si animano in modo non lineare (le parti equatoriali della trama si muovono più velocemente dei poli). Quindi penso che sia necessario distorcere l'immagine da soli mentre la si mappa sul disco, o fare come suggerito da VirtualVoid, e semplicemente avere più immagini tra cui cambiare nel tempo.

Sarebbe orribile da implementare, ma se sei in grado di renderizzare la trama, pixel per pixel, potresti fondamentalmente fare i calcoli di rasterizzazione per ogni linea della sfera separatamente. Supponiamo che la trama della mappa della superficie sia appiattita, in modo che all'equatore ci siano 512 pixel di immagine. Supponiamo anche che il tuo disco visibile sia largo 256 px. Ora pensa a ciascuna riga del disco renderizzato come una finestra scorrevole sulla trama della superficie. Sull'equatore, la finestra è il 50% della larghezza della trama e copi semplicemente ciascuno dei 256px sul pixel equivalente sul disco. La riga successiva in basso sul disco sarà leggermente inferiore a 256 px, ma a causa della mappa di superficie distorta, ci sono ancora 256px di dati della mappa di superficie di input. Quindi, sottocampionare i dati della mappa della superficie di input e renderizzare il pixel risultante. Per una matematica semplice, lascia che s supponiamo che 1/3 della distanza tra l'equatore e il polo sia largo 128px nel disco di uscita. Quindi ognuno di quei 128 pixel sarà la media di 2 pixel vicini. Quando arrivi al polo, calcoleresti una media di tutti i 256 pixel in pochi pixel di output.

Potresti anche farlo diversamente, e le linee nella trama di origine devono avere lunghezze diverse. Pertanto, mentre la riga contenente i dati di origine contiene 512 px, la riga 1/3 della riga in basso ha solo 256 px e la riga in basso ha solo pochi pixel. Ma ogni linea è doppia della larghezza del disco con l'equivalente coordinata y. Quel tipo di trama sarebbe assolutamente orribile da creare però. E probabilmente soffrirebbe di orribili problemi di aliasing.

In entrambi i casi, l'animazione sta semplicemente aumentando il pixel iniziale x nella trama di input e avvolgendosi all'inizio della linea di trama di input.

Più scrivo su questo ora, più sono convinto che sia un'idea orribile, che implementeresti solo se non avessi assolutamente altre scelte. E dovresti trovarti in una situazione molto insolita per non avere altre scelte.

Non credo di aver sentito parlare di soluzioni a questo (piuttosto vago) problema come una specifica tecnica denominata.


0

Sprites. Sembra che quello che stai descrivendo sia uno sprite 2D in un motore di gioco 3D per renderlo a buon mercato (il Nintendo64 ha fatto tutto dappertutto, così come molti primi motori 3d).

Se vuoi rendere un pianeta in rotazione, dovresti solo visualizzare uno sprite 2D che è stato animato sulla base di un foglio sprite che era una rotazione del pianeta pre-renderizzata. Proprio come un .GIF animato per esempio. Il problema è che sarebbe pre-renderizzato, quindi come hai detto, questo funziona solo se l'utente non è autorizzato a manipolare l'angolo di visualizzazione.

http://en.wikipedia.org/wiki/Sprite_(computer_graphics )


0

Potrebbe essere solo una semplice animazione, usando una trama con più fotogrammi.

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.