Komponowanie shaderów w X3D

Podobne dokumenty
Plan wykładu. Akcelerator 3D Potok graficzny

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

Bartłomiej Filipek

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

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

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Wykład 4. Rendering (1) Informacje podstawowe

1 Temat: Vertex Shader

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

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

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Shadery. Artur Staszczyk Bartłomiej Filipek

Programowanie obiektowe - 1.

Podstawy Programowania Obiektowego

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Wprowadzenie do QT OpenGL

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Zastosowania Robotów Mobilnych

Programowanie obiektowe

Sphere tracing: integracja z klasycznymi metodami symulacji i renderingu

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Symulacja samochodu z kamerą stereowizyjną. Krzysztof Sykuła 15 czerwca 2007

Szablony funkcji i szablony klas

Karty graficzne możemy podzielić na:

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

Zasady tworzenia podstron

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

Dodatkowo planowane jest przeprowadzenie oceny algorytmów w praktycznym wykorzystaniu przez kilku niezależnych użytkowników ukończonej aplikacji.

Dokumentacja Użytkownika Systemu

Style programowania - krótki przeglad

HDR. Obrazy o rozszerzonym zakresie dynamiki

Zaawansowane programowanie w C++ (PCP)

REFERAT O PRACY DYPLOMOWEJ

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

Instrukcja użytkownika Porównywarki cen Liquid

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie obiektowe

Światła i rodzaje świateł. Dorota Smorawa

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

Programowanie Procesorów Graficznych

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

Klasy abstrakcyjne i interfejsy

Zad. 6: Sterowanie robotem mobilnym

PORÓWNANIE WYDAJNOŚCI JĘZYKÓW CIENIOWANIA CG I HLSL

Baza danych. Program: Access 2007

Tworzenie języków specyfikacji dla zagadnień numerycznych

Klasy i obiekty. Programowanie zorientowane obiektowo. Case study: Filmoteka Case study: Klasa Akademik

Wprowadzenie do szablonów szablony funkcji

Obiektowy model dokumentu. Katedra Mikroelektroniki i Technik Informatycznych

Wprowadzenie do szablonów szablony funkcji

29. Poprawność składniowa i strukturalna dokumentu XML

Grafika 3D na przykładzie XNA 3.1

Autodesk 3D Studio MAX Teksturowanie modeli 3D

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

VBA w Excel Lekcja ta ma przybliżyć pojęcia związane z programowaniem w pakiecie Office. Poniższe przykłady związane są z wersją Office2007.

Technologie i usługi internetowe cz. 2

Języki i techniki programowania Ćwiczenia 4 Wzorce

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

TEMAT : KLASY DZIEDZICZENIE

Ćwiczenie 1 Galeria zdjęć

DSL w środowisku Eclipse. Grzegorz Białek Architekt techniczny, Sygnity S.A.

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Projektowanie przy uz yciu motywo w częś c 1: informacje podśtawowe

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

STANOWISKA JĘZYKOWE DO BUDOWY SERWISÓW INFORMACYJNYCH

Referencje do zmiennych i obiektów

Microsoft Word jak zrobić bibliografię

EXSO-CORE - specyfikacja

Spis treści. tel.:

Następnie zdefiniujemy utworzony szkic jako blok, wybieramy zatem jak poniżej

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

Programowanie obiektowe

Ciasteczka. Krishna Tateneni Jost Schenck Polskie tłumaczenie: Suse Polska Aktualny opiekun tłumaczenia: Marcin Kocur

UWAGA!!! Przed przystąpieniem do zamknięcia roku proszę zrobić kopie bezpieczeństwa

Modelowanie krzywych i powierzchni

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

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

Encje w Drupalu. Tworzenie własnych encji i ich wpływ na poprawę wydajności

Przyspieszenie obróbki CNC z edytorem ścieżki. narzędzia w ZW3D. ZW3D CAD/CAM Biała księga

Backend Administratora

PRZEWODNIK PO PRZEDMIOCIE

Tworzenie szablonów użytkownika

Szablony klas, zastosowanie szablonów w programach

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Ćwiczenie 4 - Podstawy materiałów i tekstur. Renderowanie obrazu i animacji

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

Kadry Optivum, Płace Optivum

Aplikacje mobilne. Pliki zasobów, grafiki, menu, podpinanie zdarzeń. dr Tomasz Jach Instytut Informatyki, Uniwersytet Śląski

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

Zacznijmy więc pracę z repozytorium. Pierwsza konieczna rzecz do rozpoczęcia pracy z repozytorium, to zalogowanie się w serwisie:

Ćwiczenie 22 Dynamiczne wczytywanie tekstu z pliku.txt

OpenGL Światło (cieniowanie)

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

Transkrypt:

Komponowanie shaderów w X3D Michalis Kamburelis michalis.kambi@gmail.com 31 maja 2011

Plan 1 Wstęp 2 shadery 3 Nasz pomysł: komponowanie shaderów w X3D 4 Pytania?

Plan 1 Wstęp 2 shadery 3 Nasz pomysł: komponowanie shaderów w X3D 4 Pytania?

