Autor Wątek: problem z lightmapami  (Przeczytany 4784 razy)

Offline jjoker8

  • Użytkownik

# Styczeń 09, 2013, 02:29:56
Wymodelowałem proste meshe z których będę budował zamek, jednak mam problem z lightmapami. Lightmapy zrobiłem zgodnie z tutorialami: http://www.worldofleveldesign.com/categories/udk/udk-lightmaps-01-basics-and-important-principles-for-creating-using-lightmaps.php (+ te zlinkowane), jednak mam problem który tam nie jest opisany. Mianowicie przy budowie ściany z pojedyńczych klocków każdy klocek ma inny gradient cienia. Przy uzyciu ambient occlusion w lightmass wygląda to dużo lepiej ale nadal niezbyt dobrze. Mam wrażenie że pomijam jakąś prostą rzecz, tylko nie wiem jaką. w załącznikach wrzucam screeny
zal 1. Przód bez ambient occlusion (w miejscu gdzie jest direct light jest ok, ale w miejscu zacieniowanym katastrofa)
zal 2. Przód z ambient occlusion (trochę lepiej ale dalej kijowo)
zal.3 tyl bez ambient occlusion (katastrofa)
zal.4 tyl z ambient occlusion (lepiej ale kijowo)
Nie chodzi mi o widoczność szwów, bo tutaj wiem o co chodzi, problemem jest inny odcień cienia w każdym meshu, ambient occlusion jakoś to wyrównuje, ale i tak widać i chyba gdzie indziej tkwi źródło problemu. Wszystkie meshe mają tą samą rozdzielczość lightmap.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline jjoker8

  • Użytkownik

# Styczeń 09, 2013, 03:54:15
hmm, zrobiłem bake na high lighting i wygląda całkiem nieźle (te screeny były na preview), na production powinno być już w porządku. Ta spora ściana jest zacieniowana także przez to że uvka mi się obróciła o 180 ztopni i to ciemniejsze co powinno być na dole wylądowało na górze. Wydaje mi się jednak że powinno wyglądać ok bez ambient occlusion i trochę od d*py strony to rozwiązanie, w końcu te meshe na jednej płaszczyźnie leżą to nie wiem jak każdy inny cień może mieć.

Offline jjoker8

  • Użytkownik

# Styczeń 09, 2013, 13:12:58
wczoraj już padłem, zrobiłem teraz bake oświetlenia w trybie production i przekręciłem uv tej skopanej ściany. Wygląda bardzo dobrze, poza szwami, ale to wiem jak zrobić- muszę ręcznie poodsuwać UV lightmapy o kilka pixeli bo teraz to jest tak jak zdecydował unwrap blendera. Efekt w załączniku :)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +1
# Styczeń 09, 2013, 14:26:19
Ręcznie? Przecież blenderowy unwrap ma możliwość wymuszenia minimalnego odstępu między kawałkami.

Offline jjoker8

  • Użytkownik

# Styczeń 09, 2013, 14:38:06
no z tym ręcznie to tak mi się powiedziało :P. minimalny odstęp w blenderze jest maxymalnie 1 pix, a potrzeba co najmniej 2 pixele. Zrobiłem to tak, że lightmapy będą na 128 pix, a dałem unwarp na mapkę 64, czyli jak się to przełoży na mapkę 128 to tam gdzie jest odstęp 1 pixel będzie odstęp 2 pixele :). Co nie zmienia faktu że część vertexów i tak musiałem ustawiać ręcznie bo na siebie zachodzą na łukach (szczególnie na tym sklepieniu łukowo żebrowym), a jak na siebie zachodzą to wychodzi czarna plama. Już zrobione, właśnie mi się bakeuje efekt :).

Offline jjoker8

  • Użytkownik

# Styczeń 09, 2013, 18:09:42
heh, problem jednak nie jest rozwiązany. Używając opcji "visualise AO" w lightmass UDK po prostu nadpisuje AO jako lightmapę- efekt jest taki że nie działają inne światła takie jak point light. Właśnie zrobiłem korytarz ze światłem w środku i po krótkim researchu na google się dowiedziałem czemu nie działa. Jeśli więc ktoś ma rozwiązanie tego problemu to będę wdzięczny, bo  nadpisanie AO to dla mnie zadne rozwiązanie :(.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +2
# Styczeń 09, 2013, 19:04:30
Ale co chcesz wykombinować? Albo chcesz wypalać lightmapę, albo chcesz wypalić preview AO. Jeżeli to pierwsze, a sam lightmapper jest hi-endowy z jakością produkcyjną, to jaki jest sens w ogóle zawracania sobie głowy AO? W końcu przecież AO to tylko półśrodek jak się nie ma GI, więc jak się już ma, to nie jest potrzebne. :)

Offline Vipa

  • Redaktor

  • +1
# Styczeń 09, 2013, 20:22:33
Krzysiek, ale co z obiektami dynamicznymi? Rozumiem, że można przykombinować z samym AO dla całej sceny i zapomnieć nawet o cieniach jako takich (rozproszone źródła światła, bardzo jasne itd.) ale czasami lepsze efekty osiąga się stosując kilka metod, każda dla określonych obiektów.

