Commit Graph

3173 Commits

Author SHA1 Message Date
Hans Goudey
b9727dae82 Cleanup: Remove redundant vertex duplication in extrude node
Now this is done by `Mesh::verts_for_write()`
2022-09-08 09:50:59 -05:00
Hans Goudey
d593497421 Cleanup: Use C++ methods to retrieve attribute accessors
Replace `mesh_attributes`, `mesh_attributes_for_write` and the point
cloud versions with methods on the `Mesh` and `PointCloud` types.
This makes them friendlier to use and improves readability.

Differential Revision: https://developer.blender.org/D15907
2022-09-07 21:41:39 -05:00
Campbell Barton
c2c369ebe6 Cleanup: prefer terms verts/polys over vertices/polygons
Follows existing naming for the most part, also use "num" as a suffix
in some instances (following our naming conventions).
2022-09-08 11:34:02 +10:00
Campbell Barton
bd2b50dfa8 Cleanup: sort cmake file lists 2022-09-07 15:14:50 +10:00
Hans Goudey
be038b844c Cleanup: Tweak naming for recently added mesh accessors
Use `verts` instead of `vertices` and `polys` instead of `polygons`
in the API added in 05952aa94d. This aligns better with
existing naming where the shorter names are much more common.
2022-09-07 00:06:31 -05:00
Campbell Barton
6c6a53fad3 Cleanup: spelling in comments, formatting, move comments into headers 2022-09-06 16:25:20 +10:00
Hans Goudey
05952aa94d Mesh: Remove redundant custom data pointers
For copy-on-write, we want to share attribute arrays between meshes
where possible. Mutable pointers like `Mesh.mvert` make that difficult
by making ownership vague. They also make code more complex by adding
redundancy.

The simplest solution is just removing them and retrieving layers from
`CustomData` as needed. Similar changes have already been applied to
curves and point clouds (e9f82d3dc7, 410a6efb74). Removing use of
the pointers generally makes code more obvious and more reusable.

Mesh data is now accessed with a C++ API (`Mesh::edges()` or
`Mesh::edges_for_write()`), and a C API (`BKE_mesh_edges(mesh)`).

The CoW changes this commit makes possible are described in T95845
and T95842, and started in D14139 and D14140. The change also simplifies
the ongoing mesh struct-of-array refactors from T95965.

**RNA/Python Access Performance**
Theoretically, accessing mesh elements with the RNA API may become
slower, since the layer needs to be found on every random access.
However, overhead is already high enough that this doesn't make a
noticible differenc, and performance is actually improved in some
cases. Random access can be up to 10% faster, but other situations
might be a bit slower. Generally using `foreach_get/set` are the best
way to improve performance. See the differential revision for more
discussion about Python performance.

Cycles has been updated to use raw pointers and the internal Blender
mesh types, mostly because there is no sense in having this overhead
when it's already compiled with Blender. In my tests this roughly
halves the Cycles mesh creation time (0.19s to 0.10s for a 1 million
face grid).

Differential Revision: https://developer.blender.org/D15488
2022-09-05 11:56:34 -05:00
Clément Foucault
472d8f8e92 Merge branch 'blender-v3.3-release' 2022-09-05 10:06:31 +02:00
Clément Foucault
3ae996c293 Fix T100649: Regression: Environment texture is stretched when added to mesh
The new code was not using the correct default attribute. Add access to
`g_data.P` through `node_tex_coord_position()` to replace the old
`GPU_builtin(GPU_VIEW_POSITION)` which was used before.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D15862
2022-09-05 09:21:02 +02:00
Clément Foucault
e48a6fcc63 DRW-Next: Add uniform attributes (object attributes) support
This replaces the direct shader uniform layout declaration by a linear
search through a global buffer.

Each instance has an attribute offset inside the global buffer and an
attribute count.

This removes any padding and tighly pack all uniform attributes inside
a single buffer.

This would also remove the limit of 8 attribute but it is kept because of
compatibility with the old system that is still used by the old draw
manager.
2022-09-02 19:37:15 +02:00
Clément Foucault
789936ea1b Merge branch 'blender-v3.3-release'
# Conflicts:
#	release/scripts/addons
2022-09-02 18:28:46 +02:00
Omar Emara
719a0378ae Cleanup: Use NODE_STORAGE_FUNCS for compositor nodes
This patches replaces the custom node storage acessor functions from the
viewport compositor code and replaces it with NODE_STORAGE_FUNCS.
2022-09-02 18:12:31 +02:00
Clément Foucault
874e9cbab9 Fix T99528: EEVEE: Regression: Faulty shaders when using Volume Info node
Workaround the issue by adding an intermediate function. This is usually
the case when working with attributes.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D15860
2022-09-02 18:11:11 +02:00
Omar Emara
633117669b Realtime Compositor: Implement dilate erode node
This patch implements the dilate/erode node for the realtime compositor.

