RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

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

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Plan wykładu. Akcelerator 3D Potok graficzny

Filtrowanie tekstur. Kinga Laurowska

Synteza i obróbka obrazu. Tekstury. Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych

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

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

10.3. Typowe zadania NMT W niniejszym rozdziale przedstawimy podstawowe zadania do jakich może być wykorzystany numerycznego modelu terenu.

Julia 4D - raytracing

Podstawy Programowania C++

Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania.

Generowanie sygnałów na DSP

Grafika komputerowa i wizualizacja

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

Obraz cyfrowy. Radosław Mantiuk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie

Autodesk 3D Studio MAX Teksturowanie modeli 3D

Algorytmy zrandomizowane

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Zaawansowana Grafika Komputerowa

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

GRK 5. dr Wojciech Palubicki

Metoda określania pozycji wodnicy statków na podstawie pomiarów odległości statku od głowic laserowych

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Aproksymacja funkcji a regresja symboliczna

ROZKŁAD MATERIAŁU DO II KLASY LICEUM (ZAKRES ROZSZERZONY) A WYMAGANIA PODSTAWY PROGRAMOWEJ.

Techniki animacji komputerowej

Sieci Mobilne i Bezprzewodowe laboratorium 2 Modelowanie zdarzeń dyskretnych

Programowanie strukturalne i obiektowe. Funkcje

Karty graficzne możemy podzielić na:

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

Laboratorium nr 1. i 2.

SIMR 2016/2017, Analiza 2, wykład 1, Przestrzeń wektorowa

Wyświetlanie terenu. Clipmapy geometrii

Parametryzacja obrazu na potrzeby algorytmów decyzyjnych

Optymalizacja ciągła

Podstawy Sztucznej Inteligencji (PSZT)

Ćwiczenia nr 7. TEMATYKA: Krzywe Bézier a

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

Zastosowanie metody interpolacji warstwic do tworzenia NMT. dr inż. Ireneusz Wyczałek Zakład Geodezji POLITECHNIKA POZNAŃSKA

Automatyczne tworzenie trójwymiarowego planu pomieszczenia z zastosowaniem metod stereowizyjnych

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

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Algorytmy decyzyjne będące alternatywą dla sieci neuronowych

Drgania poprzeczne belki numeryczna analiza modalna za pomocą Metody Elementów Skończonych dr inż. Piotr Lichota mgr inż.

Analiza obrazów - sprawozdanie nr 2

Transformata Fouriera

Wizualizacja 3D obiektów i systemów biomedycznych

Model odpowiedzi i schemat oceniania do arkusza I

Metody Rozmyte i Algorytmy Ewolucyjne

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

Przekształcenia widmowe Transformata Fouriera. Adam Wojciechowski

Propozycja szczegółowego rozkładu materiału dla 4-letniego technikum, zakres podstawowy i rozszerzony. Klasa I (90 h)

GRK 5. dr Wojciech Palubicki

Obraz jako funkcja Przekształcenia geometryczne

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

S O M SELF-ORGANIZING MAPS. Przemysław Szczepańczyk Łukasz Myszor

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.:

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Diagnostyka obrazowa

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych.

GRAFIKA WEKTOROWA. WYKŁAD 1 Wprowadzenie do grafiki wektorowej. Jacek Wiślicki Katedra Informatyki Stosowanej

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Grafika komputerowa Wykład 8 Modelowanie obiektów graficznych cz. II

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Dostawa oprogramowania. Nr sprawy: ZP /15

Złożoność obliczeniowa zadania, zestaw 2

1 Powtórzenie wiadomości

Technologie informacyjne - wykład 12 -

OpenGL Światło (cieniowanie)

Przetwarzanie obrazów rastrowych macierzą konwolucji

CHARAKTERYSTYKI CZĘSTOTLIWOŚCIOWE

Grafika komputerowa i wizualizacja. dr Wojciech Pałubicki

Rok akademicki: 2017/2018 Kod: JFM s Punkty ECTS: 7. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

Wymagania edukacyjne z matematyki w klasie III gimnazjum

OpenGL Światło (cieniowanie)

Zadanie 1. Ściana. 1. Potrzebne zmienne w dołączonym do zadania kodzie źródłowym

