Administratorzy gnysek Opublikowano 8 Marca 2014 Administratorzy Udostępnij Opublikowano 8 Marca 2014 Joł miśki. Z shaderów jestem niestety słaby jak mięśnie Najmana... znalazłem sobie shader na blura, jest fajny, ale chciałbym móc mu przekazywać jak mocny na być ten blur. Próbowałem przez shader_set_uniform, ale po wielu próbach wyszło mi na to, że ponieważ jest tam pętla for, to w trakcie kompilacji to jest konwertowane na normalne polecenia na podstawie liczby w pętli i jeśli podam własną zmienną, to się gra nie kompiluje... Vertex attribute vec3 in_Position; // (x,y,z) attribute vec4 in_Colour; // (r,g,b,a) attribute vec2 in_TextureCoord; // (u,v) //attribute vec3 in_Normal; // (x,y,z) unused in this shader. varying vec2 v_vTexcoord; varying vec4 v_vColour; void main() { vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; v_vColour = in_Colour; v_vTexcoord = in_TextureCoord; } Fragment varying vec2 v_vTexcoord; varying vec4 v_vColour; //uniform int u_iSize; // Filter size uniform vec2 u_vTexelSize; void main() { gl_FragColor = vec4(0.0,0.0,0.0,1.0); int size = 9; // Square filter size. Must be >=3 and uneven to work. int elems = size*size; size /= 2; for(int i = -size;i <= size;i++) { for(int j = -size;j <= size;j++) { vec2 offset = vec2(float(i)*u_vTexelSize.x,float(j)*u_vTexelSize.y); gl_FragColor += v_vColour * texture2D( gm_BaseTexture, v_vTexcoord + offset); } } gl_FragColor.rgba /= float(elems); Więc jeśli zamiast int size = 9; zrobiłem u_iSize, to niestety się kompilator wywala. Ktoś ma pomysł? Ten blur całkiem zacnie wygląda, ale chciałbym go płynnie zwiększać bez rysowania surface na surface i alpha blendingu, zresztą wtedy widać że blur nie rośnie a jest druga warstwa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Marca 2014 Udostępnij Opublikowano 8 Marca 2014 rozmiar blura zmieniaj poprzez skalowanie offsetow sampli, nie zas sama iloscia sampli - dla Twojego gpu to bedzie bardziej strawna wersja niz dynamiczna zmiana ilosci sampli. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MaxGaming Opublikowano 8 Marca 2014 Udostępnij Opublikowano 8 Marca 2014 Gnysek potrzebuje pomocy :o Mogę już umierać! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Marca 2014 Udostępnij Opublikowano 8 Marca 2014 druga sprawa: poprawnie dobrej jakosci blur robi sie dwoma przebiegami: 1. render sceny do pierwszej tekstury; 2. render pierwszej tekstury do drugiej z shaderem blura wertykalnego; 3. render drugiej tekstury na ekran z shaderem blura horyzontalnego; voila! cieszysz sie najlepszej jakosci blurem :) @MaxGaming: glupi jestes i nic juz tego nie zmieni D: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Marca 2014 Autor Administratorzy Udostępnij Opublikowano 8 Marca 2014 Psyś, to wiem, w twoim blurze tak jest, w sieci też takowe widziałem, ale ponieważ chcę działać na application_surface w GM, to trochę nieoptymalnym może być lecieć dwa razy po nim i nie wiem czy renderowanie w siebie samego albo kopiowanie na drugi surface nie będzie zabójcze dla pamięci na Androidzie. A chcę jak najtaniej uzyskać efekt takiego stopniowego rozmycia ekranu (chodzi o to, że jak robisz pauzę, to tło się rozmywa). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Marca 2014 Udostępnij Opublikowano 8 Marca 2014 rozmyte tło pauzy, tj. nic sie nie rusza, ale sam ekran gry pod UI pauzy jest zblurowany - to sie robi wtedy tak, ze przy wlaczeniu menu pauzy wykonujesz kroki 1 i 2, zaś 3 wygląda tak, że renderujesz drugą teksturę do pierwszej z shaderem blura horyzontalnego i potem te pierwsza teksture malujesz pod UI. jesli powiesz mi ze chcesz renderowac to realtime tylko po to, by wykorzystac application_surface, to wybacz, ale wtedy parskne smiechem :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Marca 2014 Autor Administratorzy Udostępnij Opublikowano 8 Marca 2014 Wybacz, że jesteś najmądrzejszy na świecie i nic nie rozumiem z tego co mówisz. Zwłaszcza, że próbuję ominąć problem używania drugiego surface oraz tworzenia nowego sprite dynamicznie, stąd powyższy kod na blura (notabene wyglądającego lepiej niż ten w Twoich przykładach, bo nie ma takich kwadracików). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Marca 2014 Udostępnij Opublikowano 8 Marca 2014 sarkazm jest zbędny. kwadraciki w moim blurze są jedynie przez ustalenie skali na > 1. serio, to co chcesz zrobić nie potrzebuje application_surface, ale jak sie upierasz to zrób tak jak na początku napisałem: zamiast zmieniać size na uniforma, dodaj jedynie uniforma skali i mnóż go przez offset, a size zostaw nietknięty, lub zwiększ jego ilość - na mobilach dynamiczne loopy i ify nie zadziałają wszędzie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Marca 2014 Autor Administratorzy Udostępnij Opublikowano 9 Marca 2014 No jak chcę cały ekran zblurować, to niby na czym mam operować jak nie application_surface ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 9 Marca 2014 Udostępnij Opublikowano 9 Marca 2014 Jeśli dobrze rozumiem jak działa application_surface (post-processing?) to nie narysujesz na nim potem menu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 10 Marca 2014 Autor Administratorzy Udostępnij Opublikowano 10 Marca 2014 Draw GUI jest wykonywane po Post Draw z tego co mi wiadomo. Tylko automatyczne rysowanie trzeba wyłączyć dla app_sfc Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 20 Marca 2014 Autor Administratorzy Udostępnij Opublikowano 20 Marca 2014 Problem nadal nie rozwiązany. Być może dla tego, że fragment z uniformem skali niezbyt do mnie przemówił Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 20 Marca 2014 Udostępnij Opublikowano 20 Marca 2014 Bo nie musi do Ciebie przemawiać, żeby działał :P zrobić to z głową i załatwione. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 24 Marca 2014 Autor Administratorzy Udostępnij Opublikowano 24 Marca 2014 Ale np. próbowałem te float(j) i float(i) przemnażać przez liczbę którego podaję do shadera (np. 0 - 1, uniform to jest tak?) i nic nie dało. A tego o czym wspomniałem powyżej po prostu nie zrozumiałem, bo nie wiem co to xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się