Differential Revision: https://developer.blender.org/D15790

Reviewed By: Clement Foucault
2022-09-02 14:47:39 +02:00
Clément Foucault
de818d81c3 Fix T98190: EEVEE: Very slow rendering on Intel HD Graphics 4400
This particular GPU driver does not constant fold all the way in order
to discard the unused branches.

To workaround that, we introduce a series of material flag that generates
defines that only keep used branches.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D15852
2022-09-02 13:51:43 +02:00
Monique Dewanchand
17501c146e Cleanup: Remove/replace View Layer macros.
This patch is a cleanup required before refactoring the view layer syncing
process {T73411}.

* Remove FIRSTBASE.
* Remove LASTBASE.
* Remove BASACT.
* Remove OBEDIT_FROM_WORKSPACE.
* Replace OBACT with BKE_view_layer_active_object.
* Replace OBEDIT_FROM_VIEW_LAYER with BKE_view_layer_edit_object.

Reviewed By: mont29

Maniphest Tasks: T73411

Differential Revision: https://developer.blender.org/D15799
2022-09-01 10:22:43 +02:00
Hans Goudey
91d9f46aec Cleanup: Use const for node data in compositor
Push the const usage a bit further for compositor nodes, so that they
are more explicit about not modifying original nodes from the editor.

Differential Revision: https://developer.blender.org/D15822
2022-08-31 12:06:13 -05:00
Joseph Eagar
373e69b94e Merge branch 'blender-v3.3-release' 2022-08-31 09:46:33 -07:00
Dalai Felinto
30ec628d43 UI: Fix Geometry Nodes "Is Face Planar" name
Old name: "Face is Planar"
New name: "Is Face Planar"

This follows the current convention (Is Shade Smooth, Is Viewport, ...).
2022-08-31 17:31:04 +02:00
Dalai Felinto
db98007c3a UI: Fix Geometry Nodes "Mesh to Volume" name (typo)
Old name: "Mesh To Volume"
New name: "Mesh to Volume"

This is consistent with what we do for the other nodes
(Mesh to Curve, Mesh to Points).
2022-08-31 17:30:39 +02:00
Hans Goudey
f1c0249f34 Mesh: Move material indices to a generic attribute
This patch moves material indices from the mesh `MPoly` struct to a
generic integer attribute. The builtin material index was already
exposed in geometry nodes, but this makes it a "proper" attribute
accessible with Python and visible in the "Attributes" panel.

The goals of the refactor are code simplification and memory and
performance improvements, mainly because the attribute doesn't have
to be stored and processed if there are no materials. However, until
4.0, material indices will still be read and written in the old
format, meaning there may be a temporary increase in memory usage.

Further notes:
* Completely removing the `MPoly.mat_nr` after 4.0 may require
  changes to DNA or introducing a new `MPoly` type.
* Geometry nodes regression tests didn't look at material indices,
  so the change reveals a bug in the realize instances node that I fixed.
* Access to material indices from the RNA `MeshPolygon` type is slower
  with this patch. The `material_index` attribute can be used instead.
* Cycles is changed to read from the attribute instead.
* BMesh isn't changed in this patch. Theoretically it could be though,
  to save 2 bytes per face when less than two materials are used.
* Eventually we could use a 16 bit integer attribute type instead.

Ref T95967

Differential Revision: https://developer.blender.org/D15675
2022-08-31 09:09:01 -05:00
Sergey Sharybin
310a43bcac Cleanup: Resolve unused-lambda-capture warning 2022-08-31 15:20:45 +02:00
Jacques Lucke
25e307d725 Nodes: move NodeTreeRef functionality into node runtime data
The purpose of `NodeTreeRef` was to speed up various queries on a read-only
`bNodeTree`. Not that we have runtime data in nodes and sockets, we can also
store the result of some queries there. This has some benefits:
* No need for a read-only separate node tree data structure which increased
  complexity.
* Makes it easier to reuse cached queries in more parts of Blender that can
  benefit from it.

A downside is that we loose some type safety that we got by having different
types for input and output sockets, as well as internal and non-internal links.

This patch also refactors `DerivedNodeTree` so that it does not use
`NodeTreeRef` anymore, but uses `bNodeTree` directly instead.

