Commit Graph

5986 Commits

Author SHA1 Message Date
Brecht Van Lommel
c2e5622d50 Revert "Shaders: Remove old Preetham and Hosek sky texture models"
These are causing quite a big difference in existing files, which is not
easy to address in versioning. Since the goal of removing this was to
simplify things for us and that's not the case, just revert this change.

This reverts commit ab21755aaf.

Ref #139923

Pull Request: https://projects.blender.org/blender/blender/pulls/146336
2025-09-20 16:52:23 +02:00
Campbell Barton
4a6268e092 Cleanup: various non functional changes for C++ 2025-09-20 16:28:02 +10:00
Mohamed Hassan
48ba7b7745 Compositor: Add a kernel convolution mode to glare node
This patch adds a kernel convolution mode to the Glare node, which is
basically a wrapper around the Convolve node for extra control.

Pull Request: https://projects.blender.org/blender/blender/pulls/145379
2025-09-19 14:33:08 +02:00
Clément Foucault
ecc495ac39 EEVEE: Optimize Principled BSDF compilation time
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
2025-09-16 16:44:01 +02:00
Jacques Lucke
ba81f03c41 Fix: Geometry Nodes: assert with a boolean input after recent refactor
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.
2025-09-16 13:56:44 +02:00
Hans Goudey
0686ceffd1 Fix: Geometry Nodes output attributes hidden
Caused by ad27211b77
2025-09-15 15:35:18 -04:00
marcopavanello
084aefd0e0 Render: Add Multiple Scattering Sky Texture
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
2025-09-15 18:08:28 +02:00
Omar Emara
e9638b4a0a Compositor: Turn Double Edge Mask node menus into inputs
This patch turns the double edge mask node menus into two boolean
inputs.

Pull Request: https://projects.blender.org/blender/blender/pulls/146304
2025-09-15 13:45:34 +02:00
Omar Emara
3b1faf7594 Compositor: Turn menu options to sockets for pixel nodes
This patch turns node Menu options into menu inputs for Pixel nodes.

Pull Request: https://projects.blender.org/blender/blender/pulls/145596
2025-09-15 12:47:06 +02:00
Omar Emara
68bccbaeee Nodes: Recursively apply usage inference
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
2025-09-15 09:09:43 +02:00
Habib Gahbiche
1b4daf9d2e Nodes: remove "Use Nodes" in Shader Editor for Object Materials
"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
2025-09-14 17:53:54 +02:00
Campbell Barton
d1b76b6554 Cleanup: only use "r_" prefix for return arguments
Ref !146253
2025-09-14 11:08:50 +00:00
Damien Picard
14ef75de1d I18n: Extract new line from messages
New lines that are used as UI layout should not be included in a
translation.
2025-09-12 18:30:56 +02:00
Damien Picard
42c25d683f I18n: Extract UI_MENU_ARROW_SEP from translated string
Some places used `IFACE_("For Each Element " UI_MENU_ARROW_SEP "
Main")`, which doesn't work because the arrow separator character is
not extracted by the translation regex. This results instead in:

"For Each Element  Main" (two spaces).

This commit uses string formatting to add the special character after
translation. It's clunky because translators won't see the actual
string, but not as risky right now as trying to include those special
characters in message extraction.
2025-09-12 18:30:56 +02:00
Jacques Lucke
ad27211b77 Refactor: Geometry Nodes: use faster IDProperty group lookup instead of custom VectorSet
Geometry Nodes used a `PropertiesVectorSet` in some places to allow
constant-time `IDProperty` access by name in a group. This used to be a
bottleneck in node groups with hundreds of inputs. Now this separate hash table
is not necessary anymore, because it's `IDProperty` groups now support this
directly since 6cb2226f13.

This also adds a `IDP_GetPropertyFromGroup_null` utility function to be able to
do this refactor more safely. Null pointers were allowed before.

Pull Request: https://projects.blender.org/blender/blender/pulls/146152
2025-09-12 15:43:14 +02:00
Omar Emara
b10d767c4e Fix #134920: File Output writes frame for single render
The File Output node always appends the frame number even if the render
is not an animation. This patch makes it such that the frame number is
only written if the render is an animation. The user can use a frame
variable to manually append the frame number if needed.

