Złudzenie 3D tekstury planety 2D

10

Kilka lat temu słyszałem technikę, która daje złudzenie obracającej się planety za pomocą tekstury 2D. Biorąc pod uwagę, że użytkownik nie może zmienić swojej pozycji ani rzutni.

Jak nazywa się ta technika?

Henrik P. Hessel
źródło

Odpowiedzi:

25

OK, myślę, że mam teraz przedstawiciela. Treść poprzedniego postu z osadzonymi obrazami. Czy szukasz efektu obracającej się planety? To po prostu przewijany obraz 2D oglądany przez półprzezroczystą „dziurę” w polu gwiazdy.

Przygotowałem szybki, animowany gif, jak wyglądałby efekt. Najwyraźniej można go animować płynniej - przesunąłem powierzchnię planety o 4 piksele na każdą klatkę. Nie jest również ustawione na zawijanie obrazu, więc na końcu pętli występuje usterka.

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

Zrobiłem to wszystko w Photoshopie, ale koncepcja powinna działać w środowisku renderowania 2D, które umożliwia wykonywanie przezroczystości alfa itp. Oto seria zrzutów ekranu pokazujących proces ...

  1. Utwórz puste tło gwiazdy i wytnij w nim okrągły otwór.
    alternatywny tekst
  2. Znajdź cieniowaną kulę w skali szarości dla swojej planety, taką jak ta
    alternatywny tekst
  3. Oto nasze gwiazdy z dziurą i cieniowaną kulą u góry, półprzezroczystą
    alternatywny tekst
  4. Zrób niebieskie kółko wielkości otworu i nadaj mu zewnętrzny niebieski blask. Ustaw także półprzezroczyste. Oto jak wygląda z zacienioną kulą
    alternatywny tekst
  5. Teraz znajdź teksturę powierzchni planety. Znalazłem ten po prostu googlujący „teksturę powierzchni planety”
    alternatywny tekst
  6. Umieść teksturę planety POD obrazem gwiazdy z półprzezroczystą dziurą, aby uzyskać ten wygląd
    alternatywny tekst

Aby animować powierzchnię planety, wystarczy przesunąć teksturę powierzchni planety. Musisz być sprytny w przesuwaniu tekstury, gdy osiągnie krawędź, aby uzyskać płynny i niekończący się obrót.

Mam nadzieję, że to pomaga i jest efektem, którego szukałeś!

PS Widziałem ten artykuł o artystach z dość nowatorskim sposobem tworzenia tekstur planet - przypomniałem sobie tę odpowiedź :) http://www.behance.net/gallery/Pan-Planets/9557465

Tim Holt
źródło
np Henrik. Gdy tylko zobaczyłem twój post, pomyślałem: „Założę się, że wiem, co ten facet znaczy”. Nie jestem w 100% pewien, ale myślę, że tak wyglądał efekt obracającej się planety w oryginalnym programie telewizyjnym Star Trek.
Tim Holt,
To była świetna odpowiedź, daje mi pomysł na projekt gry, który mam. Następnym razem, gdy załaduję StarCrafta 2, muszę zobaczyć, czy tak się to robi =)
Bryan Harrington,
Fantastyczna odpowiedź, świetne zrzuty ekranu!
Błąd 454
Twój obraz umarł. Czy uważasz, że możesz to naprawić?
Mithical
3

zgadnę, co masz na myśli, i po prostu przedstawię pomysł, ale z pewnością nie będzie to „sławny” sposób na zrobienie tego.

wszystko w 2D

weź 2 tekstury. jedna twoja masa ziemi, druga twoje chmury. chmury powinny mieć dopasowaną warstwę alfa, abyś mógł je „zobaczyć”.

sprawiają, że tekstury można układać w płytki, to znaczy, że są one owijane bez szwu. istnieją programy, które pomogą Ci je tworzyć lub samouczki w Photoshopie, które możesz śledzić.

następnie w końcu tworzysz maskę szablonową, która jest tylko kołem, dzięki czemu patrzysz przez okrągły otwór na kwadratowe tekstury, maskując w ten sposób rogi.

teraz animujesz matryce tekstur tekstur ziemi i chmur, aby je przesunąć. spraw, aby poruszały się w różnych kierunkach i prędkościach, a będą się one obracać. wszystko zależy od tego, jak płynnie tworzysz tekstury.

Dr McKay
źródło
2

Myślę, że ten artykuł opisuje technikę. (Jest w języku rosyjskim, więc zamieszczam przetłumaczony link).

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

Zaimplementowałem to tutaj. http://github.com/meric/renderplanet

