Illusion 3D d'une texture de planète 2D

10

Il y a plusieurs années, j'ai entendu une technique qui donne à l'utilisateur l'illusion d'une planète en rotation en utilisant une texture 2D. Étant donné que l'utilisateur n'est pas en mesure de modifier sa position ou sa fenêtre d'affichage.

Quel est le nom de cette technique?

Henrik P. Hessel
la source

Réponses:

25

OK, je pense avoir le représentant maintenant. Contenu du post précédent avec des images intégrées. Est-ce l'effet de planète en rotation que vous recherchez? C'est simplement une image 2D défilante vue à travers un "trou" semi-transparent dans le champ d'étoile.

J'ai rassemblé un petit gif animé rapide de ce à quoi l'effet ressemblerait. De toute évidence, il pourrait être animé beaucoup plus fluide - j'ai décalé la surface de la planète de 4 pixels par image. Il n'est pas non plus configuré pour envelopper l'image, il y a donc un problème à la fin de la boucle.

planète http://www.perludus.com/orbit.gif

J'ai fait tout cela dans Photoshop, mais le concept devrait fonctionner dans un environnement de rendu 2D qui vous permet de faire des transparents alpha, etc. Voici une série de captures d'écran montrant le processus ...

  1. Créez un fond d'étoile vierge et découpez-y un trou rond.
    texte alternatif
  2. Trouvez une sphère ombrée en niveaux de gris pour votre planète, comme celle-ci
    texte alternatif
  3. Voici nos étoiles avec trou et la sphère ombrée sur le dessus, semi transparente
    texte alternatif
  4. Faites un cercle bleu de la taille du trou et donnez-lui une lueur bleue extérieure. Définissez-le également comme semi-transparent. Voici à quoi cela ressemble avec la sphère ombrée
    texte alternatif
  5. Trouvez maintenant une texture de surface de planète. J'ai trouvé celui-ci en train de googler "texture de la surface de la planète"
    texte alternatif
  6. Placez la texture de la planète SOUS l'image de l'étoile avec le trou semi-transparent pour obtenir ce look
    texte alternatif

Pour animer la surface de votre planète, déplacez simplement la texture de surface de la planète sous-jacente. Vous devrez être intelligent pour déplacer la texture lorsqu'elle atteint le bord pour obtenir une rotation transparente et sans fin.

J'espère que cela aide et est l'effet que vous recherchiez!

PS J'ai vu cet article sur les artistes avec une façon plutôt originale de créer des textures de planète - m'a fait penser à cette réponse :) http://www.behance.net/gallery/Pan-Planets/9557465

Tim Holt
la source
np Henrik. Dès que j'ai vu votre message, j'ai pensé: "Je parie que je sais ce que ce gars veut dire." Je ne suis pas sûr à 100%, mais je pense que c'est ainsi que l'effet de rotation de la planète a été fait dans l'émission télévisée Star Trek originale.
Tim Holt
Ce fut une excellente réponse, me donne une idée d'un projet de jeu que j'ai. La prochaine fois que je chargerai Starcraft 2, je devrai voir si c'est comme ça =)
Bryan Harrington
Réponse fantastique, super captures d'écran!
Erreur 454
Votre image est morte. Pensez-vous que vous pourriez y remédier?
Mithical
3

Je vais deviner ce que tu veux dire, et juste jeter une idée là-bas, mais ce ne sera certainement pas la manière «célèbre» de le faire.

tout en 2D

prendre 2 textures. l'un votre masse terrestre, l'autre vos nuages. les nuages ​​doivent avoir une couche alpha qui correspond afin que vous puissiez les «voir à travers eux».

rendre les textures carrelables, c'est-à-dire qu'elles s'enveloppent sans couture il existe des programmes qui vous aident à faire ces tutoriels ou dans Photoshop que vous pouvez suivre.

enfin, vous créez un masque au pochoir qui n'est qu'un cercle, vous regardez donc à travers un trou rond sur vos textures carrées, masquant ainsi les coins.

maintenant vous animez les matrices de texture des textures de terre et de nuage pour les faire bouger. faites-les bouger dans différentes directions et vitesses et il semblera tourner. tout dépend de la façon dont vous avez réalisé vos textures.

Dr. McKay
la source
2