Matlab, zajęcia 3. Jeszcze jeden przykład metoda eliminacji Gaussa dla macierzy 3 na 3

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

Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki

Egzamin z Metod Numerycznych ZSI, Egzamin, Gr. A

Zagadnienia na egzamin poprawkowy z matematyki - klasa I 1. Liczby rzeczywiste

ROZWIĄZYWANIE UKŁADÓW RÓWNAŃ NIELINIOWYCH PRZY POMOCY DODATKU SOLVER PROGRAMU MICROSOFT EXCEL. sin x2 (1)

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Obliczenia Naukowe. Wykład 12: Zagadnienia na egzamin. Bartek Wilczyński

Robert Susmaga. Instytut Informatyki ul. Piotrowo 2 Poznań

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

LUBELSKA PRÓBA PRZED MATURĄ 09 MARCA Kartoteka testu. Maksymalna liczba punktów. Nr zad. Matematyka dla klasy 3 poziom podstawowy

Instytut Fizyki Politechniki Łódzkiej Laboratorium Metod Analizy Danych Doświadczalnych Ćwiczenie 3 Generator liczb losowych o rozkładzie Rayleigha.

Wizualizacja 3D obiektów i systemów biomedycznych

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

Implementacja filtru Canny ego

Wykład Ćwiczenia Laboratorium Projekt Seminarium 15 30

WYKŁAD 12. Analiza obrazu Wyznaczanie parametrów ruchu obiektów

Próbny egzamin z matematyki dla uczniów klas II LO i III Technikum. w roku szkolnym 2012/2013

NARZĘDZIA BADAWCZE W QGIS LOSOWANIE PUNKTÓW NA WARSTWIE LINIOWEJ

Transkrypt:

RENDERING W CZASIE RZECZYWISTYM Michał Radziszewski

Plan wykładu Modelowanie i teksturowanie proceduralne wprowadzenie Funkcje szumu Szum wielowymiarowy Technika simplex noise Funkcje szumu na GPU, funkcja noise() Tekstury z szumem Operacje na liczbach całkowitych Synteza widmowa

Plan wykładu c.d. Antyaliasing tekstur proceduralnych Pochodne i szerokość filtru w programie fragmentów Proceduralne tekstury wolumetryczne Marmur, drewno Tekstury komórkowe Synteza tekstur Losowe modyfikowanie pozycji wierzchołków Wprowadzenie nieregularności do modeli Modelowanie roślin (tzw. L-systemy)

Literatura K. Perlin, An Image Synthesizer, SIGGRAPH 1985 K. Perlin, Improving Noise, SIGGRAPH 2002 S. Gustavson, Simplex Noise Demystified, 2005 L. Wei, M. Levoy, Fast Texture Synthesis using Treestructured Vector Quantization, SIGGRAPH 2000 D. Ebert i inni, Texturing and Modeling: A Procedural Approach, 3 rd edition, Morgan Kaufmann 2003 P. Prusinkiewicz, A. Lindenmayer, The Algorithmic Beauty of Plants, Springer Verlag 2004

Modelowanie i teksturowanie proceduralne wprowadzenie Wykonanie programu określającego kolor teksela, normalną, pozycję wierzchołka, itp. W renderingu czasu rzeczywistego takie programy uruchamiane są na karcie graficznej Możliwe znaczne zwiększenie różnorodności sceny bez zwiększania zużycia pamięci Wprowadzenie niedoskonałości do modeli W grafice komputerowej modele często są idealnie równe, co nie wygląda naturalnie

Modelowanie i teksturowanie proceduralne wprowadzenie c.d. Zwykle modelowanie proceduralne znacznie bardziej obciążają GPU niż proste odczyty z tablic Brak automatycznego antyaliasingu tekstur proceduralnych Brak pełnej kontroli grafików nad modelami proceduralnymi, nie wszystkie tekstury mogą być nimi zastąpione Użycie zwykłych tekstur w połączeniu z modelami proceduralnymi

