Programowanie Gier -> Wykład: Zaawansowane teksturowanie

1. Trochę rzeczy podstawowych

2. Filtrowanie

(Większość dem które pokażę na tym wykładzie będzie oglądanych przez moje view3dscene, tyle że potrzebna jest wersja z SVN (możecie ściągnąć skompilowany nightly build). Większość ze scen jest w kambi_vrml_test_suite, svn co https://vrmlengine.svn.sourceforge.net/svnroot/vrmlengine/trunk/kambi_vrml_test_suite/).

3. Multi-texturing

Napisałem kiedyś stosunkowo krótkie opowiadanie o tym jak działa multi-texturing i jak robić za jego pomocą (jeszcze bez shaderów) bump mapping:

bump_mapping/README, na wykładzie omówimy sekcje GL_ARB_multitexture, GL_EXT_texture_env_combine, Dot bump mapping (using multitexturing).

(Notka: w shaderach będzie większa swoboda z mieszaniem tekstur. Ale samo przekazywanie i próbowanie tekstur takie samo, więc i tak musimy to wiedzieć.)

Demo bump mapping przez dot na multitex, z i bez normalizacji przez cube map.

4. Łapanie obrazków z OpenGLa do CPU (off-screen rendering) i do textury (render-to-texture)

4.1. Klasyczne metody: glReadPixels do CPU, glCopyTex[Sub]Image2D.

Problemy:

OK do:

Uwagi:

Czyli nie jest Ok do:

4.2. Off-screen rendering poprzez specjalne konteksty OpenGLa

I kilka innych, stare ale dobre omówienie tutaj

Problemy:

Czyli jedyne co zyskujemy (w porównaniu z klasycznymi) to że nie potrzebujemy okienka i nie jesteśmy ograniczeni rozmiarami okienka. Sam czas renderowania jest jeszcze gorszy...

4.3. Frame Buffer Object

Omówienie API

Wspaniałe rozszerzenie, w specyfikacji OpenGLa 3.0, wcześniej jako GL_EXT_framebuffer_object i GL_ARB_framebuffer_object, bardzo popularne wśród obecnych implementacji OpenGL. W zasadzie, niweluje wszystkie problemy:

Demo z omówienia powyżej, pokaż rozmiar tekstury 1024.

Notki: jak zrobić mipmapy textury tak stworzonej? Nie pomaga GL_GENERATE_MIPMAP = GL_TRUE, bo OpenGL nie zna explicite momentu w którym móglby to wywołać. Odpowiedź: glGenerateMipmapEXT, wspomniane już wcześniej. Dlatego właśnie glGenerateMipmapEXT zostało wprowadzone razem z rozszerzeniem FBO, jest po prostu nieodzowne w typowych zastosowaniach FBO.

5. Environment mapping

Są inne (sphere i paraboloid mapping), ale chyba nie warto się nimi zajmować na tym wykładzie. To co nas interesuje to cube environment mapping.

6. S3TC

http://en.wikipedia.org/wiki/S3_Texture_Compression

7. DDS

Notka przy okazji: GIMPa można używać w batch mode. Patrz GIMP Batch Mode, Script-Fu and plug-ins for The GIMP, "Pomoc->Przeglądarka Procedur" w menu GIMPa. Przyjemne żeby automatycznie przerobić obrazki na skompresowany DDS (i np. przy okazji zrobić (gimp-image-flip image 1)), albo zrobić normalmapy. Naturalnie, jest to przydatne tylko do testing albo jako "pierwsza przymiarka" — optymalnie, normalmapy i dds powinien generować, sprawdzać czy dobrze wyglądają i ew. tweakować ustawienia autor modeli. Można podglądnąć moje zabawy z GIMP batch mode do DDS i normal map tutaj.

8. 3d textures (aka volume textures)

Tylko jeśli będzie czas na wykładzie. Ciekawe zastosowania tekstur 3d są dopiero z shaderami, więc można to odłożyć...

EXT_texture3D

Demo: show animated volumtetric fog


That's not all folks, ale nie mamy już czasu/potrzeby na inne rzeczy: