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-12-15Node Editor: Link Drag Search MenuHans Goudey
This commit adds a search menu when links are dragged above empty space. When releasing the drag, a menu displays all compatible sockets with the source link. The "main" sockets (usually the first) are weighted above other sockets in the search, so they appear first when you type the name of the node. A few special operators for creating a reroute or a group input node are also added to the search. Translation is started after choosing a node so it can be placed quickly, since users would likely adjust the position after anyway. A small "+" is displayed next to the cursor to give a hint about this. Further improvements are possible after this first iteration: - Support custom node trees. - Better drawing of items in the search menu. - Potential tweaks to filtering of items, depending on user feedback. Thanks to Juanfran Matheu for developing an initial patch. Differential Revision: https://developer.blender.org/D8286
2021-12-09Geometry Nodes: Scene Time NodeJohnny Matthews
This node outputs the current scene time in seconds or in frames. Use of this node eliminates the need to use drivers to control values in the node tree that are driven by the scene time. Frame is a float value to provide for subframe rendering for motion blur. Differential Revision: https://developer.blender.org/D13455
2021-12-08Geometry Nodes: Mesh Island NodeJohnny Matthews
This node is a field input that outputs a separate index for each mesh island. The indices are based on the order of the lowest-numbered vertex in each island. Authoring help from @hooglyboogly Differential Revision: https://developer.blender.org/D13504
2021-12-07Geometry Nodes: Edge Neighbors NodeJohnny Matthews
Creates a new Edge Neighbors node which outputs a field containing the number of faces connected to each edge. Differential Revision: https://developer.blender.org/D13493
2021-12-07Geometry Nodes: new Geometry to Instance nodeJacques Lucke
This adds a new Geometry to Instance node that turns every connected input geometry into an instance. Those instances can for example be used in the Instance on Points node. Differential Revision: https://developer.blender.org/D13500
2021-12-06Geometry Nodes: 4 Field Inputs for Mesh Topology DataJohnny Matthews
Creates 4 new nodes which provide topology information for the mesh. Values are interpolated from the primary domain in each case using basic attribute interpolation. Vertex Neighbors - Vertex Count - Face Count Face Neighbors - Vertex Count - Neighboring Face Count Edge Vertices - Vertex Index 1 - Vertex Index 2 - Position 1 - Position 2 Face Area - Face Area Differential Revision: https://developer.blender.org/D13343
2021-12-01Geometry Nodes: Dual Mesh NodeWannes Malfait
This node calculates the dual of the input mesh. This means that faces get replaced with vertices and vertices with faces. In principle this only makes sense when the mesh in manifold, but there is an option to keep the (non-manifold) boundaries of the mesh intact. Attributes are propagated: - Point domain goes to face domain and vice versa - Edge domain and Face corner domain gets mapped to itself Because of the duality, when the mesh is manifold, the attributes get mapped to themselves when applying the node twice. Thanks to Leul Mulugeta (@Leul) for help with the ascii diagrams in the code comments. Note that this does not work well with some non-manifold geometry, like an edge connected to more than 2 faces, or a vertex connected to only two faces, while not being in the boundary. This is because there is no good way to define the dual at some of those points. This type of non-manifold vertices are just removed for this reason. Differential Revision: https://developer.blender.org/D12949
2021-11-30Geometry Nodes: Rename Curve Parameter, Add Index on SplineJohnny Matthews
- Rename the Curve Parameter node to Spline Parameter. - Add "Index on Spline" to the node. This output is the index of the current point on it's parent spline rather than the entrire curve. Differential Revision: https://developer.blender.org/D13275
2021-11-29Geometry Nodes: Domain Size NodeJohnny Matthews
The Domain Size node has a single geometry input and a selection for the component type. Based on the component chosen, outputs containing single values for the related domains are shown. Mesh: - Point Count - Edge Count - Face Count - Face Corner Count Curve: - Point Count - Spline Count Point Cloud: - Point Count Instances: - Instance Count Differential Revision: https://developer.blender.org/D13365
2021-10-26Geometry Nodes: Get and set nodes for ID attributeHans Goudey
These nodes allow accessing and changing the stable/random ID used for motion blur with instances and stable randomness. Since rB40c3b8836b7a, the stable ID is a built-in attribute, so to be consistent and allow changing it in the node tree like other built-in attributes, it has get and set nodes.
2021-10-26Cleanup: Restore alphabetical orderHans Goudey
2021-10-26Geometry Nodes: Handle multiple grids in the volume to mesh nodeHans Goudey
In future use cases, a volume can contain many grids that represent the density information. In this case, it's better if the volume to mesh node creates a mesh based on all of the grids in the volume. This is also a benefit to share-ability, since one doesn't have to specify the grid name in the node. Instead, in the future we can have a way to split particular grids into separate volumes, if only one grid should be considered. The code changes are relatively simple: - Move the old volume to mesh node to the legacy folder. - Run the volume to mesh node on all instance geometry, like elsewhere. - Make the blenkernel's volume to mesh API a bit more specific. Differential Revision: https://developer.blender.org/D12997
2021-10-25Geometry Nodes: new Image Texture nodeJacques Lucke
This adds a new image texture node for geometry nodes. It does not reuse the same node that is used in shading, because we want to be able to expose the image and frame as sockets. There is a known update issue when a movie or image sequence is used. That will be fixed separately (also see D12957). Currently, the image socket is just a pointer to an Image ID data block. This can contain single images but also movies and image sequences. In the future, the definition of an image socket can be expanded to include images that are generated from scratch in the node tree. For more details read the discussion in D12827. Some of the code is a direct port from cycles and should be cleaned up a bit in the future. For example `image_cubic_texture_lookup`. For still images, the frame input is ignored. Otherwise, the frame has to be in a valid range for the node to work. In the future we may add e.g. automatic looping functionality. Differential Revision: https://developer.blender.org/D12827
2021-10-23Geometry Nodes: Add Instances to Points NodeJarrett Johnson
This node takes a geometry set with instances as input and outputs points located on the origins of the top level of instances in the geometry set (not nested instances). It also has position and radius inputs to allow overriding the default, and a selection input to only generate points for some instances. The use case for this node is a method to use geometry proximity on instance origins, but in a more generic way that is flexible and useful in other situations. Differential Revision: https://developer.blender.org/D12893
2021-10-20Geometry Nodes: Fields version of Curve to Points nodeHans Goudey
This commit adds an updated version of the curve to points that supports fields. Only the position and radius are transferred by default now, which should improve performance. The other outputs like tangent and rotation are outputted with anonymous attributes. I took the opportunity to change a few other small things: - Name geometry sockets "Curve" and "Points" like other nodes. - Remove the radius multiple of 0.1, which was confusing. Thanks to @Johnny Matthews (guitargeek) for an initial patch. Differential Revision: https://developer.blender.org/D12887
2021-10-19Geometry Nodes: Fields version of the raycast nodeHans Goudey
This patch includes an updated version of the raycast node that uses fields instead of attributes for inputs instead of outputs. This makes the node's UI much clearer. It should be faster too, since the evaluation system for fields provides multi-threading. The source position replaces the input geometry (since this node is evaluated in the context of a geometry like the other field nodes). Thanks to @guitargeek for an initial version of this patch. Differential Revision: https://developer.blender.org/D12638
2021-10-18Geometry Nodes: Endpoint Selection NodesJohnny Matthews
The Endpoint Selection node allows for the Selection of an aribitrary number of endpoints from each spline in a curve. The start and end inputs are evaluated on the spline domain. The result is outputted as a boolean field on the point domain. Differential Revision: https://developer.blender.org/D12846
2021-10-15Geometry Nodes: Updated Subdivision Surface NodeJarrett Johnson
Replaces the old Subdivision Surface Node. Changes: - Removes implicit instance realization, instead the node runs once per unique instance. - "Use Creases" becomes a crease field input applied to edges. The values are clamped between zero and one. Addresses T91763 Differential Revision: https://developer.blender.org/D12830
2021-10-15Geometry Nodes: Fields transfer attribute nodeHans Goudey
This commit adds an updated version of the old attribute transfer node. It works like a function node, so it works in the context of a geometry, with a simple data output. The "Nearest" mode finds the nearest element of the specified domain on the target geometry and copies the value directly from the target input. The "Nearest Face Interpolated" finds the nearest point on anywhere on the surface of the target mesh and linearly interpolates the value on the target from the face's corners. The node also has a new "Index" mode, which can pick data from specific indices on the target geometry. The implicit default is to do a simple copy from the target geometry, but any indices could be used. It is also possible to use a single value for the index to to retrieve a single value from an attribute at a certain index. Differential Revision: https://developer.blender.org/D12785
2021-10-14Geometry Nodes: Field version of mesh to curve nodeHans Goudey
This commit adds a fields version of the mesh to curve node, with a field for the input selection. In order to reduce code duplication, it adds the mesh to curve conversion to the new geometry module and calls that implementation from both places. More details on the geometry module can be found here: T86869 Differential Revision: https://developer.blender.org/D12579
2021-10-13Geometry Nodes: Fields version of edge split nodeHans Goudey
This changes the edge split node to have a selection input, which is more aligned with the other design changes. This loses the ability to split edges based on an angle, but the edge angle can be added as a field input node in the future, which will make for a much more flexible system. Differential Revision: https://developer.blender.org/D12829
2021-10-13Geometry Nodes: Rotate Instances NodeErik Abrahamsson
Adds a node that can rotate each of a geometry's instances in global (to the modifier object) or local space (of each point) by a specified angle around a pivot point. In the future, separating the local-global choice for the pivot and the rotation might be useful. However, for now the node is kept simple. Differential Revision: https://developer.blender.org/D12682
2021-10-13Geometry Nodes: Scale Instances NodeErik Abrahamsson
Adds a node that can scale a geometry's instances. With "Local" turned on, the instance is scaled individually from the center point input, while when local space is turned off, it's more like the transform node, except it scales outward from the center point instead of only from the origin. Differential Revision: https://developer.blender.org/D12681
2021-10-13Geometry Nodes: Translate Instances NodeErik Abrahamsson
Adds a node that can translate instances in the transform space of the modifier object, or the local space of their original transform. One reason to have a special node for instances is that they always have the existing transform, unlike mesh or point cloud points. Differential Revision: https://developer.blender.org/D12679
2021-10-13Geometry Nodes: Material Index, Set MaterialJohnny Matthews
Add Get/Set Nodes for Material Index Rename Assign Material to Set Material Differential Revision: https://developer.blender.org/D12837
2021-10-11Geometry Nodes: Add Nodes to Get/Set Built-in AttributesJohnny Matthews
This commit implements T91780, adding nodes to get and set builtin attributes. Individual set nodes are used so that the values can be exposed for direct editing, which is useful for attributes like shade smooth and spline resolution. Individual input nodes are used to allow reusing nodes for multiple components, and to allow grouping multiple outputs conceptually in the same node in the future. Input Nodes - Radius - Curve Tilt - Curve Handle Positions - Is Shade Smooth - Spline Resolution - Is Spline Cyclic 'Set' Nodes - Curve Radius - Point Radius - Curve Tilt - Curve Handle Positions - Is Shade Smooth - Spline Resolution - Is Spline Cyclic Using hardcoded categories is necessary to add separators to the node menu. Differential Revision: https://developer.blender.org/D12687
2021-10-11Geometry Nodes: Separate and Delete Geometry for fieldsWannes Malfait
Delete Geometry: This adds a copy of the old node in the legacy folder and updates the node to work with fields. The invert option is removed, because it is something that should be very easy with fields, and to be consistent with other nodes which have a selection. There is also a dropdown to select the domain, because the domain can't be determined from the field input. When the domain does not belong on any of the components an info message is displayed. Separate Geometry: A more general version of the old Point Separate node. The "inverted" output is the same as using the delete geometry node. Differential Revision: https://developer.blender.org/D12574
2021-10-03Geometry Nodes: Handle Type Selection Node UpdateJohnny Matthews (guitargeek)
This node creates a boolean field selection of bezier spline points that have a handle of the given type on the selected 'side' of the contol point. This is evaluated on the point domain. Differential Revision: https://developer.blender.org/D12559
2021-10-03Geometry Nodes: Points to Volume Fields UpdateJohnny Matthews (guitargeek)
This update of the Points to Volume node allows a field to populate the radius input of the node and removes the implicit realization of instances. Differential Revision: https://developer.blender.org/D12531
2021-10-01Geometry Nodes: Set Handle Type Node Field Updateguitargeek
This update of the Set Handle Type node allows for a bool field to be used as the selection of the affected control point handles for bezier splines. If no bezier splines are provided a info message is shown. Differential Revision: https://developer.blender.org/D12526
2021-10-01Geometry Nodes: Set Spline Type Node Field Updateguitargeek
This update of the Set Spline Type node allows for a bool field to be used as the selection of the affected splines. Differential Revision: https://developer.blender.org/D12522
2021-10-01Geometry Nodes: Spline Length Input Nodeguitargeek
The Spline Length Input node provides a field containing the length of the current evaluated spline to the Point and Spline domains. Differential Revision: https://developer.blender.org/D12706
2021-10-01Geometry Nodes: Curve Subdivide Node with Fieldsguitargeek
The curve subdivide node can now take an int field to specify the number of subdivisions to make at each curve segment. Reviewed by: Hans Goudey Differential Revision: https://developer.blender.org/D12534
2021-09-28Geometry Nodes: Fields version of attribute proximity nodeHans Goudey
Add a fields-aware implementation of the attribute proximity node. The Source position is an implicit position field, but can be connected with a position input node with alterations before use. The target input and mode function the same as the original node. Patch by Johnny Matthews with edits from Hans Goudey (@HooglyBoogly). Differential Revision: https://developer.blender.org/D12635
2021-09-28Cleanup: Sort node types alphabeticallyHans Goudey
2021-09-28Geometry Nodes: Field version of curve reverse nodeJohnny Matthews
The updated version has a selection input as a field and does not realize instances implicitly. Differential Revision: https://developer.blender.org/D12506
2021-09-28Geometry Nodes: Mesh Point Cloud Conversion NodesHans Goudey
This commit adds nodes to do direct conversion between meshes and point clouds in geometry nodes. The conversion from mesh to points is helpful to instance once per face, or once per edge, which was previously only possibly with ugly work-arounds. Fields can be evaluated on the mesh to pass them to the points with the attribute capture node. The other conversion, point cloud to mesh vertices, is a bit less obvious, though it is still a common request from users. It's helpful for flexibility when passing data around, better visualization in the viewport (and in the future, cycles), and the simplicity of points. This is a step towards T91754, where point clouds are currently combined with meshes when outputing to the next modifier after geometry nodes. Since we're removing the implicit behavior for realizing instances, it feels natural to use an explicit node to convert points to vertices too. Differential Revision: https://developer.blender.org/D12657
2021-09-27Geometry Nodes: new Instance on Points nodeJacques Lucke
This adds a new Instance on Points node that is a replacement for the old Point Instance node. Contrary to the old node, it does not have a mode to instance objects or collections directly. Instead, the node has to be used with an Object/ Collection Info to achieve the same effect. Rotation and scale of the instances can be adjusted in the node directly or can be controlled with a field to get some variation between instances. The node supports placing different instances on different points. The user has control over which instance is placed on which point using an Instance Index input. If that functionality is used, the Instance Geometry has to contain multiple instances that can are instanced separately. Differential Revision: https://developer.blender.org/D12478
2021-09-24Geometry Nodes: Random Value NodeJohnny Matthews
This node replaces the deprecated Attribute Randomize node, populating a vector, float, integer or boolean field with random values. Vector, float, and integer have min/max settings, which are also field aware. The boolean type has a probability value for controlling what portion of the output should be true. All four types have a field seed input which is implicitly driven by the index, otherwise, all values would be the same "random" value. The Random Float node is now deprecated like other nodes, since it is redundant with this node. Differential Revision: https://developer.blender.org/D12603
2021-09-24Geometry Nodes: String to Curves NodeErik Abrahamsson
This commit adds a node that generates a text paragraph as curve instances. The inputs on the node control the overall shape of the paragraph, and other nodes can be used to move the individual instances afterwards. To output more than one line, the "Special Characters" node can be used. The node outputs instances instead of real geometry so that it doesn't have to duplicate work for every character afterwards. This is much more efficient, because all of the curve evaluation and nodes like fill curve don't have to repeat the same calculation for every instance of the same character. In the future, the instances component will support attributes, and the node can output attribute fields like "Word Index" and "Line Index". Differential Revision: https://developer.blender.org/D11522
2021-09-24Geometry Nodes: new Distribute Points on Faces nodeJacques Lucke
This adds a replacement for the deprecated Point Distribute node. Arguments for the name change can be found in T91155. Descriptions of the sockets are available in D12536. Thanks to Jarrett Johnson for the initial patch! Differential Revision: https://developer.blender.org/D12536
2021-09-22Geometry Nodes: Curve Fillet Nodedilithjay
This node can be used to fillet splines at control points to create a circular arc. The implementation roughly follows T89227's design. The node works in two main modes: Bezier and Poly * Bezier: Creates a circular arc at vertices by changing handle lengths (applicable only for Bezier splines). * Poly: Creates a circular arc by creating vertices (as many as defined by the Count fields input) along the arc (applicable for all spline types). In both modes, the radius of the created arc is defined by the Radius fields input. The Limit Radius attribute can be enabled to prevent overlapping when the defined radius exceeds the maximum possible radius for a given point. Reviewed By: Hans Goudey Differential Revision: https://developer.blender.org/D12115
2021-09-22Geometry Nodes: Curve Parameter NodeHans Goudey
This commit adds a field input node that outputs the fraction of the total length of the spline on each control point. This is useful for anything that involves varying a value depending on how far along the spline it is. It also works when evaluated on the spline domain, where it outputs the fraction of the total length of all of the splines at the start. The operation isn't as well defined for NURB splines for the reasons noted in the code comment. That can be said explicitly in the docs. Differential Revision: https://developer.blender.org/D12548
2021-09-21Geometry Nodes: String manipulation nodesErik Abrahamsson
This patch adds four new nodes to a new "Text" category: - String Length: Outputs length of a string - String Substring: Outputs part of a string - Value to String: Converts a value to a string - String Join: Concatenates multiple strings with a delimiter The initial use case of these nodes is the upcoming string to curve node. However, they could also be used to calculate dynamic attribute names, or with string attributes in the future. Differential Revision: https://developer.blender.org/D12532
2021-09-21Geometry Nodes: Curve tangent nodeHans Goudey
This node outputs the direction vector, or tangent of a curve at every control point. For poly splines this is simply the evaluated tangents, so it all works very simply. For Bezier splines it uses the tangent at the evaluated point corresponding to each control point, and NURBS are interpereted as poly splines built from their control points. Internally the node is called "Input Tangent" to simplify using it for mesh tangents as well in the future like the "Normal" node. Differential Revision: https://developer.blender.org/D12581
2021-09-21Geometry Nodes: Curve Sample NodeHans Goudey
This node allows sampling positions, tangents, and normals at any arbitrary point along a curve. The curve can include multiple splines, all are taken into account. The node does not yet support transferring generic attributes like radius, because some more general tooling will make that much more feasible and useful in different scenarios. This is a field node, so it is evaluated in the context of a data-flow node like "Set Position". One nice thing about that is it can easily be used to move an entire geometry like the follow path constraint. The point along the curve is chosen either with a factor of the total length of the curve, or a length into the curve, the same choice used in the curve trim node. Differential Revision: https://developer.blender.org/D12565
2021-09-21Geometry Nodes: Attribute Statistic NodeVictor-Louis De Gusseme
This nodes evaluates a field on a geometry and outputs various statistics about the entire data set, like min, max, or even the standard deviation. It works for float and vector types currently, though more types could be supported in the future. - All statistics are calculated element-wise for vectors. - "Product" was not added since the result could very easily overflow. - The "Size" output was not added since it isn't specific to an attribute and would fit better in another node. The implementation shares work as much as possible when multiple statistics are needed. This node has been in development since the beginning of this year, with additions from Johnny Matthews and Hans Goudey. Differential Revision: https://developer.blender.org/D10202
2021-09-20Geometry Nodes: new Realize Instances nodeJacques Lucke
This node has a simple geometry input and output. If the input geometry contains instances, they will be realized into actual geometry. When there are many instances, this can be very slow and memory intensive. Generally, instances should only be made real when necessary, e.g. when every instance should be deformed independently. Differential Revision: https://developer.blender.org/D12556
2021-09-15Geometry Nodes: Add fields version of material nodesHans Goudey
This commit moves the old material nodes to a "legacy" folder and adds versions of the nodes that work with fields. The "Select by Material" node is a field node now, so it doesn't have a geometry output. This is an improvement because there are fewer links to connect, and it's more easily usable in different situations. It's also called "Material Selection", since it's more of an input than an action now. It's sometimes necessary to use the attribute capture node to get a more predictable interpolation to mesh faces. This is because the selection field input is always evaluated on the face domain, so attribute inputs are interpolated before they are booleans, so they cannot use the new interpolations from rB5841f8656d9580d7b9. Differential Revision: https://developer.blender.org/D12456
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