|
|
SUb-Pixel Positioning Pixel Shader |
Autor |
Wiadomość |
kamiledi15
Kapitan
 
Główny edytor: 
Drugi edytor: 
Pomógł: 8 razy Posty: 837
8479 Prestiż
|
Wysłany: 26-02-2018, 19:07 SUb-Pixel Positioning Pixel Shader
|
|
|
Mam prośbę, znalazłem taki temat:
https://community.clickteam.com/threads/44644-Sub-Pixel-Positioning-Pixel-Shader
Potrzebuję zrobić płynny ruch chmur, które lecą sobie jednostajnie w jedną stronę bardzo powoli. Ten efekt zapewnia płynny ruch przy bardzo niskich prędkościach, ale w tym przykładzie jest przypisany do ruchu myszą i w żaden sposób nie mogę tego przerobić. Umiałby ktoś pomóc? |
_________________ Pies Syrena - GRA UKOŃCZONA.
 |
|
|
|
 |
msg
Pupogłowy ~~~~~~~~~~~

Główny edytor: 
Drugi edytor: 
Pomógł: 76 razy Posty: 1411
40080 Prestiż
|
|
|
|
 |
jarlfenrir
Generał brygady
 
Główny edytor: 
Drugi edytor: 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 26-02-2018, 20:14
|
|
|
To nie jest kwestia przepisania, a zrozumienia o co chodzi w przykładzie
Dlaczego na końcu drugiej akcji dałeś dzielenie przez 100.0? Nie rozumiem do czego to tu jest. |
|
|
|
 |
msg
Pupogłowy ~~~~~~~~~~~

Główny edytor: 
Drugi edytor: 
Pomógł: 76 razy Posty: 1411
40080 Prestiż
|
Wysłany: 26-02-2018, 20:55
|
|
|
Dla przesuwania o współrzędną X to szerokość obrazka, a więc obszar, w którym ma działać efekt. |
_________________
|
|
|
|
 |
kamiledi15
Kapitan
 
Główny edytor: 
Drugi edytor: 
Pomógł: 8 razy Posty: 837
8479 Prestiż
|
Wysłany: 26-02-2018, 23:07
|
|
|
No nie wiem, jak dla mnie to to nie wygląda za dobrze. Ułamek sekundy stoi w miejscu, wykonuje przeskok o piksel, znowu ułamek sekundy stoi, znowu robi przeskok... Czy to samo, co w path movement z prędkością 1. Jednak przykład ruchu myszą był znacznie płynniejszy. Czy tylko ja to widzę? |
_________________ Pies Syrena - GRA UKOŃCZONA.
 |
|
|
|
 |
msg
Pupogłowy ~~~~~~~~~~~

Główny edytor: 
Drugi edytor: 
Pomógł: 76 razy Posty: 1411
40080 Prestiż
|
Wysłany: 26-02-2018, 23:32
|
|
|
kamiledi15 napisał/a: | Czy tylko ja to widzę? |
Tak. Albo masz za duży kontrast na monitorze. Ewentualnie sterownik zdecydował, że nie będzie obsługiwał efektów i patrzysz na coś innego niż ja.
https://youtu.be/7f10brZPgUw Zwolniłem ruch do pełnej sekundy na piksel. Widać jak brzegi płynnie zanikają.
kamiledi15 napisał/a: | Jednak przykład ruchu myszą był znacznie płynniejszy. |
Akurat tu wydaje mi się, że winę ponosi łagodna krawędź obiektu, który był użyty w przykładzie. Moja chmurka ma ostrą krawędź bez AA, żeby pokazać, że efekt zachodzi. Może wpływać to na subiektywny odbiór efektu. |
_________________
|
|
|
|
 |
kamiledi15
Kapitan
 
Główny edytor: 
Drugi edytor: 
Pomógł: 8 razy Posty: 837
8479 Prestiż
|
Wysłany: 26-02-2018, 23:48
|
|
|
Cytat: | Zwolniłem ruch do pełnej sekundy na piksel. |
A jak to zrobiłeś? Ja mogę wstawić filmik, jak u mnie ten ruch skacze, ale jeśli go spowolniłeś jeszcze bardziej, to może dlatego na twoim wygląda lepiej. |
_________________ Pies Syrena - GRA UKOŃCZONA.
 |
|
|
|
 |
