Commit Graph

279 Commits

Author SHA1 Message Date
Sergey Sharybin
c7d20949fb Multires: Apply uniform scale on displacement when applying scale on object
This is sued by both object joinig and object apply scale operations.

Currently only uniform scale is working correct. Non-uniform gets averaged
and will produce slightly distorted results. This is something we should
fix, but priority of this particular case is not so high.
2018-11-02 15:24:54 +01:00
Sergey Sharybin
a0e82342d7 Multires: Cleanup, naming
First of all, follow our naming convention to use module prefix.

Second of all, mesh is being created and is to be freed, we also
have convention for such function names.
2018-11-02 13:59:04 +01:00
Sergey Sharybin
f2873b3ce5 Multires: Prevent crash when joining two multires objects
This only works thing around, just so we can unlock production here.
Joining objects of a different scale will not yet work correctly.

Proper fix is coming later (the code needs to be ported to new
Subdiv API).
2018-11-02 11:00:51 +01:00
Campbell Barton
a30c9f710a Partial revert '#if 0' cleanup
Partially revert 41216d5ad4

Some of this code had comments to be left as is for readability,
or comment the code should be kept.
Other functions were only for debugging.
2018-10-19 09:18:22 +11:00
Jacques Lucke
41216d5ad4 Cleanup: Remove more #if 0 blocks
Continuation of https://developer.blender.org/D3802

Reviewers: brecht

Differential Revision: https://developer.blender.org/D3808
2018-10-18 15:43:06 +02:00
Sergey Sharybin
15792eb728 Cleanup: Variable name in mesh runtime
Matches type better, avoiding possible confusion.
2018-09-25 10:32:34 +02:00
Sergey Sharybin
43c4d0bf23 Multires: Pass total level instead of modifier data
This is the only thing which needs to be done to perform propoer
reshape. Makes it easier to re-use code from other places.
2018-09-25 09:58:40 +02:00
Sergey Sharybin
a933293f11 Multires: Pass mesh instead of object
There is nothing we need from object in this case.
2018-09-25 09:38:23 +02:00
Brecht Van Lommel
cfb7565cd5 Cleanup: convert smoke modifier from DerivedMesh to Mesh. 2018-09-21 13:56:22 +02:00
Sergey Sharybin
12372e8d8b Multires: Support sculpting on a lover levels
Added propagation of displacement to a higher levels.

Has the same limitation as reshape from object, which makes
grids somewhat choppy due to linear interpolation nature.

This is to be addressed next.
2018-09-21 11:43:42 +02:00
Jacques Lucke
b5dbe43d3e Cleanup: move DerivedMesh wrappers for modifiers further down the hierarchy
The main goal of this patch is to cleanup the interface of every modifier. More specifically the interface of modifiers should be DerivedMesh-free.
Internally some modifiers still use DerivedMesh. However I think it is better when the wrappers are in the modifiers so that higher level functions can use the simplified interface.

This patch removes the applyModifier_DM and applyModifierEM_DM functions. In a previous patch (rB3614d9d) the other functions that used DerivedMesh have been removed.

Reviewers: brecht
2018-09-20 12:04:17 +02:00
Sergey Sharybin
fe467735e5 Subdiv: CCG, remove redundant call 2018-09-19 09:48:07 +02:00
Sergey Sharybin
ebcbb50420 Subdiv: CCG, implement stitching of given faces
Will speed up (or rather bring speed back to what it is supposed to be)
for brushes like smooth.
2018-09-18 17:46:00 +02:00
Sergey Sharybin
9bf3e0299b Subdiv: CCG, initial grids stitching implementation
Currently is only working on an "inner" grid boundaries.
Need to implement averaging across face edges.
2018-09-18 17:09:08 +02:00
Sergey Sharybin
8e8952b7e3 Multires: Initial work to get sculpting to work with OpenSubdiv
Allows to go to sculpt mode, do brush strokes, get out of sculpt mode
and have deformation preserved.

The issues currently is that the current implementation of CCG
storage is created from the limit surface, without displacement
taken into account. It is trivial to get displaced coordinates,
but it is more tricky to get displaced normals. This is something
to be solved next.

Another limitation is that this only works for sculpting at a maximal
multires level. There is code to be done to support propagation
of displacement onto a higher levels.
2018-09-14 14:43:56 +02:00
Sergey Sharybin
de187c0ba7 Merge branch 'master' into blender2.8 2018-09-05 16:05:43 +02:00
Sergey Sharybin
94ec80d21c CCG: Remove number of layers from key
The issue there was that number of layers did not include normals,
while element size counts bytes used by normals. This sounds very
fragile and dangerous to work further. Also, one value can easily
be delivered from another, so it is redundancy going on here.

