Godot Shader 07-屏幕着色

默认图片


2068504-9e79c2f8b49cbc44.png

SCREEN_TEXTURE 内建纹理

void fragment() {}
    COLOR = textureLod(SCREEN_TEXTURE, SCREEN_UV, 0.0);
}
2068504-70c9558c28e0ade4.png

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

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

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;
}

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

2068504-c2b56224b32c37ae.png

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

猜你喜欢

转载自blog.csdn.net/weixin_34178244/article/details/90923514