Commit Graph

5862 Commits

Author SHA1 Message Date
Jacques Lucke
e6c12f19b5 Fix: Geometry Nodes: wrong socket syncing for nested bundles 2025-08-01 16:34:52 +02:00
Campbell Barton
2c27d2be54 Cleanup: grammar corrections, minor improvements to wording 2025-08-01 21:41:24 +10:00
Benjamin Beilharz
53832755ae Compositor: Adds extension modes to map UV node
This commit introduces the extension modes for the map UV node. The
drop-down for the extension modes is only shown if the interpolation
mode is not set to anisotropic. This is due to extension modes currently
not being supported for the anisotropic filtering.

Pull Request: https://projects.blender.org/blender/blender/pulls/143415
2025-08-01 11:00:24 +02:00
Jacques Lucke
c91a21d42b Fix: Geometry Nodes: crash when linking closure/bundle to group in/output extent socket
The issue was that the parent node group was not necessarily updated already
when the tracing code ran. So use socket identifiers instead of indices to try
to find corresponding sockets between group nodes and their corresponding
node groups.
2025-07-31 22:06:30 +02:00
Jacques Lucke
890ab23e0d Refactor: Nodes: return pointer instead of reference from in/output_by_identifier
This makes it possible to use these methods in cases where it's not guaranteed
that the identifier exists on a node.
2025-07-31 21:58:58 +02:00
Jacques Lucke
90b0e06fc7 Fix: Geometry Nodes: handle linking bundle/closure node to incompatible socket 2025-07-31 21:46:00 +02:00
Jacques Lucke
9788f9f62a Geometry Nodes: sync bundle/closure nodes on first link
When using link-drag-search to create bundle or closure nodes, the newly created
nodes are already synced automatically. Now this automatic syncing also happens
when an empty node is first linked. If there are any sockets already, the
automatic syncing does not happen as it can be unintentional. In this case the
user can just click the sync icon in the node header to update the sockets.

Pull Request: https://projects.blender.org/blender/blender/pulls/143744
2025-07-31 20:49:28 +02:00
Jacques Lucke
f03259b0d1 Geometry Nodes: improve info/error messages for mismatching data types
Mention "bundle" or "closure" in the error message to that it is more
obvious what's wrong when seeing the error message at a higher level.
2025-07-31 20:41:32 +02:00
Jacques Lucke
4c3724180b Refactor: Geometry Nodes: extract value tracing to separate file
This moves code used for tracing bundles and closures to a separate file. This
code is used to e.g. detect which Separate Bundle node a Combine Bundle node is
linked to. This allows providing automatic socket update operators for these
nodes. Similarly for closures.

Pull Request: https://projects.blender.org/blender/blender/pulls/143734
2025-07-31 20:35:09 +02:00
Jacques Lucke
b7194ad693 Geometry Nodes: move sync out of subpanel for bundle/closure nodes
This was mentioned in #140967.
2025-07-31 20:23:50 +02:00
Jacques Lucke
97b5618911 Refactor: Nodes: pass params as struct to bNodeType::insert_link
This simplifies potentially adding a `bContext` argument which allows for more advanced behavior.

Pull Request: https://projects.blender.org/blender/blender/pulls/143732
2025-07-31 19:22:11 +02:00
Jacques Lucke
6ec5ee713b Cleanup: Geometry Nodes: add comment 2025-07-31 17:18:59 +02:00
Benjamin Beilharz
481c524734 Compositor: Add extension modes to displacement node
The node uses anisotropic sampling (which is currently not supported for the
extension mode), so extension modes are only rendered in the node if any
other interpolation method, but anisotropic is selected.

Pull Request: https://projects.blender.org/blender/blender/pulls/143367
2025-07-31 10:51:59 +02:00
Bastien Montagne
d77c98d1d4 Fix compilation in BSDF glass shader code (missing includes). 2025-07-31 10:43:44 +02:00
Benjamin Beilharz
ea94c0be22 Compositor: Implements extension modes for rotate node
This commit introduces the `ExtensionMode` for the rotation node and
changes the node to use a node storage instead of node properties.

Pull Request: https://projects.blender.org/blender/blender/pulls/143357
2025-07-31 10:29:14 +02:00
Weizhen Huang
1b80bd2da9 Fix: Glass node missing buttons after adding thin film panel
_No response_

Pull Request: https://projects.blender.org/blender/blender/pulls/143616
2025-07-31 09:41:31 +02:00
Jacques Lucke
2abb0657e0 Fix: missing pragma once 2025-07-31 07:20:24 +02:00
Jacques Lucke
4afe62ee29 Nodes: always initialize new links in closure zone when syncing 2025-07-30 20:56:24 +02:00
Jacques Lucke
1260e90b4c Refactor: Geometry Nodes: simplify detection of syncable nodes
This moves most of the code to deal with syncable nodes (such as
Combine/Separate Bundle) to the nodes module. Over time it might be possible to
decentralize it more.

