Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-09-09Geometry Nodes: fields and anonymous attributesJacques Lucke
This implements the initial core framework for fields and anonymous attributes (also see T91274). The new functionality is hidden behind the "Geometry Nodes Fields" feature flag. When enabled in the user preferences, the following new nodes become available: `Position`, `Index`, `Normal`, `Set Position` and `Attribute Capture`. Socket inspection has not been updated to work with fields yet. Besides these changes at the user level, this patch contains the ground work for: * building and evaluating fields at run-time (`FN_fields.hh`) and * creating and accessing anonymous attributes on geometry (`BKE_anonymous_attribute.h`). For evaluating fields we use a new so called multi-function procedure (`FN_multi_function_procedure.hh`). It allows composing multi-functions in arbitrary ways and supports efficient evaluation as is required by fields. See `FN_multi_function_procedure.hh` for more details on how this evaluation mechanism can be used. A new `AttributeIDRef` has been added which allows handling named and anonymous attributes in the same way in many places. Hans and I worked on this patch together. Differential Revision: https://developer.blender.org/D12414
2021-09-08Fix T91241: wrong labels and identifiers for id socketsJacques Lucke
`nodeAddSocket` expects the name and identifier in a different order.
2021-09-08UI: Remove label of mode in Point Instance nodeHans Goudey
There isn't enough space for this label at the default node width, and it was obvious what the drop-down is doing anyway.
2021-09-07Fix T91093: off by one error in when resampling curveJacques Lucke
The bug existed in the Curve Resample and Curve to Points node. Differential Revision: https://developer.blender.org/D12416
2021-09-07Fix T91238: crash when instancing geometry group inputJacques Lucke
2021-09-06Fix T91187: incorrect socket identifierJacques Lucke
2021-09-06Geometry Nodes: support for geometry instancingJacques Lucke
Previously, the Point Instance node in geometry nodes could only instance existing objects or collections. The reason was that large parts of Blender worked under the assumption that objects are the main unit of instancing. Now we also want to instance geometry within an object, so a slightly larger refactor was necessary. This should not affect files that do not use the new kind of instances. The main change is a redefinition of what "instanced data" is. Now, an instances is a cow-object + object-data (the geometry). This can be nicely seen in `struct DupliObject`. This allows the same object to generate multiple geometries of different types which can be instanced individually. A nice side effect of this refactor is that having multiple geometry components is not a special case in the depsgraph object iterator anymore, because those components are integrated with the `DupliObject` system. Unfortunately, different systems that work with instances in Blender (e.g. render engines and exporters) often work under the assumption that objects are the main unit of instancing. So those have to be updated as well to be able to handle the new instances. This patch updates Cycles, EEVEE and other viewport engines. Exporters have not been updated yet. Some minimal (not master-ready) changes to update the obj and alembic exporters can be found in P2336 and P2335. Different file formats may want to handle these new instances in different ways. For users, the only thing that changed is that the Point Instance node now has a geometry mode. This also fixes T88454. Differential Revision: https://developer.blender.org/D11841
2021-09-06Nodes: fix incorrect id socket updateJacques Lucke
The issue was that the entire socket was rebuild, even though only its `SOCK_HIDE_LABEL` flag changed. This broke e.g. Object sockets from old files.
2021-09-05Compositor: New Posterize NodeAaron Carlisle
The posterize node limits the number of colors per channel. This is useful to generate masks or to generate stylized images Both the tiled and full-frame implementation are included in this patch {F10314012} Reviewed By: manzanilla, jbakker Differential Revision: https://developer.blender.org/D12304
2021-09-04Fix T91119: Curve to mesh node inverted face normalsHans Goudey
Previously I thought I fixed this by reversing the face corner indices in quads created by the curve to mesh node. But then we fixed a problem with the transforms used in that node by inverting one of their components, so the required direction also reversed. This commit reverts rBcf28398471c84 and reverses the default direction of the quadrilateral primitive so it's the same as the others. Tests will be updated.
2021-09-03Cleanup: convert function nodes socket list to use new APIRajesh Advani
The new API was introduced in rB1e69a25043120cc8dddc3f58622eb50e1443def1. Differential Revision: https://developer.blender.org/D12380
2021-09-02Cleanup: Convert geometry nodes socket list to use new APIJohnny Matthews
The new API introduced in rB1e69a25043120c provides a shorted, more flexibly way to declare node socket inputs and outputs. This commit updates all geometry nodes to use the `NodeSocketBuilder` API, except the four nodes that need `SOCK_HIDE_VALUE` or `SOCK_MULTI_INPUT`. Differential Revisions: D12377, D12376, D12374, D12373, D12372
2021-08-31Cleanup: Use C style comments for descriptive textCampbell Barton
2021-08-30Fix: add virtual destructor to base classJacques Lucke
2021-08-30Cleanup: clang-tidyJacques Lucke
readability-named-parameter
2021-08-30Nodes: add more flexible method to declare sockets of a nodeJacques Lucke
Previously, built-in nodes had to implement "socket templates" (`bNodeSocketTemplate`) to tell Blender which sockets they have. It was nice that this was declarative, but this approach was way too rigid and was cumbersome to use in many cases. This commit starts to move us away from this rigid structure by letting nodes implement a function that declares the sockets the node has. Right now this is used as a direct replacement of the "socket template" approach to keep the refactor smaller. It's just a bit easier to read and write. In the future we want to support more complex features like dynamic numbers of sockets and type inferencing. Those features will be easier to build on this new approach. This new approach can live side by side with `bNodeSocketTemplate` for a while. That makes it easier to update nodes one by one. Note: In `bNodeSocketTemplate` socket identifiers were made unique automatically. In this new approach, one has to specify unique identifiers manually (unless the name is unique already). Differential Revision: https://developer.blender.org/D12335
2021-08-30Geometry Nodes: Curve Fill NodeErik Abrahamsson
This node takes a curve geometry input and creates a filled mesh at Z=0 using a constrained Delaunay triangulation algorithm. Because of the choice of algorithm, the results should be higher quality than the filling for 2D curve objects. This commit adds an initial fairly simple version of the node, but more features may be added in the future, like transferring attributes when necessary, or an index attribute input to break up the calculations into smaller chunks to improve performance. Differential Revision: https://developer.blender.org/D11846
2021-08-30Cleanup: Add comment about suspicious O(n^3) loopHans Goudey
2021-08-30Geometry Nodes: Enhance the cube mesh primitive as a cuboidRajesh Advani
This mesh primitive enhances the Cube mesh primitive and allows the creation of a cuboid with a configurable size and number of vertices in all 3 directions. The Cube primitive is now similar to the Grid primitive except that it works in 3 dimensions. Previously it was possible to create a cube and scale it arbitrarily along each axis. You could also subdivide the mesh, but the number of subdivisions was equal along all axes. This meant that making the basic frame for something like modular buildings wasn't trivial. Inspired by tutorials and files for modular building creation. The cuboid is created as a `Mesh` so that large meshes with millions of faces are created quickly. Though edge calculation could be faster if implemented here, edges are calculated using `BKE_mesh_calc_edges` to reduce complexity, and in hopes that they may be calculated lazily for `Mesh` in the future like vertex normals. See the differential revision for more information. Differential Revision: https://developer.blender.org/D11810
2021-08-30Geometry Nodes: Allow for one vertex in grid nodeMattias Fredriksson
This commit allows setting the number of vertices in either direction to 1, so that the primitive grid node will create a line instead of a grid. To avoid confusion the soft limits of the input sockets are not changed, so this is purely an increase in flexibility for when it is helpful. Differential Revision: https://developer.blender.org/D11772
2021-08-30Fix: Circle mesh primitive outer edges do not renderMattias Fredriksson
The outer edges created om the circle mesh primitive node weren't marked with the flags that makes them show in wireframe mode. Differential Revision: https://developer.blender.org/D12152
2021-08-26Cleanup: Refactor proximity node to be more data type agnosticHans Goudey
Before, distances from each component were handled in the same loop, making it more complicated to add support for more component types in the future (and probably hurting performance by dealing with two BVH trees at the same time, though I didn't test that). Now each component is handled in a separate function, so that adding support for another component type is much simpler.
2021-08-25Cleanup: Use shorter enum item namesHans Goudey
2021-08-25Cleanup: Remove unecessary variablesHans Goudey
Instead of passing separate booleans for whether to store the locations and distances, check if the spans are empty. And instead of passing a separate boolean for whether there is valid tree data, pass a pointer to the data.
2021-08-23Fix T88107: rename Convertor to Converter nodes to correct spellingJames Partsafas
Differential Revision: https://developer.blender.org/D11198
2021-08-20Functions: remove multi-function networkJacques Lucke
The multi-function network system was able to compose multiple multi-functions into a new one and to evaluate that efficiently. This functionality was heavily used by the particle nodes prototype a year ago. However, since then we only used multi-functions without the need to compose them in geometry nodes. The upcoming "fields" in geometry nodes will need a way to compose multi-functions again. Unfortunately, the code removed in this commit was not ideal for this different kind of function composition. I've been working on an alternative that will be added separately when it becomes needed. I've had to update all the function nodes, because their interface depended on the multi-function network data structure a bit. The actual multi-function implementations are still the same though.
2021-08-20Cleanup: remove duplicate lineJacques Lucke
2021-08-19Cleanup: correction to unused warning removalCampbell Barton
This broke building without opensubdiv
2021-08-19Cleanup: unused warningCampbell Barton
2021-08-18Geometry Nodes: Add shader Color Mix nodeCharlie Jolly
Port color mix shader node to Geometry Nodes. Differential Revision: https://developer.blender.org/D10585
2021-08-17Cleanup: clang-formatCampbell Barton
2021-08-16Geometry Nodes: Add UV Smooth, Boundary Smooth options to subdivision nodeEitan
Replaces the boolean option with enum menus for consistency with the subdivision modifier (rB66151b5de3ff,rB3d3b6d94e6e). Adds all UV interpolation options. Original patch by Eitan. Updated by Himanshi Kalra <calra>. {F9883204} Reviewed By: HooglyBoogly Differential Revision: https://developer.blender.org/D10417
2021-08-14Cleanup: Variable names, formatting, reduce indentationHans Goudey
2021-08-11Fix T88033: Python reference memory leaks for non main data-blocksCampbell Barton
ID data-blocks that could be accessed from Python and weren't freed using BKE_id_free_ex did not release the Python reference count. Add BKE_libblock_free_data_py function to clear the Python reference in this case. Add asserts to ensure no Python reference is held in situations when ID's are copied for internal use (not exposed through the RNA API), to ensure these kinds of leaks don't go by unnoticed again.
2021-08-10Geometry Nodes: Add labels for switch node texture socketsWannes Malfait
This makes texture sockets have a label by default. This can be changed by adding the SOCK_HIDE_LABEL flag to the socket. With this change the switch node now shows the labels "True" and "False" like for the other types of sockets.
2021-08-09Fix T90547: Add node errors when compiled without OpenVDB or BulletHans Goudey
These were added in other places but were overlooked here.
2021-08-06Geometry Nodes: Select by Handle Type NodeHans Goudey
Just like the "Select by Material" node, this node outputs a boolean attribute for control points that have a matching handle type. By default left and right handles are considered, but it's possible to only check one side with the toggle in the node. Differential Revision: https://developer.blender.org/D12135
2021-08-06Fix: Avoid floating point error in some mesh primitive nodesMattias Fredriksson
Some mesh primitives created using geometry nodes use loops to create vertices and accumulates positions/angles in FP variables. This allows rounding errors to accumulate and can introduce significant errors. To minimize changes from original implementation, variables allowing errors to accumulate are replaced by: delta * index. Affected Mesh Primitives nodes are Line, Grid, Cylinder, Circle, Cone, and UV-Sphere. Differential Revision: https://developer.blender.org/D12136
2021-08-05Geometry Nodes: Add more warnings for out of bounds parametersEitan
Add warning(info) to nodes that don't work when an input value is out of range. For example, the grid node doesn't work with Vertices X or Verices Y less than 2. These are purposefully added as "Info" warnings, because they don't show in the modifier and they aren't printed to the terminal. Differential Revision: https://developer.blender.org/D11923
2021-08-05Cleanup: remove redundant parenthesisCampbell Barton
2021-08-05Cleanup: license headersCampbell Barton
These were removed globally in 65ec7ec524e667ec95ce947a95f6273088dffee6. Some files re-introduced these conventions since.
2021-08-04Fix T87635: Rename shader node "Specular" to "Specular BSDF"Pratik Borhade
Node name edited in Specular node definition Reviewed By: fclem Maniphest Tasks: T87635 Differential Revision: https://developer.blender.org/D11022
2021-08-04Geometry Nodes: Curve Set Spline TypeJohnny Matthews
This node sets the selected (or all) splines in curve to a chosen target spline type. Poly, Bezier, and NURB splines can be converted to any of the other types. This is meant to be a building block node, useful in many procedural situations. In the future the node could be optimized with multi-threading, or by avoiding copying in many cases, either by retrieving the curve for write access or by passing the raw vectors to the new splines where possible. With edits from Hans Goudey (@HooglyBoogly) Differential Revision: https://developer.blender.org/D12013
2021-08-02Mesh: Tag normals dirty instead of calculatingHans Goudey
Because mesh vertex and face normals are just derived data, they can be calculated lazily instead of eagerly. Often normal calculation is a relatively expensive task, and the calculation is often redundant if the mesh is deformed afterwards anyway. Instead, normals should be calculated only when they are needed. This commit moves in that direction by adding a new function to tag a mesh's normals dirty and replacing normal calculation with it in some places. Differential Revision: https://developer.blender.org/D12107
2021-08-02Cleanup: separate base and geometry nodes specific socket cpp typeJacques Lucke
This simplifies changing how geometry nodes handles different socket types without affecting other systems.
2021-08-01Cleanup: Sort node types alphabeticallyHans Goudey
2021-07-31Cleanup: Remove unecessary helper functionHans Goudey
Retrieving a mesh's looptris now take's a const mesh after rB5f8969bb4b4, which removes the need for this function. Since it's only two lines, avoiding the use of a separate function in this case is simpler.
2021-07-30Cleanup: headers, use 'pragma once', remove argument to '\file'Campbell Barton
2021-07-30Cleanup: clang-format (re-run after v12 version bump)Campbell Barton
2021-07-27Geometry Nodes: Add node labels to Attribute maths nodesCharlie Jolly
This adds the operator name to the node label which is consistent with the shading nodes. The vector node has `Vector` as a prefix. The Attribute nodes already have a different coloured header. The same label is used when collapsing nodes, this helps readability. Reviewed By: pablovazquez Differential Revision: https://developer.blender.org/D10749