Possible difference now is that multires subdivision will copy
normals to a higher levels. Shouldn't be big of a problem, since
leaving old normals and updating coordinates is not correct either.
2018-09-05 15:56:50 +02:00
Sergey Sharybin
9e11b8e249 Multires: implement reshape operation
The one which is used by applying deformation modifiers on the multires.
2018-08-22 10:21:45 +02:00
Sergey Sharybin
a9b82d5d79 Multires: Fix wrong creation of multires mesh
Should use evaluated object to query deformed mesh from.
2018-08-17 10:55:51 +02:00
Sergey Sharybin
e19439a169 Cleanup: Use dedicated function to copy mesh during evaluation process
It is rather fully annoying to have same sets of obscure flags all over.
2018-08-16 14:42:06 +02:00
Sergey Sharybin
50cb9b52bb Multires: Implement function to get mesh at multires position of stack 2018-08-16 14:42:06 +02:00
Sergey Sharybin
642c6d2fc9 Multires: Cleanup, naming and bool type 2018-08-16 14:42:06 +02:00
Sergey Sharybin
5e696fdcd6 Multires: Begin hooking it up to the new subdiv code
Currently behaves same as subsurf, support of displacement is the
next task in the line to tackle!
2018-08-14 12:17:47 +02:00
Sergey Sharybin
02dbe3b0c7 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
2018-08-14 12:02:21 +02:00
Sergey Sharybin
5c61be777f Subsurf: Introduce quality option
For users it defines how accurate vertex positions are in terms
of limit surface (as in, how close the vertices locations to the
condition when they are calculated for an infinitely subdivided
mesh).

This affects things like:

- Irregular vertices (joint of 3 or more edges)
- Crease

Keep quality value low for performance.

NOTE: Going higher does not necessarily mean real improvement
in quality, ideal case might be reached well before maximum
quality of 10. Quality of 3 is a good starting point.

Internally quality is translated directly to adaptive subdivision
level.

Reviewers: brecht

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D3599
2018-08-13 16:04:06 +02:00
Sergey Sharybin
517f58be3c Subsurf: Make uv boundaries easily extendible
This replaces old single toggle option to subdivide UVs with
an enum which can have more options. The usecase for this is
to be compatible with other software. But we also might choose
different subdivision type as default in the future.

DNA and underlying code supports all possible options, but
only the ones which are compatible with old subdivision code
are currently exposes.

Reviewers: brecht

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D3575
2018-08-13 12:37:46 +02:00
Campbell Barton
31f0c9182e Cleanup: style 2018-06-27 22:29:59 +02:00
Sergey Sharybin
f55f2db6bd Fix T55644: Multires ignores render subdivision when simplified
We did not tell proper render/viewport context to subsurf derived mesh
created for multires.
2018-06-27 16:35:06 +02:00
Sergey Sharybin
7a4b784909 Subsurf: Move away from using scene from modifier data 2018-06-22 15:12:03 +02:00
Sergey Sharybin
c2fa82e7a4 Multires: Move away from using scene from modifier data 2018-06-22 15:12:03 +02:00
Sergey Sharybin
d5ec62a0c3 Multires: Remove unused function
It uses derived mesh, and relies on scene stored in modifier data.
So port is needed anyway.
2018-06-18 11:14:00 +02:00
Campbell Barton
06a1a66a9b Merge branch 'master' into blender2.8 2018-06-17 17:10:19 +02:00
Campbell Barton
6fc8a74886 Cleanup: trailing space for blenkernel 2018-06-17 17:05:51 +02:00
Sybren A. Stüvel
ce6db959c7 Moved function declarations from BKE_DerivedMesh.h to BKE_mesh_runtime.h
The function definitions still reside in DerivedMesh.c. Once we're done
porting all the DerivedMesh use to Mesh, we'll move the still-relevant
functions to mesh_runtime.c. This move is now cumbersome due to shared
statically-declared utility functions in DerivedMesh.c
2018-06-05 16:59:25 +02:00
Sybren A. Stüvel
334b55fd2e Extract common modifier parameters into ModifierEvalContext struct
The contents of the ModifierEvalContext struct are constant while iterating
over the modifier stack. The struct thus should be only created once, outside
any loop over the modifiers.
2018-05-01 18:02:17 +02:00
Mai Lavelle
be4df85919 Modifiers: Add wrapper functions with Mesh / DerivedMesh conversion
Makes the follow changes:

- Add new `deform*` and `apply*` function pointers to `ModifierTypeInfo` that take `Mesh`, and rename the old functions to indicate that they take `DerivedMesh`. These new functions are currently set to `NULL` for all modifiers.
- Add wrapper `modifier_deform*` and `modifier_apply*` functions in two variants: one that works with `Mesh` and the other which works with `DerivedMesh` that is named with `*_DM_depercated`. These functions check which type of data the modifier supports and converts if necessary
- Update the rest of Blender to be aware and make use of these new functions

