Ilusión 3D de una textura de planeta 2D

10

Hace varios años escuché una técnica que le da al usuario la ilusión de un planeta en rotación al usar una textura 2D. Dado que el usuario no puede cambiar su posición o ventana gráfica.

¿Cómo se llama esta técnica?

Henrik P. Hessel
fuente

Respuestas:

25

OK, creo que tengo el representante ahora. Contenido de la publicación anterior con imágenes incrustadas. ¿Es este el efecto de planeta giratorio que estás buscando? Es simplemente una imagen 2D desplazable vista a través de un "agujero" semitransparente en el campo de estrellas.

Reuní un pequeño y rápido gif animado de cómo se vería el efecto. Claramente, podría animarse mucho más suavemente: cambié la superficie del planeta por 4 píxeles cada fotograma. Tampoco está configurado para ajustar la imagen, por lo que hay un error al final del ciclo.

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

Hice todo esto en Photoshop, pero el concepto debería funcionar en un entorno de renderizado 2D que le permite hacer transparencias alfa, etc. Aquí hay una serie de capturas de pantalla que muestran el proceso ...

  1. Crea un fondo de estrella en blanco y corta un agujero redondo en él.
    texto alternativo
  2. Encuentra una esfera sombreada en escala de grises para tu planeta, como esta
    texto alternativo
  3. Aquí están nuestras estrellas con agujero y la esfera sombreada en la parte superior, semitransparente
    texto alternativo
  4. Haz un círculo azul del tamaño del agujero y dale un brillo azul externo. También configúrelo para que sea semitransparente. Así es como se ve con la esfera sombreada
    texto alternativo
  5. Ahora encuentre una textura de la superficie del planeta. Encontré éste buscando en Google "textura de la superficie del planeta"
    texto alternativo
  6. Coloque la textura del planeta BAJO la imagen de la estrella con el agujero semitransparente para obtener este aspecto
    texto alternativo

Para animar la superficie de tu planeta, solo mueve la textura de la superficie del planeta subyacente. Tendrá que ser inteligente al cambiar la textura cuando llegue al borde para obtener una rotación perfecta e interminable.

Espero que esto ayude y sea el efecto que estabas buscando.

PD: vi este artículo sobre artistas con una forma bastante novedosa de crear texturas planetarias; me hizo pensar en esta respuesta :) http://www.behance.net/gallery/Pan-Planets/9557465

Tim Holt
fuente
NP Henrik. Tan pronto como vi tu publicación, pensé: "Apuesto a que sé lo que significa este tipo". No estoy 100% seguro, pero creo que así es como se hizo el efecto de planeta giratorio en el programa de televisión original de Star Trek.
Tim Holt
Esta fue una gran respuesta, me da una idea para un proyecto de juego que tengo. La próxima vez que cargue Starcraft 2 tendré que ver si así es como se hace =)
Bryan Harrington
Fantástica respuesta, excelentes capturas de pantalla!
Error 454
Tu imagen murió. ¿Crees que podrías arreglarlo?
Mithical
3

Voy a adivinar a qué te refieres, y simplemente lanzar una idea, pero ciertamente no será la forma 'famosa' de hacerlo.

todo en 2D

tomar 2 texturas uno tu masa de tierra, el otro tus nubes. las nubes deben tener una capa alfa que coincida para que pueda "ver a través de ellas".

hacer que las texturas sean enlosables, es decir, que se envuelvan sin problemas. Hay programas que te ayudan a hacer estos o tutoriales en Photoshop que puedes seguir.

luego finalmente haces una máscara de plantilla que es solo un círculo, de modo que estás mirando a través de un agujero redondo a tus texturas cuadradas, enmascarando así las esquinas.

ahora anima las matrices de texturas de las texturas de la tierra y las nubes para que se muevan. haz que se muevan en diferentes direcciones y velocidades y parecerá que gira. todo depende de cuán perfecta sea tu textura.

Dr. McKay
fuente
2

Creo que este artículo describe la técnica. (Está en ruso, así que publico un enlace traducido).

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

Lo he implementado aquí. http://github.com/meric/renderplanet

