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

Podobne dokumenty
Sphere tracing: integracja z klasycznymi metodami symulacji i renderingu

Zaawansowana Grafika Komputerowa

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

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

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

Sphere tracing: integracja z klasycznymi metodami symulacji i renderingu

Algorytmy renderingu dla programowalnych jednostek graficznych. prof. dr hab. inż. Maria Pietruszka mgr inż. Dominik Szajerman

Synteza i obróbka obrazu. Algorytmy oświetlenia globalnego

Julia 4D - raytracing

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

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

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

Algorytmy oświetlenia globalnego

Bartłomiej Filipek

Wprowadzenie do QT OpenGL

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

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

GRK 4. dr Wojciech Palubicki

1 Podstawy c++ w pigułce.

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

IX. Wskaźniki.(3 godz.)

Shadery. Artur Staszczyk Bartłomiej Filipek

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

Podstawy programowania C. dr. Krystyna Łapin

Śledzenie promieni w grafice komputerowej

Potok graficzny i shadery. Hubert Rutkowski

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

Programowanie - wykład 4

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Plan wykładu. Akcelerator 3D Potok graficzny

Model odpowiedzi i schemat oceniania do arkusza I

Programowanie 2. Język C++. Wykład 2.

Języki i techniki programowania Ćwiczenia 2

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Język ludzki kod maszynowy

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wskaźniki. Programowanie Proceduralne 1

Metoda śledzenia promieni (ang. ray tracing)

Metody Metody, parametry, zwracanie wartości

Modelowanie i Animacja

Metody rozwiązywania równań nieliniowych

1 Podstawy c++ w pigułce.

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Grafika realistyczna. Oświetlenie globalne ang. global illumination. Radosław Mantiuk

Programowanie. Sylwester Arabas. prowadzący ćwiczenia: Magdalena Kuich, Krzysztof Piasecki, Łukasz Dulny. Wydział Fizyki Uniwersytetu Warszawskiego

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Różne rodzaje efektów

Programowanie Współbieżne

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Informatyka I: Instrukcja 4.2

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

1 Temat: Vertex Shader

Programowanie strukturalne i obiektowe. Funkcje

WSTĘP DO GRAFIKI KOMPUTEROWEJ

1 Wstęp teoretyczny. Temat: Obcinanie odcinków do prostokąta. Grafika komputerowa 2D. Instrukcja laboratoryjna Prostokąt obcinający

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami




PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Kamil Nowakowski 2011

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

Matematyka stosowana i metody numeryczne

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

Model oświetlenia. Radosław Mantiuk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie

Wstęp do programowania

Programowanie i struktury danych

Gry komputerowe: efekty specjalne cz. 2

rgbf<składowa_r,składowa_g,składowa_b,filter>. Dla parametru filter przyjmij kolejno wartości: 0.60, 0.70, 0.80, 0.90, 1.00, np.:

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

Gry komputerowe, Informatyka N1, III Rok

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Algorytm selekcji Hoare a. Łukasz Miemus

Komponowanie shaderów w X3D

CYFROWA SYNTEZA FOTOREALISTYCZNYCH OBRAZÓW W ŚRODOWISKU 3D

WOJEWÓDZKI KONKURS MATEMATYCZNY

Klasa III technikum Egzamin poprawkowy z matematyki sierpień I. CIĄGI LICZBOWE 1. Pojęcie ciągu liczbowego. b) a n =

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Informacje i porady dotyczące pisania shaderów.

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Geometria analityczna

Wyświetlanie terenu. Clipmapy geometrii

Grafika 3D program POV-Ray - 1 -

Animowana grafika 3D. Opracowanie: J. Kęsik.

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Gry Komputerowe Laboratorium 3. Organizacja obiektów sceny Kolizje obiektów. mgr inż. Michał Chwesiuk 1/20. Szczecin, r

Tworzenie aplikacji w języku Java

Projektowanie algorytmów rekurencyjnych

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

SCROLLER SHADEBOB ROTOZOOMER (mniam)

Transkrypt:

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

Co to są intra 4kb? Demoscena Demo Intro Intro 4kb (4096 bajtów) krótko: taaaaaakie malutkie demka...

Ile to jest 4096 bajtów? 1 bajt = 8 bit 4096b = 32768 bit

Przykład: Sult / Loonies śi 3 miejsce Breakpoint 2009 http://www.youtube.com/watch?v=for64zobaxa

Strona techniczna Sult w.avi sredniej jakosci > 80mb, jak miesci sie to w 4kb? - intro zapisane w programie cieniującym (fragment shader) - grafika proceduralna (ray marching) - muzyka proceduralna (synteza FM) - sztuczki, optymalizacje i pakowanie (Crinkler)

Ray Tracing Problemy: - problem z miękkimi cieniami - dużo obiektów, fraktale 3D - trzeba rozwiązywać równania (wikipedia)

Ray Marching (ważny slajd) Zamiast liczyć punkt przecięcia promienia z obiektem w scenie (Ray Tracing) wykonujemy spacer po promieniu szukając przecięcia z obiektami w scenie.

Równanie iteracyjne Promień: r(t) = r0 + t * dir Szukamy ti wskazującego przecięcie promienia z obiektem: ti = ti-1 + f( r(ti-1) )

