Właśnie widziałem film o tym, co wydawcy nazywają „kolejnym ważnym krokiem po wynalezieniu 3D”. Według osoby mówiącej, używają ogromnej ilości atomów pogrupowanych w chmury zamiast wielokątów, aby osiągnąć poziom nieograniczonej liczby szczegółów .
Starali się, aby film był zrozumiały dla osób nie znających żadnych technik renderowania, dlatego też lub w innych celach pominięto wszystkie szczegóły dotyczące działania ich silnika.
Poziom szczegółowości ich wideo wydaje mi się imponujący.
- Jak można renderować sceny przy użyciu niestandardowych atomów zamiast wielokątów na obecnym sprzęcie? (Prędkość, pamięć)
- Jeśli to prawda, to dlaczego nikt jeszcze o tym nie myślał?
Jako deweloper OpenGL bardzo mnie to dziwi i bardzo chciałbym usłyszeć, co mają do powiedzenia eksperci. Dlatego też nie chcę, aby wyglądało to jak tania reklama i będzie zawierać link do filmu tylko na żądanie, w sekcji komentarzy.
Odpowiedzi:
Łatwo to zrobić. Używając Octtree, po prostu dzielisz świat na stopniowo mniejsze części, aż osiągniesz wymagany poziom szczegółowości. Może to być na przykład rozmiar ziarna piasku. Pomyśl, że Minecraft doprowadził do skrajności.
Co więc renderujesz? Jeśli szczegół jest wystarczająco mały, możesz rozważyć renderowanie bloków - węzłów liści octree. Inne opcje obejmują kule, a nawet prymityw geometryczny. Kolor i normalna mogą być przechowywane w każdym węźle, a dla zredukowanego LOD można przechowywać złożone informacje na wyższych poziomach drzewa.
Jak możesz zarządzać tak dużą ilością danych? Jeśli drzewo jest faktyczną strukturą danych, możesz mieć wiele wskaźników odnoszących się do tych samych poddrzewa, podobnie jak ponowne użycie tekstury, ale obejmuje również geometrię. Sztuką jest, aby uzyskać jak najwięcej możliwości ponownego wykorzystania na wszystkich poziomach. Na przykład, jeśli połączysz 4 oktany w układzie czworościennym wszystkie z tym samym węzłem potomnym na wszystkich poziomach, możesz zrobić bardzo duży fraktal sierpinsky'ego 3d prawie bez pamięci. Rzeczywista scena będzie oczywiście znacznie większa.
Problem polega na tym, że będzie działać tylko w przypadku geometrii statycznej, ponieważ rzeczywista animacja wymagałaby manipulacji wszystkimi tymi danymi w każdej klatce. Renderowanie jednak, zwłaszcza ze zmienną LOD, nie stanowi problemu.
Jak renderować coś takiego? Jestem wielkim fanem ray tracingu i radzi sobie całkiem dobrze z tego typu procesorami i bez nich.
Wszystko to oczywiście spekulacje. Nie mam konkretnych informacji na temat sprawy, o której mówisz. A teraz coś pokrewnego, ale innego:
Ogromna ilość renderowanych danych
EDYCJA I oto jedna, którą zrobiłem, ale celowo zmieniłem normalne, aby pola były bardziej widoczne:
Królik Stanforda w wokselach
Ta liczba klatek była na jednym rdzeniu IIRC. Podwojenie głębokości drzewa ogólnie zmniejsza szybkość klatek o połowę, a użycie wielu rdzeni będzie dobrze skalować. Zwykle trzymam prymitywy (trójkąty i tym podobne) w moim octree, ale dla uśmiechów postanowiłem w tym przypadku renderować węzły liści samego drzewa. Lepszą wydajność można uzyskać, optymalizując konkretną metodę.
Gdzieś na ompf jest samochód z wokselami, który jest naprawdę fantastyczny - poza tym, że jest statyczny. Teraz nie mogę go znaleźć ...
źródło
Po obejrzeniu filmu nic mi nie wskazuje, że użyto specjalnego sprzętu. W rzeczywistości stwierdzono, że działa to w oprogramowaniu przy 20 klatkach na sekundę, chyba że coś przeoczyłem.
Być może zdziwisz się, wiedząc, że wprowadzono wiele zmian w renderowaniu w czasie rzeczywistym przy użyciu różnych technologii, takich jak ray tracing, renderowanie wokseli i rozpryskiwanie powierzchni. Trudno jednak powiedzieć, co zostało użyte w tym przypadku. (Jeśli jesteś zainteresowany, zajrzyj na http://igad2.nhtv.nl/ompf2/, aby uzyskać świetne forum śledzenia promieni w czasie rzeczywistym, lub http://www.atomontage.com/, aby uzyskać interesujący silnik wokseli. Google „powierzchniowe rozpryski” dla świetnych linków na ten temat)
Jeśli spojrzysz na film, zauważysz, że cała geometria jest statyczna i chociaż jest szczegółowa, istnieje wiele powtórzeń obiektów, co może sugerować wystąpienie.
I najprawdopodobniej będzie dużo agresywnego uboju, poziomów szczegółowości i podziału przestrzeni.
Jeśli spojrzysz na jakość wizualną (nie na złożoność geometryczną), nie wygląda to aż tak imponująco. W rzeczywistości wygląda dość płasko. Pokazane cienie mogą zostać zapisane w danych i nie mogą być oceniane w czasie rzeczywistym.
Bardzo chciałbym zobaczyć demo z animowaną geometrią i dynamicznym oświetleniem.
O ile się całkowicie nie mylę (i nie byłby to mój pierwszy raz), moja pierwsza odpowiedź sugerowałaby (być może bardzo sprytne) wykorzystanie istniejącej technologii, być może zoptymalizowanej i rozbudowanej do stworzenia tego dema. Jednak przekształcenie go w prawdziwy silnik gry, z wszystkimi innymi zadaniami oprócz renderowania geometrii statycznej, która obejmuje, to zupełnie inna gra w piłkę.
Oczywiście wszystko to jest czystą spekulacją (co sprawia mi dużo zabawy). Mówię tylko, że niekoniecznie jest to podróbka (w rzeczywistości nie sądzę, że jest i nadal jestem pod wrażeniem), ale prawdopodobnie nie jest tak przełomowa, jak się wydaje.
źródło
Atomy te w rzeczywistości nie są tak magiczne / specjalne / obce w obecnym sprzęcie graficznym. To tylko rodzaj renderowania opartego na chmurze punktów lub wokselach. Zamiast trójkątów wyświetlają punkty lub ramki, co jest nieosiągalne przy obecnym sprzęcie.
Zostało to już zrobione i nie jest super wynalazkiem, ale może wymyślili bardziej wydajny sposób na zaoszczędzenie pamięci i czasu. Chociaż wygląda i brzmi dość interesująco, powinieneś wziąć ten film z odrobiną soli. Renderowanie 100 000 punktów zamiast w pełni teksturowanego wielokąta (który zajmuje już tylko kilka pikseli na ekranie) nie poprawia jakości grafiki o współczynnik 100 000.
A tak przy okazji, słyszałem, że oprogramowanie id wypróbowuje także przyspieszone renderowanie wokseli na GPU, ale mam większe zaufanie do Johna Carmacka niż do głośnika tego filmu :)
źródło
To był oszustwo inwestycyjne.
Co do pomysłu, nie jest to możliwe na obecnym niewydzielonym sprzęcie. Liczba punktów, których trzeba by uniknąć, patrząc na coś z bliska, znacznie przewyższa liczbę punktów, które można strzelić w dzisiejszej pamięci RAM. Nawet jeśli nie znam żadnych struktur danych ani algorytmów wyszukiwania, które mogłyby dać cokolwiek w pobliżu wydajności pokazanej w wersji demonstracyjnej. I nawet jeśli w jakiś sposób możliwe było przeszukiwanie tych punktów w czasie rzeczywistym, brak pamięci podręcznej i przepustowość pamięci zapewniłyby, że nie możesz.
Nie wątpię w to, że takich obrazów nie można uzyskać w czasie rzeczywistym, tylko nie przy użyciu przedstawionej metody. Domyślam się, że wersje demonstracyjne zostały wykonane przy użyciu wokseli, które są używane od dziesięcioleci i mogą już generować dość wysokie szczegóły w czasie rzeczywistym: http://www.youtube.com/watch?v=BKEfxM6girI http://www.youtube .com / watch? v = VpEpAFGplnI
źródło
Z tego, co widziałem, wygląda na to, że używają parametrycznych kształtów zamiast prostych kształtów wielokątów - innymi słowy zmieniają geometrię zgodnie z wymaganą rozdzielczością.
Można to zrobić za pomocą technik takich jak shadery geometrii i szum perlin.
Inną możliwością jest użycie GPGPU (np. CUDA) do renderowania sceny zawierającej elementy inne niż wielokąty oraz do wykonywania śledzenia promieni (dla kolejności Z i cieni). Inną możliwością jest niestandardowy sprzęt, który renderuje formuły zamiast trójkątów
źródło
Myślę o wszystkich ich twierdzeniach, że kompresja pamięci wydaje się przesadą, mogłem zrozumieć coś w rodzaju kompresji RLE, która ma wielki wpływ. W końcu myślę, że ten system będzie miał wiele „zalet”, ale wiele „wad”, podobnie jak raytracing lub renderowanie izo powierzchni z marszowymi kostkami.
Jeśli chodzi o oddawanie „trylionów” atomów; Nie sądzę, że tak mówią. Zamiast tego szukają atomów W * H, tj. Jednego atomu na piksel na ekranie. Można to osiągnąć na wiele powolnych, trudnych sposobów. Niektóre sposoby na przyspieszenie tego procesu to drzewa KD, drzewa BSP, ósemki itp. Ostatecznie jednak sortowanych jest wiele danych, a fakt, że ich demo najwyraźniej sortuje 1440 x 720 atomów, więcej niż raz na klatkę, ze względu na cienie / odbicia w demie, jest niesamowity. Cóż za cuda!
źródło
sposób, w jaki działa, jest znacznie prostszy, niż mogłoby się wydawać, zamiast wstępnego ładowania powiedzieć, że poziom gry ładuje tylko jeden ekran, jeden lub kilka atomów na piksel na ekranie, nic więcej, gra / silnik następnie przewiduje, co kolejne klatki są i to jest jedyna ładowana rzecz, renderowana jest tylko część widocznego obiektu, a nie cały obiekt. Wady: tyle rozdzielczości i rozdzielczości, ile monitor może obsłużyć, niskie zużycie pamięci CONS: szybkość odczytu z dysku jest dość duża i może prowadzić do niskiej liczby klatek na sekundę.
źródło