Teksturowanie (ang. texture mapping) - Radosław...

Post on 06-Feb-2018

217 views 0 download

Transcript of Teksturowanie (ang. texture mapping) - Radosław...

Grafika komputerowa

Teksturowanie (ang. texture mapping) Radosław Mantiuk

Wydział Informatyki

Zachodniopomorski Uniwersytet Technologiczny

Grafika komputerowa

Tekstura Funkcja modyfikująca wygląd powierzchni. Ta funkcja może być reprezentowana przez bitmapę.

Grafika komputerowa

Przykłady: nie tylko modifikacja koloru

Grafika komputerowa

Potok teksturowania 1.  Mapowanie tekstury (ang. texture mapping) - obliczenie współrzędnych

parametrycznych (u,v) dla każdego wierzchołka modelu. 2.  Filtrowanie tekstury - obliczenie współrzednych teksela tekstury w rastrze

(s,t) (funkcja korespondera, powiększanie lub pomniejszanie bitmapy). 3.  Nakładanie tekstury - modyfikacja koloru pikseli na etapie rasteryzacji.

Pictures courtasy of MIT, Lecture Notes 6.837

Grafika komputerowa

Mapowanie tekstur •  Obliczenie współrzędnych parametrycznych (u,v), odpowiadających danemu

wierzchołkowi modelu. •  Współrzędne (u,v) wyraża się jako liczby zmiennoprzecinkowe znormalizowane do

przedziału <0,1>.

u

v

(u1,v1) (u2,v2)

(u3,v3)

Grafika komputerowa

Mapowanie tekstur

model

tekstura

Grafika komputerowa

Mapowanie tekstur

Liniowe Cylindryczne Sferyczne

Grafika komputerowa

Teksturowanie: mapowanie sferyczne Obliczenie współrzędnych tekstury (u,v) dla puntu na powierzchni kuli (dx,dy,dz) dla kuli o promieniu jednostkowym.

u = 0.5+ arctan2(dz,dx )2π

v = 0.5+arcsin(dy )

π

Grafika komputerowa

Funkcje korespondera Funkcje korespondera - powiekszanie tekstury do wymaganego rozmiaru poprzez powielanie.

Grafika komputerowa

Współrzędne tekstury •  Obliczenie położenia teksela tekstury odpowiadająceg danemu wierchołkowi •  Zamiania współrzędnych (u,v) -> (s,t)

Filtrowanie tekstur - ma na celu dostosowanie wielkości tekstury do wielkości obszaru, na który tekstura będzie nakładana •  powiększenie i pomniejszenie

W idelanym przypadku tekstura powinna mieć cztery razy więcej tekseli (ang. texels) od liczby pikseli znajdującej się w obszarze obrazu (bufora ramki), na który tekstura jest mapowana.

Grafika komputerowa

Filtrowanie tekstur: Metoda najbliższego sąsiada

(u,v)

Przykład pomniejszenia tekstury.

Grafika komputerowa

Filtrowanie tekstur: filtracja dwuliniowa

(u,v)

filtrowanie dwuliniowe (ang. bilinear filtering) uśrednianie wartości piksela

Grafika komputerowa

OpenGL: Nakładanie tekstury

Grafika komputerowa

OpenGL: Teksturowanie

