[Bf-blender-cvs] [02dbe3b0c78] blender2.8: Multires: Synchronize settings with Subsurf modifier

Sergey Sharybin noreply at git.blender.org
Tue Aug 14 12:03:18 CEST 2018


Commit: 02dbe3b0c78045abb49a32c562933b621f3aa0b1
Author: Sergey Sharybin
Date:   Tue Aug 14 11:45:26 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB02dbe3b0c78045abb49a32c562933b621f3aa0b1

Multires: Synchronize settings with Subsurf modifier

Currently no functional changes, just exposes all settings which we need
for OpenSubdiv, similar to what Subsurf modifier is doing already.

Reviewers: brecht

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D3602

===================================================================

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/blenkernel/intern/multires.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/editors/object/object_bake_api.c
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/modifiers/intern/MOD_multires.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 5dfd8994ed4..f865a7f7226 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -613,6 +613,8 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         col.prop(md, "levels", text="Preview")
         col.prop(md, "sculpt_levels", text="Sculpt")
         col.prop(md, "render_levels", text="Render")
+        if hasattr(md, "quality"):
+            col.prop(md, "quality")
 
         col = split.column()
 
@@ -621,7 +623,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         col.operator("object.multires_higher_levels_delete", text="Delete Higher")
         col.operator("object.multires_reshape", text="Reshape")
         col.operator("object.multires_base_apply", text="Apply Base")
-        col.prop(md, "use_subsurf_uv")
+        col.prop(md, "uv_smooth", text="")
         col.prop(md, "show_only_control_edges")
 
         layout.separator()
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 0774d65182f..bb261ec9590 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -884,7 +884,7 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, Scene *scene, Object
 	/* subdivide the mesh to highest level without displacements */
 	cddm = CDDM_from_mesh(me);
 	DM_set_only_copy(cddm, CD_MASK_BAREMESH);
-	origdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, 0, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0, false);
+	origdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, 0, 0, mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE, 0, false);
 	cddm->release(cddm);
 
 	/* calc disps */
@@ -925,7 +925,7 @@ static void multires_subdivide(
 		/* create subsurf DM from original mesh at high level */
 		cddm = CDDM_from_mesh(me);
 		DM_set_only_copy(cddm, CD_MASK_BAREMESH);
-		highdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, false);
+		highdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, simple, 0, mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE, has_mask, false);
 		ss = ((CCGDerivedMesh *)highdm)->ss;
 
 		/* create multires DM from original mesh at low level */
@@ -1246,7 +1246,7 @@ void multires_modifier_update_mdisps(struct DerivedMesh *dm, Scene *scene)
 			else cddm = CDDM_from_mesh(me);
 			DM_set_only_copy(cddm, CD_MASK_BAREMESH);
 
-			highdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, false);
+			highdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, mmd->simple, 0, mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE, has_mask, false);
 			ss = ((CCGDerivedMesh *)highdm)->ss;
 
 			/* create multires DM from original mesh and displacements */
@@ -1308,7 +1308,7 @@ void multires_modifier_update_mdisps(struct DerivedMesh *dm, Scene *scene)
 			else cddm = CDDM_from_mesh(me);
 			DM_set_only_copy(cddm, CD_MASK_BAREMESH);
 
-			subdm = subsurf_dm_create_local(scene, ob, cddm, mmd->totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, false);
+			subdm = subsurf_dm_create_local(scene, ob, cddm, mmd->totlvl, mmd->simple, 0, mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE, has_mask, false);
 			cddm->release(cddm);
 
 			multiresModifier_disp_run(dm, me, NULL, CALC_DISPLACEMENTS, subdm->getGridData(subdm), mmd->totlvl);
@@ -1390,7 +1390,7 @@ DerivedMesh *multires_make_derived_from_derived(DerivedMesh *dm,
 
 	result = subsurf_dm_create_local(scene, ob, dm, lvl,
 	                                 mmd->simple, mmd->flags & eMultiresModifierFlag_ControlEdges,
-	                                 mmd->flags & eMultiresModifierFlag_PlainUv,
+	                                 mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE,
 	                                 flags & MULTIRES_ALLOC_PAINT_MASK,
 	                                 render);
 
@@ -2214,7 +2214,7 @@ static void multires_apply_smat(struct Depsgraph *depsgraph, Scene *scene, Objec
 	MEM_freeN(vertCos);
 
 	/* scaled ccgDM for tangent space of object with applied scale */
-	dm = subsurf_dm_create_local(scene, ob, cddm, high_mmd.totlvl, high_mmd.simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0, false);
+	dm = subsurf_dm_create_local(scene, ob, cddm, high_mmd.totlvl, high_mmd.simple, 0, mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE, 0, false);
 	cddm->release(cddm);
 
 	gridSize = dm->getGridSize(dm);
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index fbc98a594a2..fb579aff479 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -1840,12 +1840,13 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
 	}
 
 	{
+		/* Versioning code for Subsurf modifier. */
 		if (!DNA_struct_elem_find(fd->filesdna, "SubsurfModifier", "short", "uv_smooth")) {
 			for (Object *object = bmain->object.first; object != NULL; object = object->id.next) {
 				for (ModifierData *md = object->modifiers.first; md; md = md->next) {
 					if (md->type == eModifierType_Subsurf) {
 						SubsurfModifierData *smd = (SubsurfModifierData *)md;
-						if (smd->flags & eSubsurfModifierFlag_SubsurfUv) {
+						if (smd->flags & eSubsurfModifierFlag_SubsurfUv_DEPRECATED) {
 							smd->uv_smooth = SUBSURF_UV_SMOOTH_PRESERVE_CORNERS;
 						}
 						else {
@@ -1866,5 +1867,22 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
 				}
 			}
 		}
+		/* Versioning code for Multires modifier. */
+		if (!DNA_struct_elem_find(fd->filesdna, "MultiresModifier", "short", "quality")) {
+			for (Object *object = bmain->object.first; object != NULL; object = object->id.next) {
+				for (ModifierData *md = object->modifiers.first; md; md = md->next) {
+					if (md->type == eModifierType_Multires) {
+						MultiresModifierData *mmd = (MultiresModifierData *)md;
+						mmd->quality = 3;
+						if (mmd->flags & eMultiresModifierFlag_PlainUv_DEPRECATED) {
+							mmd->uv_smooth = SUBSURF_UV_SMOOTH_NONE;
+						}
+						else {
+							mmd->uv_smooth = SUBSURF_UV_SMOOTH_PRESERVE_CORNERS;
+						}
+					}
+				}
+			}
+		}
 	}
 }
diff --git a/source/blender/editors/object/object_bake_api.c b/source/blender/editors/object/object_bake_api.c
index e8fabdabf17..d0d82a8ccc7 100644
--- a/source/blender/editors/object/object_bake_api.c
+++ b/source/blender/editors/object/object_bake_api.c
@@ -792,7 +792,7 @@ static int bake(
 		mmd_low = (MultiresModifierData *) modifiers_findByType(ob_low, eModifierType_Multires);
 		if (mmd_low) {
 			mmd_flags_low = mmd_low->flags;
-			mmd_low->flags |= eMultiresModifierFlag_PlainUv;
+			mmd_low->uv_smooth = SUBSURF_UV_SMOOTH_NONE;
 		}
 	}
 
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 404e8d2d137..642e7d14869 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -140,7 +140,7 @@ typedef enum {
 	eSubsurfModifierFlag_DebugIncr    = (1 << 1),
 	eSubsurfModifierFlag_ControlEdges = (1 << 2),
 	/* DEPRECATED, ONLY USED FOR DO-VERSIONS */
-	eSubsurfModifierFlag_SubsurfUv    = (1 << 3),
+	eSubsurfModifierFlag_SubsurfUv_DEPRECATED    = (1 << 3),
 } SubsurfModifierFlag;
 
 typedef enum {
@@ -155,7 +155,7 @@ typedef enum {
 	SUBSURF_UV_SMOOTH_PRESERVE_CORNERS_JUNCTIONS_AND_CONCAVE = 3,
 	SUBSURF_UV_SMOOTH_PRESERVE_BOUNDARIES = 4,
 	SUBSURF_UV_SMOOTH_ALL = 5,
-} eSubsurfModifierUVSmooth;
+} eSubsurfUVSmooth;
 
 typedef struct SubsurfModifierData {
 	ModifierData modifier;
@@ -844,11 +844,15 @@ typedef struct MultiresModifierData {
 
 	char lvl, sculptlvl, renderlvl, totlvl;
 	char simple, flags, pad[2];
+	short quality;
+	short uv_smooth;
+	short pad2[2];
 } MultiresModifierData;
 
 typedef enum {
 	eMultiresModifierFlag_ControlEdges = (1 << 0),
-	eMultiresModifierFlag_PlainUv      = (1 << 1),
+	/* DEPRECATED, only used for versioning. */
+	eMultiresModifierFlag_PlainUv_DEPRECATED      = (1 << 1),
 } MultiresModifierFlag;
 
 typedef struct FluidsimModifierData {
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 50907503aca..2b0f22eb8fc 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -1176,6 +1176,7 @@ static void rna_ParticleInstanceModifier_particle_system_set(PointerRNA *ptr, co
 
 #else
 
+/* NOTE: *MUST* return subdivision_type property. */
 static PropertyRNA *rna_def_property_subdivision_common(StructRNA *srna, const char type[])
 {
 	static const EnumPropertyItem prop_subdivision_type_items[] = {
@@ -1184,17 +1185,6 @@ static PropertyRNA *rna_def_property_subdivision_common(StructRNA *srna, const c
 		{0, NULL, 0, NULL, NULL}
 	};
 
-	PropertyRNA *prop = RNA_def_property(srna, "subdivision_type", PROP_ENUM, PROP_NONE);
-	RNA_def_property_enum_sdna(prop, NULL, type);
-	RNA_def_property_enum_items(prop, prop_subdivision_type_items);
-	RNA_def_property_ui_text(prop, "Subdivision Type", "Select type of subdivision algorithm");
-	RNA_def_property_update(prop, 0, "rna_Modifier_update");
-
-	return prop;
-}
-
-static void rna_def_modifier_subsurf(BlenderRNA *brna)
-{
 	static const EnumPropertyItem prop_uv_smooth_items[] = {
 		{SUBSURF_UV_SMOOTH_NONE, "NONE", 0,
 		 "Sharp", "UVs are not smoothed, boundaries are kept sharp"},
@@ -1215,6 +1205,34 @@ static void rna_def_modifier_subsurf(BlenderRNA *brna)
 		{0, NULL, 0, NULL, NULL}
 	};
 
+	PropertyRNA *prop;
+
+	prop = RNA_def_property(srna, "uv_smooth", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "uv_smooth");
+	RNA_def_property_enum_items(prop, prop_uv_smooth_items);
+	RNA_def_property_ui_text(prop, "UV Smooth", "Controls how smoothing is applied to UVs");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+#ifdef WITH_OPENSUBDIV_MODIFIER
+	prop = RNA_def_property(srna, "quality", PROP_INT, PROP_UNSIGNED);
+	RNA_def_property_int_sdna(pr

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list