Panel Logowania

SkyBox & Sun & Shaders (optymalizacja i połączenie)

napisał : janek
30
czerwca
2013
Tutorial pokazujący jak sensownie i logicznie połączyć trzy najważniejsze rzeczy w naszej grze, czyli Skybox, Sun i cienie. Krótko i na temat dla początkujących.
tagi : skybox sun shaders tutorial optymalizacja świat teren lamp

Witam :)

W tym tutorialu pokaże wam jak stworzyć prawidłową konfiguracje trzech podstawowych elementów (wymienionych powyżej) tak aby nasza gra wyglądała elegancko i nie zacinała się.

SkyBox 

1. Pierwszy krok to sciągnięcie tekstury:

   A możesz ją pobrać stąd :

   http://www.tutorialsforblender3d.com/Textures/Skys/Sky_Box_1.html

   lub

   http://www.tutorialsforblender3d.com/Textures/Skys/Sky_Dome_1.html

2. Jeśli już ją wybraliśmy to postępujemy następująco:

- Dodajemy kule i ustawiamy jej odpowiednie parametry (lewy pasek / klawisz T)

3. Ustawiamy wygładzanie krawędzi w lewym pasku. (klawisz T)

4. Następnie przechodzimy w tryb edycji i ucinamy połowę kuli.

-Zaznacz za pomocą Ramki (klawisz B)

-Naciśnij klawisz Delete i wybierz opcje Face.

5. Przejdź w tryb widoku z Teksturami i ustaw renderowanie w BGE.

6. Zmień tryb renderowania na GLSL

7. Kuli ustaw UV i dodaj nowy materiał.

8. W zakładce poniżej ustawiamy opcje Shadeless. Dzięki temu niebo będzie niezależne od światła.

9. Następnie dodajemy teksturę i ustawiamy opcje z UV.

10. Powinniśmy uzyskać taki efekt. Jednakże nie jest on nadal zadowalający.

11. Aby to poprawić włączmy widok UV editing. W tym trybie wybierz swoją teksturę.

12. Teraz rozłóżmy  siatkę UV w następujący sposób:

13. Ale to jeszcze nie koniec. Nasz skydome jest widoczny tylko z zewnątrz. Patrz (klawisz P). Aby to naprawić musimy odwrócić normale face'ów. W tym celu użyj opcji Recalculate i niżej ustaw Inside (wszystko w prawym pasku)

14. Ściany są teraz widoczne od środka.

'

15. Oprócz tego można/ trzeba zlikwidować kolizje aby zaoszczędzić fps'y

Gotowy SkyDome możesz pobrać tutaj:

http://www.mediafire.com/?6u7ey57cl14t8me

Niebo i Cienie

       Pobierz nieskonfigurowaną scenę:

        http://www.mediafire.com/?pfgawkg54a8pafc

1. W tym miejscu oznaczyłem elementy które powinny i nie powinny mieć cieni.

- Elementy które powinny mieć cienie (zaznaczenie niebieskie) są istotne dla nas. Czyli elementy które będą istotne w upiększaniu grafiki.

- Elementy które nie powinny mieć cieni (zaznaczenie czerwone) są to elementy drobne, mało istotne. W dużej ilości powodują one spadek wydajności. Dlatego trzeba je pozbawić cieni. Np: trawa jest jej dużo i nie potrzebuje cieni. Podobnie postępujemy z innymi rzeczami.

2. Aby ustawić cienie:

-zaznacz swoją lampę

-zmień typ na Sun

-ustaw jakość cieni na 1024 (opcjonalnie)

-Fortum Size na 20 (nie na 12)

3. Przejdźmy teraz w te część poradnika gdzie usuwamy cienie:

- zaznacz trawę

- odznacz wszystkie opcje w zakładce shadows

- przy okazji odznacz również Backface Culling, aby trawa była widoczna z każdej strony. W przypadku trawy billboard nie musisz tego robić.

4. Cienie są ale niezbyt ładne. W celu poprawienia wyglądu dodaj lampę typu Hemi i zmniejsz Energy do 0.1 (jasność). Lampe Hemi ustaw w podobnej pozycji co słońce.

Optymalizacja

1. Po przejechaniu sceny jak zauważyłeś niebo i słońce stoi w miejscu, cienie też. Po odjechaniu dalej nie wszędzie już widać efekty. Co teraz zrobić?

2. Trzeba ruszyć niebo i ziemie !

3. Aby tego dokonać postępuj tak jak poniżej:

-skopiuj ten skrypt i wlep go do blendera:

# script written by janek

from bge import logic
cont = logic.getCurrentController()
own = cont.owner
scena = logic.getCurrentScene()
obj = scena.objects

sensor = cont.sensors['Always'] # nazwa sensora (domyślnie always)
sun = own
camera = scena.active_camera # definiowanie aktywnej kamery
own = cont.owner

