Gradient Color Fog

This is an attempt of implementing Harry Alisavakis multi-color fog shader using Godot.

A demo scene is published here.

Shader code
shader_type spatial;
render_mode unshaded;

uniform sampler2D gradient: hint_albedo;
uniform float fog_intensity:  hint_range(0.0, 1.0);
uniform float fog_amount: hint_range(0.0, 1.0);

void vertex() {
	POSITION = vec4(VERTEX,	1.0);
}

void fragment() {
	vec4 original = texture(SCREEN_TEXTURE, SCREEN_UV);
	
	float depth = texture(DEPTH_TEXTURE, SCREEN_UV).x;
	vec3 ndc= vec3(SCREEN_UV, depth) * 2.0 - 1.0;
	vec4 view = INV_PROJECTION_MATRIX* vec4(ndc, 1.0);
	view.xyz /= view.w;
	depth = -view.z;
	
	float fog = depth * fog_amount;
	
	vec4 fog_color = texture(gradient, vec2(fog, 0.0));
	if (depth > 1.0)
		ALBEDO =  mix(original.rgb, fog_color.rgb, fog_color.a * fog_intensity);
	else
		ALBEDO = fog_color.rgb;
}
Tags
Fog, Spatial

Related shaders

Gradient Color Correction for ViewportTextures

2D Fog Overlay

color splash (show only one color)

The shader code and all code snippets in this post are under CC0 license and can be used freely without the author's permission. Images and videos, and assets depicted in those, do not fall under this license. For more info, see our License terms.
guest
2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Krystof
5 months ago

Very easy to implement and a fantastic effect. Thanks!

riverbank
riverbank
5 months ago

how do i add this to my game?