I am Lord Opublikowano 6 Sierpnia 2013 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ć.
PsichiX Opublikowano 6 Września 2013 Autor 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ę :)
Saus Opublikowano 7 Września 2013 Opublikowano 7 Września 2013 Mógłbyś objasnić ten HeatHaze z poprzedniej strony?
Administratorzy gnysek Opublikowano 7 Września 2013 Administratorzy Opublikowano 7 Września 2013 Outline jest w zestawie z GM:S i ciut lepszy, pytanie tylko jak zmienić jego kolor?
PsichiX Opublikowano 7 Września 2013 Autor Opublikowano 7 Września 2013 gdzie moge go znalezc? sprawdze ten kolor wtedy
Administratorzy gnysek Opublikowano 7 Września 2013 Administratorzy 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();
PsichiX Opublikowano 7 Września 2013 Autor 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.
Administratorzy gnysek Opublikowano 7 Września 2013 Administratorzy Opublikowano 7 Września 2013 Polecam: http://gmc.yoyogames.com/index.php?showtop...6&p=4331689 ;)
PsichiX Opublikowano 7 Września 2013 Autor 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 :)
ALT Opublikowano 7 Września 2013 Opublikowano 7 Września 2013 Wy tu z shaderami, a nikt nie wytłumaczy co do czego i czemu jest fragment i vertex.
PsichiX Opublikowano 7 Września 2013 Autor 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
Saus Opublikowano 7 Września 2013 Opublikowano 7 Września 2013 @Alt: jak nie rozumiesz to sie schowaj. Nie zasługujesz na przeglądanie tego tematu.
PsichiX Opublikowano 7 Września 2013 Autor Opublikowano 7 Września 2013 Thermalvision Noctovision Vintage Sepia
Administratorzy gnysek Opublikowano 7 Września 2013 Administratorzy 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 ;)
PsichiX Opublikowano 7 Września 2013 Autor 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 :)
PsichiX Opublikowano 8 Września 2013 Autor Opublikowano 8 Września 2013 Dodano nowy przykład - Woda. Water
Exigo Opublikowano 8 Września 2013 Opublikowano 8 Września 2013 Skoro stoisz przy wodzie, to teraz napisz dynamikę płynów. :)
PsichiX Opublikowano 8 Września 2013 Autor 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 :<
I am Lord Opublikowano 8 Września 2013 Opublikowano 8 Września 2013 Spodziewałem się innej animacji. To teraz wygląda jak przesuwająca się chmura.
PsichiX Opublikowano 8 Września 2013 Autor Opublikowano 8 Września 2013 git, pokombinuje z animacją samych normalnych - dzięki za info! :)
Uzjel Opublikowano 8 Września 2013 Opublikowano 8 Września 2013 Blur, motion blur i directional blur (to się chyba tak nazywa) by się napewno przydał.
PsichiX Opublikowano 8 Września 2013 Autor Opublikowano 8 Września 2013 probowalem zmodyfikowac animacje w shaderze wody, ale bugi kompilatora mnie blokuja. zajme sie teraz blurami i bloomem.
Exigo Opublikowano 8 Września 2013 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. :)
PsichiX Opublikowano 8 Września 2013 Autor 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.
PsichiX Opublikowano 8 Września 2013 Autor Opublikowano 8 Września 2013 Dodano 2 nowe shadery: Bloom Blur
Administratorzy gnysek Opublikowano 8 Września 2013 Administratorzy Opublikowano 8 Września 2013 Hm, woda moze sie przydac :D A ja czekam na zmianę koloru outline :P
Exigo Opublikowano 8 Września 2013 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.
PsichiX Opublikowano 8 Września 2013 Autor 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.
Uzjel Opublikowano 8 Września 2013 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
PsichiX Opublikowano 8 Września 2013 Autor 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).
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ę