The command line rendering interface already uses animation rendering in
all cases, so it should not be affected. However, rendering using the
render.render() operator with animation=False will see the behavior
change, however, setting animation=False and start_frame and end_frame
to the same frame number should be sufficient to restore the old
behavior.

Pull Request: https://projects.blender.org/blender/blender/pulls/141209
2025-09-12 09:01:31 +02:00
luz paz
353e9178a2 Cleanup: Fix the misspelling of "anisotropy" in some variable names
Mistake in d4915b35988dcde9da540800f72a45e7a08d8fa9

Pull Request: https://projects.blender.org/blender/blender/pulls/146085
2025-09-12 08:39:53 +02:00
Campbell Barton
84511b8509 Core: add type checks to ID property accessors
Since moving the C++ ID property access macros cast "const" away,
replace with get/set accessors and add asserts that correct types
are used.
2025-09-12 06:29:42 +00:00
quackarooni
dacae33cbe Nodes: Add missing tooltip descriptions for various nodes
Add a description for function nodes and a few geometry nodes
and a few shader nodes.

Pull Request: https://projects.blender.org/blender/blender/pulls/145772
2025-09-11 20:03:35 +02:00
luz paz
62a5a29d08 Cleanup: Fix typos in source/blender/nodes
Fixes user-facing typos. Found via codespell

Pull Request: https://projects.blender.org/blender/blender/pulls/145970
2025-09-11 10:49:05 +02:00
Jacques Lucke
1517aa4416 Fix #146051: incorrect parent zone compute contexts when inlining shader nodes
Border links (links going from an outer zone to an inner zone) need special
handling. When requesting the value of a linked socket from outside of the
current zone, the compute context of that parent zone has to be used.

Pull Request: https://projects.blender.org/blender/blender/pulls/146059
2025-09-11 08:02:56 +02:00
Jacques Lucke
c3f49cd24e Shader Nodes: add Python API for inlined shader nodes
This makes the shader node inlining from #141936 available to external renderers
which use the Python API. Existing external renderer add-ons need to be updated
to get the inlined node tree from a material like below instead of using the
original node tree of the material directly.

The main contribution are these three methods: `Material.inline_shader_nodes()`,
`Light.inline_shader_nodes()` and `World.inline_shader_nodes()`.

In theory, there could be an inlining API for node trees more generally, but
some aspects of the inlining are specific to shader nodes currently. For example
the detection of output nodes and implicit input handling. Furthermore, having
the method on e.g. `Material` instead of on the node tree might be more future
proof for the case when we want to store input properties of the material on the
`Material` which are then passed into the shader node tree.

Example from API docs:
```python
import bpy

# The materials should be retrieved from the evaluated object to make sure that
# e.g. edits of Geometry Nodes are applied.
depsgraph = bpy.context.view_layer.depsgraph
ob = bpy.context.active_object
ob_eval = depsgraph.id_eval_get(ob)
material_eval = ob_eval.material_slots[0].material

# Compute the inlined shader nodes.
# Important: Do not loose the reference to this object while accessing the inlined
#   node tree. Otherwise there will be a crash due to a dangling pointer.
inline_shader_nodes = material_eval.inline_shader_nodes()

# Get the actual inlined `bpy.types.NodeTree`.
tree = inline_shader_nodes.node_tree

for node in tree.nodes:
    print(node.name)
```

Pull Request: https://projects.blender.org/blender/blender/pulls/145811
2025-09-11 06:08:30 +02:00
Jacques Lucke
f89b24ba8d Fix #146020: bad assert for supported socket types
The tree-type argument for the `supports_socket_type` type should be
allowed to be anything. There doesn't seem to be a great benefit in
restricting it. Always returning false when the tree type is not supported
makes sense.

In addition it would also be good to double-check that one can't add
the bundle and closure nodes in the compositor yet. From my basic tests,
that seems to work as expected.
2025-09-10 16:09:45 +02:00
Jacques Lucke
32c301e3cf Shader Nodes: support repeat zones, closures and bundles
This adds a function that can turn an existing `bNodeTree` into an inlined one.
The new node tree has all node groups, repeat zones, closures and bundles
inlined. So it's just a flat tree that ideally can be consumed easily by render
engines. As part of the process, it also does constant folding.