msg
Pupogłowy ~~~~~~~~~~~

Główny edytor: 
Drugi edytor: 
Pomógł: 76 razy Posty: 1411
40080 Prestiż
|
Wysłany: 26-02-2018, 23:49
|
|
|
kamiledi15 napisał/a: | A jak to zrobiłeś? |
Zamiast:
timer / 300.0
Dałem:
timer / 1000.0
Oba wyglądają równie płynnie. |
_________________
|
|
|
|
 |
kamiledi15
Kapitan
 
Główny edytor: 
Drugi edytor: 
Pomógł: 8 razy Posty: 837
8479 Prestiż
|
Wysłany: 27-02-2018, 00:08
|
|
|
W takim razie nie wiem, dlaczego u Ciebie to wygląda zupełnie inaczej. Proszę, to mój filmik:
https://www.youtube.com/watch?v=ZKl3l0g1W0k
Najpierw z timerem/1000, potem na 300, potem pokazuję, jak wygląda przykład z forum Clickteamu. Różnica jest ogromna.
Może mieć jakieś znaczenie, że ja używam darmowej wersji CF? Ogólnie to pracuję w MMFie 2, ale Twój przykład wymusza używanie CF.
[ Dodano: 27-02-2018, 00:15 ]
Dobra, chyba to wina tej darmowej wersji CF, bo przykład z myszą też na niej działa skokowo. Spróbuję przepisać Twój kod do mojej gry w MMF2.
[ Dodano: 27-02-2018, 00:29 ]
Eureka, miałem rację. Wygląda na to, że darmowy CF nie obsługuje tego efektu, ale w MMF2 wszystko działa dobrze. Co prawda rozmywanie brzegów nie wygląda idealnie, bo lewa i prawa krawędź chmury lekko pulsują, ale jest to mało widoczne i znacznie lepsze, niż ruch skokowy. Dzięki wielkie za pomoc. |
_________________ Pies Syrena - GRA UKOŃCZONA.
 |
|
|
|
 |
msg
Pupogłowy ~~~~~~~~~~~

Główny edytor: 
Drugi edytor: 
Pomógł: 76 razy Posty: 1411
40080 Prestiż
|
Wysłany: 27-02-2018, 00:36
|
|
|
Jak rozmyjesz chmurę gaussem to nawet w ruchu skokowym nie będzie widać przemieszczenia. |
_________________
|
|
|
|
 |
kamiledi15
Kapitan
 
Główny edytor: 
Drugi edytor: 
Pomógł: 8 razy Posty: 837
8479 Prestiż
|
Wysłany: 27-02-2018, 00:38
|
|
|
Chyba takie rozmywanie nie wyglądałoby dobrze przy mojej grafice. Ale spoko, tak już wygląda nieźle. Jak ktoś nie przyłoży nosa do monitora, to nie zauważy.
[ Dodano: 27-02-2018, 02:16 ]
Ok, a mógłbyś mi jeszcze coś podpowiedzieć? Gdy chmura wyjedzie z ekranu, to powinna się teleportować z drugiej strony ekranu i znowu zacząć płynąć. Nie do końca mi to wychodzi. Przede wszystkim, gdy mam np. 4 chmury, to wszystkie zaczynają z pozycji X = 0, więc wszystkie nakładają się na lewy róg ekranu i stamtąd płyną, co wygląda dość głupio. Zmieniłem to w prosty sposób - zmieniając pozycję X na Int(timer/200.0)+500, lub +800 itd, wtedy każda chmura startuje w innym miejscu. Ale, gdy wyjedzie z ekranu i ma się teleportować z krawędzi, to teleportuje się tam, gdzie zaczęła, czyli na środek ekranu. Masz pomysł, jak to zrobić? Pewnie to prosta sprawa, ale nie do końca łapię, jak to działa. Ewentualnie zamiast teleportować chmury, mógłby jej się po prostu odwrócić kierunek ruchu, teoretycznie wpadłem na to, jak to zrobić, bo wystarczy dać minusy przed 200.0, ale jeśli ustawię chmurze punkt startowy na środku ekranu, to po zmianie kierunku teleportuje się, więc to też bez sensu. |
_________________ Pies Syrena - GRA UKOŃCZONA.
 |
|
|
|
 |
msg
Pupogłowy ~~~~~~~~~~~

