Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPablo Dobarro <pablodp606@gmail.com>2020-11-18 14:16:43 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-11-18 14:20:57 +0300
commit4b55abc335558262c1c897738b159b7a0b0ef5f9 (patch)
tree052edeb6a25ff6162850b1759b5d30c29caa0464
parentdfa2b0e1c95bf72d58bbff9fb5c4045521af04d6 (diff)
Fix T82586: Sculpt normals not updating with EEVEE enabled
The root cause of this bug is that the function that updates the PBVH normals is drw_sculpt_generate_calls. As now both the overlays and mesh can be drawn without using pbvh drawing, the normals were not updating. This patch forces a normals updates also in the no PBVH drawing code path of the overlays. This was affecting both shading and sculpt surface sampling in both flat and smooth shading modes. Having the sculpt normals being updated by the drawing code is a wrong design which also causes other issues like: Brushes that sample the surface and do multiple stroke steps between redraws will sample invalid normals, creating artifacts during the stroke clearly visible in some brushes. Brushes that do not need to sample the surface update the normals on each redraw. This affects performance a lot as in some cases, updating the normals takes more time than doing the brush deformation. If flat shading is being used, this is only necessary to do once after the stroke ends. Reviewed By: fclem Differential Revision: https://developer.blender.org/D9535
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 7217be106ae..8e23199430a 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -51,6 +51,8 @@
#include "BKE_mesh_tangent.h"
#include "BKE_modifier.h"
#include "BKE_object_deform.h"
+#include "BKE_paint.h"
+#include "BKE_pbvh.h"
#include "atomic_ops.h"
@@ -1310,6 +1312,17 @@ void DRW_mesh_batch_cache_create_requested(struct TaskGraph *task_graph,
return;
}
+ /* TODO(pablodp606): This always updates the sculpt normals for regular drawing (non-PBVH).
+ * This makes tools that sample the surface per step get wrong normals until a redraw happens.
+ * Normal updates should be part of the brush loop and only run during the stroke when the
+ * brush needs to sample the surface. The drawing code should only update the normals
+ * per redraw when smooth shading is enabled. */
+ const bool do_update_sculpt_normals = ob->sculpt && ob->sculpt->pbvh;
+ if (do_update_sculpt_normals) {
+ Mesh *mesh = ob->data;
+ BKE_pbvh_update_normals(ob->sculpt->pbvh, mesh->runtime.subdiv_ccg);
+ }
+
cache->batch_ready |= batch_requested;
const bool do_cage = (is_editmode &&