if sensor.positive : sun.position.x = camera.position.x
if sensor.positive : sun.position.y = camera.position.y            
if sensor.positive : sun.position.z = camera.position.z+5 #wysokość slońca nad kamerą

4. Następnie jeżeli zaznaczyłeś słońce przejdź do kostek logiki i ustaw je następująco:

Freq:15 . Dlaczego 15? Ponieważ słońce będzie przesuwało się co jakiś czas. Jeżeli jest to gra wyścigowa to ustawmy jak najniższą wartość. Jeżeli RPG to możemy spokojnie ustawić 20.

5.Następny krok to przesuwanie nieba. Skrypt chodzi podobnie jak na słońce.

# script written by janek

from bge import logic
cont = logic.getCurrentController()
own = cont.owner
scena = logic.getCurrentScene()
obj = scena.objects

sensor = cont.sensors['Always'] # nazwa sensora (domyślnie always)
sky = own
camera = scena.active_camera # definiowanie aktywnej kamery
own = cont.owner


if sensor.positive : sky.position.x = camera.position.x
if sensor.positive : sky.position.y = camera.position.y
if sensor.positive : sky.position.z = camera.position.z-5 #wysokość środka nieba nad kamerą

6. Kostki logiki ustawiamy tak samo, oprócz tego dajemy niższe Freq

To już wszystko ;)

możesz pobrać gotową scenę tutaj:

http://www.mediafire.com/download/siblat5sv5w59c5/scena_gotowa.blend

 

Na koniec mały bonusik ;)

Jak zrobić Soft Shadows:

-ustawiamy Buffer type na Variance

-dajemy bardzo mały Bias

-dajemy również nieco większy Bleed Bias

 

Pozdrawiam ;)

11 komentarzy
Aktyn napisał :
godz. 16:26, 30 czerwca 2013
Mały błąd. Dałeś do wklejenia 2 razy ten sam scrypt.
Soft shadows fajna opcja tylko w połączeniu z tym scryptem co chwile robi się jakby fala z tego cienia.
Mam pytanie. Wydajniejsze dla gry są cienie zwykłe czy Variance?
janek napisał :
godz. 18:33, 30 czerwca 2013
Ah, rzeczywiście :/ mały błąd. Jeżeli chodzi o wydajność to zrobiłem mały test i postawiłem tysiąc palm. Efekt jest zadziwiający:
Variance 29-30 fps
Simple 24-27 fps
Wychodzi na to że Variance jest lepszy ;)
maniek napisał :
godz. 19:43, 30 czerwca 2013
test na statycznych obiektach jest nie miarodajny... zanimuj palmy, aby się kołysały i dopiero teraz sprawdź wartości...
janek napisał :
godz. 20:17, 30 czerwca 2013
Dopiero zauważyłem że obiekty Transparent (z przezroczystością) są domyślnie niewidoczne w soft shadows. Także test był błędny ponieważ Variance miał tak jakby fory. Teraz przeprowadziłem test w pełni ruchomy i poprawny. Wyniki są takie:
Variance: 36-39
Simple: 38-40
Różnica w sumie nie wielka jak na tak wielką scenerie.
mardraq napisał :
godz. 13:23, 19 lipca 2013
Fajny poradnik :)

Mam pytanie odnośnie Soft Shadows. Przy ustawieniach jakie podałeś mam dziwny efekt- przed wejściem do trybu gry ciecie są fajnie rozmyte (1), a w trybie gry, cienie stają się "kanciaste" (2). CZy tak ma być, czy też ja mam coś źle ustawione?

janek napisał :
godz. 11:00, 23 lipca 2013
Umm. Dziwne :S . Właśnie to zauważyłem też u siebie. Jaką wersje teraz masz?
Aktyn napisał :
godz. 21:46, 23 lipca 2013
Solft shadows nie działają poprawnie w przypadku światła typu sun.
mardraq napisał :
godz. 22:48, 23 lipca 2013
Dzięki @Aktyn :)

Przy lampie Spot działa pięknie :)
janek napisał :
godz. 15:40, 24 lipca 2013
No przy spocie to już dawno był soft. Ale jestem świecie przekonany że widziałem gdzieś działający bleed bias przy sun'ie.
piter10p napisał :
godz. 10:51, 26 sierpnia 2013
Zauważyłem że w miejscach reflektu na podłożu cienie "znikają".
Czy tylko ja mam taki problem?
CacholaPL napisał :
godz. 20:21, 16 grudnia 2013
A czasem zamiast Shaders nie powinno być Shadows ? Shadery to taki "świecący bajer", a shadows to cienie
Dodaj komentarz
Aby dodać komentarz do newsa, musisz być zalogowany w Serwisie.. Zaloguj