To provide a convenient API (that is also close to what `NodeTreeRef` has), a
new approach is implemented: `bNodeTree`, `bNode`, `bNodeSocket` and `bNodeLink`
now have C++ methods declared in `DNA_node_types.h` which are implemented in
`BKE_node_runtime.hh`. To make this work, `makesdna` now skips c++ sections when
parsing dna header files.

No user visible changes are expected.

Differential Revision: https://developer.blender.org/D15491
2022-08-31 12:16:13 +02:00
Charlie Jolly
bfa0ee13d5 Node: Mix node
This patch is a response to T92588 and is implemented
as a Function/Shader node.

This node has support for Float, Vector and Color data types.

For Vector it supports uniform and non-uniform mixing.

For Color it now has the option to remove factor clamping.

It replaces the Mix RGB for Shader and Geometry node trees.

As discussed in T96219, this patch converts existing nodes
in .blend files. The old node is still available in the
Python API but hidden from the menus.

Reviewed By: HooglyBoogly, JacquesLucke, simonthommes, brecht

Maniphest Tasks: T92588

Differential Revision: https://developer.blender.org/D13749
2022-08-31 00:13:57 +01:00
Hans Goudey
b5bc086864 Cleanup: Avoid using geometry component unnecessarily 2022-08-30 17:00:36 -05:00
Hans Goudey
cccc6d6905 Mesh: Avoid redundant custom data layer initialization
In all these cases, it was clear that the layer values were set right
after the layer was created anyway. So there's no point in using
calloc or setting the values to zero first.

See 25237d2625 for more info.
2022-08-30 16:27:43 -05:00
Hans Goudey
3090edfecf Cleanup: Use standard variable name for curve points 2022-08-30 15:32:10 -05:00
Hans Goudey
25237d2625 Attributes: Improve custom data initialization options
When allocating new `CustomData` layers, often we do redundant
initialization of arrays. For example, it's common that values are
allocated, set to their default value, and then set to some other
value. This is wasteful, and it negates the benefits of optimizations
to the allocator like D15082. There are two reasons for this. The
first is array-of-structs storage that makes it annoying to initialize
values manually, and the second is confusing options in the Custom Data
API. This patch addresses the latter.

The `CustomData` "alloc type" options are rearranged. Now, besides
the options that use existing layers, there are two remaining:
* `CD_SET_DEFAULT` sets the default value.
  * Usually zeroes, but for colors this is white (how it was before).
  * Should be used when you add the layer but don't set all values.
* `CD_CONSTRUCT` refers to the "default construct" C++ term.
  * Only necessary or defined for non-trivial types like vertex groups.
  * Doesn't do anything for trivial types like `int` or `float3`.
  * Should be used every other time, when all values will be set.

The attribute API's `AttributeInit` types are updated as well.
To update code, replace `CD_CALLOC` with `CD_SET_DEFAULT` and
`CD_DEFAULT` with `CD_CONSTRUCT`. This doesn't cause any functional
changes yet. Follow-up commits will change to avoid initializing
new layers where the correctness is clear.

Differential Revision: https://developer.blender.org/D15617
2022-08-30 14:56:05 -05:00
Hans Goudey
82a46ea6f8 Geometry Nodes: Use separate field context for each geometry type
Using the same `GeometryComponentFieldContext` for all situations,
even when only one geometry type is supported is misleading, and mixes
too many different abstraction levels into code that could be simpler.
With the attribute API moved out of geometry components recently,
the "component" system is just getting in the way here.

This commit adds specific field contexts for geometry types: meshes,
curves, point clouds, and instances. There are also separate field input
helper classes, to help reduce boilerplate for fields that only support
specific geometry types.

Another benefit of this change is that it separates geometry components
from fields, which makes it easier to see the purpose of the two concepts,
and how they relate.

Because we want to be able to evaluate a field on just `CurvesGeometry`
rather than the full `Curves` data-block, the generic "geometry context"
had to be changed to avoid using `GeometryComponent`, since there is
no corresponding geometry component type. The resulting void pointer
is ugly, but only turns up in three places in practice. When Apple clang
supports `std::variant`, that could be used instead.

