This removes unused closure branches in the principled BSDF
code using the Material flags.
On top of this, use constants for weights to use compiler
dead code eliminitation for unused branches when there
is different variants of the principled BSDF node used.
Finally, remove Gbuffer packing cases that are not present
inside the nodetree.
Testing with the same setup as #145347:
| | main (ms) | PR (ms) | Delta (ms) |
| -------- | ----------- | ------------ |------------ |
| Nvidia | 174 | 132 (1.31x) | 42 |
| Mesa AMD | 191 | 170 (1.12x) | 21 |
Barbershop compilation time is almost equal because it is not using
the principled BSDF.
Rel #145347
Pull Request: https://projects.blender.org/blender/blender/pulls/146324
Can happen if you set cursor location by snapping or manually.
In order to really skip drawing in `draw_output`, we have to set
`enabled_` to false in `begin_sync`.
This is already done for the "simple" cases covered by
`is_cursor_visible_XXX` but not for the "special" case where the cursor
is clipped in the view.
This is what this PR does.
Pull Request: https://projects.blender.org/blender/blender/pulls/146354
Currently, when a python error is encountered when rendering the UI, the
corresponding message is printed to stdout / stderr via `PyErr_Print`,
this patch modifies behavior so that a cursory message is also printed
with CLOG
This has the benefit of allowing for testing via
`--debug-exit-on-error`, which aborts Blender when an error message is
printed.
Pull Request: https://projects.blender.org/blender/blender/pulls/146296
Unlike some other UI types, specifying the space type with this property
doesn't guarantee the asset shelf will only be shown in this space type. This
is an important behavioral detail that's easily missed.
The bug was there before, which is now found by an assert added in
84511b8509.
This used to be an integer property in the past before there were
boolean id properties.
Caused by ab43c57a2a
The VSE allows for "no scene", prior to above commit an "arbitrary"
framerate of 25 was hardcoded to display "something" in that case.
To resolve, pick what we defined as default for framerate (getting rid
of the "arbitrary") in case we have no (VSE) scene.
NOTE: that is 24 atm (instead of the hardcoded 25 we had before)
Pull Request: https://projects.blender.org/blender/blender/pulls/146300
When texture painting a non-manifold mesh, various artifacts are created
on the image texture.
To add seams to the edges of non-manifold UV islands, the texture
painting system reads and writes pixels near the edge of the UV islands.
The offset calculations used to find pixel positions for reading and
writing were not accounting for color channels (RGBA) in the pixel data.
Because of this, the reading function corrupted the color data for the
seams, and the writing function caused the seams to be scaled down and
repeated.
Pull Request: https://projects.blender.org/blender/blender/pulls/146110
Same situation as in #138793, so same solution as 1cb20d444e
Converting from text (via legacy curves) to grease pencil with "Keep
Original" option enabled can cause the new grease pencil ID to not be
evaluated, leading to an situation where a evaluated grease pencil
object would point to the original legacy curve ID as its object data.
This fix added a depsgraph tag so it ensures the COW ID is the latest.
Pull Request: https://projects.blender.org/blender/blender/pulls/146314
The Vectorcall protocol avoids creating a tuple, and also provides the
number of arguments in advance, providing a ~1.6x speedup for creation
of mathutils types.
Ref !146237
Each dupli is given a PersistentId which is 8 integers, 1 for each level
of recursive duplication that Blender supports. When an instance belongs
to fewer than 8 levels, the id is padded with sentinel values for the
remaining levels. For example, a 2 level dupli may have a persistent id
like:`[7, 4, INT_MAX, INT_MAX, INT_MAX, INT_MAX, INT_MAX, INT_MAX]`
When calculating the instance's `random_id` we were considering all 8
values of the Persistent Id which is unnecessary and wasteful. Now we
only use the minimal values necessary. This does mean that the Object
Info: Random material socket changes values from prior versions however.
This improves the performance of the viewport in some instancing
scenes by roughly 4-6%.
Co-authored-by: Bastien Montagne <mont29@noreply.localhost>
Pull Request: https://projects.blender.org/blender/blender/pulls/145150
A aspect ratio less than or equal to zero will cause point to not be
displayed.
This behavior problematic because use strokes create by Geometry Nodes
(or bugs) can cause the `aspect_ratio` to default to zero.
And as there is currently no operator to set `aspect_ratio` this
invisible geometry can not be fixed by most users.
This PR fixes this by returning `1.0f` when the `aspect_ratio` is
invalided.
Pull Request: https://projects.blender.org/blender/blender/pulls/146279
The default value for the `vertex_color` attribute is `0.0f` not `1.0f`
so the `Reset Vertex Color` operator should set zero, to no obstruct
the base material.
Candidate for backport to 4.5 LTS.
Pull Request: https://projects.blender.org/blender/blender/pulls/146277
Follow up to !146169
- Add versioning so the new sidebar shows up in old files.
- Remove the hidden flag so it shows up in new Preferences editors.
- Add "Sidebar" toggle to the View menu, and expose region toggle.
Pull Request: https://projects.blender.org/blender/blender/pulls/146321
This mode is based on the same athmospheric model as the previous one, but now
also accounts for multiple scattering and reflections from the ground.
This increases the accuracy, especially at low elevations.
Also renames some options for consistency:
- The previous "Nishita" model is now "Single Scattering"
- "Dust" is now "Aerosols"
- Default altitude is now 100m.
Co-authored-by: Lukas Stockner <lukas@lukasstockner.de>
Pull Request: https://projects.blender.org/blender/blender/pulls/140480
Prefilter the position float data similar to what was done recently for
point caches in 3d9155eb0a (more information about this
compression technique is linked there). Also avoid reallocating an
array for temporary data when processing each BVH node. The results
are great relative to the size of the change:
- Building the compressed undo step data gets 5.2x faster (25 to 5 ms)
- Restoring the compressed undo step on undo is 1.8x faster (10 to 5 ms)
- The memory usage for an undo step is 1.6x smaller (23 to 14 MB)
I Tested on a mesh with 1.8 million vertices, with an operation affecting
the entire mesh. The mesh data affected will have an affect on the results.
Pull Request: https://projects.blender.org/blender/blender/pulls/146093
Adjust the poll function of the 'Set Active Modifier' operator
(`object.modifier_set_active`) to only return `true` when it's run in a
context that actually may have a modifier. This makes it work in the
Modifiers panels, but not in other panels, so that the 'mouse click'
event can be used for other operators (like tree view selection).
This is not a perfect solution, as the modifier panel may use tree views
in some future as well, but at least it seems to fix the 'unbreak now'
issue.
Pull Request: https://projects.blender.org/blender/blender/pulls/146325
Fixes several validation errors when using VMA.
- Always enable buffer device address in VMA as it is already a Blender
requirement.
- Add host access hints when host access is needed.
Pull Request: https://projects.blender.org/blender/blender/pulls/146312
This commit builds off of 5f8311f596 to support collapsing the custom
paint curve to reduce the amount of information shown to the user.
To support this, a new field is added to the `Paint` struct for this
visibility flag. This value is stored on a per-mode level, not a
per-brush level, as a user editing this curve is likely to not need
the visibility granularity on a per-brush basis.
Additionally, changes are included here to draw the curve button
itself as inactive if the parent layout it is part of is inactive.
Notably, this does not make the curve read only - it only changes
the appearance.
Pull Request: https://projects.blender.org/blender/blender/pulls/145699
Various runtime fields were being accessed before the runtime struct
itself was created in a newly allocated ID block. Additionally, the
call to `BKE_reports_init` is already handled by the
`WindowManagerRuntime` constructor.
Pull Request: https://projects.blender.org/blender/blender/pulls/146258
The Render Layers node doesn't work if a viewlayer other than the first
is selected. This was hard coded in code, so we just allow any view
layer, on the condition that it is the active one.
Pull Request: https://projects.blender.org/blender/blender/pulls/146285
This patch extends the usage_by_menu method to also consider the usage
of the menu socket in the make available and usage inference callbacks.
This essentially means that if a socket depends on menu B which, in
turn, depends on menu A, it will be sufficiently to check the value of
menu B, while A will be checked recursively.
The single variant of the usage_by_menu function is now implemented in
terms of its overloaded vector variant for code deduplication since the
new code increase the size quite a bit.
Pull Request: https://projects.blender.org/blender/blender/pulls/146141
"Use Nodes" was removed in the compositor to simplify the compositing
workflow. This introduced a slight inconsistency with the Shader Node
Editor.
This PR removes "Use Nodes" for object materials.
For Line Style, no changes are planned (not sure how to preserve
compatibility yet).
This simplifies the state of objects; either they have a material or
they don't.
Backward compatibility:
- If Use Nodes is turned Off, new nodes are added to the node tree to
simulate the same material:
- DNA: Only `use_nodes` is marked deprecated
- Python API:
- `material.use_nodes` is marked deprecated and will be removed in
6.0. Reading it always returns `True` and setting it has no effect.
- `material.diffuse_color`, `material.specular` etc.. Are not used by
EEVEE anymore but are kept because they are used by Workbench.
Forward compatibility:
Always enable 'Use Nodes' when writing blend files.
Known Issues:
Some UI tests are failing on macOS
Pull Request: https://projects.blender.org/blender/blender/pulls/141278
The intent of the Curve and Line stroke types is generally to perform
a set of equally spaced points. Unlike drawing with a tablet using the
Spacing stroke type, pressure should have no influence on this input.
Previously, the code would pass in a hardcoded value of 1.0f for the
line & curve pressure. This is incorrect, as it results in a factor of
0.5f, not 1.0f, causing behavior to differ on this stroke type depending
on if the corresponding brush pressure flag was enabled or not.
Additionally, an extra check is used to ensure that only the Spacing
stroke type can have pressure modulated in this way.
Pull Request: https://projects.blender.org/blender/blender/pulls/146120