Autor Wątek: [opengl]G-buffer i deferred lighting  (Przeczytany 9576 razy)

Offline Furry

  • Użytkownik
    • DevBlog

# Lipiec 29, 2010, 10:42:15
Witam, mam pytanie odnośnie g-buffera, korzystam z tego tutoriala(dotyczącego deferred lighting): http://www710.univ-lyon1.fr/~jciehl/Public/educ/GAMA/2007/Deferred_Shading_Tutorial_SBGAMES2005.pdf  i nie bardzo wiem jak jednocześnie renderować do osobnych bufferów. Tzn mam depth, color , aux0, aux1, tylko jak wrzucić np do aux0, aux1 osobne ambient i diffuse? Gdzieś czytałem o glDrawBuffers ale szczerze mówiąc nie wiem jak to wykorzystać w związku z g-bufferem i renderowaniem do niego.

Aha i kolejna sprawa, czy aux`y to po prostu color buffery? Bo tak to wyczytałem z tego tutka.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Avaj

  • Użytkownik

# Lipiec 29, 2010, 10:51:57
musisz użyć kombinacji glDrawBuffers i glBindFragDataLocation. http://www.opengl3.org/wiki/Framebuffer_Object tu jest o tym

Offline counterClockWise

  • Użytkownik

# Lipiec 29, 2010, 11:16:35
Sorry, że się tak chamsko podepnę. Wypadłem na długo z obiegu jeżeli chodzi o DS - czy jest już stosowany sprzętowy antyaliasing z tą metodą? Pamiętam, że kiedyś trzeba było robić AA ręcznie...

Offline Furry

  • Użytkownik
    • DevBlog

# Lipiec 29, 2010, 11:30:13
Niestety sprzętowego niema i o ile się orientuję to trzeba zrobić tzw. "MRT".

@Java, no ok, ale co np z depth bufferem? Jego też wykorzystywać w shaderze jak color czy aux? Tzn przy użyciu gl_FragColor[id] go modyfikować(shadery GLSL jak coś)?

Offline counterClockWise

  • Użytkownik

# Lipiec 29, 2010, 11:32:33
Niestety sprzętowego niema i o ile się orientuję to trzeba zrobić tzw. "MRT".

A MRT to nie jest po prostu Multiple Render Targets?
Czy D3D10,11 nie wspierają AA dla MRT?
« Ostatnia zmiana: Lipiec 29, 2010, 11:37:52 wysłana przez counterClockWise »

Offline Avaj

  • Użytkownik

# Lipiec 29, 2010, 11:39:54
OpenGL 3.1/3.2 oferuje multisample antialiasing, więc nie jest problemem zrobić prawdziwe AA w shaderze.

edit: @Furry - nigdy nie zajmowałem się deferredem, ale jakiś depthbuffer musisz mieć podczas geometry passa. A głębię tak czy siak dasz do framebuffera bo przekażesz pozycję z vertex shadera do fragment shadera. Może też trzeba podzielić przez w, nigdy nie wiem ;d
« Ostatnia zmiana: Lipiec 29, 2010, 11:45:25 wysłana przez Java »

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Lipiec 29, 2010, 11:41:12
Cytuj
Niestety sprzętowego niema
Na szczęście nie masz racji. Od DX 10.1 już jest. ;) Nie wiem, jak to się przekłada na numerki OGLa.

Cytuj
o ile się orientuję to trzeba zrobić tzw. "MRT"
Nie orientujesz się. ;) MRT to zupełnie co innego - Multiple Render Targets, czyli po prostu możliwość podpięcia jednocześnie kilku targetów.

Cytuj
Czy D3D10,11 nie wspierają AA dla MRT?
AA dla MRT to chyba już DX9 wspierało. Problem tylko w tym, że sprzętowe uśrednianie próbej w przypadku g-bufora nie ma sensu i trzeba ten etap zrobić ręcznie, a to dopiero umożliwia DX 10.1.

Cytuj
OpenGL 3.0 oferuje multisample antialiasing
MSAA to już chyba za najstarszych górali w OpenGL było (MSAA to przecież najbardziej popularna forma antyaliasingu, która jest obecnie wszędzie).

Offline Avaj

  • Użytkownik

# Lipiec 29, 2010, 11:46:19
Wiesz o co mi chodzi, chodzi mi o to http://dabroz.scythe.pl/2009/09/23/opengl-3.2-multisample-textures zapomniałem jak to się dokładnie nazywa

Offline skoti

  • Użytkownik

# Lipiec 29, 2010, 11:47:53
Na szczęście nie masz racji. Od DX 10.1 już jest. ;) Nie wiem, jak to się przekłada na numerki OGLa.
OpenGL 3.2 i obsługuje więcej kart niż dx10.1 (czyli wszystkie dx10).

Cytuj
OpenGL 3.0 oferuje multisample antialiasing
MSAA to już chyba za najstarszych górali w OpenGL było (MSAA to przecież najbardziej popularna forma antyaliasingu, która jest obecnie wszędzie).
Pewnie mu chodziło o dostęp do próbek MSAA z poziomu shadera (ale też się pomylił z numerkiem bo od 3.2).

Offline Dab

  • Moderator
    • blog

# Lipiec 29, 2010, 11:52:42
Sorry, że się tak chamsko podepnę. Wypadłem na długo z obiegu jeżeli chodzi o DS - czy jest już stosowany sprzętowy antyaliasing z tą metodą? Pamiętam, że kiedyś trzeba było robić AA ręcznie...
http://dabroz.scythe.pl/2009/09/16/explicit-multisample-real-antialiasing-in-deferred-shading

Offline Avaj

  • Użytkownik

# Lipiec 29, 2010, 12:24:38
Pewnie mu chodziło o dostęp do próbek MSAA z poziomu shadera (ale też się pomylił z numerkiem bo od 3.2).
Tak, o to mi chodziło, ale nie używałem tego nigdy więc trudno było mi się wyrazić. A jeśli chodzi o numerek to od 3.2 jest w core. Wcześniej były dziwadła w stylu NV_explicit_multisample. Zresztą, jak coś wspiera OGL 3.0 to wspiera i OGL 3.2, więc to nie robi.

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Lipiec 29, 2010, 12:42:56
Cytuj
OpenGL 3.2 i obsługuje więcej kart niż dx10.1 (czyli wszystkie dx10).
Wątpliwe, że więcej, skoro dodali te same featury co w DX 10.1. :)

Offline Dab

  • Moderator
    • blog

# Lipiec 29, 2010, 12:45:12
Oczywiście że więcej -- przykładowo prawie wszystkie karty NVidii z serii 8xxx, 9xxx i 2xx obsługują jedynie 10.0 więc AA w DS nie zrobisz na nich w DX. A w OpenGL -- bez problemu :)

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Lipiec 29, 2010, 12:46:58
Oczywiście że więcej -- przykładowo prawie wszystkie karty NVidii z serii 8xxx, 9xxx i 2xx obsługują jedynie 10.0 więc AA w DS nie zrobisz na nich w DX. A w OpenGL -- bez problemu :)
OK, ale w takim razie OpenGL 3.2 nie dorównuje featurami DX 10.1.

Offline Dab

  • Moderator
    • blog

# Lipiec 29, 2010, 12:49:47
Jakimi przykładowo?