Autor Wątek: 2D - Przezroczystości ścian  (Przeczytany 2001 razy)

Offline Adam B

  • Użytkownik

# Kwiecień 13, 2009, 15:43:47
Witam,
Jestem na etapie opracowywania efektu - mianowicie jakiegoś rodzaju przezroczystości ścian w świecie 2d. Chodzi o ściany, które zasłaniają podłogę, ale gdy znajdziemy się w odpowiednim miejscu to stają się półprzezroczyste.

Oto przykładowe efekty:

Fallout:


Diablo:


Diablo 2:



Projekt jest pisany w J2ME na telefony komórkowe więc D2 i półprzezroczystość odpada.  Pozostaje efekt z Diablo 1 lub Fallouta.
Do realizacji wydaje mi się prostszy ten z Fallouta, a i wygląd jest dość ciekawy - na warstwach znajdujących się nad zawodnikiem dodaje dynamicznie przezroczystość na teksturę w kształcie koła (tylko takie rozwiązanie dość spowalnia renderowanie) - ma to może ktoś jakiś inny pomysł??
Efekt z Diablo uzyskał bym przez podzielenie mapy na przestrzenie (pokoje) i tyle. gdy gracz jest w tej przestrzenie maja być niewidzialne "te i te" ściany :) Tylko, że te rozwiązanie wpłynęło by dość znacznie na rozmiar pamięci na zapisanie mapy.

I nie wiem na co się zdecydować... Może ktoś miał podobny problem, albo zna inne efekty na pokazywania, co jest za ściana??
Pozdrawiam :)

PS. Rozwiązania z podziałem mapy na sfery widzialności rozwiązują jeszcze problem związany ukrywaniem wrogów którzy są za ścianami - ale mi na tym specjalnie nie zależy ;)
« Ostatnia zmiana: Kwiecień 13, 2009, 18:48:14 wysłana przez Adam B »

Offline Mr. Spam

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

Offline C'mons

  • Użytkownik

# Kwiecień 13, 2009, 17:04:30
Zrób tak jak w pierwszej części simsów. Rysuj tylko fragment ściany jeśli znajduje się za nią gracz. Dosłownie kawałek.

Offline RedHot

  • Użytkownik

# Kwiecień 13, 2009, 17:21:21
@up
Czyli rozwiązanie z fallouta

@topic
Hmm mi się wydaje, że w Diablo 1, te ściany nie są przezroczyste tylko jakby naniesiona jest maska / szachownica co jest rysowane a co nie. Głowy nie dam, ale tak mi to wygląda. Koeljnym problemem jest też to na co dokładnie możesz sobie pozwolić, ile masz pamięci etc.

Offline C'mons

  • Użytkownik

# Kwiecień 13, 2009, 17:31:29
Piszę z komórki więc nie widzę dobrze zdjęcia, ale wydaje mi się, że w fallout jest po prostu rysowane kółko na warstwie obiektów. Ja mówiłem o tym, że np.  Normalnie ściana ma wys. 100 pikseli to rysujesz tylko do 10 pikseli jeśli stoi za nią gracz.

Offline Adam B

  • Użytkownik

# Kwiecień 13, 2009, 18:00:53
Zrób tak jak w pierwszej części simsów. Rysuj tylko fragment ściany jeśli znajduje się za nią gracz. Dosłownie kawałek.

Efekt zrobiony:

(proszę nie zwracać uwagi na linie czerwone i niebieskie - są one pomocnicze ;))

Zamiast znikania całej ściany bym podmieniał jej teksturę, że jest widziany tylko jej dół - lepiej będzie wyglądać.
Wydaje mi się, że jest to zdecydowanie najszybsza metoda jednak ma pewne niedoskonałości.

Docelowo było by to trochę bardziej skomplikowane bo ściany będą pod kątem, ale mimo wszystko ilość obliczeń nie była by za duża. 

//EDIT: W Diablo 1 ściany są po prostu siatkowane. A nie wiem czy tam jest nakładana maska - ze względu na wydajność.. Szybciej wyjdzie trzymaj 2 tekstury, jedna z gotowymi przezroczystościami, a drugą bez i je podmieniać ;)
« Ostatnia zmiana: Kwiecień 13, 2009, 18:03:39 wysłana przez Adam B »

Offline RedHot

  • Użytkownik

