Różne rodzaje efektów

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

Julia 4D - raytracing

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Wyświetlanie terenu. Clipmapy geometrii

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Filtrowanie tekstur. Kinga Laurowska

Karty graficzne możemy podzielić na:

Plan wykładu. Akcelerator 3D Potok graficzny

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

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

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

Architektura Procesorów Graficznych

Informacje i porady dotyczące pisania shaderów.

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

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

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

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

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

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

Bitmapy - format i zastosowanie. Podstawowy format plików bitmapowych, dogodność zastosowania bitmap w prostych animacjach 2D.

Techniki wizualizacji. Ćwiczenie 4. Podstawowe algorytmy przetwarzania obrazów

Stereoskopia. Implementacja w XNA 4.0

Analiza obrazów - sprawozdanie nr 2

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

GRK 5. dr Wojciech Palubicki

GRK 4. dr Wojciech Palubicki

Rysowanie punktów na powierzchni graficznej

Grafika Komputerowa. Wykład 8. Przygotowanie do egzaminu. mgr inż. Michał Chwesiuk 1/32

Praca z wynikami w ALOORA

Efekty dodatkowe w rasteryzacji

SYLABUS ECCC MOD U Ł : C S M2 GR A F I K A KO M P U T E R O W A PO Z I O M: PO D S T A W O W Y (A)

HDR. Obrazy o rozszerzonym zakresie dynamiki

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

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

Potok graficzny i shadery. Hubert Rutkowski

Adobe Photoshop Dodatek do lab4 J.Wiślicki, A.Romanowski;

Synteza i obróbka obrazu HDR. Obrazy o rozszerzonym zakresie dynamiki

Larrabee GPGPU. Zastosowanie, wydajność i porównanie z innymi układami

Podstawy OpenCL część 2

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Implementacja filtru Canny ego

Program Capture NX 2. Informacja o nowym produkcie Data światowej premiery: 3 czerwca 2008 r.

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




Kamil Nowakowski 2011

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

SVAN 945A INSTRUKCJA OBSŁUGI. SVANTEK Sp. z o. o.

Teksturowanie (ang. texture mapping)