Wstęp Jak tworzyć i łaczyć efekty graficzne oparte na shaderach. Rozszerzenie dwóch zintegrowanych ze soba języków (X3D i GLSL). Praktyczne, implementowalne (100% skończona i przetestowana implementacja open-source).

Proste i działa Proste, ale nikt inny tego jeszcze nie zrobił :) Przynajmniej nie bez wymyślania zupełnie nowego języka pisania shaderów (Spark, Sh). Ale nowe języki nie zdobywaja popularności, bo zazwyczaj wymagaja przepisania całego renderowania. Nasz pomysł to eleganckie rozszerzenie GLSL i X3D. Działa świetnie :) Istotnie różne algorytmy na shaderach staja się łatwe, i to do prawdziwej implementacji (która, raz zrobiona, musi być użyteczna na różnych modelach). Będa ładne obrazki.

Plan 1 Wstęp 2 shadery 3 Nasz pomysł: komponowanie shaderów w X3D 4 Pytania?

X3D Extensible 3D: język do opisu światów 3D. Otwarty (pełne specyfikacje na http://www.web3d.org/), popularny standard. Łatwo wyrazić wszystkie typowe elementy świata 3D. Drzewo węzłów w wielu prostych przypadkach. Ale ogólnie skierowany graf węzłów, z możliwymi cyklami. Każdy węzeł ma pola, niektóre pola moga zawierać węzły-dzieci. Przykład #X3D V3.2 utf8 PROFILE Interchange Shape { geometry Sphere { radius 2 } }

X3D - XML Alternatywna wersja: Przykład kodowania XML... <X3D version="3.2" profile="interchange"...> <Scene> <Shape> <Sphere radius="2" /> </Shape> </Scene> </X3D>

X3D jako język programowania Kilka elementów które czynia X3D bardziej interesujacym, jako deklaratywny język programowania : DEF/USE: referencje, dla wszystkich węzłów. Mechanizm zdarzeń: wysyłanie i reagowanie na zdarzenia. Deklaratywny odpowiednik wywołania metody obiektu. Np. otwórz drzwi kiedy user kliknie na klamkę. Prototypy: można definiować nowe, pełnowartościowe, węzły jako kombinację istniejacych. Skrypty: integracja z innymi językami (np. JavaScript) łatwa. Skrypt pozostaje black boxem dla X3D, jednocześnie w samym X3D definiujemy precyzyjnie do czego skrypt ma a do czego nie ma dostępu.

Shadery Shadery: Języki do cieniowania obiektów 3D. Zaprogramuj pracę per-vertex, pozwól na rasteryzację, zaprogramuj pracę per-pixel. Nas interesuja shadery na GPU, czyli do renderowania w czasie rzeczywistym. GLSL (OpenGL), Cg (NVidia: dla OpenGL lub Direct 3D), HLSL (Direct 3D). Naturalnie, X3D posiada węzły do definiowania shaderów.

Przykład X3D + GLSL #X3D V3.2 utf8 PROFILE Interchange Shape { appearance Appearance { shaders ComposedShader { language "GLSL" parts ShaderPart { type "FRAGMENT" url "data:text/plain, void main(void) { gl_fragcolor = vec4(1.0,0.0,0.0,1.0); }" } } } geometry Sphere { radius 2 } }

Shader zastępuje domyślne obliczenia + Łatwa implementacja dla renderera, bo właśnie tak działaja GPU, na to pozwala OpenGL etc. - Trudne implementowanie własnych shaderów. Zanim zaczniesz pisać swój efekt, najpierw odtwórz algorytm standardowego renderowania. Możesz skopiować kod wygenerowany przez renderer, i zorientować się gdzie dodać swoje modyfikacje, ale... - Powstaja shadery 1-razowego użytku. Konkretny kod shadera przywiazuje Cię do wielu ustawień sceny (ile, jakie tekstury, światła etc.). Ogólny shader (uwzględniajacy wszystkie możliwości) nie jest możliwy, chociażby dlatego że nie ma będzie działał szybko. - Wszystkie efekty w jednym worku. Usuwanie / dodawanie efektu oznacza ostrożne wstawianie logiki do istniejacego (dużego) kodu.

Plan 1 Wstęp 2 shadery 3 Nasz pomysł: komponowanie shaderów w X3D 4 Pytania?

Dlaczego Chcielibyśmy intensywnie używać shaderów. Każda właściwość 3D powinna być programowalna po to stworzono shadery. Ale tradycyjne podejście, napisz shader który robi wszystko, uniemożliwia to. Zaprogramowanie najmniejszej zmiany (np. przefiltruj światło przez szablon) wymaga zatroszczenia się o algorytm naokoło. Wolimy programować efekty które rozszerzaja/modyfikuj a istniejace zachowanie.

Rozwiazanie Pomysł 1 Prosty w użyciu mechanizm do definiowania i używania gniazd (plugs) miejsc gdzie można dodać własne obliczenia. Żeby użyć gniazda o nazwie texture_apply, zdefiniuj funkcję o magicznej nazwie PLUG_texture_apply w nowym węźle Effect. Zachowujemy pełna siłę języka shaderów (GLSL). Implementacja w rendererze łatwa: rozszerzamy istniejacy język. Implementacja efektów łatwa: zaczynamy od razu pisać nasz algorytm, wskazujemy tylko gdzie wstawić odpowiednie elementy. Efekty reusable: wstawiane w wewnętrzny shader, wygenerowany znajac tekstury, oświetlenie etc. Efekty można łaczyć: wiele efektów może używać tych samych gniazd.

Przykład naszego efektu # w środku Appearance z poprzedniego przykładu: effects Effect { language "GLSL" parts EffectPart { type "FRAGMENT" url "data:text/plain, void PLUG_texture_apply( inout vec4 fragment_color, const in vec3 normal) { fragment_color.rgb *= 2.0; }" } }

Szczegóły Nowy węzeł Effect: wybierz język shaderów. Nowy węzeł EffectPart: wybierz typ (vertex, pixel, etc.). Można definiować własne uniform w Effect, np. przekazać teksturę albo czas (TimeSensor.time z X3D) do efektu. Wszystkie efekty będa dodane do bazowego shadera. (Upraszczajac.) Stary ComposedShader modyfikuje bazowy shader. W ten sposób stary ComposedShader też jest lepszy: może współpracować z wewnętrznymi efektami (shadow maps), i efektami użytkownika (z węzłów Effect).

Przykład - łaczenie prostych efektów Obraz: Połaczenie dwóch prostych efektów Fresnela i cieniowania kreskówkowego Kod: demo_models/compositing_shaders/ fresnel_and_toon.x3dv

Wewnętrzne efekty Możemy zaimplementować wewnętrzne efekty w podobny sposób. Shadow maps: filtruj odpowiednie źródło światła, Klasyczny Bump mapping: zmień wektor normalny na podstawie tekstury, Mgła: wymieszaj końcowy kolor pixela z kolorem mgły. Obraz: Połaczenie dwóch shadow maps i bump mapping

Efekty dla źródeł światła Pomysł 2 Efekty można dodawać nie tylko do widocznych obiektów 3D. Można zdefiniować światło które ma specyficzny kształt, równanie itp., i używać go wielokrotnie jako pełnowartościowe światło w X3D. Obraz: Światło filtrowane przez teksturę. Rzuca poprawny cień, współpracuje z bump mapping (czego nie mamy przy prostym rzutowaniu tekstury na ścianę).

Efekty tekstur Tekstury można modyfikować przy użyciu efektów. Tekstury maja mnóstwo zastosowań (to po prostu macierz, zazwyczaj 2D lub 3D), więc wiele nowych możliwości. Np. zaburz istniejac a teksturę losowym szumem, albo wybierz slice tekstury 3D.

Wstep shadery Nasz pomysł Proceduralne tekstury na GPU Proceduralna tekstura to po prostu funkcja 2D lub 3D kolor, wektor normalny, i inne. Tworzenie ich zawsze było łatwe, ale tradycyjne metody miały wade: poniewaz nie jest to tekstura dla renderera, znikały moz liwos ci wygodnego generowania i przypisywania współrz ednych tekstury. Rozwiazujemy to przez ShaderTexture. Pytania?

Wstep shadery Nasz pomysł Efekty działajace na grupe Obraz: Kłebiasta, ruchoma mgła (sauna). Kod: demo_models/compositing_shaders/ volumetric_animated_fog.x3dv Krótki i działa na dowolnym modelu 3D! Pytania?

Definiuj własne gniazda Cały system polega na tym że własne gniazda można definiować łatwo: Bazowy shader, i każdy efekt, może definiować gniazda do użycia przez następne efekty. Trywialne: magiczny komentarz /* PLUG:... */. Magicznego komentarza można użyć wielokrotnie (żeby pozwolić na loop unrolling w shaderach). Magiczny komentarz /* PLUG-DECLARATION */ (przydatny żeby można było zadeklarować wyższa wersję GLSL). Elegancko korzystamy z separate compilation units GLSL. Pomysł przenośny do innych języków shaderów. Dobrze dobrany domyślny zestaw gniazd, see linki na końcu i przykłady. Wbrew pozorom, nie trzeba 100 gniazd istnieje kilka uniwersalnych gniazd które zaspokajaja 90% potrzeb.

Wstep shadery Nasz pomysł Przykłady kon cowe - woda Obraz: Woda, połaczenie kilku efektów: generuj wektory normalne, transformuj je do eye space, połacz z reflection + refraction Pytania?

Wstep shadery Nasz pomysł Obraz: Animowane kwiatki: transformacja w object space zmieniana przez shader. Pytania?

Plan 1 Wstęp 2 shadery 3 Nasz pomysł: komponowanie shaderów w X3D 4 Pytania?

Wszystko jest zaimplementowane, open-source (LGPL), w moim silniku: http://vrmlengine.sourceforge.net/ Instrukcje jak pobrać i ogladać przykładowe modele dotyczace komponowania shaderów: http://vrmlengine.sourceforge.net/ compositing_shaders.php Dziękuję za uwagę! Pytania?