Skip to content

Commit ffe0b86

Browse files
committed
Add LIGHT_VERTEX to fragment shader
Adds a new variable to the fragment shader to specify the vertex position used when calculating lighting.
1 parent 780e1a5 commit ffe0b86

File tree

7 files changed

+48
-0
lines changed

7 files changed

+48
-0
lines changed

drivers/gles3/shaders/scene.glsl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1511,10 +1511,24 @@ void main() {
15111511
float alpha_antialiasing_edge = 0.0;
15121512
vec2 alpha_texture_coordinate = vec2(0.0, 0.0);
15131513
#endif // ALPHA_ANTIALIASING_EDGE_USED
1514+
1515+
#ifdef LIGHT_VERTEX_USED
1516+
vec3 light_vertex = vertex;
1517+
#endif //LIGHT_VERTEX_USED
1518+
15141519
{
15151520
#CODE : FRAGMENT
15161521
}
15171522

1523+
#ifdef LIGHT_VERTEX_USED
1524+
vertex = light_vertex;
1525+
#ifdef USE_MULTIVIEW
1526+
view = -normalize(vertex - eye_offset);
1527+
#else
1528+
view = -normalize(vertex);
1529+
#endif //USE_MULTIVIEW
1530+
#endif //LIGHT_VERTEX_USED
1531+
15181532
#ifndef USE_SHADOW_TO_OPACITY
15191533

15201534
#if defined(ALPHA_SCISSOR_USED)

drivers/gles3/storage/material_storage.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,6 +1274,7 @@ MaterialStorage::MaterialStorage() {
12741274
actions.renames["CUSTOM2"] = "custom2_attrib";
12751275
actions.renames["CUSTOM3"] = "custom3_attrib";
12761276
actions.renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB";
1277+
actions.renames["LIGHT_VERTEX"] = "light_vertex";
12771278

12781279
actions.renames["NODE_POSITION_WORLD"] = "model_matrix[3].xyz";
12791280
actions.renames["CAMERA_POSITION_WORLD"] = "scene_data.inv_view_matrix[3].xyz";
@@ -1320,6 +1321,7 @@ MaterialStorage::MaterialStorage() {
13201321
actions.usage_defines["COLOR"] = "#define COLOR_USED\n";
13211322
actions.usage_defines["INSTANCE_CUSTOM"] = "#define ENABLE_INSTANCE_CUSTOM\n";
13221323
actions.usage_defines["POSITION"] = "#define OVERRIDE_POSITION\n";
1324+
actions.usage_defines["LIGHT_VERTEX"] = "#define LIGHT_VERTEX_USED\n";
13231325

13241326
actions.usage_defines["ALPHA_SCISSOR_THRESHOLD"] = "#define ALPHA_SCISSOR_USED\n";
13251327
actions.usage_defines["ALPHA_HASH_SCALE"] = "#define ALPHA_HASH_USED\n";

servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,7 @@ void SceneShaderForwardClustered::init(const String p_defines) {
624624
actions.renames["CUSTOM2"] = "custom2_attrib";
625625
actions.renames["CUSTOM3"] = "custom3_attrib";
626626
actions.renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB";
627+
actions.renames["LIGHT_VERTEX"] = "light_vertex";
627628

628629
actions.renames["NODE_POSITION_WORLD"] = "read_model_matrix[3].xyz";
629630
actions.renames["CAMERA_POSITION_WORLD"] = "scene_data.inv_view_matrix[3].xyz";
@@ -670,6 +671,7 @@ void SceneShaderForwardClustered::init(const String p_defines) {
670671
actions.usage_defines["COLOR"] = "#define COLOR_USED\n";
671672
actions.usage_defines["INSTANCE_CUSTOM"] = "#define ENABLE_INSTANCE_CUSTOM\n";
672673
actions.usage_defines["POSITION"] = "#define OVERRIDE_POSITION\n";
674+
actions.usage_defines["LIGHT_VERTEX"] = "#define LIGHT_VERTEX_USED\n";
673675

674676
actions.usage_defines["ALPHA_SCISSOR_THRESHOLD"] = "#define ALPHA_SCISSOR_USED\n";
675677
actions.usage_defines["ALPHA_HASH_SCALE"] = "#define ALPHA_HASH_USED\n";

servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,7 @@ void SceneShaderForwardMobile::init(const String p_defines) {
528528
actions.renames["CUSTOM2"] = "custom2_attrib";
529529
actions.renames["CUSTOM3"] = "custom3_attrib";
530530
actions.renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB";
531+
actions.renames["LIGHT_VERTEX"] = "light_vertex";
531532

532533
actions.renames["NODE_POSITION_WORLD"] = "read_model_matrix[3].xyz";
533534
actions.renames["CAMERA_POSITION_WORLD"] = "scene_data.inv_view_matrix[3].xyz";
@@ -574,6 +575,7 @@ void SceneShaderForwardMobile::init(const String p_defines) {
574575
actions.usage_defines["COLOR"] = "#define COLOR_USED\n";
575576
actions.usage_defines["INSTANCE_CUSTOM"] = "#define ENABLE_INSTANCE_CUSTOM\n";
576577
actions.usage_defines["POSITION"] = "#define OVERRIDE_POSITION\n";
578+
actions.usage_defines["LIGHT_VERTEX"] = "#define LIGHT_VERTEX\n";
577579

578580
actions.usage_defines["ALPHA_SCISSOR_THRESHOLD"] = "#define ALPHA_SCISSOR_USED\n";
579581
actions.usage_defines["ALPHA_HASH_SCALE"] = "#define ALPHA_HASH_USED\n";

servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,6 +1022,11 @@ void fragment_shader(in SceneData scene_data) {
10221022
inv_view_matrix[1][3] = 0.0;
10231023
inv_view_matrix[2][3] = 0.0;
10241024
#endif
1025+
1026+
#ifdef LIGHT_VERTEX_USED
1027+
vec3 light_vertex = vertex;
1028+
#endif //LIGHT_VERTEX_USED
1029+
10251030
mat4 read_view_matrix = scene_data.view_matrix;
10261031
vec2 read_viewport_size = scene_data.viewport_size;
10271032
{
@@ -1032,6 +1037,15 @@ void fragment_shader(in SceneData scene_data) {
10321037
transmittance_color.a *= sss_strength;
10331038
#endif
10341039

1040+
#ifdef LIGHT_VERTEX_USED
1041+
vertex = light_vertex;
1042+
#ifdef USE_MULTIVIEW
1043+
view = -normalize(vertex - eye_offset);
1044+
#else
1045+
view = -normalize(vertex);
1046+
#endif //USE_MULTIVIEW
1047+
#endif //LIGHT_VERTEX_USED
1048+
10351049
#ifndef USE_SHADOW_TO_OPACITY
10361050

10371051
#ifdef ALPHA_SCISSOR_USED

servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,13 +830,26 @@ void main() {
830830
inv_view_matrix[2][3] = 0.0;
831831
#endif
832832

833+
#ifdef LIGHT_VERTEX_USED
834+
vec3 light_vertex = vertex;
835+
#endif //LIGHT_VERTEX_USED
836+
833837
mat4 read_view_matrix = scene_data.view_matrix;
834838
vec2 read_viewport_size = scene_data.viewport_size;
835839

836840
{
837841
#CODE : FRAGMENT
838842
}
839843

844+
#ifdef LIGHT_VERTEX_USED
845+
vertex = light_vertex;
846+
#ifdef USE_MULTIVIEW
847+
view = -normalize(vertex - eye_offset);
848+
#else
849+
view = -normalize(vertex);
850+
#endif //USE_MULTIVIEW
851+
#endif //LIGHT_VERTEX_USED
852+
840853
#ifdef LIGHT_TRANSMITTANCE_USED
841854
#ifdef SSS_MODE_SKIN
842855
transmittance_color.a = sss_strength;

servers/rendering/shader_types.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ ShaderTypes::ShaderTypes() {
111111
shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["EYE_OFFSET"] = constt(ShaderLanguage::TYPE_VEC3);
112112

113113
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["VERTEX"] = constt(ShaderLanguage::TYPE_VEC3);
114+
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["LIGHT_VERTEX"] = ShaderLanguage::TYPE_VEC3;
114115
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["FRAGCOORD"] = constt(ShaderLanguage::TYPE_VEC4);
115116
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["FRONT_FACING"] = constt(ShaderLanguage::TYPE_BOOL);
116117
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["NORMAL"] = ShaderLanguage::TYPE_VEC3;

0 commit comments

Comments
 (0)