Commit Graph

108812 Commits

Author SHA1 Message Date
Sean Kim
fd9de3ff7e Cleanup: Fix function comments in BKE_mesh.hh
This PR fixes the `mesh_select_*_flush` comments.

Pull Request: https://projects.blender.org/blender/blender/pulls/121000
2024-04-24 14:26:47 +02:00
Hans Goudey
ab3f05d3ec Cleanup: Move sculpt_transform.cc to C++ namespace 2024-04-24 08:19:57 -04:00
Lukas Tönne
bc9ebd72d9 Fix #120926: GPv3: Separate operator crashing because of missing layer
The Separate operator uses the ubiquitous `gather_attributes` function
to fill in attributes of layers. However, it only makes sure the layer
exists _after_ calling `gather_attributes`, which crashes if the layer
does not already exist.

Pull Request: https://projects.blender.org/blender/blender/pulls/121013
2024-04-24 14:08:41 +02:00
Hans Goudey
9193f4554c Cleanup: Move more PBVH API functions to C++ namespace 2024-04-24 07:54:22 -04:00
Hans Goudey
a4073563c8 Cleanup: Use references for sculpt undo and restore functions 2024-04-24 07:54:21 -04:00
Hans Goudey
60c0954edf Cleanup: Remove unnecessarily specific assert message 2024-04-24 07:54:21 -04:00
Hans Goudey
e4ec7c3345 Cleanup: Move more code in sculpt.cc to C++ namespace 2024-04-24 07:54:21 -04:00
Hans Goudey
cd7e67cedb Cleanup: Improve sculpt restore function name 2024-04-24 07:54:21 -04:00
Hans Goudey
78ff13eb7b Sculpt: Specialize brush position restore
Remove another use of the `BKE_pbvh_vertex_iter_begin` macro
and significantly simplify hot loops used when cancelling a brush
stroke or calculating an anchored stroke.
2024-04-24 07:54:21 -04:00
Hans Goudey
28f2383477 Sculpt: Simplify code paths for brush restore
Avoid mixing different abstraction levels, remove the conversion
of the brush tool into `undo::Type`. Make it simpler to specialize
the implementation further for separate PBVH types later.

Also fix race condition retrieving write access to an attribute from
multiple threads at the same time, and reduce per-PBVH-node
overhead.
2024-04-24 07:54:21 -04:00
Hans Goudey
d374253b7a Cleanup: Use const object and node pointers for sculpt undo push 2024-04-24 07:54:21 -04:00
Hans Goudey
577a7fdd91 Cleanup: Inline expand update flush function
No need to duplicate the switch here.
2024-04-24 07:54:21 -04:00
Hans Goudey
adf4331c8b Fix #120934: Sculpt expand cancel broken with multires
Basically the same as 7d2d590f0e
2024-04-24 07:54:21 -04:00
Pratik Borhade
3f1591394a Fix: memory leak in alloc_proxy_output_ffmpeg
Possible memory leak of `rv` due to early return without freeing the
allocated memory.
Part of #120767

Pull Request: https://projects.blender.org/blender/blender/pulls/121007
2024-04-24 12:56:17 +02:00
Aras Pranckevicius
c64050ecd2 VSE: Timeline strip visual design updates
Design updates as per #118288:
- Tweak text labels (colors, drop shadows)
- Strip border colors, inset outlines
- Muted strips are mostly gray, and their thumbnails are faded
- Overlapping strips are not semitransparent anymore
- Locked stripes only in content area
- Missing data blocks
- Updates to meta strips w/ missing data blocks

Pull Request: https://projects.blender.org/blender/blender/pulls/118581
2024-04-24 12:37:38 +02:00
Campbell Barton
848571ff01 Cleanup: initialize USDExportParams::worker_status
worker_status was left uninitialized in some cases,
while this doesn't seem to cause an error - initialize
to null to prevent errors in the future.
2024-04-24 19:58:51 +10:00
Lukas Tönne
11bfac7f11 Fix #120698: GPv3: Don't move the first stroke point
There are two ways the first stroke point is moved after initial
placement:
- The `process_extension_sample` overwrites the initial values of the
  sample point after `process_start_sample`. It copies the _new_ sample
  position, until a threshold (3 pixels) is reached and the 2nd point
  is created, and the 1st point remains stationary.
- After initial placement the point may still get shifted due to the
  resampling and interpolation used. Long sections between stroke
  samples may get subdivided and the positions of the two samples are
  linearly interpolated. However, the interpolation starts at 1/n,
  meaning the first interpolated point never matches the first sample.
  This is correct for later samples where the last point should not be
  repeated, but it ends up moving the first curve point again when the
  2nd sample is processed.