This also changes the caching mechanism from storing a flag on the node to
storing a map on the node editor runtime data. This simplifies the code quite
significantly and also removes the need to store any of this data in DNA.

The node tree update code now always clears this cache because before it was
missing many cases, e.g. when creating links that would connect a Combine to a
Separate Bundle node.

Pull Request: https://projects.blender.org/blender/blender/pulls/143661
2025-07-30 20:42:20 +02:00
Jacques Lucke
21ca4584b6 Geometry Nodes: show sync button on bundle and closure nodes if syncing is possible
This shows a sync button when Geometry Nodes has detected that
syncing is possible and might be necessary.

Pull Request: https://projects.blender.org/blender/blender/pulls/140967
2025-07-30 18:51:14 +02:00
Jacques Lucke
7186ab7e86 Geometry Nodes: add conversion warnings for closures and bundles
This adds warnings to inform the user when potentially unexpected implicit
conversions happen in the Separate Bundle and Evaluate closure node.

Pull Request: https://projects.blender.org/blender/blender/pulls/143645
2025-07-30 18:03:52 +02:00
Jacques Lucke
76a861ab41 Geometry Nodes: move more menu inputs to sockets
This is a continuation of #140705. It changes more menu node options to be input
sockets. It also changes the order of the input sockets in a few cases to make
the node look a bit better.

Forward and backward compatibility is preserved.

Pull Request: https://projects.blender.org/blender/blender/pulls/142220
2025-07-30 15:32:10 +02:00
Campbell Barton
f281f5a500 Cleanup: header grouping
Group includes, this is mostly being done already but had become mixed
up in some areas.
2025-07-30 14:22:06 +10:00
Daniel Salazar
750d0df4e7 Shaders: Change default Blackbody node temperature to 6500K
Match the default value in Light Properties.

Pull Request: https://projects.blender.org/blender/blender/pulls/143504
2025-07-29 17:49:05 +02:00
Kace
f955eae545 Compositor: Improve File Output node UI
Makes the File Output node panel similar to the Render Output node.
Instead of a dropdown, color management enum property expanded in UI.
Color management settings are now moved inside a panel.
Add/remove file subpapth buttons moved to the side of UIList.

Resolves #133501

