From cb67bfdba2e22d0ee967e50afe0912ac80d73e9b Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Wed, 4 Aug 2021 10:52:51 +0200 Subject: [PATCH] Viewport normal drawing with constant length Patch for: T37878 {F10169694} Reviewed By: fclem Differential Revision: https://developer.blender.org/D11487 --- release/datafiles/alert_icons.png | Bin 24026 -> 25576 bytes release/datafiles/blender_icons.svg | 5 +++++ .../blender_icons16/icon16_fixed_size.dat | Bin 0 -> 1048 bytes .../blender_icons16/icon16_force_boid.dat | Bin 1048 -> 1048 bytes .../blender_icons32/icon32_fixed_size.dat | Bin 0 -> 4120 bytes .../blender_icons32/icon32_force_boid.dat | Bin 4120 -> 4120 bytes release/scripts/startup/bl_ui/space_view3d.py | 8 ++++++- .../blenloader/intern/versioning_300.c | 14 ++++++++++++ .../blenloader/intern/versioning_defaults.c | 1 + .../draw/engines/overlay/overlay_edit_mesh.c | 5 +++++ .../shaders/edit_mesh_normal_vert.glsl | 20 ++++++++++++++++-- .../blender/editors/datafiles/CMakeLists.txt | 1 + source/blender/editors/include/UI_icons.h | 2 +- source/blender/makesdna/DNA_view3d_defaults.h | 1 + source/blender/makesdna/DNA_view3d_types.h | 4 ++++ .../blender/makesdna/DNA_view3d_types.h.rej | 9 ++++++++ source/blender/makesrna/intern/rna_space.c | 15 +++++++++++++ 17 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 release/datafiles/blender_icons16/icon16_fixed_size.dat create mode 100644 release/datafiles/blender_icons32/icon32_fixed_size.dat create mode 100644 source/blender/makesdna/DNA_view3d_types.h.rej diff --git a/release/datafiles/alert_icons.png b/release/datafiles/alert_icons.png index e1cb671713f6e9086b492d80be1d7a6db34aafe9..0add7a3ccf855e004e15043173e7071e622b49de 100644 GIT binary patch literal 25576 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 literal 24026 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 Z18B$Dum7}a0Q9&4FsQalv65B5{{W3sfx7?z diff --git a/release/datafiles/blender_icons.svg b/release/datafiles/blender_icons.svg index f894ca3f298..54357550847 100644 --- a/release/datafiles/blender_icons.svg +++ b/release/datafiles/blender_icons.svg @@ -17301,6 +17301,11 @@ d="m 1800,348 h 3 v 14 h -3 z m -4,7 h 16 v 3 h -16 z" inkscape:connector-curvature="0" /> + rF%zoyE07K(RX8)vP_HZ0j2u$+!qijA3>Tm|pMjVXch~{-e+1%O znA=FDfqJQ7h9l6NPe7ap#Bo4;jtqC$1NDKz1C-XtNv9xt$Px# delta 20 ccmbQiF@s~nW=2NN$y*rh86R!_!l=Ro07?-C=Kufz diff --git a/release/datafiles/blender_icons32/icon32_fixed_size.dat b/release/datafiles/blender_icons32/icon32_fixed_size.dat new file mode 100644 index 0000000000000000000000000000000000000000..a83e3755229e42ea9dcec3b497bcc5122289c8ba GIT binary patch literal 4120 zcmeH}J4ysW5QZCcuizTEy08XDniyzeqBqdM_X)g)v6t}{n=C4euRzTdMGyra$oQ31 zNi+6l+cgvHz)$sy`u?tNm~Mv<+GuVpgdRE`r_(^AZ(s$AqF6>J=wRTYOcTm}CVr!C zCQLGIiTy}_F}X0qV1m7n0h3HwVoTjW(Pnb-kOxa_Irlpx9^TRVka7Rg!RRYb*mCb@ z(XEbs5VLw9{~_w3B{N66gKm)2K|E~OoL7W7gRYU?hb=F*aS|T3ZO$v=VH#aUb*O`f z9k2ZxN9%AI)u9RxE%J1OAa7^kiHA3BKM-BsbZ{on txpKwFJ#t}d4OZa2DBt@Xy$aXP+jZZ%cl$rNvz0IJ$u63g{^(0r;0L{NJdywa literal 0 HcmV?d00001 diff --git a/release/datafiles/blender_icons32/icon32_force_boid.dat b/release/datafiles/blender_icons32/icon32_force_boid.dat index 7fc7cb5ee8ca45304a05a9e6e49dc86f44b069e1..9043989024be2e3d6d1b218b91ffe3253dc060f9 100644 GIT binary patch delta 30 mcmbQCFhgO(X*O2D|NsAMPrkrb&3JRN4|_f1+0AFzeK-KpO$_@0 delta 30 mcmbQCFhgO(X*O1Y|NsB1Prkrb&3JXP4|_f1>CI=@eK-KovkdS6 diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index df41445ee6f..20b706f5004 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -6386,7 +6386,13 @@ class VIEW3D_PT_overlay_edit_mesh_normals(Panel): sub = row.row(align=True) sub.active = overlay.show_vertex_normals or overlay.show_face_normals or overlay.show_split_normals - sub.prop(overlay, "normals_length", text="Size") + if overlay.use_normals_constant_screen_size: + sub.prop(overlay, "normals_constant_screen_size", text="Size") + else: + sub.prop(overlay, "normals_length", text="Size") + + row.prop(overlay, "use_normals_constant_screen_size", text="", icon='FIXED_SIZE') + class VIEW3D_PT_overlay_edit_mesh_freestyle(Panel): diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c index f1f7f2edd35..7df4d2d93ec 100644 --- a/source/blender/blenloader/intern/versioning_300.c +++ b/source/blender/blenloader/intern/versioning_300.c @@ -708,5 +708,19 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain) */ { /* Keep this block, even when empty. */ + + if (!DNA_struct_elem_find( + fd->filesdna, "View3DOverlay", "float", "normals_constant_screen_size")) { + LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) { + LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { + LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) { + if (sl->spacetype == SPACE_VIEW3D) { + View3D *v3d = (View3D *)sl; + v3d->overlay.normals_constant_screen_size = 7.0f; + } + } + } + } + } } } diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c index 7ff624b44da..82c577d11a0 100644 --- a/source/blender/blenloader/intern/versioning_defaults.c +++ b/source/blender/blenloader/intern/versioning_defaults.c @@ -190,6 +190,7 @@ static void blo_update_defaults_screen(bScreen *screen, } /* Disable Curve Normals. */ v3d->overlay.edit_flag &= ~V3D_OVERLAY_EDIT_CU_NORMALS; + v3d->overlay.normals_constant_screen_size = 7.0f; } else if (area->spacetype == SPACE_CLIP) { SpaceClip *sclip = area->spacedata.first; diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.c b/source/blender/draw/engines/overlay/overlay_edit_mesh.c index a7ed6c777e8..3a2871249a2 100644 --- a/source/blender/draw/engines/overlay/overlay_edit_mesh.c +++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.c @@ -132,6 +132,11 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata) DRW_shgroup_uniform_float_copy(grp, "normalSize", v3d->overlay.normals_length); DRW_shgroup_uniform_float_copy(grp, "alpha", backwire_opacity); DRW_shgroup_uniform_texture_ref(grp, "depthTex", depth_tex); + DRW_shgroup_uniform_bool_copy(grp, + "isConstantScreenSizeNormals", + (flag & V3D_OVERLAY_EDIT_CONSTANT_SCREEN_SIZE_NORMALS) != 0); + DRW_shgroup_uniform_float_copy( + grp, "normalScreenSize", v3d->overlay.normals_constant_screen_size); } { /* Mesh Analysis Pass */ diff --git a/source/blender/draw/engines/overlay/shaders/edit_mesh_normal_vert.glsl b/source/blender/draw/engines/overlay/shaders/edit_mesh_normal_vert.glsl index 007495f84e0..f649a5cb3ed 100644 --- a/source/blender/draw/engines/overlay/shaders/edit_mesh_normal_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/edit_mesh_normal_vert.glsl @@ -1,5 +1,7 @@ uniform float normalSize; +uniform float normalScreenSize; +uniform bool isConstantScreenSizeNormals; uniform sampler2D depthTex; uniform float alpha = 1.0; @@ -49,11 +51,25 @@ void main() } vec3 n = normalize(normal_object_to_world(nor)); - vec3 world_pos = point_object_to_world(pos); if (gl_VertexID == 0) { - world_pos += n * normalSize; + if (isConstantScreenSizeNormals) { + bool is_persp = (ProjectionMatrix[3][3] == 0.0); + if (is_persp) + { + float dist_fac = length(cameraPos - world_pos); + float cos_fac = dot(cameraForward, cameraVec(world_pos)); + world_pos += n * normalScreenSize * dist_fac * cos_fac * pixelFac * sizePixel; + } + else { + float frustrum_fac = mul_project_m4_v3_zfac(n) * sizePixel; + world_pos += n * normalScreenSize * frustrum_fac; + } + } + else { + world_pos += n * normalSize; + } } gl_Position = point_world_to_ndc(world_pos); diff --git a/source/blender/editors/datafiles/CMakeLists.txt b/source/blender/editors/datafiles/CMakeLists.txt index beb22d43930..4af6e1bdcb8 100644 --- a/source/blender/editors/datafiles/CMakeLists.txt +++ b/source/blender/editors/datafiles/CMakeLists.txt @@ -583,6 +583,7 @@ set(ICON_NAMES uv_facesel uv_islandsel uv_sync_select + fixed_size transform_origins gizmo orientation_cursor diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index 7ccdc49d291..eb893fbe029 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -715,7 +715,7 @@ DEF_ICON(UV_ISLANDSEL) DEF_ICON(UV_SYNC_SELECT) DEF_ICON_BLANK(240) DEF_ICON_BLANK(241) -DEF_ICON_BLANK(242) +DEF_ICON(FIXED_SIZE) DEF_ICON(TRANSFORM_ORIGINS) DEF_ICON(GIZMO) DEF_ICON(ORIENTATION_CURSOR) diff --git a/source/blender/makesdna/DNA_view3d_defaults.h b/source/blender/makesdna/DNA_view3d_defaults.h index 9dfc37e57b1..c4d0c83b346 100644 --- a/source/blender/makesdna/DNA_view3d_defaults.h +++ b/source/blender/makesdna/DNA_view3d_defaults.h @@ -71,6 +71,7 @@ .gpencil_paper_opacity = 0.5f, \ .gpencil_grid_opacity = 0.9f, \ .gpencil_vertex_paint_opacity = 1.0f, \ + .normals_constant_screen_size = 7.0f, \ } #define _DNA_DEFAULT_View3DCursor \ diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 08b29c82707..4d88f6f0c15 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -204,6 +204,7 @@ typedef struct View3DOverlay { /** Edit mode settings. */ int edit_flag; float normals_length; + float normals_constant_screen_size; float backwire_opacity; /** Paint mode settings. */ @@ -238,6 +239,8 @@ typedef struct View3DOverlay { float gpencil_vertex_paint_opacity; /** Handles display type for curves. */ int handle_display; + + char _pad[4]; } View3DOverlay; /* View3DOverlay->handle_display */ @@ -551,6 +554,7 @@ enum { // V3D_OVERLAY_EDIT_CU_HANDLES = (1 << 20), V3D_OVERLAY_EDIT_CU_NORMALS = (1 << 21), + V3D_OVERLAY_EDIT_CONSTANT_SCREEN_SIZE_NORMALS = (1 << 22), }; /** #View3DOverlay.paint_flag */ diff --git a/source/blender/makesdna/DNA_view3d_types.h.rej b/source/blender/makesdna/DNA_view3d_types.h.rej new file mode 100644 index 00000000000..a62f1c4b7d3 --- /dev/null +++ b/source/blender/makesdna/DNA_view3d_types.h.rej @@ -0,0 +1,9 @@ +diff a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h (rejected hunks) +@@ -550,6 +553,7 @@ + /* V3D_OVERLAY_EDIT_CU_HANDLES = (1 << 20), */ + + V3D_OVERLAY_EDIT_CU_NORMALS = (1 << 21), ++ V3D_OVERLAY_EDIT_CONSTANT_SCREEN_SIZE_NORMALS = (1 << 22), + }; + + /** #View3DOverlay.paint_flag */ diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 796e62c8b2a..c7a5c43255a 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -4363,6 +4363,21 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) RNA_def_property_float_default(prop, 0.02); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); + prop = RNA_def_property(srna, "normals_constant_screen_size", PROP_FLOAT, PROP_PIXEL); + RNA_def_property_float_sdna(prop, NULL, "overlay.normals_constant_screen_size"); + RNA_def_property_ui_text(prop, "Normal Screen Size", "Screen size for normals in the 3D view"); + RNA_def_property_range(prop, 0.0, 100000.0); + RNA_def_property_ui_range(prop, 1.0, 100.0, 50, 0); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); + + prop = RNA_def_property(srna, "use_normals_constant_screen_size", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna( + prop, NULL, "overlay.edit_flag", V3D_OVERLAY_EDIT_CONSTANT_SCREEN_SIZE_NORMALS); + RNA_def_property_ui_text(prop, + "Constant Screen Size Normals", + "Keep size of normals constant in relation to 3D view"); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); + prop = RNA_def_property(srna, "backwire_opacity", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "overlay.backwire_opacity"); RNA_def_property_ui_text(prop, "Backwire Opacity", "Opacity when rendering transparent wires");