Modelowanie i teksturowanie proceduralne wprowadzenie c.d. Techniki te mają też wiele zastosowań w przetwarzaniu off-line Wyniki tego przetwarzania mogą być następnie renderowane przez kartę graficzną W zależności od czasu działania metody te mogą zostać zastosowane albo w trakcie produkcji aplikacji, albo w czasie jej działania, np. przy wczytywaniu sceny

Modelowanie i teksturowanie proceduralne wprowadzenie c.d.

Funkcje szumu Stanowią podstawę większości modeli proceduralnych Służą do kontrolowanego wprowadzenia losowości do modeli Szum nie może być w pełni losowy jego wartości muszą być powtarzalne Najczęściej generowany jest przez funkcję v = noise(x), gdzie v jest wartością szumu, a X jest wektorem

Funkcje szumu c.d. Funkcja zwraca wartości pseudolosowe dla argumentu X Dla każdego wywołania z takim samym argumentem X funkcja musi zwrócić taką samą wartość Funkcja rand() z C/C++ nie może zastąpić szumu Szum może być jedno- bądź wielowymiarowy Może też zwracać więcej niż jedną wartość Optymalizacja na GPU: 4 wartości liczone jednocześnie

Funkcje szumu c.d.

Własności funkcji szumu Funkcje zwracają wartości zmiennoprzecinkowe z ograniczonego przedziału Na ogół [-1, 1] albo [0, 1] Częstotliwości szumu zawierają się w ograniczonym przedziale Na ogół co najwyżej jedno minimum/maksimum funkcji pomiędzy argumentami X odległymi o 1.0 Średnia wartość szumu ma wielkość bliską środka przedziału wartości zwykle 0.0 albo 0.5

Własności funkcji szumu c.d. Charakter statystyczny szumu niezależny od translacji Same wartości szumu oczywiście są zmienne w zależności od położenia (X), nie zmienia się jedynie charakter funkcji W przypadku wielowymiarowym niezależność statystyczna od obrotów Szum wielowymiarowy powinien być izotropowy

Szum jednowymiarowy Na ogół implementowany przy pomocy interpolacji wartości na regularnej siatce punktów o współrzędnych całkowitych Na ogół interpolacja wielomianowa Numer punktu na siatce jest wejściem funkcji mieszającej albo obliczającej wartości pseudolosowe Wartości te są konwertowane do odpowiedniego przedziału, węższego niż [-1, 1], w zależności od zastosowanej techniki interpolacji

Szum jednowymiarowy c.d.

Szum jednowymiarowy c.d. W punktach siatki można zamiast wartości obliczać pochodne funkcji Dobre rezultaty można osiągnąć obliczając jednocześnie wartości i pochodne Stosuje się wtedy tzw. Interpolację Hermite a Punkty obliczania wartości szumu nie muszą stanowić regularnej siatki Lepsze własności statystyczne Komplikacja algorytmu, rzadko stosowane w praktyce

Szum wielowymiarowy Uogólnienie funkcji jednowymiarowej na wiele wymiarów Zmienność szumu w czasie Czas musi być dodatkowym wymiarem Zmienność ta nie może być osiągana przy pomocy zmian wartości funkcji noise() dla kolejnych wywołań brak powtarzalności Szum trójwymiarowy zmienny w czasie 4 wymiary Na ogół więcej nie jest potrzebne

Szum wielowymiarowy c.d. W podstawowej wersji regularna siatka dla większej liczby wymiarów Złożoność obliczeniowa: ilość obliczeń wartości na siatce O(d*2 d ) albo nawet O(d*4 d ), w zależności od interpolacji, gdzie d jest liczbą wymiarów Zależność częstotliwości szumu od kierunku, np. w 2D częstotliwość po skosie jest 2 0.5 razy mniejsza niż częstotliwość po siatce Można zastosować tzw. siatkę opartą o simpleksy Ttrójkąty równoramienne w 2D, czworościany w 3D,

Szum wielowymiarowy c.d. Szum oparty o siatkę simpleksową ma znacznie mniejszą złożoność obliczeniową ilość wierzchołków d-wymiarowego simpleksu to d+1 Nadal d obliczeń pochodnych w każdym wierzchołku Zatem złożoność to O(d 2 ) Mniejsza zależność częstotliwości od kierunku Bardziej skomplikowany algorytm konieczność skalowania i pochylania siatki Ale i tak szybciej złożoność ma decydujący wpływ

