Blog użytkownika lechu

lechu lechu 20.03.2014, 11:45
Trzeci wymiar w kieszeni
1684V

Trzeci wymiar w kieszeni

Od premiery Nintendo 3DS minęły już 3 lata. Konsola zadomowiła się na rynku i w przeciwieństwie do swojego konkurenta spod szyldu Sony, sprzedaje się wyśmienicie. Co ciekawe, efekt 3D który miał być główną atrakcją nowego handhelda Ninny, gdzieś po drodze się schował, a samo Big N nie tak dawno wypluło na rynek 2DSa - pokraczną konsolę skierowaną do najmłodszych użytkowników, przy okazji czyniąc z niej model budżetowy, w tym pozbawiony rzeczonego efektu.

Spadek zainteresowania efektem 3D w zasadzie nikogo nie powinien specjalnie dziwić. Kilkukrotnie już technologię tą próbowano zaszczepić na rynku i za każdym razem z tym samym skutkiem. Po góra dwóch latach lądowała w szufladce "bajery, buzery i inne ciekawostki". W przypadku 3DSa można było wnioskować że będzie inaczej. Po raz pierwszy bowiem w przypadku konsoli zastosowano technikę która nie wymaga ślęczenia przed wyświetlaczem w mniej lub bardziej pociesznych okularach, a więc teoretycznie uwalnia nas od największej niedogodności jaką znamy z kin czy domowych salonów. Niestety, próby przeniesienia tej technologi choćby na rynek smartfonów spaliły na panewce. Zarówno słuchawki HTC i LG jak i seria laptopów Toshiby zniknęły z rynku szybciej niż się na nim pojawiły. Dodatkowo, szpilą wbitą w lewy pośladek Nintendo może być też kwestia dyskusyjnych praw patentowych związanych z tą technologią. Mimo to część osób bardzo chwali sobie efekt 3d jaki zastosowano w handheldzie Nintendo.

Trochę teorii, czyli jak to działa?

Podstawą chyba wszystkich znanych dotąd technologi wyświetlania trójwymiaru jest nałożenie na siebie dwóch obrazów. Rozwiązanie takie jest dość oczywiste ponieważ w naturalny sposób imituje sposób działania ludzkiego oka, pozwalając naszemu mózgowi na scalenie dwóch obrazów 2d w jeden trójwymiarowy. Problematyczną kwestią jest tutaj technologia która odpowiada za zdefiniowanie tego które oko który obraz ma rozpoznawać. Takich technik jest wiele. Jedną ze starszych i zapewne większości znanych z młodszych lat, będzie anaglif. To te śmieszne okulary z czerwonym i niebieskim szkiełkiem lub plastikiem. Bardziej nowożytnymi technologiami są okulary polaryzacyjne lub migawkowe o których dość głośno zrobiło się nie dalej jak 3-4 lata temu. Nad sposobem ich działania nie będę się tutaj rozwodził. Zainteresowani z pewnością znajdą w sieci nie jeden artykuł, który znacznie lepiej i dokładniej opisze konkretną technologię. To co łączy wszystkie wyżej wymienione technologie to fakt że zaliczają się one do technik stereoskopii. Technologią która stoi za efektem 3d zastosowanym w 3DSie jest bariera paralaksy (z ang. Parallax Barrier, zwana także blokadą paralaksy). Takie rozwiązanie klasyfikowane jest jako autostereoskopowe ponieważ nie wymaga ono zastosowania dodatkowych okularów, urządzeń czy nakładek, aby oddać efekt głębi.

Sporą niedogodnością związaną z barierą paralaksy jest to że przy aktywnym trybie 3d, rozdzielczość obrazu dla jednego oka jest redukowana o połowę. Stąd pomysł aby w wyświetlaczu 3DSa zastosować nietypową rozdzielczość, tj. 800x240 pikseli. Dzięki takiemu zabiegowi przy włączonym trybie 3d na każde oko przypada klatka o rozmiarze 400x240 px, czyli znośnie, chociaż jak na dzisiejsze standardy, bez rewelacji.