Differential Revision: https://developer.blender.org/D15519
2022-08-30 11:08:27 -05:00
Hans Goudey
b814f64f4a Fix: Broken build with OpenVDB turned off
Problem with e3a6a2f412.
2022-08-29 14:50:26 -05:00
Hans Goudey
dff15bb5bf Fix: Broken build with OpenVDB turned off
Problem with e3a6a2f412.
2022-08-29 12:12:16 -05:00
Jacques Lucke
1567dca657 Merge branch 'blender-v3.3-release' 2022-08-29 17:01:01 +02:00
Jacques Lucke
e3a6a2f412 Fix T99004: scaling volume down results in crash
OpenVDB crashes when the determinant of the grid transformation is
too small. The solution is too detect when the determinant is too small
and to replace the grid with an empty one. If possible the translation
and rotation of the grid remains unchanged.

Differential Revision: https://developer.blender.org/D15806
2022-08-29 17:00:08 +02:00
Campbell Barton
28750bcf7e Cleanup: replace NULL with nullptr for C++ files 2022-08-28 20:52:28 +10:00
Richard Antalik
a77a1bcae7 Merge branch 'blender-v3.3-release' 2022-08-23 15:09:50 +02:00
Campbell Barton
ffb6cc263f Cleanup: format 2022-08-23 22:55:48 +10:00
Omar Emara
6319dcb230 Fix: Missing compositor domain priority for filter nodes
Domain priorities were accidentally left out of the patches for the
filter nodes. This patch adds them appropriately.
2022-08-23 09:33:28 +02:00
Omar Emara
655e9eabc3 Cleanup: Turn filter node methods into an Enum
This patch turns the filter node methods into an enum and renames the
members from FILT into FILTER for easier writing.
2022-08-23 09:24:25 +02:00
Jacques Lucke
7f6cd405b9 Merge branch 'blender-v3.3-release' 2022-08-22 18:16:09 +02:00
Jacques Lucke
4fecf652e2 Fix T100568: triangulate node resets vertices to rest position
The triangulate node is not supposed to take shape keys into account.
This was likely a mistake in rBabf30007abdac2a5bf3a1.
2022-08-22 18:15:33 +02:00
Jacques Lucke
3345e8ed3c Merge branch 'blender-v3.3-release' 2022-08-22 16:31:53 +02:00
Iliya Katueshenock
5fff6c419c Fix T100258: wrong spline length used in Spline Parameter node
Differential Revision: https://developer.blender.org/D15705
2022-08-22 16:30:18 +02:00
Bastien Montagne
500e4d540a Merge branch 'blender-v3.3-release'
Conflicts:
	release/scripts/startup/bl_ui/space_userpref.py
2022-08-22 15:44:44 +02:00
Damien Picard
ee985fa925 I18n: disambiguate a few translations
- Keying (keyframe insertion)
- Roughness (particle children)
- New image, collection, text (in menus)
- Parents (particles)
- Wrap (text)
- Light (add menu)
- Empty (volume add menu)
- Empty (empty add menu)
- Cycles (f-curve modifier)
- Drag (workspace tool type)
- Power (light intensity)
- Power (math nodes)

This last change also moves all math operations in nodes to the
ID_nodetree context. It's needed only for some operations, but we
can't be more granular here.

Also...

- Fix context extraction for interpolation mode headers in F-Curves
  and GPencil interpolation operator
- Enable new translation: "Slot %d" in image editor
- Fix an English message in the node editor:
  "Replace the input image's alpha channels by..." -> channel

Ref. T43295

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D15694
2022-08-22 14:33:07 +02:00
Campbell Barton
1a3bc09e89 Cleanup: spelling in comments 2022-08-19 13:49:13 +10:00
Brecht Van Lommel
790d57b88a Fix build error when not using unity build 2022-08-18 18:56:17 +02:00
Omar Emara
885e7abed1 Realtime Compositor: Implement bilateral blur node
This patch implements the bilateral blur node for the realtime compositor.

Differential Revision: https://developer.blender.org/D15674

Reviewed By: Clement Foucault
2022-08-18 17:16:14 +02:00
Omar Emara
7d4aa0db9e Realtime Compositor: Implement despeckle node
This patch implements the despeckle node for the realtime compositor.

Differential Revision: https://developer.blender.org/D15673

Reviewed By: Clement Foucault
2022-08-18 16:53:16 +02:00
Omar Emara
1854d31321 Realtime Compositor: Implement directional blur node
This patch implements the directional blur node for the realtime compositor.

Differential Revision: https://developer.blender.org/D15672

Reviewed By: Clement Foucault
2022-08-18 12:20:18 +02:00
Omar Emara
b828d453e9 Realtime Compositor: Implement filter node
This patch implements the filter node for the realtime compositor.

Differential Revision: https://developer.blender.org/D15661

Reviewed By: Clement Foucault
2022-08-18 12:00:14 +02:00