Ilusão 3D de uma textura 2D do planeta

10

Vários anos atrás, ouvi uma técnica que dá ao usuário a ilusão de um planeta em rotação usando uma textura 2D. Dado que o usuário não pode alterar sua posição ou janela de visualização.

Qual o nome dessa técnica?

Henrik P. Hessel
fonte

Respostas:

25

OK, acho que tenho o representante agora. Conteúdo do post anterior com imagens incorporadas. Este é o efeito de planeta em rotação que você está procurando? É simplesmente uma imagem 2D de rolagem vista através de um "buraco" semi-transparente no campo estelar.

Eu montei um pequeno gif animado rápido de como seria o efeito. Claramente, poderia ser animado de maneira muito mais suave - troquei a superfície do planeta em 4 pixels por quadro. Também não está definido para quebrar a imagem, então há uma falha no final do loop.

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

Fiz isso tudo no Photoshop, mas o conceito deve funcionar em um ambiente de renderização 2D que permite transparências alfa etc. Aqui estão uma série de capturas de tela mostrando o processo ...

  1. Crie um fundo estrela em branco e faça um furo redondo nele.
    texto alternativo
  2. Encontre uma esfera sombreada em escala de cinza para o seu planeta, como esta
    texto alternativo
  3. Aqui estão nossas estrelas com buraco e a esfera sombreada no topo, semi transparente
    texto alternativo
  4. Faça um círculo azul do tamanho do buraco e dê um brilho azul externo. Defina também para ser semi-transparente. Aqui está o que parece com a esfera sombreada
    texto alternativo
  5. Agora encontre uma textura de superfície do planeta. Encontrei este apenas pesquisando "textura da superfície do planeta"
    texto alternativo
  6. Coloque a textura do planeta SOB a imagem da estrela com o furo semi-transparente para obter essa aparência
    texto alternativo

Para animar a superfície do seu planeta, basta mover a textura subjacente da superfície do planeta. Você terá que ficar esperto ao mudar a textura quando ela atingir a borda para obter uma rotação contínua e sem fim.

Espero que isso ajude e seja o efeito que você estava procurando!

PS Vi este artigo sobre artistas com uma maneira bastante nova de criar texturas de planetas - me fez pensar nesta resposta :) http://www.behance.net/gallery/Pan-Planets/9557465

Tim Holt
fonte
Henrik. Assim que vi seu post, pensei: "Aposto que sei o que esse cara quer dizer". Não tenho 100% de certeza, mas acho que foi assim que o efeito do planeta em rotação foi feito no programa de TV original de Star Trek.
Tim Holt
Esta foi uma ótima resposta, me dá uma idéia para um projeto de jogo que eu tenho. Da próxima vez eu carga de Starcraft 2 doente tem que ver se isso é como o seu feito =)
Bryan Harrington
Resposta fantástica, excelentes capturas de tela!
Erro 454
Sua imagem morreu. Você acha que poderia consertar isso?
Mithical
3

vou adivinhar o que você quer dizer e apenas lançar uma idéia lá fora, mas certamente não será a maneira 'famosa' de fazer isso.

tudo em 2D

pegue 2 texturas. uma sua massa terrestre, a outra suas nuvens. as nuvens devem ter uma camada alfa que corresponda para que você possa 'ver através delas'.

torne as texturas inclináveis, ou seja, elas envolvem perfeitamente. existem programas que ajudam você a fazer esses tutoriais ou no photoshop que você pode seguir.

então, finalmente, você cria uma máscara de estêncil que é apenas um círculo e, com efeito, olha através de um buraco redondo nas texturas quadradas, mascarando os cantos.

agora você anima as matrizes de textura das texturas terra e nuvem para fazê-las se mover. faça com que eles se movam em diferentes direções e velocidades e parecerá estar girando. tudo depende de como você criou suas texturas sem costura.

Dr. McKay
fonte
2

Eu acho que este artigo descreve a técnica. (É em russo, então eu posto o link traduzido.)

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

Eu implementei aqui. http://github.com/meric/renderplanet

