[Bf-blender-cvs] [3f0d85de052] soc-2021-uv-editor-improvements: Viewport normal drawing with constant length
Jeroen Bakker
noreply at git.blender.org
Mon Aug 9 03:24:39 CEST 2021
Commit: 3f0d85de052432b19a067fc38c283ad1d8c9dbf8
Author: Jeroen Bakker
Date: Wed Aug 4 10:52:51 2021 +0200
Branches: soc-2021-uv-editor-improvements
https://developer.blender.org/rB3f0d85de052432b19a067fc38c283ad1d8c9dbf8
Viewport normal drawing with constant length
Patch for: T37878
{F10169694}
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D11487
===================================================================
M release/datafiles/alert_icons.png
M release/datafiles/blender_icons.svg
A release/datafiles/blender_icons16/icon16_fixed_size.dat
M release/datafiles/blender_icons16/icon16_force_boid.dat
A release/datafiles/blender_icons32/icon32_fixed_size.dat
M release/datafiles/blender_icons32/icon32_force_boid.dat
M release/scripts/startup/bl_ui/space_view3d.py
M source/blender/blenloader/intern/versioning_300.c
M source/blender/blenloader/intern/versioning_defaults.c
M source/blender/draw/engines/overlay/overlay_edit_mesh.c
M source/blender/draw/engines/overlay/shaders/edit_mesh_normal_vert.glsl
M source/blender/editors/datafiles/CMakeLists.txt
M source/blender/editors/include/UI_icons.h
M source/blender/makesdna/DNA_view3d_defaults.h
M source/blender/makesdna/DNA_view3d_types.h
A source/blender/makesdna/DNA_view3d_types.h.rej
M source/blender/makesrna/intern/rna_space.c
===================================================================
diff --git a/release/datafiles/alert_icons.png b/release/datafiles/alert_icons.png
index e1cb671713f..0add7a3ccf8 100644
Binary files a/release/datafiles/alert_icons.png and b/release/datafiles/alert_icons.png differ
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" />
</g>
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal [...]
+ d="m 418.85321,140.04954 -2.82,-2.82 a 0.62,0.62 0 0 0 -0.4,-0.18 0.6,0.6 0 0 0 -0.6,0.6 0.62,0.62 0 0 0 0.18,0.43 l 1,1 -9.18,9.12 -1,-1 a 0.62,0.62 0 0 0 -0.4,-0.15 0.6,0.6 0 0 0 -0.6,0.6 0.62,0.62 0 0 0 0.18,0.4 l 2.82,2.82 a 0.6,0.6 0 0 0 0.82,-0.82 l -1,-1 9.18,-9.15 1,1 a 0.6,0.6 0 0 0 0.82,-0.85 z"
+ id="path3261"
+ inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
diff --git a/release/datafiles/blender_icons16/icon16_fixed_size.dat b/release/datafiles/blender_icons16/icon16_fixed_size.dat
new file mode 100644
index 00000000000..95a777e733f
Binary files /dev/null and b/release/datafiles/blender_icons16/icon16_fixed_size.dat differ
diff --git a/release/datafiles/blender_icons16/icon16_force_boid.dat b/release/datafiles/blender_icons16/icon16_force_boid.dat
index 71f89bd7c04..f719054d84a 100644
Binary files a/release/datafiles/blender_icons16/icon16_force_boid.dat and b/release/datafiles/blender_icons16/icon16_force_boid.dat differ
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 00000000000..a83e3755229
Binary files /dev/null and b/release/datafiles/blender_icons32/icon32_fixed_size.dat differ
diff --git a/release/datafiles/blender_icons32/icon32_force_boid.dat b/release/datafiles/blender_icons32/icon32_force_boid.dat
index 7fc7cb5ee8c..9043989024b 100644
Binary files a/release/datafiles/blender_icons32/icon32_force_boid.dat and b/release/datafiles/blender_icons32/icon32_force_boid.dat differ
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
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list