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-05-25Blenlib: Explicit Colors.Jeroen Bakker
Colors are often thought of as being 4 values that make up that can make any color. But that is of course too limited. In C we didn’t spend time to annotate what we meant when using colors. Recently `BLI_color.hh` was made to facilitate color structures in CPP. CPP has possibilities to enforce annotating structures during compilation and can adds conversions between them using function overloading and explicit constructors. The storage structs can hold 4 channels (r, g, b and a). Usage: Convert a theme byte color to a linearrgb premultiplied. ``` ColorTheme4b theme_color; ColorSceneLinear4f<eAlpha::Premultiplied> linearrgb_color = BLI_color_convert_to_scene_linear(theme_color).premultiply_alpha(); ``` The API is structured to make most use of inlining. Most notable are space conversions done via `BLI_color_convert_to*` functions. - Conversions between spaces (theme <=> scene linear) should always be done by invoking the `BLI_color_convert_to*` methods. - Encoding colors (compressing to store colors inside a less precision storage) should be done by invoking the `encode` and `decode` methods. - Changing alpha association should be done by invoking `premultiply_alpha` or `unpremultiply_alpha` methods. # Encoding. Color encoding is used to store colors with less precision as in using `uint8_t` in stead of `float`. This encoding is supported for `eSpace::SceneLinear`. To make this clear to the developer the `eSpace::SceneLinearByteEncoded` space is added. # Precision Colors can be stored using `uint8_t` or `float` colors. The conversion between the two precisions are available as methods. (`to_4b` and `to_4f`). # Alpha conversion Alpha conversion is only supported in SceneLinear space. Extending: - This file can be extended with `ColorHex/Hsl/Hsv` for different representations of rgb based colors. `ColorHsl4f<eSpace::SceneLinear, eAlpha::Premultiplied>` - Add non RGB spaces/storages ColorXyz. Reviewed By: JacquesLucke, brecht Differential Revision: https://developer.blender.org/D10978
2021-05-25Revert "Blenlib: Explicit Colors."Jeroen Bakker
This reverts commit fd94e033446c72fb92048a9864c1d539fccde59a. does not compile against latest master.
2021-05-25Blenlib: Explicit Colors.Jeroen Bakker
Colors are often thought of as being 4 values that make up that can make any color. But that is of course too limited. In C we didn’t spend time to annotate what we meant when using colors. Recently `BLI_color.hh` was made to facilitate color structures in CPP. CPP has possibilities to enforce annotating structures during compilation and can adds conversions between them using function overloading and explicit constructors. The storage structs can hold 4 channels (r, g, b and a). Usage: Convert a theme byte color to a linearrgb premultiplied. ``` ColorTheme4b theme_color; ColorSceneLinear4f<eAlpha::Premultiplied> linearrgb_color = BLI_color_convert_to_scene_linear(theme_color).premultiply_alpha(); ``` The API is structured to make most use of inlining. Most notable are space conversions done via `BLI_color_convert_to*` functions. - Conversions between spaces (theme <=> scene linear) should always be done by invoking the `BLI_color_convert_to*` methods. - Encoding colors (compressing to store colors inside a less precision storage) should be done by invoking the `encode` and `decode` methods. - Changing alpha association should be done by invoking `premultiply_alpha` or `unpremultiply_alpha` methods. # Encoding. Color encoding is used to store colors with less precision as in using `uint8_t` in stead of `float`. This encoding is supported for `eSpace::SceneLinear`. To make this clear to the developer the `eSpace::SceneLinearByteEncoded` space is added. # Precision Colors can be stored using `uint8_t` or `float` colors. The conversion between the two precisions are available as methods. (`to_4b` and `to_4f`). # Alpha conversion Alpha conversion is only supported in SceneLinear space. Extending: - This file can be extended with `ColorHex/Hsl/Hsv` for different representations of rgb based colors. `ColorHsl4f<eSpace::SceneLinear, eAlpha::Premultiplied>` - Add non RGB spaces/storages ColorXyz. Reviewed By: JacquesLucke, brecht Differential Revision: https://developer.blender.org/D10978
2021-05-25Geometry Nodes: Add Shader Curve NodesCharlie Jolly
Convert curve vec and curve rgb shader nodes to geometry nodes, based on node_shader_valToRgb.cc implementation.
2021-05-25Cleanup: use nullptrJacques Lucke
2021-05-25Cleanup: spellingCampbell Barton
2021-05-24Nodes: move shader curves node to C++Charlie Jolly
Prepare node for conversion to Geometry Nodes. There should be no functional changes. Reviewed By: JacquesLucke, LazyDodo Differential Revision: https://developer.blender.org/D11226
2021-05-21Cleanup: spellingLeon Zandman
Includes fixes to misspelled function names. Ref D11280
2021-05-21Geometry Nodes: new Material Replace nodeJacques Lucke
This node can change all faces that use a specific material to use a different material. Using this node is significantly more efficient than creating a selection from all faces with a specific material index and then using the Material Assign node. Ref T88055. Differential Revision: https://developer.blender.org/D11325
2021-05-21Eevee Wavelength Node SupportIyad Ahmed
This patch adds wavelength node support to Eevee, similar to how Eevee Blackbody node works, thus it is a little off from Cycles. Reviewed By: #eevee_viewport, fclem, brecht Differential Revision: https://developer.blender.org/D11326
2021-05-20Geometry Nodes: new Material input nodeJacques Lucke
This node is similar to the Value and Vector node. It just provides a way to use the same material in multiple nodes without exposing it outside of a node group. Differential Revision: https://developer.blender.org/D11305
2021-05-20Geometry Nodes: new Material Assign nodeJacques Lucke
This adds a new Material Assign node. It can be used to change the material used by an existing mesh or to assign a material to a mesh that has been generated from scratch. Differential Revision: https://developer.blender.org/D11155
2021-05-20Geometry Nodes: new geometry nodes evaluatorJacques Lucke
The old geometry nodes evaluator was quite basic and missed many features. It was useful to get the geometry nodes project started. However, nowadays we run into its limitations from time to time. The new evaluator is more complex, but comes with new capabilities. The two most important capabilities are that it can now execute nodes in parallel and it supports lazy evaluation. The performance improvement by multi-threading depends a lot on the specific node tree. In our demo files, the speedup is measurable but not huge. This is mainly because they are bottlenecked by one or two nodes that have to be executed one after the other (often the Boolean or Attribute Proximity nodes) or because the bottleneck is multi-threaded already (often openvdb nodes). Lazy evaluation of inputs is only supported by the Switch node for now. Previously, geometry nodes would always compute both inputs and then just discard the one that is not used. Now, only the input that is required is computed. For some more details read D11191, T87620 and the in-code documentation. Differential Revision: https://developer.blender.org/D11191
2021-05-19Cleanup: Use consistent order for functions in node filesHans Goudey
After this commit, all geometry node "init" and "update" functions are at the top of each file, right below the "layout" function. This means you can always scroll to the bottom of the file to see the entry point, and the boring boilerplate code is grouped in one section.
2021-05-19Geometry Nodes: Execute point rotate node on curve componentHans Goudey
When adding attributes on the curve component, I missed calling this node's execute function on the curve component, like the other nodes.
2021-05-19Geometry Nodes: Support for dynamic attributes on curve splinesHans Goudey
With this patch you will be able to add and remove attributes from curve data inside of geometry nodes. The following is currently implemented: * Adding attributes with any data type to splines or spline points. * Support for working with multiple splines at the same time. * Interaction with the three builtin point attributes. * Resampling attributes in the resample node. The following is not implemented in this patch: * Joining attributes when joining splines with the join geometry node. * Domain interpolation between spline and point domains. * More efficient ways to call attribute operations once per spline. Differential Revision: https://developer.blender.org/D11251
2021-05-19Geometry Nodes: take materials into account when joining geometriesJacques Lucke
Materials are now kept intact when using the Join Geometry node or when realizing instaces.
2021-05-17Geometry Nodes: update callbacks with 2 new socket typesWannes Malfait
2021-05-14Fix T88262: Curve to mesh crash with vector last segmentHans Goudey
The code incorrectly used the size of the second to last segment rather than the last segment's size. That was a problem when the last segment is a vector segment but the second to last isn't. I also used the opportunity to slightly refactor the control point offsets cache, making it one longer so it also contains information about the size of the last segment, simplifying other code.
2021-05-14Merge branch 'blender-v2.93-release'Philipp Oeser
2021-05-14Fix T88234: Crash with Eevee when shader displacement socket connection is mutedPhilipp Oeser
In {rB266cd7bb82ce}, support for muting links was added. It might be debatable if we define a shader as "having" displacement even if the link is muted, but after said commit, shader_has_displacement() would return true but still leave the returned node as NULL. Now also return false if the link is muted (otherwise the caller would need to additionally check the returned node as well.) Maniphest Tasks: T88234 Differential Revision: https://developer.blender.org/D11256
2021-05-14Geometry Nodes: use texture socket in Attribute Sample Texture nodeJacques Lucke
There is a new Texture data-block socket that we can use in Geometry Nodes now. This commit replaces the texture property of a node and gives it a texture input socket instead. That increases flexibility. The texture socket still has some limitations that will be lifted in the next couple of days (e.g. it's not supported by the switch node and cannot be exposed the a modifier yet). Differential Revision: https://developer.blender.org/D11222
2021-05-13Nodes: add utility method to get input/output of a DNodeJacques Lucke
This is a fairly common operation, so there should be a method that does it to avoid unnecessary complexity at the caller site.
2021-05-13Nodes: ignore unavailable sockets in logically linked sockets iteratorJacques Lucke
Unavailable sockets should generally be ignored during evaluation. They mainly exist because we don't have a better mechanism to turn some sockets on/off depending on node parameters. Currently, it is still possible that a link connects an available with an unavailable socket. This link is not displayed in the ui and should generally be ignored.
2021-05-12Cleanup: Splines: Add accessors to spline vectorHans Goudey
Not allowing external direct access to the vector of splines in the curve will help for things like reallocating custom data when a spline is added or removed.
2021-05-12Nodes: add boilerplate for texture and material socketsJacques Lucke
The sockets are not exposed in any nodes yet. They work similar to the Object/Collection sockets, which also just reference a data block. This is part of D11222.
2021-05-12Merge branch 'blender-v2.93-release'Charlie Jolly
2021-05-12Fix incorrect labels for math node wrap functionCharlie Jolly
Found in T88151, labels are swapped. Vector math node is not affected.
2021-05-12Geometry Nodes: Link error when implicit conversion isn't possibleWannes Malfait
This turns links red if no implicit conversion can be made between the from socket and the to socket. For geometry nodes this happens with object, geometry, collection, and string sockets that are connected to a different type. The change is simply implementing a callback that is already implemented for other node tree types. Differential Revision: https://developer.blender.org/D11229
2021-05-11Cleanup: unused variable warningCharlie Jolly
2021-05-11Geometry Nodes: Add Attribute Vector Rotate nodeCharlie Jolly
Port vector rotate node to geo attributes. Request by @simonthommes Reviewed By: simonthommes, HooglyBoogly
2021-05-11Cleanup: Sort node type definitions alphabeticallyHans Goudey
Previously we had a lot merge conflicts since we always put the most recently added node at the bottom. By sorting the list we will have one fewer merge conflict when a node is added in most cases.
2021-05-10Cleanup: spellingCampbell Barton
2021-05-09Fix T88126: Curve resample crash for single point inputHans Goudey
The spline `length` function assumed that the curve always had evaluated edges. That is clearly false. This commit adds a check to `length` and a special case for a single point in the curve resample node.
2021-05-09Geometry Nodes: Improve point instance node performanceHans Goudey
This commit uses two changes to improve the performance of the point instance node. **Prevent Reallocations** At 64 bytes, the transform matrix for every instance is rather large, so reallocating the vector as it grows can become a performance bottle- neck. This commit reserves memory for the instances that will be added to prevent unecessary reallocations as the instance vector grows. In a test with 4 million instances of 3 objects in a collection, the node was about 40% faster, from 370ms to 270ms for the node. **Parallelization** Currently the instances are added by appending to a vector. By changing this slightly to fill indices instead, we can parallelize the operation so that multiple threads can fill data at the same time. Tested on a Ryzen 3700x, this reduced the runtime from the above 270ms to 44ms average, bringing the total speedup to ~8x. Note that displaying the instances in the viewport is still much slower than the calculations in node, this change doesn't affect that.
2021-05-08Geometry Nodes: Refactor point instance nodeHans Goudey
This patch refactors the instance component to make use of the earlier refactoring in rB4599cea15dcf. Now we don't have to build an array of instance references the size of the point domain, and we can gather the possible instances only once and use the same vector for all component types. Generally the node should be a bit faster and use less memory. The logic is moved around a bit, especially the hashing of the ID attribute to pick from the instance list, but the result is unchanged. Differential Revision: https://developer.blender.org/D11203
2021-05-08Cleanup: remove use of persistent data handles in geometry nodesJacques Lucke
Those were mostly just left over from previous work on particle nodes. They solved the problem of keeping a reference to an object over multiple frames and in a cache. Currently, we do not have this problem in geometry nodes, so we can also remove this layer of complexity for now.
2021-05-07Geometry Noes: Curve Resample NodeHans Goudey
This node generates a naturally parametarized (even length edge) poly spline version of every spline in the input. There are two modes, "Count", and "Length". These are similar to the same options for the line primitive node in end points mode. I implemented this instead of a "Sample Points" node, because for this operation it's trivial to keep the result as a curve, which is nice since it increases flexibility, and because it can make instancing simpler, i.e. using the transforms of each evaluated point rather than requiring the construction of a "rotation" attribute. Differential Revision: https://developer.blender.org/D11173
2021-05-07Fix: Curve to mesh node fails with one point and no profileHans Goudey
Just because the spline is cyclic does not necessarily mean that it has an edge.
2021-05-07Geometry Nodes: Parallelize Attribute Curve Map nodeCharlie Jolly
This adds `parallel_for` to the Attribute Curve Map node to improve performance. Grain size set to 512. Reviewed By: HooglyBoogly Differential Revision: https://developer.blender.org/D11194
2021-05-07Geometry Nodes: Add Attribute Curve Map NodeCharlie Jolly
This node has the same functionality as the color and vector curve mapping nodes in the shader editor. Here is works on every value for the selected attribute, and it can also output a float value. Other than that, the implementation is quite straightforward-- almost completely boilerplate code. Differential Revision: https://developer.blender.org/D10921
2021-05-04Geometry Nodes: refactor instances componentJacques Lucke
The main goal of this refactor is to not store Object/Collection pointers for every individual instance. Instead instances now store a handle for the referenced data. The actual Object/Collection pointers are stored in a new `InstanceReference` class. This refactor also allows for some better optimizations further down the line, because one does not have to search through all instances anymore to find what data is instanced. Furthermore, this refactor makes it easier to support instancing `GeometrySet` or any other data that has to be owned by the `InstancesComponent`. Differential Revision: https://developer.blender.org/D11125
2021-05-03Geometry Nodes: Initial basic curve data supportHans Goudey
This patch adds initial curve support to geometry nodes. Currently there is only one node available, the "Curve to Mesh" node, T87428. However, the aim of the changes here is larger than just supporting curve data in nodes-- it also uses the opportunity to add better spline data structures, intended to replace the existing curve evaluation code. The curve code in Blender is quite old, and it's generally regarded as some of the messiest, hardest-to-understand code as well. The classes in `BKE_spline.hh` aim to be faster, more extensible, and much more easily understandable. Further explanation can be found in comments in that file. Initial builtin spline attributes are supported-- reading and writing from the `cyclic` and `resolution` attributes works with any of the attribute nodes. Also, only Z-up normal calculation is implemented at the moment, and tilts do not apply yet. **Limitations** - For now, you must bring curves into the node tree with an "Object Info" node. Changes to the curve modifier stack will come later. - Converting to a mesh is necessary to visualize the curve data. Further progress can be tracked in: T87245 Higher level design document: https://wiki.blender.org/wiki/Modules/Physics_Nodes/Projects/EverythingNodes/CurveNodes Differential Revision: https://developer.blender.org/D11091
2021-05-03Geometry Nodes: Parallelize attribute nodesHans Goudey
This commit significantly speeds up many of the attribute nodes when multiple threads are available in linear situations when parallelism cannot be achieved elsewhere. See the differential for a table of timing comparisons tested on a Ryzen 3700x. For an attribute with 4 million elements, the nodes were about 3 to 9 times faster. The changes are not exhaustive, other nodes could still be parallelized in the future. Also, it would be possible to further optimize the grain size in `parallel_for`, but I'd rather make sure it isn't too small. I tested some different values, but also relied on intuition-- increasing grain size for less complex operations and vice versa. Differential Revision: https://developer.blender.org/D11139
2021-04-30Geometry Nodes: Add an "Auto" option for Attribute Convert data typeCharlie Jolly
Currently there is an "Auto" option for the domain, this commit adds a similar option for "Auto" data type, that uses the data type from the target attribute or the source attribute (in that order). Ref T87347 Differential Revision: https://developer.blender.org/D10932
2021-04-30Cleanup: duplicate breakCampbell Barton
2021-04-30Nodes: Add a callback to check for valid socket typeWannes Malfait
This adds a callback to bNodeTreeType to check which socket types are valid for the tree type. Function has been implemented for the normal tree types, and can be implemented for custom node trees with python, by adding a `classmethod` to the tree. However, only builtin socket types are supported. This is relevant for T87049, but it also has the advantage that it is now clear which node trees support which sockets. Previously this was assumed to be known by all developers. Differential Revision: https://developer.blender.org/D10938
2021-04-28Merge branch 'blender-v2.93-release'Hans Goudey
2021-04-28Fix T87165: Join geometry node doesn't copy instance IDsHans Goudey
This makes motion blur work incorrectly. With a similar fix to rBf2d70c02f88cc00, just copy over the instance IDs in this case.
2021-04-27Geometry Nodes: improve geometry nodes evaluator internal apiJacques Lucke
This is a first step towards T87620. It should not have any functional changes. Goals of this refactor: * Move the evaluator out of `MOD_nodes.cc`. That makes it easier to improve it in isolation. * Extract core input/out parameter management out of `GeoNodeExecParams`. Managing this is the responsibility of the evaluator. This separation of concerns will be useful once we have lazy evaluation of certain inputs/outputs. Differential Revision: https://developer.blender.org/D11085