Je pense que cet article décrit la technique. (C'est en russe, donc je poste le lien traduit.)

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=ALkJrhgVVQQY

Je l'ai implémenté ici. http://github.com/meric/renderplanet

Fondamentalement, vous prenez une image qui code pour la projection orthographique ( http://mathworld.wolfram.com/OrthographicProjection.html ) et enveloppez votre planète et la texture des nuages ​​autour d'elle à l'aide d'un shader. Décalez la texture de la planète selon dt pour la faire tourner. Utilisez une image translucide préparée pour l'anneau et l'ombre de l'atmosphère, ou générez-la en dessinant des arcs translucides et en expérimentant avec le shader pour l'ombre.

Voici l'image:

orthographique

Pour chaque pixel du cercle, la Red + Green/255coordonnée X normalisée de la texture planète / nuage à rechercher et la Blue + Alpha/255coordonnée Y normalisée.

Voici le résultat:

échantillon

Les textures de la planète et des nuages ​​doivent être en projection équirectangulaire.

Eric
la source
1

Votre question n'est pas claire quant aux restrictions de contexte dans lesquelles vous travaillez. La grande majorité des textures dans le rendu 3D sont 2D. Donc, si vous montrez simplement une sphère 3D avec une texture de surface 2D mappée autour d'elle, ce n'est pas vraiment un problème. Si vous ne pouvez pas utiliser le rendu 3D, vous devez dire exactement ce que vous pouvez utiliser.

Le problème de base est que vous devez rendre une texture plate sur la surface d'une sphère, que vous obtenez gratuitement avec le rendu 3D. À mesure que la planète tourne, les parties visibles de la surface de la planète s'animent de manière non linéaire (les parties équatoriales de la texture se déplacent plus rapidement que les pôles). Je pense donc que soit vous devez déformer l'image vous-même lorsque vous la mappez sur le disque, soit vous faites comme VirtualVoid l'a suggéré, et vous avez simplement plusieurs images que vous changez entre les temps.

Ce serait horrible à mettre en œuvre, mais si vous êtes en mesure de rendre la texture, pixel par pixel, alors vous pourriez faire les calculs de pixellisation pour chaque ligne de la sphère séparément. Supposons que la texture de votre carte de surface soit aplatie, de sorte qu'à l'équateur, il y ait 512 pixels d'image. Supposons également que votre disque visible mesure 256 px de large. Considérez maintenant chaque ligne du disque rendu comme une fenêtre coulissante sur la texture de la surface. Sur l'équateur, la fenêtre correspond à 50% de la largeur de la texture et vous copiez simplement chacun des 256 pixels sur le pixel équivalent du disque. La ligne suivante sur le disque sera légèrement inférieure à 256 px, mais en raison de la carte de surface déformée, il reste 256 pixels de données de carte de surface en entrée. Vous sous-échantillonnez donc les données de la carte de surface en entrée et rendez le pixel résultant. Pour des maths faciles, laissez ' s supposons que 1/3 du chemin entre l'équateur et le pôle a une largeur de 128 pixels dans le disque de sortie. Donc, chacun de ces 128 pixels sera la moyenne de 2 pixels voisins. Lorsque vous descendez au pôle, vous seriez en moyenne tous les 256 px en seulement quelques pixels de sortie.

Vous pouvez également le faire dans l'autre sens et faire en sorte que les lignes de la texture source soient de longueurs différentes. Ainsi, alors que la ligne contenant les données source contient 512 pixels, la ligne 1/3 de la descente n'a que 256 pixels et la ligne du bas n'a que quelques pixels. Mais chaque ligne est le double de la largeur du disque à la coordonnée y équivalente. Ce genre de texture serait absolument horrible à créer. Et souffrirait probablement d'horribles problèmes d'alias.

Dans ces deux cas, votre animation consiste simplement à incrémenter le pixel de départ x dans la texture d'entrée et à revenir au début de la ligne de texture d'entrée.

Plus j'écris à ce sujet maintenant, plus je suis convaincu que c'est une horrible idée, que vous ne mettriez en œuvre que si vous n'aviez vraiment aucun autre choix. Et il faudrait être dans une situation très inhabituelle pour ne pas avoir d'autre choix.

Je ne pense pas avoir entendu parler de solutions à ce problème (plutôt vague) en tant que technique nommée spécifique.

MrCranky
la source
0

Sprites. Il semble que ce que vous décrivez soit un sprite 2D dans un moteur de jeu 3D à rendre à moindre coût (la Nintendo64 l'a fait partout, comme l'ont fait de nombreux premiers moteurs 3D).

Si vous vouliez rendre une planète en rotation, il vous suffirait d'afficher un sprite 2D animé sur la base d'une feuille de sprite qui était une rotation de planète pré-rendue. Tout comme un .GIF animé par exemple. Le problème est qu'il serait pré-rendu, donc comme vous l'avez dit, cela ne fonctionne que si l'utilisateur n'est pas autorisé à manipuler l'angle de vue.

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

SpacePrez
la source
0

Il peut s'agir d'une simple animation, utilisant une texture avec plusieurs images.

VirtualVoid
la source