Commit Graph

105416 Commits

Author SHA1 Message Date
Brecht Van Lommel
eaede06456 Fix: crash with sequencer scene strips after previous refactor 2023-12-17 21:07:33 +01:00
Richard Antalik
3d03dbfa4c Cleanup: VSE strips update callback
Split the code, use preconditions, use rather plain language for
function names and add comments where it is not totally obvious, what
the code is supposed to do.
2023-12-17 18:36:54 +01:00
Brecht Van Lommel
84591ac1a7 Cleanup: make format 2023-12-17 16:18:21 +01:00
Jacques Lucke
e1d0d70911 Geometry Nodes: refactor storage for socket values
This refactors `SocketValueVariant` with the following goals in mind:
* Support type erasure so that not all users of `SocketValueVariant` have
  to know about all the types sockets can have.
* Move towards supporting "rainbow sockets" which are sockets whoose
  type is only known at run-time.
* Reduce complexity when dealing with socket values in general. Previously,
  one had to use `SocketValueVariantCPPType` a lot to manage uninitialized
  memory. This is better abstracted away now.

One related change that I had to do that I didn't see coming at first was that
I had to refactor `set_default_remaining_outputs` because now the default value
of a `SocketValueVariant` would not contain any value. Previously, it was
initialized the zero-value of the template parameter. Similarly, I had to change
how implicit conversions are created, because comparing the `CPPType` of linked
sockets was not enough anymore to determine if a conversion is necessary.

We could potentially use `SocketValueVariant` for the remaining socket types in the
future as well. Not entirely sure if that helps yet. `SocketValueVariant` can easily be
adapted to make that work though. That would also justify the name
"SocketValueVariant" better.

Pull Request: https://projects.blender.org/blender/blender/pulls/116231
2023-12-17 14:00:07 +01:00
Habib Gahbiche
80ab3338df Compositor: Unify relative translate behavior with realtime compositor
"Relative" in translation means relative to input size and not render size, as described in the user manual.

Pull Request: https://projects.blender.org/blender/blender/pulls/115947
2023-12-17 12:52:00 +01:00
Campbell Barton
d2ba632b89 Cleanup: odd line wrapping for doc-string
Caused by C++ migration.
2023-12-17 20:26:33 +11:00
Campbell Barton
950334a02c Cleanup: remove duplicate null check in blf_search_by_mem_name 2023-12-17 16:43:18 +11:00
Campbell Barton
4d965615fc Cleanup: various C++ changes (use ELEM & string copy macros) 2023-12-17 16:25:10 +11:00
Campbell Barton
2b3c379850 Cleanup: use boolean & nullptr literals 2023-12-17 16:04:44 +11:00
Campbell Barton
240b159918 Cleanup: remove unused defines 2023-12-17 16:04:42 +11:00
Campbell Barton
53a51d2148 Cleanup: use color after doxygen parameters 2023-12-17 16:04:40 +11:00
Campbell Barton
225fc6fca7 Cleanup: spelling in comments, correct outdated comment 2023-12-17 16:04:38 +11:00
Campbell Barton
50f929c384 Cleanup: correct struct member comment name
Part of !115011, the underlying member wasn't renamed.
2023-12-17 16:04:36 +11:00
Campbell Barton
4fc553191b Cleanup: quite unused variable warning with CMake 2023-12-17 16:04:34 +11:00
Campbell Barton
6accd8503e Cleanup: format 2023-12-17 16:04:33 +11:00
Hans Goudey
7c423682bc Cleanup: Remove unnecessary namespace specification 2023-12-16 12:54:31 -05:00
Hans Goudey
f5adfa6acd Fix: New generic attributes uninitialized after curves draw tool
Add a utility to set attribute values to their default, use it in a few
places that have already done this samething. Also:
- Don't create resolution or cyclic attributes unnecessarily
- Use API function to set new curve's type
- Always create the new selection on the curve domain
- Remove selection before resize to avoid unnecessary work
2023-12-16 12:52:22 -05:00
Hans Goudey
0e8c874166 Curves: Add edit mode tilt control
Adds support for the tilt transform operator and a "Clear Tilt"
operator to mirror the functionality from the legacy curve type.
2023-12-16 12:08:28 -05:00
Hans Goudey
3ddba82716 Cleanup: Remove unused PBVH node pointer
Removed in 47f46637be.
Also remove a lost comment and unused forward declarations.
2023-12-16 11:16:10 -05:00
Hans Goudey
488de130b3 Cleanup: Use FunctionRef for PBVH callbacks 2023-12-16 11:14:25 -05:00
Hans Goudey
3d82c9c239 Cleanup: Move more PBVH code to C++ namespaces
Also remove redundant parts of function names.
2023-12-15 22:51:10 -05:00
Hans Goudey
912c4c60d8 Mesh: Add viewport normals simplify option
Before #108014, toggling "Auto Smooth" was an easy way to disable
evaluation of custom normals and face corner normals for faster
viewport playback performance. Now that corner normals are calculated
automatically as necessary, it's helpful to still have a way to disable
expensive normal computation for faster playback.

This commit adds a "Normals" scene simplify setting. To avoid a bunch
of complexity, it just influences which normals are requested from the
object by viewport rendering. In my tests, skipping calculating at
least doubled viewport FPS in a few test files with a large mesh with
custom normals. This works well because normals are cached and lazily
calculated.

Pull Request: https://projects.blender.org/blender/blender/pulls/113975
2023-12-16 00:18:41 +01:00
Brecht Van Lommel
bf97dc14ba Cleanup: make format 2023-12-16 00:02:52 +01:00
Michael B Johnson
5edda6cbcc USD: optionally author subdivision schema on export
USD: optionally author subdivision schema on export

This PR adds support for exporting USD assets which have the subdivision
schema applied. Current behavior prior to this PR is that the effects of
Subdivision Surface modifiers are always applied to their mesh prior to
export, such that it is not possible to recover the original base mesh.

In this PR we provide three options for the subdiv schema type:

Ignore - Export base mesh without subdivision with USD Scheme = None
Tessellate - Export subdivided mesh with USD Scheme = None
Best Match (default) - Export base mesh with USD Scheme = Catmull-Clark

"Best Match" here means that Blender will set a subdiv scheme type in
the exported USD asset when it is possible to closely match the
subdivision surface type that was authored in Blender. At this time
Blender provides two subdivision types: Catmull-Clark and Simple.

Because Simple does not have a corresponding subdivision type in USD, we
do not attempt to convert or represent it, and instead the Simple subdiv
modifier will be evaluated and applied to the mesh during export.

Whenever a Catmull-Clark Subdivision Surface modifier is applied to an
object, and is the last modifier in the stack, it is possible to set the
subdiv scheme to Catmull-Clark for the respective prim in the exported
USD file.

Authored by Apple: Matt McLin

Co-authored-by: Matt McLin <mmclin@apple.com>
Co-authored-by: Brecht Van Lommel <brecht@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/113267
2023-12-15 21:11:41 +01:00
Richard Antalik
9f0b4344ac Fix #114630: Retiming fails if movie and scene FPS does not match
The main problem is, that retiming key frame index is defined in strip
content space (0 <> seq->len -1), but API functions must rescale this
index by applying `SEQ_time_media_playback_rate_factor_get()` and return
value in timeline space.

This wasn't done properly, in many places, some had challenges:
- `SEQ_retiming_key_timeline_frame_get()` returned floats, but UI
  expects integers. Otherwise keys may be drawn inbetween frames.
- Function `right_fake_key_frame_get()` must return  exact frame of
  keys, otherwise lookup by frame would fail. But `retime_key_draw()`
  can not compensate position of last fake key, so this has to be done
  in `fake_keys_draw()` and `try_to_realize_virtual_key()`.
- For transformation to work as expected, double precision value has
  to be used for frame index.
- For UI either API would had to be extended to provide helper functions
  to deal with FPS mismatch, or it needs to know the FPS difference.
  I have opted to put `SEQ_time_media_playback_rate_factor_get()` in
  "public" headers. Neither solution is great.
2023-12-15 21:01:44 +01:00
Aras Pranckevicius
5eb5712329 ffmpeg: restore compatibility with pre-5.0 versions
Only do threaded sws_scale_frame when using ffmpeg 5.0 or later.
On earlier versions continue using the single threaded path.

Pull Request: https://projects.blender.org/blender/blender/pulls/116226
2023-12-15 19:29:57 +01:00
Bastien Montagne
13148cdf39 Fix: (studio-reported) crash in Solidify Modifier code.
Regression from b52a071e7a, mistakenly replaced the destination by the
source mesh for some data (like face material indices attribute).
2023-12-15 18:15:39 +01:00
Hans Goudey
3fb6397b79 Cleanup: Remove extern "C" from mesh C header
We're in a strange half-transitioned state with this header.
In the meantime, removing this helps simplify some refactors.
2023-12-15 10:35:06 -05:00
Christoph Lendenfeld
3b1fd5d965 Cleanup: remove unused variable
The variable was missed in a previous
refactor commit.
2023-12-15 16:00:01 +01:00
Christoph Lendenfeld
6cb2ad7b39 Refactor: extract code from ANIM_apply_keyingset
No functional changes.

Extracting the section inside the `LISTBASE_FOREACH`
that inserts keyframes based on a `KS_Path`.
This moves variables closer to where they are used and
will allow to simplify the code later.

This also improves variable names by spelling out
the words instead of using abbreviations.
e.g. `ks` -> `keying_set`

Pull Request: https://projects.blender.org/blender/blender/pulls/116224
2023-12-15 15:53:35 +01:00
Philipp Oeser
ff7b8f3412 Fix #116188: Symmetry breaks the Puff hair sculpting tool
Caused by 1b19f62917 .

Above commit didnt max the weight for each curve for each symmetry run
(so was just using the max it found for each run, overwriting the
previous run).

Pull Request: https://projects.blender.org/blender/blender/pulls/116221
2023-12-15 15:46:38 +01:00
Campbell Barton
9097f1c62d Cleanup: unhyphenate track-pad & thumb-stick
Both are typically written without hyphenation, add to local dictionary.
2023-12-15 22:57:34 +11:00
Aras Pranckevicius
422dd9404f ffmpeg: multithreaded conversion from RGBA into encoding format
Whenever movie frame encoding needs to be in non-RGBA format (pretty much
always, e.g. H.264 uses YUV etc.), the ffmpeg code has been using
sws_scale() since 2007. But that one is completely single threaded.

It can be multi-threaded by passing "threads" option to SwsContext
(in a cumbersome way), combined with sws_scale_frame API. Which however
requires frame data buffers to be allocated via AVBuffer machinery.

Rendering a 300-frame part of Sprite Fright Edit (target H.264 Medium):

- Windows Ryzen 5950X: 16.1 -> 12.0 seconds (generate_video_frame part
  4.7 -> 0.7 sec).
- Mac M1 Max: 13.1 -> 12.5 sec. Speedup is smaller, but comparatively,
  entirely other part of movie rendering (audio resampling inside audaspace)
  is way more expensive compared to the windows machine.
2023-12-15 12:35:59 +01:00
Antonio Vazquez
926854ddc4 GPv3: Material Render Preview
This adds support for material previews for GPv3.

Pull Request: https://projects.blender.org/blender/blender/pulls/115985
2023-12-15 11:50:48 +01:00
Bastien Montagne
c23b51d614 Fix #116193: Assert on selecting object in outliner.
The asserts added in b840ba1f59 revealed the bug, which was passing the
wrong Scene pointer to `BKE_view_layer_synced_ensure` in affected code.

Issue likely introduced in 68589a31eb, was probably never actually a
crash-case because the viewlayer would always be in sync already when
this was called from the Outliner (besides perhaps some extremely rare
edge cases).

To be backported to potential bugfix release of 4.0 together with
b840ba1f59 commit.
2023-12-15 10:36:44 +01:00
Lukas Tönne
92cf9dd2f2 ID properties: Support enum values with items
Add support for enum values in ID properties.

This is needed for the "Menu Switch" node implementation (#113445) which
relies on ID properties for the top-level modifier UI.

Enums items can optionally be added to the UI data of integer
properties. Each property stores a full set of the enum items to keep
things simple.

Enum items can be added to properties using the `id_properties_ui`
function in the python API. A detailed example can be found in the
`bl_pyapi_idprop.py` test.

There is currently no support yet for editing enum items through the UI.
This is because the "Edit Property" feature is implemented entirely
through a single operator (`WM_OT_properties_edit`) and its properties.
Buttons to add/remove/move items would be operators changing another
operator's properties. A refactor of the custom properties UI is likely
required to make this work.

Pull Request: https://projects.blender.org/blender/blender/pulls/114362
2023-12-15 10:20:44 +01:00
Campbell Barton
7346727cfc Fix #116215: Sequencer crashes unlinking packed text
[0] caused a regression looking up fonts by filepath.

[0]: d770fd5ac4
2023-12-15 20:13:40 +11:00
Hans Goudey
c8aecac001 Cleanup: Remove unused sculpt code
Remove abstract edge and face types. The design is to not abstract away
the code data structures like this and focus on sharing code more with the
rest of Blender rather than within sculpt mode.
2023-12-14 18:25:20 -05:00
Hans Goudey
b3aca5b28f Cleanup: Simplify PBVH build process slightly
Before this happened as two steps: first allocating the PBVH with a type,
then calculating the BVH and filling it with data. This just confused things,
so change to allocating the struct when building it. Also move the functions
to the C++ namespace, and fix some cases of requiring the PBVH to be set
when it wasn't yet.
2023-12-14 18:20:46 -05:00
Harley Acheson
8c6898c04d Fix #116135: Ensure blf_font_width_to_rstrlen always works
If the string is shorter than the cut-off length, ensure we always
exit cleanly when we iterate to the very start of the string.

Pull Request: https://projects.blender.org/blender/blender/pulls/116208
2023-12-14 23:19:08 +01:00
Hans Goudey
87e8a282bc Fix: PBVH has face sets check ignored for BMesh 2023-12-14 15:41:02 -05:00
Hans Goudey
4c1f766d0d Cleanup: Remove unnecessary PBVH threading settings function
There were just two more places using the C threading API in sculpt code.
Switch them to the C++ API and remove the settings function.
2023-12-14 15:39:33 -05:00
Hans Goudey
ce4ec6d42b Cleanup: Tweak PBVH node face indices functions, add comments 2023-12-14 15:31:12 -05:00
Hans Goudey
71b6f0ecbe Cleanup: Pass vertex update array as argument when building PBVH
To prepare for potentially not storing this array in the PBVH.
2023-12-14 15:13:52 -05:00
Hans Goudey
1d94003660 Cleanup: Remove unnecessary sculpt visibility update
Mainly for semantic reasoning-- these face set gestures don't change visibility.
2023-12-14 15:06:08 -05:00
Hans Goudey
f15bca64f2 Cleanup: Remove useless PBVH update function
This `update_vertex_data` only found nodes with the color update
tag and also added redraw tags. But whenever nodes are marked
for a color update, those redraw tags are already set anyway.
It appears this was meant to solve problems switching active
color attributes during undo and redo, but it doesn't make a
difference when this function is removed.
2023-12-14 15:01:27 -05:00
Hans Goudey
262572a6a0 Cleanup: Move PBVH update functions to C++ namespace 2023-12-14 14:56:25 -05:00
Hans Goudey
5be9a1cce4 Cleanup: Slightly simplify some loops in delaunary triangulation
Use a local variable for the faces, use range based for loops.
2023-12-14 12:40:46 -05:00
Hans Goudey
34bf1f6c0c Cleanup: Slightly simplify delaunay triangulation input gathering
Separate allocation of input arrays and assignment to input class.
The main purpose is to simplify #111061.
2023-12-14 12:40:46 -05:00
Hans Goudey
bb2a289a9a Cleanup: Use utility function to calculate face normal
Rather than inlining all the logic into OBJ export code
2023-12-14 12:40:46 -05:00