Warsztat.GDCompo!ProjektyMediaArtykułyQ&AForumOferty pracyPobieranie

Opisz napotkaną sytuację, a redakcja niezwłocznie znajdzie rozwiązanie!

wyślij anuluj

Półprzezroczyste cienie

Niektórzy mówią, że nie da się w OpenGL zrobić półprzezroczystych cieni. Nie jest to do końca prawda ;)


  • Łukasz Żmijewski (@Vipa) 08 lutego 2011 07:27
    Grrr, nie lubię jak ktoś uważa, że czegoś się nie da :). Da się, da się. Świetnie to u ciebie wygląda. Ale patrząc na źródło światła i tę szybkę, to jej projekcja na te klocki nie powinna być większa i mniej wyraźna?
  • Michał W (@Witek) 08 lutego 2011 07:33
    No dobra, a co jeśli takich kolorowych szybek będzie 100 warstw i światło będzie przez każdą przechodzić?
  • Łukasz Żmijewski (@Vipa) 08 lutego 2011 08:29
    Wtedy zmienia się level designera... ;)
  • marcin (@noxy) 08 lutego 2011 10:46
    @Vipa: xD @Dab: Niezle niezle.
  • Jakub Ś aka Świrus (@rmf) 08 lutego 2011 15:02
    @Witek, to byś napewno zrobił takie rozwiązanie że nowa tesla posrała by się jeszcze przed właściwym renderingiem.
  • skoti (@skoti) 09 lutego 2011 00:43
    @Dab: ofc, że się da i to nawet w wypadku, jakbyś w tym półprzezroczystym cieniu postawił obiekt który daje cień na ścianę (na jednej mapie cienia tego nie umieścisz, i musisz mieć dodatkową mapę) tylko wraz ze wzrostem tych mapek cieni, nadchodzi refleksja, że co z tego, że się da, jak przy takiej ilości mapek to można zrobić to przyjemniej w tym samym czasie pisząc raytracer lub robiąc hybrydę korzystając z mocy GPU (takie cienie jak i odbicia są dużo łatwiejsze do uzyskania w raytracerach niż w rasteryzacji).
  • Tomasz Dąbrowski (@Dab) 09 lutego 2011 01:21
    W realtime raytracery się bawiłem (zajrzyj do mojego profilu), ale czysty raytracer daje w zasadzie tylko odbicia i refrakcję. Moim zdaniem nie usprawiedliwia to różnicy w wydajności raytracera względem klasycznego potoku. Cienie (przezroczyste czy nie) są drogie, zwłaszcza miękkie. Animacja też sporo kosztuje (w klasycznym GPU jest prawie darmowa). Ogólnie raytracing nie jest taki fajny, chyba że masz olbrzymią ilość statycznych trójkątów lub masywnie równoległy (dziesiątki o ile nie setki GPU) system na którym ciężko zrównoleglić klasyczną rasteryzację.

    Fajny jest dopiero path tracing, ale jeszcze mnóstwo czasu musi upłynąć zanim sprzęt pociągnie path tracing realtime (mówię o mnóstwie animowanych obiektów z masą tekstur a nie kilku analitycznych kulkach czy innych hiperfraktalach).
  • skoti (@skoti) 09 lutego 2011 02:00
    @Dab: Przecież pisałem, że się da (w wypadku tego obrazka użyłeś 2x shadowmap - jedną dla przezroczystego obiektu i jedną wyrenderowaną bez niego) - w przypadku dodatkowego obiektu przezroczystego, masz już 3x mapki i idziesz tak w górę z liczbą shadowmap. Path tracer na GPU jeśli nie chcesz mieć ziarna olbrzymiego nie wchodzi w grę, ale wielokrotne odbicia czy wielokrotnie przezroczyste cienie nie jest znowu takie drogie przy raytracerach jeśli dobrze zoptymalizujesz scenę pod obliczenia na GPU, np. wkładając do QBVH (powinno być to bardziej efektywne niż wielokrotny rendering shadowmap) i można ładnie zintegrować z resztą renderowaną w OpenGL.
  • Tomasz Dąbrowski (@Dab) 09 lutego 2011 02:49
    Nie bardzo. Jeżeli chcesz mieć raytracowane cienie to musisz przez raytracer przepuszczać całą geometrię która może te cienie odbierać (czyli w większości przypadków całą scenę). Jeżeli chcesz raytracować tylko obiekty odbijające to też nie jest to takie proste -- takie ustawienie raytracera żeby jego efekty pokrywały się z rasteryzowaną resztą jest trudne i w sumie nieopłacalne (np. co z SSAO?). A jeżeli tego nie zrobisz to odbicie nie będzie zgadzało się z "faktycznymi" obiektami.

    PS. Tu jest tylko jedna shadowmapa ;)
  • Krystian Komisarek (@Spider100) 09 lutego 2011 12:16
    Pewnie, że można nie wiem kto pisał że się nie da i dlaczego.
  • skoti (@skoti) 09 lutego 2011 15:05
    @Dab: Nie musisz przepuszczać całej geometrii - rzucasz N (W*H) promieni z kamery i odpytujesz QBVH (mówię o tej strukturze bo ona świetnie działa na SIMD (czy to SSE czy karty graficzne)) tylko o tą siatkę w którą może trafić i która jest najbliżej, więc leci przez bardzo małą ilość obliczeń na siatce, a w miejscu gdzie jest uderzone rzucasz po prostu promień w kierunku światła i sprawdzasz czy w QBVH jest coś co może zasłaniać, a jeśli tak to sprawdzasz tylko to co może czy tak jest (nie sprawdzasz tego dla całej siatki). Ustawienie, żeby render raytracera pokrywał się z tym co widzisz z raytracera jest bardzo łatwe, a nie rozumiem pytania co z SSAO? Co ma SSAO z tym wspólnego - jeśli robisz hybrydę to nic się nie zmienia (depthmapa robiona przez rasteryzacje normalnie (tak robi bardzo wiele raytracerów jak chociażby ten z Blendera)), a jeśli robisz czysty raytracer to też nie widzę problemu z zapisaniem do depthmapy odległości przy uderzeniu w geometrię z qbvh primary rays z kamery, a samo SSAO robisz w OpenCL (jest już wiele gier, które SSAO wywalają z piksel shaderów i obliczają go w OpenCL lub Dx compute bo to daje większą wydajność).
  • Hans (@Hans) 10 lutego 2011 16:40
    @Dab czy to jest ta metoda co trzyma RGB przemnożone przez kolor filtrowania a w alfie ma odległość? Bo zawsze mnie zastanawiało czy nie ma artefaktów na krawędziach jak nieprzeźroczysty obiekt jest przed tym kolorowym przeźroczystym?

    (a to co lubie w raytrace'rach to fakt że wszystko załatwia się w jeden sposób, renderowanie - rzucasz promień, cienie i odbicia - kolejne promienie, miękkie cienie i odbicia - kolejna setka promieni, GI - kolejny bazylion promieni, a nie jakieś shadow mapy, cube mapy i inne wtf mapy :) )
  • Michał W (@Witek) 10 lutego 2011 19:21
    Popieram przedmówcę, co do raytracingu :)
  • Daniel Masiukiewicz (@DanielMz25) 04 marca 2013 14:50
    Jesteś hardcorem :)
  • Napisz komentarz:
    Aby dodać swój komentarz, musisz się zalogować.
Screen dodał:
Tomasz Dąbrowski
08.02.2011 01:42:43

Projekt:
Lvx Techdemo

Kategoria:
Efekt graficzny

Punkty:
811

Ocenili na plus:

Warsztat używa plików cookies. | Copyright © 2006-2017 Warsztat · Kontakt · Regulamin i polityka prywatności
build #ff080b4740 (Tue Mar 25 11:39:28 CET 2014)