Skoro przy samym wyświetlaczu jesteśmy, dość szybko daje sie zauważyć inną ciekawostkę z nim związaną. Jako że górny ekran 3DSa ma proporcję 5:3, logicznym jest że układ pikseli jest niestandardowy. Przez lata przyzwyczailiśmy się do "kwadratowych" punkcików. Te na wyświetlaczu 3DSa są natomiast prostokątne. Stąd biorą się widoczne zwłaszcza w wersji XL - ciemne, poziome pasy na górnym ekranie. Jest to nic innego jak efekt siatki pikseli. Nie jest ona tak bardzo widoczna w pionie ponieważ horyzontalne zagęszczenie pikseli jest dwukrotnie wyższe. Dzięki temu niektóre gry na 3DSie lepiej wyglądają w trybie 2d. Jest to z kolei spowodowane tym że dzięki gęstszemu upakowaniu pikseli uzyskujemy efekt zbliżony do częściowego (bo działającego tylko w jednej płaszczyźnie) anty-aliasing'u.

Swego czasu dość drażliwym tematem dyskusji była właśnie kwestia rozdzielczości gier z 3DSa w trybie 2d. Szczerze mówiąc (a może raczej pisząc) sam dałem się nabrać. Nie jest prawdą że gry w trybie 2d działają w rozdzielczości 400x240. Niemal wszystkie gry z którymi miałem dotąd styczność rzeczywiście, nawet w trybie 2d, chodzą w 800x240px. Jedynym wyjątkiem jest 3DSowy Street Figter IV, przy czym wyłączenie efektu 3d za pomocą samego suwaka jeszcze nie redukuje rozdzielczości wyświetlanego obrazu. Można to natomiast wymusić z poziomu menu opcji gry. Wówczas obraz robi się bardziej ziarnisty, ale dzięki temu uzyskujemy namacalnie wyższy framerate, dzięki czemu animacja staje się wyraźnie płynniejsza.

Kończąc już te kwazi-techniczne rozważania - zacząłem się zastanawiać czy możliwym jest uzyskanie efektu 3d w domowym zaciszu. Co prawda 3DS jest wyposażony w kamerę 3d, ale powiedzmy sobie szczerze - jakość zdjęć przy matrycy 0,3 Mpix jest zwyczajnie podła. Dzięki uprzejmości wszechwiedzącego i wszędobylskiego wujka Gugla, w ciągu zaledwie kilku minut dowiedziałem się że własnoręczne tworzenie obrazów 3d jest możliwe i co więcej, wcale nie jest to takie trudne.

Zróbmy sobie obrazek 3d


Oczywiście najwięcej problemów przysparza kwestia samego wykonania grafiki. Jako zawodowy grafik komputerowy z tym akurat problemu nie mam. Co prawda na co dzień raczej zajmuje się nudnymi i żmudnym rzeczami z zakresu www/ui, niekiedy jednak zdarza mi się popuścić wodze fantazji. Zdaje sobie sprawę z tego że wiele osób właśnie w tym momencie odbije się od ściany, ale... no cóż, mówi się trudno ;-) Na naukę nigdy nie jest za późno.

Jak pisałem kilka akapitów wyżej, podstawą do uzyskania efektu 3d jest wykonanie dwóch grafik prezentujących tą samą scenę, ale w nieco odmiennej perspektywie - jedna klatka na lewe oko, druga klatka na oko prawe. Efekt taki najprościej rzecz jasna będzie uzyskać w jakimkolwiek programie do grafiki 3d, chociaż magicy Photoshop'a i After Effects'a nawet ze zwykłego zdjęcia bądź grafiki 2d wydobędą pożądaną głębie. Ja jednak nie miałem na tyle czasu ani cierpliwości, dlatego też ograniczyłem się do pierwszej opcji.

Dla spreparowanej wcześniej sceny lub modelu wykonujemy render poglądowy z kamerą ustawioną w pozycji bazowej. Krok ten oczywiście można pominąć, chociaż zawsze dobrze mieć jakiś punkt odniesienia - umownie zwaną pozycję "0". Następnie wykonujemy rotację kamery względem osi Y o zadany kąt i lekko przesuwamy kamerę wzdłuż osi X (jako że zazwyczaj lewe oko jest nieco oddalone od oka prawego). Ponieważ grafika którą przygotowujemy jest prerenderowana, oglądając ją na wyświetlaczu 3DSa nie będziemy mieć możliwości zmiany natężenia efektu głębi, tak jak możemy go regulować w grach. Za głębie odpowiadać więc będzie tylko i wyłącznie przyjęty przez nas kąt rotacji kamery. Im większy, tym efekt będzie bardziej natężony.

