Architektury Deferred Michał Drobot Technical Art Director Reality Pump.

Slides:



Advertisements
Podobne prezentacje
ALLEGRO PIERWSZA GRA: WYŚCIG
Advertisements

C++ w Objectivity Marcin Michalak s1744. Pomocne pakiety: Data Definition Language (DDL). Standard Template Library (STL). Active Schema.
Pracownia Gier w OpenGL
Testowanie oprogramowania metodą badania pokrycia kodu
Exact Software Poland Sp z o.o. Adam Sasin AXA TUiR
REKURENCJA.
Michał Drobot Technical Art Director Reality Pump
Light pre-pass renderer
PROPOZYCJE ZAPISU Autorzy: Uczniowie należący do Samorządu Szkolnego.
Przygotował: Adrian Walkowiak
Czyli jak zrobić prezentację komputerową?
Małgorzata Pietroczuk
FUNKCJA L I N I O W A Autorzy: Jolanta Kaczka Magdalena Wierdak
ZESPÓŁ SZKÓŁ OGÓLNOKSZTAŁCACYCH NR 11 W SOSNOWCU PODSUMOWANIE ANKIETY DLA RODZICÓW.
III. Proste zagadnienia kwantowe
Pomiar natężenia przepływu wody przy pomocy...linijki dr inż. Leszek Książek Katedra Inżynierii Wodnej
Portal Systemu Jakości Kształcenia Jak się zalogować? Instrukcja dla pracowników UMCS Przygotowanie: Urszula Wojtczak, Zespół Obsługi Systemu Jakości Kształcenia.
Kolejna gra mająca na celu pokazanie świata kierowców ścigających się w nielegalnych ulicznych wyścigach podrasowanymi do granic możliwości samochodami.
Autorzy: Agnieszka Kuraj Natalia Gałuszka Kl. III c.
Podstawowe jednostki informacji, co to jest bit i bajt?
POPYT I PODAŻ.
Młodzież a wolontariat.. Opracowanie: Judyta Szłapa Urszula Buczek.
Prezentacja z przedmiotu „systemy wizyjne”
Podstawy programowania
Jak przygotować prezentację multimedialną?
Przegląd podstawowych pojęć
Nazwa szkoły: Gimnazjum nr 12 im.Sybiraków ID grupy: 96/88_MP_G1 Kompetencja: Matematyczno-przyrodnicza Temat projektowy: Małe pstryk Semestr/rok szkolny:
The Grumpy Test If at least one of these pictures does not make you smile, then you are grumpy and need to go back to bed. Test na ponuraka Jak nie usmiechniesz.
Uwaga !!! Uczniowie SP 32 w Toruniu ! Zapraszamy was i Wasze rodziny do wzięcia udziału w Festynie Zdrowia, który odbędzie się 31 maja 2013 roku podczas.
ALGORYTM.
Materiał edukacyjny wytworzony w ramach projektu „Scholaris - portal wiedzy dla nauczycieli” współfinansowanego przez Unię Europejską w ramach Europejskiego.
Podstawy licencjonowania Exchange, SharePoint oraz Lync.
Wykonała Sylwia Kozber
Pęd Wielkością charakteryzującą ruch ciała jest prędkość. Zmiana ruchu, tzn. zmiana prędkości, wymaga pokonania oporu bezwładności. Miarą bezwładności.
1 Oddziaływanie grawitacyjne. 2 Eliminując efekty związane z oporem powietrza możemy stwierdzić, że wszystkie ciała i lekkie i ciężkie spadają z tym samym.
Projektowanie stanowiska pracy w pozycji siedzącej
Powrót do sukcesu Analiza przypadku Princessy (rola badań marketingowych podczas rozwoju produktu: ) Powrót do sukcesu Analiza przypadku Princessy.
Ruch jednostajny po okręgu Ciało porusza się ruchem jednostajnym oraz torem tego ruchu jest okrąg.
GPU Michał Drobot Technical Art Director Reality Pump.
Gamma / Linear Light Pipeline Michał Drobot Technical Art Director Reality Pump.
Dual Paraboloid Mapping Michał Drobot Technical Art Director Reality Pump.
Optimization Michał Drobot Technical Art Director Reality Pump.
Optyka Widmo Światła Białego Dyfrakcja i Interferencja
Polskie cyfrowe miasto ? Marzenia a rzeczywistość. Maxymilian Bylicki - Zakopane, Polskie cyfrowe miasto - marzenia a rzeczywistość Maxymilian.
Przygotowali : Szymon, Filip i Piotrek
Planowanie trasy.
J AK ZACZĄĆ PRACĘ Z ?. przed rejestracją Upewnij się, że posiadasz: aktywne konto zainstalowaną przeglądarkę Internet Explorer indywidualny studencki.
Warsztaty C# Część 2 Grzegorz Piotrowski Grupa.NET PO
Warsztaty C# Część 3 Grzegorz Piotrowski Grupa.NET PO
SKALA MAPY Skala – stosunek odległości na mapie do odpowiadającej jej odległości w terenie. Skala najczęściej wyrażona jest w postaci ułamka 1:S, np. 1:10.
Realistyczny rendering dla potrzeb gier komputerowych
PolGIS jako nowoczesny system do paszportyzacji sieci
Budowa programu #include /*instrukcje preprocesora */ #include int main(void) { /*podstawowa funkcja programu */ int a=1; /*deklaracja i inicjalizacja.
RÓŻNE SPOSOBY ROZWIĄZANIA TEGO SAMEGO ZADANIA NA RÓŻNYCH ETAPACH EDUKACYJNYCH.
Szymon Murawski, 4 rok nanotechnologii1 Misja kosmiczna GAIA Czyli cały wszechświat w twoim domu.
Temat 5: Elementy meta.
Fizyka ruchu drogowego
PROCEDURA LOGOWANIA SIĘ DO PANELU Ogólnopolski Program Partnerski dla Nauczycieli TWÓRCZY NAUCZYCIEL – TWÓRCZA EDUKACJA 1. Kliknij na wybraną zakładkę
WoF PLATFORMA KOMUNIKACJI. WoF jest platformą komunikacji systemem wspomagającym obieg informacji oraz zarządzanie w firmie Zapewnia elektroniczny obieg.
Warsztaty użytkowników programu PLANS – Karwia06 Język makropoleceń JMP programu PLANS Część I mgr inż. Tomasz Zdun.
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
Akcelerator z Systemem Detekcyjnym do Radiograficznych Badań Nieniszczących w Czasie Rzeczywistym Akcelerator z Systemem Detekcyjnym do Radiograficznych.
Magic Janusz ROŻEJ Komtech Sp. z o.o.
w/g Grzegorz Gadomskiego
SERCE SPORTOWCA Zespół objawów fizjologicznej, odwracalnej adaptacji u trenujących sporty wytrzymałościowe.
Analiza procesów metodą siatki jakości, badanie satysfakcji klienta, doskonalenie z wykorzystaniem analizy ryzyka 24 kwietnia IV Konferencja Analizy.
1 Technika cyfrowa Systemy zapisu liczb wykonał Andrzej Poczopko.
Wojciech Toman. Dotychczasowe podejście do oświetlenia Idea deferred shadingu Typowe problemy wraz z propozycjami rozwiązania Optymalizacja wydajności.
BVMS 3.0 Moduł 13: Opcje zapisu iSCSI
Security & Communications Training Academy | Date 2011 © Robert Bosch GmbH reserves all rights even in the event of industrial property rights. We reserve.
Zapis prezentacji:

Architektury Deferred Michał Drobot Technical Art Director Reality Pump

Deferred ShadingDeferred Shading Light Pre-PassLight Pre-Pass Plan wykładu

Dla każdego obiektuDla każdego obiektu Wyrenderuj parametry powierzchni do G-BufferaWyrenderuj parametry powierzchni do G-Buffera Dla każdego światła i każdego oświetlanego pixelaDla każdego światła i każdego oświetlanego pixela Użyj G-Buffera do obliczeń światłaUżyj G-Buffera do obliczeń światła Dodaj wynik do framebufferaDodaj wynik do framebuffera Proste shaderyProste shadery Dobrze skalowalne ze wzrostem ilości pixeli jak i światelDobrze skalowalne ze wzrostem ilości pixeli jak i światel Problematyczna obsługa przeźroczystościProblematyczna obsługa przeźroczystości Łatwa integracja cieniŁatwa integracja cieni Złożoność głębi dla świateł O(1)Złożoność głębi dla świateł O(1) Wiele małych świateł = jedno dużeWiele małych świateł = jedno duże Deferred Rendering

Light = Ambient + Sum(N.L * Att * LightD + N.L * (N.H)^n * MatSpecD * N.L *Att)Light = Ambient + Sum(N.L * Att * LightD + N.L * (N.H)^n * MatSpecD * N.L *Att) BRDF(Light) OR BRDF(Diffuse,Specular)BRDF(Light) OR BRDF(Diffuse,Specular) Do wyliczenia równania światła potrzebujemyDo wyliczenia równania światła potrzebujemy NormalNormal PozycjaPozycja AtrybutyAtrybuty Specular Intensity, Specular Glossines (n)Specular Intensity, Specular Glossines (n) Deferred Rendering