Szum wielowymiarowy c.d.

Funkcje szumu na GPU W specyfikacji języka GLSL jest dostępna funkcja noise() Niestety, na większości kart graficznych funkcja ta nie działa Program zostanie skompilowany i uruchomiony poprawnie, jednak funkcja ta na ogół zwraca stałą wartość Trzeba napisać własną wersję tej funkcji Przydatne mogą być operacje stałoprzecinkowe dostępne od OpenGL w wersji 3.0

Funkcje szumu na GPU c.d. Najprostszą funkcją szumu jest wygenerowanie odpowiedniej tekstury na CPU i odczyt z niej na GPU Do 4 komponentów w teksturze Co najwyżej szum 3D Znaczne zużycie pamięci albo widoczna powtarzalność szumu, nawet w przypadku 2D Komplikacja aplikacji, zajęcie dodatkowo co najmniej jednej jednostki teksturującej Interpolacja liniowa między tekselami nienajlepsze wyniki

Funkcje szumu na GPU c.d. Obecnie lepiej jest napisać własną funkcję szumu wykonywaną na GPU Interpolacja i przekształcenia siatki operacje na liczbach zmiennoprzecinkowych Dostępne od OpenGL w wersji 2.0 Obliczanie funkcji mieszającej/pseudolosowej w punktach na siatce Najlepsze operacje stałoprzecinkowe, dostępne od wersji 3.0 Emulowacja przy pomocy liczb zmiennoprzecinkowych

Synteza widmowa Prosta funkcja szumu zwykle nie daje oczekiwanych rezultatów Potrzebny jest większy zakres częstotliwości Synteza widmowa: suma wielu funkcji szumu o różnych częstotliwościach i amplitudach W najprostszym przypadku: suma N funkcji szumu Każda następna funkcja ma częstotliwość 2x większą niż poprzednia Ma też 2x mniejszą amplitudę

Synteza widmowa c.d.

Synteza widmowa c.d. Tak określona funkcja zawiera wartości z przedziału szerszego niż funkcja szumu W przypadku syntezy dowolnie wielu funkcji maksymalna wartość ograniczona jest przez sumę szeregu geometrycznego A + ca + c 2 A + c 3 A +, gdzie A to amplituda szumu, a c określa ile razy amplituda maleje dla każdej kolejnej sumowanej funkcji Dla A = 1.0 i c = 0.5 maksymalna wartość szumu syntezowanego to 2.0

Synteza widmowa c.d. Tak syntezowany szum zawiera jednocześnie elementy bardziej szczegółowe i elementy o większej skali Do szumu można też dołączyć ostre przejścia otrzymywane w wyniku zastosowania funkcji abs() na składnikach syntezy Szum musi być z przedziału [-1, 1], jeżeli jest z przedziału [0, 1] to należy go przetransformować Tzw. funkcja turbulence()

Synteza widmowa c.d.

Antyaliasing tekstur proceduralnych Na żadnej teksturze proceduralnej nie ma automatycznego antyaliasingu takiego jak na teksturach zwykłych Karta graficzna zapewnia jednak funkcje, które umożliwiają napisanie takiego antyaliasingu Są to przede wszystkim aproksymacje pochodnych w przestrzeni ekranu Na ich podstawie można wyliczyć przybliżony rozmiar filtru

Antyaliasing tekstur proceduralnych Aproksymacje pochodnych Funkcje dfdx() i dfdy() Pochodne w przestrzeni ekranu, w poziomie i w pionie Pochodne dowolnych parametrów interpolowanych (przekazywanego z programu wierzchołków do programu fragmentów), a także dowolnych wyrażeń opartych o te parametry, wartości stałe, tekstury, Niezdefiniowane w przypadku rozgałęzień (if/else, switch, while, for, itp.) Nieciągłości (min/max, abs,?:, itp.) psują dokładność

Antyaliasing tekstur proceduralnych Aproksymacje pochodnych algorytm Karta oblicza fragmenty w blokach 2x2 Pochodne są aproksymowane jako różnice danej wartości pomiędzy sąsiednimi fragmentami w poziomie i w pionie Jeżeli wartość danego wyrażenia w sąsiednich fragmentach została obliczona na innej ścieżce (np. if oraz else), albo w sąsiednim fragmencie nie została obliczona wcale, to aproksymacja ta nie działa, nawet jeżeli pochodna jest dobrze zdefiniowana

