关于shader着色器的一个问题,求教大佬。
godot吧
全部回复
仅看楼主
level 13
使者丶n 楼主
第1张是背景,第2张是一个门的入口的特效图,第三张是D3D混合出来的结果图。
D3D的参数设置
g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
我想用Godot的Shader做出相同的效果,要怎么做呢?求教大佬。
2023年05月23日 13点05分 1
level 13
使者丶n 楼主
@雷伊盖亚0 @人类的大敌 大佬求教一下
2023年05月23日 13点05分 2
[乖]用3楼的方法就可以了。如果是4楼的效果的话,看起来好像只是透明度不一样而已,可以试试5楼的方法(也就是调整透明度)
2023年05月24日 09点05分
吧务
level 13
把特效的混合模式改成add能得到你要的效果。
2023年05月23日 14点05分 3
谢谢吧主,还有一问想请教一下,问题在4楼,直接用blend_add的发光不太对。
2023年05月24日 02点05分
level 13
使者丶n 楼主
第1,2张是动态光源图,第3张是背景,第4张是D3D渲染图,第5张是godot的blend_add模式。请教一下,godot的shader要怎么写呢?
g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_INVDESTCOLOR);
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
2023年05月24日 02点05分 4
level 9
add只能做简单的滤色,主要过滤掉黑色,因为黑色的rgb是0,颜色叠加后保留背景色,但是有些问题,最终混合颜色取决于叠加色,也就是说会越叠加越白,如果做简单的发光颜色还能凑合用,比如如果想做技能特效,技能特效就会根据背景变色,不合适,我的建议是写一个调色shader,但是看你d3d的代码应该只用了很简单的原理,你试着改改alpha透明度
2023年05月24日 03点05分 5
level 13
使者丶n 楼主
shader_type canvas_item;
// 声明screen_texture
uniform sampler2D screen_texture : hint_screen_texture;
void fragment() {
// 获取源颜色和目标颜色
vec4 src_color = texture(TEXTURE, UV);
vec4 dst_color = textureLod(screen_texture, SCREEN_UV, 0.0);
// 计算混合因子
vec4 src_factor = vec4(1.0) - dst_color;
vec4 dst_factor = vec4(1.0);
// 计算最终颜色
vec4 final_color = src_color * src_factor + dst_color * dst_factor;
// 输出最终颜色
COLOR = final_color;
}
谢谢大佬们,问题解决了,这是4.X的shader
2023年05月24日 11点05分 6
1