This patch fixes both issues by keeping the first generated point
stationary and never touching its position again.

Pull Request: https://projects.blender.org/blender/blender/pulls/121011
2024-04-24 11:54:01 +02:00
Clément Foucault
2056b4b563 Fix: EEVEE-Next: Broken uniform attribute in blended materials
Was caused by difference in header order for forward materials.
Fix by adding the missing include in the nodetree lib directly.

Fix #117277
2024-04-24 11:31:39 +02:00
Clément Foucault
6d347dd5ca Fix: EEVEE-Next: Point cloud macro coliding with voronoi texture
Was caused by macro declaration. Remove the macro
and add another `#if` case for EEVEE-next instead.

Fix #115438
2024-04-24 09:38:32 +02:00
YimingWu
01b7cb88ef Fix #120862: Add eps arguments to points_in_planes
The usage for `points_in_planes` might require different epsilons set
for parallel/intersection determination. This adds those epsilon values
to the bpy function so it benefits script users.

Pull Request: https://projects.blender.org/blender/blender/pulls/120910
2024-04-24 09:38:20 +02:00
Campbell Barton
7f2c0311fc Cleanup: fully initialize timeline_draw_context_get's return value
timeline_draw_context_get relied on the caller assigning "quads",
since setting the value is required, pass in "quads" as an argument.
2024-04-24 16:33:54 +10:00
Campbell Barton
7f7e276e4d Fix sculpt "Set Pivot Position" activating immediately from the menu 2024-04-24 14:05:53 +10:00
Campbell Barton
7fbf09e1e5 Theme: don't store the filepath in the presets 2024-04-24 13:37:24 +10:00
Campbell Barton
1865776767 Cleanup: doxygen syntax, use colons after "param" arguments, not "note" 2024-04-24 10:55:44 +10:00
Campbell Barton
019d3ef939 Cleanup: spelling in comments 2024-04-24 10:48:45 +10:00
Campbell Barton
679e54737f Cleanup: avoid redundant smooth calculation in grid-fill
Meshes without any selected edges had their default smooth state
calculated which involves looping over all edges.
2024-04-24 10:36:05 +10:00
Campbell Barton
75eea50253 Fix operator flag overlap between OP_IS_REPEAT & OP_IS_REPEAT_LAST
Both flags shared the same value, causing repeating a transform action
always recalculate the orientation matrix instead of using the value
from the initial execution. This is most noticeable when repeating a
transform that used a view matrix, where orbiting the view doesn't
use the view orientation from the original transform.
2024-04-24 10:32:23 +10:00
Clément Foucault
ce768d43a1 MTL: Increase log level to errors for missing texture binds
This avoid missing them as they are true user level errors.
2024-04-23 23:08:19 +02:00
Jesse Yurkovich
d208ce84b7 Cleanup: USD curves writer
Cleans up the following issues:
- USD arrays were passed by value instead of references
- UsdGeomBasisCurves and UsdGeomNurbsCurves were potentially sliced when
  assigning to their parent UsdGeomCurves object in a non-polymorphic way
- Make more parameters and functions const
- Align with how Alembic validates the curve_types and cyclic values
- Standarize CurvesGeometry naming like what was done in 5ed9c8c9dd
  (Curves data-block is called "curve_id", CurvesGeometry is called
  "curves")

Pull Request: https://projects.blender.org/blender/blender/pulls/120760
2024-04-23 23:01:46 +02:00
Clément Foucault
5611cafe5e Fix: EEVEE-Next: Different shading in forward pipeline
This was due to using a different normal than the deferred
pipeline for light facing attenuation.

Use the same heuristic as the deferred pipeline for
consistency and smoother look.

Fix #119750
2024-04-23 22:30:05 +02:00
Clément Foucault
71745416b8 EEVEE-Next: UI: Rename material Raytraced Refraction to Transmission
This is more correct as it affects all transmission BSDFs.
2024-04-23 22:17:50 +02:00
Clément Foucault
3e9796c7c3 EEVEE-Next: Light-Probe: Make volume probe display relative
This avoid overlap of data spheres when density changes.
2024-04-23 21:47:31 +02:00
Clément Foucault
0023d850e3 EEVEE-Next: Light-Probe: Make sphere probe display reflective
This was the previous behavior in legacy EEVEE.
2024-04-23 21:32:22 +02:00
Clément Foucault
3799920dc1 EEVEE-Next: Light-Probe: Make sphere probe display size relative
The display is now relative to the size of the probe. This avoid
display being too small or too big after re-sizing.
2024-04-23 21:32:22 +02:00
Jesse Yurkovich
37cc387fcb USD: Correctly write out and read Mesh velocity data
During Export, we were accidentally duplicating the `velocity` attribute
data. Once inside the `write_surface_velocity` function (which was
correct) and again while writing out all "custom" attributes inside
`write_custom_data` (which was incorrect). Fixed by excluding the
"velocity" attribute inside `write_custom_data`.