glwindowpos2d void DrawString (GLint x, GLint y, char *string) { glwindowpos2i (x,y); int len = strlen (string); for (int i = 0; i < len; i++)

Przetwarzanie obrazów rastrowych macierzą konwolucji

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

Przetwarzanie obrazów wykład 4

BSP_LCD_Clear(LCD_COLOR_WHITE); BSP_LCD_SetFont(&Font16); BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

OpenGL oświetlenie i tekstury. OpenGL oświetlenie. Bogdan Kreczmer.

Grafika komputerowa i wizualizacja

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

GRK 5. dr Wojciech Palubicki

Technologie Informacyjne

EKSPLORACJA ZASOBÓW INTERNETU LABORATORIUM VIII WYSZUKIWANIE OBRAZÓW

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

POPRAWIANIE JAKOŚCI OBRAZU W DZIEDZINIE PRZESTRZENNEJ (spatial image enhancement)

Technika mikroprocesorowa. Konsola do gier

Grafika komputerowa Tekstury

1 Układy równań liniowych

a. Czym różni się sposób liczenia odbicia zwierciadlanego zaproponowany przez Phonga od zaproponowanego przez Blinna?

Efekt starych zdjęć. Wstęp. 1. Zamek na Wawelu. Dorota Pater, Krzysztof Pirowski

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Przetwarzanie obrazu

Cel - Shading. Krzysztof Balonek, Sławomir Gozdur. 6 lipca WFiIS, Informatyka Stosowana, IV rok

Rozpoznawanie Twarzy i Systemy Biometryczne

SLT-A33/SLT-A55/SLT-A55V

10.Architekturyspecjalizowane

Parametryzacja obrazu na potrzeby algorytmów decyzyjnych

Moc płynąca z kart graficznych

Programowanie telefonów z Windows Phone 7, cz. 3

GIMP. Ćwiczenie nr 6 efekty i filtry. Instrukcja. dla Gimnazjum 36 - Ryszard Rogacz Strona 18

Spośród licznych filtrów nieliniowych najlepszymi właściwościami odznacza się filtr medianowy prosty i skuteczny.

42" TFT LCD MONITOR VMC-42LED

Kiedy otworzysz Lightroom po raz pierwszy, zobaczysz mniej więcej pusty ekran:

TECHNIKI MULTIMEDIALNE LABORATORIUM GIMP: Tworzenie animacji

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

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

Wykład 5. Rendering (2) Geometria

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

Animacje oraz ciekawe efekty dostępne w programie GIMP

Wykład 4. Rendering (1) Informacje podstawowe

Sphere tracing: integracja z klasycznymi metodami symulacji i renderingu

GUI - projektowanie interfejsów

SYMULACJA OPADÓW ATMOSFERYCZNYCH I POKRYWY ŚNIEŻNEJ W GENERATORZE OBRAZU JASKIER IG

Podstawowe szkolenie z Photoshopa

Analiza obrazu. wykład 4. Marek Jan Kasprowicz Uniwersytet Rolniczy 2009

Monitory LCD (ang. Liquid Crystal Display) (1)

OpenGL - tekstury Mapowanie tekstur

CONFidence 13/05/2006. Jarosław Sajko, PCSS

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

Gimp. Program do grafiki rastrowej odpowiednik płatnego programu Photoshop

1. Pobieranie i instalacja FotoSendera

BenQ MW811ST. pawel100g, 16 listopad 2010, 14:22

Transkrypt:

Title Subtitle

Wstęp Wykorzystywanie możliwości GPU Głównie gry Także nowe wersje programów graficznych, video (Adobe Photoshop, Ahead Nero) Będę głównie opowiadał o zastosowaniach w grach (chociaż można niektóre efekty przenieść na np. post-processing filmu)

Różne rodzaje efektów Korekcja koloru Proste filtry Rozbudowane, wieloprzejściowe filtry Efekty działające nie tylko na buforze koloru (z-buffer, bufor normalnych, etc.)

Prosty przykład

Prosty przykład <texture type="image" id="input_image" options="pict0100.jpg"/> <texture type="image" id="noise" options="noisef.png"/> <pass id="image_out" shader="post.fx" entrypoint="passthrough"> <bind semantic="sourcecolor" id="input_image"/> <target id="color_target"/> </pass> <pass id="correction" shader="post.fx" entrypoint="contrast"> <bind semantic="sourcecolor" id="scene_color"/> <target id="color_target"/> <parameter id="contrvalue" semantic="contrast" type="float" value="0.9"/> </pass> <pass id="sepia" shader="post.fx" entrypoint="sepiamode"> <bind semantic="sourcecolor" id="scene_color"/> <target id="color_target"/> </pass> <pass id="age" shader="post.fx" entrypoint="addnoise"> <bind semantic="sourcecolor" id="scene_color"/> <bind semantic="noisetexture" id="noise"/> <target id="color_target"/> </pass> <pass id="vignette" shader="post.fx" entrypoint="vignetting"> <bind semantic="sourcecolor" id="scene_color"/> <target id="color_target"/> </pass>

Implementacja Potrzebujemy odpowiednie bufory obrazu (Render Targets) Jeśli mamy więcej przejść, będziemy musieli je wymieniać ('ping-pong') Wyświetlamy dwa trójkąty pokrywające ekran Prosty VS wystarczy jeden, zmienia się tylko PS

Przykładowy VS struct VSOut { float4 hpos : SV_POSITION; float2 coords : TEXCOORD0; ; struct VSIn { uint vertexid : SV_VertexID; ; VSOut QuadVS(VSIn input ) { uint vid = input.vertexid; VSOut OUT = (VSOut) 0; if(vid ==0) { OUT.hPos = float4(-1.0f,-1.0f,0.0f,1.0f); OUT.coords = float2(0.0f,1.0f); else if(vid ==1) { OUT.hPos = float4(1.0f,-1.0f,0.0f,1.0f); OUT.coords = float2(1.0f,1.0f); else if(vid ==3) { OUT.hPos = float4(1.0f,1.0f,0.0f,1.0f); OUT.coords = float2(1.0f,0.0f); else if(vid==2){ OUT.hPos = float4(-1.0f,1.0f,0.0f,1.0f); OUT.coords = float2(0.0f,0.0f); return OUT;

Najprostsze filtry Passthrough Texture2D SourceColor; SamplerState SceneSampler = sampler_state { AddressU = Clamp; AddressV = Clamp; Filter = MIN_MAG_MIP_POINT; ; float4 PassThrough(in float2 coords :TEXCOORD0) : SV_Target { return SourceColor.Sample(SceneSampler,coords); Desaturacja float3 ToLum = {0.2125, 0.7154, 0.0721; float4 BnW(in float2 coords :TEXCOORD0) : SV_Target { return float4(dot(tolum,sourcecolor.sample(scenesampler,coords).rgb).rrr,1.0f); Zmiana nasycenia float Saturation = -1.5f; float4 AdjustSaturation(in float2 coords :TEXCOORD0) : SV_Target { float3 Color = SourceColor.Sample(SceneSampler,coords).rgb; float bnw = dot(tolum,color); float3 final = lerp(color,bnw.rrr,saturation); return float4(final,1.0f);

Najprostsze filtry Kontrast float Contrast = 1.0f; float4 AdjustContrast(float2 coords :TEXCOORD0) : SV_Target { float3 Color = SourceColor.Sample(SceneSampler,coords).rgb; float3 final = Color; final-=contrast * (Color - 1.0f) * Color *(Color - 0.5f); return float4(final,1.0f); Sepia float3 IntensityConverter1953 ={0.299, 0.587, 0.114; float3 sepiaconvert ={0.191, -0.054,-0.221; float4 Sepia(in float2 coords :TEXCOORD0) : SV_Target { float3 Color = SourceColor.Sample(SceneSampler,coords).rgb; float bnw = dot(intensityconverter1953,color); float3 final = bnw+sepiaconvert; return float4(final,1.0f);

Proste filtry Za pomocą najprostszych operacji na kolorach możemy uzyskiwać wszelkiego rodzaju efekty NightMode float4 NightColor(in float2 coords :TEXCOORD0) : SV_Target { float3 Color = SourceColor.Sample(SceneSampler,coords).rgb; float3 final = Color*float3(0.26f,0.30f,0.4f);//lerp(Color,DestColor,Factor); return float4(final,1.0f);

Proste filtry Vignette float4 Vignette(in float2 coords : TEXCOORD0) : SV_Target { float3 Color =SourceColor.Sample(SceneSampler,coords).rgb; float3 final = Color; final *= saturate(1.05f - (dot(coords.xy-0.5f,coords.xy-0.5f)/0.8f)); return float4(final,1.0f); Szum Texture2D NoiseTexture; SamplerState NoiseSampler= sampler_state { AddressU = Wrap; AddressV =Wrap; Filter = MIN_MAG_MIP_LINEAR; ; float4 Noise(in float2 coords :TEXCOORD0) : COLOR { float NoiseHigh = NoiseTexture.Sample(SceneSampler,coords).r; NoiseHigh = lerp(0.5f,1.0f,noisehigh); float NoiseLow = 1.0f-NoiseTexture.Sample(SceneSampler,coords*0.4f).r; NoiseLow*=0.1f; float3 SceneColor = SourceColor.Sample(SceneSampler,coords).rgb; float3 final = NoiseHigh.rrr*SceneColor + NoiseLow; return float4(final,1.0f);

Proste efekty - animacja Przekształcenie obrazu float Timer : TIME ; float4 Drunken(float2 coords) { float3 final = 0.0f; float2 offset = sin(coords.x*8.0f+timer*0.4f)*10.0f*texelsize; final+=sourcecolor.sample(scenesampler,coords+offset).rgb*0.6f; offset = sin(coords.y*5.0f+timer*0.3f)*10.0f*texelsize; final+=sourcecolor.sample(scenesampler,coords+offset).rgb*0.4f; return float4(final,1.0f); Przejścia kolorów, zmiana intensywności efektów efekty zależne od stanu gry Także: termowizja, nightvision, 'zakrwawienie ekranu', etc.

Złożone efekty Podstawą wielu efektów jest rozmycie obrazu Należy je zatem wykonywać bardzo szybko Wykorzystujemy wspomaganie sprzętowe Przed rozmyciem zmniejszamy obraz (2x czasami 4x) Próbkując później teksturę (przy filtrowaniu liniowym) uzyskujemy dodatkowe rozmycie Wykonujemy też 4x (16x) mniej operacji przy rozmywaniu

Rozmywanie Wykonujemy dwa przejścia pionowe i poziome Przy rozmyciu Gaussa musimy wyliczyć odpowiednie współczynniki Próbkujemy na granicach pikseli GPU pobierze oba i przefiltruje 'za darmo' dwa razy więcej próbek

Rozmywanie - najprostsze <rendertarget id="downsampled" size="half"/> <rendertarget id="downsampled2" size="half"/> <pass id="downsample" shader="post.fx" entrypoint="downsample"> <bind semantic="sourcecolor" id="scene_color"/> <target id="downsampled"/> </pass> <pass id="blurh" shader="post.fx" entrypoint="blurh"> <bind semantic="sourcecolor" id="downsampled"/> <target id="downsampled2"/> </pass> <pass id="blurv" shader="post.fx" entrypoint="blurv"> <bind semantic="sourcecolor" id="downsampled2"/> <target id="downsampled"/> </pass> float4 Downsample(in float2 coords :TEXCOORD0) : SV_Target { float3 final = 0.0f; float2 offset = TexelSize*1.0f; final+=sourcecolor.sample(scenesampler,coords+float2(1.0f,1.0f)*offset).rgb; final+=sourcecolor.sample(scenesampler,coords+float2(-1.0f,1.0f)*offset).rgb; final+=sourcecolor.sample(scenesampler,coords+float2(1.0f,-1.0f)*offset).rgb; final+=sourcecolor.sample(scenesampler,coords+float2(-1.0f,-1.0f)*offset).rgb; final/=4.0f; return float4(final,1.0f); float4 Blur(float2 coords,float2 orientation) { float3 final = 0.0f; float2 offset = TexelSize; for(int i=-2;i<=2;i++) { final+=sourcecolor.sample(scenesampler,coords+i*orientation*offset).rgb; final/=5.0f; return float4(final,1.0f); float4 BlurH_(in float2 coords :TEXCOORD0) : SV_Target { return Blur(coords,float2(1.0f,0.0f));

Depth of Field

HDR Rendering

Wykrywanie krawędzi

Screen Space Ambient Occlusion

Anti-aliasing Kiedyś: Dodatkowe RT nie mogły korzystać z AA Renderowanie do buffora obrazu, potem Idirect3DDevice9::StretchRect/glCopyTexImage DX10: Większość formatów wspiera AA (oraz filtrowanie) PS może pobierać pojedyncze próbki Jest to jednak zbyt kosztowne (kilkakrotnie więcej obliczeń) Musimy zrobić to samo co wcześniej, tylko lepiej na GPU Resolve Your Resolves Ważna jest odpowiednia kolejność! np. mapowanie tonów powinno działać na wszystkich próbkach

Tips & tricks Wiele obliczeń można przenieść do VS Wartości będą interpolowane dla wyższej jakości należy wyświetlać więcej niż dwa trójkąty

Diagram Haupttitel 10 9 8 7 6 5 4 3 2 1 0 Spalte 1 Spalte 2 Spalte 3 Spalte 4 Zeile 1 Zeile 2 Zeile 3