【Godot】一个简单的阴影着色器(shader)

godot介绍

godot是当前较为热门的开源游戏引擎,在4.x版本选择兼容blender后在游戏引擎界有了一席之地,相比unity,虚幻等引擎,godot更加轻量,自由,代码的编写门槛更低,支持平台更加广泛(windows,linux,android等),是现在入坑游戏开发的更优选择。

阴影shader

shader使用前:

shader使用后:

shader_type canvas_item;

uniform vec4 shadow : hint_color;

void fragment(){
    float size_x = 1.0/float(textureSize(TEXTURE, 0).x) + 0.03;
    float size_y = 1.0/float(textureSize(TEXTURE, 0).y) + 0.03;
    vec4 sprite_color = texture(TEXTURE, UV);
    float alpha = -2.0 * sprite_color.a;
    alpha += texture(TEXTURE, UV + vec2(-size_x, -size_y)).a;
    COLOR = mix(sprite_color, shadow, clamp(alpha, 0.0, 1.0));
}

原理

定义四维颜色向量(rgba):shadow,分别设置size_x,size_y的偏移量(0.03),调用精灵形状UV为sprite_color,重新设置sprite_color的透明度为alpha,clamp为godot特有函数,clamp(A, a, b)表示A的下限为a,上限为b。

踩坑

gles2不支持部分shader语言,最后还是切换为了gles3。

瞎聊(没事可以看个乐子)

有人提醒可以用light2D节点代替,不过顺便用来学习一下shader也挺好,而且一个文本可以同时给多个精灵用,批量处理UI更加方便(大概吧)。godot教学资源还挺少的,好多东西要靠慢慢踩坑探索,我也有好多不理解的地方天天缠着群友求解。自从unity需要联网才能打开自己的文件后我对godot好感飙升,看着这个开源项目一点一点开始有自己的完整中译,教学搬运,自发建站,心里很是欣慰,希望我也能对这个社区做出点什么贡献吧(笑)。

展示一波最近在干些什么乱七八糟的东西。为了抢时间,这几天高强度打了几场web靶,连续测试了dirscanner,see-surf,htpwdscan,httpgerp,eazy,webpwn3r等脚本,同时负责项目、游戏开发,配乐,剧本,原画,之前发的爬虫脚本检查了好久没发现bug,一直拖到0.3.1才发现并修复了不能多关键词查询,arch虽好,但是不时会出现各种奇奇怪怪的小毛病,,不懂修复的我只能选择回溯,加上白天需要听各种鬼一样的数学课,实在有些精力憔悴。 每次接家人电话时强撑着表现自己生活得挺好,实际上每天睡眠严重不足,有一次睡了很久,梦见一个似乎是喜欢了很久的少女将我推出火车轨道,然后哭着醒过来,梦里的东西很快就记不清了,只剩下痛苦,虽然我只是一只了解一点电脑的单身狗,可能是读了海子的诗,整个人都感性了起来。 看了一下我上面写的东西感觉毫无逻辑,就像这几天折腾许久还是啥事都没做好,日常分享自己的颓废日常,嗯,差不多就是这样

godot·shader
246 views
Comments
登录后评论
Sign In

这个都支持什么语言啊,Java能不能用啊