Bardzo ważnym jest aby nie przesadzić z kątem odchylenia. Z moich - nie ukrywam - dość krótkich testów wynika że odchylenie od pozycji bazowej na poziomie 1,5° to takie zjadliwe dla oka maksimum. Powyżej tej wartości uzyskany efekt zaczyna być na tyle dziwny, że można wręcz nabawić się zeza bądź oczopląsu. Co do rozmiaru grafik, nie powinno mieć to większego znaczenia, ale zważywszy na fakt "podwajanej" przez 3DSa rozdzielczości w trybie 3d, oraz biorąc poprawkę na format obrazu, najlepiej aby każda grafika miała rozdzielczość 400x240px lub jej wielokrotność, np. 800x480.

Drugi render dla drugiego oka wykonujemy poprzez powrót kamery do pozycji bazowej i rotacje o zadany kąt ale w przeciwnym kierunku i analogiczne przesunięcie kamery względem X. Obie grafiki zapisujemy - najlepiej w formacie jpg lub png.
 
Oczywiście, jeżeli posługujecie się jakimś programem do grafiki 3d, z pewnością znajdziecie gotowe, płatne bądź darmowe, pluginy które sprawę ustawienia kamery załatwią za Was. Mnie osobiście nie chciało się takowych szukać, a powyższy opis jest bardzo łopatologiczny i ma na celu jedynie przybliżyć ogólny zamysł i zasadę. W praktyce, w zależności od sceny/modelu będzie trzeba nieco pokombinować z wspomnianymi parametrami (kąt i przesunięcie kamery) tak aby uzyskać jak najlepszy efekt, a konieczność ciągłego konwertowania i kopiowania grafiki na kartę pamięci 3DSa szybko staje się żmudnym i uciążliwym zabiegiem.

Wracając do tematu - grafiki 3d które rozpoznaje handheld Ninny zapisywane są w formacie mpo. Wystarczy więc wklepać w guglu jpg to mpo i zaraz znajdziemy co najmniej kilka open source'owych aplikacji. Ja skorzystałem z StereoPhoto Maker.
Programik jest bardzo prosty w obsłudze. Wystarczy wskazać dwa interesujące nas obrazy a następnie wybrać opcję Save MPO File, dodatkowo w opcjach zapisu zaznaczając For Nintendo 3DS. Teraz zapisany plik musimy przerzucić na kartę pamięci naszego 3DSa. Grafiki umieszczamy w folderze DCIM.

Tutaj mały haczyk pod postacią nazewnictwa plików i podfolderów. Jeżeli jeszcze o tym nie wiecie, 3DS rozpozna tylko grafiki i foldery których nazwy są zgodne z odgórnie określonym kluczem. Pliki graficzne muszą mieć nazwę w formacie LLL_NNNN.MPO, gdzie L to litera a N - liczba, natomiast foldery, jeżeli nie chcecie korzystać z default'owego 100NIN03, powinny mieć format nazwy NNNLLLLL. Ja przykładowo nie chcąc zaśmiecać systemowego defaulta, w folderze DCIM utworzyłem subfolder 800LECHU nazywając swoje pliki kolejno KJN_0001.MPO, KJN_0002.MPO itd.

Po przekopiowaniu obrazków na kartę pamięci, uruchamiamy 3DSową Nintendo 3DS Camera, wybieramy przeglądanie zdjęć i viola.



Tutaj kilka mniej lub bardziej surowych renderów które powstały na potrzeby powyższego wpisu (rozpakować i wrzucić do folderu DCIM na karcie SD).

I bonus dla kapkę starszych użytkowników *.

* Hasłem zagadka: Ukryty; broń; kuzyn Tigrexa.
 

Tagi: 3D 3ds Nintendo

Oceń notkę
+ +11 -

Oceń profil
+ +98 -
lechu
Ranking: 24 Poziom: 80
PD: 64047
REPUTACJA: 44346