diff options
Diffstat (limited to 'servers/rendering/renderer_rd/shaders')
5 files changed, 35 insertions, 62 deletions
| diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl index 4119e98d15..8e33610ae2 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl @@ -6,6 +6,8 @@  #include "scene_forward_clustered_inc.glsl" +#define SHADER_IS_SRGB false +  /* INPUT ATTRIBS */  layout(location = 0) in vec3 vertex_attrib; @@ -358,6 +360,8 @@ void main() {  #VERSION_DEFINES +#define SHADER_IS_SRGB false +  /* Specialization Constants (Toggles) */  layout(constant_id = 0) const bool sc_use_forward_gi = false; @@ -691,7 +695,7 @@ void main() {  #endif // ALPHA_ANTIALIASING_EDGE_USED  #ifdef USE_OPAQUE_PREPASS -	if (alpha < opaque_prepass_threshold) { +	if (alpha < scene_data.opaque_prepass_threshold) {  		discard;  	}  #endif // USE_OPAQUE_PREPASS @@ -1529,7 +1533,7 @@ void main() {  			float size_A = sc_use_light_soft_shadows ? directional_lights.data[i].size : 0.0; -			light_compute(normal, directional_lights.data[i].direction, normalize(view), size_A, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0, +			light_compute(normal, directional_lights.data[i].direction, normalize(view), size_A, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0, albedo, alpha,  #ifdef LIGHT_BACKLIGHT_USED  					backlight,  #endif @@ -1540,7 +1544,7 @@ void main() {  					transmittance_z,  #endif  #ifdef LIGHT_RIM_USED -					rim, rim_tint, albedo, +					rim, rim_tint,  #endif  #ifdef LIGHT_CLEARCOAT_USED  					clearcoat, clearcoat_gloss, @@ -1548,9 +1552,6 @@ void main() {  #ifdef LIGHT_ANISOTROPY_USED  					binormal, tangent, anisotropy,  #endif -#ifdef USE_SHADOW_TO_OPACITY -					alpha, -#endif  					diffuse_light,  					specular_light);  		} @@ -1603,7 +1604,7 @@ void main() {  				shadow = blur_shadow(shadow); -				light_process_omni(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, +				light_process_omni(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, albedo, alpha,  #ifdef LIGHT_BACKLIGHT_USED  						backlight,  #endif @@ -1615,7 +1616,6 @@ void main() {  #ifdef LIGHT_RIM_USED  						rim,  						rim_tint, -						albedo,  #endif  #ifdef LIGHT_CLEARCOAT_USED  						clearcoat, clearcoat_gloss, @@ -1623,9 +1623,6 @@ void main() {  #ifdef LIGHT_ANISOTROPY_USED  						tangent, binormal, anisotropy,  #endif -#ifdef USE_SHADOW_TO_OPACITY -						alpha, -#endif  						diffuse_light, specular_light);  			}  		} @@ -1679,7 +1676,7 @@ void main() {  				shadow = blur_shadow(shadow); -				light_process_spot(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, +				light_process_spot(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, albedo, alpha,  #ifdef LIGHT_BACKLIGHT_USED  						backlight,  #endif @@ -1691,7 +1688,6 @@ void main() {  #ifdef LIGHT_RIM_USED  						rim,  						rim_tint, -						albedo,  #endif  #ifdef LIGHT_CLEARCOAT_USED  						clearcoat, clearcoat_gloss, @@ -1699,9 +1695,6 @@ void main() {  #ifdef LIGHT_ANISOTROPY_USED  						tangent, binormal, anisotropy,  #endif -#ifdef USE_SHADOW_TO_OPACITY -						alpha, -#endif  						diffuse_light, specular_light);  			}  		} @@ -1718,7 +1711,7 @@ void main() {  #ifdef USE_OPAQUE_PREPASS -	if (alpha < opaque_prepass_threshold) { +	if (alpha < scene_data.opaque_prepass_threshold) {  		discard;  	} diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl index c8489f2137..be29cf4f58 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl @@ -208,7 +208,8 @@ layout(set = 1, binding = 0, std140) uniform SceneData {  	float roughness_limiter_amount;  	float roughness_limiter_limit; -	uvec2 roughness_limiter_pad; +	float opaque_prepass_threshold; +	uint roughness_limiter_pad;  	mat4 sdf_to_bounds; diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl index b26489ddf1..d22f936a35 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl @@ -73,7 +73,7 @@ vec3 F0(float metallic, float specular, vec3 albedo) {  	return mix(vec3(dielectric), albedo, vec3(metallic));  } -void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float attenuation, vec3 f0, uint orms, float specular_amount, +void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float attenuation, vec3 f0, uint orms, float specular_amount, vec3 albedo, inout float alpha,  #ifdef LIGHT_BACKLIGHT_USED  		vec3 backlight,  #endif @@ -84,7 +84,7 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte  		float transmittance_z,  #endif  #ifdef LIGHT_RIM_USED -		float rim, float rim_tint, vec3 rim_color, +		float rim, float rim_tint,  #endif  #ifdef LIGHT_CLEARCOAT_USED  		float clearcoat, float clearcoat_gloss, @@ -92,9 +92,6 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte  #ifdef LIGHT_ANISOTROPY_USED  		vec3 B, vec3 T, float anisotropy,  #endif -#ifdef USE_SHADOW_TO_OPACITY -		inout float alpha, -#endif  		inout vec3 diffuse_light, inout vec3 specular_light) {  	vec4 orms_unpacked = unpackUnorm4x8(orms); @@ -171,7 +168,7 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte  #if defined(LIGHT_RIM_USED)  		float rim_light = pow(max(0.0, 1.0 - cNdotV), max(0.0, (1.0 - roughness) * 16.0)); -		diffuse_light += rim_light * rim * mix(vec3(1.0), rim_color, rim_tint) * light_color; +		diffuse_light += rim_light * rim * mix(vec3(1.0), albedo, rim_tint) * light_color;  #endif  #ifdef LIGHT_TRANSMITTANCE_USED @@ -577,7 +574,7 @@ float light_process_omni_shadow(uint idx, vec3 vertex, vec3 normal) {  	return 1.0;  } -void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 vertex_ddx, vec3 vertex_ddy, vec3 f0, uint orms, float shadow, +void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 vertex_ddx, vec3 vertex_ddy, vec3 f0, uint orms, float shadow, vec3 albedo, inout float alpha,  #ifdef LIGHT_BACKLIGHT_USED  		vec3 backlight,  #endif @@ -587,7 +584,7 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v  		float transmittance_boost,  #endif  #ifdef LIGHT_RIM_USED -		float rim, float rim_tint, vec3 rim_color, +		float rim, float rim_tint,  #endif  #ifdef LIGHT_CLEARCOAT_USED  		float clearcoat, float clearcoat_gloss, @@ -595,9 +592,6 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v  #ifdef LIGHT_ANISOTROPY_USED  		vec3 binormal, vec3 tangent, float anisotropy,  #endif -#ifdef USE_SHADOW_TO_OPACITY -		inout float alpha, -#endif  		inout vec3 diffuse_light, inout vec3 specular_light) {  	vec3 light_rel_vec = omni_lights.data[idx].position - vertex;  	float light_length = length(light_rel_vec); @@ -703,7 +697,7 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v  	light_attenuation *= shadow; -	light_compute(normal, normalize(light_rel_vec), eye_vec, size_A, color, light_attenuation, f0, orms, omni_lights.data[idx].specular_amount, +	light_compute(normal, normalize(light_rel_vec), eye_vec, size_A, color, light_attenuation, f0, orms, omni_lights.data[idx].specular_amount, albedo, alpha,  #ifdef LIGHT_BACKLIGHT_USED  			backlight,  #endif @@ -714,7 +708,7 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v  			transmittance_z,  #endif  #ifdef LIGHT_RIM_USED -			rim * omni_attenuation, rim_tint, rim_color, +			rim * omni_attenuation, rim_tint,  #endif  #ifdef LIGHT_CLEARCOAT_USED  			clearcoat, clearcoat_gloss, @@ -722,9 +716,6 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v  #ifdef LIGHT_ANISOTROPY_USED  			binormal, tangent, anisotropy,  #endif -#ifdef USE_SHADOW_TO_OPACITY -			alpha, -#endif  			diffuse_light,  			specular_light);  } @@ -823,7 +814,7 @@ vec2 normal_to_panorama(vec3 n) {  	return panorama_coords;  } -void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 vertex_ddx, vec3 vertex_ddy, vec3 f0, uint orms, float shadow, +void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 vertex_ddx, vec3 vertex_ddy, vec3 f0, uint orms, float shadow, vec3 albedo, inout float alpha,  #ifdef LIGHT_BACKLIGHT_USED  		vec3 backlight,  #endif @@ -833,7 +824,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v  		float transmittance_boost,  #endif  #ifdef LIGHT_RIM_USED -		float rim, float rim_tint, vec3 rim_color, +		float rim, float rim_tint,  #endif  #ifdef LIGHT_CLEARCOAT_USED  		float clearcoat, float clearcoat_gloss, @@ -841,9 +832,6 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v  #ifdef LIGHT_ANISOTROPY_USED  		vec3 binormal, vec3 tangent, float anisotropy,  #endif -#ifdef USE_SHADOW_TO_OPACITY -		inout float alpha, -#endif  		inout vec3 diffuse_light,  		inout vec3 specular_light) {  	vec3 light_rel_vec = spot_lights.data[idx].position - vertex; @@ -910,7 +898,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v  	}  	light_attenuation *= shadow; -	light_compute(normal, normalize(light_rel_vec), eye_vec, size_A, color, light_attenuation, f0, orms, spot_lights.data[idx].specular_amount, +	light_compute(normal, normalize(light_rel_vec), eye_vec, size_A, color, light_attenuation, f0, orms, spot_lights.data[idx].specular_amount, albedo, alpha,  #ifdef LIGHT_BACKLIGHT_USED  			backlight,  #endif @@ -921,7 +909,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v  			transmittance_z,  #endif  #ifdef LIGHT_RIM_USED -			rim * spot_attenuation, rim_tint, rim_color, +			rim * spot_attenuation, rim_tint,  #endif  #ifdef LIGHT_CLEARCOAT_USED  			clearcoat, clearcoat_gloss, @@ -929,9 +917,6 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v  #ifdef LIGHT_ANISOTROPY_USED  			binormal, tangent, anisotropy,  #endif -#ifdef USE_SHADOW_TO_OPACITY -			alpha, -#endif  			diffuse_light, specular_light);  } diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl index 2f5cc58619..e92fbecfd0 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl @@ -7,6 +7,8 @@  /* Include our forward mobile UBOs definitions etc. */  #include "scene_forward_mobile_inc.glsl" +#define SHADER_IS_SRGB false +  /* INPUT ATTRIBS */  layout(location = 0) in vec3 vertex_attrib; @@ -370,6 +372,8 @@ void main() {  #VERSION_DEFINES +#define SHADER_IS_SRGB false +  /* Specialization Constants */  #if !defined(MODE_RENDER_DEPTH) @@ -701,7 +705,7 @@ void main() {  #endif // ALPHA_ANTIALIASING_EDGE_USED  #ifdef USE_OPAQUE_PREPASS -	if (alpha < opaque_prepass_threshold) { +	if (alpha < scene_data.opaque_prepass_threshold) {  		discard;  	}  #endif // USE_OPAQUE_PREPASS @@ -1345,7 +1349,7 @@ void main() {  #endif  			blur_shadow(shadow); -			light_compute(normal, directional_lights.data[i].direction, normalize(view), 0.0, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0, +			light_compute(normal, directional_lights.data[i].direction, normalize(view), 0.0, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0, albedo, alpha,  #ifdef LIGHT_BACKLIGHT_USED  					backlight,  #endif @@ -1358,7 +1362,7 @@ void main() {  #endif  */  #ifdef LIGHT_RIM_USED -					rim, rim_tint, albedo, +					rim, rim_tint,  #endif  #ifdef LIGHT_CLEARCOAT_USED  					clearcoat, clearcoat_gloss, @@ -1369,9 +1373,6 @@ void main() {  #ifdef USE_SOFT_SHADOW  					directional_lights.data[i].size,  #endif -#ifdef USE_SHADOW_TO_OPACITY -					alpha, -#endif  					diffuse_light,  					specular_light);  		} @@ -1395,7 +1396,7 @@ void main() {  			shadow = blur_shadow(shadow); -			light_process_omni(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, +			light_process_omni(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, albedo, alpha,  #ifdef LIGHT_BACKLIGHT_USED  					backlight,  #endif @@ -1409,7 +1410,6 @@ void main() {  #ifdef LIGHT_RIM_USED  					rim,  					rim_tint, -					albedo,  #endif  #ifdef LIGHT_CLEARCOAT_USED  					clearcoat, clearcoat_gloss, @@ -1417,9 +1417,6 @@ void main() {  #ifdef LIGHT_ANISOTROPY_USED  					tangent, binormal, anisotropy,  #endif -#ifdef USE_SHADOW_TO_OPACITY -					alpha, -#endif  					diffuse_light, specular_light);  		}  	} //omni lights @@ -1443,7 +1440,7 @@ void main() {  			shadow = blur_shadow(shadow); -			light_process_spot(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, +			light_process_spot(light_index, vertex, view, normal, vertex_ddx, vertex_ddy, f0, orms, shadow, albedo, alpha,  #ifdef LIGHT_BACKLIGHT_USED  					backlight,  #endif @@ -1457,7 +1454,6 @@ void main() {  #ifdef LIGHT_RIM_USED  					rim,  					rim_tint, -					albedo,  #endif  #ifdef LIGHT_CLEARCOAT_USED  					clearcoat, clearcoat_gloss, @@ -1465,9 +1461,6 @@ void main() {  #ifdef LIGHT_ANISOTROPY_USED  					tangent, binormal, anisotropy,  #endif -#ifdef USE_SHADOW_TO_OPACITY -					alpha, -#endif  					diffuse_light, specular_light);  		}  	} //spot lights @@ -1483,7 +1476,7 @@ void main() {  #ifdef USE_OPAQUE_PREPASS -	if (alpha < opaque_prepass_threshold) { +	if (alpha < scene_data.opaque_prepass_threshold) {  		discard;  	} diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl index eb8fb49598..a9a4fce82a 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl @@ -168,7 +168,8 @@ layout(set = 1, binding = 0, std140) uniform SceneData {  	mediump float roughness_limiter_amount;  	mediump float roughness_limiter_limit; -	uvec2 roughness_limiter_pad; +	mediump float opaque_prepass_threshold; +	uint roughness_limiter_pad;  	bool fog_enabled;  	highp float fog_density; |