Potok graficzny i shadery. Hubert Rutkowski

Podobne dokumenty
Shadery. Artur Staszczyk Bartłomiej Filipek

Bartłomiej Filipek

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

Programowanie warstwy wizualnej gry

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

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

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

1 Temat: Vertex Shader

Biblioteka OpenGL: Wprowadzenie

Programowanie Procesorów Graficznych

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

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

Informacje i porady dotyczące pisania shaderów.

Programowanie procesorów graficznych GPGPU

OpenGL - tekstury Mapowanie tekstur

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Przegląd architektury PlayStation 3

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

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

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

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka

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

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

Grafika komputerowa. Grafika komputerowa. Grafika komputerowa

Mobilne aplikacje multimedialne. OpenGL

Programowanie w elektronice: Podstawy C

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

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

Wprowadzenie do QT OpenGL

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Przyspieszanie sprzętowe

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

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

GRK 3. Dr Wojciech Palubicki

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Podstawy programowania C. dr. Krystyna Łapin

Wprowadzenie do WebGL

Microsoft IT Academy kurs programowania

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Podstawy programowania skrót z wykładów:

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Moc płynąca z kart graficznych

Co nie powinno być umieszczane w plikach nagłówkowych:

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

Programowanie obiektowe

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

1 Podstawy c++ w pigułce.

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Architektura Komputerów

Programowanie Równoległe wykład, CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej

Język ludzki kod maszynowy

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

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

Różne rodzaje efektów

1 Podstawy c++ w pigułce.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Pobieranie argumentów wiersza polecenia

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

Wstęp. Potok renderowania w Unity korzysta z trzech podstawowych elementów:

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

CUDA jako platforma GPGPU w obliczeniach naukowych

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski

PROGRAMOWANIE w C prolog

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Podstawy Programowania C++

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Wykład 1

Wskaźniki. Informatyka

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

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

Wyświetlanie terenu. Clipmapy geometrii

Programowanie I C / C++ laboratorium 01 Organizacja zajęć

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

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

Vulkan API. Adam Sawicki Reg KNTG Polygon

Wprowadzenie do grafiki maszynowej. Wprowadzenie do historii 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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Tworzenie aplikacji w języku Java

Programowanie równoległe Wprowadzenie do OpenCL. Rafał Skinderowicz

dr inż. Jacek Dąbrowski, KSG

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

Programowanie i struktury danych

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Podstawy programowania w języku C i C++

Zaawansowane systemy programowania grafiki. Wprowadzenie. Podstawy OpenGL

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Wprowadzenie do języka Java

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Instrukcje sterujące. Programowanie Proceduralne 1

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

GRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego.

Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej

Plan wykładu. Akcelerator 3D Potok graficzny

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Grafika komputerowa i wizualizacja. dr Wojciech Pałubicki

Programowanie kart graficznych

Transkrypt:

Potok graficzny i shadery Hubert Rutkowski

1. Coś o mnie

Zakład Technologii Gier Uniwerytetu Jagiellońskiego

2. Potok graficzny jak w OpenGL

Cry Engine 3 (zródło: CryTek)

Vertex specification format, kolejność, instancing Vertex shader Tesselation Compute shader Geometry shader Rasterization clipping, culling Fragment shader Per sample operations scissor test, alpha test, stencil test, depth test, blending, konwersje

Źródło obrazka: https://glumpy.github.io/modern-gl.html

Driver CPU State Kompilator shader wysokopoziomowy -> pośredni -> niskopoziomowy optymalizacje GPU

Źródło: intel.com

SIMD Single Instruction Single Data 1 + 2 = 3 Single Instruction Multiple Data 1 2 3 4 7 8 10 12 + 5 6 = 6 8

Geometry shader źródło: https://bassemtodary.wordpress.com

Teselacja

3. Shadery

Przykład GLSL void main() // vertex { gl_position = vec4( 0.0, 0.0, 0.0, 1.0 ); } void main() // fragment { gl_fragcolor = vec4( 0.0, 0.0, 0.0, 1.0 ); }

Przykład HLSL Wierzchołek pozycja w przestrzeni, kolor, normalna, koordynaty tekstury,...

Assembler float x=(a*abs(f))>(b*abs(f)); abs mul mul slt r7.w, r2.w, r9.w, r0.w, 02000023 03000005 03000005 0300000c c2.x r7.w, c0.x r7.w, c1.x r9.w, r2.w 80080007 80080002 80080009 d00f0000 983a28f41595 329d8d123c04 329d8d627c08 3b487794333a a0000002 80ff0007 a0000000 80ff0007 a0000001 80ff0009 80ff0002 HLSL Assembly DX p-code HW microcode

Assembler