The goal is to support more advanced features from geometry nodes (repeat zones,
etc.) in shader nodes which the evaluator is more limited because it has to be
able to run on the GPU. Creating an inlined `bNodeTree` is likely the most
direct way to get but may also be limiting in the future. Since this is a fairly
local change, it's likely still worth it to support these features in all render
engines without having to make their evaluators significantly more complex.

Some limitations apply here that do not apply in Geometry Nodes. For example,
the iterations count in a repeat zone has to be a constant after constant
folding.

There is also a `Test Inlining Shader Nodes` operator that creates the inlined
tree and creates a group node for it. This is just for testing purposes.

#145811 will make this functionality available to the Python API as well so that
external renderers can use it too.
2025-09-09 16:15:43 +02:00
Ray Molenkamp
c5c9b97bec Fix: Build error with MSVC
node_geo_mesh_primitive_cube.cc uses M_PI_2 without including
BLI_math_constants.h. Unsure why this is a problem for me locally
but not for the bots but i'm guessing its a unity build difference.

Pull Request: https://projects.blender.org/blender/blender/pulls/145950
2025-09-09 15:45:55 +02:00
Jacques Lucke
51f8b8c3c4 Fix: Nodes: muted nodes shows all unused inputs
Previously, when a node was muted, all automatically hidden sockets suddenly
became visible. This is because of a rule where inputs that are never ever used,
are not-hidden (only sockets where the usage depends on some condition are
allowed to be hidden automatically). Since the inputs without internal link in a
muted nodes are never used, they become visible when a node is muted.

The solution is to ignore whether a node is muted in the case when the socket
usage for node-editor-drawing is computed. In nested nodes, muting should not be
ignored.

Pull Request: https://projects.blender.org/blender/blender/pulls/145729
2025-09-09 07:58:00 +02:00
Jacques Lucke
bfc5f8d51c Nodes: add selection output for each item in Menu Switch node
This adds a boolean output for each of the menu items. The output is true, if
the passed in menu value is that item. This avoids the need to compare the
output value to the input values to get a boolean for whether a specific menu
item was passed in.

Support is added for Geometry Nodes as well as the Compositor. Usage/Value
inferencing has been updated as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/145712
2025-09-08 13:01:47 +02:00
Guillermo Venegas
33f2dd978b Cleanup: Nodes: Remove unnecessary temporary string
Unnecessary since more of the API was converted to use StringRef.

Pull Request: https://projects.blender.org/blender/blender/pulls/145211
2025-09-07 03:32:39 +02:00
Damien Picard
f2b61b0874 UI: Fix and improve a few messages
- "grease pencil" -> "Grease Pencil": title case.
- "Display type" -> "Display Type": title case for property name.
- "Bezier" -> "Bézier": proper noun.
- "Mem:%dM, Peak %dM" -> "Mem:%dM, Peak: %dM": missing colon.
- "cannot save image while rendering" -> "Cannot": Sentence case.
- "Linked data cannot text-space transform" -> "Cannot create
  transform on linked data": rephrase strange sentence.
- "Unsupported object type for text-space transform" -> "... for
  texture space transform": unnecessary abbreviation.
- "Cannot write to asset %s:  %s": remove double space.
- "Failed to set tmpact" -> "temporary action": unclear abbreviation.
- "luminance at which the midetones of the image" -> "midtones: typo.
- "Line angle where the image should be split." -> trailing full stop.
- "... instances all the children in the collection" -> "... instances
  of all the children...": missing "of".
- "Curves to generated rounded corners on" -> "generate": typo.
- "Instances that converted to a point per instance" -> "Instances to
  convert to points": rephrase unclear sentence.
- "Great Pencil to set the depth order of" -> "Grease Pencil": typo.
- "Description to set the smoothness of" -> "Geometry to set the
  smoothness of": typo.
- "A cannot use current file as library" -> "cannot use...": typo.

Pull Request: https://projects.blender.org/blender/blender/pulls/145840
2025-09-07 00:26:31 +02:00
Brecht Van Lommel
a6108f69f2 Fix: MaterialX export can end up with duplicate node names
With chains of nodes with the same name.