BRDF(Diffuse, Specular)BRDF(Diffuse, Specular) Do obliczenia pełnego BRDF potrzeba dodatkowoDo obliczenia pełnego BRDF potrzeba dodatkowo Material DiffuseMaterial Diffuse Material AttributesMaterial Attributes Typ materiałuTyp materiału Parametry materiału niezależne od światłaParametry materiału niezależne od światła Deferred Rendering

Deferred Shading Depth Buffer Light Buffer Forward Rendering Wyłączone pisanie Depth Specular / Motion Vec Normals Albedo / Shadow Sortowanie Back – To - Front Obiekty nieprzeźroczystePrzeźroczyste obiekty Deferred Lighting

Zapisujemy pełen G-Buffer dla pełnego wyliczenia BRDFZapisujemy pełen G-Buffer dla pełnego wyliczenia BRDF Podczas jednego przebiegu geometriiPodczas jednego przebiegu geometrii Każde światło renderujemy z osobna jakoKażde światło renderujemy z osobna jako Quad o wymiarach policzonych w screen spaceQuad o wymiarach policzonych w screen space Kule – point lightKule – point light Stożek – spot lightStożek – spot light Podczas wyliczeń światła tworzymy light bufferPodczas wyliczeń światła tworzymy light buffer Ostatecznie wyliczamy pełen BRDF podczas Deferred Lighting PassOstatecznie wyliczamy pełen BRDF podczas Deferred Lighting Pass Integruje materiały z wynikami light bufferaIntegruje materiały z wynikami light buffera Deferred Shading

Rozbijamy warstwę obliczeń geometrii i światła na dwa osobne przebiegiRozbijamy warstwę obliczeń geometrii i światła na dwa osobne przebiegi Przebieg geometrii generuje parametry w pełni opisujące materiał jak i jego interakcje ze światłemPrzebieg geometrii generuje parametry w pełni opisujące materiał jak i jego interakcje ze światłem Przykładowy G-Buffer (Killzone 2)Przykładowy G-Buffer (Killzone 2) Deferred Shading

Light BufferLight Buffer Preferowany format HDRPreferowany format HDR RGBA16FRGBA16F RGB – Light Diffuse A – Specular IntensityRGB – Light Diffuse A – Specular Intensity Dla każdego światła (Light Accumulation)Dla każdego światła (Light Accumulation) W trybie ADD BlendW trybie ADD Blend Renderujemy w CS Convex Hull reprezentujący wymiary światła w CSRenderujemy w CS Convex Hull reprezentujący wymiary światła w CS QuadQuad SphereSphere ConeCone Dodatkowe przebiegi dla świateł kierunkowych (słońce) oraz Ambient LightDodatkowe przebiegi dla świateł kierunkowych (słońce) oraz Ambient Light Deferred Rendering