uniform float scale; attribute vec2 position; attribute vec4 color; varying vec4 v_color; void main() { gl_position = vec4(position*scale, 0.0, 1.0); v_color = color; } varying vec4 v_color; void main() { gl_fragcolor = v_color; }

API #include <GL/glew.h> #include <GLFW/glfw3.h> GLuint vs; vs = glcreateshader(gl_vertex_shader); const char* source = myloadshader(filename); glshadersource(vs, 1, &source, NULL); glcompileshader(vs);

if (!vs) { printf("error Could not compile the shader"); return 0; } GLint status; glgetshaderiv( vs, GL_COMPILE_STATUS, &status ); if (status == GL_FALSE) { GLint infologlength; glgetshaderiv( shader, GL_INFO_LOG_LENGTH, &infologlength ); GLchar* strinfolog = new GLchar[infoLogLength + 1]; glgetshaderinfolog( shader, infologlength, NULL, strinfolog ); } fprintf( stderr, "Compilation error in shader %s\n", strinfolog ); delete[] strinfolog;

GLuint shader_program = glcreateprogram(); glattachshader(shader_program, vs); glattachshader(shader_program, fs); gllinkprogram(shader_program); int result = -1; glgetprogramiv(shader_program, GL_LINK_STATUS, &result); if (GL_TRUE!= result) { GLint infologlength; glgetprogramiv( shader_program, GL_INFO_LOG_LENGTH, &infologlength ); glgetprograminfolog( shader_program, infologlength, NULL, strinfolog ); //... }

glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); gluseprogram( shader_program ); glbindvertexarray( vao ); glbindtexture( GL_TEXTURE_2D, tex2d ); gldrawarrays( GL_TRIANGLES, 0, 3 ); glfwswapbuffers( window ); glfwpollevents();

Instrukcje - arytmetyczne (np. mov, mul, add), logiczne (and, or, xor) - wektorowe (dp3, dp4) - matematyczne (sin, log2) - warunkowe (if, else) - pętle (for, while, break, continue) - samplowanie - zapisy do buforów/tekstur (writert, store, atomic) - discard

Dane - wektory, macierze - liczby zmiennoprzecinkowe, całkowite, logiczne - tablice - struktury - tekstury, bufory vec2 a = vec2(1.0,2.0); bvec3 mat2, mat3, mat4 struct dirlight { vec3 direction; vec3 color; };

Kwalifikatory const stała czasu kompilacji attribute globalne zmienne które mogą się zmieniać per vertex (np. kolor czy texcoord), wysyłane z aplikacji do vertex shaderów. Dostępny tylko w VS, tylko do odczytu. uniform zmienna globalna która może się różnić per-primitive, wysyłana z aplikacji do shaderów. Dostępne w VS i PS, tylko do odczytu. varying używane do przesyłania zinterpolowanych danych do pixel shadera. Można zapisać w VS, tylko do odczytu w PS.

Swizzle i writemaski.r,.g,.b,.a,.rrrr,.gggg,.bbbb,.aaaa,.xxxx,.yyyy,.zzzz,.wwww,.x.y.z.w a.yzw = b.xyy + c.z x y z w x + x + y y + z w z w

Tekstury i samplery - 1D - 2D - 3D - cube - tablice powyższych sampler1d, 2D, 3D samplercube sampler1dshadow

#version 430 #extension GL_ARB_shader_image_load_store : enable out vec4 frag_color; in vec3 color; writeonly layout(rgba32f) uniform imagecube write_tex; void main() { frag_color = vec4( 0.2, 0, 0, 1); for (int i = 0; i < 6; ++i) { imagestore(write_tex, ivec3(0, 0, i), vec4( i / 6.0) ); } }

4. Zastosowania shaderów

Grafika 3d źródło: https://bassemtodary.wordpress.com

GPGPU

nvidia Kepler 1536 CUDA cores

Źródło: wikipedia kernel void transform_grid( global const float ** in, global float ** out) { int a = get_global_id(0); int b = get_global_id(1); out[a][b] = do_some_hard_work( in[a][b] ); }

5. Przykładowe zastosowania

5.1 Bloom zródło: www.grasz.org/recenzje/two-worlds-,1,1,2643

Separowalne rozmycie Gaussowskie

5.2 Deferred shading

Deferred Rendering in Killzone 2. 2005. http://www.guerrilla-games.com/publications/dr_kz2_rsx_dev07.pdf

Deferred Rendering - Interactive 3D Graphics https://www.youtube.com/watch?v=nsl8coxtsz4

Ręczne pisanie shaderów?

Insomnium Engine. Deferred Rendering. Physically based shading and post processing effects https://www.youtube.com/watch?v=bj9p504juae

Koniec