During Import, we were only loading back in those "custom" primvars so
things happened to work, by accident, but only for USD files produced by
Blender. Now we import just the Velocities attribute which should work
with all files.

This should fully address #96182

Pull Request: https://projects.blender.org/blender/blender/pulls/120771
2024-04-23 20:44:33 +02:00
Clément Foucault
dc20def2f9 Fix: EEVEE-Next: Lightprobe: Avoid division by zero
The normalization factor can divide by zero. Add a small
bias to avoid this. Since the bias is the same on both
the numerator and the denominator, the result converges
to 1 as the denominator reaches zero.

This also adds a `saturate` to avoid lighting being
weirdly increase in some part of the volume probe.

Fix #119799
2024-04-23 20:27:28 +02:00
Brecht Van Lommel
29c3997c28 Fix: Crash reading some particular old blend files 2024-04-23 19:52:20 +02:00
Hans Goudey
7dad324845 Fix: Lite build error after recent commit
Mistake in 0c3763ddda
2024-04-23 13:49:30 -04:00
Charles Wardlaw
60bc34b494 USD: Import and export custom properties
Adding support for converting between Blender custom properties and
USD user-defined custom attributes. Custom attributes on Xforms, many
data types, and materials are all supported for round-tripping.

Please see the USD attributes documentation for more information on
custom attributes.

Properties are exported with a userProperties: namespace for simple
filtering in external apps. This namespace is stripped on import,
but other namespace are allowed to persist.

An "Import Attributes" parameter has been added with options "None" (do
not import attributes), "User" (import attributes in the 'userProperties'
namespace only), "All custom" (import all USD custom attributes, the
default).

An "Export Custom Properties" export option has been added.

The property conversion code handles float, double, string and bool
types, as well as tuples of size 2, 3 and 4. Note that USD quaternions
and arrays of arbitrary length are not yet supported.

There is currently no attempt to set the Blender property subtype based
on the USD type "role" (e.g., specifying Color or XYZ vector subtypes).
This can be addressed in future work.

In addition to exporting custom properties, the original Blender object
and data names are now saved as USD custom string attributes
"userProperties:blender:object_name" and "userProperties:blender:data_name",
respectively, on the corresponding USD prims. This feature is enabled
with the "Author Blender Name" export option.

If a Blender custom string property is named "displayName", it's handled
in a special way on export in that its value is used to set the USD
prim's "displayName" metadata.

Co-authored-by: kiki <charles@skeletalstudios.com>
Co-authored-by: Michael Kowalski <makowalski@nvidia.com>
Co-authored-by: Charles Wardlaw <kattkieru@users.noreply.github.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/118938
2024-04-23 19:27:40 +02:00
Jacques Lucke
37da07e51a Geometry Nodes: support volume grid sockets in bake node
This adds support for baking volume grids directly without having to
put them into a geometry.

Pull Request: https://projects.blender.org/blender/blender/pulls/120981
2024-04-23 18:56:41 +02:00
Sietse Brouwer
7b3e063704 GPv3: Overlay for Weight Paint mode
This PR implements the viewport overlay for Weight Paint mode in GPv3.

In Weight Paint mode the stroke points are colored depending on their
weights in the active vertex group.

Pull Request: https://projects.blender.org/blender/blender/pulls/118273
2024-04-23 18:23:38 +02:00
Falk David
0a4a6ebadc GPv3: Use GPv2 object mode flag for weight painting
This mostly reverts bd22059752
and makes sure to use `OB_MODE_WEIGHT_GPENCIL_LEGACY` instead
of `OB_MODE_WEIGHT_PAINT`.

Pull Request: https://projects.blender.org/blender/blender/pulls/120983
2024-04-23 15:48:27 +02:00
Jeroen Bakker
164fb68386 Vulkan: Render graph direct compute
This PR adds support for compute shaders to render graph. Only direct dispatch
is supported. indirect dispatch will be added in a future PR.

This change enables the next test cases to be supported when using render graphs

- `GPUVulkanTest.push_constants*`
- `GPUVulkanTest.shader_compute_*`
- `GPUVulkanTest.buffer_texture`
- `GPUVulkanTest.specialization_constants_compute`
- `GPUVulkanTest.compute_direct`