Basicamente, você pega uma imagem que codifica a projeção ortográfica ( http://mathworld.wolfram.com/OrthographicProjection.html ) e envolve seu planeta e as nuvens ao redor usando um shader. Desloque a textura do planeta de acordo com dt para fazê-lo girar. Use uma imagem translúcida preparada para o anel e a sombra da atmosfera ou gere-a desenhando arcos translúcidos e algumas experiências com o sombreador da sombra.

Aqui está a imagem:

ortográfico

Para cada pixel dentro do círculo, Red + Green/255é coordenada X normalizada da textura do planeta / nuvem para pesquisa e Blue + Alpha/255é coordenada Y normalizada.

Aqui está o resultado:

amostra

As texturas do planeta e das nuvens devem estar em projeção equiretangular.

Eric
fonte
1

Sua pergunta não é clara quanto às restrições no contexto em que você está trabalhando. A grande maioria das texturas na renderização 3D é 2D. Portanto, se você está apenas mostrando uma esfera 3D com uma textura de superfície 2D mapeada em torno dela, isso não é realmente um problema. Se você não pode usar a renderização em 3D, precisa dizer exatamente o que pode usar.

O problema básico é que você precisa renderizar uma textura plana sobre a superfície de uma esfera, que é obtida gratuitamente com a renderização em 3D. À medida que o planeta gira, as partes visíveis da superfície do planeta são animadas de maneira não linear (as partes equatoriais da textura se movem mais rápido que os pólos). Então eu acho que você precisa distorcer a imagem quando mapeá-la sobre o disco, ou faz o que o VirtualVoid sugeriu, e simplesmente tem várias imagens que você altera ao longo do tempo.

Seria horrível de implementar, mas se você conseguir renderizar a textura, pixel por pixel, basicamente poderá fazer os cálculos de rasterização para cada linha da esfera separadamente. Vamos supor que a textura do seu mapa de superfície esteja achatada, de modo que no equador haja 512px de imagem. Vamos supor também que seu disco visível tenha 256 px de largura. Agora pense em cada linha do disco renderizado como uma janela deslizante na textura da superfície. No equador, a janela tem 50% da largura da textura e você simplesmente copia cada um dos 256px no pixel equivalente no disco. A próxima linha abaixo do disco terá um pouco menos de 256 px, mas, devido ao mapa de superfície distorcido, ainda existem 256 px de dados do mapa de superfície de entrada. Então você sub-prova os dados do mapa da superfície de entrada e renderiza o pixel resultante. Para matemática fácil, vamos ' s assumem que 1/3 do caminho entre o equador e o polo tem 128px de largura no disco de saída. Portanto, cada um desses 128px terá a média de 2 pixels vizinhos. Quando você chega ao polo, calcula a média de todos os 256 pixels em apenas alguns pixels de saída.

Você também pode fazer o contrário e fazer com que as linhas na textura de origem tenham comprimentos diferentes. Portanto, enquanto a linha que contém os dados de origem possui 512px, a linha 1/3 do caminho abaixo tem apenas 256px e a linha na parte inferior possui apenas alguns pixels. Mas cada linha tem o dobro da largura do disco na coordenada y equivalente. Esse tipo de textura seria absolutamente horrível de se criar. E provavelmente sofreria de problemas horríveis de alias.

Nos dois casos, sua animação simplesmente incrementa o pixel inicial x na textura de entrada e passa para o início da linha de textura de entrada.

Quanto mais escrevo sobre isso agora, mais estou convencido de que é uma ideia horrível, que você só implementaria se realmente não tivesse outras opções. E você teria que estar em uma situação muito incomum para não ter outras opções.

Não acredito que tenha ouvido soluções para esse problema (bastante vago) como uma técnica específica chamada.

MrCranky
fonte
0

Sprites. Parece que o que você está descrevendo é um sprite 2D em um mecanismo de jogo 3D para renderizar mais barato (o Nintendo64 fez isso em todo o lugar, assim como muitos mecanismos 3D anteriores).

Se você quiser renderizar um planeta em rotação, basta exibir um sprite 2D que foi animado com base em uma folha de sprite que era uma rotação de planeta pré-renderizada. Assim como, um .GIF animado, por exemplo. O problema é que ele seria pré-renderizado, portanto, como você disse, isso só funciona se o usuário não puder manipular o ângulo de visão.

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

SpacePrez
fonte
0

Isso pode ser apenas uma animação simples, usando uma textura com vários quadros.

VirtualVoid
fonte