Pull Request: https://projects.blender.org/blender/blender/pulls/145800
2025-09-05 16:36:49 +02:00
Jacques Lucke
40488038cf Geometry Nodes: optimize group input logging
Previously, group input values were logged for each group input socket. This
means that each value might be logged many times currently when there are many
Group Input nodes.

This patch changes it so that group input values are only logged for a single
socket.  In the provided file from #145385 this speeds up playback performance
from 23 to 39 fps. The next bottleneck there is node editor drawing. If I change
the Geometry Nodes editor to another editor type the speedup is 36 (`main`) to
110 fps (this patch).

Pull Request: https://projects.blender.org/blender/blender/pulls/145781
2025-09-05 13:00:24 +02:00
Brecht Van Lommel
ffa4f8c7ad Refactor: Split off lighter BLI_color_types.hh from BLI_color.hh
Functions for convert between the color types and ostream support are
now outside the classes.

Many files were changed to fix cases where direct includes for headers
were missing.

Pull Request: https://projects.blender.org/blender/blender/pulls/145756
2025-09-05 11:11:32 +02:00
David-Sebald
ad83a1017f Geometry Nodes: new String to Value node
An existing node converts a value (float) to string. This node is intended as a conversion in
the other direction. If parsing is unsuccessful, floating point 0 is output. This node also
outputs the length of the parsed string (i.e. the index of the first character where the
number stopped).

Pull Request: https://projects.blender.org/blender/blender/pulls/112174
2025-09-05 08:51:38 +02:00
Jonas Holzman
fff3af04c4 UI: Nodes: Rename Shader / Compositing RGB nodes to Color
This PR renames the Shader and Compositing RGB nodes to unify them with
the Geometry Color input node. The Compositing node output socket was
also renamed from "RGBA" to "Color" following other nodes. This is a
5.0 breaking change as part of #96219

Pull Request: https://projects.blender.org/blender/blender/pulls/140495
2025-09-04 21:42:53 +02:00
Hans Goudey
5418f0bc68 Fix: Geometry nodes reorders attributes in some cases
Currently attribute names are often added to a hash map that doesn't
maintain the original order. This is convenient for developers but it's
better for users if attributes aren't arbitrarily reordered. Instead,
use `VectorSet` which gives the benefit of a hash map but maintains the
insertion order. The main downside is the loss of O(1) removal which we
benefited from in a few cases. I used string comparison instead for now.

Fixes #144491, #122994

Pull Request: https://projects.blender.org/blender/blender/pulls/145668
2025-09-04 13:59:44 +02:00
илья _
aee7943c06 Fix #145691: Geometry Nodes: anonymous attributes not always propagated in Set Mesh Normal node
Pull Request: https://projects.blender.org/blender/blender/pulls/145693
2025-09-04 13:31:50 +02:00
илья _
8dd2c458cc Fix: Geometry Nodes: anoymous attributes are not always propagated in Trim Curve node
Pull Request: https://projects.blender.org/blender/blender/pulls/145694
2025-09-04 13:28:53 +02:00
Campbell Barton
59949b04b3 Cleanup: sort file lists in CMake 2025-09-03 17:54:04 +10:00
Omar Emara
6384bb34bd Fix #145607: Stabilize 2D node has no clip selector
The Stabilize 2D node has no clip selector, which was accidentally
removed in a previous commit. This patch adds it back.

Pull Request: https://projects.blender.org/blender/blender/pulls/145634
2025-09-03 09:02:33 +02:00
Bastien Montagne
469f54f484 BPY: Implement get_transform and set_transform for runtime-defined RNA properties.
Improve handling of runtime defined python RNA properties. Mainly:
* Add `get_transform` and `set_transform` new callbacks.
  These allow to edit the value, while still using the default
  (IDProperty-based) storage system.
* Read-only properties should now be defined using a new `options` flag,
  `READ_ONLY`.
* `get`/`set` should only be used when storing data outside of the
  default system now.
  * Having a `get` without a `set` defined forces property to be
    read-only (same behavior as before).
  * Having a `set` without a `get` is now an error.
* Just like with existing `get/set` callbacks, `get_/set_transform`
  callbacks must always generate values matching the constraints defined
  by their `bpy.props` property definition (same type, within required
  range, same dimensions/sizes for the `Vector` properties, etc.).
