Nice work Brecht, thanks! :) -Nicholas
On Fri, Dec 11, 2009 at 10:30 AM, Brecht Van Lommel <[email protected]> wrote: > Revision: 25318 > > http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25318 > Author: blendix > Date: 2009-12-11 16:30:38 +0100 (Fri, 11 Dec 2009) > > Log Message: > ----------- > 2.5 Sculpt Branch Merge > > http://www.blender.org/development/release-logs/blender-250/sculpt-and-multiresolution/ > > Release logs are work in progress, also check missing items on that > page, there's still a few things that need work. > > Quick summary of the changes: > > * Use BVH for optimizing sculpt mode, doing only editing and updates > on nearby nodes. > * Memory reduction by use of CCG grids for subsurf, own undo stack, > no vertex-face map, no origindex, .. . > * Multithreading for sculpting, multires, and subsurf. > * Optional external file storage for multires displacements. > * Various tweaks to brush behavior. > > Modified Paths: > -------------- > trunk/blender/release/scripts/op/object.py > trunk/blender/release/scripts/ui/properties_data_modifier.py > trunk/blender/release/scripts/ui/space_view3d_toolbar.py > trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h > trunk/blender/source/blender/blenkernel/BKE_blender.h > trunk/blender/source/blender/blenkernel/BKE_customdata.h > trunk/blender/source/blender/blenkernel/BKE_modifier.h > trunk/blender/source/blender/blenkernel/BKE_multires.h > trunk/blender/source/blender/blenkernel/BKE_paint.h > trunk/blender/source/blender/blenkernel/BKE_subsurf.h > trunk/blender/source/blender/blenkernel/BKE_utildefines.h > trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c > trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.h > trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c > trunk/blender/source/blender/blenkernel/intern/brush.c > trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c > trunk/blender/source/blender/blenkernel/intern/constraint.c > trunk/blender/source/blender/blenkernel/intern/customdata.c > trunk/blender/source/blender/blenkernel/intern/displist.c > trunk/blender/source/blender/blenkernel/intern/lattice.c > trunk/blender/source/blender/blenkernel/intern/modifier.c > trunk/blender/source/blender/blenkernel/intern/multires.c > trunk/blender/source/blender/blenkernel/intern/object.c > trunk/blender/source/blender/blenkernel/intern/paint.c > trunk/blender/source/blender/blenkernel/intern/particle.c > trunk/blender/source/blender/blenkernel/intern/particle_system.c > trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c > trunk/blender/source/blender/blenlib/CMakeLists.txt > trunk/blender/source/blender/blenlib/SConscript > trunk/blender/source/blender/blenloader/intern/readfile.c > trunk/blender/source/blender/blenloader/intern/writefile.c > trunk/blender/source/blender/editors/include/ED_sculpt.h > trunk/blender/source/blender/editors/include/ED_view3d.h > trunk/blender/source/blender/editors/mesh/editface.c > trunk/blender/source/blender/editors/object/object_intern.h > trunk/blender/source/blender/editors/object/object_modifier.c > trunk/blender/source/blender/editors/object/object_ops.c > trunk/blender/source/blender/editors/physics/particle_edit.c > trunk/blender/source/blender/editors/sculpt_paint/paint_image.c > trunk/blender/source/blender/editors/sculpt_paint/paint_intern.h > trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c > trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c > trunk/blender/source/blender/editors/sculpt_paint/paint_utils.c > trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c > trunk/blender/source/blender/editors/sculpt_paint/sculpt.c > trunk/blender/source/blender/editors/sculpt_paint/sculpt_intern.h > trunk/blender/source/blender/editors/space_file/file_draw.c > trunk/blender/source/blender/editors/space_file/filelist.c > trunk/blender/source/blender/editors/space_file/filesel.c > trunk/blender/source/blender/editors/space_view3d/drawobject.c > trunk/blender/source/blender/editors/space_view3d/view3d_draw.c > trunk/blender/source/blender/editors/space_view3d/view3d_edit.c > trunk/blender/source/blender/editors/space_view3d/view3d_select.c > trunk/blender/source/blender/editors/space_view3d/view3d_view.c > trunk/blender/source/blender/editors/util/ed_util.c > trunk/blender/source/blender/editors/util/undo.c > trunk/blender/source/blender/gpu/gpu_buffers.h > trunk/blender/source/blender/gpu/intern/gpu_buffers.c > trunk/blender/source/blender/makesdna/DNA_brush_types.h > trunk/blender/source/blender/makesdna/DNA_customdata_types.h > trunk/blender/source/blender/makesdna/DNA_meshdata_types.h > trunk/blender/source/blender/makesdna/DNA_modifier_types.h > trunk/blender/source/blender/makesdna/DNA_scene_types.h > trunk/blender/source/blender/makesdna/DNA_space_types.h > trunk/blender/source/blender/makesdna/DNA_view3d_types.h > trunk/blender/source/blender/makesrna/intern/rna_brush.c > trunk/blender/source/blender/makesrna/intern/rna_modifier.c > trunk/blender/source/blender/makesrna/intern/rna_sculpt_paint.c > trunk/blender/source/blender/render/intern/source/convertblender.c > trunk/blender/source/blender/windowmanager/intern/wm_files.c > trunk/blender/source/blender/windowmanager/intern/wm_operators.c > > Added Paths: > ----------- > trunk/blender/source/blender/blenkernel/BKE_customdata_file.h > trunk/blender/source/blender/blenkernel/intern/customdata_file.c > trunk/blender/source/blender/blenlib/BLI_pbvh.h > trunk/blender/source/blender/blenlib/intern/pbvh.c > trunk/blender/source/blender/editors/sculpt_paint/paint_undo.c > > Modified: trunk/blender/release/scripts/op/object.py > =================================================================== > --- trunk/blender/release/scripts/op/object.py 2009-12-11 15:02:46 UTC (rev > 25317) > +++ trunk/blender/release/scripts/op/object.py 2009-12-11 15:30:38 UTC (rev > 25318) > @@ -75,16 +75,16 @@ > row.prop(props, "extend") > > > -class SubsurfSet(bpy.types.Operator): > +class SubdivisionSet(bpy.types.Operator): > '''Sets a Subdivision Surface Level (1-5)''' > > - bl_idname = "object.subsurf_set" > - bl_label = "Subsurf Set" > + bl_idname = "object.subdivision_set" > + bl_label = "Subdivision Set" > bl_register = True > bl_undo = True > > level = IntProperty(name="Level", > - default=1, min=0, max=6) > + default=1, min=0, max=100, soft_min=0, soft_max=6) > > def poll(self, context): > ob = context.active_object > @@ -94,7 +94,11 @@ > level = self.properties.level > ob = context.active_object > for mod in ob.modifiers: > - if mod.type == 'SUBSURF': > + if mod.type == 'MULTIRES' and ob.mode == 'SCULPT': > + if mod.sculpt_levels != level: > + mod.sculpt_levels = level > + return ('FINISHED',) > + elif mod.type == 'SUBSURF' or mod.type == 'MULTIRES': > if mod.levels != level: > mod.levels = level > return ('FINISHED',) > @@ -120,5 +124,6 @@ > > > bpy.ops.add(SelectPattern) > -bpy.ops.add(SubsurfSet) > +bpy.ops.add(SubdivisionSet) > bpy.ops.add(Retopo) > + > > Modified: trunk/blender/release/scripts/ui/properties_data_modifier.py > =================================================================== > --- trunk/blender/release/scripts/ui/properties_data_modifier.py > 2009-12-11 15:02:46 UTC (rev 25317) > +++ trunk/blender/release/scripts/ui/properties_data_modifier.py > 2009-12-11 15:30:38 UTC (rev 25318) > @@ -432,17 +432,34 @@ > layout.row().prop(md, "subdivision_type", expand=True) > else: > layout.row().prop(md, "subdivision_type", text="") > - layout.prop(md, "level") > > split = layout.split() > - > col = split.column() > - col.operator("object.multires_subdivide", text="Subdivide") > + col.prop(md, "levels", text="Preview") > + col.prop(md, "sculpt_levels", text="Sculpt") > + col.prop(md, "render_levels", text="Render") > > if wide_ui: > col = split.column() > + > + col.enabled = ob.mode != 'EDIT' > + col.operator("object.multires_subdivide", text="Subdivide") > col.operator("object.multires_higher_levels_delete", text="Delete > Higher") > + col.prop(md, "optimal_display") > > + layout.separator() > + > + col = layout.column() > + row = col.row() > + if md.external: > + row.operator("object.multires_pack_external", text="Pack > External") > + row.label() > + row = col.row() > + row.prop(md, "filename", text="") > + else: > + row.operator("object.multires_save_external", text="Save > External...") > + row.label() > + > def PARTICLE_INSTANCE(self, layout, ob, md, wide_ui): > layout.prop(md, "object") > layout.prop(md, "particle_system_number", text="Particle System") > @@ -598,8 +615,7 @@ > if wide_ui: > col = split.column() > col.label(text="Options:") > - col.prop(md, "optimal_draw", text="Optimal Display") > - col.prop(md, "subsurf_uv") > + col.prop(md, "optimal_display") > > def SURFACE(self, layout, ob, md, wide_ui): > layout.label(text="See Fields panel.") > > Modified: trunk/blender/release/scripts/ui/space_view3d_toolbar.py > =================================================================== > --- trunk/blender/release/scripts/ui/space_view3d_toolbar.py 2009-12-11 > 15:02:46 UTC (rev 25317) > +++ trunk/blender/release/scripts/ui/space_view3d_toolbar.py 2009-12-11 > 15:30:38 UTC (rev 25318) > @@ -553,6 +553,9 @@ > if brush.sculpt_tool in ('DRAW', 'PINCH', 'INFLATE', 'LAYER', > 'CLAY'): > col.row().prop(brush, "direction", expand=True) > > + if brush.sculpt_tool in ('DRAW', 'INFLATE', 'LAYER'): > + col.prop(brush, "use_accumulate") > + > if brush.sculpt_tool == 'LAYER': > col.prop(brush, "use_persistent") > col.operator("sculpt.set_persistent_base") > @@ -695,8 +698,8 @@ > sculpt = context.tool_settings.sculpt > > col = layout.column() > - col.prop(sculpt, "partial_redraw", text="Partial Refresh") > col.prop(sculpt, "show_brush") > + col.prop(sculpt, "fast_navigate") > > split = self.layout.split() > > > Modified: trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h > =================================================================== > --- trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h 2009-12-11 > 15:02:46 UTC (rev 25317) > +++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h 2009-12-11 > 15:30:38 UTC (rev 25318) > @@ -60,12 +60,24 @@ > struct ColorBand; > struct GPUVertexAttribs; > struct GPUDrawObject; > +struct ListBase; > +struct PBVH; > > /* number of sub-elements each mesh element has (for interpolation) */ > #define SUB_ELEMS_VERT 0 > #define SUB_ELEMS_EDGE 2 > #define SUB_ELEMS_FACE 4 > > +typedef struct DMGridData { > + float co[3]; > + float no[3]; > +} DMGridData; > + > +typedef struct DMGridAdjacency { > + int index[4]; > + int rotation[4]; > +} DMGridAdjacency; > + > typedef struct DerivedMesh DerivedMesh; > struct DerivedMesh { > /* Private DerivedMesh data, only for internal DerivedMesh use */ > @@ -133,6 +145,13 @@ > void *(*getEdgeDataArray)(DerivedMesh *dm, int type); > void *(*getFaceDataArray)(DerivedMesh *dm, int type); > > + /* optional grid access for subsurf */ > + int (*getNumGrids)(DerivedMesh *dm); > + int (*getGridSize)(DerivedMesh *dm); > + DMGridData **(*getGridData)(DerivedMesh *dm); > + DMGridAdjacency *(*getGridAdjacency)(DerivedMesh *dm); > + int *(*getGridOffset)(DerivedMesh *dm); > + > /* Iterate over each mapped vertex in the derived mesh, calling the > * given function with the original vert and the mapped vert's new > * coordinate and normal. For historical reasons the normal can be > @@ -181,6 +200,14 @@ > /* Get vertex normal, undefined if index is not valid */ > void (*getVertNo)(DerivedMesh *dm, int index, float no_r[3]); > > + /* Get a map of vertices to faces > + */ > + struct ListBase *(*getFaceMap)(DerivedMesh *dm); > + > + /* Get the BVH used for paint modes > + */ > + struct PBVH *(*getPBVH)(struct Object *ob, DerivedMesh *dm); > + > /* Drawing Operations */ > > /* Draw all vertices as bgl points (no options) */ > @@ -205,8 +232,8 @@ > * > * Also called for *final* editmode DerivedMeshes > */ > - void (*drawFacesSolid)(DerivedMesh *dm, > - int (*setMaterial)(int, void *attribs)); > + void (*drawFacesSolid)(DerivedMesh *dm, float > (*partial_redraw_planes)[4], > + int fast, int (*setMaterial)(int, void > *attribs)); > > /* Draw all faces > * o If useTwoSided, draw front and back using col arrays > > Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h > =================================================================== > --- trunk/blender/source/blender/blenkernel/BKE_blender.h 2009-12-11 > 15:02:46 UTC (rev 25317) > +++ trunk/blender/source/blender/blenkernel/BKE_blender.h 2009-12-11 > 15:30:38 UTC (rev 25318) > @@ -43,7 +43,7 @@ > struct ReportList; > > #define BLENDER_VERSION 250 > -#define BLENDER_SUBVERSION 8 > +#define BLENDER_SUBVERSION 9 > > #define BLENDER_MINVERSION 250 > #define BLENDER_MINSUBVERSION 0 > > Modified: trunk/blender/source/blender/blenkernel/BKE_customdata.h > =================================================================== > --- trunk/blender/source/blender/blenkernel/BKE_customdata.h 2009-12-11 > 15:02:46 UTC (rev 25317) > +++ trunk/blender/source/blender/blenkernel/BKE_customdata.h 2009-12-11 > 15:30:38 UTC (rev 25318) > @@ -32,6 +32,7 @@ > #ifndef BKE_CUSTOMDATA_H > #define BKE_CUSTOMDATA_H > > +struct ID; > struct CustomData; > struct CustomDataLayer; > typedef unsigned int CustomDataMask; > @@ -278,4 +279,19 @@ > void CustomData_to_bmeshpoly(struct CustomData *fdata, struct CustomData > *pdata, struct CustomData *ldata); > void CustomData_from_bmeshpoly(struct CustomData *fdata, struct CustomData > *pdata, struct CustomData *ldata, int total); > void CustomData_bmesh_init_pool(struct CustomData *data, int allocsize); > + > +/* External file storage */ > + > +void CustomData_external_add(struct CustomData *data, > + struct ID *id, int type, int totelem, const char *filename); > +void CustomData_external_remove(struct CustomData *data, > + struct ID *id, int type, int totelem); > +int CustomData_external_test(struct CustomData *data, int type); > + > +void CustomData_external_write(struct CustomData *data, > + struct ID *id, CustomDataMask mask, int totelem, int free); > +void CustomData_external_read(struct CustomData *data, > + struct ID *id, CustomDataMask mask, int totelem); > + > #endif > + > > Copied: trunk/blender/source/blender/blenkernel/BKE_customdata_file.h (from > rev 25316, branches/sculpt25/source/blender/blenkernel/BKE_customdata_file.h) > =================================================================== > --- trunk/blender/source/blender/blenkernel/BKE_customdata_file.h > (rev 0) > +++ trunk/blender/source/blender/blenkernel/BKE_customdata_file.h > 2009-12-11 15:30:38 UTC (rev 25318) > @@ -0,0 +1,59 @@ > +/* > + * $Id$ > + * > + * ***** BEGIN GPL LICENSE BLOCK ***** > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License > + * as published by the Free Software Foundation; either version 2 > + * of the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software Foundation, > + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > + * > + * ***** END GPL LICENSE BLOCK ***** > + */ > + > +#ifndef BKE_CUSTOMDATA_FILE_H > +#define BKE_CUSTOMDATA_FILE_H > + > +#define CDF_TYPE_IMAGE 0 > +#define CDF_TYPE_MESH 1 > + > +#define CDF_LAYER_NAME_MAX 64 > + > +typedef struct CDataFile CDataFile; > +typedef struct CDataFileLayer CDataFileLayer; > + > > @@ Diff output truncated at 10240 characters. @@ > > _______________________________________________ > Bf-blender-cvs mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
