Jak to jest, że np. w grach nie stosuje się krzywych? Dla jasności mogę podać przykład koła w samochodzie, które zawsze składa się z w wielokątów (chyba każdy wie jak to wygląda). Jeśli obliczenia na krzywych są zbyt skomplikowane dla procesorów graficznych, to dlaczego nie można zastosować osobnych układów, które miałyby za zadanie właśnie wykonywanie operacji na krzywych. Jak bardzo gry zyskałyby na wyglądzie...
(chyba każdy wie jak to wygląda)
ja nie wiem, jak?
W sumie dobre pytanie, sam sie nad tym zastanawiam.
Lutz --> Co ten link wnosi? Bo nie bardzo rozumiem.
I tutaj do akcji wchodzi technologia Unlimited Detail.
http://www.youtube.com/watch?feature=player_embedded&v=00gAbgBu8R4
Dlaczego w grach do tej pory nie używa się krzywych?
Bo to złe.
[4] to byla pierwsza komercyjna gra w ktorej modele byly na splinach.
a przynajmniej tak sie reklamowali.
[7] a co to ma do rzeczy?
Cyber Rekin
I tutaj do akcji wchodzi technologia Unlimited Detail.
Potem do akcji wchodzi developer:
D: Poprosze animacje i fizyke.
Unlimited Detail: Oh shit...
Co do pytania z watku - jakie krzywe? Silniki graficzne wyswietlaja poligony. Nie ma fizycznej mozliwosci wyswietlenia krzywej poza zageszczeniem poligonow/punktow do punktu w ktorym widac plynna krawedz. A im wiecej poligonow tym wieksza wymagana moc obliczeniowa.
edit
Lutz
Tia, tylko potem te modele na spline'ach byly tesselowane do poligonow. :)
Engine Messiaha dostawal ogromny model na splinach i tesselowal go na zywca zachowujac detal w zaleznosci od odleglosci od kamery. Problem w tym, ze modele zaczely przypominac galarete. :)
tesselacja jest wszedzie, nawet na krzywej w illustratorze.
edit (tylko tam to jest raczej interpolacja)
Toć o tym mówię. :)
Mam wrażenie jakby autor wątku oczekiwał magicznych, idealnych krzywych które są płynne dlatego że są krzywymi, a zupełnie pomija aspekt że jakoś to trzeba wyświetlić.
ale mi ten Unlimitet Detal narobił smaczka mam nadzieje że wykorzystają te technologie na Xbox 720 i PS4
Nie wykorzystają. To ładnie wygląda na statycznych demoreelach i ma zapewne za zadanie wyciągać kasę od inwestorów. Poza tym jest niepraktyczne, ma ogromną ilość słabych stron (animacja, fizyka) i wcale nie jest nowe - to są po prostu voxele, które kiedyś już próbowano używać (Comanche, Delta Force, Outcast bodajże), ale ograniczenia okazały się zbyt wielkie.
Mam wrażenie jakby autor wątku oczekiwał magicznych, idealnych krzywych które są płynne dlatego że są krzywymi, a zupełnie pomija aspekt że jakoś to trzeba wyświetlić.
Owszem, oczekuję i nie wiem dlaczego miało by to nie być możliwe? Dlaczego jest problem, aby to wyświetlić? Wyprodukować wyspecjalizowany procesor, który będzie to obsługiwał, dodać do karty i już.
Chodzi o kasę. Gdyby o nią nie chodziło, to kto sprzedawałby przestarzałe konsole po tylu latach od swojego debiutu?
Wszystko sprowadza się do pieniędzy.
Bo idealna krzywa składa się z nieskończonej ilości punktów spełniających pewne równanie. Żeby wyświetlić taką krzywą komputer musiałby wyświetlić nieskończoną ilość takich właśnie punktów. Komputery póki co rysują tylko kilka (kilkanaście, kilkaset itp.) punktów które te równanie spełniają i łączą je odcinkami. Można zwiększać wydajność komputerów, co spowoduje, że będą mogły wyświetlić bardziej złożone (składające się z większej ilości odcinków) łamane, ale nigdy takiej idealnej krzywej nie wyświetlą, bo w przypadku idealnej krzywej liczba tych odcinków dąży do nieskończoności.
Owszem, oczekuję i nie wiem dlaczego miało by to nie być możliwe? Dlaczego jest problem, aby to wyświetlić? Wyprodukować wyspecjalizowany procesor, który będzie to obsługiwał, dodać do karty i już.
To jest mozliwe, ale kompletnie nie oplacalne z powodu slabej wydajnosci i niepotrzebnych dodatkowych obliczen. Najlepsza metoda renderingu bylo i jest nadal uzywanie trojkatow, poniewaz na nich wykonuje sie najprosciej i najszybciej wszelkie obliczenia, a przy wspolczesnym sprzecie potrafiacym renderowac dziesiatki milionow trojkatow z przyzwoita predkoscia coraz rzadziej bedzie widac kanciaste powierzchnie.
Panowie powyżej już wszystko wyjaśnili, ale jeszcze tylko dodam, że wyświetlanie krzywych to jedno, natomiast silnik graficzny musi wyświetlić powierzchnie z których obiekt jest zbudowany.
Krzywe Beziera stosowano w Quake 3 Arena ;)
http://en.wikipedia.org/wiki/B%C3%A9zier_curve
http://www.techspot.com/previews/quake3/quake3-2.shtml
up: to tylko krzywe do opisu zakrzywien powierzchni, cala geometria byla renderowana juz klasycznie uzywajac trojkatow. Krzywe w grach masowo stosuje sie od ponad 10 lat do tworzenia animacji, tworzenia sciezek dla animacji obiektow/kamer, do tworzenia animacji szkieletowej dla postaci lub tworzenia plynnych przejsc pomiedzy animacjami(blending). W grach samochodowych i pochodnych(Wipeout np) krzywych uzywa sie do tworzenia tras. Wykorzystanie krzywych najlepiej widac w produkcjach demoscenowych (http://www.youtube.com/watch?v=T6MJ80EXovg)
karrde:
Wyświetlane są zawsze poligony. :)
Wymogiem od kilku lat jest uzywanie wylacznie trojkatow, ale to tez polygon ;)
Krzywe, okręgi, kule i tym podobne kształty można renderować i używać bez podziału na trójkąty.
Oświetlać też je można i wyświetlać wprost na ekran.
Tyle tylko że takie obiekty dużo trudniej jest oteksturować. Dlatego tego typu obiekty w grach występują rzadko.
Do tworzenia modeli, nie do wyświetlania. Wyświetlane są zawsze poligony. :)
edit
Krzywe, okręgi, kule i tym podobne kształty można renderować i używać bez podziału na trójkąty.
Erm, nie. Tworzyć - tak. Renderować - nie. Cokolwiek stworzysz np. NURBSami i tak zostaje tesselowane na potrzeby renderingu/wyświetlenia.
edit2
cruiser
Toć przecież wiem. :)
Aczkolwiek technicznie rzecz biorąc trójkąt nie jest wielokątem (polygonem). Co nie zmienia faktu że się przez przeszło dekadę używania przyzwyczaiłem do tego słowa. :)
Karrde - oczywiście że można oświetlać i renderować krzywe bez tesselacji na wielokąty.
Nie robi się tego ze względów praktycznych, ale programistycznie nie stanowi to problemu.
Ustawiasz scenę, kamerę, i dla każego pixela w zadanej rozdzielczości liczysz kolor. Jeżeli źródła światła są wektorowe, a krzywe obiekty są opisane matematycznie to policzysz kolor każdego punktu osobno.
Tyle że w ten sposób nie oteksturujesz. Chyba że jakieś tekstury proceduralne.
Natomiast masz rację - w praktyce produkcyjnej się tak nigdy nie robi.
Pod względem czysto akademickim masz rację, ale jak sam wspominasz nic się z tym nie da zrobić, a już na pewno nie wykorzystać w grach. :)
Nie ma fizycznej mozliwosci wyswietlenia krzywej poza zageszczeniem poligonow/punktow
Ok. W takim razie niech to zagęszczenie będzie na tyle duże, aby można było powiedzieć "krzywa" a nie "łamana".
Ok. W takim razie niech to zagęszczenie będzie na tyle duże, aby można było powiedzieć "krzywa" a nie "łamana".
Ok. To zrób procesor z tak dużą mocą obliczeniową, żeby to ogarnął.
up: takie procki istnieja od wielu lat i w polaczeniu z gpu radza sobie bardzo dobrze z generowaniem dobrze zageszczonych krzywych opartych na polygonach. Przyklad zreszta pokazalem na yt powyzej. Jesli chcesz to przetestowac na swoim sprzecie to prosze bardzo: http://pouet.net/prod.php?which=53647
Ok. W takim razie niech to zagęszczenie będzie na tyle duże, aby można było powiedzieć "krzywa" a nie "łamana".
Wystarczy że prosty odcinek będzie mniejszy od jednego pixela przy zadanej rozdzielczości. I krzywa będzie wizualnie krzywa.
A to jest już wyłącznie kwestia osiągalnej wydajności