* To simplify handling of non-statically sized strings, the relevant
  RNA API has been modified, to use `std::string` instead of
  (allocated) char arrays.

Relevant unittests and benchmarking have been added or updated as part
of this project.

Note: From initial benchmarking, 'transform' versions of get/set are
several times faster than 'real' get/set.

Implements #141042.

Pull Request: https://projects.blender.org/blender/blender/pulls/141303
2025-09-02 11:30:09 +02:00
Jacques Lucke
97ee147f60 Fix: Nodes: wrong structure type inference in Blur Attribute node
The output of this node is always a field, regardless of whether the inputs are fields.
Therefore, using `dependent_field()` is wrong.

Pull Request: https://projects.blender.org/blender/blender/pulls/145548
2025-09-02 09:25:55 +02:00
Jacques Lucke
73b3107168 Fix: Nodes: incorrect structure types in Random Value node
This node is really just a function node. The main thing that's somewhat special about
it is the implicit input for the id, but that's supported for function nodes.

Pull Request: https://projects.blender.org/blender/blender/pulls/145549
2025-09-02 09:22:21 +02:00
Jacques Lucke
c51eb5b233 Refactor: Nodes: improve InferenceValue abstraction to better support non-primitive values
Currently, `InferenceValue` contains either a primitive value or is in the
"unknown" state. Previously, all code had the assumption that when the value is
not unknown, it is a primitive value. However, that may not be true anymore when
we support inferencing through e.g. bundles and closures as those are not
"primitive". This assumption is removed now, non-primitive values have not been
added yet though.

Pull Request: https://projects.blender.org/blender/blender/pulls/145532
2025-09-01 22:42:57 +02:00
Jacques Lucke
d685fdbf99 Refactor: Nodes: extract socket value inferencer from usage inferencer
Value and usage inferencing can be done independently. Usage-inferencing uses
the value-inferencing but not the other way around. Extracting value-inferencing
makes the separation more clear and also simplifies potentially reusing the
value-inferencing code later on.

Pull Request: https://projects.blender.org/blender/blender/pulls/145492
2025-09-01 21:07:10 +02:00
Brecht Van Lommel
2eaa8dc7d5 Compositor: Add Convert to Display node
This applies an OpenColorIO display, view and look transform on a color
in the scene_linear colorspace.

In general, OpenColorIO configurations do not contain a colorspace for
every view + display, especially if they are modern configs using the
display colorspace and shared view mechanisms. Nor do they include looks.
So the Convert Colorspace node is not sufficient.

Additionally, we would like to avoid making the colorspace list too long
in the default config, as we are adding many new views and transforms.

Exposure, gamma curves and white point functionality are not included
in this node, as there are native ways of doing that in the compositor.
These settings are marked non-editable in the Python API.

Pull Request: https://projects.blender.org/blender/blender/pulls/145069
2025-09-01 16:28:07 +02:00
Campbell Barton
6d92bf00a6 Cleanup: use float2 for some 3D text logic 2025-08-29 03:40:33 +00:00
Campbell Barton
6c7513b9ac Cleanup: spelling (make check_spelling_*) 2025-08-29 11:27:33 +10:00
Omar Emara
fdf95b53fa Compositor: Add Convolve node
This patch adds a simple Convolve node to the compositor.

Pull Request: https://projects.blender.org/blender/blender/pulls/144619
2025-08-28 15:58:39 +02:00
Philipp Oeser
81c259d49b Fix #145300: Value node displayed value has an offset to the right
Caused by d7fa455e66

Due to an earlier experiment to get right alignment, above commit left a
space in the text (this was later solved by using
`UI_ITEM_R_SPLIT_EMPTY_NAME`, but... for this one node, the name was not
actually empty then...)

Pull Request: https://projects.blender.org/blender/blender/pulls/145303
2025-08-28 15:11:21 +02:00
Jacques Lucke
20b2ec5cdf Fix #145103: incorrect socket usage for built-in menu sockets
The socket usage of built-in menu sockets did not take into account if any of the
outputs of the node were actually used.

Pull Request: https://projects.blender.org/blender/blender/pulls/145162
2025-08-28 14:28:14 +02:00