See images in PR description for visual changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/133747
2025-07-29 09:55:48 +02:00
Jacques Lucke
5f132d3f07 Nodes: support storing internal data in Bundle
Currently, bundles can only store socket values of Geometry Nodes. However, it
can make sense to store other kinds of data too. Specifically, this patch adds
support for storing arbitrary internal data in a bundle. This is useful when
storing e.g. the physics world when implementing a proper physics solver for
Geometry Nodes (like in #143171).

One can still see that the data exists in Geometry Nodes in the tooltip, but one
can't extract it. Built-in nodes can still read that data.

Storing built-in data in bundles can also be done as an alternative to having a
new "internal data socket" as we talked in a workshop in the past:
https://code.blender.org/2024/11/geometry-nodes-workshop-october-2024/#internal-data-sockets

A bundle still has to be copyable. Internal data is expected to use implicit
sharing. That way copying it just requires increasing the user count of the
data.

Pull Request: https://projects.blender.org/blender/blender/pulls/143472
2025-07-28 19:05:18 +02:00
Hans Goudey
32c9bd8b81 Cleanup: UI: Remove unused min/max arguments to uiDefIconTextBut
These min and max arguments are unused, 0 is passed everywhere.
2025-07-28 11:27:52 -04:00
Jacques Lucke
63954843c2 Nodes: add utility to get virtual array for list
Pull Request: https://projects.blender.org/blender/blender/pulls/143469
2025-07-28 16:43:48 +02:00
W_Cloud
3cd40bae9f Geometry Nodes: Change socket name based on node category and support component type.
The socket name should clearly indicate the type of component being processed.
The socket names for most nodes with geometry tag are clear, with the exception of these few nodes.

Pull Request: https://projects.blender.org/blender/blender/pulls/142358
2025-07-28 15:07:00 +02:00
Benjamin Beilharz
fa2062ee96 Refactor: Renames the zero extension mode to clip
This commit renames the `ExtensionMode`'s `Zero` case to `Clip`.

Pull Request: https://projects.blender.org/blender/blender/pulls/143354
2025-07-28 10:45:12 +02:00
Omar Emara
6f426f498a Refactor: Move pass name aliasing to context implementation
This patch moves the rules that alias Image to Combined for pass names
to the context implementations. This is because this only makes sense
for contexts that deal with passes, while it wouldn't make much sense
for other possible contexts like VSE modifiers.

Pull Request: https://projects.blender.org/blender/blender/pulls/143419
2025-07-28 10:00:20 +02:00
Benjamin Beilharz
4bffd43adc Cleanup: Adds missing static casts
This commit adds missing static casts for the interpolation and
extension mode lookups.

Pull Request: https://projects.blender.org/blender/blender/pulls/143418
2025-07-28 09:11:21 +02:00
Campbell Barton
e8f9e2d1d1 Cleanup: use UTF8 string functions in editors & related logic
Use UTF8 aware functions unless raw bytes are expected.
2025-07-27 16:41:19 +10:00
Campbell Barton
f6af0aae7c Cleanup: use UTF8 string functions for tracking members
Use UTF8 aware functions unless raw bytes are expected.
2025-07-27 16:39:57 +10:00
Campbell Barton
e93e9db6b7 Cleanup: UTF8 string functions for color-space & imbuf strings
Use UTF8 aware functions unless raw bytes are expected.
2025-07-27 04:34:04 +00:00
Campbell Barton
649b89781e Cleanup: ensure UTF8 string copy for DNA & screen data
Use `BLI_strncpy_utf8` & `BLI_snprintf_utf8` for fixed size buffers in
DNA and screen data structures such as panels, menus & operators.

This could be considered a fix as copying a UTF8 string into a smaller
buffer without proper truncation can create an invalid UTF8 sequence.
However identifying which of these users are likely to run into would
be time consuming and not especially useful.
2025-07-26 12:33:15 +00:00
Sergey Sharybin
dcae48d1d3 Cycles: Add Portal Depth light pass information
It allows to implement tricks based on a knowledge whether the path
ever cam through a portal or not, and even something more advanced
based on the number of portals.

The main current objective is for strokes shading: stroke shader
uses Ray Portal BSDF to place ray to the center of the stroke and
point it in the direction of the surface it is generated for. This
gives stroke a single color which matches shading of the original
object. For this usecase to work the ray bounced from the original
surface should ignore the strokes, which is now possible by using
Portal Depth input and mixing with the Transparent BSDF. It also
helps to make shading look better when there are multiple stroke
layers.

A solution of using portal depth is chosen over a single flag due
to various factors:
- Last time we've looked into it it was a bit tricky to implement
	as a flag due to us running out of bits.
- It feels to be more flexible solution, even though it is a bit
	hard to come up with 100% compelling setup for it.
- It needs to be slightly different from the current "Is Foo"
	flags, and be more "Is Portal Descendant" or something.

An extra uint16 is added to the state to count the portal depth,
but it is only allocated for scenes that use Ray Portal BSDF.

Portal BSDF still increments Transparent bounce, as it is required
to have some "limiting" factor so that ray does not get infinitely
move to different place of the scene.

Ref #125213

Pull Request: https://projects.blender.org/blender/blender/pulls/143107
2025-07-25 18:09:38 +02:00
Omar Emara
2582630702 Refactor: Use Bounds for compositing region
This patch uses the new C++ Bounds structure for the composition region
returned by the compositor context.

Pull Request: https://projects.blender.org/blender/blender/pulls/143199
2025-07-25 15:40:45 +02:00
Omar Emara
8cb7aafae2 Refactor: Use generic name for compositor context IO methods
This patch renames some IO methods in the compositor context to be more
generic. This is in preparation for more generic use of the compositor.

Pull Request: https://projects.blender.org/blender/blender/pulls/143193
2025-07-25 14:40:17 +02:00
W_Cloud
d15750a059 Geometry Nodes: add inline socket for missing nodes
Add missing inline socket for Set Spline Type,Join Strings,Pack UV Islands and Vector Rotate.

Pull Request: https://projects.blender.org/blender/blender/pulls/142299
2025-07-25 12:27:44 +02:00
Habib Gahbiche
c7421e197a Fix #143156: "RGB to BW" node not found in link drag search
The node is stil specific to the compositor and is not shared with its
Shader counterpart yet, so `ntype.gather_link_search_ops;` should not
be `nullptr`.

Pull Request: https://projects.blender.org/blender/blender/pulls/143174
2025-07-25 12:25:18 +02:00
Jacques Lucke
a5877c5704 Fix: Nodes: use correct structure types in switch nodes
Generally, switch nodes can work on any kind of data. Some additional restrictions
apply though because some types are only allowed to be single values.

Pull Request: https://projects.blender.org/blender/blender/pulls/143163
2025-07-25 12:22:04 +02:00
Mohamed Hassan
c1f52b8e91 Compositor: Improve Fog Glow glare realism
This patch improves the realism of the Fog Glow mode of the Glare node
based on the Photopic model described in:

  Physically-Based Glare Effects for Digital Images" by G. Spencer, P.
  Shirley, K. Zimmerman, and D. P. Greenberg.

This is a breaking change that can't be versioned, but it is worth it
for the superior realism of the new model.

Pull Request: https://projects.blender.org/blender/blender/pulls/140646
2025-07-25 10:09:32 +02:00
Hans Goudey
4f372d64d4 Geometry Nodes: Initial very basic list support
This includes a new list structure type and socket shape, a node
to create lists, a node to retrieve values from lists, and a node to
retrieve the length of lists. It also implements multi-function support
so that function nodes work on lists.

There are three nodes included in this PR.
- **List** Creates a list of elements with a given size. The values
  are computed with a field that can use the index as an input.
- **Get List Item** A field node that retrieves an element from a
  a list at a given index. The index input is dynamic, so if the input
  is a list, the output will be a list too.
- **List Length** Just gives the length of a list.

When a function node is used with multiple list inputs, the shorter
lists are repeated to extend it to the length of the longest.

The list nodes and structure type are hidden behind an experimental
feature until we can be sure they're useful for an actual use case.

Pull Request: https://projects.blender.org/blender/blender/pulls/140679
2025-07-24 16:16:40 +02:00
Hans Goudey
9c9695b103 Refactor: Move ReportList definition from DNA to blenkernel
Ever since [0], ReportList is not actually used in any DNA structs.
That makes sense, since reports are conceptually only necessary
at runtime. Move the definition of the struct to BKE_report.hh, and
fix a bunch of include errors where types were previously available
transitively. Besides adding some clarity, theoretically this change
could reduce compile times because of less header parsing.

[0]: 1bf6d8b0b9

Pull Request: https://projects.blender.org/blender/blender/pulls/138872
2025-07-24 15:59:52 +02:00
Hans Goudey
623d3c04e2 Fix: Set Mesh Normal "Tangent" mode fails with free normals
If free normals already exist, the `custom_normal` attribute already
exists with a different type, so the attribute writer is not created
properly in `mesh_set_custom_normals` and the process fails. Instead,
setting tangent space custom normals should clear existing free normals.

Pull Request: https://projects.blender.org/blender/blender/pulls/142961
2025-07-24 15:50:40 +02:00
Omar Emara
e34e6373b6 Compositor: Replace Composite node with Group Output node
This patch replaces the Composite node with the Group Output node as the
primary compositor output. The old node was removed and versioned. This
was done for consistency with Geometry Nodes and in preparation for more
generic use of the compositor in VSE modifiers, layered compositing, NPR
multi-stage compositing, and more.

The Group Output node relies on the node tree interface, so we now have
a default interface of a single input and a single output. For now, only
the first input is considered while the rest are ignored, just like the
Geometry Nodes design. Furthermore, the input is required to be of type
color. Warnings and errors are issues if any of those are not met, also
similar to Geometry Nodes.

This introduces a new limitation: Composite outputs can no longer exist
in node groups, since they obviously then act as their respective group
outputs.

A refactor for the compositor scheduler is needed to simplify the logic
after this change, but this will be done in a separate patch.

Pull Request: https://projects.blender.org/blender/blender/pulls/142232
2025-07-24 13:41:56 +02:00
Jacques Lucke
70b956ba53 Fix: Nodes: memory leak in extra info tooltips
The issue was that the tooltip function arguments were sometimes allocated but
not freed. The solution is to handle the lifetime of the argument better. The
code now makes a copy of the argument when it's passed to a layout function. In
an idea world, one could just use something like `std::function` instead of
manual memory management, but the API does not support it yet.

This was caused by f3a1d8fad5.

Pull Request: https://projects.blender.org/blender/blender/pulls/143043
2025-07-24 10:35:47 +02:00
Jacques Lucke
df625835c4 Fix #142202: missing anonymous attribute propagation when using some field nodes
Some fields were missing `for_each_field_input_recursive` implementations which
are required for anonymous attribute propagation to work.

Pull Request: https://projects.blender.org/blender/blender/pulls/143031
2025-07-24 10:16:46 +02:00
Jacques Lucke
a57709ca25 Fix #142828: broken socket usage inference for some nodes
The issue was an oversight in f7f18cd0c7.

This patch also adds some unit tests that would have caught this error.

Pull Request: https://projects.blender.org/blender/blender/pulls/143026
2025-07-24 08:13:34 +02:00