Merge pull request #89988 from LunaCapra/specular-occlusion

Add support for bent normal maps for specular occlusion and indirect lighting
This commit is contained in:
Thaddeus Crews
2025-05-14 09:44:06 -05:00
16 changed files with 240 additions and 92 deletions

View File

@ -1842,6 +1842,10 @@ void main() {
vec3 normal_map = vec3(0.5);
#endif
#if defined(BENT_NORMAL_MAP_USED)
vec3 bent_normal_map = vec3(0.5);
#endif
float normal_map_depth = 1.0;
vec2 screen_uv = gl_FragCoord.xy * scene_data.screen_pixel_size;

View File

@ -1253,6 +1253,7 @@ MaterialStorage::MaterialStorage() {
actions.renames["FRONT_FACING"] = "gl_FrontFacing";
actions.renames["NORMAL_MAP"] = "normal_map";
actions.renames["NORMAL_MAP_DEPTH"] = "normal_map_depth";
actions.renames["BENT_NORMAL_MAP"] = "bent_normal_map";
actions.renames["ALBEDO"] = "albedo";
actions.renames["ALPHA"] = "alpha";
actions.renames["PREMUL_ALPHA_FACTOR"] = "premul_alpha";
@ -1330,6 +1331,7 @@ MaterialStorage::MaterialStorage() {
actions.usage_defines["CUSTOM3"] = "#define CUSTOM3_USED\n";
actions.usage_defines["NORMAL_MAP"] = "#define NORMAL_MAP_USED\n";
actions.usage_defines["NORMAL_MAP_DEPTH"] = "@NORMAL_MAP";
actions.usage_defines["BENT_NORMAL_MAP"] = "#define BENT_NORMAL_MAP_USED\n";
actions.usage_defines["COLOR"] = "#define COLOR_USED\n";
actions.usage_defines["INSTANCE_CUSTOM"] = "#define ENABLE_INSTANCE_CUSTOM\n";
actions.usage_defines["POSITION"] = "#define OVERRIDE_POSITION\n";
@ -2904,6 +2906,7 @@ void SceneShaderData::set_code(const String &p_code) {
uses_screen_texture_mipmaps = false;
uses_depth_texture = false;
uses_normal_texture = false;
uses_bent_normal_texture = false;
uses_time = false;
uses_vertex_time = false;
uses_fragment_time = false;
@ -2977,6 +2980,7 @@ void SceneShaderData::set_code(const String &p_code) {
actions.usage_flag_pointers["ROUGHNESS"] = &uses_roughness;
actions.usage_flag_pointers["NORMAL"] = &uses_normal;
actions.usage_flag_pointers["NORMAL_MAP"] = &uses_normal;
actions.usage_flag_pointers["BENT_NORMAL_MAP"] = &uses_bent_normal_texture;
actions.usage_flag_pointers["POINT_SIZE"] = &uses_point_size;
actions.usage_flag_pointers["POINT_COORD"] = &uses_point_size;

View File

@ -305,6 +305,7 @@ struct SceneShaderData : public ShaderData {
bool uses_screen_texture_mipmaps;
bool uses_depth_texture;
bool uses_normal_texture;
bool uses_bent_normal_texture;
bool uses_time;
bool uses_vertex_time;
bool uses_fragment_time;