```
[==========] 95 tests from 2 test suites ran. (24059 ms total)
[  PASSED  ] 95 tests.
```

Specialization constants are supported when using the render graph. This should conclude
the conversion the prototype of the render graph.

Pull Request: https://projects.blender.org/blender/blender/pulls/120963
2024-04-23 15:43:32 +02:00
Jeroen Bakker
2a1b4bf219 Vulkan: Move push constants to VKShader
VKPipeline class is deprecated and will be phased out in the near future.
This PR moves the push constants to VKShader as it was wrongly placed in the
pipeline.

Pull Request: https://projects.blender.org/blender/blender/pulls/120980
2024-04-23 14:49:41 +02:00
Hans Goudey
0c3763ddda Geometry Nodes: Add SDF grid boolean nodes
Add a simple node to compute the intersection, difference, or union
between SDF grids. This should be the first new use case for the
new volume grid nodes that wasn't possible before.

For naming and multi-inputs, the node uses the same design as the
mesh boolean node. We considered splitting each operation into a
separate node, but though most users considered these different
"modes" of the same operation.

One thing to keep in mind is that it's important for the grids to
have exactly the same transform. If they have different transforms,
the second grid must be resampled to match the first, because the
OpenVDB CSG tools have that requirement. Resampling is expensive
(for SDF grids it means a grid -> mesh -> grid round trip) and should
be avoided.

Pull Request: https://projects.blender.org/blender/blender/pulls/118879
2024-04-23 14:48:59 +02:00
Jeroen Bakker
ee46030a5a Fix #114000: EEVEE-Next: Fade/Facing overlays
The fade and facing overlays use a depth equal test. EEVEE next uses
multiple samples to construct the depth and the depth can be different
than the death-center pixel depth.

This PR uses depth-less tests, but in case of the facing overlays it
can produce some artifacts at sharp edges where the normals bleeds.

Other solution would be to render the depth center depth buffer when
one of these overlays are turned on, but that adds overhead as that
will most likely be redrawn for each draw loop.

Pull Request: https://projects.blender.org/blender/blender/pulls/120976
2024-04-23 14:45:42 +02:00
Christoph Lendenfeld
20a4c9c928 Anim: Implement RNA function on the FCurve to bake keys
This exposes the bake function introduced with #111263
to the RNA of the FCurve.
That makes it a lot easier to use that functionality from python.

Pull Request: https://projects.blender.org/blender/blender/pulls/120783
2024-04-23 13:43:01 +02:00
Jeroen Bakker
9fa6ac6976 GPU: Fix out of bound write when logging system paths
Blender expects that only the filename is provided which is true
for internal shader sources.

Metal shaders can error and return a full path to a system shader.
This doesn't fit inside the reserved memory that Blender reserved
for logging filename and line number.

This out of bound write can be triggered when using `min`
where the parameters aren't of the same kind.
`uint min(uint, int)` for example.

This PR reserves more space to store the filename.

Pull Request: https://projects.blender.org/blender/blender/pulls/120967
2024-04-23 12:50:50 +02:00
Jacques Lucke
cefe1c668d Fix #120970: viewer geometry still visible even if modifier is disabled 2024-04-23 12:43:57 +02:00
Jeroen Bakker
17c84451b9 Vulkan: Pipeline pool
In Vulkan, a Blender shader is organized in multiple
objects. A VkPipeline is the highest level concept and represents
somewhat we call a shader. A pipeline is an device/platform optimized
version of the shader that is uploaded and executed in the GPU device.
A key difference with shaders is that its usage is also compiled
in. When using the same shader with a different blending, a new pipeline
needs to be created.

In the current implementation of the Vulkan backend the pipeline is
re-created when any pipeline parameter changes. This triggers many
pipeline compilations. Especially when common shaders are used in
different parts of the drawing code.

A requirement of our render graph implementation is that changes
of the pipeline can be detected based on the VkPipeline handle.
We only want to rebind the pipeline handle when the handle actually
changes. This improves performance (especially on NVIDIA) devices
where pipeline binds are known to be costly.

The solution of this PR is to add a pipeline pool. This holds all
pipelines and can find an already created pipeline based on pipeline
infos. Only compute pipelines support has been added.

# Future enhancements
- Recent drivers replace `VkShaderModule` with pipeline libraries.
  It improves sharing pipeline stages and reduce pipeline creation times.
- GPUMaterials should be removed from the pipeline pool when they are
  destroyed. Details on this will be more clear when EEVEE support is
  added.

Pull Request: https://projects.blender.org/blender/blender/pulls/120899
2024-04-23 12:39:41 +02:00