Shadery. Artur Staszczyk Bartłomiej Filipek

Podobne dokumenty
Bartłomiej Filipek

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Potok graficzny i shadery. Hubert Rutkowski

Biblioteka OpenGL: Wprowadzenie

Gry Komputerowe Laboratorium 4. Teksturowanie Kolizje obiektów z otoczeniem. mgr inż. Michał Chwesiuk 1/29. Szczecin, r

Mapowanie tekstur Mip-mapy (level of detail) Filtrowanie Multiteksturowanie

Nowoczesna OpenGL - rendering wielokątów Rendering wielokątów w kontekście biblioteki SFML

Programowanie Procesorów Graficznych

Informacje i porady dotyczące pisania shaderów.

OpenGL : Oświetlenie. mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski. Szczecin, r 1/23

1 Temat: Vertex Shader

Mobilne aplikacje multimedialne. OpenGL

Plan wykładu. Akcelerator 3D Potok graficzny

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

Bartosz Bazyluk OpenGL Współczesne podejście do programowania grafiki Część II: Programy cieniujące (shadery)

Wprowadzenie do QT OpenGL

Wprowadzenie do WebGL

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

OpenGL - tekstury Mapowanie tekstur

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Wstęp Podstawy Pierwszy program Definiowanie sceny 3D Przekształcenia geometryczne... 47

Programowanie gier komputerowych Tomasz Martyn Wykład 6. Materiały informacje podstawowe

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

Wykład 4. Rendering (1) Informacje podstawowe

Idź do. Spis treści Przykładowy rozdział Skorowidz. Katalog książek. Katalog online Zamów drukowany katalog. Twój koszyk.

OpenGL Światło (cieniowanie)

Organizacja pamięci w procesorach graficznych

dr inż. Jacek Dąbrowski, KSG

Wyświetlanie terenu. Clipmapy geometrii

Podłączanie bibliotek Zapis danych do pliku graficznego Generowanie promienia pierwotnego Import sceny z pliku Algorytm ray tracingu

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza i obróbka obrazu

OpenGL Światło (cieniowanie)

Wykład 5. Rendering (2) Geometria

Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Przegląd architektury PlayStation 3

Janusz Ganczarski. OpenGL Pierwszy program

Komponowanie shaderów w X3D

Grafika 3D na przykładzie XNA 3.1

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Analiza moż liwości i porównanie nowych ję zyków do programowania grafiki

Teksturowanie (ang. texture mapping)

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Grafika komputerowa. Grafika komputerowa. Grafika komputerowa

Karty graficzne możemy podzielić na:

Podstawy programowania C. dr. Krystyna Łapin

Intro 4kb. sphere tracing. Maciej Matyka (maq / floppy) Dla koła naukowego Voxel

Grafika komputerowa i wizualizacja. dr Wojciech Pałubicki

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Przekazywanie argumentów wskaźniki

Bartosz Bazyluk OpenGL Programowalny potok renderowania, buforowanie geometrii (VBO, IBO, VAO).

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

GRK 3. Dr Wojciech Palubicki

OpenGL teksturowanie

GPGPU General-Purpose computing on the GPU. Piotr Stańczyk

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

3 Przygotował: mgr inż. Maciej Lasota

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza dźwięku i obrazu

Architektura Procesorów Graficznych

Dowiedz się, jak tworzyć zapierające dech w piersiach gry 3D i efektowne, trójwymiarowe wizualizacje!

Modelowanie i wstęp do druku 3D Wykład 1. Robert Banasiak

Przyspieszanie sprzętowe

Programowanie warstwy wizualnej gry

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Julia 4D - raytracing

Poniżej pokazane są poszczególne etapy, w nawiasach kwadratowych znajdują się nazwy tekstur, które utworzymy w projekcie, a przy strzałkach nazwy

6 Przygotował: mgr inż. Maciej Lasota

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

2 Przygotował: mgr inż. Maciej Lasota

Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. OpenGL - Achitektura. OpenGL - zalety. olas@icis.pcz.

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

GRK 5. dr Wojciech Palubicki

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Programowanie w językach