Główny edytor: 
Drugi edytor: 
Pomógł: 76 razy Posty: 1411
40080 Prestiż
|
|
|
|
 |
kamiledi15
Kapitan
 
Główny edytor: 
Drugi edytor: 
Pomógł: 8 razy Posty: 837
8479 Prestiż
|
Wysłany: 27-02-2018, 10:36
|
|
|
Próbuję przeportować ten kod do MMFa, ale MMFowi nie podoba się ten Owidth. Próbowałem znaleźć, co to jest, czy to może jakiś stworzony przez Ciebie Alterable Value (bo Starting Offset już znalazłem, że tak), ale OWidth chyba nie. Domyślam się, że to szerokość obiektu? MMF2 nie chce tego zaakceptować.
[ Dodano: 27-02-2018, 10:53 ]
Dobra, chyba się udało. Musiałem zmienić ręcznie Owidth na ręczne wpisanie szerokości każdej chmury. Dodatkowo zamiast Frame Width wpisałem ręcznie długość ekranu, bo jeśli ramka ma długość np. 12 tysięcy, no to chmura by się resetowała dopiero po dojechaniu do końca całej ramki, a mi chodzi o krawędź ekranu. Teraz chyba jest ok, dzięki.
[ Dodano: 27-02-2018, 11:02 ]
Jednak coś jest jeszcze nie tak. Kod na Start of Frame jest taki jak u Ciebie, na Always zmieniłem tak, jak napisałem wyżej:
Cytat: | (Int(timer/300.0)+Alterable Value A( Active 85 )) mod (1024+229)-229
Set effect parameter f_XShift to (((timer/300.0) mod 1.0)/100.0) |
Alterable Value A to to samo, co u Ciebie Starting Offset. 1024 to szerokość ekranu, 229 to szerokość obiektu. Jeśli zamiast 300 dam np. 100, żeby przetestować i żeby chmura szybko jechała - działa dobrze. Ale jeśli dam 200 lub 300, żeby jechała wolno - to się psuje - chmura stoi w miejscu i się trzęsie. Co robię źle?
[ Dodano: 27-02-2018, 16:56 ]
Teraz jestem w pracy, więc tego nie sprawdzę, ale generalnie chcę, żeby chmury miały odhaczone "Follow the frame". Czyli chodzę sobie po planszy, a chmury są stale wpisane w tło i lecą sobie niezależnie od moich działań. Tak więc teleport chmury powinien następować po wyjechaniu za kamerę, a nie za całą ramkę. Nie miałem czasu sprawdzić, czy moja zmiana na 1024 tutaj wystarczy, bo sprawdzałem to tylko na początku etapu i tam działało dobrze (zanim ruszy się kamera), ale tak jak napisałem, tylko przy wyższych prędkościach, przy niższych chmura się blokuje i nie wiem czemu. Piszę to tylko, żebyś mógł to uwzględnić, gdybyś miał czas sprawdzić, co skopałem. |
_________________ Pies Syrena - GRA UKOŃCZONA.
 |
|
|
|
 |
jarlfenrir
Generał brygady
 
Główny edytor: 
Drugi edytor: 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 27-02-2018, 17:16
|
|
|
Zamiast odznaczać chmurom follow the frame ja preferuję rozwiązanie z warstwami. Dajesz chmury na warstwę niżej, niż właściwa część gry i dla chmurowej warstwy określasz XCoefficient i YCoeficcient na 0. |
|
|
|
 |
kamiledi15
Kapitan
 
Główny edytor: 
Drugi edytor: 
Pomógł: 8 razy Posty: 837
8479 Prestiż
|
Wysłany: 27-02-2018, 17:19
|
|
|
No dobra, później spróbuję. Może mi to załatwi problem z trzęsącą się chmurą Tylko co wtedy z długością ekranu? Frame Width chyba nie może zostać, skoro to długość całej ramki? Czyli ma zostać, tak jak ja zrobiłem, 1024? Nie jestem teraz pewien, co spowodowało ten efekt trzęsienia - czy to przez zmianę Owidth na ręczne wpisanie długości obiektu, czy przez zmianę Frame Width na 1024 - dałem szybszą prędkość chmury, żeby przetestować, czy się dobrze teleportuje, a potem się dopiero okazało, że na niższej prędkości się psuje. |
_________________ Pies Syrena - GRA UKOŃCZONA.
 |
|
|
|
 |
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|