The original code was commented on.
Unlike blender 2.79, the grid units are now displayed only when RV3D_VIEW_IS_AXIS.
The visible subdivisions in the grid are made by the GPU and depending on the pixel.
The code used here only mimics this behavior and adds a bit of overhead.
Reviewers: fclem, campbellbarton
Subscribers: FloridaJo, zlsa, rl.amorato, EitanSomething
Differential Revision: https://developer.blender.org/D4325
When calling `MEM_guarded_mallocN_aligned` with an alignment of 4,
a pointer that was returned that is 4 byte but not 8 byte aligned.
When freeing this pointer, `MEM_guarded_freeN` thinks that it is an
illegal pointer, because it asserts that `((intptr_t)memh) & 0x7 == 0`.
The fix is to always use at least 8 byte alignment.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5529
This change was applied to GP branch during the period 2.80 cannot be updated. Now the patch can be moved to master.
The commit fix the problem when reproject over surface in multiframe mode and the surfaces can moved.
Also improved the surface algorithm thanks to Lukas W (@geloescht).
New Algorithm: Differential Revision: https://developer.blender.org/D4878
Tested by @mendio and @pepeland
Actually, the value for this parameter must be in the order of 0.00001 and this makes the UI uncomfortable.
Now, the value is divided by 1000 internally and the UI values are more logic.
Reviewers: mendio, pepeland
Differential Revision: https://developer.blender.org/D5528
The pointer argument is supposed to be the object the property belongs
to, not a pointer to the property metadata itself. This only worked
before because the argument was never used.
This is a step to finish the D4325 and fix the T61286.
Currently the grid is highlighted in steps of 10 out of 10, which is wrong for the imperial units as seen in `buImperialLenDef`.
The idea of the code is to pass the steps of the grid already dimensioned as a uniform.
Another important thing to note is that subdivisions now only affect the grid without unity.
This matches the 2.7x Blender versions.
No performance loss (almost no gain too).
Reviewers: fclem
Subscribers: zlsa, rl.amorato
Differential Revision: https://developer.blender.org/D4379
This was due to the GPUIndexBuf ranges only computed when requesting
the triangles indices. If the tris were already calculated, the new shading
batches would never have the GPUIndexBuf ranges and instead use the full
triangle index buffer.
So since this only happen when shading data does not match, we just save
the previous GPUIndexBuf ranges and reuse them for the new batch.
This patch is a bit of a hack on top of a hack but it works fine.
Editing a lib char should never, ever be done once you have proxies of
it in your project, that will most certainly break a lot of things...
But at leats let's try no to crash here.
This operator only existed to be able to see multiple reports, now instead the
info log can be opened and contents can be copy/pasted.
Patch by Valentin (Poulpator)
Differential Revision: https://developer.blender.org/D5510
object
This showed e.g. when deleting active object, then selecting using box
select.
This commit also lifts the restriction that linked objects could not be
moved to a collection.
Reviewers: campbellbarton, dfelinto
Maniphest Tasks: T68647
Differential Revision: https://developer.blender.org/D5485
need to access curve_cache from evaluated object.
thx @sergey for pointing that out.
Reviewers: sergey
Maniphest Tasks: T68779
Differential Revision: https://developer.blender.org/D5526
When working with Effect strips it is not optimal to have to scroll
downwards to get to the important settings for these kinds of strips.
D5512 by @tintwotin
Think pretty much any ID pointer property should be overrideable
actually, without this reconstructing a local hierarchy of overriding
data-blocks simply cannot work properly...
Fix T67008: Missing move handle and flickering in FileBrowser
Allow split regions (child regions) to contribute to the action zones (azone) of the parent region.
This fixes the issues in file browser and also in the user preferences.
Reviewers: Severin, mont29, campbellbarton
Reviewed By: Severin, mont29, campbellbarton
Subscribers: brecht, campbellbarton
Maniphest Tasks: T67008
Differential Revision: https://developer.blender.org/D5273
- Implement dynamic inputs. The second input is now unavailable in single
operand math operators.
- Reimplemenet the clamp option using graph expansion for Cycles.
- Clean up code and unify naming between Blender and Cycles.
- Remove unused code.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5481
Adds support for changes in the outliner from the soc-2019-outliner
branch. All changes made in the default keymap are made in the
Industry Compatible keymap, except for renaming. Renaming is done
with Return in the Industry Compatible keymap.
Move outliner versioning for syncing and themes to the block
for the next subversion bump. It was not moved from the first
location it was placed in the soc-2019-outliner branch.
Old files will now load with synced selection enabled reliably.
Actually, the selection mode is not visible in Sculpt mode when mask is enabled, but still is used.
Also, the mode is shared between Edit mode and Sculpt mode and for meshes the selector is by mode.
This commit splits the select mode in different properties and show the selector in Sculpt mode to define the Select mode. Also, the Select Mask button has been removed and now the Select Mode buttons work equal to Meshes where the select buttons are the mask enable too.
Fixed some old code not valid detected during these changes.
Differential Revision: https://developer.blender.org/D5500
Now the GPencil smooth algorithm uses a average value instead to use only two points and the interpolated value.
Differential Revision: https://developer.blender.org/D5489
Prior to this commit: If the Grease Pencil Thickness modifier is set to Normalize and a Vertex Group is selected, the thickness of all strokes are effected when changing the Thickness parameter. Points on strokes are only normalised (= pressure set to 1.0) if they are part of the Vertex Group; the strokes themselves may still change thickness.
With this patch: If Normalize is selected with a Vertex Group, Blender now pre-checks each stroke to determine whether it has vertices within or outside the Vertex Group. If all the points on the stroke belong to the Vertex Group, it normalises the whole stroke to a uniform thickness. If some or none of the points of the stroke belong to the Vertex Group, the stroke is now left as is.
Reviewed By: @antoniov
Differential Revision: https://developer.blender.org/D5483 with minor edit.
Set and clear parents for all elements in the selection in the outliner.
This also removes the popup menu for setting the parent to curves,
armatures, and lattices. It makes more sense to keep the outliner
simple and only do object parenting.
Adjusts the scrolling of show active and scroll page operators
to use the `outliner_scroll_view` operator to ensure scrolling
does not leave the outliner bounds.
Also changes show active to expand subtrees containing all
instances of the active object, which may be linked to multiple
collections.
Draw icons for sequencer and vertex groups. The sequence
types need updates because they all draw in various colors
and some sequence types do not have an icon.
Previously with F2 mapped to the global rename active object
operator, it was not posible to use the conventional F2 to rename any
outliner element like collections or object data. This adds F2 to the
outliner keymap to call the outliner rename operator rather than the
popup rename object operator.
Adds a keyboard walk navigation and selection operator to the
outliner. Up and down arrow keys walk up and down the list of
elements, and left and right will open and close elements if
the elements are closed or opened respectively. Holding shift
while walking up and down the tree expands the selection.
Holding shift while clicking or pressing left and right arrows
will expand or collapse all children elements recursively.
Pressing enter to openclose the hovered element is removed.
Also allows click+drag for openclose of element subtrees.
This moves openclose toggling to the openclose operator to
remove duplicate code. The outliner tree building is tweaked
slightly to set the proper parents in scene display mode for walk
select to walk to parents without errors.
Adds an invisible object filter in the outliner to show hidden
objects. This is useful to quickly locate hidden items in a large outliner
tree and easily toggle visibilty back on. Invisible refers to an object
being hidden, or viewport visibility restricted.
Allow selection of subtree elements on a collapsed element's
row. Because subtree elements are aggregated by type, a select on
an icon that represents multiple subtree elements will invoke a
popup menu to select the specific subtree element.
Also draws highlights on cursor hover over a row icon.
Any child elements that are linked to multiple collections will
only be listed in the popup one time, and selection from the
popup will select the first instance in the subtree.
Draw all constraint icons and enable/disable restrict buttons.
The action constraint needs its own icon. It currently draws white
instead of the blue modifier color.
When the active collection is hidden or excluded, change the active
collection to the first visible parent collection. This behavior existed
previously for excluding collections, and is now expanded to also
switch the active collection when viewport hidden or restricted.
This does not prevent viewport hidden or restricted collections from
being reactivated later. This could be added as a separate commit.
Excluded collections cannot be activated, so it may make sense to
extend this behavior to hiding collections.
Adds a toggle to the filter menu for outliner synced selection. Enabled
by default, this ensures selection is synced between objects, bones, and
sequences. An active outliner element theme color is added to indicate
which element is active.
Synced selection is controlled on the operator level. Each operator
that modifies selection for objects, bones, sequences, or outliner
elements needs to call the respective ED_outliner_select_sync_from..
function to tag outliners to be synced.
Syncing is done lazily on outliner draw.
The Normal vector socket in the Normal node wasn't drawn properly and
couldn't be controlled. Additionally, the socket name was drawn over it.
This happened because the socket had a default value of a zero vector.
To fix this, we set the default value to the unit vector `(0, 0, 1)`.
Moreover, we don't draw the UI name if the subtype is `PROP_DIRECTION`.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5503
The soc-2019-outliner branch relied on the previous behavior,
since this is going to be merged soon, postpone this change.
This reverts commit 9dab57a9f8.
We were storing the 'item' part in the RNA path of the override op
itself, which will not work with IDs because overriding local one might
not have the same name as the linked one (when some local ID with same
name already exists).
Now we are properly handling this using the expected actual override
operation, which stores necessary data (names or indices) from both
local and linked data.
This checkbox replaces the "Disabled" and "Enabled" entries in the
filter drop-down. As a result, it now takes a single click to limit the
shown entries to enabled add-ons only. This is also an actual flag in
the preferences, and thus its state is saved between runs on Blender (in
contrast to the filter, which is always reset to "All").
Reviewed by: brecht, billreynish
This fixes the glitching hairs described in T56408, T63534, and possibly
also T63534.
The fix consists of returning the original mesh (i.e. as visible in edit
mode) when constructing the ORCO mesh. This allows a static set of
coordinates to be used when computing the child hair positions.
The original mesh is only returned when it has the same topology (at
least same number of vertices, loops, and polys. It's up the author of
the Alembic file to ensure stable geometry when it's desired to be
compatible with Blender's hair system.
Reviewers: mont29, brecht
Differential Revision: https://developer.blender.org/D5492
The `BKE_material_pop_id()` and `BKE_material_clear_id()` functions had
a parameter `update_data` that, when `false`, would cause the mesh polys
to keep their material index, even when the indexed material slots were
removed. This behaviour was never used in the C code and not supported
by the drawing code, making polygons disappear and causing crashes. The
Python binding in RNA, however, defaulted to `update_data=False`.
This commit removes the `update_data` parameter altogether, and makes
the functions always fix up the material indices.
Reviewed by: mont29, brecht
Building OIDN still needs to be enabled explicitly with --with-oidn.
It will fail with older versions of CMake or TBB, so I can't make
any guarantees for various Linux distributions or versions.
This was a mistake in rB87629b2a7443
`BKE_object_shapekey_free` would never return `true`, so DEG updates
would not happen...
So `ob->shapenr` was not up-to-date etc., leading to crash in
`BKE_mesh_nomain_to_mesh` shapekey handling...
Reviewers: brecht
Maniphest Tasks: T68710
Differential Revision: https://developer.blender.org/D5501
This is 2.7x behavior, while there are plans to improve on this,
committing in case larger changes take longer.
Without this it's not easy to select object data without changing modes.
See D5493
The installer always upgraded the last version installed and did not allow for two versions to be installed side by side.
The reworked installer will allow side by side installs
install order:
```
2.81 -> 2.81a -> 2.82 : Allowed , will result in both 2.82 and 2.81a being installed
2.82 -> 2.81 -> 2.81a : Allowed , will result in both 2.82 and 2.81a being installed
2.82 -> 2.81a : Allowed , will result in both 2.82 and 2.81a being installed
2.82 -> 2.81a -> 2.81 : Not Allowed, 2.81 will only install if you manually remove 2.81a first.
```
Do note though that this will not apply to any previously issued installers and even for 2.80a this is not something we can fix.
This patch is for landing in 2.81 *only* and should be excluded from any possible 2.80a release.
Second change is a change to the compression level, building the MSI takes 30 minutes, which is crazy, perhaps worth it if the compression actually pays of.
```
MSI - none 1:35 247.0 MB (260,025,634 bytes)
MSI - mszip 2:02 89.6 MB ( 94,022,946 bytes)
MSI - low 2:35 81.6 MB ( 85,646,626 bytes)
MSI - medium 4:11 77.3 MB ( 81,136,930 bytes)
MSI - high 28:01 74.7 MB ( 78,384,418 bytes)
zip 1:32 93.2 MB ( 97,732,293 bytes)
7Z 2:22 65.0 MB ( 68,171,614 bytes)
```
It didn't, so I lowered it to medium, seemed reasonable.
Differential Revision: https://developer.blender.org/D5494
Reviewers: brecht, jesterking
But in the future the selection code may also be used in object mode (eg for snapping).
So to avoid using too much VRAM resources, it is good to avoid drawing all objects in the viewport.
The solution was to create an array with only objects that are detected within the selection area.
If the selection operator is modal, objects already detected are not removed from the array until view3d is moved or orbited.
To detect the object, its BoundBox is tested.
Since the Select Engine does not have a dedicated depth texture, whenever a new object is "found" the depth of the objects in the array already drawn is redrawn.
Reviewers: campbellbarton, fclem
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5435
- When no change is performed on a float button, cancel the action.
- Move left/right clicks into the same block.
- Replace ambiguous names: temp, tempf.
In rB9c010c44f420, DRW_mesh_batch_cache_create_requested was changed to
take a scene (instead of toolsettings directly), but
DRW_draw_depth_object is calling this with with NULL, just checking for
this seems to fix...
Reviewers: fclem
Maniphest Tasks: T68675
Differential Revision: https://developer.blender.org/D5488
Just enable some commented-out code from rB636289b755f6ce (disabled at
that time because we were too close of 2.79 release...).
Issue raised in D5486, thanks.
bf_intern_openvdb makes a significant number of template instantiations
causing it go over the maximum number of sections (int16) in a coff file
when doing a debug build.
This change switches the compiler to use the extended coff format which
has this field extended (int32) all linkers post msvc2005 can process
this format so there's no reason not to turn this on globally.
Clang on windows does not need this change since clang switches implicitly
to the extended format when required. [1]
[1] https://reviews.llvm.org/rL217812
This is done because they don't have the same update frequency. UV can be
persistent even on geometry update (ex: skinned object) but tangents
can change if the normals change.
Also the name buffer per vbo was too small to contain all names.
These functions make possible porting the tools from the sculpt branch, making them compatible with PBVH_FACES and PBVH_BMESH without duplicating the code. They can also help to simplify some existing code.
These functions should not be used when working with PBVH_GRIDS data in SculptSession. PBVH_GRIDS needs to be removed from the sculpt code and converted to PBVH_FACES to be compatible with this API.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5352
These functions deal with voxel remeshing of Mesh data,
and aren't related to MOD_remesh.c for e.g.
Name so other kinds of remeshing wont cause confusion.
For clarity sake, the batch cache now uses exclusively per Loop attributes.
While this is a bit of a waste of VRAM (for the few case where per vert
attribs are enough) it reduces the complexity and amount of overall VBO
to update in general situations.
This patch also makes the VertexBuffers filling multithreaded. This make
the update of dense meshes a bit faster. The main bottleneck is the
IndexBuffers update which cannot be multithreaded efficiently (have to
increment a counter and/or do a final sorting pass).
We introduce the concept of "extract" functions/step.
All extract functions are executed in one thread each and if possible,
using multiple thread for looping over all elements.
Reviewed By: brecht
Differential Revision: http://developer.blender.org/D5424
The voxel remesher introduces a new workflow for sculpting without any of the limitations of Dyntopo (no geometry errors or performance penalty when blocking shapes). It is also useful for simulations and 3D printing.
This commit includes:
- Voxel remesh operator, voxel size mesh property and general remesh flags.
- Paint mask reprojection.
- Geometry undo/redo for sculpt mode. This should support remesh operations as well as future tools that modify the topology of the sculpt in a single step, like trimming tools or mesh insert brushes.
- UI changes in the sculpt topbar and the mesh properties pannel.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5407
When a button represents the whole array (e.g. color picker buttons),
these context menu options were available, but didn't really work
correctly. Since it's not clear how they could reasonably work without
a valid index, it's better to hide them.
This code is needed to implement the Voxel Remesher as well as other features like a better remesh modifier with filters and CSG operations.
Done by Martin Felke and Pablo Dobarro
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5364
This is quite an old comment, recent IDE's/editors
should be able to handle escaped quotes in strings.
If kludges like this are needed, developers should note exactly why.
The menu is not redundant, it is just another way to reach the tool and also give more discoverability of the operator shortcut (Many tools in Blender are also on menus, toolbar or header, just think of Move, Rotate, Scale).
There is also no reason to force the user/artist to change to edit mode for interpolate strokes, when the tool works perfectly in drawing mode too. It would only slow down the 2D animation workflow.
Reviewers: @mendio
We need a custom 'apply override' callback here to prevent resetting
the inverse parent matrix.
Things are now working for basic cases, but complex ones (in production
rigs e.g.) are still partially broken...
The most common use of the text editor seems to be for scripting. Having
line numbers and syntax highlighting enabled by default seems sensible.
Syntax highlighting is now enabled by default, but is automatically
disabled when the datablock has a non-highlighted extension.
Highlighting is enabled for filenames like:
- Text
- Text.001
- somefile.py
and is automatically disabled when the datablock has an extension for
which Blender has no syntax highlighter registered.
Reviewers: billreynish, campbellbarton
Subscribers: brecht, billreynish
Differential Revision: https://developer.blender.org/D5472
To reproduce:
* Split 3D View to show Info Editor
* Change 3D View a few times to various subtypes (Timeline, UV Editor
etc).
Every now and then, the Info Editor should show `UNKNOWN ENUM`. Other
prints may also be lagging behind.
Reviewed By: campbellbarton, brecht
Differential Revision: https://developer.blender.org/D5325
Previously, we had one global `GPU_matrix` stack, so the API was not
thread safe. This patch makes the stack be per `GPUContext`, effectively
making it local per thread (`GPUContext` is located in thread local
storage).
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5405
This commit also provide a compatibility code that will convert old
materials using Additive or Multiply Blend mode to their node equivalent.
This conversion is only done on outputs that are enabled for eevee.
Alpha blended Transparency is now using dual source blending making it
fully compatible with cycles Transparent BSDF.
Multiply and additive blend mode can be achieved using some nodes and are
going to be removed.
To fully support storing colors as a custom property, it is necessary
to allow switching the property UI to the standard color picker button.
That means in effect supporting custom property subtype values.
Change RNA_property_subtype to look for a 'subtype' string field
in _RNA_UI and parse it as an enum value. To minimize performance
impact, only do it if the property is an array; also, don't use
the custom subtype during RNA path parsing.
On the python side, allow setting some most useful seeming values
from the custom property settings editor.
Also, since some color picker code seems to run into a risk of
buffer overruns if the array size is wrong, check the size in
the UI layout code to be safe.
Reviewers: campbellbarton
Differential Revision: https://developer.blender.org/D5475
This could happen e.g. when changing smoke type from flow to domain or
connecting a volume shader with to a domain without an actual flow type
around.
Fixes T58569, T68359
Reviewers: brecht
Maniphest Tasks: T58569, T68359
Differential Revision: https://developer.blender.org/D5478
If the option is enabled, the output is clamped to the target range.
The target range is [To Min, To Max]. The option is enabled by default.
The clamp option is implemented in EEVEE by linking to the `clamp_value`
GLSL function. And it is implemented in Cycles using a graph expand
function.
Reviewers: brecht, JacquesLucke
Differential Revision: https://developer.blender.org/D5477
This patch adds a new node that clamps a value between a maximum and
a minimum values.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5476
The calls to `BKE_animsys_evaluate_all_animation()` and
`BKE_mask_evaluate_all_masks()` used the wrong timecode to evaluate the
animation system. This happened:
- Sequencer in scene A was rendered at frame X.
- Scene strip for scene B which should be evaluated at frame Y.
- BKE_animsys_evaluate_all_animation() was called with frame Y, which
also re-evaluated the animation data in scene A.
- Other sequencer strips with animated values were then evaluated for
frame Y and not frame X.
Since the depsgraph for rendering the scene strip is already OK and does
its job, it's no longer necessary to re-evaluate all the animation in
this way.
Removed `BKE_mask_evaluate_all_masks()` because it's no longer used.
Reviewers: sergey, brecht, iss
Differential Revision: https://developer.blender.org/D5394
This patch adds a new Map Range node that linearly remaps an input
value from a range to another. This node is similar to the compositor's
Map Range node.
Reviewers: brecht, JacquesLucke
Differential Revision: https://developer.blender.org/D5471
In some rare cases it is convenient to store a short array value
as a custom property, e.g. a vector or color. For example, it may
be helpful when importing/exporting certain formats that support
custom or nonstandard attributes on objects.
The custom property storage already can handle arrays in order to
support properties defined via python. The only thing missing is
UI support (and some bugs), and this patch fixes that:
- Allow editing short array properties via Custom Properties panel.
- Fix a UI layout sizing bug triggered by the previous item.
- Fix a dependency graph bug with drivers using such properties.
- Make RNA_*_get_default_array code robust in case of size mismatch.
- Support custom default values for array properties, allowing
both an array and a scalar value.
Reviewers: campbellbarton
Differential Revision: https://developer.blender.org/D5457
i18n code does not work from threads on some plaforms, so it is disabled
in Blender when called from non-main thread.
Means that we have to go to a slightly different approach, with dirty
tag and generating string on request for UI.
Note: Also had to update the `info` string size, to fit with expensive
asiatic scripts in utf-8... Using mem for that kind of runtime data is
not really nice, but for now it will have to do.
Make the transforms section of the properties panel consistent with
the transforms section of the side-bar, and to expose some currently
hidden BBone properties in the Bendy Bone section.
- Object transformations were not consistent with Pose Bone
transformations in that they did not use single-column layout.
- Even in Pose Bone transformations,
the rotation mode option was after Scale.
- Edit Bone Transforms panel included "Tail Radius" and
"Envelope Deform Distance", neither of which belong there. See T65670.
- Expose bbone_x and bbone_z.
D5454 by @Mets
We can add more fine grained checks for when these flags are supported so
that adding asan flags manually still has all the workarounds, but for now
compiling succesfully is more important.
In Grease Pencil Edit Mode the Select menu should always be visible. Right now the menu visibility is controlled by the Selection Mask button next interpolate popover
Differential Revision: https://developer.blender.org/D5466
Not even in append case. If those objects are already part of a
collection, we can now leave them fully un-instantiated in any scene,
since user can easily do it themselves as they need to.
merge/dissolve distance is actually a maximum, not a minimum
Reviewers: campbellbarton
Maniphest Tasks: T66922
Differential Revision: https://developer.blender.org/D5462
Some brush tools were being executed too often when using devices with high polling rates, causing performance issues. This should improve the performance of brushes that don't need those updates.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5429
This fixes inconsistencies in materials between objects and obdata
due to placeholders generation for missing libdata.
Note that we cannot do that when generating the obdata placeholder,
as not all objects using it might be already loaded...
So this has to be done near the end of the reading/linking process.
Reported here by Blender Studio.
Reviewers: brecht
Subscribers: jbakker, zeddb
Tags: #datablocks_and_libraries
Differential Revision: https://developer.blender.org/D5428
'cached' particles (for paths actually) are only generated for some kind
(hair, keyed, and baked system afaik), not for all.
Note that we could probably just use directly `totpart` and `totchild`,
but keeping code as close to what it was as possible, for now...
- Grey out the option when factory settings have been loaded.
- Note it it's tool-top that it's ignored when factory settings
have been loaded.
Suggestions by @JulienKaspar
Change the default drawing method of vector sockets to use a column layout.
This allows more interactive use of nodes and avoids the one or two clicks
needed to edit vector sockets in the old default component layout.
Developers may still use the component layout by flaging the socket with the
`SOCK_COMPACT` socket flag. For now, we choose to draw the SSS scale vector
of the Principled and SSS nodes in a compact form because they don't require
much interactivity.
Reviewers: brecht, JacquesLucke
Differential Revision: https://developer.blender.org/D5458
The selection tool must be hidden if the sculpt mask is not enabled because these options are not usable in this mode.
Also, the Select tools have been moved to the bottom of the toolbar.
Now, the logic is similar to Meshes.
Differential Revision: http://developer.blender.org/D5452
Before, the length variable was reused for Sample and Merge Simplify. Now, the Merge has its own distance property and variable in the modifier struct.
See Design task T68277, and patch D5423.
This commit includes edits by @ideasman42 to patch in
branch temp-D5423-update, plus responses to his comments.
The Grease Pencil Stroke Menu in Edit mode is cluttered with operators that act over stroke, points or the entire object.
To keep the consistency of the edit menu with other Blender Objects, we should separate the menu in: Grease Pencil - Stroke - Point.
Also we should add some missing operators and other menus like Show/hide or Weights among others
Differential Revision: http://developer.blender.org/D5449
The Sequencer/Preview Menu is a mixture of both the Sequencer and the Preview menu functions, but they are currently not presented in an organized way.
Moved the Preview Zoom functions up next to the Sequencer Zoom functions with a separator in between.
Moved the Preview Show functions up next to the Sequencer Show functions with a separator in between.
Uncommented Show Framenumber Indicator, since it does not work or have a function after scrubbing in the timebar was implemented.
Renamed Show Metadata to Show Image Metadata, since it does only show metadata for images.
Added Show Annotations to View Menu for consistency.
Added Frame Overlay to View Menu for consistency.
Added Fractional Zoom to a sub-menu, since Sequencer/Preview View menu became too long. This sub-menu is in consistency with the Fractional Zoom menu in the Image Editor.
In Sequencer/Preview mode the Fractional Zoom will be named Fractional Preview Zoom, to specify that this function is only for the Preview.
Patch by Peter Fog (tintwotin)
Differential Revision: https://developer.blender.org/D5339
The Shear transform operator is now disallowed in the timeline and
dopesheet editors.
Reviewers: campbellbarton
Differential Revision: https://developer.blender.org/D5440
The old text, "Save modified preferences on exit" suggests that only the
modified preferences are saved. This is not the case: all preferences
are saved at once. This distinction is especially important after having
loaded factory default settings.
As discussed with @campbellbarton and @JulienKaspar.
The functions are now divided into two nested sub panels, since it makes it easier to navigate through the options.
The Location values are moved above the Alignment values, to avoid the confusion that the alignment values could be presets for the location.
In the menu and context menu the Text Effect strip was among the functions which had the Input sub menu visible. Text strips do not take strip inputs, so this is a bug, which is solved with this diff.
Patch by Peter Fog (tintwotin)
Differential Revision: https://developer.blender.org/D5142
This removes the Brush pulldown menu from Sculpt and Paint modes. This menu only contained a random duplicated subset of brush options. Now everything is accessible centrally in the Brush Tool Settings.
The Sculpt menu likewise contained various random brush options. These are removed and replaced by a list of commands, just like the other paint modes.
Also removes the Show Mask option from the mode options panel since this is also in Overlays.
Reviewers: Campbell Barton
Differential Revision: https://developer.blender.org/D5420
This option uses the same logic of the merge by distance but as an option of modifier to allow dynamic merge.
This option will be very useful for LANPR generated strokes.
This mode simplify the stroke doing a resampling of the points and generate new geometry at the distance defined.
Sample function developed by @NicksBest
New Resample Stroke operator
This operator recreates the stroke geometry with a predefined length between points.
The operator uses the same code used in Simplify modifier.
Reviewers: @mendio
Merge points when the distance is less than a predefined value.
The method to interpolate the position created a wrong merge. Now, always the secondary point is merged with the first one (merge at first), except the last point.
- Add "Live Edit" to Text menu.
- "Top/Bottom of File" renamed to "Top/Bottom" and placed in Navigation sub-menu.
- Added navigation functions to Navigation menu,
since they were not exposed in the menus.
- Added selection functions to Select menu,
since they were not exposed in the menus.
- Moved the Select menu to the Header in consistency with the 3D View.
- Inserted comment in context menu.
D5434 with edits.
When using Vertex or Weight paint mode on a wireframe the overlay was
blended with the background. In this case we now use alpha blending.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5340
The matrices that projects background images in the 3d view
were incorrect. The root cause was that the coordinate systems were not
respected, that was most noticeable when rotating a stretched image.
We re-validated conversions of coordinate spaces (UV -> Image -> Camera -> Window)
and made sure that the rotation is done in image space.
Reviewed By: campbellbarton
Differential Revision: https://developer.blender.org/D5431
It is easier to deal with private values of the DRW_select engine and gives room for improvement.
Reviewers: campbellbarton, fclem
Differential Revision: https://developer.blender.org/D5415
`ED_view3d_select_id_read_rect` serves only as a bridge to `DRW_framebuffer_select_id_read`.
Keeping these codes similar only increases the complexity of some functions.
Reviewers: campbellbarton
Differential Revision: https://developer.blender.org/D5415
The 'Seed' setting is not part of the pinned data-block. When pinning,
the local variable `psys` is `None`, and this wasn't properly checked for
when drawing the 'Seed' setting.
In the case where the library is missing, the armature object is
replaced with an empty. This would crash the armature modifier.
Now we check if the armature object really is an armature or not.
this was also happening in snapping with the measure tool
same method as in snap_mesh_polygon() (from rB59286ddcf80c) now used in
snap_mesh_edge_verts_mixed() as well...
Reviewers: mano-wii
Maniphest Tasks: T68291
Differential Revision: https://developer.blender.org/D5422
Very annoying that this whole UI thingy uses its own cooking... This is
more a quick-slap fix than a proper solution, would expect it to work in
nearly all cases though...
The old factor was too much and the lines could be changed. Anyway, when use simplify the number of points is reduced and the general shape is the same but not as smooth as original stroke.
Also, the simplify is only used in 3D view.
Note: Not sure if we would have to remove this simplify option for annotations.
- Expose the operator in the panel,
(wasn't available in the UI at all).
- Offset frame was hard coded to a color matching the background.
Use the current frame color with dashes instead.
- Overlay toggle had wrong name.
Color banding issues can appear, as result of the 8 bitdepth RGBA that
is used in the viewport.
This change will use `GPU_RGBA16F` for final renderings and for drawing textures. This
allows displaying HDRI textures. Vertex Colors uses `GPU_RGBA16` to resolve
color banding issues. All other modes use `GPU_RGBA8` to reduce
bandwidth and gpu memory.
Reviewed By: fclem, brecht
Differential Revision: https://developer.blender.org/D5179
During generating of a material preview with world lighting only the
copy world was being freed. The material was removed from the main, but
was not freed.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5224
When drawing the selection buffer the camera images were drawn. This
resulted in unneeded extra clicking for the user. This change will
ignore camera images during the selection.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5276
It is now possible to translate this panel. Due to the previous
structure the translation tools were not able to pick the strings up as
translatable strings.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5279
Recently Shader parameter names for UVMaps and vertex colors were renamed.
The sculpt drawing code still used the old parameter names.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5320
This error was introduced with the array dynamic system for very long stroke.
Now, instead to use a custom code for simplify annotations, it uses the standard simplify BKE function more robust and with better results.
The factor of 0.15f has been set fixed after testing a good result value.
Creates a projection matrix for a small region of the viewport.
Reviewers: campbellbarton, brecht
Differential Revision: https://developer.blender.org/D5412
The "alpha lock" check was missing for the smear and soften brush.
Added checks to make sure that the alpha values are kept the same.
Reviewed By: Brecht
Differential Revision: http://developer.blender.org/D5416
This change removes 32 bit support from the helper make.bat scripts
as we are dropping official 32 bit support, you can still build for
32 bit by configuring your build yourself using cmake and pointing
the LIBDIR cmake variable to your own 32 bit library folder.
Code in modifier stack ensuring requested CDLayers are provided was not
working very well for polynors in several cases:
* We cannot share the orig mesh if we have to generate pnors/lnors;
* Generating pnors without lnors was not possible.
Rotation matrix would not get updated every time it would need to, after
own changes to handle 'big' rotations from keyboard input (rBcee484a4c51a3d2).
The issue was caused by a limitation of GetNumaNodeProcessorMask():
on systems with more than 64 processors, this parameter is set to the
processor mask for the node only if the node is in the same processor
group as the calling thread. Otherwise, the parameter is set to zero.
Patch from Max Dmitrichenko, thanks!
This has faster builds, error checks and tests. The number of cmake options
for this type of thing has grown over the years and it's convenient to be
able to point new developers to a single target.
Previously the combination of all these options did not work correctly, now
all tests should pass.
The easiest way to use this is with the make wrapper, for example:
make full developer debug
Or set it manually with CMake:
cmake -C ../blender/build_files/cmake/config/blender_developer.cmake .
Differential Revision: https://developer.blender.org/D5149
It's extremely slow to compile and run, so just disable it unless
WITH_CYCLES_KERNEL_ASAN is manually enabled. For Clang it's always
enabled since that appears to work ok.
This also limits the -fno-sanitize=vptr flag to the Cycles kernel, as it
was added specifically to work around an issue there.
Differential Revision: https://developer.blender.org/D5404
When NULL pointer can be a valid return value, one has to use
`do_versions_find_region_or_null()` instead...
Fixes asserts as reported in rBa2fe386153e.
It's common to select a block of code and comment it
which may already contains some comments.
Now only un-comment blocks which are completely commented
(ignoring white-space).
Makes toggle comments behave more usefully, resolves T68060.
Both eevee_materials.c and workbench_deferred.c include eeve_lut.h which has its arrays marked as static leading to the blue_noise array being embedded into our binary twice.
This change takes the arrays out of the header and properly marks them as const since they are lookup tables and should not be written to.
Reviewers: fclem, brecht
Differential Revision: https://developer.blender.org/D5346
This should have been removed in 2.80 as the functionality was removed.
This feature now does not do anything and can be removed.
Differential Revision: https://developer.blender.org/D5411
It is a very common need to create drivers that set the value of
a property to the value of some other property, but it currently
requires multiple actions: Copy Data Path on the input property,
adding a driver to the output property, selecting the input ID
reference, and pasting the path.
This adds a new Copy As Driver context menu option, which creates
a complete driver in the clipboard that reads the current property,
so all that remains is to paste it to the output property. It is
also possible to paste just the new driver variable into an existing
driver to combine multiple inputs.
Reviewers: brecht, billreynish
Differential Revision: https://developer.blender.org/D5382
Tweak Text Editor to fit better with the rest of Blender 2.8:
- Move sidebar to the right
- Add proper context menu
- Move view toggles to the View menu
- Change the indentation option to be an enum between spaces and tabs
- Several layout tweaks
Patch by @tintwotin / Peter Fog with additional tweaks by me.
Differential Revision https://developer.blender.org/D5028
Reviewers: Brecht, Campbell
Gradient and Color are mutually exclusive, so we now communicate this in the UI much more clearly
Differential Revision: https://developer.blender.org/D5395
Reviewers: brechrt
Added because the current default is too fast
for painting with tablets, see D5385.
Turntable and trackball have different settings because
turn-table uses an angle-per-pixel, where as trackball
values are relative to the view-port size so a scale is used.
The sensitivity is scaled by the pixel size so hi-dpi views don't rotate faster.
Hard coded aspect was used, doubling horizontal input
however this caused sliding for views which didn't match this aspect.
Calculate the aspect based on the view bounds instead.
The partial disabling was causing issues with Clang and ASAN, and it seems we
don't need to restrict it to the kernel anymore now that we are no longer using
boost directly.
Does not make sense in the use-cases of that function, especially since
we don't know whether it is actually due to an error, or some glitch
(like an empty curve).
Think we always want to get a mesh when using either operator
conversion, or the `bpy.data.meshes.new_from_object` function.
Note that an assert was also added to ensure we do try to convert from a
valid 'geometry' object type.
On machines with pdflatex installed, this is run to build Theora.pdf.
Unfortunately this process breaks, at least on my Ubuntu 18.04 LTS
system. By setting `HAVE_PDFLATEX=no` (or any other value that is not
"yes") this can be avoided. I don't think that it's important to have
this PDF file built anyway, as it's not a dependency of Blender itself.
The issue is that wayland seems to impose a generic device naming scheme
when using Xwayland For example any table stylus will show up with the
following naming convention: xwayland-stylus:33
For this to work in blender, I had to modify how the identifier string
is extracted. I also renamed the two char pointers in the search
algorithm to be more logical.
Reviewed By: Brecht
Differential Revision: http://developer.blender.org/D5401
The problem was related to wrong Brush. After using the Eraser or Fill, the default brush was not the drawing one, so the handles were missing.
Now, the operator force the drawing brush.
Reviewer: @campbellbarton
Differential Revision: http://developer.blender.org/D5403
No need to use BKE_object_where_is_calc() in this case: there is no
parenting or constraint system involved on object add.
So simply use direct object matrix calculation from it's local
transform. No need in dependency graph either in this case.
followup to rB8dd95abb2ff9 (which fixed this for the Compositor node),
turns out this was also wrong for the VSE modifier and in vertex color
operator.
- also adjust min/max for VSE modifier
- also guard against division by zero
Reviewers: brecht
Maniphest Tasks: T67808
Differential Revision: https://developer.blender.org/D5398
This commit adds the frame to deformStroke Callback as a preparation for new modifiers that will need this variable.
Actually, the existing modifiers are not using the frame.
`applyResize(...)` considers that `t->values` always represents a `ratio`.
But this is only `true` with the `MOUSEMOVE` event.
The solution proposed is to never change `t->values`.
The result of the final transformation is now written to `t->values_final`.
Reviewers: campbellbarton
Differential Revision: https://developer.blender.org/D5212
While these aren't currently used, its strange to have
extended versions of a function without the non-extended versions
it also avoids callers needing to add them back if they need -
or duplicating the same boiler plate when calling the '_ex' versions.
Reverts 11da3b132a, 11da3b132a, adds depsgraph argument
so the caller is responsible for the evaluation state.
There were several problems in the old random calculation:
* Different result in the viewport and render.
* Noise "pop" in some frames.
* Random number was calculated every time the file was opened, so get different results.
Now, instead to calculate the random numbers when n number of frames changed, the random values are calculated using a unique seed by stroke.
Also, a new Seed parameter has been added and this adds more control in the noise generated. This value can be animated and get more variations.
Differential Revision: http://developer.blender.org/D5393
Meshroom writes two hierarchies to Alembic, one rooted at
`/mvgRoot/mvgCameras` and the other at `/mvgRoot/mvgCamerasUndefined`.
These paths have no schema definition, and thus are ignored by Blender.
The cameras themselves have those schemaless paths as parent, and have
their transforms marked as "inherited", e.g. relative to their parent.
As these cameras have no valid parent, there is no Blender object to use
to convert their local matrices to world matrices, and Blender just
decided to reset them to the unit matrix.
Now "inherited" transforms without a parent in Blender are interpreted
as world transforms. Reparenting those objects to a Blender object will
re-interpret the transforms as local to the parent again.
FFmpeg expects Blender to feed it pixels in the output pixel format. If
the output pixel format is different than Blender's RGBA, a conversion
is needed (via FFmpeg's `sws_scale()` function). There were a few issues
with this conversion (and surrounding code) that are fixed in this
commit:
- When conversion was necessary a temporary buffer was allocated and
deallocated for every frame. This is now allocated once and re-used.
- Copying data to the buffer was done byte-for-byte. On little-endian
machines it is now done line-by-line using `memcpy` for a little speedup.
- The decision whether pixel format conversion is necessary is now
correctly done based on the pixel format Blender is actually using.
- The pixel format of the buffer sent to FFmpeg is no longer hard-coded
incorrectly to a fixed pixel format, but uses the actual output pixel
format. This is fixes T53058 properly, making RGB QTRLE export possible.
- I added some comments to make it clear which pixel format is referred
to (either Blender's internal format or the FFmpeg output format).
Combined these improvements not only correct a bug (T53058) but also
results in approximately 5% speed improvement (tested with a 117-frame
shot from Spring, loaded as PNGs in the VSE, encoding to h.264 with
preset 'realtime').
Reviewed By: brecht, sergey
Differential Revision: https://developer.blender.org/D5174
We no longer build with or support msvc2013, so this hack can be removed.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5298
The problem is that the `glDrawArraysInstancedBaseInstance` is ignoring the last parameter.
The solution is to indicate that `GLEW_ARB_base_instance` is not supported in these cases.
Reviewers: fclem, brecht, jbakker
Reviewed By: fclem, brecht
Differential Revision: https://developer.blender.org/D5383
This adds a space between a value and its short unit name except for foot, inch, degree, arcminute, arcsecond
Differential Revision: https://developer.blender.org/D5051
Reviewed by Brecht Van Lommel
In a test file containing 1300 copies of the same shader, this reduces shader update time from 3.1 sec to 0.05 sec.
Thanks to @swerner for noticing this issue.
Reviewers: brecht, sergey, swerner
Subscribers: swerner
Differential Revision: https://developer.blender.org/D5376
This makes the blender logo menu appear as text if 'Show Menus' is off
Differential Revision: https://developer.blender.org/D5244
Reviewed by Brecht Van Lommel
At least one script writer was upset that this was not specified,
as it is different from "floating point" in Python.
Also, docstring for hard and soft min and max for FloatProperty
was wrong, using sys.float_info.min and sys.float_info.max.
This reverts commit 7761657129.
This commit broke overlapping popovers. For example in the color
management tab it would be impossible to select and of the popover
alternatives as it would switch to the menu button under the cursor.
Was a nice looking invention, but is obviously wrong.
Is likely no function changes, since -false is like -0
which is 0 and which false. And -true is like -<non-zero> which
is non-zero as well.
Spotted by Sybren, thanks!
We would not take into account the user "Zoom Axis" setting in certain
2D space viewports. In addition to this, the "Scale Zoom" didn't work
consistently in these spaces either.
Reviewed By: Brecht
Differential Revision: http://developer.blender.org/D5132
The first issue was that we were still working around a Xorg bug that
has been solved since a very long time:
https://bugs.freedesktop.org/show_bug.cgi?id=22515
The second issue was that the global "confirm on release for mouse
clicks" was used for keyboard shortcuts as well.
This change ensures that operators which needs access to evaluated data
first makes sure there is a dependency graph.
Other accesses to the dependency graph made it more explicit about
whether they just need a valid dependency graph pointer or whether they
expect the graph to be already evaluated.
This replaces OPTYPE_USE_EVAL_DATA which is now removed.
Some general rules about usage of accessors:
- Drawing is expected to happen from a fully evaluated dependency graph.
There is now a function to access it, which will in the future control
that dependency graph is actually evaluated.
This check is not yet done because there are some things to be taken
care about first: for example, post-update hooks might leave scene in
a state where something is still tagged for update.
- All operators which needs to access evaluated state must use
CTX_data_ensure_evaluated_depsgraph().
This function replaces OPTYPE_USE_EVAL_DATA.
The call is generally to be done in the very beginning of the
operator, prior other logic (unless this is some comprehensive
operator which might or might not need access to an evaluated state).
This call is never to be used from a loop.
If some utility function requires evaluated state of dependency graph
the graph is to be passed as an explicit argument. This way it is
clear that no evaluation happens in a loop or something like this.
- All cases which needs to know dependency graph pointer, but which
doesn't want to actually evaluate it can use old-style function
CTX_data_depsgraph_pointer(), assuming that underlying code will
ensure dependency graph is evaluated prior to accessing it.
- The new functions are replacing OPTYPE_USE_EVAL_DATA, so now it is
explicit and local about where dependency graph is being ensured.
This commit also contains some fixes of wrong usage of evaluation
functions on original objects. Ideally should be split out, but in
reality with all the APIs being renamed is quite tricky.
Fixes T67454: Blender crash on rapid undo and select
Speculation here is that sometimes undo and selection operators are
sometimes handled in the same event loop iteration, which leaves
non-evaluated dependency graph.
Fixes T67973: Crash on Fix Deforms operator
Fixes T67902: Crash when undo a loop cut
Reviewers: brecht
Reviewed By: brecht
Subscribers: lichtwerk
Maniphest Tasks: T67454
Differential Revision: https://developer.blender.org/D5343
Unlike `fill_texpaint_slots_recursive`, `rna_Material_active_paint_texture_index_update` did not search for texture nodes that are inside node groups.
Reviewers: sergey, psy-fi, zeddb, brecht
Subscribers: brecht
Differential Revision: https://developer.blender.org/D5338
Previously cmake would silently disable features that depended on
certain x11 libraries if they were not found. Now we instead error out
and inform the user that these are missing but optional.
Reviewed By: Brecht
Differential Revision: http://developer.blender.org/D5380
Spaghetti Transform code can use same code for different kind of data.
The 'stepped rotation' process is actually only useful/doable in a few
cases (when we do have some real place to store rotation value, and we
are using Eulers).
font_to_curve code was not handling properly the case where it has nop
object to check for mat indices validity. Check should just not happen
then, not reset mat indices of chars to default 0 value.
This fixes an incompatibility with Visual Studio 2019 introduced in
631d5026c7. It is likely caused by using
`# ifdef` inside the use of the `ELEM()` macro.
Use explicit boolean flag to indicate whether flush to original data
is needed or not. Makes it possible to avoid confusion on whether an
evaluated or any depsgraph can be passed to the API.
Allows to remove depsgraph from bAnimContext as well.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5379
It was used to access evaluated object and pose and was done prior
to implementation of flushing values back to original data for an
active dependency graph.
Removing the argument allows to simplify API and solve issues with
accessing missing dependency graph on redo.
During viewport rendering where the viewport samples are set to 0 the UI
showed 16777216 as number of samples. We should not show the number of
samples when the number of viewport samples are set to 0.
Differential Revision: https://developer.blender.org/D5301
Simplify preferences by removing the ability to load them from
either the startup.blend or userpref.blend.
Also simplifies updating default preferences by moving
them to a struct definition.
This patch introduces the same presets that are used for proportional editing in the brush falloff menu. The user can select any of these presets or use the regular custom falloff curve. The presets are hardcoded formulas, so the falloff curve is not used when they are active.
This change improves the general feeling of the brushes and it is more convenient and simpler to use. The CUSTOM curve option should now be used in the case that an unusual deformation is needed, in other cases, the hardcoded curve presets should be the default.
The smooth curve presets is a must in the grab brush, as it fixes the deformation issue with the current custom curve setting. The user may try to adjust the deformation by tweaking the curve, but it is nearly impossible to replicate this desired behavior.
{F7636217}
Other brushes that are included in the sculpt branch also rely on this as they need specific hardcoded falloffs to produce the desired effect.
Reviewers: brecht, billreynish
Reviewed By: brecht
Subscribers: JulienKaspar
Differential Revision: https://developer.blender.org/D5367
This function makes it possible to clear/remove/nuke all the geometry in
a mesh, allowing functions like `Mesh.from_python()` to construct a new
mesh in its place. Without this function, code like in T67627 have to
allocate a new Mesh datablock, fill that, and swap out the old Mesh for
the new one. This introduces issues when exporting, as the new mesh
could be seen by an exporter as unrelated to the old one.
Shape keys are not freed by this function. Freeing those would require
tagging the depsgraph for relations update, which is an expensive
operation. They should be removed explicitly if necessary.
Material slots are also not cleared by this function, in the same way
that they are not cleared when manually removing all geometry from a
mesh.
The `BKE_mesh_clear_geometry()` function is available in Python as
`mesh.clear_geometry()`.
Reviewed by: mont29, brecht
Differential Revision: https://developer.blender.org/D5373
This commit adds support for the WebM container. Previously we only
supported the WebM/VP9 video codec, but still required that it was
stored in a Matroska, MP4, or other compatible container format.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5156
The VP9 video codec supports writing alpha values; now this is available
in Blender too.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5156
Simplified `BKE_ffmpeg_alpha_channel_is_supported()` to use `ELEM()`
instead of a row consecutive `if`-statements.
No functional changes.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5156
Occasionally we get reports of people that build blender and end up
with either build errors or end up with builds that do not run on
other systems. The root cause is when you install vpckg and integrate
it into the build system it puts the search path for its includes and
libraries before anything else.
previously we told people to either uninstall vcpkg or remove the
conflicting packages, which was not great.
this change opts out of the use of vcpkg for blender only, so people
can keep using it for other work without issues.
The value of the step was calculated using a variable that was removed when the render frame change.
Now, the step is calculated using the modulus of the current frame and recalculate noise only if the remainder that results from performing integer division is equal to 0.
To calculate current frame, the first used frame is calculated to adjust real frame range.
This approach is more stable in viewport and render.
There was a fixed limit to the number of points available in a buffer stroke.
Now, the array is expanded as needed using a predefined number of points for each expansion, instead to add one by one. This is done to reduce the number of times the memory allocation is required.
As part of the fix, some variables have been renamed to reflect better their use.
When the mesh is using custom normals, those should always be exported,
regardless of the `ME_SMOOTH` flag on the invidivual polys.
Also replaced the loop normal writing with the same logic as we use for
reading (less pointer arithmetic, more normal counting).
Loop normals are called 'Face-varying normals' in Alembic. Before this
commit, the existence of such normals was used to enable smooth shading.
This is incorrect, as the normals could encode flat faces just as well.
This commit adds the loading of these normals as custom loop normals. It
then also enables Auto-Smoothing on the mesh (which is a bit of a
misnomer and indicates to Blender that the custom normals should be
used).
Fixes the glitching described in T65959.
Differential Revision: https://developer.blender.org/D5191
The only thing that is stored in this pointer is a `Mesh*`, and casting
it from/to `void*` is unnecessary and confusing. Maybe the entire
CDStreamConfig class could/should be removed at some point.
No functional changes.
By having a switch statement that lists all the values of the enum, it is
clear which cases we're not handling, and it also allows for warnings in
the future when the enum expands.
No functional changes.
The w-component of the translation column of the scaled matrix wasn't
set to 1.0, which, apart from being incorrect, caused drawing problems.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5290
When using the clone brush, the first time the brush worked, but the next time no. The reasons were two:
1) The strokes were copied to the active layer, but if there were more than one layer, the stroke must be copied to the original layer.
2) The materials were not assigned properly and the materials were set as the first slot in the list always.
Now, the original layer name is used to try to find the same layer in destination. If the layer is missing, the active layer is used.
For materials, the bug in the hash lookup is fixed and the material is assigned to the right slot.
The issue was that the redo panel area would call with region type HUD (not WINDOW).
Now we make sure that the redo panel always polls the operator in the original area type context.
Reviewed By: Brecht
Differential Revision: http://developer.blender.org/D5361
While speedup is hard to detect (highly fluctuent), it seems to be
around 5% on average on my 8 threads machine...
It also remove usage of a 'global' thread lock, which is always good.
Note that I also tried to use proper foreach threaded iterator construct
(see D5372), but that proved to be relatively slower (presumably due to
the very high dissymmetry between tasks, usually during a paint stroke
only a few chunks will require most of the computing effort, overhead of
threaded foreach management is then noticeable).
This concludes (for now) the work on
T51133 Bad performance with texture painting depending on multi-thread settings.
Previously we were setting it to 1 (aka no 'chunking'), to follow
previous behavior. However, this is far from optimal, especially with
CPUs that can have tens of threads nowadays.
Now taking an heuristic approach (inspired from the one already existing
for `BLI_task_parallel_listbase()`, which tries to guesstimate best
chunk sizes based on several factors (amount of threads/parallel tasks,
total number of items, ...).
Think this is a reasonable base ground, more optimization here would of
course be possible.
Note that code that was already explicitely settings some value here
won't be affected at all by that change.
Some ugly very low-level collection code was using the generic
LIB_TAG_DOIT tag... should never happen, that one is for rather
high-level code to use, core process shall use own tags.
This allows to type in numinput 720 and indeed get a rotation of 720°, not 0°...
This patch basically applies 'big rotations' in steps < 180°, such that
compatible rotation works as expected. This implies resetting current
rotation to initial one first, otherwise we'd end up applying much more
turns than expected when that code is called more than once.
It also makes things somewhat slower for big rotations (millions of degrees),
Hence we clamp to 1000 turns max.
And since that's a case that cannot happen with regular tool/widget-driven rotation,
it's only enabled when numinput is used for now.
Review task: https://developer.blender.org/D5289
Curve drawing was attempting to draw reprojection error curve when it was
not visible.
Worst thing is that the imm was not informed about vertices, so the code
was causing an assert in debug mode. Probably, it is also what have caused
random crashes after recent changes.
We didn't include and of the newer interpolation types in the
normalization function.
Besides taking into account these newer types, we now also only evaluate
the curves when needed. If the values between the control points won't
exceed the control point values, we only use the start/end values for
our normalization
Reviewed By: Brecht
Differential Revision: http://developer.blender.org/D5365
Mesh can not be requested from original object, and it can not be
copied into evaluated modifier because there is no such a thing yet.
It can not be done this way now, because getting evaluated object
will force it to re-calculate, which kind of defeats idea of this
code to preserve un-baked particles.
This commit moves the API of selecting faces, vertices and edges to a DRW manager engine.
Reviewers: campbellbarton, fclem
Subscribers: jbakker, brecht
Differential Revision: https://developer.blender.org/D5090
This is useful when popovers are launched from operators
instead of as button popover types.
Where the connection between the button and the popover is useful to keep.
We cannot reliably use translations API from non-main threads.
Now storing translated strings in a static cache, with basic mechanism
to update it on language change.
Reviewers: brecht, campbellbarton
Differential Revision: https://developer.blender.org/D5350
These panels were using the old names, but now they are not grease pencil, but annotations.
Also removed old Tools panel. This must be replaced with new Toolbar
This was caused by 2D stabilization trying to be smart and lower weight
of tracks which are too close to the rotation center. This was causing
algorithm to ignore a single track which was set to constant 1 weight and
used for rotation compensation.
It is quite tricky to quantify this change without having comprehensive
regression suit, so can only hope that initial intention is still working
as expected.
Weight Painting was using mask if "Selection Mask" in Sculpt Mode is turned on.
This can be quite confusing because the option to turn it off is not available in Weight Painting and the selection is also not visible.
Now the mask is not checked in weight paint mode.
The constant variable was passed as reference to constant variable, but it's better use the new function to copy values.
This could be the problem with T67772
Sync back between proxy armature pose and linked one was not properly
clearing the posebone runtime data, ending up with shared memory between
both (direct cause of reported crash), and probably some other nasty
issues.
While this crash is not critical in itself, I would suggest to add this
fix to 2.80 branch, as it is super-safe and simple, and is probably
fixing some other un-reported issues?
Some modifier operators cannot be reliably executed from Edit mode
currently, so disable them from the generic mod ops pool function.
Have been very conservative here from now, keeping existing behavior
most of the time, and only forbidding Edit mode when code was already
doing it in its own way, or when it was obviously not possible.
Main issue in that report was that meshes generated from
`mesh_create_eval_final_view()` and the like need some
special freeing handling (as, among other things, they borrow and do not
own their potential editmesh data...).
Factorized that into a helper func also used by
`BKE_object_free_derived_caches()`.
Such reload can no longer happen directly and is to be done via dependency
graph.
Eventually, the movie cache will become shared across all copies of the
clip, but even then we still need to have dependency graph mechanism because
we need to update FFmpeg animation handle (which can not be shared across
the copies).
Using this API, all new tools for the sculpt branch should work with
both mesh and bmesh. I also ported mask by normal, mask expand and the
transform operator (with its mesh filter cache) in order to test it
This change makes it so current frame is queried from a scene rather
than from a dependency graph. This makes it possible to avoid the
fact that dependency graph might not be fully evaluated yet.
There are still some cases where it frame is queried from the graph,
but those seems to be in a code path where we need to ensure valid
dependency graph anyway.
Reviewers: brecht
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5349
The issue was caused by dependency graph always ignoring animation
update when it is first time constructed. This was a way to make it
preserve unkeyed changes on undo/redo. This, however, made it so
changes of animation data itself (such as deleting/moving keyframes)
did not trigger animation update by the dependency graph.
This worked prior to copy-on-write because animation recalc flags
were stored in the DNA and never re-set on file/undo load. This was
giving dependency graph a clue that animation is to be re-evaluated
when operator explicitly asked to (more precisely, when such operator
was undone/redone).
This change makes it so original ID's recalc flags are storing
recalc flags when ID is tagged for update as an response to user
input. This way re-building dependency graph can force animation
to be updated on redo.
Tricky part here is that ID's recalc flag is no longer to be zeroed
when loading undo step (which is the same as reading .blend file).
This is something what works differently comparing to legacy
dependency graph, which was zeroing object's recalc flags there but
not animation data's recalc flags.
Shouldn't be causing issues, since unkeyed changes are not preserved
upon opening a file anyway, at least to my knowledge.
Related reports which are to be taken into account and verified
they are not re-introduced when making changes in the area:
- T63111: Auto-Bake stuck at constant re-rendering
- T54296: Cycles viewport render stuck on constant re-render
Reviewers: campbellbarton, brecht
Reviewed By: campbellbarton, brecht
Maniphest Tasks: T66325
Differential Revision: https://developer.blender.org/D5316
The amount of triangles drawn by the button depends on its `sizex`.
See:
```
immBegin(GPU_PRIM_TRI_STRIP, (sizex + 1) * 2);
```
Therefore the `sizex` cannot be 0.
Solution a bit similar to rB56b0cd1d.
Ref T67671
Reviewers: fclem, brecht
Maniphest Tasks: T67671
Differential Revision: https://developer.blender.org/D5347
Current frame is stored in a scene, and scene might have multiple view
layers. The inactive view layers were not informed about scene's frame
being changed, so when user switched back to view after changing scene
frame it was in an inconsistent state between current scene frame and
animation.
Now we tag scene for time changes, so dependency graph can catch up
and do proper update.
Currently tagging is from quite generic place. Probably better approach
would be to tag from where frame is actually being assigned. Downside
of this is that it's easy to miss some places.
Reviewers: brecht, mont29
Reviewed By: brecht
Maniphest Tasks: T66378
Differential Revision: https://developer.blender.org/D5332
Need to copy changes from original armature to evaluated one prior to
BKE_pose_where_is(), otherwise the pose matrix in pose channels will
not be correct.
Can not use dependency graph update here, since we must not re-evaluate
possible dependencies of the changed armature.
Reviewers: brecht
Reviewed By: brecht
Maniphest Tasks: T67507
Differential Revision: https://developer.blender.org/D5331
Before this the message could be too generic which was simply saying
that console is to be checked. This isn't very useful in cases when
we know that reconstruction is failed because of lack of good keyframes
or failure of initial reconstruction if there is no enough parallax
on the selected keyframes.
The code was missing some checks for whether keyframe selection
went successfully and whether reconstruction has been successfully
initialized.
The interface still gives quite generic message, with the details
printed to the console. This can be addressed separately.
The environment variable to locate system data-files was
ignored by toolbar icons.
Add bpy.utils.system_resource
to match Blender's internal data-file access.
Correct fix that doesn't cause T67217.
Temporarily removing the excluded undo step broke memfile-undo
since freeing the undo steps needs to access other steps in
the list to merge shared chunks, see: memfile_undosys_step_free.
Pass the exclude step as an argument instead.
Some external tools seem to have issues with the definition
of Collada <transparency> - a float value in range (0,1).
However it is possible to use the <transparent> color as a container
for the <transparency> value. This seems to be a more reliable
method to export transparency values from Blender PBSDF Shaders.
The relevant documentation is in the collada 1.14 reference manual,
page 7-5 about the usage of transparent and transparency.
This fix makes export and import of the <transparency>
and <transparent> values more convenient and more reliable.
Reviewers: brecht, jesterking
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D5305
We need a final subversion bump before release in case there are
remaining 'unversioned' code in our versionning callbacks...
Should have been done before first RC actually. ;)
To be ported to 2.80 release branch.
When apply the modifier a new material is created, but it was assigned wrongly. The problem was the index was base 0 already, so subtract 1, got a wrong value.
The options of the material are from object material not pinned material.
If the brush is pinned, the material must be the brush material and not the object material.
Work in progress
- Geometry generation code is only for testing the operator. It will triangulate any
generated ngon and the normal calculation can fail.
- Snapping options are not integrated with scene settings
- Gird alignment is forced to global X axis. This can cause problems
with rotated objects.
- The tool only works from object mode. It crashes in other modes.
- Some internal grid default values are not set up properly and can make
the operator crash
- The grid preview is not integrated with the gizmo system, you need to
start the operator in order to see it
This makes all color blend modes available from the paint mode dropdown.
Source alpha is currently hardcoded to 1 to avoid confusion. The
viewport can't display it properly.
I added this multiplication to fix the pressure sensitivity of my broken
wacom pen while testing the paint brush. I should add separate sculpt
and paint strength factors.
Currently the operator extracts a triangulated mesh from the mask and
applies a solidify modifier.
I would like to avoid using a shrinkwrap or duplicating the sculpt to
create the external edge loop. I think it should be possible to do
something similar to the relax brush to shrink the geometry to fit the
external loop within the mask.
This operator is designed to use with the transform.rotate tool to
create a pose tool. It generates a mask from the active vertex,
following the topology of the mesh.
The operator has two modes. It can expand the mask to the vertex under
the cursor or to a certain number of iterations. All the iterations are
cached when the operator is invoked, so it should be usable with high
poly meshes.
I also included some hardcoded mask operations when the operator
finishes. In the future, this could be included as an operator macro if
it does not have a significant performance penalty (like redrawing all
nodes each time a new operator is invoked).
It does not support symmetry and it only works with meshes (no dyntopo
or multires).
I also fixed some bugs in the transform code that were breaking EEVEE
compatibility. Undo system still fails sometimes.
The funcionality should be the same as the dirty vertex colors operator.
This filter can be used to generate cavity mask for sculpting and
painting. I also added a contrast filter to control the cavity mask.
The contrast filter can be implemented with a real time preview in a
future version instead of incrementing the contrast with fixed steps.
This tool allows the manipulation of all the colors stored in the
vertices at once. Behavior and implementation are similar to the mesh
filter tool. Sculpt vertex colors are not connected to the renderer, so
the viewport does not update when EEVEE/Cycles is enabled.
I also added some separators to the toolbar to separate brushes from
filters.
Now it is possible to test the operator without editing the keymap.
By changing the iterations of the filter it should be possible to avoid
adding an unnecessary amount of undo steps when working with high poly
meshes.
Work in progress...
- Scaling and orientations are not implemented yet.
- The "move pivot only" option is ignored when the tool is used from the
gizmo.
- Only meshes, no multires or dyntopo.
This commit also includes the operator to set the pivot point position
automatically as well as a refactor of the mesh filter cache to be shared
with the transform tool.
This should improve performance a lot, making the tool usable on several
millions of vertices. If the mesh is partially masked, only the unmasked
nodes are going to be processed, so it is possible to isolate parts of a
high poly mesh using the mask and work with them in real time.
I also changed the random displacement initialization to avoid
allocating a huge amount of memory (it wasn't really necessary)
The mesh filter tool now manages its own orco cache, so there is no need
for a global orco mode using the pbvh proxies. The tool should be much
faster than before.
The code for the relax mesh filter is there, but it is disabled in the
interface until the algorithm is finished.
Work in progress. This still has a lot of bugs and I'm not sure if this
approach is the best for this kind of smoothing. The current
implementation can't handle poles with 5 vertices or more, so it doesn't
work properly with the result of the voxel remesher. It does not support
multires.
Also, I'm using gsets to store the smoothing groups. I'm sure that there
is a better way to do it. If for some reason someone enters sculpt mode
and touches a pole with 30 vertices it should not crash, but it adds an
unnecessary overhead when working with properly constructed quad meshes.
Quick hack to compute the stroke step using the world space location of
the brush over the mesh instead of the screen space distance, so the
user can avoid a lot of artifacts when sculpting across curved surfaces.
This would need to be implemented for texture/vertex/weight paint in the
future to keep the stroke system consistent.
It still has some problems with brushes that use original coordinates.
This is an experimental operator that can be used to generate mask for
faces in hard surface sculpts. It does not have UI and without undo
support the behaviour is unpredictable, but this code can be used to add
another automasking mode to the automasking system.
This new version should allow us to stack multiple automasking
operations in one brush. The UI still needs to be done for supporting
that.
This is still a binary mask, it does not have falloff, but now the code
was done with that in mind.
If enabled, the modifier will be continously invoked, as usual. If disabled,
it will return the last automatically cached mesh, so basically the remesh
is "frozen", but still nondestructive / not applied yet.
Note, doesnt work yet in sculpt mode. There you may still need to apply
the modifier to update the base mesh. Or you can disable the modifier in
the stack to work on the base mesh, too. A third alternative is having
live remesh enabled with the modifier enabled, but this will cost some
sculpting performance and works at the moment only in material and rendered
mode.
This tool applies a deformation to all vertices in the sculpt taking the
mask into account. It is useful for creating surface detail or hard
surface sculpts. It is also the base for the implementation of the
transform tool.
Notes:
- The smooth filter needs multiple iterations. Right now it only applies
one iteration per tool action, so it is unusable in most cases. I don't
know if adding this is possible with the current smooth code while
supporting real-time preview.
- I'm not sure if it is properly integrated with the tool system and the
keymap (probably not).
- Only works with mesh, no dyntopo or multires.
- It still needs to ignore nodes with all vertices fully masked. Adding
this basic optimization will increase performance a lot when working
with high-resolution meshes.
- Previewing the deformation in real time is not the best option for
performance, I could add an operator that applies the filter without
preview.
This adds a new CustomDataLayer to store per vertex color data in a way
that can be used from sculpt mode. This vertex paint mode uses the same
brush, pbvh, undo and rendering code as sculpt mode, so it has much
better performance. It also enables other features like sculpting and
painting at the same time.
I also added some extra features that are needed to start testing this
paint mode, such as:
- New paint brush optimized for painting. It doesn't modify any vertex
position data.
- Sculpt mode sample color operator that uses the active vertex from the
cursor
- Remesh reprojection support: sculpt vertex colors are reprojected into
the new mesh when using the remesh operator if the mesh has that option
enabled.
- Store and load sculpt vertex colors into the regular vertex color
layers to keep compatibility.
- Use the single color display mode to disable sculpt vertex colors in
sculpt mode.
A lot of decisions needs to be made to integrate this in Blender, so I
decided to keep the implementation as unintrusive as possible to start
working on the tools. This has the following limitations:
- Sculpt and paint at the same time is only enabled in the draw brush.
You need to set the Color Mode to Mix in the brush options.
- Dyntopo and multires modes and viewport display are broken
- Only mix as a color blend mode
- No brush texture support
- Sculpt and color share the same strength
- Limited to one layer per object
- No rendering support. You will need to copy the sculpt vertex colors
to the old color layers first.
All of these issues should be addressed once the main workflow, final UI
and behavior are decided.
The voxel remesher needs OpenVDB to work. Maybe I should add an option
to disable building the voxel remesher in the future.
Patch by Jun Mizutani (@jmztn).
I think the crash was related to the new viewport navigation. I'm not
sure if this is the correct way to fix this, but now vertex and weight
paint are working again.
This implements the same concept of 2D viewport panning but for zooming.
It prevents unexpected zoom speeds when working with a pen tablet.
Zoom speed is constant and it is based on the initial distance to the
working area. Speed parameters are hardcoded for now, but they can be
exposed as options or replaced by a variable zoom speed.
I also reduced the rotation speed when 2D viewport panning is enabled
for consistency.
This navigation mode is enabled by activating 2D viewport panning in the
navigation preferences. That option should be renamed in the future.
Enabling and disabling perspective is broken most of the time, but it
also happens in master. I'm not sure if these changes are making the
problem worse.
This commit adds a general automasking system and the topology
automasking option (not topology falloff, that can be added later). It
should be faster and with fewer memory errors that the last version I
made. It is designed to work with every brush and every stroke mode, but
for now, I only added support for draw and grab to avoid changing every
brush until the system is more polished.
The main purpose of adding this in such an early stage of development is
to check if the cursor is working correctly. The purpose of the vertex
preview in the cursor was to show the active vertex for automasking, so
now I can test if the whole system is behaving as it should.
Limitations:
- Only meshes for now (no dyntopo or multires). I still need to think
about what to do with dyntopo. I don't know if brushes that generate new
topology are going to work with this.
- It only stores a binary mask (a vertex can be active or not). This
could be changed if the future to support topological falloff or other
more complex types of automasking.
- As it is now, brushes that use stroke space update the active vertex
dynamically, setting it to the closest vertex to the brush location each
sample. This often causes masking errors with small brushes. I'm
considering changing it to always check topology using the initial
active vertex, but it is going to be much slower.
When sculpting, I always found that the behavior of the current curve
falloff system is not correct, so I added the same curves that
proportional editing uses to the brush falloff calculation. Now, curves
are easier to set up and they produce a much better result. You can
easily compare it against the old method by changing the curve preset
option from custom to smooth in the grab brush.
To make the new dam brush behave correctly, you need to select the
sharper curve preset. You can also use it to insert shapes using the
stroke anchored option and changing the curve preset.
I tested several UI integrations:
-Running the remesher from an operator and adjusting the parameters with
the redo panel freezes the interface with high-res meshes. It looks
cool, but it is not that useful.
-Integrating it into a tool does not store per object remesh
configurations. It also forces the user to switch the tool when he/she is
sculpting just to recalculate the topology.
Storing the remesher options per mesh is the best option I found. Now,
the remesher is found in the properties panel under the mesh tab. The
user can assign it to the quick favorites menu or add a keyboard
shortcut.
Remesher parameters can be adjusted there. They are stored per mesh.
This way, remesher parameters of each mesh are preserved when sculpting
different objects at different levels of details. In the future, the user
will be able to choose different remeshing algorithms (triangulation,
quadriflow...) from there and assign them to the mesh. All of them will
be executed by the same remesh operator and some of them will share some
options (like smooth normals).
Only undo for now, no redo.
This will need a lot of work and refactoring in the future (it has a lot
of bugs), but now it is safer to test new features without losing work.
The purpose of this brush is to create sharp edges without creasing or
pinching the geometry. It is useful when sculpting cloth wrinkles, hard
surface objects or small cavities.
To avoid artifacts, set the stroke spacing to a lower value than 10 and
enable symmetry feather. This affects performance, so I am not adding it
to the defaults for now.
It does not create new geometry in dyntopo, so you will need to create
the geometry with another tool or switch to the voxel remesher workflow.
I'm not quite happy with the deformation as it is now (maybe it is too
smooth). I also need to try the brush with different pen tablets to
properly calibrate the pressure.
This introduces a new workflow for sculpting. The voxel remesher works
with Dyntopo disabled. The user needs to run it manually once he/she
considers that the topology is too stretched to continue sculpting
normally. OpenVDB evaluates the mesh volume as a level set with a given
voxel size and it always outputs an all quads manifold mesh. It
automatically solves self-intersections and geometry errors produced by
booleans, which Dyntopo can't solve right now. Once the new mesh is
calculated, the user can continue sculpting without the overhead of
having Dyntopo enabled.
It still needs a proper UI and it has some issues. Undo is not working
on a remeshed object.
For now, this ignores the brush curve. The brush curve does't make sense
in some brushes and in other ones it should be optional (like in the
grab brush). This needs design to integrate with the UI.
The brush cursor is disabled when manipulating the viewport, so you
would not have any mouse feedback if the mouse cursor is completely
disabled. This also displays the cursor position without relying on
internal brush updates when the stroke is active.
This option helps to keep the working area under control when working
with brushes, especially if this feature is used with rotate around
selection enabled. Now, panning speed does not depend on zoom level and
it behaves more similarly to a 2D environment.
The option certainly needs a better name and description, and it could
be a good idea to hide and disable it if rotate around selection is
disabled.
Mode info: D3931
COMMAND${CMAKE_COMMAND}-Ecopy"${PYTHON_OUTPUTDIR}/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib"${BUILD_DIR}/python/src/external_python/run/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib#missing postfix on purpose, distutils is not expecting it
COMMAND${CMAKE_COMMAND}-Ecopy"${PYTHON_OUTPUTDIR}/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib"${BUILD_DIR}/python/src/external_python/run/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib#other things like numpy still want it though.
message(FATAL_ERROR"32 bit compiler detected, blender no longer provides pre-build libraries for 32 bit windows, please set the LIBDIR cmake variable to your own library folder")
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.