Teksturowanie (ang. texture mapping) - Radosław...
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