The goal of these changes is to make it possible to port to using `Mesh` incrementally without ever needing to enter into a state where modifiers don't work. After everything has been ported over the old functions and wrappers could be removed.

Reviewers: campbellbarton, sergey, mont29

Subscribers: sybren

Tags: #bf_blender_2.8

Differential Revision: https://developer.blender.org/D3155
2018-05-01 18:02:17 +02:00
Brecht Van Lommel
34ab90f546 Depsgraph: remove EvaluationContext, pass Depsgraph instead.
The depsgraph was always created within a fixed evaluation context. Passing
both risks the depsgraph and evaluation context not matching, and it
complicates the Python API where we'd have to expose both which is not so
easy to understand.

This also removes the global evaluation context in main, which assumed there
to be a single active scene and view layer.

Differential Revision: https://developer.blender.org/D3152
2018-04-16 19:55:33 +02:00
Campbell Barton
1c24c04e60 Remove workspace object mode, reverts changes w/ 2.8
This caused too many problems syncing object modes
with multiple objects/windows/workspaces, see: D3130 for details.
2018-04-05 18:21:14 +02:00
Campbell Barton
345c6298e9 Object Mode: move to workspace struct
- Read-only access can often use EvaluationContext.object_mode
- Write access to go to WorkSpace.object_mode.
- Some TODO's remain (marked as "TODO/OBMODE")
- Add-ons will need updating
  (context.active_object.mode -> context.workspace.object_mode)
- There will be small/medium issues that still need resolving
  this does work on a basic level though.

See D3037
2018-02-08 21:14:26 +11:00
Brecht Van Lommel
27dff3fbc1 Merge branch 'master' into blender2.8 2018-01-18 01:01:17 +01:00
Brecht Van Lommel
e04d7c49dc Fix buffer overflow vulnerabilities in mesh code.
Solves these security issues from T52924:
CVE-2017-12081
CVE-2017-12082
CVE-2017-12086
CVE-2017-12099
CVE-2017-12100
CVE-2017-12101
CVE-2017-12105

While the specific overflow issue may be fixed, loading the repro .blend
files may still crash because they are incomplete and corrupt. The way
they crash may be impossible to exploit, but this is difficult to prove.

Differential Revision: https://developer.blender.org/D3002
2018-01-18 00:54:07 +01:00
Bastien Montagne
8bff6f319a Merge branch 'master' into blender2.8
Conflicts:
	source/blender/blenkernel/intern/multires.c
2018-01-11 20:19:18 +01:00
Bastien Montagne
6104596587 Cleanup commented out OMP command. 2018-01-11 20:17:29 +01:00
Bastien Montagne
6695e390c6 Nuke OMP from multires.c: forgot that one in previous commit.
Gives same kind of speedup too, 8.7ms with old OMP code, 2.7ms with new
one, with same level-4 multires monkey head.
2018-01-11 20:14:16 +01:00
Bastien Montagne
90cd856ac3 Nuke OMP usage in multires.c.
New code is over three times quicker than old one here (e.g. Suzanne
subdiv level 4, 250k tris, threaded part is now 1.4ms instead of 4.5ms
with OMP).
2018-01-11 19:39:24 +01:00
Bastien Montagne
713852affb Preparation step for nuking OMP from multires code.
Remove the critical OMP sections used to protect mem allocation.

First one can be done in a separate loop before main, parallelized one.

Second one only affect 'private' data, so we only need to ensure
guardedalloc thread safety is enabled.

This is committed as separated step to ease troubleshooting in case
bisecting becomes necesary.
2018-01-11 17:56:18 +01:00
Campbell Barton
1b462e5a51 Pass EvaluationContext instead of bContext
2.8x branch added bContext arg in many places,
pass eval-context instead since its not simple to reason about what
what nested functions do when they can access and change almost anything.

Also use const to prevent unexpected modifications.

This fixes crash loading files with shadows,
since off-screen buffers use a NULL context for rendering.
2017-08-16 12:46:04 +10:00
Luca Rood
1c4c288727 Pass EvaluationContext argument everywhere
Note that some little parts of code have been dissabled because eval_ctx
was not available there. This should be resolved once DerivedMesh is
replaced.
2017-07-21 14:47:26 +02:00
Campbell Barton
d5ddc52ae1 Cleanup: style 2016-01-19 04:54:39 +11:00
Campbell Barton
762aad3777 Correct OpenMP pragma, wasn't updated for looptri 2015-12-03 22:56:32 +11:00