Język ludzki kod maszynowy

Oświetlenie w OpenGL. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 8. Światło otaczajace. Światło rozproszone.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Proceduralne podejście do generowania tekstur

System graficzny. Potok graficzny 3D. Scena 3D Zbiór trójwymiarowych danych wejściowych wykorzystywanych do wygenerowania obrazu wyjściowego 2D.

Proceduralne podejście do generowania tekstur

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Vulkan API. Adam Sawicki Reg KNTG Polygon

Realizacja prostej gry polegającej na symulacji jazdy samochodem

Zasady programowania Dokumentacja

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

GRK 4. dr Wojciech Palubicki

Stereoskopia. Implementacja w XNA 4.0

Grafika komputerowa i wizualizacja

GRAFIKA KOMPUTEROWA. Plan wykładu. 1. Początki grafiki komputerowej. 2. Grafika komputerowa a dziedziny pokrewne. 3. Omówienie programu przedmiotu

Bartosz Bazyluk POTOK RENDEROWANIA Etapy renderowania w grafice czasu rzeczywistego. Grafika Komputerowa, Informatyka, I Rok

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Transkrypt:

Shadery Artur Staszczyk www.astaszczyk.com Bartłomiej Filipek www.bartlomiejfilipek.pl Bartlomiej.filipek@gmail.com

Potok graficzny Vertex shader Fragment shader GLSL Przykłady Inne shadery?

Vertex shader Dane o wierzchołkach i atrybuty Obcinanie (clipping) Transformacje Oświetlenie?? Generacja współrzędnych tekstur oraz ich transformacje Pomysły artystów rasteryzacja

Fragment Shader Teksturowanie, łączenie kilku tekstur mgła Pomysły artystów Operacje na fragmentach jak testy głębi, alpha, blending, etc. Zapisz do bufora ramki gdy fragment zaakceptowany Antyaliasing

Pozycja gl_vertex Normalna gl_normal Współrzędne tekstur(y) Kolor gl_color Vertex Shader Obliczenia gl_position gl_frontcolor gl_texcoord[n] Stałe jak gl_modelviewmatrix, gl_lightsource*n+, stale od użytkownika, textury, bufory

Wykonywane dla każdego wierzchołka, wiec może byd wiele shaderów wykonywanych równolegle, dla kilku wierzchołków naraz! Może: Przekształcid wierzchołki z przestrzeni obiektu do przestrzeni obcinania (clip-space) Przekazad kolor, normalne i inne atrybuty do pixel shadera. Obliczyd współrzędne tekstur I wiele innych obliczeo. Minimum to ustawid wartośd dla gl_position Obliczone wartości (jak kolor, normale ) są interpolowane i przekazywane do fragment shader a

Fragment Shader gl_color gl_texcoord[n] Obliczenia gl_fragcolor gl_fragdata[] Stałe, gl_lightsource*n+, stale od użytkownika, etc

void main() { gl_fragcolor = gl_color; gl_fragcolor.g = 1.0; } gl_fragcolor minimum które trzeba wykonad w Pixel shaderze ustawid kolor fragmentu Gl_Color interpolowana wartośd pochodząca od gl_frontcolor ustawionej w vertex shaderze

Gdy już zdecydujemy się na użycie jakiegoś shadera to w całości musimy zastąpid dany etap potoku renderowania. Na przykład nie możemy tylko obliczyd pozycji wierzchołka i żądad od OpenGL a aby sam sobie policzył dla tego samego wierzchołka oświetlenie. Lub też obliczyd kolor w pixel shaderze i chcied aby mgła policzyła się sama.

aplikacja GPU dane

Język wysokiego poziomu Alternatywy: HLSL, CG

GLSL Version 1.10.59 2.0 1.20.8 2.1 1.30.10 3.0 1.40.08 3.1 1.50.11 3.2 3.30.6 3.3 4.00.9 4.0 4.10.6 4.1 4.20.6 4.2 OpenGL Version

