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

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

Filtrowanie tekstur. Kinga Laurowska

Różne rodzaje efektów

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

Instrukcja obsługi funkcji specjalnych szablonu C01 v.1.0

Podstawy OpenCL część 2

Kolory elementów. Kolory elementów

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

Lokalizacja jest to położenie geograficzne zajmowane przez aparat. Miejsce, w którym zainstalowane jest to urządzenie.

UONET+ moduł Dziennik. Praca z rozkładami materiału nauczania

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

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

Informacje i porady dotyczące pisania shaderów.

UWAGA: poniższe procedury przygotowane zostały w oparciu o program HiTi PhotoDesiree 2 w wersji

Grafika komputerowa. Zajęcia 8

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

UONET+ moduł Dziennik. Praca z rozkładami materiału nauczania

Julia 4D - raytracing

CorelDraw - wbudowane obiekty wektorowe - prostokąty Rysowanie prostokątów

Tworzenie szablonów użytkownika

Kadry Optivum, Płace Optivum

Maskowanie i selekcja

OpenGL - tekstury Mapowanie tekstur

1 Temat: Vertex Shader

Compas 2026 Vision Instrukcja obsługi do wersji 1.07

Opis Edytora postaci Logomocji

2. Korzystając z ikony Warstwy stwórz nowe warstwy według podanego schematu:

WinSkład / WinUcz 15.00

Operacje na Wielu Arkuszach

Uzyskanie podkładu topograficznego z Geoportalu przy użyciu biblioteki GDAL. Krzysztof Kochan

Menu Plik w Edytorze symboli i Edytorze widoku aparatów

Mapowanie sześcienne otoczenia (cubic environment mapping)

Szybkie tworzenie grafiki w GcIde

Animacje z zastosowaniem suwaka i przycisku

Zadanie 9. Projektowanie stron dokumentu

Microsoft Access zajęcia 3 4. Tworzenie i wykorzystanie kwerend, formularzy i raportów

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

Metaliczny button z deseniem.

I. Program II. Opis głównych funkcji programu... 19

Sigma moduł Arkusz. Jak wyłączyć/włączyć oddział z arkusza?

DesignCAD 3D Max 24.0 PL

Rysowanie punktów na powierzchni graficznej

Cover sheet. WinCC (TIA Portal) FAQ Listopad 2012

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

Tekstury Ćwiczenie 1 (Kostka)

UONET+ moduł Dziennik

Podstawy pozycjonowania CSS

ROZDZIAŁ 11 - DODATKI SPIS TREŚCI

Animacje cz. 2. Rysujemy koło zębate

Dodawanie grafiki i obiektów

UONET+ moduł Dziennik

Instytut Chemii Bioorganicznej PAN Poznańskie Centrum Superkomputerowo-Sieciowe

Efekt rollover ze wskaźnikiem wybranej opcji

BLENDER- Laboratorium 1 opracował Michał Zakrzewski, 2014 r. Interfejs i poruszanie się po programie oraz podstawy edycji bryły

Najmniejszą możliwą macierzą jest macierz 1 x 2 lub 2 x 1 składająca się z dwóch przyległych komórek.

e-podręcznik dla seniora... i nie tylko.

37. Podstawy techniki bloków

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

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

LIVE Gra w życie. LIVE w JavaScript krok po kroku. ANIMACJA Rozpoczynamy od podstawowego schematu stosowanego w animacji

PRO/ENGINEER. ĆW. Nr. OPCJE POLECENIA PATTERN

NARZĘDZIA DO ZAZNACZANIA

Czytnik kart pamięci 8w1, Conrad USB 2.0 Instrukcja obsługi

inwasico.ico inwasico.ico inwasico.ico Instrukcja InwasApplication

Co to jest arkusz kalkulacyjny?

Jak zrobić klasyczny button na stronę www? (tutorial) w programie GIMP

Szybki start SAMOOCENA W NOR-STA

