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-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-08Cleanup: clang-formatAaron Carlisle
2021-12-08Cleanup: Nodes: clang-tidy modernize-redundant-void-argAaron Carlisle
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-07Geometry Nodes: move type conversions to blenkernelJacques Lucke
The type conversions do not depend on other files in the nodes module. Furthermore we want to use the conversions in the geometry module without creating a dependency to the nodes module there.
2021-12-07Cleanup: Add macro and functions for node storageHans Goudey
The `node_storage` functions to retrieve const and mutable structs from a node are generated by a short macro that can be placed at the top of each relevant file. I use this in D8286 to make code snippets in the socket declarations much shorter, but I thought it would be good to use it consistently everywhere else too. The functions are also useful to avoid copy and paste errors, like the one corrected in the cylinder node in this commit. Differential Revision: https://developer.blender.org/D13491
2021-12-06Fix: Compile error in field inputHans Goudey
Instead of essentially hashing a bool, just use a ternary operator. Differential Revision: https://developer.blender.org/D13494
2021-12-06macOS: Fix build error in hash functionsAnkit Meel
Remove unneeded recent static_cast attempt. Reviewed By: HooglyBoogly Differential Revision: https://developer.blender.org/D13492
2021-12-06Cleanup: Fix warnings about copied Map loop variablesHans Goudey
The `Map::items()` iterator does not return references.
2021-12-06Fix: Attempt to fix build error on macOSHans Goudey
2021-12-06Geometry Nodes: reduce code duplication with new GeometyrFieldInputJacques Lucke
Most of our field inputs are currently specific to geometry. This patch introduces a new `GeometryFieldInput` that reduces the overhead of adding new geometry field input. Differential Revision: https://developer.blender.org/D13489
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-06Fix T93521: Single point NURBS crash in resample nodeHans Goudey
The resample node didn't handle the case of when a spline didn't have any evaluated points. For poly and Bezier splines we should never hit this case, but it is expected when the number of NURBS control points is smaller than its order, so we have to handle the case here. It's not that obvious what to do in this case, there are a few options: - Remove the bad splines from the result - Generate empty splines for those inputs - Skip resampling the bad splines, copy them to the result - Arbitrarily generate single point splines I chose option three, just skipping the "bad" splines. Since the node already has a selection input, this can be described by just extending that. "Splines with no evaluated points are implicitly deselected." The first option would probably be valid too though. Differential Revision: https://developer.blender.org/D13434
2021-12-05Fix (unreported): off-by-one error when setting curve handlesJacques Lucke
The problem is that `current_mask` can become `selection.size()`. The loop could also be refactored to break out of it when the end of the selection is reached. This can be done separately.
2021-12-02Cleanup: spelling in commentsCampbell Barton
2021-12-02Fix: Add tooltip translation marker to disabled hintsHans Goudey
This was overlooked, as it seems there's no way for these strings to be translated currently. Generally it's not that clear whether `N_` or `TIP_` should be used in this case, but `TIP_` seems more consistent. To avoid the cost of the translation lookup when the UI text isn't necessary, we could allow the disabled hint argument to be optional. Differential Revision: https://developer.blender.org/D13141
2021-12-01Geometry Nodes: deduplicate join geometry codeJacques Lucke
The Realize Instances and Join Geometry node can share most of their code. Until now, both nodes had their own implementations though. This patch removes the implementation in the Join Geometry node in favor of the more general Realize Instances implementation. This removes an optimization for avoiding spline copies. This can be brought back later. The realize instances code has to be rewritten to support attribute instances anyway. Differential Revision: https://developer.blender.org/D13417
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-12-01Geometry Nodes: Generalized Compare NodeJohnny Matthews
Replace compare floats node with a generalized compare node. The node allows for the comparison of float, int, string, color, and vector. The datatypes support the following operators: Float, Int: <, >, <=, >=, ==, != String: ==, != Color: ==, !=, lighter, darker (using rgb_to_grayscale value as the brightness value) Vector Supports 5 comparison modes for: ==, !=, <, >, <=, >= Average: The average of the components of the vectors are compared. Dot Product: The dot product of the vectors are compared. Direction: The angle between the vectors is compared to an angle Element-wise: The individual components of the vectors are compared. Length: The lengths of the vectors are compared. Differential Revision: https://developer.blender.org/D13228
2021-12-01Cleanup: Store instances id attribute with other attributesHans Goudey
Now that we can store any dynamic attribute on the instances component, we don't need the special case for `id`, it can just be handled by the generic attribute storage. Mostly this just allows removing a bunch of redundant code. I had to add a null check for `update_custom_data_pointers` because the instances component doesn't have any pointers to inside of custom data. Differential Revision: https://developer.blender.org/D13430
2021-12-01Geometry Nodes: Propagate attributes in Instances to Points nodeHans Goudey
This is part of T92926, and is very similar to 221b7b27fce3, except slightly similar, because it only transfers from one component, and it doesn't handle multi-threading at the moment.
2021-12-01Geometry Nodes: Add Point Count to Spline Length NodeJohnny Matthews
- Integer Field input of the number of control points on each spline in the spline domain. - In the point domain, it is the number of points on the spline that contains the given control point. Differential Revision: https://developer.blender.org/D13279
2021-11-30Geometry Nodes: propagate attributes in Instance on Points nodeJacques Lucke
This is part of T92926. Differential Revision: https://developer.blender.org/D13429
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-11-29Fix: Missing min value for set spline resolution nodeHans Goudey
2021-11-27Geometry Nodes: Optimize Cube primitive vertex calculationErik
This patch gets rid of the O(N^3) complexity of calculate_vertices. Execution time of the node is reduced from 250ms to 140ms with 500^3 vertices. In the future edge calculations could be done manually and reduce the execution time even further. Differential Revision: https://developer.blender.org/D13207
2021-11-27Geometry Nodes: Parallelize "Set Spline Type"-nodeErik
Parallelizes the loop that converts splines. It gives around a 2x speedup on curves with over 1k splines. Differential Revision: https://developer.blender.org/D13389
2021-11-26Geometry Nodes: add utility to set remaining outputsJacques Lucke
Differential Revision: https://developer.blender.org/D13384
2021-11-26Geometry Nodes: optimize Set Position nodeJacques Lucke
This implements four optimizations in the Set Position node: * Check whether the position input is the current position and ignore it if it is. This results in a speedup when only the Offset input is used. * Use multi-threading when copying to computed values to the position attribute. All geometry types benefit from this. * Use devirtualization for the offset and position input. This optimizes the common case that they are either single values or computed in the fly in a span. * Write to `Mesh->mvert` directly instead of creating a temporary span. This makes setting mesh vertex positions even more efficient. In my simple benchmark I'm using a White Noise node to offset the position of 1,000,000 vertices. The speed is `20 ms -> 4.5 ms` in the multi-threaded case and `32 ms -> 22 ms` in the single-threaded case.
2021-11-26Geometry Nodes: refactor multi-threading in field evaluationJacques Lucke
Previously, there was a fixed grain size for all multi-functions. That was not sufficient because some functions could benefit a lot from smaller grain sizes. This refactors adds a new `MultiFunction::call_auto` method which has the same effect as just calling `MultiFunction::call` but additionally figures out how to execute the specific multi-function efficiently. It determines a good grain size and decides whether the mask indices should be shifted or not. Most multi-function evaluations benefit from this, but medium sized work loads (1000 - 50000 elements) benefit from it the most. Especially when expensive multi-functions (e.g. noise) is involved. This is because for smaller work loads, threading is rarely used and for larger work loads threading worked fine before already. With this patch, multi-functions can specify execution hints, that allow the caller to execute it most efficiently. These execution hints still have to be added to more functions. Some performance measurements of a field evaluation involving noise and math nodes, ordered by the number of elements being evaluated: ``` 1,000,000: 133 ms -> 120 ms 100,000: 30 ms -> 18 ms 10,000: 20 ms -> 2.7 ms 1,000: 4 ms -> 0.5 ms 100: 0.5 ms -> 0.4 ms ```
2021-11-25Fix T93367: wrong attribute propagation in Delete Geometry nodeJacques Lucke
This only happened with non-point selections. It used an incorrect index mapping for the attribute propagation.
2021-11-25Merge branch 'blender-v3.0-release'Jacques Lucke
2021-11-25Fix T93362: crash when capturing attribute after fillet curve nodeJacques Lucke
The issue was that the attribute propagation in the Fillet Curve node seems pretty broken. I couldn't really make sense of the old code. It changed the size of the point attribute domains on splines to 1 for some reason which led to a crash in the next node. Differential Revision: https://developer.blender.org/D13362
2021-11-24Geometry Nodes: decouple Delete Geometry node from Mask modifierJacques Lucke
This dependency was a bit ugly and the functions from the mask modifier did a few things that we don't need in the Delete Geometry node: * The mask modifier uses `CustomData_copy_data` which the node doesn't need. * The mask modifier checks for `-2` in some values, but this special value is not used by the node. Differential Revision: https://developer.blender.org/D13335
2021-11-24CMake: add WITH_UNITY_BUILD option to improve compile timesJacques Lucke
Unity builds are only used in the `bf_nodes_geometry` module for now. This module has been prepared to support unity builds already. Usually, there is a 2-4x speedup when building `bf_nodes_geometry` compared to without unity builds (e.g. 145s to 55s). For more information about how unity builds work and how they help with compile times, see D13341. Differential Revision: https://developer.blender.org/D13341
2021-11-23Merge branch 'blender-v3.0-release'Jacques Lucke
2021-11-23Geometry Nodes: fix attribute propagation in Delete Geometry nodeJacques Lucke
Previously, attribute propagation did not work correctly in when only deleting edges and faces (but not points). Face and face corner attributes were propagated wrongly or not at all respectively. In order to keep the patch relatively small for the release branch, it does not include some small optimizations. These can be done in 3.1: * Use a `Span<int>` instead of `IndexMask` to avoid creating an unnecessary `Vector<int64_t>`. * Only prepare index mappings when there are actually attributes to propagate. Differential Revision: https://developer.blender.org/D13338
2021-11-23Cleanup: Simplify geometry node function namesHans Goudey
With this commit, we no longer use the prefixes for every node type function like `geo_node_translate_instances_`. They just added more places to change when adding a new node, for no real benefit. Differential Revision: https://developer.blender.org/D13337
2021-11-23Geometry Nodes: add namespace for every fileJacques Lucke
This puts all static functions in geometry node files into a new namespace. This allows using unity build which can improve compile times significantly (P2578). * The name space name is derived from the file name. That makes it possible to write some tooling that checks the names later on. The file name extension (`cc`) is added to the namespace name as well. This also possibly simplifies tooling but also makes it more obvious that this namespace is specific to a file. * In the register function of every node, I added a namespace alias `namespace file_ns = blender::nodes::node_geo_*_cc;`. This avoids some duplication of the file name and may also simplify tooling, because this line is easy to detect. The name `file_ns` stands for "file namespace" and also indicates that this namespace corresponds to the current file. In the beginning I used `node_ns` but `file_ns` is more generic which may make it more suitable when we want to use unity builds outside of the nodes modules in the future. * Some node files contain code that is actually shared between different nodes. For now I left that code in the `blender::nodes` namespace and moved it to the top of the file (couldn't move it to the bottom in all cases, so I just moved it to the top everywhere). As a separate cleanup step, this shared code should actually be moved to a separate file. Differential Revision: https://developer.blender.org/D13330
2021-11-23Merge branch 'blender-v3.0-release'Jacques Lucke
2021-11-23Fix T93296: raycast node uses wrong domain for face corner attributesJacques Lucke
This changes what domain is used by the raycast mode. This should fix the behavior for face corner attributes (but may make it a bit slower for other attributes). I think for 3.0 this is an acceptable trade off. For 3.1 we can do what the comment suggests already. Differential Revision: https://developer.blender.org/D13333
2021-11-23Cleanup: remove unnecessary "extern"Jacques Lucke
2021-11-22Geometry Nodes: Rename legacy node filesHans Goudey
This will be useful to solve some issues with unity builds, which compiles different files together to improve build times.
2021-11-21Fix T93256: Instances to points node broken after recent commitHans Goudey
When 97533eede444217 added the instance domain, it didn't change the domain that instance attributes are read from in this node.
2021-11-20Geometry Nodes: Instance attributes in Transfer/Capture nodesErik
Updates the Transfer Attributes and Capture Attributes nodes to support attributes from instances. Differential Revision: https://developer.blender.org/D13292
2021-11-19Fix: Use the instances domain in instance transform nodesHans Goudey
Instance attributes exist on the instance domain after rB97533eede44421, so these fields should be evaluated on that domain.
2021-11-19Geometry Nodes: Support custom instance attributesErik
Adds an attribute provider for instance attributes. A new domain `ATTR_DOMAIN_INSTANCE` is implemented. Instance attributes are not yet realized correctly. Differential Revision: D13149
2021-11-19Cleanup: fix typos in comments and docsBrecht Van Lommel
Contributed by luzpaz. Differential Revision: https://developer.blender.org/D13264