Deffered ShadingDeffered Shading Przebieg czytaPrzebieg czyta Light BufferLight Buffer Bufory atrybutów materiałów (minimalnie Diffuse Color)Bufory atrybutów materiałów (minimalnie Diffuse Color) Wykonuje obliczenia BRDFWykonuje obliczenia BRDF Wspólny BRDF dla wszystkich pixeliWspólny BRDF dla wszystkich pixeli Uwzględnione możliwe parametry materiałuUwzględnione możliwe parametry materiału Sterowany parametrami (parametr = kanał G-Buffera)Sterowany parametrami (parametr = kanał G-Buffera) Mała customizacja oraz brak skalowalności na ilość parametrów i różne materiałyMała customizacja oraz brak skalowalności na ilość parametrów i różne materiały Wiele przebiegów kilku BRDF-ówWiele przebiegów kilku BRDF-ów Wolne ze względu na ilość przebiegówWolne ze względu na ilość przebiegów Korzystanie z material IDKorzystanie z material ID Seria IF-ów decydująca o wykonaniu BRDFSeria IF-ów decydująca o wykonaniu BRDF Kosztowna dla ALUKosztowna dla ALU Korzystanie z zapisanych BRDF-ów wraz z indexem materiałuKorzystanie z zapisanych BRDF-ów wraz z indexem materiału Textura 3D – (U,V,W) = (N.L, H.L, MaterialID)Textura 3D – (U,V,W) = (N.L, H.L, MaterialID) Wolne w odczycie Tex3D, odczyty zależne, mało funkcjonalne w trakcie produkcjiWolne w odczycie Tex3D, odczyty zależne, mało funkcjonalne w trakcie produkcji Deferred Rendering

Light Pre PassLight Pre Pass Przygotowanie szybkiego light bufferaPrzygotowanie szybkiego light buffera Elastyczny model materiałów i oświetleniaElastyczny model materiałów i oświetlenia Zmniejszenie obliczeń per-pixel kosztem per- vertexZmniejszenie obliczeń per-pixel kosztem per- vertex Light Pre Pass

Light Pre PassLight Pre Pass Przygotowanie szybkiego light bufferaPrzygotowanie szybkiego light buffera Elastyczny model materiałów i oświetleniaElastyczny model materiałów i oświetlenia Zmniejszenie obliczeń per-pixel kosztem per- vertexZmniejszenie obliczeń per-pixel kosztem per- vertex Light Pre Pass

LPP Depth Buffer Light Buffer Forward Rendering Normal Sortowanie Back – To - Front Frame Buffer Opaque Geometry Sortowanie Front – to - back Transparent

Geometry PassGeometry Pass Wypełniamy chudy g-bufferWypełniamy chudy g-buffer Normal + DepthNormal + Depth Wypełniamy Z-BufferWypełniamy Z-Buffer Lighting PassLighting Pass Wypełniamy light buffer informacjami o oświetleniuWypełniamy light buffer informacjami o oświetleniu Light Pre Pass

Final PassFinal Pass Renderujemy w pełni wszystkie obiekty z uwzględnieniem indywidualnych materiałówRenderujemy w pełni wszystkie obiekty z uwzględnieniem indywidualnych materiałów Korzystamy z wyliczonych / zrekonstruowanych informacji o oświetleniu z light bufferaKorzystamy z wyliczonych / zrekonstruowanych informacji o oświetleniu z light buffera Renderujemy front-to-backRenderujemy front-to-back Korzystamy z Early-Z (Z-buffer już wypełniony)Korzystamy z Early-Z (Z-buffer już wypełniony) Light Pre Pass

LPP Buffer LayoutLPP Buffer Layout Zależy od przyjętego modelu oświetleniaZależy od przyjętego modelu oświetlenia Normal + Depth dla Blinn PhongNormal + Depth dla Blinn Phong Normal + Depth + Material Params dla zaawansowanychNormal + Depth + Material Params dla zaawansowanych Dodatkowe informacjeDodatkowe informacje Motion VectorsMotion Vectors Chudy bufferChudy buffer Zajmuje mniej miejsca niż pełen G-BufferZajmuje mniej miejsca niż pełen G-Buffer Szybki geometry passSzybki geometry pass Szybkie liczenie oświetleniaSzybkie liczenie oświetlenia Light Pre Pass