PIXLR EDITOR - Autor: mgr inż. Adam Gierlach

Expo Composer Garncarska Szczecin tel.: info@doittechnology.pl. Dokumentacja użytkownika

Access - Aplikacja. Tworzenie bazy danych w postaci aplikacji

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Przegląd architektury PlayStation 3

INSTRUKCJA OBSŁUGI ⓫ Dodatki

Jak przesłać mapę do urządzenia lub na kartę pamięci?

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

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

JAK ZAMÓWIĆ ZDJĘCIA PRZEZ PROGRAM FOTOSENDER? 1. POBIERANIE I INSTALACJA PROGRAMU FOTOSENDER

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Backend Administratora

WSTĘP; NARZĘDZIA DO RYSOWANIA

Matlab Składnia + podstawy programowania

Plan lekcji Optivum. Jak ułożyć plan dyżurów? Przewodnik

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

System imed24 Instrukcja Moduł Analizy i raporty

Jak dodać własny szablon ramki w programie dibudka i dilustro

Przetwarzanie obrazów rastrowych macierzą konwolucji

Dopasowywanie czasu dla poszczególnych zasobów

Sekretariat Optivum. Jak przygotować listę uczniów zawierającą tylko wybrane dane, np. adresy ucznia i jego opiekunów? Projektowanie listy

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Lab 9 Podstawy Programowania

Szybki start SAMOOCENA W NOR-STA

Robert Barański, AGH, KMIW MathScript and Formula Nodes v1.0

Użycie przestrzeni papieru i odnośników - ćwiczenie

Materiały. Przygotowanie plików: 1. Ściągamy i otwieramy tę scene ; ściągamy też te tekstury: Small, Tiled, Small, Tiled, Small.

Teksturowanie (ang. texture mapping)

Szkolenie dla nauczycieli SP10 w DG Operacje na plikach i folderach, obsługa edytora tekstu ABC. komputera dla nauczyciela. Materiały pomocnicze

Cała prawda o plikach grafiki rastrowej

Zobacz poradę: Jak przygotować i wydrukować arkusze ocen i świadectwa uczniów?

INSTRUKCJA UŻYTKOWNIKA Instalacja KS - EDE w systemie KS - ZSA ISO 9001:2008 Dokument: Wydanie: 1 Waga: 90

Adobe Photoshop lab. 3 Jacek Wiślicki, 1. Napisy (c.d.) Ogień Miód Metal Aqua...

Transkrypt:

