mirror of
https://github.com/godotengine/godot.git
synced 2024-11-21 03:18:37 +08:00
Merge pull request #17845 from JFonS/disable_spatial_shadows
Added flag on SpatialMaterial to disable shadows
This commit is contained in:
commit
3051bb8a81
@ -911,6 +911,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() {
|
||||
actions[VS::SHADER_SPATIAL].render_mode_defines["specular_phong"] = "#define SPECULAR_PHONG\n";
|
||||
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";
|
||||
|
||||
/* PARTICLES SHADER */
|
||||
|
||||
|
@ -1206,6 +1206,7 @@ void light_process_omni(int idx, vec3 vertex, vec3 eye_vec,vec3 normal,vec3 bino
|
||||
float omni_attenuation = pow( max(1.0 - normalized_distance, 0.0), omni_lights[idx].light_direction_attenuation.w );
|
||||
vec3 light_attenuation = vec3(omni_attenuation);
|
||||
|
||||
#if !defined(SHADOWS_DISABLED)
|
||||
if (omni_lights[idx].light_params.w>0.5) {
|
||||
//there is a shadowmap
|
||||
|
||||
@ -1252,6 +1253,7 @@ void light_process_omni(int idx, vec3 vertex, vec3 eye_vec,vec3 normal,vec3 bino
|
||||
#endif
|
||||
light_attenuation*=mix(omni_lights[idx].shadow_color_contact.rgb,vec3(1.0),shadow);
|
||||
}
|
||||
#endif //SHADOWS_DISABLED
|
||||
|
||||
light_compute(normal,normalize(light_rel_vec),eye_vec,binormal,tangent,omni_lights[idx].light_color_energy.rgb,light_attenuation,albedo,transmission,omni_lights[idx].light_params.z*p_blob_intensity,roughness,metallic,rim * omni_attenuation,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light);
|
||||
|
||||
@ -1270,6 +1272,7 @@ void light_process_spot(int idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 bi
|
||||
spot_attenuation*= 1.0 - pow( spot_rim, spot_lights[idx].light_params.x);
|
||||
vec3 light_attenuation = vec3(spot_attenuation);
|
||||
|
||||
#if !defined(SHADOWS_DISABLED)
|
||||
if (spot_lights[idx].light_params.w>0.5) {
|
||||
//there is a shadowmap
|
||||
highp vec4 splane=(spot_lights[idx].shadow_matrix * vec4(vertex,1.0));
|
||||
@ -1287,6 +1290,7 @@ void light_process_spot(int idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 bi
|
||||
#endif
|
||||
light_attenuation*=mix(spot_lights[idx].shadow_color_contact.rgb,vec3(1.0),shadow);
|
||||
}
|
||||
#endif //SHADOWS_DISABLED
|
||||
|
||||
light_compute(normal,normalize(light_rel_vec),eye_vec,binormal,tangent,spot_lights[idx].light_color_energy.rgb,light_attenuation,albedo,transmission,spot_lights[idx].light_params.z*p_blob_intensity,roughness,metallic,rim * spot_attenuation,rim_tint,clearcoat,clearcoat_gloss,anisotropy,diffuse_light,specular_light);
|
||||
|
||||
@ -1785,6 +1789,7 @@ FRAGMENT_SHADER_CODE
|
||||
|
||||
float depth_z = -vertex.z;
|
||||
#ifdef LIGHT_DIRECTIONAL_SHADOW
|
||||
#if !defined(SHADOWS_DISABLED)
|
||||
|
||||
#ifdef LIGHT_USE_PSSM4
|
||||
if (depth_z < shadow_split_offsets.w) {
|
||||
@ -1927,6 +1932,7 @@ FRAGMENT_SHADER_CODE
|
||||
}
|
||||
|
||||
|
||||
#endif // !defined(SHADOWS_DISABLED)
|
||||
#endif //LIGHT_DIRECTIONAL_SHADOW
|
||||
|
||||
#ifdef USE_VERTEX_LIGHTING
|
||||
|
@ -387,10 +387,12 @@ void SpatialMaterial::_update_shader() {
|
||||
if (flags[FLAG_USE_VERTEX_LIGHTING]) {
|
||||
code += ",vertex_lighting";
|
||||
}
|
||||
|
||||
if (flags[FLAG_TRIPLANAR_USE_WORLD] && (flags[FLAG_UV1_USE_TRIPLANAR] || flags[FLAG_UV2_USE_TRIPLANAR])) {
|
||||
code += ",world_vertex_coords";
|
||||
}
|
||||
if (flags[FLAG_DONT_RECEIVE_SHADOWS]) {
|
||||
code += ",shadows_disabled";
|
||||
}
|
||||
code += ";\n";
|
||||
|
||||
code += "uniform vec4 albedo : hint_color;\n";
|
||||
@ -1849,6 +1851,7 @@ void SpatialMaterial::_bind_methods() {
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_world_triplanar"), "set_flag", "get_flag", FLAG_TRIPLANAR_USE_WORLD);
|
||||
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_GROUP("Vertex Color", "vertex_color");
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "vertex_color_use_as_albedo"), "set_flag", "get_flag", FLAG_ALBEDO_FROM_VERTEX_COLOR);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "vertex_color_is_srgb"), "set_flag", "get_flag", FLAG_SRGB_VERTEX_COLOR);
|
||||
@ -2038,6 +2041,7 @@ void SpatialMaterial::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(FLAG_USE_ALPHA_SCISSOR);
|
||||
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_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(DIFFUSE_BURLEY);
|
||||
|
@ -188,6 +188,7 @@ public:
|
||||
FLAG_EMISSION_ON_UV2,
|
||||
FLAG_USE_ALPHA_SCISSOR,
|
||||
FLAG_ALBEDO_TEXTURE_FORCE_SRGB,
|
||||
FLAG_DONT_RECEIVE_SHADOWS,
|
||||
FLAG_MAX
|
||||
};
|
||||
|
||||
@ -236,7 +237,7 @@ private:
|
||||
uint64_t blend_mode : 2;
|
||||
uint64_t depth_draw_mode : 2;
|
||||
uint64_t cull_mode : 2;
|
||||
uint64_t flags : 14;
|
||||
uint64_t flags : 15;
|
||||
uint64_t detail_blend_mode : 2;
|
||||
uint64_t diffuse_mode : 3;
|
||||
uint64_t specular_mode : 2;
|
||||
|
@ -173,6 +173,8 @@ ShaderTypes::ShaderTypes() {
|
||||
shader_modes[VS::SHADER_SPATIAL].modes.insert("skip_vertex_transform");
|
||||
shader_modes[VS::SHADER_SPATIAL].modes.insert("world_vertex_coords");
|
||||
|
||||
shader_modes[VS::SHADER_SPATIAL].modes.insert("shadows_disabled");
|
||||
|
||||
shader_modes[VS::SHADER_SPATIAL].modes.insert("vertex_lighting");
|
||||
|
||||
/************ CANVAS ITEM **************************/
|
||||
|
Loading…
Reference in New Issue
Block a user