Improve laggy performance while moving File Browser by not refreshing fsMenu lists in its init.
Differential Revision: https://developer.blender.org/D6112
Reviewed by Bastien Montagne
This was added years ago to prepare for code-signing the executable
but was never used, buildbots use a different mechanism now to sign
so no need to keep this around.
This function exposes the already-existing static `object_moves_in_time()`
function, and optionally recursively checks the parent object for
animatedness as well.
I also added checking `AnimData::overrides` to
`BKE_animdata_id_is_animated()`. This ensures that, apart from the optional
recursion to the parent object, the function has the same functionality.
Instead of always writing the transform on every frame, it's now checked
whether the object is animated at all. This could be made stricter to
reduce false positives, for example by checking FCurves and drivers to
see whether translation/rotation/scale is animated. However, this
approach is already better than the `return true` we had before.
This commit adds the BKE_animdata_id_is_animated(id) function, which
returns true if the ID datablock has non-empty animation data. This is
determined by checking the the active action's fcurves, the drivers, and
NLA tracks.
The function isn't used anywhere, and it's deceptively returning false
negatives. For example, `modifier_dependsOnTime()` will return `false`
for hook modifiers, even when the hook target is animated. Querying the
depsgraph for dependency on the time source would be a better approach.
The `modifiers_getVirtualModifierList()` function previously took a non-
const `Object *ob` parameter, preventing it from being called from more
restrictive functions. Since the function doesn't modify the passed
object, it could easily be made const.
No functional changes.
Unfortunately, it didn't turn out to be as great as I've hoped to it
will.
The issue is: the label eats too much space, making selector buttons
and image name to be barely readable. Initial idea of making the panel
somewhat wider didn't work either: due to the sizing policy of label
it takes a lot of panel width to make image name readable.
This code allows to push a set of different operations all based on
iterations over a range of indices, and then process them all at once
over multiple threads.
This commit also adds unit tests for both old un-pooled, and new pooled
task_parallel_range family of functions, as well as some basic
performances tests.
This is mainly interesting for relatively low amount of individual
tasks, as expected.
E.g. performance tests on a 32 threads machine, for a set of 10
different tasks, shows following improvements when using pooled version
instead of ten sequential calls to BLI_task_parallel_range():
| Num Items | Sequential | Pooled | Speed-up |
| --------- | ---------- | ------- | -------- |
| 10K | 365 us | 138 us | 2.5 x |
| 100K | 877 us | 530 us | 1.66 x |
| 1000K | 5521 us | 4625 us | 1.25 x |
Differential Revision: https://developer.blender.org/D6189
Note: Compared to previous commit yesterday, this reworks atomic handling in
parallel iter code, and fixes a dummy double-free bug.
Now we should only use the two critical values for synchronization from
atomic calls results, which is the proper way to do things.
Reading a value after an atomic operation does not guarantee you will
get the latest value in all cases (especially on Windows release builds
it seems).
By error, the original datablock was used while rendering. Actually, only while the user is drawing the original data must be used because when we tested, the time the system uses to copy the datablock created a very bad "lag" feeling while drawing. Maybe the lag was half second only, but it ruined the pencil feeling.
I talked some time ago with Sergey about that and we decided use this approach.
Now, only the original datablock is used while the user is "moving" the pen, but not in any other situation.
Thanks @sergey for help me with this bug and sorry for thinking it was a depsgraph issue.
The new Mapping node was missing versioning code for drivers.
This patch refactors existing code and add versioning for drivers.
Reviewed By: Sergey Sharybin, Bastien Montagne
Differential Revision: https://developer.blender.org/D6302
Adds a `text` parameter to `bpy.types.uiLayout.template_ID()` which
causes a label to be added, as usual. Adding the label also makes the
template respect the `bpy.types.uiLayout.use_property_split` option.
Also fixes wrong layout being used in the template-ID, although I think
that didn't cause issues in practice.
Sergey requested this for usage in the Movie Clip Editor.
Calling "OptiXDevice::load_kernels" multiple times would call "optixPipelineDestroy" on a pipeline
pointer that may have already been deleted previously (since the PIP_SHADER_EVAL pipeline is only
created conditionally).
This change also avoids a CUDA kernel reload every time this is called. The CUDA kernels are
precompiled and don't change, so there is no need to reload them every time.
Adds a theme setting to specify color of widget text insertion cursor (caret).
Differential Revision: https://developer.blender.org/D6024
Reviewed by Campbell Barton
This code allows to push a set of different operations all based on
iterations over a range of indices, and then process them all at once
over multiple threads.
This commit also adds unit tests for both old un-pooled, and new pooled
`task_parallel_range` family of functions, as well as some basic
performances tests.
This is mainly interesting for relatively low amount of individual
tasks, as expected.
E.g. performance tests on a 32 threads machine, for a set of 10
different tasks, shows following improvements when using pooled version
instead of ten sequential calls to `BLI_task_parallel_range()`:
| Num Items | Sequential | Pooled | Speed-up |
| --------- | ---------- | ------- | -------- |
| 10K | 365 us | 138 us | 2.5 x |
| 100K | 877 us | 530 us | 1.66 x |
| 1000K | 5521 us | 4625 us | 1.25 x |
Differential Revision: https://developer.blender.org/D6189
When scrollbars were redesigned, the size of UI-List scrollbars wasn't
updated. Those were still huge.
This makes their size consistent with other scrollbars and frankly,
non-rediculous.
Add smooth scrolling support for vertical scrolling.
This is only active while scrolling so we don't need to support
pixel-level offsets for operators, interactions.
TBBMalloc seems to have a race condition somewhere on shutdown
that seems to show up in debug builds only, ideally we find the
issue and send a patch upstream but due to its racy nature it
has eluded capture so far. This patch disables TBBMalloc for
debug builds so that developers that actually need to get some
work done can work without being bothered by this misbehaviour.
This implements a 5th-order equation smoothstep, which produces a flat
surface at the brush center. Some users find that our current grab brush
is too sharp, so now we have both options.
This also improves the behavior of the new clay brushes.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6265
The OptiX intersection program for curves uses "optixGetObjectRayDirection"
to get the ray direction in object space (which was inverse transformed
with the current transformation matrix). OptiX does no additional operations
on it, so if there is a scaling transform, the direction is not normalized.
But the curve intersection routine expects that. In addition, the distances
used in "optixGetRayTmax()" and "optixReportIntersection()" are in world
space, so need to adjust them accordingly.
When introducing "drag-all-selected" support all over Blender, we
figured this wouldn't work well with the Graph Editor
selection/transform behavior.
Hence, William and I worked on the following changes, although we used
this chance to improve the behavior in general too.
For more info see T70634.
* Handles now always move with the key, regardless if they are selected
or not.
* Selecting the key doesn't select the handles anymore, their selection
is separate.
* Multiple keys and handles can now be dragged.
* Dragging a handle moves all selected handles **on the same side**.
* Tweak-dragging any handle can never affect any keyframe location,
only handles.
* G/R/S should behave as before.
* Changing the handle type with a key selected always applies the change
to both handles.
* Box selection with Ctrl+Drag now allows deselecting handles (used to
act on entire triple only).
* Box selection //Include Handles// option now only acts on visible
handles, wasn't the case with Only Selected Keyframes Handles enabled.
* Box selection //Include Handles// is now enabled by default in all
bundled keymaps.
The changes have been tested for some days by the animators here in the
Blender Animation Studio. Some changes are based on their feedback.
Also, this improves/adds comments for related code.
Differential Revision: https://developer.blender.org/D6235
Reviewed by: Sybren Stüvel, William Reynish
`BLI_strncpy_wchar_from_utf8` internally assumes `wchar_t` is 32 bits
which is not the case on windows.
The solution is to replace `wchar_t` with `char32_t`.
Thanks to @robbott for compatibility on macOS.
Differential Revision: https://developer.blender.org/D6198
It is possible to have action which is not nullptr but which have no
f-curves in it (for example, animate cube's location, then delete all
f-curves).
Such situation should not add time dependency as it could slow down
scene evaluation on frame change.
Diffing on undo steps is a critical performance point of override
system, although not required for override itself, it gives user
immediate feedback ove what is overridden.
Profiling showed that rna path text search over overrides operations was
by far the most costly thing here, so now using a runtime temp ghash
mapping for this search instead.
Seems to give at least 5 times speedup on big production rig.
Only indent when there aren't characters before the cursor.
This resolves the conflict with Ctrl-Space for view maximize.
D6239 by @wbrbr for text editor, based console support on this.
Previously the only way to draw polygon shapes from buttons
was to use a polygon that included the circular outline
with negative space for the un-filled areas.
This didn't always have visibility, especially when the gizmo was
overlaying colors that didn't contrast much.
Support drawing a generic backdrop with a polygon shape over it.
After adding normal radius, the main use of the Scrape brush is to create flat surfaces with sharp edges. In that case, it does not make sense to have our current "Peaks" version of the brush as its inverted version.
The correct inverted version of Scrape for this use case is the Fill brush. This way you can use this tool to crease both concave and convex sharp edges and to fix the artifacts one version produces with its inverted version.
I think we should merge these two tools into one, but for now, this solution keeps compatibility with the old behavior.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6022
This commit implements the Topology Slide/Relax brush and the Relax mesh filter.
These tools are designed to move the topology on top of the mesh without affecting the volume.
The Topology Slide/Relax brush slides the topology of the mesh in the direction of the stroke. When pressing shift, it has an alternative smooth mode similar to the Relax Brush in the sculpt branch. It should be way more stable and produce fewer artifacts.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6059
The smooth iterations of the pose factor were hardcoded to 4. This works fine in most situations when you are posing a low poly mesh, which is the main use case of this tool. I added the smooth iterations as a brush property in case you need to pose a high poly mesh directly without producing artifacts.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6157
This operator is similar to Mask Extract, but it deletes the masked points on the original mesh and fills the holes. This can be useful for quickly trimming or splitting an object.
This is not meant to be the main trimming tool of sculpt mode. I plan to have a set of trimming tools based on geometry booleans (trim box, lasso, line, bisect...) but in some cases doing a mask selection is more convenient.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6160
The Multiplane Scrape brush creates sharp edges with a given fixed angle by trimming the mesh with two planes in local space at the same time. When working with stylized or hard surface models, this brush produces way better results and is more predictable than any other crease/flatten brush based on curves and alphas.
It is also the first brush we have than can produce hard surface concave creases.
The Multiplane Scrape Brush also has a dynamic mode where it samples the surface to fit the angle and scrape planes during a stroke. With this mode enabled you can sculpt multiple times over the same edge without creating artifacts.
It can also create creases that change between concave and convex during the same stroke.
The behavior of this brush will improve after merging patches like D5993 and its behavior in concave creases can still be improved, so I will keep tweaking its parameters and default values once we have all brush properties available.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6174
Implement one more way of inheriting scale from the parent
bone, as an addition to the choices introduced in D5588.
This new mode inherits parent scale as if the parent and child
were not rotated relative to each other, always applying parent
X scale to child X scale and so forth. It is quite natural for
connected bone chains with coherent roll, like limbs or tentacles,
falling roughly between Average and Fix Shear in how closely
the parent scaling is followed.
Currently this can be achieved by using Inherit Scale: None plus
a Copy Scale with Offset from parent on the child; however, this
is cumbersome, and loses the distinction between true local and
inherited scale in the child's Local space.
This new mode also matches how the Before/After Original mix
modes work in the Copy Transforms constraint.
On the technical side this mode requires adding a right side
scale matrix multiplication into the Local<->Pose conversion,
in addition to the existing two left side matrices used for
location and orientation.
Differential Revision: https://developer.blender.org/D6099
After refactoring the mirror modifier and supporting geometry modifications with PBVH_FACES this operator can be easily implemented without Dyntopo.
i
The symmetrize button and options are still in the Dyntopo pannel. There are patches like doing multiple modifications in the Sculpt mode UI, so we need to find a way to organize this better.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6180
The previous Clay brush was similar to flatten. Now it has a different plane calculation and falloff, based on the position of the vertices before deforming them, so it feels more like adding clay to the model.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6228
By squaring the pen pressure and disabling BRUSH_SPACE_ATTEN the brush
feels like it has a bigger strength range, wich makes it easier to
control when applying less pressure in order to smooth sculpted
surfaces.
Each brush should have a custom input pressure curve by default to get
an optimal behaviour and make all brushes consistent, but that is going
to take some time to get it right.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6214
Dash Ratio and Dash Samples are brush properties to modify the strength of the brush during a stroke. This is useful to create dashed lines in texture paint or stitches in sculpt mode.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D5949
Caused by rBac442da4a14d.
Above commit tweaked the logic to not only early out, but also set the
WPGradient_vertStore screen coord to FLT_MAX in case this original index
was visited before [gradientVertInit__mapFunc].
For generative modifiers though, we might get here multiple times for the
same orig index, resulting in a valid orig index being made invalid for
gradientVertUpdate__mapFunc [which would early out in case of FLT_MAX].
Restored original logic, so that setting FLT_MAX only really happens
when it should: when ED_view3d_project_float_object fails...
Maniphest Tasks: T68499
Differential Revision: https://developer.blender.org/D6282
Keyframes) takes hidden keys into account when calculating zoom
Note that with the 'View Only Selected Curve Keyframes' option enabled,
it is also possible to select [box/circle/lasso] hidden/non-visible
keyframes. Think this should never happen, but that is for a later
commit (along some deduplication of animdata filtering code)
Reviewed By: Severin, Sybren
Maniphest Tasks: T67873
Differential Revision: https://developer.blender.org/D6237
Previously these used a gizmo to redo the operator however this
complicated having on-screen gizmos to access tools (see T66304).
Replace this with a generic way to make an operator that only has an
execute function into a modal operator.
This is used for smooth and randomize tools.
Unlike operator gestures, this handles storing and resetting the data.
Currently this only handles edit-mode data, however it's can be
extended to other kinds of data.
Removed the weight limit and made the setting more clear in what it actually does.
IE, it controlls the weight of the vertices of the cloth mesh
Reviewed By: Brecht
Differential Revision: http://developer.blender.org/D5450
Dynamically bound mesh deform modifiers failed to update the viewport on
object transformation of deformer. The TODO by Sergey, which suggested
adding the transform component to the depsgraph, was already there, and
worked to fix T71412.
Due to some floating point errors the last frame of a VSE audio strip can
cause integer overflow and crash Blender. This overflow was caused by a
cast from `int64_t` to `int` without prior check. The crash is fixed by
keeping the variable as `int64_t` for as long as possible.
Custom profiles in bevel allows the profile curve to be controlled by
manually placed control points. Orientation is regularized along
groups of edges, and the 'pipe case' is updated. This commit includes
many updates to comments and changed variable names as well.
A 'cutoff' vertex mesh method is added to bevel in addition to the
existing grid fill option for replacing vertices.
The UI of the bevel modifier and tool are updated and unified.
Also, a 'CurveProfile' widget is added to BKE for defining the profile
in the interface, which may be useful in other situations.
Many thanks to Howard, my mentor for this GSoC project.
Reviewers: howardt, campbellbarton
Differential Revision: https://developer.blender.org/D5516
Various small changes to Text Editor, mostly to do with scaling, alignment, and theme support.
Differential Revision: https://developer.blender.org/D6268
Reviewed by Campbell Barton
The Alembic file metadata object was created in one place, a bit of
metadata was added, then it was passed along with other properties which
were then injected as metadata in another function. This is now cleaned up.
No functional changes.
Alembic 1.7.12 introduces a 'DCC FPS' hint, allowing Blender to write
the scene frame rate to the Alembic file. This will make it possible for
importers and converters to properly deal with situations where 'frame
number' is the only reference to time.
Writing this new DCC FPS hint will be done in a separate commit. Here
only the Alembic library is upgraded from 1.7.8 to 1.7.12.
The issue was actually in Python extras (where it shows the ENUM option).
I got a bit distracted by the "(undocumented operator)" message.
It made me miss the missing ENUM once the crash was gone.
For the make single user operation to work we expect a parent of the
datablock to be around. However this is often not the case when not
accessing the data from Scenes or Viewlayer display modes.
For now we simply not show them in the other cases. They can be added
later though, by testing the outliner tree parent compatibility with the
expected parent id.
Fix T71673
Differential Revision: https://developer.blender.org/D6276
Ensure that all threads on a multi-core system are used.
The issue was that BLI_task module was trying to be smart and
used heuristic to find optimal number of iterations per thread.
This heuristic assumes that tasks are light-weight, which is
not a case for subdivision surface.
On a higher subdivision level with a file from T70826 the
evaluation time goes down from 0.25 to 0.17 seconds per modifier
evaluation.
When D6189 is finalized we can being some extra performance
improvement.
Usage of spinlock during heavy IO gave reduced performance
see D6267 for details.
Reviewed By: sergey
Differential Revision: https://developer.blender.org/D6267
We have no dedicated image context tab, so for now making sure we don't
end up passing its ID as the pinned one.
If we ever get one, we then will need a different solution here, like
changing the ID that owns the data to be the object, instead of the
empty image datablock.
Differential Revision: https://developer.blender.org/D6273
rBc6cbcf83d015 caused to early out e.g when not all faces were selected
(but surrounding faces were, so implicitly all vertices were selected).
Now take (mixed also) selection mode into account.
Maniphest Tasks: T71554
Differential Revision: https://developer.blender.org/D6254
The CANCELLED return value from an operator is intended for
signaling that the operator aborted execution without changing
anything, and an Undo stack entry should not be created.
When a Python operator crashes, it is not safe to assume that
it did nothing, so it should interpret it as FINISHED instead.
Otherwise, the undo system behavior after an operator failure
feels broken.
Differential Revision: https://developer.blender.org/D6241
Rename and separate Layers and Materials Specials menu from other buttons for better consistency
Reviewed By: antoniov
Differential Revision: https://developer.blender.org/D6271
Was caused by "wrong" EOL characters used in the patch: the file is
actuallyu saved using CRLF EOL style.
The patch was using CRLF as well for until recent change in the C
runtime.
This commit adds a new command line argument --debug-ghost and
makes it so X11 errors happening during context initialization
are only printed when this new flag is sued.
There is no need to flood users with errors when their GPU is
not supporting latest OpenGL version. Or, at a very minimum,
the error must be more meaning full.
Differential Revision: https://developer.blender.org/D6057
In order to recover from a transient Focus Out - Focus In disruption
in the middle of a shortcut, which can be caused by certain window
managers, Blender has code that checks which modifier keys are pressed
after Focus In and restores the modifier state based on that.
If one of the Ctrl, Shift, Alt, Super keys is not mapped anywhere
in the active keyboard layout, XKeysymToKeycode returns the invalid
zero keycode, and reading the key state produces garbage, which can
cause an invalid modifier state. Check the return value to avoid this.
2.79 also did this [select the new instances] which was useful.
2.79 also kept the instancer selected [this patch deselects]
Reviewed By: mont29
Maniphest Tasks: T68191
Differential Revision: https://developer.blender.org/D6233
Some types were documented in bpy.types aren't accessible there.
For now, disable documenting types from add-ons and some types from
bl_operators, bl_ui... since these are mostly for internal use.
`WS_CHILD` is a different kind of child window that what we define as
child window. See http://forums.codeguru.com/showthread.php?491604.
Setting this style flag seems to mess things up a bit in our
configuration. The name bar is actually being overlapped by the Windows
task bar then. Not totally sure why this happens, but I think it's
because windows with the `WS_CHILD` style are positioned relative to the
parent, not the desktop (screen without taskbar). So it uses the full
space available when maximized, which isn't clipped by the taskbar
anymore.
This only frees brush_rng and random_tex_array when they were actually
previously allocated.
In a unit test (see D6246) I want to be able to partially start Blender
so that I can load a blend file. To prevent memory leaks, I also want to
be able to release memory, which currently requires calling
`BKE_blender_free()`. This unconditionally calls `RE_texture_rng_exit()`
and `BKE_brush_system_exit()`, which now crash on freeing `NULL`. This
patch fixes that.
Allocation (`BKE_brush_system_init()`) and freeing
(`BKE_brush_system_exit()`) are done asymmetrically. The allocation
functions are called from `main()` in the creator module, but the
freeing is done by `BKE_blender_free()` the Window Manager. Ideally we
symmetrise this and initialise Blender from outside the window manager
(so that the initialisation can be done without WM and Python too), but
for now I'm happy when things don't crash.
Reviewed by: sergey via pair programming
The render view window was never closed actually, just moved behind the
main window. It's properly closed now.
It should also behave more like expected when there already is a
temporary window open (e.g. Preferences).
This patch includes a modifiers that developed for NPR rendering.
- MultiStroke modifier that generates multiple strokes around the original ones.
Differential Revision: https://developer.blender.org/D5795
The script requires Python 3.7 as a very minimum, and CentOS is
only 3.6.
On macOC there was an access to a None object, due to missing
implementation of code signer on this platform.
This commit includes all changes listed in T71366 except for the 2 column toolbar layout.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D6225
When using OpenCL with Cycles the rendering time increased substantial.
After doing some tests the bottleneck was found in 4d voronoi and 2d and
3d smooth voronoi.
This change will hide these behind a specific compile directive so the
speed will improve.
AMD RX480 + BMW scene
2.80 (3:10)
2.81 (5:48)
2.81 excluding 4d voronoi+2d/3d smooth (3:50)
Reviewed By: sergey
Differential Revision: https://developer.blender.org/D6231
The root of the issue goes to the discontinuity between the way how
mesh_calc_modifiers() and BKE_sculpt_multires_active() works.
At some point detection of original data usage by a modifier got
broken: the mesh_final based check is unreliable because deform-only
modifiers will create mesh_final for the connectivity information.
This made it so modifier stack evaluation would skip multires
evaluation, but the sculpt code will assume the multires is properly
applied.
This change makes it an explicit check about whether there are any
non-deform-only modifiers applied.
Pair programming and review together with Bastien, thanks!
There was a discontinuity between how deform-only modifiers are applied
for the case when result deform mesh is requested and when it is not.
Namely, the input mesh will always be guaranteed to present in the
former case, but not in the latter.
This change makes it so input mesh to deform-only modifiers is always
at consistent state.
Pair programming and review together with Bastien, thanks!
This changes integrates code signing steps into a buildbot worker
process.
The configuration requires having a separate machine running with
a shared folder access between the signing machine and worker machine.
Actual signing is happening as a "POST-INSTALL" script run by CMake,
which allows to sign any binary which ends up in the final bundle.
Additionally, such way allows to avoid signing binaries in the build
folder (if we were signing as a built process, which iwas another
alternative).
Such complexity is needed on platforms which are using CPack to
generate final bundle: CPack runs INSTALL target into its own location,
so it is useless to run signing on a folder which is considered INSTALL
by the buildbot worker.
There is a signing script which can be used as a standalone tool,
making it possible to hook up signing for macOS's bundler.
There is a dummy Linux signer implementation, which can be activated
by returning True from mock_codesign in linux_code_signer.py.
Main purpose of this signer is to give an ability to develop the
scripts on Linux environment, without going to Windows VM.
The code is based on D6036 from Nathan Letwory.
Differential Revision: https://developer.blender.org/D6216
The heap on windows is single threaded causing it to lag behind linux in performance in allocation heavy multithreaded scenarios, BVH building is a prime example.
See https://developer.blender.org/D6218 for benchmark results
for testing with the allocator enabled/disabled you can set the environment variable TBB_MALLOC_DISABLE_REPLACEMENT=1 to disable the TBB allocator.
Reviewed By: @sergey
Differential Revision: https://developer.blender.org/D6218
Makes it so compilation doesn't fail when the SVN updating
stumbles upon checkout which doesn't have correspondence in
a tag, but which isn't so risky as previous change.
This reverts commit 8e9e58895b.
The change broke behavior when typing `make update` from the root of
the sources: tests folder wouldn't be updated anymore.
Getting quite close to release now, so will revert to a safer change.
The issue was rooting to the fact that the script was iterating into
every directory inside of blender.git/../lib/ and attempted to switch
them to the desired path. This doesn't work in an environment where
both master and release branch are built (or any environment where
non-needed SVN directories are not automatically removed).
This change makes it so script explicitly generates a list of
directories which are required for the build. For example, the script
now stores an exact folder with ABI such as win64_vc14.
Only those explicitly listed directories will be updated.
This allows to:
- Solve compilation failure of 2.81 branch after checkout for
win64_vc15 libraries has been created.
- Fail compilation if actually expected tag is missing (for example,
when trying to build release branch prior to libraries tag).
Now, there was a confusing logic about possible .svn folder in
lib_dirpath (effectively, blender.git/../lib/.svn) which is not
something what is supposed to happen with the setup of buildbot we are
using for quite some time now. This logic has been removed now.
This change includes old-style string format(), mainly because it is
not know that the buidlbot scripts are run using python3 on CentOS
builder.
Differential Revision: https://developer.blender.org/D6230
For `Particle Properties -> Viewport Display -> Display As` set to
circle/cross/axis, particle instances are associated with a single
resource handle (and, in particular, a single model matrix), so define
`IN_PLACE_INSTANCES` to get the right index for `ModelMatrix` and
`ModelInverseMatrix` in the shader.
Differential Revision: https://developer.blender.org/D6220
Open the file browser sidebar by default when adding Movie/Sound/Image Sequence Strips, to show the operator options.
Differential Revision: https://developer.blender.org/D6212
Reviewed by: William Reynish, Julian Eisel
This caused T71483.
Having timeline and dopesheet merged in 2.8 makes using S/E keys in timeline not work well.
2.7x keymap needs to fit with 2.8x internals, so probably 2.7x keymap will have to live with Ctrl+Home / Ctrl+End here.
This reverts commit 4fbcbbfb96.
As correctly pointed out by a comment in the code, adding
new springs wasn't thread safe, and caused crashes.
Fix by buffering new springs in intermediate thread-local
arrays, which are flushed on the main thread. This is valid
because the new springs are not used until the next sim step.
Differential Revision: https://developer.blender.org/D6133
Fixes alignment issues on Graph Editor menus used to insert keyframes.
Differential Revision: https://developer.blender.org/D6213
Reviewed by Campbell Barton
Very stupid mistake in own new generic ID lib_link function, that would try
to link ID pointers for all data-blocks, not only those actually needing it.
Usually Ctrl+C copies the operator name to the clipboard
["bpy.ops.material.new()", "bpy.ops.object.material_slot_remove()"]
Crash happens for all buttons of UI_BTYPE_BUT without associated
operator [some are defined with callbacks only, often these are created
with e.g uiDefIconBut (instead of e.g. uiDefIconButO)]
Other examples that crash with Ctrl+C:
- animation decorators next to animatable properties
- button to show a modifier texture in the texture tab
- ...
2.79 survived here (result in the clipboard was just not changed hitting
Ctrl+C on these buttons), this is what happens with this patch as well.
Maniphest Tasks: T71405
Differential Revision: https://developer.blender.org/D6208
'is_copy' was not set correctly on all uiButMultiState (it was done once
for uiHandleButtonData), resulting in 'delta' being used on some indices
of the array and not others in `ui_selectcontext_apply`.
Maniphest Tasks: T55632
Differential Revision: https://developer.blender.org/D6201
Experimental tab in User Preferences for experimental features.
The tab option is only visible when "Developer Extras" is on.
Included here is a (commented out) example panel to be used as a
template for the new experimental panels. Since these panels will come
and go it is nice to have a reference in the code.
Differential Revision: https://developer.blender.org/D6203
Most of the time Stretch To is used in actual rigs, like BlenRig
or Rigify, in combination with Damped Track to handle rotation
before the stretch, because it produces rotations more appropriate
for organic deformation, and doesn't flip because of internal
gimbal lock.
The prevalence of this pattern suggests that Stretch To should
support that kind of rotation directly as an option.
Differential Revision: https://developer.blender.org/D6134
Combine computing `size` and normalizing the matrix, invert the
direction of `vec` to avoid negating it later, use `rescale_m4`
instead of matrix multiplication to scale the final result.
Differential Revision: https://developer.blender.org/D6134
We also need to rebuild the whole collection/viewlayer object cache
thing when we relink an objector collection in a collection (since it
might be part of a view layer).
Again, usual disclaimer about how inneficient this is currently, needs a
serious refactor to only tag caches as dirty, and actually rebuild the
whole thing on access.
This introduces object mode tagging for data which hasn't yet been
written back to the ID data.
Now when selecting other sculpt objects, the original objects data is
flushed back to the ID before writing a memfile undo step.
As reported by Clément Foucault. This is a small thing but since we
are refactoring the draw manager for the next blender is nice to
have it fully working before the refactor for comparison.
Note: Camera volume and render were both fine, the camera frame is the
one thing that was not working.
Also in toe-in the convergence plane is always facing the original
camera orientation. It is a known small annoyance.
This test should not be needed and the cause is unclear, but better to avoid
the crash. Possibly caused by files saved with development versions that had
different node type IDs.
Steps to recreate were:
* Open a Node Editor, add some nodes
* Save the file
* Select all nodes (A)
* Save it again, but with Ctrl+S
* Try to select an already selected node
It's supposed to deselect other nodes now, but for as long as the report
banner is shown in the status-bar ('Saved "foo.blend"'), this doesn't
work.
Also happened in the VSE, Dopesheet, NLA or everywhere else we recently
added drag-all-selected support to.
Issue was in there since 2.80. Basically the timer event sent by the
report banner broke assumptions in the selection operator.
Hope this fix doesn't have any side effects. Checked with Bastien
(initial author of this logic), but seems things are fine.
The AA offset should be substracted, not added. I think this was
introduced when I refactored the code in a code review.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6186
Should Fix T70326
This implements the shrinkwrap options suggested in D5933. I did a few
test and it seems much more stable than the previous options.
Reviewed By: jbakker
Maniphest Tasks: T70326
Differential Revision: https://developer.blender.org/D6176
The previous default was 1.7, so the brush was more stable on surface
normal changes, but softer. I don't think users expect this brush to be
that stable, so by using 1.55 we make the brush a little bit stronger on
curved surfaces by default.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6187
This wasn't an issue in the real buildbot environment since the
precompiled libraries are compiled with same ABI as the compiler
used for Blender build. But it was causing issues when building
Blender using buildbot scripts (for troubleshooting purposes)
on a machine with different default compiler ABI.
Usually ABI detection is happening in platform_unix.cmake when
detecting whether there are any precompiled libraries folder
available. This detection is not happening when library folder
is provided explicitly, expecting ABI to be setup explicitly
as well.
In 2011 special handling was introduced, apparently for no other
reason than to address a complaint in T25707 that World and Local
space are equivalent for objects without parent. This causes issues
and confusion, as mentioned in rB599c8a2c8e4.
This special meaning of Local Space is not documented in the manual,
and is not known to experienced riggers, so removing it should not
be a problem.
Differential Revision: https://developer.blender.org/D6095
This commit implements the change in behaviour described in T71246.
In short:
For export, per mesh:
- Custom loop normals are defined → loop normals are exported.
- One or more polys are marked flat → loop normals are exported.
- Otherwise, no normals are exported.
For import, when the Alembic mesh contains:
- loop normals (kFacevaryingScope) → use as custom loop normals, and
enble Auto Smooth to have Blender actually use them.
- vertex normals (kVertexScope or kVaryingScope) → convert to loop
normals, and handle as above.
- no normals → mark mesh as smooth.
- unsupported normal types (kConstantScope, kUniformScope,
kUnknownScope) → handle as 'no normals'.
This also fixes T71130: Alembic split normal export issue
Previously the mesh flag `ME_AUTOSMOOTH` was used in conjunction with
the poly flag `ME_SMOOTH` to determine whether loop normals or vertex
normals were exported. This behaviour was hard to predict for artists,
and hard to describe in the manual. Instead, Blender now only exports
loop normals, computing them if necessary. This way, the mesh in Alembic
should always have the same loop normals as in Blender.
Maniphest Tasks: T71130
Differential Revision: https://developer.blender.org/D6197
This computation is complex and useful enough to expose the existing
C math utility used by BVH nearest to Python. Otherwise this requires
the use of intersect_point_tri and multiple intersect_point_line calls
with some added vector math.
Differential Revision: https://developer.blender.org/D6200
Check was losing precision -- adjust by translating points
before calculating circumcircle.
Also, needed to check for flippability of edges before flipping.
Check was losing precision -- adjust by translating points
before calculating circumcircle.
Also, needed to check for flippability of edges before flipping.
When importing subdivision surfaces a 'Topology Changed' error was shown
even though the topology didn't change at all. The code was comparing to
`totpoly` where `totloop` should have been used.
The multi device code did not correctly handle cases where some GPUs store a
resource in device memory and others store it in host mapped memory.
Differential Revision: https://developer.blender.org/D6126
Data was not quantified properly. It also lets the library choose the suitable
encoding method rather than forcing it to use the edgebreaker method.
Differential Revision: https://developer.blender.org/D6183
Was happening when object transform is animated.
Caused by overly aggressive dependency construction introduced a
while back in 9d4129eee6: we shouldn't add dependencies unless
we really need them.
This change removes unneeded transform dependency for cap objects
(since only their geometry is used), and also removes own transform
dependency if there is no offset object (which is the only case when
own transform is needed).
Differential Revision: https://developer.blender.org/D6184
'rna_CollisionSettings_update' has a history of tagging ob for update:
rB79312c1912b4 ID_RECALC_TRANSFORM |ID_RECALC_GEOMETRY |
ID_RECALC_ANIMATION
rBf90a2123eedc OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME
rBfaf1c9a4bb27 OB_RECALC_ALL
rB7df35db1b136 OB_RECALC
Since the meaning of OB_RECALC_TIME/ID_RECALC_ANIMATION changed a bit
historically (from "please update my animation if the animation
datablock is tagged for update" to "update animation of this datablock")
this was now always overwriting user edit with animated values, making
it impossible to change those values once animated.
Thx @sergey for guidance!
Maniphest Tasks: T68396
Differential Revision: https://developer.blender.org/D6113
When continuous grab, cursor motion was mapped to the min/max.
This caused problems when int/float max values were used.
Now the range is clamped by a value derived from the click-step
so dragging numbers never increases it to an impractically large value.
To recreate the main issue:
* Set render and file browser to show in full-screen in the preferences
* Default scene, press F12 in 3D View
* Press Alt+S to save the image
* Escape the file browser
* Escape the image editor
The former 3D View would now show the image editor. This is a common
use-case that should work.
Full-screen code is a hassle to get to work as expected. There are
reports from 2.5, I did lots of work years ago to get these kind of
use-cases to work fine. But apparently I broke this one with a fix for
another common use-case in March (0a28bb1422).
This now stores hints in the space, rather than the area, which should
make things much more controlable and hopefully help us fix issues like
this.
Here are a few references describing further common issues (all should
work fine now): 0a28bb1422, e61588c5a5, T19296
Checked over this with Bastien, we agreed that at some point we should
do a big rewrite of all of this, for now this is acceptable.
Cycles did not update the "is_enabled" flag on lights when they were synchronized again, which caused all lights disabled by "LightManager::disable_ineffective_light" to be disabled indefinitely. As a result the OptiX kernels were not reloaded with correct features when a change to a light was made. This fixes that by updating the "is_enabled" flag during synchronization.
Differential Revision: https://developer.blender.org/D6141
The cryptomatte sockets were incorrectly numbered using a step size of two. While the increment by two is necessary to get the correct number of render passes, they should be numbered consecutively matching the socket names of the cryptomatte node.
Reviewed By: lukasstockner97
Differential Revision: https://developer.blender.org/D6185
This change replaces old behavior when spline was toggled as cyclic
on double-click.
Doing so was tricky on a tablet and is rather non-intuitive in general.
Differential Revision: https://developer.blender.org/D6162
This adds a new mode to solidify to support non-manifold geometry
with edges using 3 or more faces as input, resulting in a manifold mesh.
Since the differences between these methods don't translate well
into short terms, they're named "Simple" and "Complex" in the UI.
This also adds clamp with respect to angles
to the existing solidify modifier calculation.
Add operator that sets the frame range, with an option to choose the regular or the preview one, around the selected strips.
Reviewed By: ISS
Differential Revision: https://developer.blender.org/D6078
Draw preview range overlay in the video sequencer in the same way as in the other animation editors
Add color control in the theme.
Prevent overlay to be drawn in the driver editor.
Reviewed By: ISS
Differential Revision: https://developer.blender.org/D6074
Skip building proxy if directory can not be created.
Crash happens, when setting custom dir to location of source file itself.
This results in attempt to create directory with the same name as source file.
Differential Revision: https://developer.blender.org/D6148
Reviewed By: sergey
When the stroke has less than 3 points, but only the fill material is enabled, the stroke is invisible and makes the shaders to remove any fill because the shader start and end pointers are not correct.
Now, if the stroke has only fill, but it is not fillable, it is drawn with the stroke color to avoid the errors and these ghost strokes.
The outliner didn't account for weight-paint + pose-mode,
making it consider all pose bones unselected.
When syncing selection, bones were unselected.
This adds a context argument to passed to drawing functions since
finding the weight-paint pose-object in the drawing loop isn't efficient.
In some cases the default data paths for blender does not exist.
For example on windows when using the portable install.
This would lead to errors when trying to lookup default paths in
is_path_builtin. Now we handle cases like this gracefully.
Identifiers for icons representing optical drives should use 'disc', not 'disk'.
Differential Revision: https://developer.blender.org/D6166
Reviewed by Julian Eisel
Frame Selected centers around the last valid stroke.
When Symmetry is enabled the last mirrored `location` was added to the
`average_stroke_accum` in stead of the original stroke location.
This patch will add the `true_location` to the `average_stroke_accum`.
This contains the original stroke location.
Issue happened in Vertex and Weight paint.
Reviewed By:
Pablo Dobarro
Differential Revision: https://developer.blender.org/D6161
- There was no way to select some kinds of data without activating them.
- Pose mode could not be activated at all.
No change to behavior with sync-selection enabled.
Add new `Backface Culling` option to the snapping properties.
This option has nothing to do with the view3d display or the
workbench `Backface Culling` option.
Limitation:
- In edit mode, this option only affects snap to faces.
Maniphest Tasks: T71217
Differential Revision: https://developer.blender.org/D6155
You may want to disable antialiasing if you are working with pixel art
or low resolution textures. It is enabled by default.
Reviewed By: jbakker, campbellbarton
Differential Revision: https://developer.blender.org/D6044
With the latest changes, the PBVH needs extra flags each time the mask is
modified to keep the internal fully_masked and fully_unmasked node flags
updated.
Reviewed By: jbakker
Maniphest Tasks: T70866
Differential Revision: https://developer.blender.org/D6088
Dissolve the vertex when it is wire instead of trying to collapse the
edge. When collapsing the edge, ##v_kill->e## was not NULL, so the
assert in ##bmesh_kernel_join_vert_kill_edge## fails.
Reviewed By: jbakker
Maniphest Tasks: T71053
Differential Revision: https://developer.blender.org/D6159
Previously, with the render display mode set to "Image Editor", we'd use
any image editor that doesn't already show a (non-render-result) image,
even if they weren't set to view mode (but UV, paint or mask mode).
It could be confusing or annoying when using an Image Editor for a
purpose that the mode wasn't created for.
Note that with the introduction of a UV sub-Editor, the old behavor was
even more confusing. Changing a UV Editor to show the render result was
weird.
Previously, you could delete presets that were part of the blender
default install. Now we check if the preset file resides in the bundled
file paths. If so, prevent deletion of the preset.
Reviewed By: Campbell
Differential Revision: http://developer.blender.org/D4522
This new function is part of the 'parallel for loops' functions. It
takes an iterator callback to generate items to be processed, in
addition to the usual 'process' func callback.
This allows to use common code from BLI_task for a wide range of custom
iteratiors, whithout having to re-invent the wheel of the whole tasks &
data chuncks handling.
This supports all settings features from `BLI_task_parallel_range()`,
including dynamic and static (if total number of items is knwon)
scheduling, TLS data and its finalize callback, etc.
One question here is whether we should provide usercode with a spinlock
by default, or enforce it to always handle its own sync mechanism.
I kept it, since imho it will be needed very often, and generating one
is pretty cheap even if unused...
----------
Additionaly, this commit converts (currently unused)
`BLI_task_parallel_listbase()` to use that generic code. This was done
mostly as proof of concept, but performance-wise it shows some
interesting data, roughly:
- Very light processing (that should not be threaded anyway) is several
times slower, which is expected due to more overhead in loop management
code.
- Heavier processing can be up to 10% quicker (probably thanks to the
switch from dynamic to static scheduling, which reduces a lot locking
to fill-in the per-tasks chunks of data). Similar speed-up in
non-threaded case comes as a surprise though, not sure what can
explain that.
While this conversion is not really needed, imho we should keep it
(instead of existing code for that function), it's easier to have
complex handling logic in as few places as possible, for maintaining and
for improving it.
Note: That work was initially done to allow for D5372 to be possible... Unfortunately that one proved to be not better than orig code on performances point of view.
Reviewed By: sergey
Differential Revision: https://developer.blender.org/D5371
In 2.8, code would not enter the new 'Objects' and Collections'
'folders'.
Maniphest Tasks: T71026
Differential Revision: https://developer.blender.org/D6123
Hover (active) widget states now affecting more elements and in a more consistent way.
Differential Revision: https://developer.blender.org/D6098
Reviewed by Campbell Barton
Updated icon set from Andrzej Ambroż.
- Includes new icons for Top Bar, Status Bar, CD/DVD drives, Home, Documents, Temp, Memory, Options.
- Includes small tweaks to many icons throughout Blender
- Also adds a large CD/DVD drive icon for the file browser
This does not add the new icons in the interface yet.
flipped to bottom
While flipping the header to bottom works in the MCE (because MCE doesnt
allow overlapping UI) we need to take the regions visible rect into
account for the Image Editor.
Also correct clickable scubbing area (poll for frame_change) in the
Image Editor and the MovieClip Editor not taking UI_DPI_FAC into
account.
Maniphest Tasks: T70905
Differential Revision: https://developer.blender.org/D6090
using image.unpack() or bpy.ops.image.unpack()
If we offer this in the UI, also expose this to .unpack
Maniphest Tasks: T71171
Differential Revision: https://developer.blender.org/D6152
This brings the behavior in line with Windows and Linux. Going between
multiple windows now doesn't use the first click only to change focus
but also allows Blender to process those events.
When opening the file browser as regular editor, the ID filter flags
as stored in FileSelectParams were not set explicitly, so they were 0.
Since 9100982e80, the value actually passed to the filtering could
differ from that, causing the file list cache to be constantly updated
on every redraw.
Caused by 9100982e80.
Note that this "accidentially" got fixed in master with b546263642,
which is why the issue only showed up in the release branch from that
point.
Instead of checking for names that contain ".", only skip files
that start with a "." (since they're used for ".git" & ".arcconfig").
While other path names may fail to import, it's not the purpose of this
function to validate the path, have the caller must raise an error
instead of silently skipping them.
See D6140.
Deduplicate the code and use the same logic used to
calculate individual elements in `t->values_final[0]`.
Differential revision: https://developer.blender.org/D6135
The problem was the real menu text must be: `Convert to Polygon Curve` as is Object menu.
A GPencil object cannot be converted to mesh in one step. The conversion must be GPencil to Curve and Curve to Mesh.
This is useful for drawing keymap items into the header or status bar
While these icons are available directly,
mapping them from the keymap item isn't trivial.
Incorrect cursor shown for horizontal split when selected from edge context menu.
Differential Revision: https://developer.blender.org/D6124
Reviewed by Campbell Barton
Multiple selection operations failed with weight-paint + pose mode.
Weight-paint + pose mode is a special case that doesn't support
multi-pose mode, so we need to use this instead of the generic
function.
This only impacts push-pull & shrink-fatten.
Flipping this matches zoom where moving the mouse cursor up
increases the zoom-level.
Previous behavior felt unnatural when adding gizmos to these tools.
Was caused by D6068, which did not handle "MEM_PIXELS" memory
when not in background mode. Before that it always fell back to using
generic device memory, so restoring that behavior. In future this
should be changes to use OpenGL interop for optimal performance.
When there was no way to find the data-path from context
the shortcut was still being created.
It would evaluate to "context.(null)".
Now adding shortcuts will be disabled if the path can't be computed.
Large objects with many separate pieces became unstably slow
(run for hours and not finish).
The entire original mesh was being duplicated twice per loose part.
In own tests, millions of vertices and thousands of loose parts
now run in around 5-15 seconds.
* Add proper adjustment for scale in the solver epsilon computation.
* Run at least one full iteration of the solver, even if the initial
state meets the epsilon requirement.
* When applying offset, blend normal into the offset direction
as the initial point moves very close to the target mesh.
Also random improvements to debug trace output in the console.
This fixes the crash, but it does not fix the core issue. The PBVH should
always be available when an object is in sculpt mode and tools should
not need to check for that.
Reviewed By: jbakker
Maniphest Tasks: T70790
Differential Revision: https://developer.blender.org/D6063
Was cause by recent fix for T65134 which assigned original object's
proxy_from to an evaluated pointer.
This is because motion path depsgraph does not include proxies, so
the pointer in an evaluated object was kept pointing to an original
object.
Caused by rB46102cf4e0c4 [which removed the check if the image can
actually be loaded].
Maniphest Tasks: T70903
Reviewed By: campbellbarton
Differential Revision: https://developer.blender.org/D6089
The OptiX implementation wasn't trying to allocate memory on the host if device allocation failed, while the CUDA implementation did. This copies the implementation over to OptiX to remedy that.
Differential Revision: https://developer.blender.org/D6068
'PE_set_data' / 'PE_set_view3d_data' would give us a depsgraph already,
so use it.
Also fix access to PEData->depsgraph without calling 'PE_set_data' prior.
Addresses concern raised in rBcf2c09002fae.
Reviewed By: sergey
Differential Revision: https://developer.blender.org/D6067
When displaying the voxel size for an adaptive domain the resolution of the adaptive domain was used to calculate the world size of the voxel.
This patch changes this to use the initial size of the domain.
When using adaptive domain the overlay was not rendered in the right
place.
Thanks to sebbas for part of the patch!
Reviewed By: sebbas, fclem
Differential Revision: https://developer.blender.org/D6076
When displaying the voxel size for an adaptive domain the resolution of the adaptive domain was used to calculate the world size of the voxel.
This patch changes this to use the initial size of the domain.
When using adaptive domain the overlay was not rendered in the right
place.
Thanks to sebbas for part of the patch!
Reviewed By: sebbas, fclem
Differential Revision: https://developer.blender.org/D6076
Caused by what appears to be a missing flush from evaluated bone back to
original, which then makes it so copy-on-write operation happening after
click (to synchronize selection flags) pushes original bone to its initial
position.
Differential Revision: https://developer.blender.org/D6051
All the single-value texture inputs of Principled BSDF node should use
non-color colorspace profile, not sRGB one (issue raised in
https://blender.stackexchange.com/questions/155617, thanks).
That also revealed another issue - since those color space settings are
stored at the image level itself, not the node one, we need to
duplicate those image data-blocks when we use same picture for e.g. base
color (sRGB) and specular (non-color) inputs...
For now using a basic mechanism for that, might generate several extra,
uneeded copies of the image ID, but that’s better than breaking custom
settings and such.
Note that while this will modify the behavior of the impporters using
that node wrapper, no change should be needed in IO add-ons themselves.
The auto-smoothing flag can now be used by artists when the Alembic file
does not contain custom loop normals.
- Auto-smoothing disabled: mesh is flat-shaded.
- Auto-smoothing enabled: works as usual; set angle to 180° to ensure
a 100% smoothed mesh.
When the relative mode was used, the calculation of the total number of vertices was not done and it was using the total number of vertices in the datablock. This worked for small files, but with complex files the time to allocate all the data was too long and the performance was very bad.
Now, for relative mode the real number of vertex is calculated.
Also fixed the same problem when onion and multiedit is enabled.
This was caused by 2 things: Shadow map bias and aliasing.
It made the expected depth of the shadowmap further than the surface
itself in some cases. In normal time this leads to light leaking on normal
shadow mapping but here we need to always have the shadowmap depth above
the shading point.
To fix this, we use a 5 tap inflate filter using the minimum depth of all
5 samples. Using these 5 taps, we can deduce entrance surface derivatives
and there orientation towards the light ray. We use these derivatives to
bias the depth to avoid wrong depth at depth discontinuity in the shadowmap.
This bias can lead to some shadowleaks that are less distracting than the
lightleaks it fixes.
We also add a small bias to counteract the shadowmap depth precision.
Before this patch you could go to a local view with a single object,
while you had other objects also in edit mode, and your operators would
affect all objects even the ones outside your local view (same for local
collection).
Differential Revision: https://developer.blender.org/D6064
Background dithering was introduced to solve banding issues on gradient backgrounds.
This patch will enable dithering based on the texture that is used for drawing.
Only when using a GPU_RGBA8 texture the dithering will be enabled.
This disables dithering for final rendering, vertex and texture paint modes.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D6056
This adds the ID-Filters visible on append/link to the settings the file
browser remembers, potentially storing them in the Preferences.
Artists in the studio here requested this. They typically have to set up
the same or similar settings every time, so this saves them from that.
The onion skin was nos displayed in secondary screens when disable the Onion switch or the Overlay in the main window.
Added a check to verify if the main overlay and onion switches are enabled in any screen in order to generate the cache data.
This is required to generate the onion skin and limit the times the cache is updated because the cache is generated only in the first screen and if the first screen has the onion disabled the cache for onion skin is not generated. The loop adds time, but always is faster than regenerate the cache all the times.
Reviewed By: mendio, pepeland
Differential Revision: https://developer.blender.org/D6049
This is intended for developers on Windows primarily:
Now, CUDA architectures of type compute_xx are supported. This allows for quicker builds,
at the expense of the CUDA driver running ptxas the first time a kernel is loaded.
Differential Revision: https://developer.blender.org/D5953
Was crashing due to RBW mssing shared->physics_world [which can happen
when undoing the deletion of the last object in the world].
This can be gained back by BKE_rigidbody_validate_sim_world.
Reviewed By: mont29
Maniphest Tasks: T70667
Differential Revision: https://developer.blender.org/D6037
Sequence Editor
Code in 'seq_render_mask' will effectively do
BKE_mask_evaluate(mask_temp, mask->sfra + (cfra - fra_offset), true)
where 'fra_offset' is zero for absolute and seq->start for relative.
If we really want the scene's current frame (as advertised) if Mask Time
is set to Absolute (effectively ignoring the Mask Settings start/end) we
need to change the fra_offset from zero to mask->sfra.
Also BKE_animsys_evaluate_animdata should take mask->sfra into account
as well (otherwise mask animation [points] and other animation [e.g.
opacity] will run out of sync)
Reviewers: campbellbarton, ISS
Maniphest Tasks: T68700
Differential Revision: https://developer.blender.org/D5495
the radius is zero)
Merge threshold for remove_doubles was hardcoded, now scaled by depth.
Reviewed By: campbellbarton
Maniphest Tasks: T70560
Differential Revision: https://developer.blender.org/D6001
Allow different splash heights, without this changes the the
default splash would stop app templates splash screen from loading.
This also allows the default splash height to change without
manually editing the layout.
Now local collections are fully working with cycles preview, while the
collection visibility bug is fixed.
Local collections were not working with cycles viewport even before the recent
commit to allow users to show collections that are hidden in the view layer.
It just got worse with said commit (0812949bbc).
Differential Revision: https://developer.blender.org/D6034
That would lead to crashes and other issues. The solution is not elegant
though, it involves resyncing all the collections again.
Differential Revision: https://developer.blender.org/D6043
We need to handle beta stage in a specific way, since it's no longer
master, but not yet 'real' rc/release stage...
For now, only point to version dir of the API doc, but no need to create
any symlink (that way, 'current' remain pointing to 2.80 release, while
'2.81' is no longer a symlink to 'master', but its own actual doc).
Previously, we used Ctrl+Click for renaming, but since that shortcut is
now consistently used to add items to the selection, we can't use that.
In other cases we switched to F2 now, so it makes sense for the File
Browser too.
Further, AFAIK renaming was only possible through the context menu,
which makes it hard to discover in the right click select keymap (have
to press W).
Note that I had to do some internal changes to ensure the context menu
always acts on the clicked/hovered item, while the shortcut operates on
the active item. William and I agreed that this is likely the behavior
expected by most users.
When executing the node selection operator through Python, or in fact
any similar select operator with drag-all-selected support, the operator
was enabling modal execution, which should not be done in this case.
Reason was simply a wrong default for an internal property.
Note that the issue also affected animdata handling...
Checked all usages of the `BKE_libblock_copy_ex()` function, and
think never handling user count here is valid, although a bit risky
maybe. But other solution would be to add yet another copy flag, so
would rather go with that one for now.
This reverts commit 20b2acf336, reversing
changes made to f185cc0ca5.
Merges should only go form the release branch to master. For backporting
commits, use cherry-pick.
Note that this commit fixes the crash itself, but actual issue is *how*
that situation could happen (having insert override operation with local
'source' overriding data-block with an empty bone constraints stack...).
This commit adds a shadow to the grid scale info text in the 3d View,
to make it more visible like the rest of that section.
{F7798605}
Differential Revision: https://developer.blender.org/D6025
This is a configuration of Blender mirror on Github which automatically
closes Pull requests and gives developers instructions how to submit patch
to an official code review.
Differential Revision: https://developer.blender.org/D6027
This patch is only for the eyedropper to create materials.
Options:
Click: Create Stroke Material
Shift+Click: Create Fill Material.
Shift+Ctrl+Click: Create Stroke and Fill Material.
Toolbar:
{F7718606}
Reviewed By: brecht, mendio
Differential Revision: https://developer.blender.org/D5688
This was detected fixing T69459
Part of Differential Revision: https://developer.blender.org/D6045
Note: done in a separated commit to keep track of changes done not directly related to bug reported in T69459.
It is not allowed to do tagging or updates while dependency graph is
in the middle of evaluation.
This is something what is simple to violate from python code. This
change adds some sanity checks.
The request to update view layer or dependency graph will raise an
exception in Python now, so it's easy for scripters to notice.
Tagging for update will do silent return unless running with debug
command line argument. This is because it's a bit tricky to know
which exact dependency graph corresponds to a context from which
an update tag was triggered.
Differential Revision: https://developer.blender.org/D6035
After doing some test, the cross cursor is too intrusive when you are drawing in grease pencil, so we decided to change by Dot cursor.
Reviewers: @brecht@mendio @pepeland @pablovazquez @billreynish
This solves performance issues on some computers where there is significant
threading overhead. Rather than doing the complicated work of optimizing our
own task scheduler, use TBB which appears to work well. The downside is that
we have another thread pool, but it is already there when using OpenVDB voxel
remesh.
For future releases we can switch to using TBB to replace our task scheduler
implementation entirely, and use the same thread pool for BLI_task, Cycles,
Mantaflow, etc.
Differential Revision: https://developer.blender.org/D6030
In Blender 2.7 delete would permanently delete files, now this function is back
but using more standard behavior.
This patch includes code contributed by Kris (Metricity).
Differential Revision: https://developer.blender.org/D4585
Was caused by non-normalized coordinates (normals). Note this is not 100%
correct as the dFdx functions can be the same for packs of 4 pixels and the
derivated value can only be correct for one pixels.
This is because smoothed normals are a non-linear function (because of the
normalization).
The correct fix would be to do the dFdx offset BEFORE any normalization.
This is something which worked in Blender 2.79.
Need to do special trickery to ensure peoxy_from points to a
proper object.
Differential Revision: https://developer.blender.org/D6040
The manipulator would hide axes that were locked, even if the lock was
applied to a different space. That would lead to confusing behavior of
the manipulator. E.g.:
* Add armature
* Enter Pose Mode and select the bone
* Lock X and Y location in the Sidebar
* Enable the Move tool
* Only the Y axis is visible, but doesn't do anything on dragging
The manipulator would only show the Y axes, even though the lock is
applied to the bone's local Y axis, which matches the manipulators Z
axis.
Differential Revision: D6021
Reviewed by: Brecht van Lommel, William Reynish
When an edit-bone was locked, we hid the transform manipulator for it.
But only if the bone itself was selected, not when the root or tip were
selected, even though they are locked then too. So this makes sure the
manipulator is shown in neither case.
The goal is to make it able to use pre-compiled CentOS libraries on a
more modern system. Main issue was that it's possible that the compiler
on a newer version is defaulting to different C++11 ABI.
This change makes it so that if there is NO native libraries in the
lib folder and there IS pre-compiled CentOS folder, it will be used and
compiler will be forced to old ABI.
Differential Revision: https://developer.blender.org/D6031
Proposed fix for T70141.
Before, the ruler was using the name of the layer as key, but this is very weak because if the layer name changes, the layer gets an annotation layer.
Now, the layer is marked using a flag and now it's possible to rename it.
Reviewed By: dfelinto
Differential Revision: https://developer.blender.org/D6028
Was caused by the bump node not being evaluated because the other branch
was evaluated before.
To fix this, we use fromnode instead of tonode.
Also we fix a potential issue with recursiveness because
ntree_shader_copy_branch() also use nodeChainIterBackwards() which would
reset the iter_flag in the middle of the parent iteration. Use iter_flag
as a bitflag for each iteration to fix this.
With this commit sculpt mode draws the real mesh wireframe instead of the
triangulated version by ignoring non real edges when building the PBVH GPU buffers
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D6032
Namely addresses -Wstringop-truncation
Not sure if there is anything to be done for strncpy.
Differential Revision: https://developer.blender.org/D6006
This commit also fixes the same issue in elastic deform
Reviewed By: jbakker
Maniphest Tasks: T70554
Differential Revision: https://developer.blender.org/D6014
This is pretty conservative. We do not show warnings for e.g. HD 4000 with the
latest drivers as they appear to be working mostly fine even if unsupported,
and there is nothing the user can do to improve things.
Ref T70520
Removes custom logic from buildbot's packing step.
This also removes icons/ folder, but CMake was already copying the
icons to the root of the install folder.
The CMAKE_SOURCES variable is not yet initialized when the buildbot
configuration is read. This is similar to the include of full release
configuration happening earlier in the file.
Users now can turn on in a viewport collections that are temporarily
hidden (eye) in the view layer.
Design task: T61327
As for the implementation, I had to decouple the visibility in the
depsgraph from the visibility in the view layer.
Also there is a "bug" that in a way was there before which is some
operators (e.g., writing a text inside of a text object, tab into edit
mode) run regardless of the visibility of the active object. The bug was
present already (with object type visibility restriction) in 2.80 so if
we decide to tackle it, can be done separately (I have a patch for it
though P1132).
Reviewed by: brecht (thank you)
Differential Revision: D5992
clang got a little to aggressive discarding unused variables
see D6012 for details.
Differential Revision: https://developer.blender.org/D6012
Reviewers: brecht, sergey, angavrilov
Walk Navigation was missing rotation keyframes on confirm (when animation
wasnt playing) after rB22bdd08dfd0.
Because for walk [in contrast to fly], the cursor is constantly warped
(WM_cursor_warp in walkEvent), we cant do something reasonable with
comparing mouse positions (to detect rotation) when mouse comes to rest.
Now remember if rotation changed at any time.
Also tweaked the insertion for location keyframes (which was always
happening even if the camera did not move), now checking the real dvec
(instead on relying on speed)
Reviewed By: dfelinto
Maniphest Tasks: T70585
Differential Revision: https://developer.blender.org/D6018
Found this while looking into T70463, solves the high spinning times
mentioned in T70463#791026.
Sounds logical that iterating over an array to modify a single property
is faster than doing it in threads. But strangely, doing it for both
nodes and its components is still faster in threads here.
Gives extra speedup with a file mentioned in the report.
Reviewed By: brecht, mont29
Differential Revision: https://developer.blender.org/D6017
This should fix most of the shrinkwrap artifacts when the preserve volume option is active. After this commit the default voxel remehser settings should not fail in the default cube.
Reviewed By: zeddb
Differential Revision: https://developer.blender.org/D6010
Fixing/working around another weakness of current RBW model... This is
not really nice, but it should work for now, and we cannot really do
anything else but that kind of monkey patching here anyway.
Only regions with alignment set should be toggle-able. If this is not
set, then the region is likely either a main region, or entirely hidden
by the user (not just collapsed).
Evaluation is not entirely cheap even in the case when there is nothing tagged
in the scene. This is because of all the calculation of pending operations,
cleating runtime flags and so on.
This commit makes it so time operation is tagged for update prior to early exit
check. Improves playback speed in a scene without anything animated.
Maniphest Tasks: T70463
Differential Revision: https://developer.blender.org/D6002
Actually, in Dopesheet mode, the regions shouldn't be toggle-able at
all. For the user they should appear to not exist.
Previously the Movie Clip Editor archieved this by setting the region
alignments to NONE, which this restores.
Introduced in 6aef124e7d.
Part of T57918. Selecting and dragging items were conflicting actions
previously when both were using the same mouse button. This avoids the
conflict.
See be2cd4bb53 for details on behavior.
This commit enables antialiasing in 2D painting.
It also includes some fixes related to line drawing in the stroke spacing code.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5833
This makes multires undo much faster and fixes the viewport lag after and undo operation.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5994
The issue was caused by crazy space distortion orientation happening
for subsurf modifier.
Solved by making it so subsurf only deforms the surface but keeps
matrices as-is. This is not fully mathematically correct, but is better
that the fall-back solution which was doing wrong matrices anyway.
Also, this is closer to have subsurf was handled prior to the
related changes.
Reviewed By: brecht, pablodp606
Differential Revision: https://developer.blender.org/D5991
disabled and no world assigned to scene
BlenderSync::sync_world still relied on a blender world (mixes the world
viewport color with the studio light), for now just take black if no
world is present.
Maybe we should we use the theme color in the future here (seems eevee
does this in that case) -- we'd have to pass down `b_userpref` from
`BlenderSession::render` down to `sync_data > sync_shaders > sync_world`
then afaics.
Reviewed By: jbakker, brecht
Maniphest Tasks: T70573
Differential Revision: https://developer.blender.org/D6005
This keymap was the old polygon mode for old grease pencil and now this have been replaced with Line tool. As this code was not ready for this keymap, the code gets out of control and fails. The solution is to remove this deprecated keymap.
Camera background images were not shown under transparent objects.
This patch performs an alpha under for background images for cycles.
In order to see the difference the Film transparency needs to be turned on.
Note that workbench and EEVEE still needs to be adapted as they don't
write store alpha value in the viewport.
Side note. This implementation is already an improvement of the current behavior, what users are requesting. (Show background images underneath cycles viewport rendering.) It is clear that this patch still needs to be extended to workbench and eevee. For now that should be marked as a known limitation.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5437
Underline was implemented in rBa07394ef2cfd.
It seems that the extrude feature never worked.
Ref T70418
Reviewed By: mont29
Maniphest Tasks: T70418
Differential Revision: https://developer.blender.org/D5972
Side-reported in T70505.
Code did not ensure deleted object was removed from the RBW constraints
collection, leading to some invalid status (object in constraints
collection but without relevant contraints data).
Also fixed another issue - code deleting RBW objects would try to remove
any constraint one using it as target, in a very bad and broken way,
since you cannot iterate over objects of a collection while removing
some... Now instead just NULLify relevant pointers... I hope it works,
otherwise we'll have to take a different approach.
Needless to stress again how weak the whole RBW code is in general, and
regarding same object being used by RBW in more than one scene in particular,
that is known broken situation anyway.
In fact, the operator implementation seems to have some issues, which is
why this behaved so glitchy. But for properly set up keymaps it should
work fine.
Part of T57918. Selecting and dragging items were conflicting actions
previously when both were using the same mouse button. This avoids the
conflict.
See 056fcdfe7bbed3 for details on behavior.
Part of T57918. Selecting and dragging items were conflicting actions
previously when both were using the same mouse button. This avoids the
conflict.
See 056fcdfe7bbed3 for details on behavior.
Part of T57918. Selecting and dragging items were previously conflicting
actions when both were using the same mouse button. This avoids the
conflict.
See 056fcdfe7bbed3 for details on behavior.
Based on work by Bastien and Brecht in the Node Editor, this adds more
generalized support for selecting items so that click+drag actions on
items (nodes, makers, dopesheet keys, etc.) works as wanted.
Note that this only adds the barebones to support this in other editors,
it's not used yet (will be done in followup commits).
The behavior is supposed to work as follows:
* Clicking an unselected item immediately selects it, and deselects
other items (doesn't wait for release events).
* Click+drag on an unselected item immediately selects it, deselects
others and drags it in one go (don't require selecting it first!).
* Click+drag on a selected item won't change the selection state (and
won't send an undo push) and start dragging all selected items as soon
as the drag event is recognized.
* Clicking on a selected item will still deselect others, but that will
only happen on mouse release, when we know the intention is not to drag
the item.
Included in: https://developer.blender.org/D5979
Reviewed by: Brecht van Lommel, William Reynish
The previous method produced non smooth interpolation results and it was
very hard to control. (At least for me it seemed to be broken until I
actually took a look at what the code actually did)
Now we simply linearly interpolate between the breakdown position and
the current bone data.
Reviewed By: Sybren, Hjalti
Differential Revision: http://developer.blender.org/D5892
Opus support was enabled in 2ddfd51810. This commit adds the Opus
library and configures FFmpeg to be compiled with Opus support.
NOTE: It may be required to run `cmake -U '*FFMPEG_LIBRARIES*' .` in
your Blender build directory in order to refresh the `FFMPEG_LIBRARIES`
setting and add libopus.
This issue was two-fold:
- In the VPX library build script: missing `--enable-vp8` and
`--enable-vp9` meant that the choice to enable these codecs or not was
left to the library's `configure` script, rather than an explicit choice.
On the build-bot it chose to not enable them.
- Missing pkgconfig paths passed to the FFmpeg build script
Thanks @brecht for helping out.
Adds a check when starting blender if your platform is supported. We use a blacklist
as drivers are updated more regular then blender (stable releases).
The mechanism detects if the support level changed or has been validated by the user previously.
Changes can happen due to users updating their drivers, but also when we change the support
level in our code base.
When the user has seen the limited support level message it is saved in the user config.
It would be better to have a system specific config section, but currently not clear
what could benefit from that.
When the platform is unsupported or has limited support a dialog box will appear including a link
to our user manual describing what to do.
**Windows**
Windows uses the MessageBox that is provided by the windows kernel.
**X11**
We use a very lowlevel messagebox for X11. It is very limited in use and can be fine tuned when needed.
**SDL/APPLE**
There is no implementation for SDL or APPLE at this moment as the platform support feature targets mostly Windows users.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5955
The gain socket in the Musgrave node should be available in the ridged
multifractal mode. The logic for the availability was incorrect.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5989
This basically reverts 540eb2dc1e for an alternative solution that
only enforforces release_confirm [ignoring the preference] on mouse for
the node editor.
Approved by @brecht in T70504.
The bug was basically just caused by a missing 'edit_image' and
'edit_image_user' pointer in context for
'node_shader_buts_tex_environment_ex'.
So adding the following there would be enough to fix the bug:
uiLayoutSetContextPointer(layout, "edit_image", &imaptr);
uiLayoutSetContextPointer(layout, "edit_image_user", &iuserptr);
However, I would suggest using the full-flegged uiTemplateImage (just as
'node_shader_buts_tex_image_ex' does -- instead of a "handmade" subset)
for the following consistency reasons:
- Layout was using single column for image textures, but not environment
textures
- Save / Discard feature on editing the image was there for image
textures, but not environment textures
- Environment textures: Color Space was displayed on node (but not
properties)
- Environment textures: Animation / Sequence settings were displayed on
node (but not properties)
Cant think of a reason for _not_ displaying the whole set for
environment textures (just as for regular image textures)?
Maniphest Tasks: T70454
Differential Revision: https://developer.blender.org/D5988
- Fix accumulate by allowing normal radius greater than one. Now it works as it should and it should be enabled by default
- Make the square test sharper. This gives a lot more definition to the brush, even when working with fewer polygons
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5984
The clamp option in the Map Range node doesn't work correctly when the
inputs are linked. The code didn't put that into considration.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5987
Quadriflow does not support non manifold meshes. (Edges with > 3
connected faces and discontinuous face normal directions)
While it does sometimes "work" in these configurations, the results are
not good and in most cases it just flat out will crash.
Added a sanity check to make sure that the input mesh is manifold.
Reviewed By: Brecht
Differential Revision: http://developer.blender.org/D5877
This commit solves the bug itself (code was broken when real_id owner of
the private data ID could not be found), and generates a more sensible
representation for all evaluated IDs, makes no sense to display them as
being part of `bpy.data....`!
Now, custom props defined as overriddable can be overridden, saved,
reloaded, etc. That fixes the last main issue with them.
Note that custom props still have a lot of glitches and weirdness in
their overriding behavior, but for now the most important is finally
achieved, will let them rest and settle a bit, those have been
incredibly painful to tame... :(
Before, the modifiers were evaluated in Draw Engine and this required to calculate a factor to increase the VBO size.
Now, the modifiers are evaluated in Depsgraph and the Draw Engine receives the evaluated stroke with the final number of vertices. As the number of vertices is the final value already, if Draw Manager increases the number with the modifiers only increases the memory with empty space because never would be used. This commit removes this double calculation, reducing the memory usage and removes a loop to calculate the size by modifier too.
Also, the function getDuplicationFactor() has been removed because is not required anymore.
Problem was twofold
1) `GENERATOR_IS_MULTI_CONFIG` is a property not a variable so
the test for it would always be false, unless you set a custom
CMAKE_INSTALL_PREFIX (like the buildbot does) the unit tests
would have a wrong working directory and complain about missing
dlls or blender executable
2) Tests added outside of `/test` (like libmv) would have no working
folder set since the variable would not be visible for them.
consulted @sergey who voiced the opinion that duplicating the code
to the test macro was slightly less evil than moving it to the main
CMakeLists.txt
Due the internal design of the drawing engine and the special requirements for 2D inside 3D, it's required to keep the original stroke visible in order to display the particles. If the original stroke is hidden, the particles are hidden too.
This commit only fix the segmentation fault. Make visible the particles when the original is hidden would require a complete redesign and maybe would break some 2D features.
For many users, this will make the File Browser window behave more like
what they would expect. It addresses the issue of the File Browser
becoming hidden behind the main window by clicking anywhere in the
latter. It communicates the interruptive, but temporary nature of the
operation a bit better.
Further, on tiling window managers the File Browser now opens as
floating by default, like in other applications.
Note that this also makes sure the File Browser is always opened as
separate window, so it doesn't re-use the Preferences, or any other
temporary window anymore. This seems to have been a common annoyance.
More concretely, this makes the File Browser window behave as follows:
* Stays on top of its parent Blender window, but not on top of
non-Blender windows.
* Minimizes with its parent window
* Can be moved independently
* Doesn't add an own item in task bars
* Doesn't block other Blender windows (we may want to have this though)
* Opens as floating window for tiling window managers (e.g. i3wm/Sway)
Further notes:
* When opening a file browser from the Preference window (or any
temporary window), the main window, as the file browsers parent is
moved on top of the Preferences, which makes it seem like the
Preferences were closed. This is the general issue of bad secondary
window handling as window activation changes. I made it so that the
window is moved back once the file browser is closed.
This behavior is confusing and would be nice to avoid. It's a separate
issue though.
* On most window managers on Linux the temporary window can not be
minimized and maximized, they disable that for dialog windows.
* On Windows and macOS, only minimizing is disabled, as there is no
decent way yet to restore a window if it's not shown in the taskbar.
Reviewed By: Brecht van Lommel, Campbell Barton, William Reynish
Edits and macOS implementation by Brecht.
Differential Revision: https://developer.blender.org/D5810
Part of T69652.
Assign, select, deselect buttons added when in edit mode to complete the functionality
of the shader editor vs. the properties panel.
Reviewed by: brecht
Differential Revision: https://developer.blender.org/D5768
This has already been fixed in 8d207cdc3b
as fix for T52472: VSE Audio Volume not set immediately, but I failed to
backport it to upstream audaspace which is the reason the problem was
back.
The default was changed with an initial implementation of the feature.
With the feedback from animators, having a behavior which affects curves
outside of a changing range is not convenient for professional animators
working on high quality character animation. On the other hand, automatic
smoothing is better for casual animation of object motion.
This change adds an ability to change the default via User Preferences.
Differential Revision: https://developer.blender.org/D5875
This solves an issues where these text fields would use menu background colors,
making it difficult to create a correct theme.
Default theme looks the same, only Blender Light now shows a dark text field.
Patch contributed by Paul (Thirio).
Differential Revision: https://developer.blender.org/D5906
We don't need to filter the fully masked nodes here after adding the flag
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5973
This disable the indirect drawcall on all Nvidia hardware.
This has to be until nvidia fixes their drivers or instruct us
how to correctly fix the issue.
Related to T70011 Various display issues on NVIDIA
after draw call batching.
Alt-LMB is used in quite a few areas now, see T69323
using OS-Key allows these conflicts to be avoided.
Currently disabled for WIN32, since it conflicts with the start menu.
Changing this values should only support horizontal movement as we are no longer trying to match the size of the cursor and the size of the circle preview in the widget.
Reviewed By: brecht
Maniphest Tasks: T70310
Differential Revision: https://developer.blender.org/D5931
Now the grid matrix is calculated when the shading group is created.
Also, the grid pass is only created when needed and reduce memory usage when the scene is not using grease pencil objects.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5966
Caused by 5c79f2d0fb.
If no valid node_start is provided, we can just skip (e.g.
'ntree_shader_bump_branches' is not done then, but this is not
neccessary without a valid eevee output node anyways...).
Maniphest Tasks: T70441
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5969
Rendering would produce invalid results or crash if the Vector pass was active but motion blur was inactive. This caused the OptiX BVH to be built with motion (because objects reported motion available), but the pipeline to be built without motion support (since with disabled motion blur this is not in the list of requested features). The two are not compatible and therefore caused issues. This patch fixes that by not building the BVH with motion if motion blur is not active (which makes sense).
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5968
Boost 1.68 has a bug in its type_traits where it does not include the right
header for the is_assignable macro when building with Clang. Temporarily work
around it until we upgrade to a newer Boost version that fixes it.
Differential Revision: https://developer.blender.org/D5962
1) Clang was given the wrong VS version to emulate when used in
combination with VS2019 causing build issues.
2) The erroneous supplied parameter `-std::c++11`caused CMake to
fail running its compiler detection scripts.
Previously when clicking and dragging with LMB you would only move the entire
plane track. In order to move the corners independently you would have to use
your right mouse button. This would also prevent the context menu to show up.
Now LMB click and drag on corners moves them. If you LMB click and drag one of
the 4 edges of the plane track you would move the entire plane track.
Differential Revision: https://developer.blender.org/D5519
At the moment, grouping a single node that has hidden sockets, exposes all
sockets in the node group. This patch just filters hidden sockets, so that
the node group's interface remains the same as the node being grouped.
Differential Revision: https://developer.blender.org/D5533
Produces almost the same result but takes in account all the edges instead
of only four, which gets rid of the need to select specific edges. Also,
added a check to prevent it from destroying boundaries.
Differential Revision: https://developer.blender.org/D5763
This is not actually fixing the real issue here, PackedFile structs are
never supposed to have a NULL pointer - and in that monster .blend file,
the pointer is not NULL, but the actual data chunk has been lost
somehow, so it gets NULL during read process.
Very unlikely we ever know how such corrupted .blend was created though
(there's probably a fair chance that this is not even due to a bug in
Blender, but rather a glitch in filesystem or something).
So for now, ensure at read time that we get a coherent state (i.e.
remove any read PackedFile that would have a NULL data field), and add a
few asserts in relevant code to check we never get NULL data pointer
here.
Curves with motion blur produced wrong results with OptiX (T69801). This is because the AABBs for the motion steps were calculated from incorrect attribute data because the offset into the attribute data array was incorrect.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5961
This applies to all paint modes except sculpt and grease pencil brushes.
When painting color or weight it's best to paint the color
the user has selected, without them having to make multiple strokes.
Update image undo to store buffers for each step:
- Undo buffers share tiles to avoid using too much memory.
- Undo support for different sized buffers
allowing operations such as crop or resize.
- Paint tiles have been split into separate API/storage.
- Painting speed wont be impacted significantly
since storing the extra tiles is done after the stroke & only
for the first undo step.
Resolves T61263, see D5939 for details.
The core of the issue here is that 'make single user' functions still
does its own, manual and quite partial, remapping of IDs, which covers
all most common cases but cannot consider *all* possible ID usages
(especially when it comes to drivers or custom properties, that can
essentially point to any kind of data-blocks).
This fix is merely a band-aid, there is no way to fully solve this
without a complete rewrite of that area of code to make use of modern ID
management code.
present
Selection state of lattice points as well as their weight were not kept
when going in and out of editmode, code would just copy positions.
Now copy the whole BPoint instead.
Reviewers: campbellbarton
Maniphest Tasks: T70376
Differential Revision: https://developer.blender.org/D5948
Having a constant FCurve doesn't make sense for drivers; either linear
or Bezier should be used. Since the code is already creating a Bezier
curve, I just added the flag to not look at the user preferences in this
case.
Reviewed by: angavrilov
Differential Revision: https://developer.blender.org/D5921
Changes to cursors that can be used for painting and sculpting.
Differential Revision: https://developer.blender.org/D5951
Reviewed by Brecht Van Lommel
This makes it so that some display related properties of the file
browser state are remembered in the Preferences. Otherwise, users often
end up doing the same set up work over and over again, so this is a
nice way to save users some work.
It's typical for other file browsers to remember their state too, so
another benefit is having a more conventional behavior, meeting user
expectations better.
Some points:
* We currently store: Window size, display type, thumbnail size,
enabled details-columns, sort options, "Show Hidden" option. More can
be added easily.
* No changes are stored to the Preferences if "Auto-save Preferences"
is disabled. This is how Quick Favorites behave too and it's a
reasonable way to make this behavior optional.
* The Preferences are only saved to permanent memory upon closing
Blender, following existing convention of Preferences and Quick
Favorites.
* If settings weren't actually changed, Preference saving is skipped.
* Only temporary file browsers save their state (invoked through
actions like open or save), not regular file browser editors. These
are usually used for different purposes and workflows.
* Removes "Show Thumbnails" Preferences option. It would need some
special handling, possibly introducing bugs. For users, this
simplifies behavior and should make things more predictable.
Left in DNA data in case we decide to bring it back.
Reviewers: brecht, #user_interface, billreynish, campbellbarton
Reviewed By: #user_interface, William Reynish, Campbell Barton, Brecht
van Lommel (quick first pass review in person)
Maniphest Tasks: T69460
Differential Revision: https://developer.blender.org/D5893
This commit introduces flags to tag the PBVH nodes as fully masked or unmasked. This is used in do_brush_actions to filter fully masked nodes during a stroke. Other tools can also be updated to use this flags.
Sculpt updates now require a flag to update the mask or the vertex coordinates.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5935
The OptiX device only loads the denoising kernels when the "use_denoising" feature is active. This was not set by the calling code however and therefore they were never loaded and attempting to launch them failed (see T69801).
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5946
The "optix_devices" array was not freed on exit, which caused a memory leak (see T69801).
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5944
Currently, we use the crosshair cursor in Sculpt mode, but not in the other paint modes.
- Sculpt Mode: This crosshair cursor is too weighty.
- Texture, Weight, Vertex Paint: Using the arrow cursor for painting is not right.
This commit makes the following changes:
- Use the new special paint crosshair instead
- Use this cursor in all paint modes, not just Sculpt
Reviewed by: Brecht
Differential Revision: https://developer.blender.org/D5940
`RNA_property_overridable_get()` need the original RNA property (i.e.
the actual IDProp in case it is one), not the 'proxy' type property
returned by `rna_ensure_property()` for IDProps.
Makes custom properties of library overrides editable at last, now we
only have to keep them overridden values!
This reverts commit 44d042094e and adds a
simpler workaround for just the node links display issue. There are other
issues though so this is not a full workaround.
The upper bar (containing file path, navigation and display buttons) may
now be split into two rows as horizontal space is reduced.
The first row contains the navigation related buttons, the lower one the
filter and display related ones.
Mainly solves the issue where the file path and search buttons became
barely usable in tight layouts, but generally makes things better for
such cases.
Main reason for doing this is that the navigation buttons are very
close to the file list now, making them much faster to reach.
Initially we let the upper bar (the one with the file path, navigation
and display buttons) use full area width, because designs back then had
more horizontal space problems. The designs have changed meanwhile, and
horizontal space is less of an issue.
However, when the file browser is shrunk horizontally, or if it's open
in a small area (e.g. see "Shading" workspace), having the tool region
open brings back the space issues. But even the file list layout becomes
problematic then, and the same issue was present before the new file
browser design, so we've decided this is an acceptable tradeoff.
* We don't show the prompt when invoked through the button either
* Creating directories isn't a destructive action and it's not dangerous
* The prompt is annoying and users often requested getting rid of it
This change is applied to both, the default and the industry compatible
keymap.
Also applies to some other sculpt tools like filter and mask expand.
The full update happens after the paint stroke is finished, so it does not
happen on view navigation, which would cause a delay.
Ref T70295
Differential Revision: https://developer.blender.org/D5922
This improves performance of some sculpt tools, particularly those that modify
many vertices like filter and mask tools, or use brushes with large radius.
For mask expand it can make updates up to 2x faster on heavy meshes, but for
most tools it's more on the order of 1-1.1x. There are bigger bottlenecks to
solve, like normal updates.
Ref T70295
Differential Revision: https://developer.blender.org/D5926
This is under the assumptions that each node has enough work to avoid
the threading overhead, while also having a possible variable amount of
work. For example most of the vertices being masked or outside of the
brush radius.
Improves performance by about 10% for tools like mesh filter on an
entire 3 million poly mesh, tested on a quad core.
Ref T68873
This mostly happens automatically anyway since there is usually not enough
time left over for it. But when it does it happen it breaks partial redraw,
and may also have a negative impact on responsiveness.
Ref T70295
Assuming it's actually necessary to do this check very efficiently,
replace the hack based on caching a pointer, with a different one
that caches the string comparison result in the operator object.
Should speed up eevee mesh update a tiny bit in certain particular cases
(deform modifier + (shader using texcoord (but not generated output) OR
principled bsdf OR geometry node (except tangent output))).
Snake Hook: make it more clearly different from Grab, and also better communicate what it can do
Pose: remove arrow, which was hard to see anyway
Pinch: make arrows larger and more visible
This adds the same high quality cursors on macOS as we have on Windows.
These are stored as 32*32 pt PDFs, same as the built-in OS cursors
Reviewed by: Brecht Van Lommel
Differential Revision: https://developer.blender.org/D5907
This commit introduces the following changes:
- Invert the direction of the brush strength WM control. It was working in the opposite direction to any other control in Blender. Now dragging to the right increases the strength.
- Increase the alpha of the cursor
- Remove the font shadow of the numbers in the WM control. It was adding too much visual noise when rendered on top of the brush alpha
- Add a second circle to preview the strength in the cursor
- Increase the resolution of the cursor circles. Now they look smooth even when working with large brush sizes.
- Add a line preview to display the brush curve
- Don't offset the cursor preview when changing size and strength
Reviewed By: billreynish, brecht
Differential Revision: https://developer.blender.org/D5889
This commit enables OpenVDB adaptivity in the voxel remesher. It can be useful to reduce the polygon count if you want to switch to dyntopo after using the voxel remesher workflow.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5918
With the previous behavior, it was impossible to manipulate areas with a lot of complex shapes like fingers, as the pose origin was calculated only with the topology inside the radius.
With pose offset, the previous method is used to calculate the direction of the "bone", and an extra offset is added on top of it. This way you can set the pose origin in the correct place in this kind of situations. The pose factor grows to fit the new rotation origin.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D5841
We should not be updating the cache true location there.
This commit also fixes the snake hook default alpha.
Reviewed By: brecht
Maniphest Tasks: T56497
Differential Revision: https://developer.blender.org/D5915
This fixes some artifacts when working on curved surfaces. Previous
behavior was with accumulate on, so that is now the default.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D5826
Was caused by DRW_mesh_batch_cache_get_edituv_faces_stretch_area called
after DRW_mesh_batch_cache_create_requested. So it was created on the wrong
object/mesh.
The 'add mode' was a `short` between -1 and 2 inclusive, and magic numbers
sprinkled throughout the code. It's now an enum with descriptive names.
No functional changes.
This patch replaces D5787. Now instead to replace the startup.blend file, all the changes are done in versioning and moved to shared module to be reused by Brush reset.
Reviewers: brecht, mendio
Reviewed By: brecht
Subscribers: pepeland, mendio
Differential Revision: https://developer.blender.org/D5913
Workaround that does not fix the real issue.
The bug is caused by glBufferData inside
DRW_instance_buffer_finish > GPU_vertbuf_use
but only after the selection code which resets the number of items in
idatalist->pool_buffers.
I don't understand why this is happening as the vbo ids are all valid and
no error is reported. What is even more strange, is that it affects another
vbo which has no connection with the ones in DRW_instance_buffer_finish.
When using the samples, the interpolated points get abrupt steps because the system cannot receive all events in a short period of time.
This is more noticeable when the samples are set to 10 and the pen is moved very fast. The problem with post-processing smooth is that is applied to all stroke and this removes details.
The smart smooth is automatic and detect only the segments in the stroke where the system was unable to capture all movements and apply a smooth algorithm.
Since our ffmpeg is built with openjpeg support and thus can decode jpeg
2000 (in both J2K and JP2 codec flavors as well as high bitdepths), added
these extensions to the supported list.
Also IMB_ispic > IMB_ispic_type > imb_is_a_jp2 was only testing for jp2,
now do both jp2/j2k.
Reviewers: brecht
Maniphest Tasks: T70276
Differential Revision: https://developer.blender.org/D5909
The first element of the loop was not calculated for all onion modes. For select mode the first selected is used, for other modes the first frame in the layer is used.
visible in the viewport
Seems to be an issue of not correctly freeing the PTCacheEdit (see
T68645 for details), after discussion with sergey we went with the quick
and dirty fix to free the path cache early for now. Other solution of
freeing it in 'psys_cache_paths' for the non-evaluated psys [which would
also fix the particle delete, then undo crash from T69000] needs more
deep investigation and, possibly, reconsideration.
Reviewers: sergey
Maniphest Tasks: T68645
Differential Revision: https://developer.blender.org/D5755
Caused by rB914427afd512.
Since above commit 'pe_get_current' checks for an active depsgraph. This
caused the skipping of handling
`PT_CACHE_EDIT_UPDATE_PARTICLE_FROM_EVAL`for everything calling
`PE_get_current` (this passes a NULL depsgraph as opposed to
`PE_create_current`). So we now pass a depsgraph here as well...
Note there are two RNA cases where we pass NULL, namely
- rna_ParticleEdit_editable_get
- rna_ParticleEdit_hair_get
I guess these should be fine though (no functional change to current
master)
Reviewers: sergey
Maniphest Tasks: T69488
Differential Revision: https://developer.blender.org/D5752
This patch adds paint symmetry support to Quadriflow. It bisects and mirrors the input and the output from the remesher to build the final mesh using the preserve boundary option.
This is also an important performance improvement in Quadriflow because it only needs to process half of the mesh with half the resolution.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D5855
This commit fixes most of the issues we currently have in the voxel remesher. Mesh volume is preserved when doing multiple iterations, so the sculpt won't shrink and smooth each time you run the remesher. Mesh topology is much better, fixing most issues related to mask extraction and other topology based operations.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D5863
- Update default values of current tools
- Create default values for new sculpt tools
- Update the color of the cursor to match the color of the tool icon
Reviewed By: jbakker, brecht
Maniphest Tasks: T68745
Differential Revision: https://developer.blender.org/D5813
- Fix vertical spacing in grab brush grab active vertex option
- Move Remesher popover in the top bar to the right of Dyntopo
- Move topology automasking to the options subpanel
- Remove voxel remesher button from the topbar
- Add default shortcut to voxel remesher [Ctrl R]
- Add default shortcut to quadriflow [Ctrl Alt R]
- Add set pivot position operator to the sculpt menu
Reviewed By: billreynish
Differential Revision: https://developer.blender.org/D5880
The idea is to ignore dependency which comes via rigid body solver.
Reviewers: mano-wii
Reviewed By: mano-wii
Differential Revision: https://developer.blender.org/D5900
This was more of a general nvidia driver bug. Was caused by a
drawcall that had 0 vertex count. This worked in normal drawcalls
but not in indirect drawcalls.
If fade_time is used, particles would be flagged PEK_HIDE (depending on
time settings), but since this is not respected in drawing in 2.8 yet
the user would have no indication of them keys being hidden.
Also doing this for hair doesnt make much sense anyways...
Reviewers: jacqueslucke
Maniphest Tasks: T70259
Differential Revision: https://developer.blender.org/D5901
Even though hidden/faded keys are not supported in drawing in 2.8 yet,
the selection tools should not be able to select non-visible keys.
Spotted while looking into T70259
Reviewers: JacquesLucke
Differential Revision: https://developer.blender.org/D5902
There was a mix of old and new constants. Now have one list of WM_CURSOR_*
cursor types, using GHOST standard cursors when available and otherwise falling
back to our custom cursors.
Ref D5197
* Add more standard cursor types, that platforms can optionally support.
* Remove a few unused cursor types that were not properly supported and
would show the wrong cursor when used.
* Add native cursor files for Windows. These scale well with DPI and have
anti-aliasing. Designed by Duarte Farrajota Ramos.
Ref D5197
Deformation of subdivision surface modifier was using wrong coordinates
for the coarse mesh: as the modifier flow goes the coordinates are to be
taken from the input array of coordinates.
Simplify it a bit, hopefully make it clearer, better var names, use
proper types for arrays of vectors, etc.
No behavioral change expected (except for corner-case of vertices being
used by more than 255 edges, which were sort of 'clamped' to those 255
first edges for the smoothed position computation previously, now we use
proper integer, which fixes that bug).
Previously the cache for the modifier would not be invalidated if
modifier settings were changed with drivers or keyframes.
Now we compare the current setting with the ones used to generate the
cache and invalidate the cache if they differ.
Reviewed By: Sybren
Differential Revision: http://developer.blender.org/D5694
When move very fast the pen using a tablet, the end of the strokes was very ugly if the sampling was enabled. The reason for that is the last point and the previous one was interpolated in distance, but not in pressure and strength.
This commit uses several processes to get better endings:
a) If the pressure at the end of the stroke is very low, this part of the stroke is removed. This is a common issue with some tablet that send events with very low pressure when the pen is raised from drawing surface.
b) The interpolated points created by sampling are interpolated in strength and pressure to get a smooth transition.
c) Active smooth also uses the strength. Before only pressure was used.
The config.h file is autogenerated during compile by a 3rd party library
quadriflow uses. Now we put this file in the build directory to avoid
adding this to the git repository in the future.
Was caused by some drawcall not being done if the volumetric resolve pass
was drawn (using dual source blending seems to be the cause).
Not sure why this is needed since it is still reset before the next
drawcall.
When calling make.bat multiple times to rebuild blender
make.bat failed to rebuild if a custom build dir was set.
reported and fixed on chat by @dgsantana
The `pose_bone_do_paste()` function is documented to only return a
non-NULL pointer on a successful paste, and the one caller that checks
the return value is expecting this behaviour. However, before this
commit, when a valid pose channel was found, 'Selected Only' was
enabled, and the bone was not selected, the function would still return
non-NULL. This resulted in auto-keying pose channels that were not
pasted.
Reviewed by: angavrilov
Differential Revision: https://developer.blender.org/D5891
This change makes it so motion paths are using minimal possible
dependency graph which is sufficient to evaluate required motion
path targets.
Disclaimer: granularity is done on ID level, but it is possible
to go more granular if really needed.
Brings time down to 0.5 sec when updating motion path for the
Rain animation file used for benchmarks in the previous commits.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5874
The title explains it all actually: this commit introduces special
dependency graph builder API which builds graph which is sufficient
to evaluate given set of IDs.
The idea is to only update parts of motion paths which lies between
keyframes around changed frame.
The changed frames are considered to be from second previous to
second next one to work correctly with bezier handles interpolation.
Brings updates in the Rain test animation file from around 11 sec
down to 1 sec.
For now, do not allow to add custom props to overriding IDs (this should
be possible in the future, by getting basic correct behavior here is
already fairly hard, no reason to complicate things even more).
Also, properly disallow editing of existing custom props in overriding IDs.
Do not see any reason not to copy over the flag of the old, existing
IDProp to the new one when assigning (e.g. `C.object['prop'] = 0.5`
would nuke that IDProp flag).
The triple possible status of an PropertyRNA (actual C-defined prop,
py-defined IDprop behaving similar ot RNA one, or actual 'pure' custom
prop) is really confusing... Not to mention the _RNA_UI ugly thingy on
top of that. :/
Cycles casts a pointer from ShaderDataTinyStorage to ShaderData, these structs by default had different alignments however (the former was 1-byte aligned, the latter 16-byte). This caused undefined behavior on at least the CUDA platform. Forcing both structs to use the same alignment fixes this.
CUDA toolkits newer than 10.1 run into this because of a compiler optimization.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5883
Don't just rely on a comment next top the code, do an assert as well.
Also, don't use `default` since that silences compiler warnings when
new enumerators are added and related code is to be verified.
More switch statements might need an adjustment, but this is something
what is easier to go over by Pablo.
This change is two-fold:
- Ensure the result of the F-Curve evaluation is stored on the FCurve
object. This was done in 2.79 but lost when we moved to more granular
per-curve evaluation from the depsgraph.
- Flush this result from the CoW copy back to the original.
Reviewed by: sergey
Differential Revision: https://developer.blender.org/D5888
The tricky part here is to support a hidden parent and a "visible" child
collection. In this case the object should obviously be invisible. It is
all working now.
This gives better idea of what's going on with your track. Example:
{F693806}
Color of keyframes are configurable from theme editor of clip editor.
Reviewers: keir, brecht, Severin
Differential Revision: https://developer.blender.org/D2772
Blender now calls render hooks before taking copy of `scene->r` in
`RE_RenderAnim()`.
A change to the render output filename made in the render-init hook
would not be picked up by by the copy. As a result, placeholders were
touched using the old name, whereas the rendered images would be saved
with the new filename.
Reviewers: sergey
Maniphest Tasks: T66555
Differential Revision: https://developer.blender.org/D5887
When doing simple scenes the displacement shading failed during final
rendering when the displacement method is set to `Displacement + Bump`.
When this option is enabled the shader uses the Vector math
node. This node is part of the node group level 1. When doing simple
shading only using nodes that are part of the node group level
0 the shading was rendered black.
This only happened in final rendering as there the OpenCL programs are
optimized to save registries. Viewport rendering rendered correctly
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5859
Draw Sharp: More pronounced difference between it and Draw
Mask: Fits in with other similar tools
Border Hide: Fits in with other similar tools
Pinch: Much better communicates what it does
Simplify: Fix a small issue with caused by inverted normals
Modifier stack evaluation would copy mesh settings other than mesh topology
automatically, outside of the individual modifier evaluation. This leads to hard
to understand code, and makes it unclear which settings are available in following
modifiers, and which only after the entire stack is evaluated.
Now every modifier is responsible to ensure the mesh it outputs preserves materials,
texture space and other settings, or alters them as needed.
Fixes T64739: incorrect texture space for various modifiers
Differential Revision: https://developer.blender.org/D5808
These were only strictly valid for texture space calculation, don't store them
since they should not be used after that. Only store a flag to indicate if the
auto texture space has been evaluated.
In the future it might make sense to store bounding boxes at the mesh level to
speed up bounding box computation for multiple objects using the same mesh, but
then it will need to be implemented differently.
This makes a lot of shader node wiring code less complex.
This only add the flatten mechanism (which fixes T69672).
~~Cleanup to remove the complexity in ntree_shader_relink_displacement,
ntree_shader_bump_branches and ntree_shader_tag_nodes will be commited
separately.~~(already included)
The code is only added for shader nodes for now but could be exported to
other internal nodetree types in the future.
Cleanup: Node Shader Tree: Remove GPUmaterial special nodegroup handling
Reviewers: brecht
Reviewed By: brecht
Maniphest Tasks: T69672
Differential Revision: https://developer.blender.org/D5829
This happens to be a non-behavioral change, but previous code here was
*very* confusing, and only ended up generating expected results by mere
chance (since `facepa[i]` == `totpart` in case the face has no (valid)
particle, i.e. `pa == NULL`)...
Systematically reset particle pointer to NULL and use it to detect
invalid particle case, instead of checking value of the face's
particle index everywhere in a confusing and prone-to-bug way
(see T70150 and previous commit).
No behavioral change expected here.
There’s be a lot to say about that explode modifier code, for now just
follow other places in code... But the handling of 'invalid'/'unkown'
particle case is... quiet confusing to say the least.
Before when Onion or Multiframe was enabled the VBO length was the total of points on the object for all frames and this results in a big size when the scene had a lot of frames.
Now, the size of VBO length is calculated more precisely and reduce the time to alloc the VBO.This also reduce memory footprint.
The selection was not working because the evaluated frame was only working for active frame, so when the evaluation was changed to use eval data instead of original data, the data was not available and the loop did not use it.
Related to T70116
E.g. entering the file path field and then pressing enter without any
change would call an unneccesary directory change, causing flickering.
So the main point of this is to avoid flickering.
Without this the text field could also be used to refresh the file list,
but for that we have a proper button.
The big options button in the lower left is now gone, it's replaced by a
smaller icon toggle button in the upper right.
That means I could also remove code for the region we had just for this
button.
I also added versioning code for the removal, to make sure the region is
removed cleanly when reading old files.
Pablo and William agreed that the main purpose of the layout should be
to list files in a way that it's easy see which files were
created/modified when. Previously it was set to "Long List" to show the
modification time, now the vertical list is much better suited. The time
is shown anyway.
For the default keymap we were only using the regular toolshelf
operator, doing this for the industry compatible keymap too now (we
could even remove it there, we don't use it in other editors).
Since we "now" have proper operators for toggling regions, this specific
one is totally redundant.
So far the file browser code had some lazy creation for the tool region,
even though it should always be there. The only reason I can see for
this is compatiblity. So I simply added versioning code to add the
region in case it's not there. Now we should be able to savely assume
the tool region to be there, whithout any unusual lazy-creation.
This makes it so that regions only needed when the file browser is
invoked as an operation (e.g. Ctrl+O rather than a regular editor) are
lazy created then, and removed if the file browser is changed into a
regular editor then (e.g. Ctrl+O over regular file browser editor ->
Cancel).
That should remove some troublesome assumptions and makes versioning
redundant.
It also fixes the issue of an empty execute region at the bottom after
cancelling a file operation invoked from a regular file browser editor.
This would happen when opening a file browser as regular editor, opening
a temporary file browser from there (e.g. Ctrl+O) and cancelling the
operation.
In some cases this would cause most of the editor to be filled with an
empty operator options region:
* Go to Shading workspace
* File -> Append
* Cancel
The new paint cursor (introduced in rBe0c792135adf) mixed 3d and 2d
drawing leading to asserts [e.g. when tablet pressure sensitivity was
enabled for size, see D5820 also].
We could get away with always drawing in 3D [using vertformat with
comp_len 3 / GPU_SHADER_3D_UNIFORM_COLOR / imm_draw_circle_wire_3d],
even if in the Image Editor, but this patch clearly separates what is
drawn in 3d and what is in 2d.
part of T69957
Reviewers: jbakker
Differential Revision: https://developer.blender.org/D5836
When setting an object draw type to Solid it always used the Material
color mode. This change only sets the material color when the viewport
is set to display textures.
Steps to reproduce were:
* Open Preferences in a new window (Edit -> Preferences)
* Set file browsers to open fullscreen (Interface->Editors->Temporary
Windows)
* Open a file browser in the Preferences (e.g. Add-ons -> Install)
The file browser would be opened in the parent window, rather than the
preferences.
If the file browser was opened from an existing file browser editor
(using File -> Append would make the mouse hover the file browser in the
Shading workspace), we need special handling for closing the fullscreen
area.
This change brings back the old way of handling fullscreen closing.
I'm not sure how a .blend file could get into this state, but apparently
for some files saved with versions of Blender after the file browser
changes, the execute region would not have been created. File browser
code assumes this region to be there however.
Luckily I found a file with which I could recreate the issue. My guess
is that the error only happens with files that were stored before
certain versioning fixes were done after the file browser redesign.
To fix this, we just let the versioning code for the execute region run
even with newest files. We can run this safely, it only acts if the
execute region actually doesn't exist.
Creases are stored by the vertex indices of the edges. Sometimes they
were stored with (v1, v2) when the edge itself was stored with (v2, v1).
We now search for both orientations.
Sorting the vertex indices before searching avoids the second search
altogether when loading the example file of T70021.
time change
followup to 815ca2310f, this one fixes the RNA_MeshLoopColor case, adds
RNA_VertexGroupElement and RNA_LatticePoint.
coop with @sergey, thx.
Fixes T68666
The parent hairs were written to Alembic even when the 'Parent Particles'
checkbox (`use_parent_particles`) was disabled. In this case the parent
hairs were not correct in Blender's memory, and thus also not correct in
the exported Alembic file. The Alembic exporter now respects this setting
and doesn't write the parent hairs when 'Parent Particles' is off.
Python3.7 is still fairly recent, not all distro use it as system python
yet, fallback to code compatible up to py3.5.
Also, often distro builds of Blender do not have the buildinfo, in that
case fallback to `SOURCE_DATE_EPOCH` envvar, and as last resort to
current time, as in orig patch D5756 (we still use blender builddate
when available).
Issues raised in recent own rBcd5c70630318.
Steps to reproduce were:
* Add a new collection
* Put an object into it
* Exclude the selection (the checkbox in front of the name)
* Enable "Local Collections" in any viewport
-> Crash
Did not skip the excluded collections, causing an unsuccessful object
lookup (returned null-pointer).
The problematic video from T68091 clearly has an invalid stream duration
(it would be 55 centuries long if interpreted at 30 FPS, and given that
it was recorded with an Android 9 device, it's unlikely that recording
started that long ago). I've added a heuristic to check the stream
duration against the container duration; if the stream is more than 4x
longer than the container, Blender now falls back to the container
duration.
We could use MIN(stream duration, container duration), but there might
be video files out there where the container duration is less precise
than the stream duration; they are measured in different units of time
(microseconds for the container vs. frames for the stream).
Includes a unit test for the above heuristic.
Reviewed by: jbakker
Differential revision: https://developer.blender.org/D5853
This was introduced in FFmpeg lavf 55.1.100 in 2013. For systems that are
still on LibAV or older FFmpeg there is a fallback implementation that
performs the same guess as we did before in `av_get_r_frame_rate_compat()`.
There is now a clearer distinction between `video_stream` (the stream itself)
and `video_stream_index` (its index), and no more repetition of accessing
the same item of an array. This also makes the code a bit more readable in
preparation for an upcoming functional change.
Otherwise --factory-startup would e.g render as `Keep User Interface`
(which is supposed to be `New Window` by default)
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5851
From rBe7a514369fe70, since I did not have time to do proper review
in D5808...
Note that we could also consider that shallow copy of src should never
be dst of that function and add some asserts instead. For now going the
safest and simplest way though.
This is a regression since PBVH was introduced for weight paint.
The solution is: treat subsurf and multires modifiers as deforming
ones for the weight painting. This is an easiest solution to make
PBVH use subdivided location of original vertices.
This change could simplify some of the weight paint by removing
the grids check, since PBVH is not supposed to be built from grids
in this case anymore.
Differential Revision: https://developer.blender.org/D5751
Currently unused but the intention is to use this to hook up these
modifiers to a generic deformed PBVH to make it easier to sculpt or
paint on a subdivided mesh.
The problem was that the object and collection pointers in Base and
LayerCollection would get lost of file read. Normally such ID pointers would
be resolved by pointing to an ID_ID placeholder which has the datablock name,
and then replacing it will the real datablock. However ID_ID is only written
for directly linked datablocks.
This adds the concept of an indirectly linked datablock with a weak reference
to it. For this we write an ID_ID_WEAK_REF code, which is a reference that
will only be resolved if the datablock was read for another reason.
Differential Revision: https://developer.blender.org/D4416
Modifier stack evaluation would copy mesh settings other than mesh topology
automatically, outside of the individual modifier evaluation. This leads to hard
to understand code, and makes it unclear which settings are available in following
modifiers, and which only after the entire stack is evaluated.
Now every modifier is responsible to ensure the mesh it outputs preserves materials,
texture space and other settings, or alters them as needed.
Fixes T64739: incorrect texture space for various modifiers
Differential Revision: https://developer.blender.org/D5808
Knife project switches out of vertex selection mode, but wouldnt do this
for all participating meshes.
Logic in edbm_select_linked_pick would switch the viewcontext multiple
times and the meshes selectmode was not in sync then, leading e.g.
finding a vertex in 'unified_findnearest' (because last of the meshes
selectmode was SCE_SELECT_VERTEX), but then later in
'EDBM_elem_from_selectmode' other meshes selectmode was not matching
SCE_SELECT_VERTEX, leading to crash...
Reviewers: campbellbarton
Maniphest Tasks: T68852
Differential Revision: https://developer.blender.org/D5536
As the layer and frame memory was duplicated, the pointers were connected to old data. This was solved when saved the file, but this was a bug. Also this required a duplication and clean all listbase items.
Now, instead to duplicate and clear memory for layers and frames, just create a new layer and frame. This solution fix the problem, it's faster and also keeps the code cleaner.
It makes much more sense to use the build timestamp of the Blender
binary used to generate that manpage, than the current time.
As a bonus, when Blender building makes use of the SOURCE_DATE_EPOCH envvar
(through CMake, since previous commit), this also propagate automatically
to that man page.
Inspired by D5756 by Bernhard M. Wiedemann (@bmwiedemann), thanks.
Use cmake TIMESTAMP for BUILD_DATE+TIME
this simplifies code a lot
and even makes it more portable to other platforms
TIMESTAMP is available since cmake-2.8.11 ; blender already requires
cmake>=3.5 so that is fine.
Note that with CMake>=3.8, if defined, the SOURCE_DATE_EPOCH envvar
will be used by CMake here.
Reviewers: mont29, campbellbarton
Reviewed By: mont29, campbellbarton
Differential Revision: https://developer.blender.org/D5760
This commit also removes the name "voxel" from the messages because this function
is now used for the voxel remesher and quadriflow.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5842
This was caused by rB309cd047ef46.
Above commit introduced code that would skip early for sculptmode
(leaving out the neccessary createTransPaintCurveVerts).
Reviewers: pablodp606, jbakker, mano-wii
Maniphest Tasks: T70006
Differential Revision: https://developer.blender.org/D5837
Particularly noticeable when vertex painting with a subsurf modifier.
In some cases every sculpt or paint stroke step would evaluate the dependency
graph. This should only happen for redraws. Now more selectively choose if the
dependency graph should be evaluated to initialize the view context. Doing it
in the view context evaluation is somewhat hidden, now it's more explicit.
Differential Revision: https://developer.blender.org/D5844
That code is simpler and more general (not limited to some specific
values of thread numbers). It still gives similar default chunk size as
what we had before, but handles smoother increase steps, and higher
number of threads, by keeping increasing the chunk size.
No functional change expected from that commit.
When the grab brush was used in an empty frame, a new frame was created, but as the depsgraph was no tagged, the evaluated data was wrong and the Grab hash failed.
If children hairs were displayed in particle editmode, these would not
update when a particle was deleted.
Reviewers: sergey
Differential Revision: https://developer.blender.org/D5840
The static mesh issue described in T65816 has been resolved by @Sergey
in T60094.
This commit fixes the last bit of the puzzle, which was two-fold:
- A missing depsgraph update when setting `orig_object.data = new_mesh`
from Python. Thanks @Sergey for providing the fix :)
- Properly locking the interface while exporting. This prevents crashes
as described in T60094. The previous approach of calling
`BKE_spacedata_draw_locks()` was not enough.
This reverts commit b962aca800. We may revert
to the fullscreen file browser if it's not good enough by the time of the 2.81
release. But then it first needs some changes since the in between state now
is not good enough either.
This allows to create different effects with some brushes that use the sculpt plane.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D5818
Fullscreen as in, maximized area.
This may be a temporary change until we consider the temporary window
mode as working well enough.
Note that you can still enable the windowed mode in the Preferences
(Interface > Editors > Temporary Windows).
Addes a Preference setting to choose between opening new file browsers
in a maximized area (like with the old file browser) or in a new window
(like the new one).
Moves the render display type (to choose between rendering in a new
window, in a fullscreen area, in an Image Editor, etc) from the scene to
the preferences.
The active object can be `NULL`, which causes a segfault in
`BKE_object_is_in_editmode(NULL)` (and if that were made NULL-safe, the
segfault would happen further down in `object_remesh_poll()`).
The old min/max options specified the target min/max values, they didn't
act as min/max operators. So the versioning code should be adjusted
accordingly.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5828
Make a distinction between flush sculpt changes for rendering, and forcing
sculpt data structures to be rebuilt after mesh changes. Also don't use PBVH
for renders.
The new paint cursor (introduced in rBe0c792135adf) could crash for 2d
painting without an active object.
Note there are still drawing asserts (because we are mixing 2d and 3d
drawing in 'paint_draw_cursor'), but these will be handled in a seperate
commit.
part of T69957
Reviewers: jbakker
Maniphest Tasks: T69957
Differential Revision: https://developer.blender.org/D5820
Curve edit points could disappear when the deformed curve is out of view
area. Fix similar to rB0f983e854052.
Reviewers: jbakker
Maniphest Tasks: T69687
Differential Revision: https://developer.blender.org/D5748
When starting automaking from a boundary vertex it was only updating the automasking factor in connected boundary vertices. This also fixes other similar functions like mask expand or dynamic mesh preview.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D5812
This commit makes the pose brush easier to control. It also includes a refactor of the pose brush init code.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D5761
The `do_update` variable wasn't set after changing the `progress`
variable, causing the GUI only to update on redraw (f.e. when the user
was waving the mouse around).
Using pointers instead of references when passing progress variables
makes the C++ code more in line with the C code (as it doesn't transform
pointer parameters to reference parameters). Also makes it easier to
spot when a common Blender pattern is implemented incorrectly (fix will
be in the next commit).
Display of velocity and acceleration units should be affected by unit scale.
Arguably the behavior of the physics simulation should be for gravity to remain
constant, but such design changes are outside the scope of bug fixing. At least
the UI should correctly reflect what the physics simulation will do.
Small memory reduction change by only storing the pixels of the combined
pass when it is being shown in the viewport. Previously the combined pass
was always calculated and present in the output buffer. The combined pass
will still be calculated.
It is a limitation in Blender that Cycles always had a combined pass.
This patch will remove the limitation from the code base of Cycles.
Blender still has the limitation, but will always request the combined
renderpass when doing final rendering.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5784
Another sneaky bite from the infamous private ID data: While those
monsters are not in bmain, the actions used by their animdata are
regular cute little ID's, living with the herd in the safe and sound
Main DB...
So we have to be careful not to propagate the nasty black magic
required to handle the formers when we duplicate their animdata.
Saying it again: private ID datablocks should never have had their own
animdata & actions, this is endless issue also with RNA paths... And
makes copying of animation between materials and such needlessly
complicated.
As per Brecht's suggestion, use the check_existing property to control
visibility of the '+' and '-' icons. It is typically set for save
operations.
Adds another FileSelectParams flag (to avoid duplicated propertie
lookups) and removes the recently introduced
FileSelectParams.action_type again.
Fixes T69881.
That's exactly why we should get rid of all those 'custom cases'
remapping code, it's hard enough to keep a single place
(library_query.c) up to date and 100% valid, but having more areas doing
their own remapping is just impossible to maintain... Some day...
Most of these calls were replaced with the successors as suggested
by Xcode's Fix-It. Functionality should not be affected.
This reduces the number of warnings when building on macOS.
Picked up while investigating a build error on the functions branch
which seems to use this specific header in a way master doesn't.
The problem:
The MSVC headers define a `_CONCAT` macro, so does BLI_kdtree_imp.h
however at the end `BLI_kdtree_imp.h` undefines the macro making the
MS headers that still rely on it "unhappy".
Who's fault is this:
Ours, C99 Spec says
```
7.1.3 Reserved identifiers
- All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use.
...
if the program removes (with #undef) any macro definition of an identifier in the first
group listed above, the behavior is undefined.
```
So we should not have defined it, and we definitely should not
have undefined it.
We have *tons* of these violations, although fixing them would be great
at one point lots of them are in /extern or in the 3rd party deps,
I'd rather deal with them on a case by case basis when it actually
causes issues.
Differential Revision: https://developer.blender.org/D5790
Reviewers: campbellbarton, JacquesLucke
The compiler was warning that it assumed that
crfa - 4 < cfra is always true even though that might not
be the case due to overflow. This patch just removes
the condition that caused the assumption.
The function now allows custom return types defined
by the callbacks. This can be useful when a user of the
data structure has to implement some custom behavior.
Fades add:
Adds or updates a fade animation for either visual or audio strips.
Fade options:
- In, Out, In and Out create a fade animation of the given duration from
the start of the sequence, to the end of the sequence, or on boths sides
- From playhead: the fade animation goes from the start of sequences under the playhead to the playhead
- To playhead: the fade animation goes from the playhead to the end of sequences under the playhead
By default, the duration of the fade is 1 second.
Fades clear:
Removes fade animation from selected sequences.
Removes opacity or volume animation on selected sequences and resets the
property to a value of 1.0. Works on all types of sequences.
Author: gdquest
Reviewed By: ISS
Differential Revision: https://developer.blender.org/D5166
Functions that utilize glyph cache should lock and unlock cache by
calling `blf_glyph_cache_acquire()` and `blf_glyph_cache_release()`.
Function `blf_glyph_cache_acquire()` will create glyph cache, if it doesn't exist.
Locking mutex is global and shared by all fonts.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5701
When enabled prefetching(preview panel>view settings), a pernament running job
is created, that will render frames in the background until the cache is full.
If the cache is not filled fast enough, prefetch job suspends itself
at the last moment and will wait until it has chance to "catch up".
Effectively this will decouple rendering to separate thread, so rendering
itself is a bit faster.
Cache recycling behavior will be changed to "free furthest frame to the left
of playhead if possible, otherwise rightmost frame".
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5386
paint mask selection
followup to rBr27bbe7cbd9b, might as well make this consistent across
all the color operations [with the exception of 'Dirty Vertex Colors'
which is python]
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5786
without a valid target
rB95b9680597f5 introduced code that would skip creation of GPUVertBuf
for ParticlePointCache if the keyed physics would not have a valid
target. Missing vertex buffer would lead to assert/crash.
This code is now removed (dont see a reason why this was done? afaict
2.79 also just displayed the particles without physics in this case and
this seems to be working just fine in 2.8 as well)
part of T69741
Reviewers: fclem
Maniphest Tasks: T69741
Differential Revision: https://developer.blender.org/D5781
Support per-viewport collection visibility options.
Note 1: There is no way to show a collection that was not visible before
due to depsgraph. Otherwise we would risk having all the collections in
the depsgraph and I believe this is not the idea.
An alternative would be to have a new depsgraph for viewports that are
not local. Something to keep in mind if we do per-viewport current frame
in the future.
So for now what we do is to only allow collections visibility to be
disabled/hidden in this mode.
Note 2: hide_viewport (the eye icon) doesn't really matter for
depsgraph. So after the merge we can still ignore it to show the
collections locally in a viewport with no problems for the depsgraph.
Reviewers: brecht, sergey
Subscribers: billreynish
Related task: T61327
Differential Revision: https://developer.blender.org/D5611
Split "use_mesh_automerge_and_split" and "double_threshold" into their
own column so .active doesn't have to be applied for the entire layout.
Reviewers: billreynish, mano-wii
Differential Revision: https://developer.blender.org/D5618
mask selection
for 'Invert', 'Levels', 'Hue saturation Value' and 'Bright/Contrast',
face mask was respected, but vertex mask wasnt...
Same code as done in 'Set Vertex Colors'.
reported in T69835
Reviewers: brecht
Maniphest Tasks: T69835
Differential Revision: https://developer.blender.org/D5783
Picking the 'Target Object' as well as the 'System' number was greyed
out as long as 'Use Timing' was disabled. 'Use Timing' is unrelated for
the above two, these should always be active...
part of T69741
Reviewers: sergey
Maniphest Tasks: T69741
Differential Revision: https://developer.blender.org/D5782
Solves stability issues with possibly doing destructive changes to the
tracking setup. Locking interface is the simplest and most reliable way
to avoid crashes.
It is still possible to run non-destructive changes such as clip view
navigation. More operations can be marked as safe if needed.
Fixes T67012: Software closes when a processing marker is deleted
This commit adds some new hashing based data structures to blenlib.
All of them use open addressing with probing currently.
Furthermore, they support small object optimization, but it is not
customizable yet. I'll add support for this when necessary.
The following main data structures are included:
**Set**
A collection of values, where every value must exist at most once.
This is similar to a Python `set`.
**SetVector**
A combination of a Set and a Vector. It supports fast search for
elements and maintains insertion order when there are no deletes.
All elements are stored in a continuous array. So they can be
iterated over using a normal `ArrayRef`.
**Map**
A set of key-value-pairs, where every key must exist at most once.
This is similar to a Python `dict`.
**StringMap**
A special map for the case when the keys are strings. This case is
fairly common and allows for some optimizations. Most importantly,
many unnecessary allocations can be avoided by storing strings in
a single buffer. Furthermore, the interface of this class uses
`StringRef` to avoid unnecessary conversions.
This commit is a continuation of rB369d5e8ad2bb7.
Make popover wider and image ID widget full width, like in textures properties.
Not ideal but at least the image name can be read now, until the ID widget
gets a more compact redesign.
Fixes T67748
Rgression from rBaf4dcc6073fa.
paint_sample_color > imapaint_pick_face uses the the selection buffer
(DRW_select_buffer_sample_point) and to get flat colors [select_id_flat] we
need to be in SCE_SELECT_FACE mode. This was already fine if you had
'Face Selection Masking' turned on, but got colors including lighting
when turned of [select_id_uniform].
There was already an exception in 'select_cache_init' that turns on
SCE_SELECT_FACE for weightpaint, we just need this for texture paint
(vertex paint) as well... Also moved the logic into
select_id_get_object_select_mode.
Note we were also asserting here:
BLI_assert failed: /blender/source/blender/draw/engines/select/
select_engine.c:174, select_cache_init(), at 'e_data.context.select_mode
!= 0'
Note also this is not working correctly for vertexpaint (yet), but has
been discussed in T69752 and there is a solution by @mano-wii in P1032.
Reviewers: mano-wii
Subscribers: mano-wii
Maniphest Tasks: T69752
Differential Revision: https://developer.blender.org/D5775
This patch adds a new Vertex Color node. The node also returns the alpha
of the vertex color layer as an output.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5767
These two data structures reference strings somewhere in memory.
They do not own the referenced string. The string is considered
const.
A string referenced by StringRefNull can be expected to be
null-terminated. That is not the case for StringRef.
This commit is a continuation of rB369d5e8ad2bb7c2.
When reading a old .blend file (from before the new file browser
design), we wouldn't create the execute region for existing file
editors. This usually wasn't an issue, but it could become one when a
file browser was opened in a temporary screen before, and that screen
was still visible. Then code spawning the new file browser would re-use
the old file browser data, assuming the execute region was there.
Handle this in versioning code and let rest of the code keep sane
assumtions (e.g. that there always is a execute region, even if
invisible).
Group related settings in columns:
* Align Inner, Inner Selected and Outline.
* Align Text, Text Selected and Item.
Place Shaded settings in its own sub-panel.
Many generic C++ data structures have been developed in the
functions branch. This commit merges a first chunk of them into
master. The following new data structures are included:
Array: Owns a memory buffer with a fixed size. It is different
from std::array in that the size is not part of the type.
ArrayRef: References an array owned by someone else. All elements
in the referenced array are considered to be const. This should
be the preferred parameter type for functions that take arrays
as input.
MutableArrayRef: References an array owned by someone else. The
elements in the referenced array can be changed.
IndexRange: Specifies a continuous range of integers with a start
and end index.
IntrusiveListBaseWrapper: A utility class that allows iterating
over ListBase instances where the prev and next pointer are
stored in the objects directly.
Stack: A stack implemented on top of a vector.
Vector: An array that can grow dynamically.
Allocators: Three allocator types are included that can be used
by the container types to support different use cases.
The Stack and Vector support small object optimization. So when
the amount of elements in them is below a certain threshold, no
memory allocation is performed.
Additionally, most methods have unit tests.
I'm merging this without normal code review, after I checked the
code roughly with Sergey, and after we talked about it with Brecht.
The local view check in the RNA didn't support instanced objects. Every
object has a copy of the local_view_bits from the base. This patch
changes the check to look at the local stored bits.
This patch removes the check if the object is part of the view_layer.
In the cases we are using it this check is not relevant. The `mesh_tissue`
add-on also uses it, and is not effected by this change.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5773
This patch allows the Voronoi node to operate in 1D, 2D, and 4D space.
It also adds a Randomness input to control the randomness of the texture.
Additionally, it adds three new modes of operation:
- Smooth F1: A smooth version of F1 Voronoi with no discontinuities.
- Distance To Edge: Returns the distance to the edges of the cells.
- N-Sphere Radius: Returns the radius of the n-sphere inscribed in
the cells. In other words, it is half the distance between the
closest feature point and the feature point closest to it.
And it removes the following three modes of operation:
- F3.
- F4.
- Cracks.
The Distance metric is now called Euclidean, and it computes the actual
euclidean distance as opposed to the old method of computing the squared
euclidean distance.
This breaks backward compatibility in many ways, including the base case.
Reviewers: brecht, JacquesLucke
Differential Revision: https://developer.blender.org/D5743
Private ID data (nodetrees and scene collections...) need special care
and handling of their copy flags, and checks must be adapted too.
In that case, issue came from the fact that even though those IDs have
to be copied outside of bmain, we may still require usercount handling.
That commit also fixes a somewhat related issue - we cannot use the
non-id private data copying flag for private IDs copying, due to
difference in handling of usercount again.
This is caused by rB1342d1879e12 and would also break the whole
"Connect" workflow [which relies on empties]
Reviewers: mont29, brecht
Maniphest Tasks: T69582
Differential Revision: https://developer.blender.org/D5772
This diff will add support for local view to Cycles rendered preview mode.
Currently the implementation shows same results as EEVEE does. This entails
a difference with Blender 2.79, where lights were automatically added to the
local view. {T69780} describes this should be solved before the next release.
This patch also solves missing `owner_id` issues when using the RNA CPP Api
from Cycles. Cycles didn't provide the `owner_id` making some functionality
fail, what then was worked around in Blender. It also fixes an issue in
`makesrna` where incorrect CPP code was generated when only `PARM_RNAPTR`
was provided.
An optional `view_layer` parameter is added to the `Object.local_view_get`
method to reduce lookups.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5753
Part of T68930
Now two other mirror options that can be enabled simultaneously: Mirror Y and Z.
Reviewers: campbellbarton
Reviewed By: campbellbarton
Subscribers: ThatAsherGuy
Differential Revision: https://developer.blender.org/D5720
This is caused by rBeb521b22b2b1.
Looks like `PE_minmax` doesnt play nice with the evaluated view_layer.
If we look inside `PE_get_current`, then `BKE_ptcache_ids_from_object`
will actually return a list of `PTCacheID` for the evaluated object.
However, looking further, then `PTCacheEdit` / `psys->pointcache->edit`
is always NULL for the evaluated object.
Without a valid `PTCacheEdit`, `PE_minmax` will basically do nothing.
So now we are passing the non-evaluated view layer in the case of
particles.
Regarding to @sergey, in a longer term we should probably make it so
evaluated pointcache have pointer to edit.
Reviewers: sergey
Maniphest Tasks: T59143
Differential Revision: https://developer.blender.org/D5758
linked sound
Crash could be triggered by just adding any object to the scene.
Reviewers: sergey
Maniphest Tasks: T69558
Differential Revision: https://developer.blender.org/D5764
This is minimal 'flip-switch' commit, proper cleanup and removal of the
option thing will happen later, once we are sure that we can release
2.81 with it enabled.
For now, we have a `--disable-library-override` now. ;)
The sculpt mode transform tool applies the sculpt pivot transformation to all vertices, taking XYZ symmetry into account.
This commit also includes an operator to set the pivot point initial position.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5717
This change allows the user to select a renderpass in the 3d viewport.
Added support for external renderers to extend the `View3DShading` struct.
This way Blender doesn't need to know the features an external render engine wants to support.
Note that the View3DShading is also available in the scene->display.shading; although this is
supported, it does not make sense for render engines to put something here as it is really
scene/workbench related.
Currently cycles assumes that it always needs to calculate the combined pass; it ignores the
`pass_flag` in KernelFilm. We could optimize this but that was not in scope of this change
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5689
This allows accessing it from drivers and using it in UI, as
demonstrated by adding it to the transform panel of 3D View.
As an aside, properly mark transform-related properties of Bone
read-only, as they can only be changed correctly in edit mode.
Makes it possible to do custom edits to animated properties from a
python handler.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5738
Those handlers are usually done to edit scene which is being rendered,
and this is not supported due to a fully localized nature of the preview
bmain.
There is still non-conditional callback in stats_background which is a
bit tricky to cover with check, but this code is not supposed to be run
for previews anyway.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5731
The goal is to make it possible to access evaluated datablocks at a
corresponding context. For example, be able to check evaluated state
if an object used for rendering.
Allows to write scripts in a safe manner for T63548 and T60094.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5726
Allows to access dependency graphs created for render engines
to inform them about changes in .blend file structure from the
Python handlers.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5724
Currently unused, but will allow to keep of an owner of the depsgraph.
Could also simplify other APIs in the future by avoiding to pass bmain
explicitly to relation update functions and things like that.
File Browser Volumes list gets nicer friendly drive names with volume label or device description.
Differential Revision: https://developer.blender.org/D5747
Reviewed by Brecht Van Lommel
For the default and industry compatible keymap, clicking on empty space
in the file browser will deselect all files.
Also makes selection use same operator description we use for other
select operators.
Allows file browser folders to be shown in a theme-selectable color, default of manila.
Differential Revision: https://developer.blender.org/D5713
Reviewed by Brecht Van Lommel
Grab active vertex snaps the maximum strength of the grab brush to the highlighted active vertex, making it easier to manipulate low poly models or meshes with subdivision surfaces.
Dynamic Mesh Preview generates a list of connected vertices from the active vertex and draws them from the cursor code. This helps to visualize the real geometry the user is manipulating from sculpt mode when there are active modifiers.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5646
This happened when the 'Whole Collection' option was enabled next to the
'Use Count' option. These two are exclusive but some code paths only
checked for 'Use Count'.
Reviewers: brecht
Maniphest Tasks: T69702
Differential Revision: https://developer.blender.org/D5741
This operator extracts the paint mask to a new mesh object. It can extract the paint mask creating a boundary loop in the geometry, making it ready for adding a subdivision surface modifier.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5384
This operator is a combined version of mask expand and mask by normal from the sculpt branch. It can be used to quickly isolate parts of a model based on topology or curvature.
- Shift + A starts the operator in topology mode from the active vertex
- Shift + Alt + A starts the operator in curvature mode from the active vertex
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5657
probably makes sense to allow for zero iterations...
Reviewers: jbakker
Maniphest Tasks: T69651
Differential Revision: https://developer.blender.org/D5728
PTCacheEditPoint flag PEP_HIDE was not respected at all...
Reviewers: brecht
Maniphest Tasks: T69432
Differential Revision: https://developer.blender.org/D5739
They were detected as (false positive) malware with ClamAV. It's unlikely
someone would need these files, and e.g. the Debian Python package also
excludes them with a custom patch.
This patch extends Musgrave noise to operate in 1D, 2D, 3D, and 4D
space. The Color output was also removed because it was identical
to the Fac output.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5566
For operators with dynamic tooltips the tooltip calculation is
deferred until the moment it is actually shown for performance
reasons, with the tooltip field left blank for the time being.
Enum menu code shouldn't jump in and assign a tooltip either.
The menu button itself can't show a dynamic tooltip because it
does not actually call the operator, and has no reference to it.
As a side change, allow returning None from the python callback
as the most natural way to fall back to the default tooltip.
This brush lets the user pose a model simulating an armature-like deformation. The pivot point for rotation is calculated automatically based on the radius of the brush and the topology of the model.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5647
Spent again a whole day trying to understand what happens here, with no
luck. For some reasons, OperatorProperties children of unregistered
operator classes remain accessible, with their `bl_rna` member, although
that one is 100% invalid (freed memory, crashes with ASAN builds).
Funny thing is, I cannot reproduce that situation when disabling the
add-on from the py console of a Blender-with-UI.
Note: issue revealed by X3D add-on, which is still enabled in factory
settings, while not being officially supported any more, this has to be
fixed in a separate commit.
Show all memory-related byte size strings calculated with a base of 1024.
Differential Revision: https://developer.blender.org/D5714
Reviewed by Brecht Van Lommel
This adds per-platform change so Windows users will see file sizes calculated with a base of 1024.
Differential Revision: https://developer.blender.org/D5714
Reviewed by Brecht Van Lommel
The sculpt automasking feature assigns a factor to each vertex before starting the stroke. This can be used for isolating disconnected meshes, masking cavities, mesh boundary edges or creating topological falloffs.
This commit implements automasking in all brushes and topology automasking without topology falloff.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5645
Without this patch there could only be one superimposed icon
and the operators were hard coded for the button types.
This keeps the previous, sort of predefined extra icons working in a
rather generic way, but allows adding specific ones for specific case
through `UI_but_extra_operator_icon_set()`.
Reviewed by: Campbell Barton
Differential Revision: https://developer.blender.org/D5730
The mask filter operator modifies the whole paint mask. In includes multiple operations like smooth, grow or contrast accessible from a pie menu.
The dirty mask generator is similar to Dirty Vertex Colors, but it generates a paint mask. It can be used to mask cavities in the sculpt.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5496
The main switch was not checked and the function was doing all calculations, but the data was not used. This makes all slower than expected because the user had the Onion Skinning disabled, but internally was running.
The mesh filter tool applies a deformation to all vertices in the mesh at the same time. It includes multiple deformation modes and the option to lock the deformation axis.
This commit also includes the FilterCache, which is needed in some new operators and tools.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5513
Now the fade layer uses the same logic used to fade objects and also is available in all modes.
Reviewers: mendio, pepeland
Reviewed By: mendio, pepeland
Differential Revision: https://developer.blender.org/D5707
This patch implements the paper "Regularized Kelvinlets: Sculpting Brushes based on Fundamental Solutions of Elasticity" https://graphics.pixar.com/library/Kelvinlets/paper.pdf
It includes grab, biscale grab, triscale grab, scale and twist.
All deformation modes are accessible under the same tool. This helps to keep the code organized and it should not make any difference to the user when a better brush management system is implemented.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5634
Was a problem in the versioning code from rBbaaa89a0bc54, since the
TexMapping struct could already be freed and node->storage could already
be set to NULL (if a file with the new mapping node [saved from (2, 81,
8) or newer] is opened in a blender version prior to (2, 81, 8) and
saved from there again).
Reviewers: brecht
Maniphest Tasks: T69663
Differential Revision: https://developer.blender.org/D5723
This provides an API to access structs
with their members set to default values:
- DNA_struct_default_get(name)
- DNA_struct_default_alloc(name)
Currently this is only used for scene & view shading initialization,
eventually it can be used for RNA defaults and initializing
DNA struct members on file reading.
This brush is similar to the draw brush but it deforms the mesh from the original coordinates. When used with the sharper curve presets it has a much more pleasant crease/cut behavior than any of the other brushes. This is useful for creating cloth wrinkles, stylized hair or hard surface edges.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5530
Preparing for the bigger changes which will be related on passing
dependency graph to various callbacks which need it.
Differential Revision: https://developer.blender.org/D5725
Before this the timer API was relying on using a callback API to do
initialization when new file is loaded. This isn't how rest of Blender
works and it gets in a way because callbacks API is to be move to the
BKE level.
Use explicit call to timer API from where the file is loaded.
Makes the numpad + and - type of shortcuts to increase/decrease the file
number suffix work in the upper and lower bar of the file browser.
Had to add keymap handlers to the execute region for this to work.
The previous method only worked in simple cases where faces were
surrounded by non-manifold edges.
Now face regions surrounded by non-manifold edges are marked as interior.
Starting with regions most perpendicular to the surrounding geometry.
Resolves T68401
When the file browser was opened (from a temporary window since the file
browser redesign) using a button in the UI, under certain conditions
moving the mouse would trigger files to be dragged.
Note that this has been an issue before the new file browser design was
introduced, although under slightly different conditions.
Steps to reproduce:
* With factory settings, press F12
* Open a different image in the appearing Image Editor (not Render
Result)
* Make sure the window is not maximized
* Press N to open the side bar, open Image tab
* Click the folder icon there to change the image
* Change to thumbnail display type in the appearing file browser
* Cancel, click the folder icon again
Moving the mouse now would start dragging files in most cases.
The same issue could be reproduced in a similar way when installing
lights/MatCaps or HDRIs through Preferences -> Lights -> Install...
This avoids artifacts for bump mapping and diffuse BSDFs, where the bump
normal deviates far from the actual normal.
Differential Revision: https://developer.blender.org/D5399
This prints a more informative message, and is convenient when working with
local changes or in a branch where you only need to update submodules or tests.
Caused by ab823176d3.
Steps to reproduce were:
* Open Preferences
* Open file browser through Lights -> Install (doesn't matter which)
* Close browser through the window controlls
The window was freed earlier, but still referenced by new handler
context storage.
This partially reverts commit 0b2d1badec
Post increment can deep-copy for C++ iterators, while in my own checks
GCC was able to optimize this to get the same output,
better follow C++ best practice and use pre-increment for iterators.
Blender can only be run correctly from the install path since it requires Python
scripts, dynamic libraries and other files to be present. By default the install
path is the same as the build path, so it works anyway. But on the buildbot it
isn't. There was a workaround but it failed on Windows and macOS.
Now tests run from the install path. Detecting that path for ctest is more
complicated than I would like, but I couldn't find a better solution.
Ref T69541.
Bugs were: (1) needed an epsilon test in CCW test in order to
handle new costraint edge that intersects an existing point
but only within epsilon; (2) the "valid bmesh" output mode
sometimes left a face that included outside frame point.
Steps to reproduce were:
* Ensure //Render//->//Display Mode// is //New Window//
* F12
* In the opened Image Editor, Alt+S to save the image
* Save the image
The saving would fail silently.
Issue was that wm_handler_op_context() would fail to find the correct
area to activate, as the wrong window was active in context. So allow
overriding this window and do so when creating the file-select handler.
To fix this, we just scramble the halton sequence by multiplying by a large
prime number.
It seems to work fine in practice.
We also tried Sobol sequence but it has a less uniform pattern for low
number of sample.
Fix T68594 Eevee: Soft shadows causing flickering in animation and temporal AA in scenes
Since rBbaaa89a0bc54 we have to access the mapping node differently.
This doesnt take actual linkage of the new sockets into account (but
this wasnt done for most sockets on the Principled BSDF node either)
Also the min/max of the mapping node was removed entirely.
It was decided upon removing this from node_shader_utils as well (and
replace this by existing access to the Extension parameter of the
Texture node).
Part of solving T69526.
Differential Revision: https://developer.blender.org/D5693
Blender UI Layout API allows supplying parameters to operators via
button definitions. If an operator behavior strongly depends on its
parameters, it may be difficult to write a tooltip that covers all
of its operation modes. Thus it is useful to provide a way for the
operator to produce different descriptions based on the input info.
Reviewers: campbellbarton
Differential Revision: https://developer.blender.org/D5709
File Browser image thumbnails get just a contrasting outline and no shadow.
Differential Revision: https://developer.blender.org/D5708
Reviewed by Brecht Van Lommel
- Remove use_screen_refraction as it conflict with SSR and SSS
- Increase GTAO distance
- Add a simple lightprobe setup that works well in most cases
- Enable soft shadows
Baking the lightprobes adds some overhead to the test time (+33%).
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5507
Before, it was only possible to fade the active object. The new option allows to fade all non gpencil selected object. This is a common request by artists.
{F7719513}
Reviewers: mendio, pepeland
Reviewed By: mendio
Differential Revision: https://developer.blender.org/D5704
Instead of fixed size, `IMM_BUFFER_SIZE` is adjustable now. The internal buffer can expand if there is a need a bigger buffer. All other behaviors are still the same.
Reviewed By: fclem, #gpu_viewport
Differential Revision: https://developer.blender.org/D5570
We basically duplicate the height map branch plugged into the bump node,
and tag each node in each branch as dx/dy/ref using `branch_tag`.
Then we add a one pixel offset on the texture coordinates if the node is
tagged as dx or dy.
The dx/dy branches are plugged into (new) hidden sockets on the bump node.
This match cycles bump better but have a performance impact. Also, complex
nodetrees can now become instruction limited and not compile anymore.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5531
Popup would be closed immediately after creating, because of incorrect
mouse coordinates stored in window (popup is set to close if mouse is
some distance away from it).
Completes fix for T69581.
Replaces the large icons used in the File Browser with updated versions by Andrzej Ambroz (jendrzych).
Differential Revision: https://developer.blender.org/D5698
Reviewed by Brecht Van Lommel
The `dimensions` property of the noise nodes has been renamed to
`noise_dimensions` because it conflicted with and overwrote the
`dimensions` property of the base node.
Reviewers: brecht, JacquesLucke
Differential Revision: https://developer.blender.org/D5705
Optionally use regular expressions for the destination name,
allows re-ordering words while renaming.
Initial patch by @jmztn with error handling and UI changes.
+ Simplify code, move into own function and run once rather than on every point
+ Improved snapping when a stroke is between increments
+ Added ISO grid option for lines specified by Angle under guide settings
+ Radial snapping mode uses Angle as an offset
Differential Revision: https://developer.blender.org/D5668
This is a partial fix, in that it only brings back the banner reports in
the status bar. The popups still don't show up but I need to investigate
more.
It's really ugly that reports rely on wmWindowManager.winactive, but
that's how it is...
Partialy fixes T69581.
Parenting/constraints/delta-scaled all caused setting dimensions to fail.
Take the difference between the input scale and final scale into
account when applying the dimensions.
Allow selecting how the new location/rotation/scale is combined with
the existing transformation. This is most useful for rotation, which
has multiple options, and scale, which previously could only replace.
The failing assert was there before the recent file browser design
overhaul. Might have been in there for quite a while in fact.
Auto-creation in this case means that the file path would be created if
a non-existent path was entered in the file browser path button.
This confirmation prompt was there earlier, we removed the prompts for
creating new directories all together, but in this case it's reasonable.
Without it, it's simply too easy to create new directories by accident.
Also rename widget color blending functions more clearly.
- color_blend_v3_v3, was widget_state_blend
- color_blend_v4_v4v4, was round_box_shade_col4_r
- color_ensure_contrast_v3, was rgb_ensure_contrast
Add option to change the Intensity of the HDRI in the 3d viewport. This works for both EEVEE and Cycles
Reviewed By: brecht, fclem
Differential Revision: https://developer.blender.org/D5674
Allow combining location, rotation and scale at the same time,
using one constraint. The mixing modes are based on matrix
multiplication, but handle scale in a way that avoids creating
shear.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5640
Upon close inspection, the way the Offset mode works in the
Copy Rotation constraint makes no sense, and in fact, destroys
the rotation of its owner unless either it's single axis, or
the order is set specifically to `ZYX Euler`.
Since it can't simply be changed because of backward compatibility
concerns, replace the checkbox with a dropdown that provides a set
of new modes that actually make sense.
Specifically, add a mode that simply adds Euler components together,
and two options that use matrix multiplication in different order.
The Python use_offset property is replaced with compatibility stubs.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5640
Adds back auto-completion and auto-creation (inserting a non-existing
file-path would create it) for the file path button. The second feature
was left out knowingly, but seems there are reasonable use cases for it.
We can't add these features to the button in the Python script, we have
to call into C. So using a template to do that.
Note that this is based on the old file browser code, I've copied over
the TODO comment.
We need to ensure the file browser window doesn't manage the handlers
for itself.
The special file browser closing code that we used previously isn't
needed anymore, wm_window_open_temp() and the handling of
EVT_FILESELECT_FULL_OPEN already manage it fine.
This reverts commit 82fc9d778e.
This doesn't use the workaround from v3d_object_dimension_buts
needed for dimensions properly update.
Doing this would require moving the panel to C.
Issues from T69536 should be resolved before adding this back.
Ideally, when a reference linked ID is missing (and replaced by linking
code with an empty place-holder), we should just keep the local
overriding datablocks as-is, until broken links are fixed.
Not really working yet though, needs more work here...
Similar change to the one done for tagged IDs overriding some days ago.
We do not always want to remap all local usages of a linked data-block
to its new local overriding copy.
Remove unused OBJECT_OT_mode_set_or_submode, add
OBJECT_OT_mode_set_with_submode which can switch to edit mode as well
as a sub-mode - currently only mesh select mode is supported
(others may be added later).
It is a pain if the subfile we are checking if it exists gets
renamed/removed.
Instead we can check if the directory is empty.
Reviewers: mont29
Reviewed By: mont29
Differential Revision: https://developer.blender.org/D5653
Part of T68836
`transform conversions.c` is a file that is getting too big (almost 10,000 lines).
So it's a good idea to split it into smaller files.
differential revision: https://developer.blender.org/D5677
When click-dragging to change values in textures (for example Musgrave-
>Size to give an example) the step size is too big.
Reviewers: brecht, lichtwerk
Reviewed By: brecht, lichtwerk
Differential Revision: https://developer.blender.org/D5661
Was always evaluating due to typo in rB34ab90f546f0.
Reviewers: brecht
Maniphest Tasks: T68840
Differential Revision: https://developer.blender.org/D5695
It is possible that POST callbacks will modify objects or relations.
This change makes it so an extra update pass is done if needed.
Reviewers: brecht
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5690
The operator set as active object material the material used in the selected stroke.
Access to the operator were added in the stroke menu and context stroke menu.
Reviewers: antoniov, pepeland
Tags: #bf_blender, #grease_pencil
Differential Revision: https://developer.blender.org/D5692
Some implementations of the standard c++ library doesn't define its
functions in the global namespace. So the `isinf` function might
fail in some systems. To fix this, we use the `ensure_finite`
function instead.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5687
Applies to "Setup Tracking Scene" operator which configures background
images for the viewport.
Solves unnecessary slowdown and higher memory usage when camera's model
does not have any effective distortion.
Differential Revision: https://developer.blender.org/D5520
setting/clearing render region uses ND_RENDER_OPTIONS notifier, but
listener was only refreshing RENDER and VIEWLAYER tabs in that case,
whereas the render region buttons are located in OUTPUT tab.
Reviewers: billreynish
Maniphest Tasks: T69522
Differential Revision: https://developer.blender.org/D5685
I believed the crash I experienced happened because:
1. The `extract_pos_nor_init` function is called.
2. Tasks are added to the task pool for `extract_pos_nor`.
3. The tasks begin to be executed while more tasks are added.
4. In some rare cases, all existing tasks are finished, but not all have been added yet.
5. This let the task-counter go down to zero.
6. This triggered a call to `extract_pos_nor_finish`.
7. Then more tasks are added and in the end `extract_pos_nor_finish` is called again.
A solution is to use a task pool that is suspended when created.
Unfortunately, there was an outdated comment, that was probably the root cause of the issue.
Reviewers: fclem, sergey
Differential Revision: https://developer.blender.org/D5680
Using the currently active movie clip had different names in the interface:
In scene context it was "Active Movie Clip", in Camera Background Images it was "Camera Clip", in Constraints it was "ActiveClip".
I made all those instances use "Active Clip", which is descriptive enough and also the shortest of the three.
Reviewed By: billreynish
Differential Revision: https://developer.blender.org/D5400
This patch rewrites the Mapping node to support dynamic inputs. The
Max and Min options have been removed. They can be added as Min and
Max Vector Math nodes manually.
Texture nodes still use the old matrix-based mapping. A new SVM node
`NODE_TEXTURE_MAPPING` has been added to preserve this functionality.
Similarly, in GLSL, a `mapping_mat4` function has been added.
Reviewers: brecht, JacquesLucke
New icons from Andrzej Ambroż (jendrzych)
- Many tweaks to existing icons, such as folders and drives for the new file browser, as well as snapping
- New icons for Checkmark, Transform Origins, Snap to Face Center, Zip Files (currently unused)
This was removed in rB0666ece2e2f9 because it is handled differently for
"real" cloth in cloth_solve_collisions(), but hair still needs this
apparently [does its thing in cloth_continuum_step() instead].
And since we have a default 'Quality Steps' setting of 5, it made many
simulations unstable.
Fixes T65038, T59742 (possibly others)
Reviewers: brecht
Maniphest Tasks: T65038, T59742
Differential Revision: https://developer.blender.org/D5681
This makes the Transform panel complete, so you don't need to open the Sidebar for such a basic concept.
Differential Revision: https://developer.blender.org/D5577
Reviewers: Brecht, Pablo Vazquez
This patch extends perlin noise to operate in 1D, 2D, 3D, and 4D
space. The noise code has also been refactored to be more readable.
The Color output and distortion patterns changed, so this patch
breaks backward compatibility. This is due to the fact that we
now use random offsets as noise seeds, as opposed to swizzling
and constants offsets.
Reviewers: brecht, JacquesLucke
Differential Revision: https://developer.blender.org/D5560
We moved this to Python too quickly, causing the following regressions:
* No auto completion for file names
* Additional handling not applied on changes, like automatic extension
appending (see file_filename_enter_handle)
* Red highlight missing when the file name already exists
Note that earlier (before the file browser redesign), this didn't use
the panel and layout code at all. So even if it's still not in Python,
at least it's integrated into regular panel management now.
OS-specific ordering of the open and cancel button is kept.
Fixes T69457.
This change implements the basics as described in {T68312} for the
shading modes.
* LookDev shading mode is renamed to Material Preview. It always uses Eevee as renderer, and is intended to provide a fast material preview suitable for texture painting, and texture and material setup.
* Rendered shading gains "Use Scene Lights" and "Use Scene World" options similar to current Material Preview. These will be enabled by default. When Use Scene World is turned off, HDRIs will be used for lighting instead. These options are available for EEVEE and Cycles.
* Renderers will be able to customize the shading settings panel and add additional settings.
Reviewed By: brecht, fclem
Differential Revision: https://developer.blender.org/D5612
As an inherent property of matrix-based transformation math, non-
uniform scaling of a parent bone induces shear into the transform
matrix of any rotated child. Such matrices cannot be cleanly
decomposed into a combination of location/rotation/scale, which
causes issues for rigging and animation tools.
Blender bones have options to exclude rotation and/or scale from the
inherited transformation, but don't have any support for removing the
often undesired shear component. That goal requires replacing simple
parenting with a combination of multiple bones and constraints. The
same is true about the goal of inheriting some scale, but completely
avoiding shear.
This patch replaces the old Inherit Scale checkbox with a enum that
supports multiple options:
* Full: inherit all effects of scale, like with enabled Inherit Scale.
* Fix Shear: removes shear from the final inherited transformation.
The cleanup math is specifically designed to preserve the main
axis of the bone, its length and total volume, and minimally
affect roll on average. It however will not prevent reappearance
of shear due to local rotation of the child or its children.
* Average: inherit uniform scale that represents the parent volume.
This is the simplest foolproof solution that will inherit some
scale without ever causing shear.
* None: completely remove scale and shear.
* None (Legacy): old disabled Inherit Scale checkbox.
This mode does not handle parent shear in any way, so the child
is likely to end up having both scale and shear. It is retained
for backward compatibility.
Since many rigging-related addons access the use_inherit_scale
property from Python, it is retained as a backward compatibility
stub that provides the old functionality.
As a side effect of reworking the code, this also fixes a matrix
multiplication order bug in the Inherit Rotation code, which caused
the parent local scale to be applied in world space. In rigger
opinion this option is useless in production rigs, so this fix
should not be a problem.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5588
Support for UV Stretching overlay during multi object editing. The
VBO now holds the ratios per fase. In the shader these ratios will
be compared against the global ratios. The global rations are created
from all selected objects.
The current implementation does not fit well with the draw module. The
plan is to move the drawing of other spaces towards the draw manager what
leads to a better fit. Currently the details on this solution is unclear
but this requirement will become an attentionpoint in the future design.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5665
Instead use vertical cursor motion for Y axis shear.
This removes the shear_axis option completely since we now have two
axis options used by shear it's not needed.
E.g. box selecting wouldn't allow selecting the first file.
Work selection and shift/ctrl selection had similar issues.
Code assumed that the first item was the '..' parent item and manually
removed it from the selection. I could just remove this special
handling, but instead I made the behavior more dynamic. So the file list
checks if the '..' item is there and only then applies special
treatment.
That way we can easily bring the '..' item back or make it optional if
wanted.
Add missed 'Insert Blank keyframe in All Layers' to context menu
Reviewers: antoniov, pepeland
Tags: #bf_blender, #grease_pencil
Differential Revision: https://developer.blender.org/D5669
When select a layer in Dopesheet, the autolock layer was not working.
Now the Dopesheet code calls the function for autolock. Also some code cleanup to move the logic to new function.
In order to correctly drive corrective shape keys from a freely
rotating organic joint it is very often found necessary to
decompose the rotation into separate bending and twisting
motions. This type of decomposition cannot be reproduced by
any Euler order or a single quaternion.
Instead this is done by using a helper bone with a Damped Track
constraint aimed at the tail of the control to pick up the bending,
and its helper child with Copy Transforms to separate the twist.
Requiring two additional bones to drive a shape key or a correction
bone seems inconvenient, so this implements the necessary math as new
options in the recently introduced Rotation Mode dropdown of the
Transform Channel driver variable type. The data is also accessible
as a Transformation constraint input.
The output is in the form of Quaternion-derived 'pseudo-angles',
which for `Swing and Y Twist` would represent the following:
* W: true bend angle, independent of bend direction.
* Y: true twist angle.
* X, Z: pseudo-angles representing the proportion of bending around X/Z.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5651
This is a general redesign of the File Browser GUI and interaction
methods. For screenshots, check patch D5601.
Main changes in short:
* File Browser as floating window
* New layout of regions
* Popovers for view and filter options
* Vertical list view with interactive column header
* New and updated icons
* Keymap consistency fixes
* Many tweaks and fixes to the drawing of views
----
General:
* The file browser now opens as temporary floating window. It closes on
Esc. The header is hidden then.
* When the file browser is opened as regular editor, the header remains
visible.
* All file browser regions are now defined in Python (the button
layout).
* Adjusted related operator UI names.
Keymap:
Keymap is now consistent with other list-based views in Blender, such as
the Outliner.
* Left click to select, double-click to open
* Right-click context menus
* Shift-click to fill selection
* Ctrl-click to extend selection
Operator options:
These previously overlapped with the source list, which caused numerous
issues with resizing and presenting many settings in a small panel area.
It was also generally inconsistent with Blender.
* Moved to new sidebar, which can easily be shown or hidden using a
prominent Options toggle.
* IO operators have new layouts to match this new sidebar, using
sub-panels. This will have to be committed separately (Add-on
repository).
* If operators want to show the options by default, they have the option
to do so (see `WM_FILESEL_SHOW_PROPS`, `hide_props_region`), otherwise
they are hidden by default.
General Layout:
The layout has been changed to be simpler, more standard, and fits
better in with Blender 2.8.
* More conventional layout (file path at top, file name at the bottom,
execute/cancel buttons in bottom right).
* Use of popovers to group controls, and allow for more descriptive
naming.
* Search box is always live now, just like Outliner.
Views:
* Date Modified column combines both date and time, also uses user
friendly strings for recent dates (i.e. "Yesterday", "Today").
* Details columns (file size, modification date/time) are now toggleable
for all display types, they are not hardcoded per display type.
* File sizes now show as B, KB, MB, ... rather than B, KiB, MiB, … They
are now also calculated using base 10 of course.
* Option to sort in inverse order.
Vertical List View:
* This view now used a much simpler single vertical list with columns
for information.
* Users can click on the headers of these columns to order by that
category, and click again to reverse the ordering.
Icons:
* Updated icons by Jendrzych, with better centering.
* Files and folders have new icons in Icon view.
* Both files and folders have reworked superimposed icons that show
users the file/folder type.
* 3D file documents correctly use the 3d file icon, which was unused
previously.
* Workspaces now show their icon on Link/Append - also when listed in
the Outliner.
Minor Python-API breakage:
* `bpy.types.FileSelectParams.display_type`: `LIST_SHORT` and
`LIST_LONG` are replaced by `LIST_VERTICAL` and `LIST_HORIZONTAL`.
Removes the feature where directories would automatically be created if
they are entered into the file path text button, but don't exist. We
were not sure if users use it enough to keep it. We can definitely bring
it back.
----
//Combined effort by @billreynish, @harley, @jendrzych, my university
colleague Brian Meisenheimer and myself.//
Differential Revision: https://developer.blender.org/D5601
Reviewers: Brecht, Bastien
In weightpaint it is possible to enable the bone selection mode. During
drawing the overlay was rendered, but during selection this was ignored.
Users needed to double click in order to select bones even when the overlay
was enabled.
This patch makes bone selection possible during weight painting using the pose mode bone
selection overlay with a single click.
Reviewed By: fclem, campbellbarton
Differential Revision: https://developer.blender.org/D5629
* Auto detect rc and release version cycle in BKE_blender_version.h.
* On Windows, generate zip and installer if a release is detected.
* On macOS, always generate a dmg instead of zip.
* Use standard package names without hash if a release is detected.
* Buildbot package names now match platform names in releases.
Ref T67056
Differential Revision: https://developer.blender.org/D5643
Useful for using reference images that only make sense to see
in aligned axis-views.
This restores functionality possible with 2.7x background images.
See: T52668.
We can now generate a proper path here, make use of it.
Note: not sure how property pyrna path is supposed to be accessed? code is
similar to the struct pyrna path anyway...
Main issue was that `rna_prepend_real_ID_path()` would return
nothing in case given path was NULL, when it should actually return the
`prefix` computed by `RNA_find_real_ID_and_path()` in that case...
Also make return `real_id` pointer optionnal, no reasons to make it
mandatory here. And some general naming fixes.
Now that we 'properly' support private ID data in lib management, there
is no reason anymore to have that custom func, badly named and
by-passing the whole generic ID management code.
Not sure exactly why that was working with nodetrees in depsgraph (could be some special
code in the despgraph), but we always want to allocate memory for the nodetrees here!
Same issue here as with root nodetrees, those are private ID data owned
by another ID, and not in Main DB. This requires special handling.
there are still quiet a few things to do here, like getting rid of
special code for master collection (regular ID copying should handle
that just as it already does for root nodetrees), cleanup in ID copying
code, etc.
The Poly curves were not supported when convert curves to grease pencil strokes, but now are supported.
Also, some code cleanup to make it more readable.
message(FATAL_ERROR"WITH_WINDOWS_CODESIGN is on but WINDOWS_CODESIGN_PFX_PASSWORD not set, and environment variable PFXPASSWORD not found, unable to sign code.")
message("Unable to detect the Visual Studio redist directory, copying of the runtime dlls will not work, try running from the visual studio developer prompt.")
endif()
# 1) CMake has issues detecting openmp support in clang-cl so we have to provide
# the right switches here.
# 2) While the /openmp switch *should* work, it currently doesn't as for clang 9.0.0
@@ -80,7 +87,7 @@ is a full-featured 3D application. It supports the entirety of the 3D pipeline -
Use Blender to create 3D images and animations, films and commercials, content for games, architectural and industrial visualizatons, and scientific visualizations.
# XXX Used for CurveProfile only currently I think (bevel code),
# but think the idea is that that pointer is for any type?
tp_str=":class:`bpy.types.bpy_struct`"
else:
print("Can't find",vars_dict_reverse[tp_sub])
assert(0)
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.