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:
No caso da imagem, eu mesclei o HQ4X e o Escala de Cinzas.
VALEU MESMO!
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
- Foxy Of Jungle
- Programador
- Reações: 0
- Mensagens: 153
- Localização: Brasil
- Contato:
[GAME MAKER STUDIO] 2 Shaders ao mesmo tempo
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?
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?
Re: [GAME MAKER STUDIO] 2 Shaders ao mesmo tempo Tópico resolvido
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:
Basta deixar assim:
Espero que ajude.
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;
}
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);
}
- Foxy Of Jungle
- Programador
- Reações: 0
- Mensagens: 153
- Localização: Brasil
- Contato:
Re: [GAME MAKER STUDIO] 2 Shaders ao mesmo tempo
[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.
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.
Re: [GAME MAKER STUDIO] 2 Shaders ao mesmo tempo
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):
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);
}
- Foxy Of Jungle
- Programador
- Reações: 0
- Mensagens: 153
- Localização: Brasil
- Contato:
Re: [GAME MAKER STUDIO] 2 Shaders ao mesmo tempo
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:
No caso da imagem, eu mesclei o HQ4X e o Escala de Cinzas.
VALEU MESMO!
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes