Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

[GAME MAKER STUDIO] 2 Shaders ao mesmo tempo Tópico resolvido

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Foxy Of Jungle
Programador
Programador
Reações: 0
Mensagens: 153
Localização: Brasil
Contato:

[GAME MAKER STUDIO] 2 Shaders ao mesmo tempo

Mensagem por Foxy Of Jungle » Sáb Jun 16, 2018 2:44 am

Preciso saber como usar 2 shaders ao mesmo tempo(sem mesclar em 1 só)
Eu tenho 2 shaders, o primeiro deixa a tela HD (HQ4x) e o segundo é de Escala de Cinzas, eu uso um surface criado e não o application_surface para desenhar tudo.

Como uso os dois ao mesmo tempo?

Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 621
Localização: Dourados-MS

Contato:

Re: [GAME MAKER STUDIO] 2 Shaders ao mesmo tempo  Tópico resolvido

Mensagem por All-x » Dom Jun 17, 2018 5:29 pm

O melhor modo é misturar os dois shaders, ou seja, faça uma cópia do HQX4, e no fim dele adicione o código do preto e branco. Assim evita de fazer cópias da tela toda pra reaplicar um novo shader.

Exemplo - Ultimas linhas do seu Shader HQ4X:

Código: Selecionar todos

(...)

    gl_FragColor = w1*i1 + w2*i2 + w3*i3 + w4*i4 + (1.0-w1-w2-w3-w4)*c;
}
Basta deixar assim:

Código: Selecionar todos

(...)

    gl_FragColor = w1*i1 + w2*i2 + w3*i3 + w4*i4 + (1.0-w1-w2-w3-w4)*c;
    
    // Código abaixo do Shader Preto & Branco
    
    // Pega o pixel atual
    vec4 myColor = gl_FragColor;
    
    // Diminui a intensidade do pixel
    vec4 scaledColor = myColor * vec4(0.21, 0.72, 0.07, 1.0);
    
    // Calcula luminância do pixel
    float luminance = scaledColor.r + scaledColor.g + scaledColor.b ;
    
    // Aplica níveis de cinza ao pixel
    gl_FragColor = vec4(luminance, luminance, luminance, myColor.a);
}
Espero que ajude.
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Avatar do usuário
Foxy Of Jungle
Programador
Programador
Reações: 0
Mensagens: 153
Localização: Brasil
Contato:

Re: [GAME MAKER STUDIO] 2 Shaders ao mesmo tempo

Mensagem por Foxy Of Jungle » Dom Jun 17, 2018 10:05 pm

[quote="Alex FC"]

Eu não entendo muito da linguagem OpenGL ES (Só sei o básico, como Vertex e Pixel, Void, uniforms etc) mas eu vou tentar mesclar os dois, e o problema é que além dele, eu posso usar o shader de água também, vou mostrar como meu código funciona (esboço):

Funcionamento de maneira rigorosa:

==================================

se for estágio da água: shader_set(sh_water)
se tiver morto: shader_set(sh_blackwhite)
quero usar o shader HQ4X aqui para melhorar a qualidade dos pixels, shader_set(sh_hq4x)

draw_surface_stretched(...)

shader_reset()

==================================

Mais ou menos assim, só que o shader Hq4X é pra usar sempre, ou seja, usar ele e os outros.

Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 621
Localização: Dourados-MS

Contato:

Re: [GAME MAKER STUDIO] 2 Shaders ao mesmo tempo

Mensagem por All-x » Dom Jun 17, 2018 10:50 pm

Você pode misturar os 3 shaders e ativar/desativar com variáveis. Veja meu exemplo de substituição de cores:

Shader - Troca de cores

Uso a função shader_set_uniform_f pra alterar a cor que quero trocar. Basta utilizar isso com "if" e pronto.

Do modo mais chato seria reaplicando o efeito através de várias surfaces. Se você tem um shader aplicado dentro de uma surface que não é o application_surface, e supondo que o HQX4 já esteja ativo, basta fazer isso (CUSTOM_SURFACE = sua surface):

Código: Selecionar todos

// Desenha surface surface_01 - água:
if esta_na_agua
{
    surface_set_target(surface_01);
    
 shader_set(shader_agua);
 
 draw_surface(CUSTOM_SURFACE, 0, 0);
 
 shader_reset()
    
    surface_reset_target();
    
    // Copia surface nova pra surface atual
 surface_copy(CUSTOM_SURFACE, 0, 0, surface_01);
 
 // Deleta surface_01
 surface_free(surface_01);
}
// Desenha surface surface_02 - água:
if esta_morto
{
    surface_set_target(surface_02);
    
 shader_set(shader_preto_e_branco);
 
 draw_surface(CUSTOM_SURFACE, 0, 0);
 
 shader_reset()
    
    surface_reset_target();
    
    // Copia surface nova pra surface atual
 surface_copy(CUSTOM_SURFACE, 0, 0, surface_02);
 
 // Deleta surface_02
 surface_free(surface_02);
}
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Avatar do usuário
Foxy Of Jungle
Programador
Programador
Reações: 0
Mensagens: 153
Localização: Brasil
Contato:

Re: [GAME MAKER STUDIO] 2 Shaders ao mesmo tempo

Mensagem por Foxy Of Jungle » Ter Jun 19, 2018 8:59 pm

Alex FC escreveu:Você pode misturar os 3 shaders e ativar/desativar com variáveis. Veja meu exemplo de substituição de cores:

Shader - Troca de cores

Uso a função shader_set_uniform_f pra alterar a cor que quero trocar. Basta utilizar isso com "if" e pronto.

Do modo mais chato seria reaplicando o efeito através de várias surfaces. Se você tem um shader aplicado dentro de uma surface que não é o application_surface, e supondo que o HQX4 já esteja ativo, basta fazer isso (CUSTOM_SURFACE = sua surface):

Código: Selecionar todos

// Desenha surface surface_01 - água:
if esta_na_agua
{
    surface_set_target(surface_01);
    
 shader_set(shader_agua);
 
 draw_surface(CUSTOM_SURFACE, 0, 0);
 
 shader_reset()
    
    surface_reset_target();
    
    // Copia surface nova pra surface atual
 surface_copy(CUSTOM_SURFACE, 0, 0, surface_01);
 
 // Deleta surface_01
 surface_free(surface_01);
}
// Desenha surface surface_02 - água:
if esta_morto
{
    surface_set_target(surface_02);
    
 shader_set(shader_preto_e_branco);
 
 draw_surface(CUSTOM_SURFACE, 0, 0);
 
 shader_reset()
    
    surface_reset_target();
    
    // Copia surface nova pra surface atual
 surface_copy(CUSTOM_SURFACE, 0, 0, surface_02);
 
 // Deleta surface_02
 surface_free(surface_02);
}


DEU CERTO!!! Me ajudou muito Alex, faz tempo que eu queria saber como mesclar um Shader, eu não sabia que era só colar o código de um shader no final do void()

OLHA:

Imagem

No caso da imagem, eu mesclei o HQ4X e o Escala de Cinzas.

VALEU MESMO!

Trancado

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes