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:
Diffstat (limited to 'source/blender/blenkernel/intern/multires_reshape.h')
-rw-r--r--source/blender/blenkernel/intern/multires_reshape.h94
1 files changed, 44 insertions, 50 deletions
diff --git a/source/blender/blenkernel/intern/multires_reshape.h b/source/blender/blenkernel/intern/multires_reshape.h
index 9029d19ae88..deeb885e15a 100644
--- a/source/blender/blenkernel/intern/multires_reshape.h
+++ b/source/blender/blenkernel/intern/multires_reshape.h
@@ -36,6 +36,11 @@ struct Subdiv;
struct SubdivCCG;
typedef struct MultiresReshapeContext {
+ /* NOTE: Only available when context is initialized from object. */
+ struct Depsgraph *depsgraph;
+ struct Object *object;
+ struct MultiresModifierData *mmd;
+
/* Base mesh from original object.
* NOTE: Does NOT include any leading modifiers in it. */
struct Mesh *base_mesh;
@@ -132,9 +137,9 @@ typedef struct ReshapeConstGridElement {
float mask;
} ReshapeConstGridElement;
-/* -------------------------------------------------------------------- */
-/** \name Construct/destruct reshape context.
- * \{ */
+/* ================================================================================================
+ * Construct/destruct reshape context.
+ */
/* Create subdivision surface descriptor which is configured for surface evaluation at a given
* multires modifier. */
@@ -142,6 +147,9 @@ struct Subdiv *multires_reshape_create_subdiv(struct Depsgraph *depsgraph,
struct Object *object,
const struct MultiresModifierData *mmd);
+/* NOTE: Initialized base mesh to object's mesh, the Subdiv is created from the deformed
+ * mesh prior to the multires modifier if depsgraph is not NULL. If the depsgraph is NULL
+ * then Subdiv is created from base mesh (without any deformation applied). */
bool multires_reshape_context_create_from_object(MultiresReshapeContext *reshape_context,
struct Depsgraph *depsgraph,
struct Object *object,
@@ -159,11 +167,9 @@ bool multires_reshape_context_create_from_subdivide(MultiresReshapeContext *resh
void multires_reshape_context_free(MultiresReshapeContext *reshape_context);
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Helper accessors.
- * \{ */
+/* ================================================================================================
+ * Helper accessors.
+ */
/* For the given grid index get index of face it was created for. */
int multires_reshape_grid_to_face_index(const MultiresReshapeContext *reshape_context,
@@ -206,11 +212,9 @@ ReshapeGridElement multires_reshape_grid_element_for_ptex_coord(
ReshapeConstGridElement multires_reshape_orig_grid_element_for_grid_coord(
const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord);
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Sample limit surface of the base mesh.
- * \{ */
+/* ================================================================================================
+ * Sample limit surface of the base mesh.
+ */
/* Evaluate limit surface created from base mesh.
* This is the limit surface which defines tangent space for MDisps. */
@@ -219,20 +223,16 @@ void multires_reshape_evaluate_limit_at_grid(const MultiresReshapeContext *resha
float r_P[3],
float r_tangent_matrix[3][3]);
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Custom data preparation.
- * \{ */
+/* ================================================================================================
+ * Custom data preparation.
+ */
/* Make sure custom data is allocated for the given level. */
void multires_reshape_ensure_grids(struct Mesh *mesh, const int level);
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Functions specific to reshaping from a set of vertices in a object position.
- * \{ */
+/* ================================================================================================
+ * Functions specific to reshaping from a set of vertices in a object position.
+ */
/* Returns truth if all coordinates were assigned.
*
@@ -243,11 +243,9 @@ bool multires_reshape_assign_final_coords_from_vertcos(
const float (*vert_coords)[3],
const int num_vert_coords);
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Functions specific to reshaping from CCG.
- * \{ */
+/* ================================================================================================
+ * Functions specific to reshaping from CCG.
+ */
/* NOTE: Displacement grids to be at least at a reshape level.
*
@@ -255,11 +253,9 @@ bool multires_reshape_assign_final_coords_from_vertcos(
bool multires_reshape_assign_final_coords_from_ccg(const MultiresReshapeContext *reshape_context,
struct SubdivCCG *subdiv_ccg);
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Functions specific to reshaping from MDISPS.
- * \{ */
+/* ================================================================================================
+ * Functions specific to reshaping from MDISPS.
+ */
/* Reads and writes to the current mesh CD_MDISPS. */
void multires_reshape_assign_final_coords_from_mdisps(
@@ -269,11 +265,9 @@ void multires_reshape_assign_final_coords_from_mdisps(
void multires_reshape_assign_final_coords_from_orig_mdisps(
const MultiresReshapeContext *reshape_context);
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Displacement smooth.
- * \{ */
+/* ================================================================================================
+ * Displacement smooth.
+ */
/* Operates on a displacement grids (CD_MDISPS) which contains object space coordinates stored for
* the reshape level.
@@ -290,11 +284,9 @@ void multires_reshape_smooth_object_grids_with_details(
*/
void multires_reshape_smooth_object_grids(const MultiresReshapeContext *reshape_context);
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Displacement, space conversion.
- * \{ */
+/* ================================================================================================
+ * Displacement, space conversion.
+ */
/* Store original grid data, so then it's possible to calculate delta from it and add
* high-frequency content on top of reshaped grids. */
@@ -303,11 +295,9 @@ void multires_reshape_store_original_grids(MultiresReshapeContext *reshape_conte
void multires_reshape_object_grids_to_tangent_displacement(
const MultiresReshapeContext *reshape_context);
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Apply base.
- * \{ */
+/* ================================================================================================
+ * Apply base.
+ */
/* Update mesh coordinates to the final positions of displacement in object space.
* This is effectively desired position of base mesh vertices after canceling out displacement.
@@ -320,8 +310,12 @@ void multires_reshape_apply_base_update_mesh_coords(MultiresReshapeContext *resh
void multires_reshape_apply_base_refit_base_mesh(MultiresReshapeContext *reshape_context);
/* Refine subdivision surface to the new positions of the base mesh. */
-void multires_reshape_apply_base_refine_subdiv(MultiresReshapeContext *reshape_context);
+void multires_reshape_apply_base_refine_from_base(MultiresReshapeContext *reshape_context);
-/** \} */
+/* Refine subdivision surface to the new positions of the deformed mesh (base mesh with all
+ * modifiers leading the multires applied).
+ *
+ * NOTE: Will re-evaluate all leading modifiers, so it's not cheap. */
+void multires_reshape_apply_base_refine_from_deform(MultiresReshapeContext *reshape_context);
#endif /* __BKE_INTERN_MULTIRES_RESHAPE_H__ */