Shader - vyjímka

Pokud si nevíte s něčím rady ohledně tvorby v Game Makeru - pište sem!
Odpovědět
BboyScary
Příspěvky: 220
Registrován: listopad 2, 2011, 6:33 pm
Facebook: https://www.facebook.com/BB-Scary-produkce-1161668
Bydliště: Kopřivnice

Shader - vyjímka

Příspěvek od BboyScary » červenec 26, 2017, 6:21 pm

Zdravím. Zase já :D Máte někdo zkušenosti se shaderama? Já jsem do své hry jeden použil od Dodozen. Používám ho pro pause menu. Když ho aktivuju, tak se celá obrazovka rozmaže a přidá se nápis pause a main menu. To jsou dva další objekty, které se objeví až po tom objektu, který se stará o rozmazání obrazovky. Dá se udělat, aby ty dva jediné zůstaly ostré?
mám skript draw_SHADER_blur

Kód: Vybrat vše

var enabled = argument0;

//ANIMATION
/*
    ideally this should be moved out the draw event
    for better control...
*/
var timeMult = 0; //make the animation slower or faster...
var time = 5;
var oscillatorValue = sin(time);
var oscillatorValueAbs = abs(sin(time));

//SHADER SETUP
vRatio = 1;

    // Samplers / Textures ---------------------------------------------------------------------
    
    // Shader setup ----------------------------------------------------------------------------
    var shader      = shader_blur;
    var u_vRatio    = shader_get_uniform(shader, "u_vRatio");
    var u_threshold = shader_get_uniform(shader, "u_threshold");
    
    var radius = 0.005;
    
    shader_set(shader);
        shader_set_uniform_f(u_vRatio, vRatio);
        shader_set_uniform_f(u_threshold, radius * oscillatorValue);
        draw_surface(application_surface,0,0);
    shader_reset();
a shader shader_blur

Kód: Vybrat vše

attribute vec3 in_Position;
attribute vec2 in_TextureCoord;

uniform float u_vRatio;

varying vec2 v_uv0;
varying vec2 v_uv0Ratio;

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_uv0       = in_TextureCoord;    
    v_uv0Ratio  = in_TextureCoord * vec2(1.0, u_vRatio); 
}
je tam udělaná animace v tom skriptu, že ten efekt se rozostřuje a zaostřuje. Tam jsem to zatím nepokrátil, ale za proměnou timeMult jsem dosadil 0 a za proměnnou time jsem dosadil 5 takže se ten effekt nemění a rovnou skočí na intenzitu, která odpovídá intenzitě po 5ti sekundách.

potom mám objekt obj_blur
create event:

Kód: Vybrat vše

global.isShaderEnabled = true;
draw GUI

Kód: Vybrat vše

draw_SHADER_blur(global.isShaderEnabled);
když zmáčknu esc tak se obj_blur vytvoří a postará se o efekt a když zmáčknu znovu tak se zase smaže.

Goblin
Příspěvky: 133
Registrován: červenec 2, 2014, 2:42 pm

Re: Shader - vyjímka

Příspěvek od Goblin » červenec 27, 2017, 9:35 pm

Já se shaderama teprve začínám, ale správně se myslím používají tak, že ho při vykreslování zapneš a když vykreslíš, co potřebuješ, zase ho vypneš pomocí shader_reset(). Tak se shaderem vykreslí jen ten jeden objekt a ostatní se vykreslí normálně...

Pokud chceš nějaké objekty z univerzálně zapnutého shaderu naopak vynechat, zresetuj shader na začátku jejich draw eventů a na konci ho zase nastav.
"Understanding is not required. Only obedience."

BboyScary
Příspěvky: 220
Registrován: listopad 2, 2011, 6:33 pm
Facebook: https://www.facebook.com/BB-Scary-produkce-1161668
Bydliště: Kopřivnice

Re: Shader - vyjímka

Příspěvek od BboyScary » červenec 31, 2017, 6:13 pm

takhle to nejde. Jediné co pomáhá je když na tom objektu s nápisem pause dám draw gui ale to se potom vykreslí pokaždé jinde v závislosti na tom kde se nachází kamera.

Goblin
Příspěvky: 133
Registrován: červenec 2, 2014, 2:42 pm

Re: Shader - vyjímka

Příspěvek od Goblin » červenec 31, 2017, 9:29 pm

No jo, to je tím, že ho používáš přímo na aplication surface. Nemohl bys mít místo toho 2 surfacy velikosti viewu a vykreslovat na jeden všechno, co chceš mít rozmazané a na ten druhý to ostatní? Jestli chceš mít to nerozmazané v popředí, neměl by to být problém, ne?
"Understanding is not required. Only obedience."

BboyScary
Příspěvky: 220
Registrován: listopad 2, 2011, 6:33 pm
Facebook: https://www.facebook.com/BB-Scary-produkce-1161668
Bydliště: Kopřivnice

Re: Shader - vyjímka

Příspěvek od BboyScary » červenec 31, 2017, 11:04 pm

jo to by asi šlo, ale to už je na mě moc složité. Já se surface vůbec neumím a nevím, co bych tam jiného dopsal místo pplication_surface.

Goblin
Příspěvky: 133
Registrován: červenec 2, 2014, 2:42 pm

Re: Shader - vyjímka

Příspěvek od Goblin » srpen 1, 2017, 3:14 am

Napadá mě ještě udělat objekty neviditelnými (aby se přeskakoval jejich draw event), zapnout shader, vykreslit ty zamlžené, vypnout shader a vykreslit ty ostré. K ručnímu vykreslení objektů z kontrolního objektu můžeš použít

Kód: Vybrat vše

with object event_perform(ev_draw,0)
v jeho draw eventu.
"Understanding is not required. Only obedience."

Uživatelský avatar
ipq
Příspěvky: 918
Registrován: srpen 15, 2011, 7:31 pm
Bydliště: Petržalka

Re: Shader - vyjímka

Příspěvek od ipq » srpen 5, 2017, 12:17 pm

Nebolo by lepšie aplikovať namiesto aplication surface nejaký obdĺžnik či screenshot. Totiž ak je to nastavené na aplication surface, tak to zasiahne celú obrazovku, na ktorej sa to vykresľuje a čo si pamätám, najlepšie je spraviť to tak že najprv vykresliť nejaký obdĺžnik na celú obrazovku a naň aplikovať ten shader a potom ďalej vykresliť text alebo keď sa to robí vo zmysle spraviť screenshot, deaktivovať všetky objekty okrem pause objektu, tak pri vykresľovaní nastaviť, že ten screenshot sa bude rozmazávať.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti