Godot Shader 07-屏幕着色

默认图片


SCREEN_TEXTURE 内建纹理

void fragment() {}
    COLOR = textureLod(SCREEN_TEXTURE, SCREEN_UV, 0.0);
}

一个不可见的对象,因为它只是显示了背后的东西。

对其后面的对象进行亮点饱和度处理

uniform float brightness = .5;
uniform float contrast = .5;
uniform float saturation = .5;

void fragment() {
    vec3 c = textureLod(SCREEN_TEXTURE, SCREEN_UV, 0.0).rgb;

    c.rgb = mix(vec3(0.0), c.rgb, brightness);
    c.rgb = mix(vec3(0.5), c.rgb, contrast);
    c.rgb = mix(vec3(dot(vec3(0.2125, 0.7154 ,0.0721), c.rgb) ), c.rgb, saturation);

    COLOR.rgb = c;
}

官方的例子公式是错误的~~

说明:
亮度 = 原像素亮度百分比
对比度 = (0.5-原像素)
对比度百分比+原像素
饱和度(官方错误) = (dot(1,原像素)/3-原像素)饱和度百分比+原像素
饱和度(实际) = (dot((0.2125,0.7154,0.0721,原像素)-原像素)
饱和度百分比+原像素
官方的饱和度虽然错了,但也有效果

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容