Język bardzo podobny składniowo do C/C++, dlatego uczy się go bardzo szybko i sprawnie W związku z tym, że jest bardzo specjalizowany głównie skupiono się na łatwości obliczeo, mamy więc do dyspozycji multum funkcji matematycznych. na pewno nie ma umiejętności otwierania i zapisywania do pliku, czy wyrzucania wyjścia na konsole Gotowe klasy/struktury dla wektorów (vec2, vec3, vec4 ) i macierzy (mat2, mat3 ) wraz z wszelkimi operacjami na nich. Wbudowana obsługa czytania z tekstur za pomocą tzw. sampler a Instrukcje warunkowe i pętle, instrukcje break, continue, return Można pisad funkcje, tworzyd struktury. Specjalna instrukcja discard dla fragmentów, powoduje odrzucenie fragmentu i nie zapisanie go do bufora (*) Oczywiście można się komunikowad s shaderami i ustawiad im odpowiednie wartości z głównego naszego programu.

Uniform można ustawid przed narysowaniem geometrii obiektu, innymi słowy: stała dla konkretnego obiektu. Varying gdy ustawimy ją w vertex shaderze to fragment shader otrzyma tą wartośd, ale odpowiednio interpolowaną. Np. normal, position, etc Attrib (dla wierzchołków) atrybut dla pojedynczego wierzchołka jak gl_color, gl_normal Const stała na potrzeby wewnętrzne shadera Bez kwalifikatora zmienna zwykła globalna lub lokalna.

void InitShaders() { GLint vertex_shader = glcreateshader(gl_vertex_shader); GLint fragment_shader= glcreateshader(gl_fragment_shader); char *vs = ReadAllTextFromFile("shaders/basic.vert"); char *fs = ReadAllTextFromFile("shaders/basic.frag"); const char * vv = vs; const char * ff = fs; glshadersource(vertex_shader, 1, &vv,null); glshadersource(fragment_shader, 1, &ff,null); glcompileshader(vertex_shader); glcompileshader(fragment_shader);...... }

Glint shader_program = glcreateprogram(); glattachshader(shader_program, vertex_shader); glattachshader(shader_program, fragment_shader); gllinkprogram(shader_program); GLint timeelapsed = glgetuniformlocation(shader_program, "time"); Glint texture = glgetuniformlocation(shader_program, "texture"); glbindtexture(gl_texture_2d, gtexsample); gluniform1i(texture, 0);

gluseprogram(0); gldeleteprogram(shader_program);

void printshaderinfolog(gluint obj) { int infologlength = 0; int charswritten = 0; char *infolog; glgetshaderiv(obj, GL_INFO_LOG_LENGTH, &infologlength); } if (infologlength > 0) { infolog = (char *)malloc(infologlength); glgetshaderinfolog(obj, infologlength, &charswritten, infolog); printf("%s\n",infolog); free(infolog); }

glgetprogramiv(p, GL_LINK_STATUS, &success); if (!success) { int infologlength = 0; int charswritten = 0; char *infolog; } glgetprogramiv(p, GL_INFO_LOG_LENGTH, &infologlength); if (infologlength > 0) { infolog = (char *)malloc(infologlength); glgetprograminfolog(p, infologlength, &charswritten, infolog); utlog_error("error in building program! \n%s",infolog); free(infolog); return false; }

Jak to wygląda w kodzie? Projekt: Basic_shaders

130/330 core profile Nie ma predefinowanych uniformów od OpenGL Nie ma varying i attribute

Inne shadery? Compute Shader lighthouse3d.com//opengl-4-1-pipeline/

https://www.opengl.org/registry/ www.lighthouse3d.com/tutorials/glut-tutorial/ opengl.org/sdk/docs/man3 www.opengl.org/documentation/specs openglbook.com - darmowa książka o nowoczesnym OpenGL www.arcsynthesis.org/gltut/ - darmowa książka o nowoczesnym OpenGL www.songho.ca/opengl/gl_vbo.html - tutorial o VBO

Artur Staszczyk www.astaszczyk.com Bartłomiej Filipek www.bartlomiejfilipek.pl Bartlomiej.filipek@gmail.com