Age | Commit message (Collapse) | Author |
|
Use the `aspect_ratio_min` available in the params for the edge
collapsible test instead of the hard coded value.
|
|
Create GUI and use `change_in_vertex_normal_max` for dynamic face
sizing calculation instead of the hard coded value.
|
|
Use values from given params instead of the hard coded parameter
values.
|
|
|
|
|
|
Compute the dynamic face sizing with respect to curvature and do eigen
decomposition of the final sizing to add constraints with respect to
edge lengths and aspect ratio.
|
|
Calculate derivative of the given float3s with respect to the uv space
coordinates of the given face.
|
|
|
|
Transpose and multiplication requires access to the other structure as
well, this cannot be done through header files only, at least not
easily. So separate implementation files for each with the respective
functions that are required.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Calculate the vert sizing by taking the uv area weighted average of
the sizing of the adjacent faces of the vert.
|
|
|
|
|
|
|
|
Add remeshing type support to both the cloth modifier and the adaptive
remesh modifier.
The basic call for dynamic remesh is also setup, only need to work on
finding the vertex sizing dynamically.
|
|
A simple solution that is extremely difficult to debug. This
particular part of the collapse edge function is run rarely and to
make this particular bug even harder to find is that only a subsequent
operation will show any signs of a problem.
One way to trigger this bug is to static remesh Suzanne (Blender
monkey) at 0.005 or lower minimum size. This leads to a crash due to a
bad optional access of a node.
The vert refers to the node but the node doesn't refer to the vert. So
once this sort of situation is created, when that vert's nodes need to
be used, it leads to a bad optional access.
Such a simple fix :)
|
|
All unused parameter warnings in BKE_cloth_remesh.hh and
cloth_remesh.cc have been fixed either by adding a #ifndef NDEBUG
directive or by changing the code slightly.
|
|
Newly created sewing edges's verts should also be marked as preserve.
|
|
Option to split the opposite edge even if it does not meet the size
criterion, with the option, it ensures that no sewing edge is missed
when an edge is split (it can be missed if the opposite edge doesn't
meet the size criterion).
|
|
Mark all verts attached to sewing edge(s) as preserve, this ensures
that no sewing edge(s) are removed which would otherwise lead to
results are not in line with what the artist would want.
|
|
While trying to create the sewing edges, ensure that the vert in
question is between 2 or more edges that are between sewing edges.
Also ensure that the opposite is between sewing edges.
|
|
Since split edge triangulate already handles copying the extra data,
there is no need to try to add the flag `EDGE_BETWEEN_SEWING_EDGES` to
the newly split edges.
|
|
An extra option to copy to the extra data from the edge that is split
to the edges that are formed due to the split. This does not include
the other edges added for triangulation purposes.
|
|
Edges that had EDGE_BETWEEN_SEWING_EDGES when split, the new edges
should also be EDGE_BETWEEN_SEWING_EDGES.
|
|
Add a new flag for EdgeData that stores if the edge is between sewing
edges or not.
A function that marks all the edges that between sewing edges.
Call this function in the initialization of the static remeshing if
sewing is enabled.
|
|
Dump the serialized Mesh after adding the loose (sewing) edge.
|
|
|
|
If the opposite edge still exists and it can be split, add a sewing
edge between `vert` and the newly created vert.
|
|
Split edge now appends the flip edges mesh diff to the split edge mesh
diff and returns this complete mesh diff and the verts that were added
during split operation.
|
|
Return a complete MeshDiff of all the operations done in flip edges by
appending the MeshDiff(s) after each operation.
|
|
Abstract out the edge splittablity check to a function.
|
|
AdaptiveMesh specific compute info for elements. This internally calls
the Mesh specific compute info to make function calls easier.
|
|
|
|
It is possible to create a MeshDiff which is updated to remove a
certain element that was initially added. So the added element index
is no longer valid and should be removed.
This function removes elements from the `added_elements` lists that no
longer exist in the mesh.
|
|
Functions to add elements to `added_element`.
|
|
Adds a loose edge to the mesh with the given vert indices and ensures
that these vert indices do not already have an edge between them and
that they exist.
|
|
`compute_info()` now calls separate functions for each element type
instead of computing it within that function. This allows other parts
of the code to compute info of the element when it is easier to do
over creating a mesh diff.
|
|
Given the element's index, it check if the element still exists in the
mesh.
|
|
Given a vertex, the function is supposed to add a sewing edge to it if
possible.
Currently the function gets the set of opposite edges. An opposite
edge is an edge that is in between 2 loose edges and these loose edges
are connected to edges that connect to the given vert.
e1 vert e5
e1_ov.________.________.e4_ov
| |
e2| |e4
._________________.
e2_ov opposite_edge e3_ov
(e3)
What needs to be done: With the set of opposite edges, if the edge is
splittable then it should be split and a new edge should be added
between vert and the newly created vert (vert created when splitting
the opposite edge).
|
|
|
|
Split edge function didn't add the new node and the new vert(s) to
MeshDiff.
|
|
Added a new flag to have sewing enabled. The flag doesn't do anything
yet (no functionality).
Added the required code to pass this sewing option to
adaptive_remesh().
Created the GUI for this flag in the AdaptiveRemesh modifier.
|
|
|
|
|
|
|