Co do samego wypalania oświetlenia, to trochę nie na czasie. Owszem, można się wspomóc, ale teraz liczy się dynamika. Cykl dnia i nicy, zmienne źródła światła, kolor, natężenie... Do tego dochodzą inne cuda, które wymagają tych samych danych. Np. normal mapa sceny musi być zrobiona do deferred lighting i można jej z powodzeniem użyć też do ao. Wypalanie oświetlenia kojarzy mi się bardziej z początkiem wieku i shooterami indoor. Może, gdyby zastosować dynamicznie zmieniające się sceny, budujące jakiś klimat zagrożenia, to zda rezultat by nie stopować fps przy poszczególnych lokacjach, ale oprócz tego trudno mi znaleźć jakiś sensowny powód by to robić.
A już broń boże wypalać to na teksturę do modelu. Od tego są efekty w grach by z nich korzystać. Wypalone na tex ao + te z silnika, powoduje u mnie ataki agresji :).

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +2
# Styczeń 09, 2013, 20:36:30
Cytuj
Krzysiek, ale co z obiektami dynamicznymi?
Tutaj chyba oczywiste że żadne lightmapy nie przejdą.

Cytuj
Co do samego wypalania oświetlenia, to trochę nie na czasie.
Właśnie to jest teraz najbardziej na czasie. Dynamicznych cieni dla całej sceny nie policzysz na komórce. :)

Poza tym UE3 raczej jest przystosowany pod lightmapy niż dynamiczne pory dnia, a przynajmniej lightmap się w nim gęsto zwykle używa.

Offline jjoker8

  • Użytkownik

# Styczeń 09, 2013, 23:13:06
Cytuj
Ale co chcesz wykombinować?
no dokładnie to chcę uniknąć efektu ze screenu nr 3 w załączniku w pierwszym poście, czyli ścianę złożoną z modułów chcę mieć tak samo zacieniowaną na każdym module, a nie tak że każdy moduł ma inny cień. Nie znalazłem rozwiązania problemu na google ani na forach udk, więc zacząłem kombinować w ustawieniach lightmasy, zauważyłem że po włączeniu AO ściana lepiej wygląda, więc poszedłem w tą stronę...
Co do dynamicznych pór dnia to akcja będzie się działa w nocy i jest to element fabularny :).

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +1
# Styczeń 10, 2013, 01:04:14
No to przecież produkcyjne ustawienie dawało chyba dobry rezultat.

Offline jjoker8

  • Użytkownik

# Styczeń 10, 2013, 15:13:14
tak, ale było to robione z AO na teksturze, bez tego i tak wygląda jak szachownica nawet na produkcyjnych ustawieniach (tyle że różnica między odcieniami jest mniejsza).
Postanowiłem rozwiązać ten problem przez wstawienie gzymsów/kolumn i innych zdobień w miejscu łączeń oraz robienie dużych meshy z kilkoma połączonymi elemenatmi  np. zamiast zrobić ścianę z 3 meshy: ściana + okno + sciana, po prostu scalę je w blenderze i wyeksportuję jako jeden mesh. Poza tym zauważyłem, że dwie instancje tego samego mesha cieniują się idealnie tak samo, problem jest z różnymi typami meshy które przylegają do siebie na jednej płaszczyźnie, np mesh ściana i mesh ściana z niszą.
Problem występuje tylko w miejscach ze światłem rozproszonym/punktowym (np. w pomieszczeniach z pointlight), w miejscu gdzie jest dominant directional light wszystko jest idealnie.
Edit: wrzucam screena. Widać błąd w miejscu zacienionym i to że w miejscu gdzie jest driectional light jest ok
« Ostatnia zmiana: Styczeń 10, 2013, 15:20:05 wysłana przez jjoker8 »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +1
# Styczeń 10, 2013, 15:34:13
OK - ciekawe jest to, że ten ciemniejszy element ma 2x gęstsze UVki. Jestes pewien że wszystkie elementy mają tą samą skalę i podobnie rozciągnięte UV lightmapy? Bez tego mogło radiosity się pomieszać na różnej gęstości próbek i powariować.

To przynajmniej tak na zdrowy rozum.

Offline jjoker8

  • Użytkownik

# Styczeń 10, 2013, 15:53:09
UV lightmapy nie są idealnie równo zeskalowane bo ciężko uzyskać taki efekt dla tych bardziej skomplikowanych meschy, ale mniej więcej są takie same (znaczy jak dam na lightmap density to łapią się w jednym kolorze). Roziągnięte są UVki dla kanału z diffuse bo chciałem zobaczyć czy nakładanie się map na diffuse robi jakąś różnicę tzn. mam nałożone przód i tył ściany, teraz zeskalowałem UV x 0.5 i rozpiąłem tak żeby się nie nakładały, lightmapa jest na 2 kanale (no niby wiem, że w takim razie kanał diffuse nic tu nie ma do rzeczy ale już kombinuję jak mogę)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +2
# Styczeń 10, 2013, 16:00:43
To może sprawdź jeszcze czy w tym konkretnym elemencie nie masz na tej ściance dwukrotnie położonych trójkątów (albo wręcz całego modelu). W Blenderze łatwo o taki błąd - np. jak zduplikujesz geometrię i anulujesz przez Esc, to anulujesz tylko Grab, czyli masz dwukrotny model w tym samym miejscu. Global illumination najprawdopodobniej będzie na takie rzeczy uczulony, a przyciemnienie tej powierzchni to pierwszy symptom, którego bym się spodziewał. :)