summaryrefslogtreecommitdiffstats
path: root/servers
diff options
context:
space:
mode:
authorjsjtxietian <jsjtxietian@outlook.com>2023-12-10 21:32:36 +0800
committerRémi Verschelde <rverschelde@gmail.com>2024-09-16 17:09:36 +0200
commit139f5ee15e3802e6416977e1b5880837a5d57d11 (patch)
treef27935cede1f389a0719085372d025eef9692f62 /servers
parentbd552ff60930bcc9c7d64ee76ed1c916efa07397 (diff)
downloadredot-engine-139f5ee15e3802e6416977e1b5880837a5d57d11.tar.gz
Add model_normal_matrix for fragment shader
(cherry picked from commit e698351db24df691dc5ea88a6b011c24dad77ebd)
Diffstat (limited to 'servers')
-rw-r--r--servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl7
-rw-r--r--servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl7
2 files changed, 14 insertions, 0 deletions
diff --git a/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl
index 67ee84b01b..59838f682f 100644
--- a/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl
+++ b/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl
@@ -1030,6 +1030,13 @@ void fragment_shader(in SceneData scene_data) {
vec3 light_vertex = vertex;
#endif //LIGHT_VERTEX_USED
+ mat3 model_normal_matrix;
+ if (bool(instances.data[instance_index].flags & INSTANCE_FLAGS_NON_UNIFORM_SCALE)) {
+ model_normal_matrix = transpose(inverse(mat3(read_model_matrix)));
+ } else {
+ model_normal_matrix = mat3(read_model_matrix);
+ }
+
mat4 read_view_matrix = scene_data.view_matrix;
vec2 read_viewport_size = scene_data.viewport_size;
{
diff --git a/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl
index 24568d7e94..e13c0ce827 100644
--- a/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl
+++ b/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl
@@ -839,6 +839,13 @@ void main() {
vec3 light_vertex = vertex;
#endif //LIGHT_VERTEX_USED
+ mat3 model_normal_matrix;
+ if (bool(instances.data[draw_call.instance_index].flags & INSTANCE_FLAGS_NON_UNIFORM_SCALE)) {
+ model_normal_matrix = transpose(inverse(mat3(read_model_matrix)));
+ } else {
+ model_normal_matrix = mat3(read_model_matrix);
+ }
+
mat4 read_view_matrix = scene_data.view_matrix;
vec2 read_viewport_size = scene_data.viewport_size;