Skocz do zawartości

idealna izometria w majce niemozliwa?


Rekomendowane odpowiedzi

Napisano

witam.

nurtuje mnie ten temat juz od niemal miesiaca i niestety dochodze do smutnych wniosków, że uzyskanie perfekcyjnej pixel-perfektowej izometri (czyli takich tilesow, ktore mozna laczyc w silniku 2d i idealnie do siebie pasuja) nie da sie osiagnac. (chyba :) ) Jednak sie nie poddaje i dalej proboje zmeczyc temat. Google milczy, jest pare topicow na ten temat jednak zwykle koncza sie bez rozwiazania, albo bez "dzialajacego" rozwiazania (testowalem je wszystkie)

jest nawet tutorial a propo renderowania izometri w majce, jednak nie daje pixel-perfect rezultatow, z ktorych mozna robic tilesy.

 

Do czego doszedlem jak narazie:

1. Po pierwsze ustawiamy mental raya, dajemy sampling na 0 i w multi-pixel filtering ustawiamy filter lanczos (ten zabieg eliminuje anti-aliasing z krawedzi)

2. Teraz mamy do wyboru dwa sposoby:

1. obracamy sobie kamerke (-30,45,0) mając wlaczone ortho, albo obracamy frontview tak samo. (gorsze rezultaty)

2. drugi sposob daje troche lepsze rezultaty: wchodzimy w frontview, zaznaczamy obiekt i rotatujemy go (-50.768 , 37.761 , 26.565)

ale tak czy siak zostaje ten sam problem (lewa strona czesto =/= prawej, dol =/= gora itd.)

 

NIE MAM POJECIA dlaczego tak sie dzieje. w cyferkach wszystko wyglada idealnie a renderer robi sobie jaja

tutaj rezultaty:

isofail.jpg

a tutaj jak to powinno wygladac:

tileDeconstruction2.gif

mam nadzieje, ze ktos zdola pomoc

pozdrawiam

  • Odpowiedzi 23
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Top Posters In This Topic

Napisano

a nie jest to przypadkiem błąd w założeniu - bo wymiarowo to się pewnie zgadza ale silnik viewportu dąży do interpretacji powierzchni a nie zachowania pikselowej równości. Po wygenerowaniu w np. 8x większym wymiarze i przeskalowaniu powinno zgrać się z silnikiem izometrycznym. IMO to bardziej problem 'zmiennoprzecinkowości' operacji.

Napisano

gdzie to znalesc dokladnie? ok znalazlem to jest w maya software, a ja korzystam z mentala, ale w maya software i tak jest ustawiony na 1, wiec to nie to.

Napisano

a to nie chodzi o to ze w mayi masz perspektywe a nie rzut izometryczny ?

Albo inaczej sprobuj renderowac w znacznie wiekszej rodzielczosci i zeskaluj to do takiej jakiej chcesz moze to cos pomoze

Napisano

przeciez pisze ze uzywa ortho camerki.

ja bym stawial na to ze jednak lanczos to jest filterek, ktory moze ostro pokazuje pixelki, ale jednak je sobie jakos zmienia. a jak to wyglada jak renderujesz na zwyklym maya software bez antyaliasingu, tez sa takie problemy?

 

czyli raczej bym szukal gdzie sie w mentalu aliasing wylancza zupelnie. chociaz podobno wystarczy min max sample lev na 0 ustawic... wiec to czy potem masz lanczosa czy inny box nie powinno miec znaczenia. niemniej, ciekawy problem masz chopie ;P

Napisano (edytowane)

sampling na 0 w mental rayu dalej daje antialiasing - niestety, przy uzyciu lanczosa anti aliasing jest eliminowany (przy ustawieniach sample level 0). w maja software wydaje mi sie, ze nie ma mozliwosci wylaczenia anti aliasu. Mozna tylko ustawic low quality ktory i tak daje jakis tam antialias. (chyba ze o czyms nie wiem?)

 

EDIT: pogrzebałem troche, wystarczy unchecknąc premultiply i antialias krawędziowy znika.