Ray Marching - Spacer

Ray Marching - Spacer

Ray Marching - Spacer

Ray Marching - Spacer

Ray Marching - Spacer

Ray Marching - Spacer

Ray Marching - Spacer

Distance Fields Opis obiektów przez funkcje implicit functions dla danej pozycji x w scenie f(x) < 0 f(x) = 0 f(x) > 0 - punkt wewnątrz - punkt na powierzchni - punkt na zewnątrz wartosc f może niesc informację o odległosci

Sphere Tracing

Sphere Tracing

Sphere Tracing

Sphere Tracing

Sphere Tracing

Sphere Tracing

Sphere Tracing

Sphere Tracing

Sphere Tracing

Sphere Tracing

Algorytm sphere tracing float d; vec3 p = p0; for(int i=0; i<iter; i++) // np. 100 { d = f(p); if(d < EPS) // np. 0.002 break; p = p + dir * d; }

Przykładowe funkcje Powierzchnia o normalnej n przechodząca przez punkt nd f(r) = r * n - d J.C. Hart, Sphere Tracing: Simple Robust Antialiased Rendering of Distance-Based Implicit Surfaces (Course Notes, SIGGRAPH 1993)

Przykładowe funkcje Powierzchnia o normalnej n przechodząca przez punkt nd f(r) = r * n - d J.C. Hart, Sphere Tracing: Simple Robust Antialiased Rendering of Distance-Based Implicit Surfaces (Course Notes, SIGGRAPH 1993)

Przykładowe funkcje Kula o promieniu R f(r) = r - R // przykładowy kod float sphere(vec3 r, float R) { return length(r) - R; } J.C. Hart, Sphere Tracing: Simple Robust Antialiased Rendering of Distance-Based Implicit Surfaces (Course Notes, SIGGRAPH 1993)

Przykładowe funkcje Kula o promieniu R f(r) = r - R J.C. Hart, Sphere Tracing: Simple Robust Antialiased Rendering of Distance-Based Implicit Surfaces (Course Notes, SIGGRAPH 1993)

Minimum dwóch funkcji to ich suma...

Miękkie cienie Marsz od punktu kontaktu do źródła swiatła + suma odległosci od innych obiektów (b. proste w implementacji!)

Miękkie cienie

Miękkie cienie

Miękkie cienie

Cienie

Realizacja w pixel shader 1) dwa trójkąty (fullscreen) 2) każdy pixel ma przypisany taki sam program cieniujący pixel shader 3) kod sphere tracingu można zapisać jako pixel shader który wykonuje się na GPU

Przykładowy kod (ps) varying vec3 r; uniform float t; uniform vec4 m; float plane(vec3 r) { return r.y; } float sphere(vec3 r, float R) { return length(r) - R; } float f(vec3 r) // distance function { float d=1e10; vec3 posr = r; d = sphere(r+vec3(0+m.x,-0.1+m.y,3.9), 0.5); d = min (d, plane(r)); return d; } // credit: las / pouet thread float shadow(vec3 p, vec3 l, float d, int i) { float o; for (o = 0; i > 0.; i--) o += f(p+l*i*d).x; return clamp(o, 0.0, 1.0); } // credit: http://www.pouet.net/topic.php?which=7920&page=10, rar vec3 normal(vec3 p) { #define DR 2e-4 vec3 dr = vec3(dr,0,0); return ( vec3( f(p+dr.xyz).x, f(p+dr.yxz).x, f(p+dr.yzx).x ) - f(p).x) / DR; } #define ITER 90 #define EPS 0.002 void main() { vec3 camera = vec3(-0.1,1.8,-15.0); vec3 p = vec3(r.x, r.y+1.2, -10.2); vec3 lightv = vec3(0.0,2.5,-5.0); vec3 dir = normalize(p-camera); int mat=1; float d; for(int i=0; i<iter; i++) { d = f(p); if(d < EPS) break; p = p + dir * d; } vec3 n = normal(p); float light = 1.0 + 0.5*(dot(n,lightv)); light = light / pow(length(lightv-p),2); vec3 lightdir = normalize(lightv-p); light *= shadow(p, lightdir, 0.02, 10); vec4 color = 0.1+0.9*light * vec4(1,1,1,1); gl_fragcolor = color; }

W działaniu AKIKO by Floppy 2 miejsce na Riverwash 2011 http://www.youtube.com/watch?v=mxzx5rlqsc4

Czy tylko prymitywy w 4k? - fraktale 3d - tereny 3d, np. - renderuj klasyczny objekt (np. teren) - wynik przenies na GPU - ray marching - efekt? (Rendering World with two triangles / IQ

Elevated 4kb 1 miejsce Breakpoint 2009 http://www.youtube.com/watch?v=_ywmguh15ne

Dobre linki http://pouet.net/ - m.in. intra 4k http://www.iquilezles.org/ - m.in. sphere tracing http://www.iquilezles.org/apps/shadertoy/

Koniec Dziękuję za uwagę http://panoramix.ift.uni.wroc.pl/~maq/raymarching.zip helpdesk: maciej.matyka[at] gmail.com