From 1a85f6398fe62f8879675ace2401bb7d1a4ff4c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Braz?= Date: Wed, 29 Mar 2023 10:17:15 -0300 Subject: Use MODELVIEW_MATRIX for vertex transform when double precision is enabled This commit updates the double precision vertex transform code from using the MODEL_MATRIX to now use the MODELVIEW_MATRIX instead. This can be made possible by transforming the MODELVIEW_MATRIX back into model space (ie, same space as the MODEL_MATRIX) and then using it as if it were the MODEL_MATRIX. With this in place we now properly handle VERTEX transformations that a Material Shader might do, such as billboard-ing. (cherry picked from commit 63c6f0b93ccc0f016b6b6ff7833c31371059a782) --- .../shaders/forward_clustered/scene_forward_clustered.glsl | 2 +- .../renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) (limited to 'servers') 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 c8ad1f0312..0098b13d5b 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 @@ -360,7 +360,7 @@ void vertex_shader(in uint instance_index, in bool is_multimesh, in uint multime vertex = mat3(matrix) * vertex; model_origin = double_add_vec3(model_origin, model_precision, matrix[3].xyz, vec3(0.0), model_precision); } - vertex = mat3(model_matrix) * vertex; + vertex = mat3(inv_view_matrix * modelview) * vertex; vec3 temp_precision; // Will be ignored. vertex += double_add_vec3(model_origin, model_precision, scene_data.inv_view_matrix[3].xyz, view_precision, temp_precision); vertex = mat3(scene_data.view_matrix) * vertex; 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 a8b28bbd4f..80f05e7121 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 @@ -347,8 +347,6 @@ void main() { #CODE : VERTEX } - /* output */ - // using local coordinates (default) #if !defined(SKIP_TRANSFORM_USED) && !defined(VERTEX_WORLD_COORDS_USED) @@ -361,7 +359,7 @@ void main() { vertex = mat3(matrix) * vertex; model_origin = double_add_vec3(model_origin, model_precision, matrix[3].xyz, vec3(0.0), model_precision); } - vertex = mat3(model_matrix) * vertex; + vertex = mat3(inv_view_matrix * modelview) * vertex; vec3 temp_precision; vertex += double_add_vec3(model_origin, model_precision, scene_data.inv_view_matrix[3].xyz, view_precision, temp_precision); vertex = mat3(scene_data.view_matrix) * vertex; -- cgit v1.2.3