Rezultaty są troche lepsze ale wygląda na to, że mimo ortho kamery dalej jest jakaś bardzo minimalna perspektywa (bo równoległe linie pixeli na podstawie i górnej krawędzi cuba nadal są wzgłedem siebie przesunięte o 1 px.

wronga.jpg

 

niemniej zrobilem jakis tam progres. Przy odpowiednim zoomie kamery, interpretacja pixeli sie nieco zmienia i da sie osiągnać dobre rezultaty - niestety tylko przy Cubie, przy probie zrobienia bardziej skomplikowanego zloopowanego tilesu (np. skałki, klifu etc.) problem dalej sie pojawia.

 

zaczyna mnie zastanawiać, jak parenaście dobrych lat temu (np. w Diablo 1 - rok wydania 1996) udało im się osiągnać tak bezproblemowy prerender, a teraz w dobie 20x lepszych narzędzi jest to duży problem - wystarczy poszukać na googlu jakichkolwiek informacji nt. prerenderowania, z góry wam mówie, że nie znajdziecie nic.

 

problem unsolved nadal.

Mam nadzieje, ze ktos to rozwiazał, bo widziałem podczas rajdu na google, że pare osób miało podobny problem.

 

Dzięki za pomoc i czekam na dalsze pomysły

Edytowane przez zbiornik
Napisano
zaczyna mnie zastanawiać, jak parenaście dobrych lat temu (np. w Diablo 1 - rok wydania 1996) udało im się osiągnać tak bezproblemowy prerender, a teraz w dobie 20x lepszych narzędzi jest to duży problem - wystarczy poszukać na googlu jakichkolwiek informacji nt. prerenderowania, z góry wam mówie, że nie znajdziecie nic.

 

jedyny problem jaki tu widzę, to fakt ze nie ustawiasz sobie drobnej ręcznej korekty z jednego idealnego plane'a albo nie masz gotowej maski i nie renderujesz bez kombinowania.

Napisano

zbiornik - Właśnie przeczytałem o Twoim problemie i po pierwszym poście moge Cię zapewnić że nie osiągniesz rezultatu jaki chcesz w podstawowych twierdzeń.

1. (-50.768 , 37.761 , 26.565) ... skąd te wartości? - Nie osiągniesz matematycznej precyzji co do piksela zaokrąglając do tysięcznych w układzie kartezjańskim. Wg.mnie zadowalające rezultaty dostaniesz 6-8 miejsc po przecinku.

2. "multu-pixel filtering na lanczos" - nie możesz W OGÓLE filtrować. Lanchos ma wykres "wyostrzający" obcinający alphę i wyostrzający krewędzie ale to dalej jest filter. Jak chcesz mieć najostrzejsze krawędzie musisz w ogóle wyłączyć filtrowanie ... generalnie takiej możliwości nie masz więc jedyne co Ci pozostaje to właśnie wyłączyć premultiply i otworzyć same kanały RGB bez alphy - wtedy otrzymasz niefiltrowane rgb a filter tylko na alphie będzie.

 

Rozwiązanie - błędem jaki robisz jest ustawianie kamery - musisz to zrobić w układzie współrzędnych sferycznych, a takich w MEL'u nie ma - jest w API. A jak robisz już w kartezjańskim i nie chcesz specjalnie sobie noda do tego pisać to zwiększ precyzję wartości z 0.000 do przynajmniej 0.000000. Mimo że w polach widzisz tylko 3 cyfry po przecinku pola Maya przyjmują wartości z zakresu float ... czyli dużo więcej.

Napisano

czy moglbys przyblizyc mi temat ukladu sferycznego? jak to zrobic w majce? Co to za API o ktorym mowisz? Skryptowania jeszcze nawet nie dotykalem dlatego nie bardzo rozumiem o czym piszesz.

Z góry dzieki

Napisano

udało się w majce. Niestety jest to kwestia szczescia ustawienia odpowiedniego zooma i translacji kamery.

 

niebardzo mnie zadowala takie rozwiazanie, ale przynajmniej jakies jest :)

dzieki wszystkim za pomoc

Napisano

zbiornik:

 

1. układ sferyczny - http://pl.wikipedia.org/wiki/Uk%C5%82ad_wsp%C3%B3%C5%82rz%C4%99dnych_sferycznych

Ogólnie jest to reprezentacja punktu w przestrzeni euklidesowej inna od tradycyjnej, której nas uczą w szkole czyli kartezjańskiej - to popularne X,Y,Z. Przestrzeń kartezjańska ogólnie też Ci da zadowolającą precyzję ale nie 3 miejsca po przecinku .. to znaczy może i starczą 3 miejsca po przecinku pod warunkiem że reszta do same "0", ale jakoś w to nie wierzę. Nie liczyłem tego co prawda ale wartości, które podałeś nie wyglądają mi na "okrągłe", dlatego pytałem skąd te wartości.