Básicamente, tomas una imagen que codifica la proyección ortográfica ( http://mathworld.wolfram.com/OrthographicProjection.html ) y envuelves tu planeta y la textura de la nube con un sombreador. Desplaza la textura del planeta de acuerdo con dt para que gire. Use una imagen translúcida preparada para el anillo y la sombra de la atmósfera, o generarla dibujando arcos translúcidos y experimentando con el sombreador de la sombra.

Aquí está la imagen:

ortográfico

Para cada píxel dentro del círculo, Red + Green/255se normaliza la coordenada X de la textura del planeta / nube a buscar y Blue + Alpha/255se normaliza la coordenada Y.

Aquí está el resultado:

muestra

Las texturas del planeta y la nube deben estar en proyección equirectangular.

Eric
fuente
1

Su pregunta no está clara en cuanto a las restricciones en el contexto en el que está trabajando. La gran mayoría de las texturas en renderizado 3D son 2D. Entonces, si solo está mostrando una esfera 3D con una textura de superficie 2D asignada a su alrededor, esto no es realmente un problema. Si no puede usar la representación 3D, debe decir exactamente qué puede usar.

El problema básico es que debe renderizar una textura plana sobre la superficie de una esfera, que se obtiene de forma gratuita con la representación 3D. A medida que el planeta gira, las porciones visibles de la superficie del planeta se animan de manera no lineal (las partes ecuatoriales de la textura se mueven más rápido que los polos). Por lo tanto, creo que debe distorsionar la imagen usted mismo mientras la mapea sobre el disco, o hacer lo que sugiere VirtualVoid, y simplemente tener varias imágenes que cambia con el tiempo.

Sería horrible implementarlo, pero si puede renderizar la textura, píxel por píxel, básicamente podría hacer los cálculos de rasterización para cada línea de la esfera por separado. Supongamos que la textura del mapa de superficie se aplana, de modo que en el ecuador hay 512 píxeles de imagen. Supongamos también que su disco visible tiene 256 px de ancho. Ahora piense en cada línea del disco renderizado como una ventana deslizante en la textura de la superficie. En el ecuador, la ventana es el 50% del ancho de la textura, y simplemente copia cada uno de los 256px en el píxel equivalente en el disco. La siguiente línea hacia abajo en el disco será ligeramente inferior a 256 px, pero debido al mapa de superficie distorsionada, todavía hay 256 px de datos de mapa de superficie de entrada. Entonces, submuestrea los datos del mapa de superficie de entrada y renderiza el píxel resultante. Para matemáticas fáciles, dejemos Supongamos que 1/3 del camino entre el ecuador y el polo tiene 128 píxeles de ancho en el disco de salida. Entonces, cada uno de esos 128px será el promedio de 2 píxeles vecinos. Cuando llegues al poste, estarías promediando los 256 píxeles en solo unos pocos píxeles de salida.

También puede hacerlo de la otra manera, y hacer que las líneas en la textura de origen sean de diferentes longitudes. Entonces, mientras que la línea que contiene los datos de origen tiene 512 píxeles, la línea 1/3 del camino tiene solo 256 píxeles, y la línea en la parte inferior tiene solo unos pocos píxeles. Pero cada línea es el doble del ancho del disco en la coordenada y equivalente. Sin embargo, ese tipo de textura sería absolutamente horrible de tener que crear. Y probablemente sufriría de horribles problemas de alias.

En ambos casos, su animación simplemente incrementa el píxel de inicio x en la textura de entrada y se ajusta al inicio de la línea de textura de entrada.

Cuanto más escribo sobre esto ahora, más estoy convencido de que es una idea horrible, que solo implementaría si realmente no tuviera otras opciones. Y tendrías que estar en una situación muy inusual para no tener otras opciones.

No creo haber escuchado ninguna solución a este problema (más bien vago) como una técnica específica con nombre.

MrCranky
fuente
0

Sprites Parece que lo que estás describiendo es un sprite 2D en un motor de juego 3D para renderizar a bajo precio (la Nintendo64 hizo esto por todas partes, al igual que muchos motores 3D anteriores).

Si quisieras hacer que un planeta girara, solo tendrías que mostrar un sprite 2D que estaba animado basado en una hoja de sprite que era una rotación de planeta previamente renderizada. Al igual que un .GIF animado, por ejemplo. El problema es que se representaría previamente, por lo que, como dijiste, esto solo funciona si el usuario no puede manipular el ángulo de visión.

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

SpacePrez
fuente
0

Esa podría ser solo una animación simple, usando una textura con varios cuadros.

VirtualVoid
fuente