Część IV Postprocessing rozmycie gaussowskie Do tej pory obiekty renderowane były od razu do okna podglądu. Zmienimy trochę ten schemat tworzenia obrazu. Wszystkie przebiegi, które zostały utworzone do tej pory przekierujemy tak, żeby zapisywały obraz do tekstury o wymiarach identycznych z oknem podglądu. Oprócz tej tekstury wykorzystamy dwie dodatkowe tekstury, których każdy wymiar będzie o połowę mniejszy od wymiaru okna podglądu. Te tekstury posłużą nam jako pamięć pomocnicza przy filtrowaniu obrazu zapisanego w dużej teksturze. Filtr gaussowski jest przykładem filtru macierzowego: wynikowy kolor piksela obrazu powstaje przez pomnożenie wartości koloru pikseli w pewnym kwadracie naokoło niego przez macierz współczynników rzeczywistych. Zaletą rozmycia gaussowskiego jest to, że jest separowalne. Identyczny efekt jak dla macierzy kwadratowej można uzyskać filtrując najpierw obraz w poziomie z odpowiednią macierzą o jednym wierszu, a następnie wynik tej operacji filtrując w pionie z użyciem transpozycji tego wiersza (separowalność polega na tym, że macierz kwadratowa filtru gaussowskiego powstaje z pomnożenia wektora kolumnowego przez identyczny wektor wierszowy). Postprocessing obrazów przy pomocy shaderów odbywa się z reguły według następującego schematu. Renderowany jest pojedynczy kwadrat (dwa trójkąty), który wypełnia cały obszar okna widoku (tekstury, do której zapisujemy wynik). Obraz, który filtrujemy jest teksturą nałożoną na ten kwadrat. W shaderze pikseli mamy współrzędne tekstury odpowiadające dokładnie pozycji renderowanego piksela. Mając szerokość i wysokość pojedynczego piksela we współrzędnych tekstury, możemy poruszać się po obszarze źródłowego obrazu, odczytywać wartości poszczególnych pikseli i liczyć na ich podstawie wynikowy kolor. Dwie tekstury pomocnicze mają dwukrotnie mniejsze rozmiary od oryginalnego obrazu. Tak często postępuje się przy rozmywaniu obrazu w grafice czasu rzeczywistego, ponieważ wówczas otrzymuje się dwukrotnie większe rozmycie przy czterokrotnie mniejszej liczbie operacji. Dobrze jest jeszcze dobierać współrzędne tekstury podczas próbkowania tak, aby trafić dokładnie w środek między dwójką (lub czwórką) tekseli. Wtedy w wyniku biliniowego filtrowania sprzętowego dostaniemy średni kolor dwóch (czterech) tekseli zamiast wartości pojedynczego teksela i efekt rozmycia będzie większy. Dodamy w sumie trzy przebiegi w każdym renderowany będzie prostokąt wypełniający cały ekran. Pierwszy przebieg pobierze dane z dużej tekstury i zapisze do pierwszej z małych tekstur. Drugi pobierze dane z pierwszej z małych tekstur i zapisze wynik rozmycia w poziomie do drugiej z małych tekstur. Trzeci pobierze dane z drugiej z małych tekstur i wyświetli efekt rozmycia jej w pionie już bezpośrednio na ekranie.

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