2. API Maya - to ogólnie interfejs programisty - taka głębsza ingerencja w Mayę, pozwala korzystać m.in. z bibliotek C++ do wykonywania operacji na obiektach, czy obrazie, poswala na tworzenie własnych obiektów podstawowych, nadawanie charakterystyk shaderom i ogólnie mocna rzecz, ale bez wiedzy programistycznej nie podchodź.

 

 

ps. zbiornik, podeślij rezultat, bo absurdalny ale ciekawy temat nadałeś muszę przyznać :)

Napisano

Zbiornik, muszę powiedzieć, że zaintrygowało mnie to do tego stopnia że zainstalowałem Maykę na chwilę na laptopa żeby sprawdzić w czym problem z tą izometrią i albo miałem CHOLERNEGO farta, albo wiem gdzie tkwił problem w Twoich ustawieniach. Mi wyszło coś takiego za pierwszym razem:

 

izo1.jpg

 

Banding na cieniach to kwestia kompresji .jpg. Jak chcesz to Ci podeśle scene. Nic nie zrobiłem prostrzego niż zgrupowanie kamery do dwóch grup celem zapewnienia poprawnej jej rotacji po X i Y i ustawiłem jedną rzecz, którą pewnie miałeś inaczej - mianowicie "adaptive sampling" ustaw na "fixed sampling" i po sprawie - w ten skosób maya "wchodząc na obiekt" podczas renderingu nie zmieni Ci ilości sampli podczas "schodzenia z niego" i ilość sampli pp 256. Dodatkowo utwórz nowe światło, gdyż jeżeli nie zmieniłeś tego z defaultu Maya tworzy przed renderem tymczasowe światło directional o dupnej jakości cieni przez co miałeś krzaki z lewej strony obiektu. A jak stworzysz własne to podkręcasz jakość cienie- ustawiasz je na raytraced i w ten oto sposób na moim renderze nawet cienie się zgadzają perfekcyjnie.

 

Pozdrawiam!

Napisano

beny bardzo ladny rezultat, (bo symetryczny) ale zmien kat kamery na 60' z bo w tej chwili masz chyba 35' jesli mnie oko nie myli a to nie jest ta izometria o ktora mi chodzi, i wylacz premultiply i pokaz jak to wtedy wyglada :)

 

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU.

 

 

Nie wierze :) Chcialem sie pochwalic rezultatami wczorajszymi (bylo idealnie co do px, zlokowalem cala kamere, zeby przez przypadek nie ruszyc i zapisalem scene). Odpalam przedchwila majke renderuje i intepretuje zupelnie inaczej.

WTF?

Napisano

Ależ proszę Cię bardzo.

 

izo2.jpg

 

Jako że premultiplikacja działa wyłącznie w obszarach alphy różnej od 0 i 1, żeby otrzymać schodkowy rezultat na krawędzi wewnętrznej musisz pojechać lanczosem o zakresie 2 pix a nie 4 defaultowo.

 

Pozdrawiam!

Napisano (edytowane)

beny- Nie działa, masz po trzy pixele na srodku i po dwa po prawej i lewej, powinny byc 2 wszedzie.

 

edit.

 

sprawdziłem maxa i u mnie dalej jest idealnie, rozwiązanie: olej tą cholerna majkę ;)

tiles.jpg

Edytowane przez kotisded
Napisano

Kurde, faktycznie :DD zasugerowałem się że z filtrem na 4 były 2 w środku i chyba tak bardzo chciałem zobaczyć 2 w środku że je zobaczyłem :))) obadam temat głębiej wieczorem jak nie zapomnę.

 

Jeżeli w Maxie faktycznie się to udaje "za każdym razem" to nareszcie znalazłem coś do czego ten soft się nadaje :)

Napisano (edytowane)

No faktycznie cosik nie idzie ... dziwna sprawa. Ja olewam, jak ktoś chce się pobawić to sprawa wygląda tak, odpalcie poniższy skrypt i renderujcie od frontu:

 

$tmpSin = tan(.6146555);

$rotX = asin($tmpSin)*45.0;

$cube = `polyCube`;

xform -a -roo yzx -ro $rotX 45 0 $cube;

 

Jak ktoś da radę proszę o podzielenie się tematem.

 

Pozdrawiam

Edytowane przez beny

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności