Commit Graph

101188 Commits

Author SHA1 Message Date
Campbell Barton
043d23e9c6 Cleanup: spelling of variable name 2023-07-09 20:51:51 +10:00
Campbell Barton
7bc806ff25 Cleanup: use BKE_action prefix, return typed enum
Use eAction_TransformFlags typed return value.
2023-07-09 18:23:53 +10:00
Campbell Barton
2f2facef74 Cleanup: use BKE_action prefix, position return arguments last
- BKE_action_frame_range_get  (was BKE_action_get_frame_range)
- BKE_action_frame_range_calc (was calc_action_range)
- BKE_action_has_motion       (was action_has_motion)
2023-07-09 18:17:58 +10:00
Kévin Dietrich
b183e3ae89 Cleanup: Alembic, use a structure to hold interpolation settings
The Alembic importer can optionnaly interpolate vertex and matrix data.
To detect if two samples can be interpolated `get_weight_and_index`
needs to be called which output the interpolation weight and the indices
for the floor and ceil samples separately. Either the weight or the
indices could be used to determine if interpolation was needed.

This adds a `SampleInterpolationSettings` structure to hold the weight
and indices together so we don't need to manage multiple local
variables, and replaces `get_weight_and_index` with
`get_sample_interpolation_settings` which returns either a
`SampleInterpolationSettings` or nothing if no interpolation is
necessary.

This also modifies `AbcMeshData` to have an optional
`SampleInterpolationSettings` and removes members used for interpolation
from `CDStreamConfig`, which simplifies the latter structure as well as
the check in `read_mverts` to verify if interpolation is needed.

`get_config` also no longer needs a parameter for setting the now removed
`use_vertex_interpolation` member from `CDStreamConfig`. This was only
used for Mesh vertex interpolation despite also being set in the points
reader (which does not yet support any interpolation).

No functional changes.

Pull Request: #109155
2023-07-09 01:26:07 +02:00
Ray Molenkamp
c677f791f0 Cleanup: Make format 2023-07-07 20:41:57 -06:00
Joseph Eagar
0b01b7c1fa Sculpt: Fix #109555: More floating point error fixes
* Renamed BKE_pbvh_raycast_project_ray_root to
          BKE_pbvh_clip_ray_ortho for greater
	  clarity.
* BKE_pbvh_clip_ray_ortho no longer strictly clips
  within the input ray interval.  This is not necassary
  for orthographic views and was too prone to floating
  point error.  The function is only called to clip
  brush rays for orthographic views so this is acceptable.
2023-07-07 18:53:06 -07:00
Germano Cavalcante
3f90bb6a48 Fix transform updating during some navigation operations
Navigation operations, like those of the trackpad, are not modal and
therefore are confirmed on each call.

To prevent the transform operations from being updated in this case,
add a fake navigation flag.

The removal of this flag is postponed to the next call.
2023-07-07 21:27:12 -03:00
Clément Foucault
b894e90106 EEVEE-Next: Fix shader compilation on Mac 2023-07-07 23:22:13 +02:00
Ray Molenkamp
a0243dd8f9 Cleanup: make format 2023-07-07 14:10:55 -06:00
Weizhen Huang
8ad4a24287 EEVEE: Change sun light factor to match Cycles
Ref #108505

Pull Request: https://projects.blender.org/blender/blender/pulls/109831
2023-07-07 19:51:32 +02:00
Brecht Van Lommel
05c97df2de USD: improve light units conversion
* Use pi factor to convert between radiant flux and intensity
* Mark lights as normalized on export
* Add spot light export support
* Add treatAsPoint support for import and export
* Empirically match normalized distant light
* Fix wrong unnormalized point/sphere/disk light unit in Cycles

Overall it should be much closer now for all light types. Point and distant
light units are inconsistent between renderers, so not possible to match
everything there.

Ref #109404

Pull Request: https://projects.blender.org/blender/blender/pulls/109795
2023-07-07 18:20:39 +02:00
Julian Eisel
59adf9cdd6 GPv3: API tweaks to prepare for drag & drop reordering
Minor tweaks to the API to support drag & drop management in the layer tree UI.

These changes were needed for #109826:
- Add `TreeNode.parent_group()`
- Add `LayerGroup.as_node()`
- Use `TreeNode` instead of `Layer` whenever a link is needed to link or unlink a layer.

Pull Request: https://projects.blender.org/blender/blender/pulls/109824
2023-07-07 18:01:50 +02:00
Weizhen Huang
9fe87646d5 Cycles: replace spot light disk sampling with sphere sampling
The spotlight is now treated as a sphere instead of a view-aligned disk.
The implementation remains almost identical to that of a point light,
except for the spotlight attenuation and spot blend. There is no
attenuation inside the sphere. Ref #108505

Other changes include:
## Sampling
Instead of sampling the disk area, the new implementation samples either
the cone of the visible portion on the sphere or the spread cone, based
on which cone has a smaller solid angle. This reduces noise when the
spotlight has a large radius and a small spread angle.
| Before | After  |
|   --   |   --   |
|![spot_size_before.png](/attachments/04ea864a-6bf9-40fe-b11b-61c838ae70cf)|![spot_size_after.png](/attachments/7077eaf9-b7a8-41b1-a8b6-aabf1eadb4f4)
## Texture
Spot light can now project texture using UV coordinates.
<video src="/attachments/6db989d2-7a3c-4b41-9340-f5690d48c4fb"
title="spot_light_texture.mp4" controls></video>
## Normalization
Previously, the normalization factor for the spotlight was \(\pi r^2\),
the area of a disk. This factor has been adjusted to \(4\pi r^2\) to
account for the surface area of a sphere. This change also affects point
light since they share the same kernel type.
## Versioning
Some pipeline uses the `Normal` socket of the Texture Coordinate node for
projection, because `ls->Ng` was set to the incoming direction at the
current shading point. Now that `ls->Ng` corresponds to the normal
direction of a point on the sphere (except when the radius is zero),
we replace these nodes with a combination of the Geometry shader node
and the Vector Transform node, which gives the same result as before.
![versioning.png](/attachments/5bbfcacc-26c5-4f7f-8360-c42bcd851f68)
Example file see https://archive.blender.org/developer/T93676

Pull Request: https://projects.blender.org/blender/blender/pulls/109329
2023-07-07 17:15:18 +02:00
Weizhen Huang
482211b7e0 Fix wrong conversion from power to radiance of area lights
The correct conversion factor should be 1 / (pi * area), see #108505

Co-authored-by: Brecht Van Lommel <brecht@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/109153
2023-07-07 17:03:02 +02:00
Christoph Lendenfeld
c7cca085c6 Fix: assign char instead of string
Using " instead of ' caused a compiler warning
2023-07-07 16:07:04 +02:00
Hans Goudey
ec29d96d11 Cleanup: Simplify replacing component data in geometry set 2023-07-07 09:59:55 -04:00
Jeroen Bakker
f37fa6d0b1 Cleanup: make format 2023-07-07 15:43:04 +02:00
Jeroen Bakker
17a58f7db0 Eevee-next: Reflection Probe Packing
All probes (including the world background probe) are stored in a single texture. Each probe
can be of any resolution as long as it is a power of 2 and not larger than 2048. So valid options
are (2048x2048, 1024x1024, 512x512, etc).

Each probe can be stored in their own resolution and can be set by the user.
> NOTE: Eventually we would like to add automatic resolution selection.

The probes are packed in an 2d texture array with the dimension of 2048*2048. The number of
layers depends on the actual needed layers. If more layers are needed the texture will be recreated.
This can happen when a new reflection probe is added, or an existing reflection probe is made visible
to the scene or its resolution is changed.

### Octahedral mapping

Probes are rendered into a cubemap. To reduce memory needs and improve sampling performance the cubemap
is stored in octahedral mapping space. This is done in `eevee_reflection_probe_remap_comp.glsl`.

The regular octahedral mapping has been extended to fix leakages at the edges of the texture
and to be able to be used on an atlas texture and by sampling the texture once.

To reduce sampling cost and improve the quality we add an border around the
octahedral map and extend the octahedral coordinates. This also allows us to
generate lower resolution mipmaps of the atlas texture using 2x2 box filtering
from a higher resolution.

### Subdivisions and areas

Probes data are stored besides the texture. The data is used to find out where the probe is stored
in the texture. It is also used to find free space to store new probes.

This approach ensures that we can be flexible at storing probes with different
resolutions on the same layer. Lets see an example how that works

Code-wise this is implemented by `ProbeLocationFinder`. ProbeLocationFinder can view a texture in a
given subdivision level and mark areas that are covered by probes. When finding a free spot it returns
the first empty area.

**Notes**

* Currently the cubemap is rendered with a fixed resolution and mipmaps are generated in order to
  increase the quality of the atlas. Eventually we should use dynamic resolution and no mipmaps.
  This will be done as part of the light probe baking change.

Pull Request: https://projects.blender.org/blender/blender/pulls/109688
2023-07-07 15:37:26 +02:00
Ray Molenkamp
f0ee4c3ffe Cleanup: Cmake: use alias target for bf_intern_atomic
This introduces an alias target `bf::intern::atomic` for
`bf_intern_atomic`. This has the following benefits:

- Any target name with `::` in it will be recognized as an actual
target by cmake, rather than a library name it may not know about.
and will be validated by cmake to exist. Which means if you make
a typo in the LIB section, CMake will error out telling you it
doesn't know about this specific target rather than passing it on
to the build system, where you'll either get build or linker errors
because of said typo.

- Given there is quite a cleanup still to do in the build system,
it won't always be obvious which targets have been updated to
modern targets and which still need to be done. Having a namespaced
target name is a good indicator there.

Pull Request: https://projects.blender.org/blender/blender/pulls/109784
2023-07-07 15:37:02 +02:00
Christoph Lendenfeld
79b2e8f211 Animation: Allow setting the slider unit and mode
Split off from [#106952: Animation: Butterworth Smoothing filter](https://projects.blender.org/blender/blender/pulls/106952)

This patch allows the slider to take a different string than just "%",
the use case is on #106952 where we want to display "Hz" instead.

Additionally the slider got the ability to set modes, which determine
how the factor number is displayed.
`SLIDER_MODE_PERCENT` means it will multiply by 100 and display as whole numbers
`SLIDER_MODE_FLOAT` means it will display just floats with one digit after the comma

Additionally to that, because the slider range is now arbitrary and potentially deals with
large numbers, the mouse distance needed to travel from min to max has been normalized
to the range.

Pull Request: https://projects.blender.org/blender/blender/pulls/109768
2023-07-07 15:08:40 +02:00
Christoph Lendenfeld
6332d1b8a8 Animation: Improve drawing of locked FCurves
Locked `FCurves` had 2 visual issues

* the dashing is so short it just creates visual noise
* keyframes are drawn in white looking like they are selected

This PR changes this by

* Increasing the dash width
* Keyframes are drawn in black on locked curves
* To indicate that they can't be selected, draw them in a X shape
* To further reduce visual noise, locked curves no longer draw thicker when selected

This is part of the changes discussed in this design task #104867

Pull Request: https://projects.blender.org/blender/blender/pulls/106052
2023-07-07 15:05:51 +02:00
Hans Goudey
97634b7f6e Cleanup: Make format 2023-07-07 08:50:13 -04:00
Hans Goudey
75b42d1d95 Cleanup: Move BKE_editmesh_cache.h to C++
See #103343
2023-07-07 08:19:52 -04:00
Hans Goudey
ca7f4122da Cleanup: Unused variable in mesh writing, C++ casting 2023-07-07 07:35:56 -04:00
Hans Goudey
7830d9f21e Cleanup: Correct two curves and mesh comments 2023-07-07 07:10:41 -04:00
Hans Goudey
91b27ab637 Refactor: Simplify mesh edit mode modifier evaluation
Instead of keeping track of a local array of positions in the modifier
stack itself, use the existing edit mode SoA "edit cache" which already
contains a contiguous array of positions. Combined with positions as a
generic attribute, this means the state is contained just in the mesh
(and the geometry set) making the code much easier to follow.

To do this we make more use of the mesh wrapper system, where we can
pass a `Mesh` that's actually stored with a `BMesh` and the extra
cached array of positions. This also resolves some confusion-- it was
weird to have the mesh wrapper system for this purpose but not use it.

Since we always created a wrapped mesh in edit mode, there's no need
for `MOD_deform_mesh_eval_get` at all anymore. That function was quite
confusing with "eval" in its name when it really retrieved the original
mesh.

Many deform modifiers had placeholder edit mode evaluation functions.
Since these didn't do anything and since the priority is node-based
deformation now, I removed these. The case is documented more in the
modifier type struct callbacks.

Pull Request: https://projects.blender.org/blender/blender/pulls/108637
2023-07-07 13:07:15 +02:00
Campbell Barton
d0a9595c0d Cleanup: move BLI_vfont to C++ 2023-07-07 20:37:33 +10:00
Campbell Barton
915929e42f Cleanup: remove unused ParticlePathModifier struct 2023-07-07 16:03:47 +10:00
Campbell Barton
d7cfa51e49 Cleanup: declare const variables 2023-07-07 16:00:50 +10:00
Campbell Barton
40ef6c400b Cleanup: utility function to multiple rctf/rcti 2023-07-07 15:42:07 +10:00
Campbell Barton
23acedd432 Cleanup: code-comments 2023-07-07 15:11:19 +10:00
Campbell Barton
6d608cc6b5 Cleanup: use doxy headers in imbuf 2023-07-07 15:03:49 +10:00
Hans Goudey
827baed610 Mesh: Fix missing multithreading in part of BMesh to Mesh conversion
ebe8f8ce71 and 5669c5a61b added multithreading but
a typo meant it wasn't used for half of the process. Fixing that gives a
30% improvement in my tests, from about 80 to 60 ms converting a grid.
2023-07-06 17:10:21 -04:00
Iliya Katueshenock
1beece5f16 Cleanup: Unused spin lock mutex warning
Pull Request: https://projects.blender.org/blender/blender/pulls/109777
2023-07-06 19:43:40 +02:00
Hans Goudey
ec30217755 Cleanup: Simplify access to next face corner in domain interpolation 2023-07-06 13:40:42 -04:00
Joseph Eagar
4fb86952ed Sculpt: Second attempt at fix #109555: Fix floating-point error. 2023-07-06 10:21:32 -07:00
Almaz-Shinbay
af92de664b Outliner: Port bone elements to new tree-element code design
No user visible changes expected.

Part of #96713, continuation of work started in 249e4df110 and 2e221de4ce.
Refer to these for a motivation and design overview.

Adds a new class for bone elements.

Pull Request: https://projects.blender.org/blender/blender/pulls/109684
2023-07-06 18:43:58 +02:00
Germano Cavalcante
d9829c2f87 View 3D: Refactor code to split functions and remove duplication
No functional changes.

Previously, each navigation operation had its own method for restoring
the 3D View's state upon cancellation.

However, this approach did not provide significant advantages.

The number of affected variables was too small to justify considering
it for performance optimization, and the cancellation code was
duplicated across different operations.

To address this, the present commit unifies all restore code into a
single function:

- `void viewops_data_state_restore(ViewOpsData *vod);`

As a result, the `viewmove_apply_reset` function has been removed.

Moreover, since the state now has a dedicated restore function, it
seemed appropriate to create a function for capturing the state as
well.

Therefore, the code responsible for capturing the state (previously
scattered within `viewops_data_init_navigation`) has been extracted to
create the function:

- `void viewops_data_state_capture(ViewOpsData *vod);`

During this separation process, a potential error in the code was
identified, where the state may not be fully restored.

Although this issue persists, a comment has been added to clarify this
situation.

Pull Request: https://projects.blender.org/blender/blender/pulls/109760
2023-07-06 18:21:36 +02:00
Hoshinova
c9fbbea261 Cleanup: Assign corresponding expressions to variable params.max_distance
Pull Request: https://projects.blender.org/blender/blender/pulls/109328
2023-07-06 18:13:22 +02:00
Julian Eisel
71273df2d5 UI: Draw hierarchy lines for tree-views
Hierarchy lines (like we also have in the Outliner) make it easier to
visually parse the hierarchy, and avoid confusion about nesting level.
Especially when some items have icons and/or collapse chevrons and some
not (thus different levels of visual indentation).
They were planned for #93582 and #107881, also see
https://code.blender.org/2023/05/the-next-big-step-grease-pencil-3-0/#layer-groups.

The drawing is implemented as a general tree-view feature, so all
tree-views with collapsable items (which excludes the spreadsheet
data-set tree view) will get them without further setup.
2023-07-06 17:09:32 +02:00
Germano Cavalcante
74772c6920 Fix #109565: Array modifier changes the Root vertex of Skin modifier
The merging behavior of the Array, Mirror, Screw modifiers has changed
since 4369627e71.

Before, only the customdata of the destination vertex was kept. Source
vertices were completely removed.

With 4369627e71, all vertices in the merge group (whether source or
destination) now have their customdata interpolated.

But this can cause problems for example with the root vertex customdata
of the skin modifier, where if only one of the vertices of the group of
vertices has this flag, the resulting one will also have it.

This commit restores the behavior for the vertices customdata and does
not interpolate it if `do_mix_vert_data` is false.

Pull Request: https://projects.blender.org/blender/blender/pulls/109627
2023-07-06 15:05:33 +02:00
Sybren A. Stüvel
899f2bbe32 Refactor: Animation, prevent incrementing null pointer
Only do `next++` if `next` is a non-`NULL` pointer. This doesn't change
the functionality of the code, but it does prevent a sanitizer warning.

No functional changes.
2023-07-06 11:11:24 +02:00
Pratik Borhade
e73273e24b Animation: Set hardmin/max for frame start and end of action
Currently start and end property of action don't have hardmin/hardmax. This results in an
error when exporting action having extreme range values in FBX and gltf formats (#107965).

Pull Request: https://projects.blender.org/blender/blender/pulls/107985
2023-07-06 10:55:33 +02:00
Damien Picard
bbb18137ff Fix #109114: i18n: FPS not displayed in the viewport in Hindi
The FPS in the viewport is displayed in a string of the form "fps:
%.2f". The string that stores it is of length 16, which is plenty
enough in English. But the translated message in Hindi uses
Devanagari, which takes up 4 bytes per char. Because of this, it is
too long and there is not enough room for the numbers to actually
appear.

To solve this, the containing string length was doubled to 32 chars.

Pull Request: https://projects.blender.org/blender/blender/pulls/109408
2023-07-06 09:38:11 +02:00
Guillermo Venegas
5b3ce7b740 UI: Improve 3d text selection
Improve 3D text selection & feedback when moving the mouse outside of
the text. Previously mouse selection only worked if the mouse was over
the text, now there is more margin to select characters or lines.

Ref !109229

Co-authored-by: Campbell Barton <campbell@blender.org>
Co-authored-by: Harley Acheson <harley.acheson@gmail.com>
2023-07-06 13:25:07 +10:00
Campbell Barton
6a79639ef7 Cleanup: use function style casts, remove void function argument
Also remove redundant parenthesis.
2023-07-06 10:40:25 +10:00
Hans Goudey
c65fa57b0b Fix #109691: Edge crease not handled in complex solidify
a8a454287a which moved edge creases out of `MEdge` only
retrieved the result data array if the mesh had vertex creases. Before
the processing always happened though. So process the result creases
if the input has edge creases too, and try to retrieve an existing array
instead of always adding a new one.
2023-07-05 16:53:22 -04:00
Hans Goudey
2b4666b17b Geometry Nodes: Fill new quad poly offsets in parallel
Add an offset indices utility to do fill constant size new offsets in
parallel, which was already done in the duplicate elements node.

For example, filling poly offsets for a new part of a mesh that is only
quads. In the extrude node this was single-threaded before, so the
new poly offsets is about 10x faster, saving about 10 out of 157 ms
when extruding 2 million faces.
2023-07-05 15:39:33 -04:00
Brecht Van Lommel
4c6653274c Fix full frame compositor crash when Image node can't load image
Ref #109168
2023-07-05 20:51:28 +02:00
Martijn Versteegh
a280e8a68c Fix #107416: Check length of Property Collection before type
In edit mode the uv map data length gets set to zero. The specialized
MLoopUV code used to have a check to detect this when trying to access
the UVs using foreach_get/set . Add this check for the Attribute code
path as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/109179
2023-07-05 20:06:18 +02:00