godot shader参考

原理是获取图像的A通道进行膨胀+高斯模糊+uv移动旋转

shader_type canvas_item;
 
uniform vec2 offset;
uniform float rotation;
 
uniform int blursize;
uniform float shadow_size;
 
float normpdf(in float x, in float sigma){
    return 0.39894*exp(-.5*x*x/(sigma*sigma))/sigma;
}
 
vec4 gaussian_blur(sampler2D src, vec2 size, vec2 uv, int m_size){
    vec4 cc = texture(src, uv);
    vec3 c = cc.rgb;
    int k_size = (m_size-1)/2;
    float sigma = 7.;
    vec3 final_color = vec3(0.);
    float z = 0.;
    for(int i=-k_size;i<=k_size;i++){
        float n = normpdf(float(i), sigma);
        z+=n;
        for(int j=-k_size;j<=k_size;j++){
            final_color+=n*n*texture(src,uv+size*vec2(float(i),float(j))).rgb;
        }
    }
    return vec4(final_color/z/z,1.);
}
 
void fragment() {
    // 获取当前像素的坐标
    vec2 uv = UV;
 
    // 获取原始图像的Alpha通道值
    vec4 originalTex = textureLod(TEXTURE, uv, 0.0);
    float alpha = originalTex.a;
 
    // 计算投影坐标
    vec2 projectedUV = vec2(uv.x + offset.x, uv.y + offset.y);
    projectedUV = vec2(
        cos(rotation) * (projectedUV.x - uv.x) - sin(rotation) * (projectedUV.y - uv.y) + uv.x,
        sin(rotation) * (projectedUV.x - uv.x) + cos(rotation) * (projectedUV.y - uv.y) + uv.y
    );
 
    // 获取投影位置的纹理采样值
    //vec4 projectedTex = textureLod(TEXTURE, projectedUV, 0.0);
	vec4 projectedTex = gaussian_blur(TEXTURE ,TEXTURE_PIXEL_SIZE ,projectedUV , blursize);
 
    // 使用原始图像的Alpha通道值创建投影形状
    vec4 projection = vec4(0.0, 0.0, 0.0, projectedTex.r * shadow_size);
 
    // 将当前像素的颜色设置为原始图像和投影形状的混合
	//COLOR = max(projection, originalTex);
	
	COLOR = originalTex;
	if (COLOR.a <= 0.5){
		COLOR.a = COLOR.a + projection.a;
		COLOR.rgb = projection.rgb
	}
}

左图是原图,右图是shader的效果
有点像PS的混合选项,因为shader无法栅格化,所以有需求的话可以加入opencv对图像进行处理。

相关推荐

  1. Yonbuilder参考

    2024-03-17 16:34:02       12 阅读
  2. ElasticSearch 数据备份参考

    2024-03-17 16:34:02       37 阅读
  3. 算子开发参考

    2024-03-17 16:34:02       36 阅读
  4. SQL 快速参考手册

    2024-03-17 16:34:02       34 阅读
  5. CSS参考手册

    2024-03-17 16:34:02       34 阅读
  6. godot shader参考

    2024-03-17 16:34:02       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 16:34:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 16:34:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 16:34:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 16:34:02       18 阅读

热门阅读

  1. http postman

    2024-03-17 16:34:02       19 阅读
  2. 威联通QNAP+Docker+路由侠实现内网穿透

    2024-03-17 16:34:02       33 阅读
  3. 面向对象的特征

    2024-03-17 16:34:02       19 阅读
  4. CSS万字学习总结

    2024-03-17 16:34:02       17 阅读
  5. 动手学习深度学习之环境配置

    2024-03-17 16:34:02       20 阅读
  6. python实现多进程循环共享内存队列

    2024-03-17 16:34:02       18 阅读
  7. 会议室预约系统优化(蓝桥杯)

    2024-03-17 16:34:02       19 阅读
  8. SeAndroid 安全策略机制

    2024-03-17 16:34:02       17 阅读
  9. Android init.rc 解析

    2024-03-17 16:34:02       19 阅读
  10. spring redis 工具类

    2024-03-17 16:34:02       18 阅读
  11. [c++] lambda 表达式

    2024-03-17 16:34:02       18 阅读
  12. c语言:汽车时代

    2024-03-17 16:34:02       22 阅读