LPP Buffer LayoutLPP Buffer Layout 8:8:8:88:8:8:8 Normal (8:8) + Depth I16 (8:8)Normal (8:8) + Depth I16 (8:8) 2 x 8:8:8:82 x 8:8:8:8 Normal (8+8 : 8+8)Normal (8+8 : 8+8) Depth I32 / I24 + Material ParamsDepth I32 / I24 + Material Params 2 x 8:8:8:82 x 8:8:8:8 Normal (8:8) + Motion Vectors (8:8)Normal (8:8) + Motion Vectors (8:8) Depth I32 / I24 + Material ParamsDepth I32 / I24 + Material Params Light Pre Pass

LPP Light Buffer – Blinn PhongLPP Light Buffer – Blinn Phong LPP Blinn Phong Channel 1 : Sum(N.L * D.Red * Att) Channel 2 : Sum(N.L * D.Green * Att) Channel 3 : Sum(N.L * D.Blue * Att) Channel 4 : Sum(N.L * (N.H)^n * Att)

I = Ambient + (LB123 * Diffuse + LB4 * SpecColor * SpecInt) LPP Blinn Phong Brak koloru połyskuBrak koloru połysku Zapis do poszerzonego light bufferaZapis do poszerzonego light buffera rekonstrukcjarekonstrukcja Brak obsługi połyskliwości materiałuBrak obsługi połyskliwości materiału Trzeb zrekonstruować / zapisaćTrzeb zrekonstruować / zapisać Potrzeba – Sum(N.L * Attenuation)Potrzeba – Sum(N.L * Attenuation)

Specular Term ColorSpecular Term Color LPP Blinn Phong

Specular Term ColorSpecular Term Color Kolor odzyskany z chromatyczności diffuseaKolor odzyskany z chromatyczności diffusea W przypadku pełnego zapisu specularaW przypadku pełnego zapisu speculara Light buffer – 2 x 7e3 7e3 7e3 itp…Light buffer – 2 x 7e3 7e3 7e3 itp… LPP Blinn Phong

Specular Term - GlossinesSpecular Term - Glossines (N.H^n)^mn * N.L * Att(N.H^n)^mn * N.L * Att Mn – połysk materiałuMn – połysk materiału Poprawne rozwiązanie – włączenie mn do równania światłaPoprawne rozwiązanie – włączenie mn do równania światła Wymaga dodatkowego miejsca w G-BufferzeWymaga dodatkowego miejsca w G-Bufferze W przypadku niektórych materiałów znacząco zwiększa koszt stworzenia G-BufferaW przypadku niektórych materiałów znacząco zwiększa koszt stworzenia G-Buffera Możliwe aproksymacjeMożliwe aproksymacje [Sum(N.H^n)]^mn * Sum(N.L * Att)[Sum(N.H^n)]^mn * Sum(N.L * Att) LPP Blinn Phong

PotrzebujemyPotrzebujemy Sum(N.L * Att)Sum(N.L * Att) Sum(N.H)^n = Sum(N.H)^n = Sum((N.H)^n * N.L * Att) / Sum(N.L * Att) LPP Blinn Phong

Specular Term - - GlossinesSpecular Term - - Glossines Komponent Sum(N.L * Att) możemy przechowywać w dodatkowym kanale Light BufferaKomponent Sum(N.L * Att) możemy przechowywać w dodatkowym kanale Light Buffera Możemy go aproksymować przez wyliczenia luminancji diffuseMożemy go aproksymować przez wyliczenia luminancji diffuse LPP Blinn Phong lum(Sum(N.L * Att * D_RGB)) ~ Sum(N.L * Att)