1. Możesz wyłączyć animację sprężyny: prawy przycisk na time, Variable Semantic, Clear Semantic (ponowne włączenie Variable Semantic, Time0_X) 2. Dodaj trzy renderowalne tekstury do projektu screen o wymiarach okna widoku oraz halfscreen1 i halfscreen2 o wymiarach o połowę mniejszych: prawy przycisk na Textured Phong, Add Texture, Add Renderable Texture; prawy przycisk na rendertexture, Rename, screen; dwuklik na screen, zaznacz Use viewport dimensions, odznacz Auto-Generate Mip Map, kliknij OK; powtórz to samo dla halfscreen1 i halfscreen2, ale tym razem dla obu w oknie właściwości, podaj Viewport Ratio Width = 0.5 oraz Height = 0.5 3. Dodaj do projektu parametr, który będzie zawsze przechowywał rozmiar pojedynczego teksela (rozmiar liczony we współrzędnych tekstury) w teksturze screen: prawy przycisk na Textured Phong, Add Variable, Float, Predefined, finverseviewportdimensions (i tym razem zostawmy domyślną nazwę) 4. Dodaj do projektu jeszcze jeden parametr związany z wielkością rozmycia blurscale: prawy przycisk na Textured Phong, Add Variable, Float, Float; prawy przycisk na f1myfloat, Rename, blurscale; dwuklik na blurscale, wpisz wartość 1.0, kliknij OK; prawy przycisk na blurscale, Artist Variable 5. Dodaj siatkę kwadratu złożonego z dwóch trójkątów, którą wykorzystamy w przebiegach związanych z rozmyciem obrazu: prawy przycisk na Textured Phong, Add Model, Model; prawy przycisk na mymodel3, rename, Quad; prawy przycisk na Quad, Edit, wskaż plik ScreenAlignedQuad.3ds (jest dołączony do materiałów do zajęć umieszczonych na stronie www) 6. Przekieruj renderowanie w przebiegach Pass Cube, Pass Teapot, Pass Spring do tekstury screen: prawy przycisk na Pass Cube, Add Render Target, screen; tak samo dla pozostałych dwóch przebiegów 7. Dla wszystkich przebiegów poza pierwszym wyłącz czyszczenie bufora koloru i bufora głębokości: dwuklik na screen w gałęzi Pass Teapot, odznacz Enable color clear, odznacz Enable depth clear, kliknij OK; analogicznie dla Pass Spring 8. Dodaj i skonfiguruj nowy przebieg Pass Downsample: a. prawy przycisk na Textured Phong, Add Pass; prawy przycisk na Pass 3, Rename, Pass Downsample; b. prawy przycisk na Model w gałęzi Pass Downsample, Reference Node, Quad; c. prawy przycisk na Stream Mapping w gałęzi Pass Downsample, Reference Node, Stream Mapping Plane; d. prawy przycisk na Pass Downsample, Add Texture Object; prawy przycisk na Texture0, Rename, src; rozwiń src, prawy przycisk na basemap, Reference Node, screen; dwuklik na src, ustaw D3DSAMP_ADDRESSU i D3DSAMP_ADDRESSV na D3DTADDRESS_CLAMP e. prawy przycisk na Pass Downsample, Add Render Target, halfscreen1 9. Przejdź do edycji shadera wierzchołków w przebiegu Pass Downsample: a. Usuń zmienną globalną float4x4 matviewprojection; (nie będzie wykorzystywana) b. Dodaj do struktury VS_OUTPUT pozycję float2 TexCoord : TEXCOORD0; c. Zmień funkcję vs_main na poniższą: VS_OUTPUT vs_main( VS_INPUT In ) { VS_OUTPUT Out; Out.Position.xy = sign(in.position); Out.Position.z = 1.0;

Out.Position.w = 1.0; Out.TexCoord.x = Out.Position.x * 0.5 + 0.5; Out.TexCoord.y = 1.0 - (Out.Position.y * 0.5 + 0.5); return Out; } 10. Przejdź do edycji shadera pikseli w przebiegu Pass Downsample: a. Dodaj zmienną globalną skojarzoną z samplerem src: sampler2d src; b. Zmień funkcję ps_main na poniższą: float4 ps_main( float2 Tex : TEXCOORD0 ) : COLOR0 { float4 color = tex2d(src,tex); return color; } 11. Skopiuj przebieg Pass Downsample jako przebieg Pass HBlur: prawy przycisk na Pass Downsample, Copy; prawy przycisk na Pass Downsample, Paste; prawy przycisk na Pass Downsample_1, Rename, Pass HBlur 12. Skonfiguruj przebieg Pass HBlur tak, żeby czytał z tekstury halfscreen1 i zapisywał do halfscreen2: prawy przycisk na halfscreen1 w gałęzi Pass HBlur, Reference Node, halfscreen2; prawy przycisk; rozwiń src w gałęzi Pass HBlur, prawy przycisk na screen, Reference Node, halfscreen1 13. Przejdź do edycji shadera pikseli w przebiegu Pass HBlur (nie ma potrzeby zmieniania shadera wierzchołków skopiowanego z Pass Downsample): a. Dodaj w zasięgu globalnym tablicę wag dla filtra rozmycia: static const float blurweights[13] = { 0.002216, 0.008764, 0.026995, 0.064759, 0.120985, 0.176033, 0.199471, 0.176033, 0.120985, 0.064759, 0.026995, 0.008764, 0.002216, }; b. Dodaj w zasięgu globalnym następujące dwie zmienne powiązane z parametrami projektu: float blurscale; float2 finverseviewportdimensions; c. Usuń wnętrze funkcji ps_main i zastąp ją poniższym kodem, który próbkuje teksturę src w 13 punktach (6 na lewo, 6 na prawo od pozycji renderowanego piksela, raz w tym samym punkcie) rozmieszczonych w stałych odległościach (równych szerokości teksela pomnożonej przez blurscale), mnoży przez wagi tablicy blurweights i sumuje: float4 Color = 0; float2 ftexelsize = blurscale*2.0*finverseviewportdimensions; for (int i = 0; i < 13; i++) Color += blurweights[i] *

