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?
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?
Odpowiedzi:
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 ...
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
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.
Myślę, że ten artykuł opisuje technikę. (Jest w języku rosyjskim, więc zamieszczam przetłumaczony link).
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:
Dla każdego piksela w okręgu Red + Green/255
jest znormalizowana współrzędna X tekstury planety / chmury do wyszukiwania i Blue + Alpha/255
jest znormalizowana współrzędna Y.
Oto wynik:
Tekstury planety i chmur powinny mieć rzut prostopadły.
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.
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.
To może być tylko prosta animacja, wykorzystująca jedną teksturę z kilkoma ramkami.