Antyaliasing tekstur proceduralnych Promień filtru można policzyć za pomocą funkcji fwidth(), zdefiniowanej jako fwidth(p) = abs(dfdx(p)) + abs(dfdy(p)) Albo nieco dokładniej, za pomocą wyrażenia fwidth(p) = sqrt(dfdx(p) 2 + dfdy(p) 2 ) Mając promień filtru, należy uśrednić wartości tekstury proceduralnej znajdującej się w odpowiednim kole

Antyaliasing tekstur proceduralnych Filtrowanie anizotropowe jest o wiele trudniejsze i zwykle nie jest stosowane w praktyce Filtrowanie szumu opartego o syntezę widmową wygaszanie częstotliwości w oparciu o rozmiar filtru Ograniczenie ilości sumowanych funkcji W przypadku innych tekstur proceduralnych antyaliasing trzeba projektować indywidualnie dla każdego przypadku Dobry antyaliasing może być trudny

Proceduralne tekstury wolumetryczne Obliczanie wartości tekstury w funkcji trójwymiarowej pozycji Nie jest potrzebne mapowanie uv do dwuwymiarowej przestrzeni tekstury Obiekt teksturowany w ten sposób wygląda jakby był wycięty z takiego materiału Nie można stosować klasycznych tekstur opartych o tablice w ten sposób ze względu na zajętość pamięci

Proceduralne tekstury wolumetryczne Przykład: marmur Budowa warstwowa Warstwy opisane funkcją y = sin n (f(x, y, z)+n(x, y, z)), gdzie f jest liniową funkcją pozycji, a n jest wykładnikiem o wartościach naturalnych, parzystych Argument funkcji sin jest zniekształcony szumem opartym o syntezę widmową Na końcu interpolacja pomiędzy dwoma dowolnymi kolorami (kolorami warstw) przy pomocy wartości y

Proceduralne tekstury wolumetryczne

Proceduralne tekstury wolumetryczne Przykład: drewno Podobny algorytm jak w przypadku marmuru Słoje opisane funkcją piłokształtną (zamiast sin n ) Funkcja pozycji: f(x, y, z) = (y 2 + z 2 ) 0.5 generacja słoi rozciągniętych wzdłuż osi x Podobnie jak dla marmuru, funkcję pozycji można zniekształcić przy pomocy szumu

Proceduralne tekstury wolumetryczne

Tekstury komórkowe Określenie wartości atrybutów (zależnych od danego algorytmu) w punktach na nieregularnej siatce Wyszukiwanie najbliższego sąsiedztwa cieniowanego fragmentu Kolor fragmentu zależny od odległości od punktów siatki oraz wartości atrybutów w tych punktach

Tekstury komórkowe

Synteza tekstur Założenie: różne regiony tesktury są do siebie podobne (ale nie takie same!) Technika nie jest opracowana dla dowolnych obrazów Generacja tekstur o dowolnie dużych rozmiarach na podstawie niewielkich próbek Różne warianty algorytmu Tworzenie tekstur o brzegach pasujących do siebie Zapełnianie dziur w teksturze Start od liczb losowych albo oryginalnej próbki

Synteza tekstur

Synteza tekstur

Losowe modyfikowanie pozycji wierzchołków Wejściem jest obiekt o prostej geometrii Następnie zwielokrotniana jest ilość trójkątów krawędzie ulegają wyobleniu Wierzchołki takiego modelu są ostatecznie przemieszczane o wartość dowolnej funkcji zdefiniowanej na wartościach pseudolosowego szumu Szum jest obliczany np. na podstawie pozycji wierzchołków

Losowe modyfikowanie pozycji wierzchołków

Modelowanie roślin Opis budowy i wzrostu roślin przy pomocy wyrażeń regularnych oraz gramatyk Losowy wybór zastąpień łańcuchów w gramatykach Losowy wybór wartości dodatkowych parametrów

Modelowanie roślin

Dziękuję za uwagę