Zasadniczo robisz zdjęcie, które koduje rzut ortograficzny ( http://mathworld.wolfram.com/OrthographicProjection.html ) i owijasz wokół niego teksturę planety i chmury za pomocą modułu cieniującego. Przesunąć teksturę planety według dt, aby się obracała. Użyj przygotowanego półprzezroczystego obrazu dla pierścienia i cienia atmosfery lub wygeneruj go, rysując półprzezroczyste łuki i eksperymentując z shaderem dla cienia.

Oto zdjęcie:

pisowniany

Dla każdego piksela w okręgu Red + Green/255jest znormalizowana współrzędna X tekstury planety / chmury do wyszukiwania i Blue + Alpha/255jest znormalizowana współrzędna Y.

Oto wynik:

próba

Tekstury planety i chmur powinny mieć rzut prostopadły.

Eric
źródło
1

Twoje pytanie jest niejasne co do ograniczeń kontekstu, w którym pracujesz. Zdecydowana większość tekstur w renderowaniu 3D to 2D. Więc jeśli tylko pokazujesz kulę 3D z odwzorowaną wokół niej teksturą powierzchni 2D, to nie jest tak naprawdę problem. Jeśli nie możesz korzystać z renderowania 3D, musisz powiedzieć dokładnie, czego możesz użyć.

Podstawową kwestią jest to, że musisz wyrenderować płaską teksturę na powierzchni kuli, którą otrzymujesz za darmo przy renderowaniu 3D. Gdy planeta się obraca, widoczne części powierzchni planety animują się w nieliniowy sposób (równikowe części tekstury poruszają się szybciej niż bieguny). Myślę więc, że albo musisz sam zniekształcić obraz podczas mapowania go na dysku, albo robisz to, jak sugeruje VirtualVoid, i po prostu masz wiele obrazów, które zmieniasz z czasem.

Byłoby to strasznie trudne do wdrożenia, ale jeśli jesteś w stanie renderować teksturę, piksel po pikselu, wtedy możesz zasadniczo wykonać obliczenia rasteryzacji dla każdej linii kuli osobno. Załóżmy, że tekstura mapy powierzchni jest spłaszczona, aby na równiku było 512 pikseli obrazu. Załóżmy również, że widoczny dysk ma szerokość 256 pikseli. Teraz pomyśl o każdej linii renderowanego dysku jako przesuwanym oknie na fakturze powierzchni. Na równiku okno ma 50% szerokości tekstury i wystarczy skopiować każdy z 256 pikseli na ekwiwalentny piksel na płycie. Następny wiersz na dysku będzie miał nieco mniej niż 256 pikseli, ale z powodu zniekształconej mapy powierzchni wciąż jest 256 pikseli danych wejściowych mapy powierzchni. Następnie poddajesz podpróbkę wejściowym danym mapy powierzchni i wyrenderujesz wynikowy piksel. Dla łatwych obliczeń matematycznych „ Załóżmy, że 1/3 drogi między równikiem a biegunem ma szerokość 128 pikseli na dysku wyjściowym. Zatem każdy z tych 128 pikseli będzie średnią z 2 sąsiednich pikseli. Gdy dojdziesz do bieguna, uśredniasz wszystkie 256 pikseli na zaledwie kilka pikseli wyjściowych.

Możesz to również zrobić w inny sposób, a linie w teksturze źródłowej będą miały różne długości. Tak więc, podczas gdy linia zawierająca dane źródłowe ma 512 pikseli, linia 1/3 drogi w dół ma tylko 256 pikseli, a linia na dole ma tylko kilka pikseli. Ale każda linia jest dwa razy większa niż szerokość dysku przy równoważnej współrzędnej y. Tego rodzaju tekstura byłaby jednak absolutnie okropna do stworzenia. I prawdopodobnie cierpiałby z powodu okropnych problemów z aliasingiem.

W obu tych przypadkach animacja po prostu zwiększa początkowy piksel x w teksturze wejściowej i zawija się na początku linii tekstury wejściowej.

Im więcej o tym piszę, tym bardziej jestem przekonany, że to okropny pomysł, który wdrożysz tylko wtedy, gdy naprawdę nie będziesz mieć żadnych innych możliwości. I musiałbyś być w bardzo nietypowej sytuacji, aby nie mieć innych możliwości.

Nie sądzę, że słyszałem o rozwiązaniach tego (raczej niejasnego) problemu jako konkretnej nazwanej techniki.

MrCranky
źródło
0

Duszki Wygląda na to, że opisujesz duszka 2D w silniku gier 3D do renderowania tanio (Nintendo64 zrobiło to wszędzie, podobnie jak wiele wczesnych silników 3D).

Jeśli chcesz sprawić, że planeta będzie się obracać, musisz po prostu wyświetlić duszka 2D, które było animowane na podstawie arkusza duszka, który był wcześniej renderowanym obrotem planety. Na przykład animowany .GIF. Problem polega na tym, że byłby wstępnie renderowany, więc, jak powiedziałeś, działa to tylko wtedy, gdy użytkownik nie może manipulować kątem widzenia.

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

SpacePrez
źródło
0

To może być tylko prosta animacja, wykorzystująca jedną teksturę z kilkoma ramkami.

VirtualVoid
źródło