Specular TermSpecular Term Rekonstruujemy kolor oraz współczynniku połyskuRekonstruujemy kolor oraz współczynniku połysku LPP Blinn Phong lum(Sum(N.L * Att * D_RGB)) ~ Sum(N.L * Att) Approx Spec = (Chromaticity *)^mn * Sum(N.L* Att) (Chromaticity * Sum(N.H)^n)^mn * Sum(N.L* Att) Sum(N.H)^n = Sum((N.H)^n * N.L * Att) / Sum(N.L * Att)

Przykładowe równanie oświetlenia dla modeluPrzykładowe równanie oświetlenia dla modelu D_int oraz ApproxSpecular rekonstruowane z light bufferaD_int oraz ApproxSpecular rekonstruowane z light buffera LPP Blinn Phong

Przechowywanie normaliPrzechowywanie normali IdealnieIdealnie XYZ = 16:16:16 w View / World SpaceXYZ = 16:16:16 w View / World Space RealnieRealnie Ograniczona ilość miejscaOgraniczona ilość miejsca Maksymalnie 2x16BMaksymalnie 2x16B Killzone 2 : XY – 16:16 – Z odtwarzaneKillzone 2 : XY – 16:16 – Z odtwarzane Sensowne jedynie przy bardzo wysokiej jakości normal map obiektówSensowne jedynie przy bardzo wysokiej jakości normal map obiektów Standardowo chcemy się zmieścić w 8:8Standardowo chcemy się zmieścić w 8:8 LPP - Implementacja

Kompresja normalnych do 8:8Kompresja normalnych do 8:8 Normalne zapisujemy w View-SpaceNormalne zapisujemy w View-Space Lepsza dokładność od World SpaceLepsza dokładność od World Space 10:10:10 w WS sensowne10:10:10 w WS sensowne W kilku przypadkach znak Z może być ujemnyW kilku przypadkach znak Z może być ujemny Może się tak zdarzyć w wyniku korekcji perspektywyMoże się tak zdarzyć w wyniku korekcji perspektywy LPP - Implementacja

Przypadek bazowy 8:8:8Przypadek bazowy 8:8:8 LPP - Implementacja

Przypadek bazowy 8:8:8Przypadek bazowy 8:8:8 LPP - Implementacja half4 encode (half3 n) { return half4(n.xyz* ,0); } half3 decode (half4 enc) { return enc.xyz*2-1; }

8:8 – rekonstrukcja Z8:8 – rekonstrukcja Z LPP - Implementacja

8:8 – rekonstrukcja Z8:8 – rekonstrukcja Z LPP - Implementacja half4 encode (half3 n) { return half4(n.xy* ,0,0); } half3 decode (half2 enc) { half3 n; n.xy = enc*2-1; n.z = sqrt(1-dot(n.xy, n.xy)); return n; }

8:8 Sphere Map8:8 Sphere Map LPP - Implementacja

8:8 Sphere Map8:8 Sphere Map LPP - Implementacja half2 encode (half3 n) { half2 enc = normalize(n.xy) * (sqrt(-n.z* )); enc = enc* ; return enc; } half3 decode (half4 enc) { half4 nn = enc*half4(2,2,0,0) + half4(-1,-1,1,-1); half l = dot(nn.xyz,-nn.xyw); nn.z = l; nn.xy *= sqrt(l); return nn.xyz * 2 + half3(0,0,-1); }

Sphere Map - macroSphere Map - macro LPP - Implementacja half2 encode (half3 n) { Return normalize(N.xy)*sqrt(N.z* ) } half3 decode (half4 enc) { Float3 N; N.z=length2(enc.xy)*2-1 N.xy=normalize(enc.xy)*sqrt(1-N.z*N.z) }

Odzyskiwanie pozycji pixelaOdzyskiwanie pozycji pixela Zakładamy że mamy dostęp do głębi ekranuZakładamy że mamy dostęp do głębi ekranu Zapisana ręcznieZapisana ręcznie Odtworzona z Z-BuforaOdtworzona z Z-Bufora Odczytywana z Z-BuforaOdczytywana z Z-Bufora LPP - Implementacja

ZnamyZnamy Położenie pixela na ekranie – projection spacePołożenie pixela na ekranie – projection space VPOSVPOS Koordynaty tekstury ekranuKoordynaty tekstury ekranu Głębie pixelaGłębie pixela LPP - Implementacja