tex2d( src, Tex + float2(((i-6)*2.0-0.5)*ftexelsize.x,0.0).xy ); return Color; 14. Skopiuj przebieg Pass HBlur jako przebieg Pass VBlur: prawy przycisk na Pass HBlur, Copy; prawy przycisk na Pass HBlur, Paste; prawy przycisk na Pass HBlur_1, Rename, Pass VBlur 15. Skonfiguruj przebieg Pass VBlur tak, żeby czytał z tekstury halfscreen2 i zapisywał do halfscreen1 (wynik rozmycia zapisany w teksturze przyda się jeszcze): prawy przycisk na halfscreen2 w gałęzi Pass VBlur, Reference Node, halfscreen1; prawy przycisk; rozwiń src w gałęzi Pass VBlur, prawy przycisk na halfscreen1, Reference Node, halfscreen2 16. Przejdź do edycji shadera pikseli w przebiegu Pass VBlur. Dokonamy tylko jednej małej zmiany zamienimy poziom z pionem w funkcji ps_main: zastąp wyrażenie float2(((i-6)*2.0-0.5)*ftexelsize.x,0.0).xy wyrażeniem float2(0.0,((i-6)*2.0-0.5)*ftexelsize.y).xy 17. Włącz renderowanie wyniku przebiegu Pass VBlur na ekran: prawy przycisk na halfscreen1 w gałęzi Pass VBlur, Render To Screen 18. Skompiluj shadery (okno podglądu musi być otwarte), otwórz Artist Editor i zobacz jak zmiana parametru blurscale wpływa na renderowany obraz. Na koniec nieznacznie zmodyfikujemy przebieg Pass Downsample tak, żeby zostawić tylko najjaśniejsze fragmenty obraz, a wynik rozmycia dodamy w nowym przebiegu Pass Composite do pierwotnego obrazu tak, żeby uzyskać poświatę wokół najjaśniejszych fragmentów.

19. Dodaj nowy parametr luminance_cutoff do projektu: prawy przycisk na Textured Phong, Add Variable, Float, Float; prawy przycisk na f1myfloat, Rename, luminance_cutoff; dwuklik na luminance_cutoff, wartość 2.16, kliknij OK; prawy przycisk na luminance_cutoff, Artist Variable 20. Dodaj zmienną globalną do shadera pikseli w przebiegu Pass Downsample: float luminance_cutoff; 21. Zmień treść funkcji ps_main w przebiegu Pass Downsample: return dot(color.xyz,float3(1.0,1.0,1.0)) < luminance_cutoff? float4(.0,.0,.0,.0) : color; zamiast return color; 22. Skopiuj przebieg Pass Downsample jako nowy, ostatni na liście, przebieg o nazwie Pass Composition: prawy przycisk na Pass Downsample, Copy; prawy przycisk na Pass VBlur, Paste; prawy przycisk na Pass Downsample_1, Rename, Pass Composition 23. Usuń renderowanie do tekstury w przebiegu Pass Composition: prawy przycisk na halfscreen1 w gałęzi Pass Composition, Delete 24. Dodaj w przebiegu Pass Composition sampler tekstury powiązany z teksturą halfscreen1: prawy przycisk na Pass Composition, Add Texture Object; prawy przycisk na Texture1, Rename, src2; rozwiń src2, prawy przycisk na basemap, Reference Node, halfscreen1 25. Przejdź do edycji shadera pikseli w przebiegu Pass Composition: a. Dodaj zmienną globalną powiązaną z samplerem src2: sampler2d src2; b. Usuń całą treść funkcji ps_main i zastąp ją następującą instrukcją: return tex2d(src2,tex)+tex2d(src,tex); Możesz teraz otworzyć Artist Editor i obserwować w oknie podglądu wynik zmian parametrów luminance_cutoff, exposure i blurscale (te trzy powinny być oznaczone jako Artist Variable).