glBegin(GL_QUADS); glNormal3f( 0, 0, -1.0f ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -0.5f, +0.5f, -0.5f ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( +0.5f, +0.5f, -0.5f ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( +0.5f, -0.5f, -0.5f ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( -0.5f, -0.5f, -0.5f );

glEnd();

Współrzędne interpolowane na etapie rasteryzacji.

Grafika komputerowa

OpenGL: Teksturowanie

GLuint tex; glGenTextures( 1, &tex); glBindTexture( GL_TEXTURE_2D, tex); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );

// Black/white checkerboard float pixels[] = { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f }; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels); void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * data);

Grafika komputerowa

OpenGL: Typy tekstur

(u,v)

GL_TEXTURE_1D: Images in this texture all are 1-dimensional. They have width, but no height or depth. GL_TEXTURE_2D: Images in this texture all are 2-dimensional. They have width and height, but no depth. GL_TEXTURE_3D: Images in this texture all are 3-dimensional. They have width, height, and depth. GL_TEXTURE_RECTANGLE: The image in this texture (only one image. No mipmapping) is 2-dimensional. Texture coordinates used for these textures are not normalized. GL_TEXTURE_BUFFER: The image in this texture (only one image. No mipmapping) is 1-dimensional. The storage for this data comes from a Buffer Object. GL_TEXTURE_CUBE_MAP: There are exactly 6 distinct sets of 2D images, all of the same size. They act as 6 faces of a cube. GL_TEXTURE_1D_ARRAY: Images in this texture all are 1-dimensional. However, it contains multiple sets of 1-dimensional images, all within one texture. The array length is part of the texture's size. GL_TEXTURE_2D_ARRAY: Images in this texture all are 2-dimensional. However, it contains multiple sets of 2-dimensional images, all within one texture. The array length is part of the texture's size. GL_TEXTURE_CUBE_MAP_ARRAY: Images in this texture are all cube maps. It contains multiple sets of cube maps, all within one texture. The array length * 6 (number of cube faces) is part of the texture size. GL_TEXTURE_2D_MULTISAMPLE: The image in this texture (only one image. No mipmapping) is 2-dimensional. Each pixel in these images contains multiple samples instead of just one value. GL_TEXTURE_2D_MULTISAMPLE_ARRAY: Combines 2D array and 2D multisample types. No mipmapping.

Grafika komputerowa

Filtrowanie tekstur - MIP Mapping

MIP Mapping (multium in parvo - wiele w jednym) - sposób przechowywania i szybkiego dostępu do tekstur o różnym rozmiarze.

(u,v)

automatyczne generowanie i obsługa mipmap przez OpenGL

Grafika komputerowa

Filtrowanie anizotropowe

Jeżeli proporcje tekstury nie pasują do proporcji obszaru pikseli, na które tekstura ma zostać nałożona.

(u,v)

Grafika komputerowa

Filtrowanie perspektywiczne Interpolacja współrzędnych tekstur w trójkącie uwzględniająca trójwymiarowe położenie wierzchołków.

(u,v)

Uwzględnienie głębokości (a konkretniej jej odwro tnośc i ) podczas in te rpo lowan ia współrzędnej tekstury.

Grafika komputerowa

Mapowanie środowiska Ang. Environment Mapping (EM) - wykorzystanie testury do aproksymacji powierzchni odbijających.

Pictures courtasy of MIT, Lecture Notes 6.837

Grafika komputerowa

Mapowanie środowiska

Grafika komputerowa

Mapowanie nierówności (ang. bump mapping)

Bump mapping - wykorzystanie tekstury do modyfikacji wektora normalnego.

(u,v)

Pictures courtasy of MIT, Lecture Notes 6.837

Grafika komputerowa

Mapowanie przesunięć (ang. displacement mapping) Displacement mapping - tekstura służy do modyfikacji geometrii obiektu.

(u,v)

Grafika komputerowa

Testury proceduralne Wykorzystanie funkcji matematycznych do obliczania wartości tekseli.

(u,v)

•  tekstury trójwymiarowe •  symulacje zjawisk fizycznych (np.

przepływ wody) •  istnieje problem aliasingu i zachowania

ciągłości

Grafika komputerowa

Cache'owanie tekstur •  Przesyłanie tekstur do pamięci GPU zajmuje dużo czasu. •  Dostęp do danych tektury jest również czasochłonne. Szybki dostęp do potrzebnej w danym momencie tektury: •  tektury powinny być możliwie najmniejsze, •  wielokąty pogrupowane zgodnie z przynależnością do tektury, •  oddalone wielokąty teksturowane są za pomocą mniejszych obrazów, •  kompresja tekstur (S3TC, ETC)

(u,v)

Grafika komputerowa

Atlasy tekstur