Dla wartości Z post projectionDla wartości Z post projection Z/WZ/W Jak Z-BuforJak Z-Bufor Wspierane sprzętowo – działa z Z-BuforemWspierane sprzętowo – działa z Z-Buforem Nie-liniowy rozkład głebiNie-liniowy rozkład głebi LPP - Implementacja

// Depth pass vertex shader output.vPositionCS = mul(input.vPositionOS, g_matWorldViewProj); output.vDepthCS.xy = output.vPositionCS.zw; //Depth pass pixel shader //Zapisuje zinterpolowane Z/W – jak Z-bufor return input.vDepthCS.x / input.vDepthVS.y; LPP - Implementacja

float3 VSPositionFromDepth(float2 vTexCoord) { { // Pobierz wartość głębi pixela // Pobierz wartość głębi pixela float z = tex2D(DepthSampler, vTexCoord); float z = tex2D(DepthSampler, vTexCoord); // Wylicz x/w oraz y/w z przestrzeni viewportu // Wylicz x/w oraz y/w z przestrzeni viewportu float x = vTexCoord.x * 2 - 1; float x = vTexCoord.x * 2 - 1; float y = (1 - vTexCoord.y) * 2 - 1; float y = (1 - vTexCoord.y) * 2 - 1; float4 vProjectedPos = float4(x, y, z, 1.0f); float4 vProjectedPos = float4(x, y, z, 1.0f); // Transformuj przez odwrotność macierzy projekcji // Transformuj przez odwrotność macierzy projekcji float4 vPositionVS = mul(vProjectedPos, g_matInvProjection); float4 vPositionVS = mul(vProjectedPos, g_matInvProjection); // Podziel przez w żeby uzyskać pozycje w view- space // Podziel przez w żeby uzyskać pozycje w view- space return vPositionVS.xyz / vPositionVS.w; } LPP - Implementacja

Mamy pozycje pixela w View-SpaceMamy pozycje pixela w View-Space World Space poprzez transformacjeWorld Space poprzez transformacje Macierz InvViewMacierz InvView LPP - Implementacja

Mamy pozycje pixela w View-SpaceMamy pozycje pixela w View-Space World Space poprzez transformacjeWorld Space poprzez transformacje Macierz InvViewMacierz InvView LPP - Implementacja

Metoda optymalnaMetoda optymalna Odzyskiwanie pozycji pixelaOdzyskiwanie pozycji pixela Zakładamy że głębia jest liniowaZakładamy że głębia jest liniowa Zapisana ręcznieZapisana ręcznie Odtworzona z Z-buforaOdtworzona z Z-bufora Liniowa głębia zapewnia równomierne rozłożenie gęstości danychLiniowa głębia zapewnia równomierne rozłożenie gęstości danych Dla obliczeń post – wygodniejsza od wersji log Z- BuforaDla obliczeń post – wygodniejsza od wersji log Z- Bufora LPP - Implementacja

Budowa macierzy projekcjiBudowa macierzy projekcji LPP - Implementacja

Jako głębie zapisujemyJako głębie zapisujemy ViewSpacePosition.ZViewSpacePosition.Z Liniowa wartośćLiniowa wartość Po ręcznym odwróceniu macierzy projekcjiPo ręcznym odwróceniu macierzy projekcji LPP - Implementacja //Vertex Shader outEyeToScreen = float3(p.x*TanHalfFOV*ViewAspect, p.y*TanHalfFOV, 1) //Pixel Shader float3 ViewPos = vtEyeToScreen*depth;

World space odzyskujemy podobnieWorld space odzyskujemy podobnie LPP - Implementacja //Vertex Shader outEyeToScreen = float3(p.x*TanHalfFOV*ViewAspect, p.y*TanHalfFOV, 1) outWorldEye = mul( outEyeToScreen, (float3x3)matViewInv ); //Pixel Shader float3 WorldPos = vWorldEye*depth + EyePos;

Podsumowanie For more information contact me Slides will be available at Drobot.org

Questions ?