# Kwiecień 13, 2009, 18:15:52
Umm sorry , ale nie widze tutaj tego efektu :P Daj obrazek przed i po  :P

Co do D1 , to także mi chodziło o teksture, tylko ja mówiłem o jej utworzeniu :)

Offline Adam B

  • Użytkownik

# Kwiecień 13, 2009, 18:30:58
Umm sorry , ale nie widze tutaj tego efektu :P Daj obrazek przed i po  :P

Co do D1 , to także mi chodziło o teksture, tylko ja mówiłem o jej utworzeniu :)

Na screenie widać, że nie ma ściany, a normalnie jest ;) Nie wiem co to jest do obrazowania. Wchodzi się na pole ograniczone niebieskim kwadratem i jeżeli na tym polu jest ściana to znika. Ściany to takie brzydkie brązowe kwadraty - wybaczcie, ale nie miałem czasu narysować nic innego ;)

Offline Adam B

  • Użytkownik

# Kwiecień 13, 2009, 20:11:13
Efekt z kołem półprzezroczystym nie wypalił - generowanie dynamiczne tekstur w czasie działania programu to pomyłka - nie sądziłem nawet, że aż tak duża - bo FPS spadł drastycznie :/ Screena nie dam bo zapomniałem zrobić :P ale efekt doś podobny do tego jak w FALLOUCIE.

Natomiast wykminiłem inne rozwiązanie - dość szybkie (nie widzę różnicy w FPS ;) ) oto jak ono się prezentuje:


Na razie odkrywa nam pole w kształcie kwadratu ale efektem docelowym jest coś takiego jak ta czerwona figura - ni to kwadrat ni to koło ;)

Offline C'mons

  • Użytkownik

# Kwiecień 13, 2009, 21:03:55
Wygeneruj sobie wszystkie przezroczyste ściany(nałożona szachownica koloru kluczowego) na początku działania programu. Albo tak jak już mówiłem rysuj tylko część ściany ewentualnie przygotuj gotowy obraz ściętej ściany dla efektu widoku wnętrza ściany jak w simsach.

Offline Adam B

  • Użytkownik

# Kwiecień 13, 2009, 22:58:02
Wygeneruj sobie wszystkie przezroczyste ściany(nałożona szachownica koloru kluczowego) na początku działania programu. Albo tak jak już mówiłem rysuj tylko część ściany ewentualnie przygotuj gotowy obraz ściętej ściany dla efektu widoku wnętrza ściany jak w simsach.

Wygenerowanie każdej tekstury ścianyx2 tj. z przezroczystością i bez ze dużo miejsca w pamięci RAM zeżre.

Rysowanie tak jak w smisach - bym musiał zmniejszyć te "niebieskie kwadraty" (jest to pole, które jest podstawową jednostką do tworzenia mapy) bo tak to źle wygląda (znikają za duże pola). Jak bym zmniejszył "niebieskie kwadraty" to mapa by się automatycznie zmniejsza zrobiła. Więc żeby mapa była duża by by zajmowała więcej pamięci, a co za tym idzie jej wyświetlanie było by powolniejsze... 

//EDIT: A teraz patrzę i widzę, że na screenie z Diablo1 jest bug :P ściana po lewej stronie chyba nie powinna być siatkowana...
« Ostatnia zmiana: Kwiecień 13, 2009, 23:06:51 wysłana przez Adam B »

Offline C'mons

  • Użytkownik

# Kwiecień 13, 2009, 23:28:32
Ja tu nie widzę problemu. Skoro mógłbyś wygenerować sobie ściany półprzeźroczyste i w razie kiedy trzeba rysować je zamiast ścian w pełni widocznych, to mógłbyś również zamiast tej przezroczystej ściany rysować normalną ścianę ale tylko jej fragment.

Offline Adam B

  • Użytkownik

# Kwiecień 13, 2009, 23:43:59
Ja tu nie widzę problemu. Skoro mógłbyś wygenerować sobie ściany półprzeźroczyste i w razie kiedy trzeba rysować je zamiast ścian w pełni widocznych, to mógłbyś również zamiast tej przezroczystej ściany rysować normalną ścianę ale tylko jej fragment.

W 4 poście na screenie jest ten efekt. Tylko, że tam w ogóle nic nie jest rysowane (nie miałem tekstury :P) zamiast znikającej ściany.