diff options
| author | Rémi Verschelde <rverschelde@gmail.com> | 2018-07-18 10:39:20 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-18 10:39:20 +0200 | 
| commit | bd9b8098fef50b034f71ae1942c74131a984f6ba (patch) | |
| tree | 9ae4c3704b435c334601b53fd1d88200fe1a0d95 | |
| parent | afb554afdfb6b7f8cf7b4ac3c618fc6dc9597cbb (diff) | |
| parent | 2ce1118faa453d622383c4bbb2bf797477317ad7 (diff) | |
Merge pull request #20140 from EIREXE/ambient_light_disable_shader
Add disable ambient light flag to shaders and materials
| -rw-r--r-- | drivers/gles3/shader_compiler_gles3.cpp | 1 | ||||
| -rw-r--r-- | drivers/gles3/shaders/scene.glsl | 56 | ||||
| -rw-r--r-- | scene/resources/material.cpp | 5 | ||||
| -rw-r--r-- | scene/resources/material.h | 3 | ||||
| -rw-r--r-- | servers/visual/shader_types.cpp | 1 | 
5 files changed, 35 insertions, 31 deletions
diff --git a/drivers/gles3/shader_compiler_gles3.cpp b/drivers/gles3/shader_compiler_gles3.cpp index 9ad16ac2a2..3f6fe3ec61 100644 --- a/drivers/gles3/shader_compiler_gles3.cpp +++ b/drivers/gles3/shader_compiler_gles3.cpp @@ -913,6 +913,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() {  	actions[VS::SHADER_SPATIAL].render_mode_defines["specular_toon"] = "#define SPECULAR_TOON\n";  	actions[VS::SHADER_SPATIAL].render_mode_defines["specular_disabled"] = "#define SPECULAR_DISABLED\n";  	actions[VS::SHADER_SPATIAL].render_mode_defines["shadows_disabled"] = "#define SHADOWS_DISABLED\n"; +	actions[VS::SHADER_SPATIAL].render_mode_defines["ambient_light_disabled"] = "#define AMBIENT_LIGHT_DISABLED\n";  	/* PARTICLES SHADER */ diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index ed8df04377..abb236138f 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -571,11 +571,6 @@ in vec3 normal_interp;  /* PBR CHANNELS */ -//used on forward mainly -uniform bool no_ambient_light; - - -  #ifdef USE_RADIANCE_MAP @@ -1752,42 +1747,43 @@ FRAGMENT_SHADER_CODE  #ifdef USE_RADIANCE_MAP -	if (no_ambient_light) { -		ambient_light=vec3(0.0,0.0,0.0); -	} else { -		{ - -			{ //read radiance from dual paraboloid +#ifdef AMBIENT_LIGHT_DISABLED +	ambient_light=vec3(0.0,0.0,0.0); +#else +	{ -				vec3 ref_vec = reflect(-eye_vec,normal); //2.0 * ndotv * normal - view; // reflect(v, n); -				ref_vec=normalize((radiance_inverse_xform * vec4(ref_vec,0.0)).xyz); -				vec3 radiance = textureDualParaboloid(radiance_map,ref_vec,roughness) * bg_energy; -				env_reflection_light = radiance; +		{ //read radiance from dual paraboloid -			} -			//no longer a cubemap -			//vec3 radiance = textureLod(radiance_cube, r, lod).xyz * ( brdf.x + brdf.y); +			vec3 ref_vec = reflect(-eye_vec,normal); //2.0 * ndotv * normal - view; // reflect(v, n); +			ref_vec=normalize((radiance_inverse_xform * vec4(ref_vec,0.0)).xyz); +			vec3 radiance = textureDualParaboloid(radiance_map,ref_vec,roughness) * bg_energy; +			env_reflection_light = radiance;  		} +		//no longer a cubemap +		//vec3 radiance = textureLod(radiance_cube, r, lod).xyz * ( brdf.x + brdf.y); + +	}  #ifndef USE_LIGHTMAP -		{ +	{ -			vec3 ambient_dir=normalize((radiance_inverse_xform * vec4(normal,0.0)).xyz); -			vec3 env_ambient=textureDualParaboloid(radiance_map,ambient_dir,1.0) * bg_energy; +		vec3 ambient_dir=normalize((radiance_inverse_xform * vec4(normal,0.0)).xyz); +		vec3 env_ambient=textureDualParaboloid(radiance_map,ambient_dir,1.0) * bg_energy; -			ambient_light=mix(ambient_light_color.rgb,env_ambient,radiance_ambient_contribution); -			//ambient_light=vec3(0.0,0.0,0.0); -		} -#endif +		ambient_light=mix(ambient_light_color.rgb,env_ambient,radiance_ambient_contribution); +		//ambient_light=vec3(0.0,0.0,0.0);  	} +#endif +#endif //AMBIENT_LIGHT_DISABLED  #else -	if (no_ambient_light){ -		ambient_light=vec3(0.0,0.0,0.0); -	} else { -		ambient_light=ambient_light_color.rgb; -	} +#ifdef AMBIENT_LIGHT_DISABLED +	ambient_light=vec3(0.0,0.0,0.0); +#else +	ambient_light=ambient_light_color.rgb; +#endif //AMBIENT_LIGHT_DISABLED +  #endif  	ambient_light*=ambient_energy; diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 90e103c96b..56b3ee70bb 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -404,6 +404,9 @@ void SpatialMaterial::_update_shader() {  	if (flags[FLAG_DONT_RECEIVE_SHADOWS]) {  		code += ",shadows_disabled";  	} +	if (flags[FLAG_DISABLE_AMBIENT_LIGHT]) { +		code += ",ambient_light_disabled"; +	}  	if (flags[FLAG_ENSURE_CORRECT_NORMALS]) {  		code += ",ensure_correct_normals";  	} @@ -1866,6 +1869,7 @@ void SpatialMaterial::_bind_methods() {  	ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_fixed_size"), "set_flag", "get_flag", FLAG_FIXED_SIZE);  	ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_albedo_tex_force_srgb"), "set_flag", "get_flag", FLAG_ALBEDO_TEXTURE_FORCE_SRGB);  	ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_do_not_receive_shadows"), "set_flag", "get_flag", FLAG_DONT_RECEIVE_SHADOWS); +	ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_disable_ambient_light"), "set_flag", "get_flag", FLAG_DISABLE_AMBIENT_LIGHT);  	ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_ensure_correct_normals"), "set_flag", "get_flag", FLAG_ENSURE_CORRECT_NORMALS);  	ADD_GROUP("Vertex Color", "vertex_color");  	ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "vertex_color_use_as_albedo"), "set_flag", "get_flag", FLAG_ALBEDO_FROM_VERTEX_COLOR); @@ -2057,6 +2061,7 @@ void SpatialMaterial::_bind_methods() {  	BIND_ENUM_CONSTANT(FLAG_TRIPLANAR_USE_WORLD);  	BIND_ENUM_CONSTANT(FLAG_ALBEDO_TEXTURE_FORCE_SRGB);  	BIND_ENUM_CONSTANT(FLAG_DONT_RECEIVE_SHADOWS); +	BIND_ENUM_CONSTANT(FLAG_DISABLE_AMBIENT_LIGHT);  	BIND_ENUM_CONSTANT(FLAG_ENSURE_CORRECT_NORMALS);  	BIND_ENUM_CONSTANT(FLAG_MAX); diff --git a/scene/resources/material.h b/scene/resources/material.h index 3b9d1be260..84f1005b03 100644 --- a/scene/resources/material.h +++ b/scene/resources/material.h @@ -192,6 +192,7 @@ public:  		FLAG_ALBEDO_TEXTURE_FORCE_SRGB,  		FLAG_DONT_RECEIVE_SHADOWS,  		FLAG_ENSURE_CORRECT_NORMALS, +		FLAG_DISABLE_AMBIENT_LIGHT,  		FLAG_MAX  	}; @@ -240,7 +241,7 @@ private:  			uint64_t blend_mode : 2;  			uint64_t depth_draw_mode : 2;  			uint64_t cull_mode : 2; -			uint64_t flags : 16; +			uint64_t flags : 17;  			uint64_t detail_blend_mode : 2;  			uint64_t diffuse_mode : 3;  			uint64_t specular_mode : 2; diff --git a/servers/visual/shader_types.cpp b/servers/visual/shader_types.cpp index 92786ea740..0de8676f32 100644 --- a/servers/visual/shader_types.cpp +++ b/servers/visual/shader_types.cpp @@ -176,6 +176,7 @@ ShaderTypes::ShaderTypes() {  	shader_modes[VS::SHADER_SPATIAL].modes.push_back("ensure_correct_normals");  	shader_modes[VS::SHADER_SPATIAL].modes.push_back("shadows_disabled"); +	shader_modes[VS::SHADER_SPATIAL].modes.push_back("ambient_light_disabled");  	shader_modes[VS::SHADER_SPATIAL].modes.push_back("vertex_lighting");  |