I am Lord Opublikowano 6 Sierpnia 2013 Udostępnij Opublikowano 6 Sierpnia 2013 No właśnie się domyśliłem że jakieś maski będą potrzebne bo jak bym zrobił tak jak ja chciałem to by cały prostokątny obszar nad obiektami się modyfikował. BTW jak by ktoś chciał to na fullscreenie a nie spricie to Trzeba włączyć sobie 2 viewy w opcjach room editora. I w jakimś obiekcie z najmniejszym depth: GML (create) globalvar gSurfaceHaze; gSurfaceHaze = surface_create( view_wview, view_hview ); view_surface_id[0] = gSurfaceHaze; GML (draw) if ( !surface_exists(gSurfaceHaze) ) { gSurfaceHaze = surface_create(view_wview, view_hview); view_surface_id[0] = gSurfaceHaze; } else { if ( view_current == 1 ) { uPhase = shader_get_uniform(sh_HeatHaze, "uPhase"); shader_set(sh_HeatHaze); shader_set_uniform_f(uPhase, 1.5 / view_wview, 0.5 / view_hview, current_time * 0.01, 20); draw_surface(gSurfaceHaze, 0, 0); shader_reset(); } } HeatHaze.gmz Są jeszcze jakieś sposoby z 1 viewem na Draw i Draw GUI ale tego nie wiem jak zrobić. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 6 Września 2013 Autor Udostępnij Opublikowano 6 Września 2013 Z racji, że dziś w końcu mogłem siąść do kodowania shaderków na żywym organiźmie GM:S, oto wrzucam przeportowane dwa efekty: https://dl.dropboxusercontent.com/u/9759049/HeatHaze.gmz https://dl.dropboxusercontent.com/u/9759049/Outline.gmz (wersja prostrza i gorszej jakości, będę dodawał w przyszłości bardziej dokładną metodę outline'u) a zaraz zabieram się za wodę :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Saus Opublikowano 7 Września 2013 Udostępnij Opublikowano 7 Września 2013 Mógłbyś objasnić ten HeatHaze z poprzedniej strony? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Września 2013 Administratorzy Udostępnij Opublikowano 7 Września 2013 Outline jest w zestawie z GM:S i ciut lepszy, pytanie tylko jak zmienić jego kolor? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Września 2013 Autor Udostępnij Opublikowano 7 Września 2013 gdzie moge go znalezc? sprawdze ten kolor wtedy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Września 2013 Administratorzy Udostępnij Opublikowano 7 Września 2013 vertex: // // Simple passthrough vertex shader // 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; varying vec2 v_vTexturePixelSize; uniform vec2 v_TexturePixelSize; vec2 ExtractCorner(vec4 _colour ) { float b = floor(_colour.b*255.0); //get whole number, (int) b = b - ((floor(b/2.0))*2.0); float r = floor(_colour.r*255.0); //get whole number, (int) r = r - ((floor(r/2.0))*2.0); float corner = (r*2.0) + b; // Now have a 0,1,2 or 3 for the corner we're in. (topleft, clockwise) // Top left? if( corner==0.0 ){ return vec2(-1,-1); } // Top Right? else if( corner==1.0 ){ return vec2(1,-1); } // Bottom Right? else if( corner==2.0 ){ return vec2(1,1); } // Bottom Left? else{ return vec2(-1,1); } } void main() { float scaler = 2.0; vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); // get a vector based on which corner the vertex is, and move the corner out by a SCALER amoiunt. vec2 corner = ExtractCorner(in_Colour); object_space_pos.xy = object_space_pos.xy + (corner*scaler); // Then transform as normal. gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; v_vColour = in_Colour; v_vTexcoord = in_TextureCoord + (corner*v_TexturePixelSize*scaler); v_vTexturePixelSize = v_TexturePixelSize; } fragment // // lerp to colour fragment shader // varying vec2 v_vTexturePixelSize; varying vec2 v_vTexcoord; varying vec4 v_vColour; void main() { vec2 uv = v_vTexcoord; vec2 uv_offset = v_vTexturePixelSize; //*2.0; vec2 offset1 = uv_offset; vec2 offset2 = uv_offset; vec2 offset3 = uv_offset; vec2 offset4 = uv_offset; offset1.y=0.0; offset1.x=-offset1.x; offset2.y=0.0; offset3.x=0.0; offset4.x=0.0; offset4.y=-offset3.y; vec4 col0 = texture2D( gm_BaseTexture, uv); vec4 col1 = texture2D( gm_BaseTexture, uv+offset1); vec4 col2 = texture2D( gm_BaseTexture, uv+offset2); vec4 col3 = texture2D( gm_BaseTexture, uv+offset3); vec4 col4 = texture2D( gm_BaseTexture, uv+offset4); col0.rgb = col0.rgb*col0.aaa; col0.a = max(col0.a,max(col1.a,max(col2.a,max(col3.a,col4.a)))); gl_FragColor = v_vColour * col0; } GML //create Vtex_pixel_size = shader_get_uniform(sShaderDemo7, "v_TexturePixelSize"); //draw shader_set(sShaderDemo7); shader_enable_corner_id(true); var texture = sprite_get_texture(sprite_index, image_index); var texel_width = texture_get_texel_width(texture); var texel_height = texture_get_texel_height(texture); shader_set_uniform_f(Vtex_pixel_size, texel_width, texel_height ); image_blend=c_yellow; draw_self(); shader_reset(); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Września 2013 Autor Udostępnij Opublikowano 7 Września 2013 dzięki, obczaje to potem i podeślę wersję ze zmianą koloru :) swoją drogą, nikt im chyba jeszcze nie powiedział, żeby unikać IFów zwłaszcza na mobilach. Saus: do wieczora wrzuce wersje z komentarzami i opisem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Września 2013 Administratorzy Udostępnij Opublikowano 7 Września 2013 Polecam: http://gmc.yoyogames.com/index.php?showtop...6&p=4331689 ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Września 2013 Autor Udostępnij Opublikowano 7 Września 2013 gnysek: fajnie, to wiem. a nawet wiem, jak zrobić ten cały durny ExtractCorners() jedną linijką kodu, bez jakiegokolwiek ifa i equalsa - będzie w kolejnym przykładzie shadera z multi teksturingiem i normalmapami, który właśnie robie :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ALT Opublikowano 7 Września 2013 Udostępnij Opublikowano 7 Września 2013 Wy tu z shaderami, a nikt nie wytłumaczy co do czego i czemu jest fragment i vertex. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Września 2013 Autor Udostępnij Opublikowano 7 Września 2013 ALT: No stres, to sie opisze, ale z racji, ze to dosc duzy temat, to nie zrobie tego ad hoc ;) Oto nowy shader, tym razem z opisem (opisy dodam także do tych poprzednich później). Normal Mapping: https://dl.dropboxusercontent.com/u/9759049...rmalMapping.gmz Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Saus Opublikowano 7 Września 2013 Udostępnij Opublikowano 7 Września 2013 @Alt: jak nie rozumiesz to sie schowaj. Nie zasługujesz na przeglądanie tego tematu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Września 2013 Autor Udostępnij Opublikowano 7 Września 2013 Thermalvision Noctovision Vintage Sepia Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Września 2013 Administratorzy Udostępnij Opublikowano 7 Września 2013 Ha, thermal vision to chciałem akurat bardzo :D Miałem plan zrobić taki a'la Metal Gear Solid, skradankę top-down, jak skończę Almorę i dać tam termo google. Btw. co do postu Mike'a to wiem, ze to wiesz, ale napisałeś, ze moze oni nie wiedzą, więc podałem linka który to neguje :P Czekam na ten outline gdzie mozna ustawiac sobie kolory, chciałbym w Almorze móc dookoła przeciwników robic linie jak sie ich najezdza myszką a nie chce robic 2x tyle grafik do tego ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Września 2013 Autor Udostępnij Opublikowano 7 Września 2013 ten thermal vision co dalem, to jest prosta wersja, ktora konwertuje bazowa teksture do odcieni szarosci i to w gradient zamienia, a bardziej dokladna wersja powinna polegac na podaniu osobnej tekstury czarno-bialej, na ktorej bialym beda zaznaczone miejsca cieple, a czarne to zimne i te teksture dalej powinien przetwarzac. najprosciej da sie to przerobic tak, ze robi sie osobny obiekt z tym sprajtem czarno-bialym, ale to generuje duzo problemow i zawsze to osobny obiekt. najlepiej przerobic to tak, ze oda sie kolejny sampler do shadera, przekaze jego UV i UV tekstury bazowej i samplowanie zamiast z bazowej, to z czarno-bialej. nagmatwalem, cholerka. skoncze wode to moge uzupelnic przyklad thermal vision o druga zaawansowana wersje :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Września 2013 Autor Udostępnij Opublikowano 8 Września 2013 Dodano nowy przykład - Woda. Water Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 8 Września 2013 Udostępnij Opublikowano 8 Września 2013 Skoro stoisz przy wodzie, to teraz napisz dynamikę płynów. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Września 2013 Autor Udostępnij Opublikowano 8 Września 2013 bedzie to niewydajne na chwile obecna, bo gm nie obsluguje wymaganego formatu tekstur, wiec trzeba bedzie to zrobic na okolo, a to wladnie bedzie overkill dla gma :< Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 8 Września 2013 Udostępnij Opublikowano 8 Września 2013 Spodziewałem się innej animacji. To teraz wygląda jak przesuwająca się chmura. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Września 2013 Autor Udostępnij Opublikowano 8 Września 2013 git, pokombinuje z animacją samych normalnych - dzięki za info! :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 8 Września 2013 Udostępnij Opublikowano 8 Września 2013 Blur, motion blur i directional blur (to się chyba tak nazywa) by się napewno przydał. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Września 2013 Autor Udostępnij Opublikowano 8 Września 2013 probowalem zmodyfikowac animacje w shaderze wody, ale bugi kompilatora mnie blokuja. zajme sie teraz blurami i bloomem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 8 Września 2013 Udostępnij Opublikowano 8 Września 2013 To może jakbyś zrobił coś w stylu nextgenowego ubershadera, wiesz, taki pipeline, wliczając w to powyższe blury (dwuwymiarowy + radial, w zależności od inputa poruszania kamery, zoom in/out), tone mapping, vignette, bloomy/hdr-y, noise-y, flary anamorficzne plus tego typu wkurzające migawki, aberrację chromatyczną, i na sam koniec wyostrzanie krawędzi - gdzie w każdym z wymienionych przypadków można sobie włączać/wyłączać to flagami (choć nie wiem czy są obsługiwane przez studio, jeśli nie, sprostujcie mnie proszę). Gdzieś nawet czytałem o jakimś eksperymentalnym AO 2d, i efekt tego był całkiem fajny. Jeśli przy włączonych wszystkich powyższych efektach wyglądało by to mniej więcej tak: To znaczy że idzie to w dobrym kierunku. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Września 2013 Autor Udostępnij Opublikowano 8 Września 2013 w tym wlasnie problem, ze na windzie GM:S uzywa HLSL z trybem pixel shading 2, ktory ma max 64 instrukcje arytmetyczne na fragment shader i juz sam shader wody wykorzystuje znaczna czesc. jesli zrobic ubershader wszystkich, lub choc kilku, to instrukcji moze byc za duzo D: pobawie sie z upakowaniem mozliwie kilku post-procesow w jednym ubershaderze. a flag GM:S nie obsluguje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Września 2013 Autor Udostępnij Opublikowano 8 Września 2013 Dodano 2 nowe shadery: Bloom Blur Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Września 2013 Administratorzy Udostępnij Opublikowano 8 Września 2013 Hm, woda moze sie przydac :D A ja czekam na zmianę koloru outline :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 8 Września 2013 Udostępnij Opublikowano 8 Września 2013 Ten limit instrukcji nie jest aż tak ogromnym ograniczeniem. Wszystko da się zrobić. Na przykład coś w stylu Post Process Chain-a. Po prostu zrobić surface z dodatkowym buforem, renderować scenę do jednego, odpalać shader i rysować nim do drugiego buforu, potem z buforu do sceny przełączając na inny shader do pierwszego, i tak dalej, analogicznie kontynuując. Ba, nawet jedną z plusów tej metody jest możliwość zmiany tego chain-a w locie (wyłączać/włączać wybrane efekty). Normalnie to trzeba by było kompilować tego ubershadera za każdym razem od nowa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Września 2013 Autor Udostępnij Opublikowano 8 Września 2013 te metode zastosowalem w shaderach Blura i Blooma, ale to nie jest wtedy ubershader, a limitem jest to, ze w wersji FREE GM:S dostepne sa tylko 2 shadery. Gnysek: jak skoncze example zbiorczych efektow, to zerkne na to demo outline'a, bo probowalem z kodem z postu i cos mi nie gralo. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 8 Września 2013 Udostępnij Opublikowano 8 Września 2013 w tym wlasnie problem, ze na windzie GM:S uzywa HLSL z trybem pixel shading 2, ktory ma max 64 instrukcje arytmetyczne na fragment shader i juz sam shader wody wykorzystuje znaczna czesc. jesli zrobic ubershader wszystkich, lub choc kilku, to instrukcji moze byc za duzo D: pobawie sie z upakowaniem mozliwie kilku post-procesow w jednym ubershaderze. a flag GM:S nie obsluguje. Powiedz mi, czym się różnią te oznaczenia shaderach: GLSL ES GLSL HLSL9 HLSL11 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 8 Września 2013 Autor Udostępnij Opublikowano 8 Września 2013 GLSL ES - na kazda inna platforme shadery sa konwertowane z niego, czyli: - Windows PC/Phone: DirectX HLSL (9 lub 11); - Mac Os X: OpenGL GLSL; - Android, iOS: OpenGL GLSL ES; Reszta po zaznaczeniu okresla kod pod te konkretna platforme, tak w ramach pisania innego kodu optymalnego w GLSL a innego w HLSL. i to oznacza, że na przykład na windowsie ten shader jest tłumaczony z GLSL ES przez kompilator GMa na HLSL (wynikowy kod HLSL widać nawet w plikach vout.shader i fout.shader tworzonych u mnie na kompie gdzies randomowo O.o). 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ę