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
2022-05-12Merge branch 'blender-v3.2-release'Joseph Eagar
2022-05-12color attributes: Fix broken vertex color nodeJoseph Eagar
Fall back onto the old behavior (use the render color attribute) if the vertex color node's attribute name is blank.
2022-05-11Fix: Spline parameter node broken for Catmull Rom curvesHans Goudey
Subtracting one from the evaluated index could make the index -1. That was only necessary for Bezier curves due to the specifics of the "bezier_evaluated_offsets".
2022-05-11Cleanup: use 'num' / 'size' suffix instead of 'sz'Campbell Barton
GPU code used `sz` as an abbreviation for size, as well as a few other places. Use size where this represents a size in bytes, see: T85728.
2022-05-11Cleanup: use '_num' suffix, mostly for curves & spline codeCampbell Barton
Replace tot/amount & size with num, in keeping with T85728.
2022-05-10UI: Geometry Nodes IconDalai Felinto
Geometry Nodes (new) icon. So far we were using the generic node-tree icon for geometry nodes, not anymore. The new icon is composed of 4 spheres that is a reference to the original pebbles demo. Scattering points was also the turning point for the project (which originally was focusing on dynamic effects), and to this day is one of the first steps for everything procedural such as hair. Note that the modifier icon is still showing as white in the outliner. The alternative is to be blue everywhere. Patch review and feedback by Hans Goudey. Icon creation in collaboration with Pablo Vazquez.
2022-05-10Cleanup: Move mesh primitive cube to the geometry moduleHans Goudey
This allows easy reuse elsewhere in Blender.
2022-05-09Refactor: Move resample curves code to the geometry moduleHans Goudey
This commit moves the code for the resample curves node to the geometry module, to allow reusing it in any editor. Split from D14870.
2022-05-06EEVEE: Refactor curve nodesOmar Emara
This patches rewrites the GPU shaders of curve nodes for easier future development. This is a non-functional change. The new code avoids code duplication by moving common code into BKE curve mapping functions. It also avoids ambiguous data embedding into the gradient vectors that are passed to vectors and reduces the size of uniforms uploaded to the shader by avoiding redundancies. This is needed in preparation for the viewport compositor, which will utilize and extend this implementation. Reviewed By: fclem Differential Revision: https://developer.blender.org/D14689
2022-05-05Cleanup: Move curve length field input to blenkernelHans Goudey
To use in the geometry module when the resample curves code is moved there (T97448).
2022-05-05Cleanup: Further clarification and renaming of curve field inputsHans Goudey
Differentiate the total length of curves and the accumulated length at each control point.
2022-05-05Cleanup: Rename field input class nameHans Goudey
2022-05-05Cleanup: Remove unnecessary logic for resample curves nodeHans Goudey
After 2d80f814cc24, we can assume that curves always have at least one evalauted point, so this complication isn't necessary anymore.
2022-05-05Cleanup: sort cmake file listsCampbell Barton
2022-05-05Geometry Nodes: Improve performance of mesh to points nodeHans Goudey
There are fancier possibilities for improvements, like taking ownership of existing arrays in some cases, but this patch takes a simpler brute force approach for now. The first change is to move from the previous loop to using the new `materialize_compressed_to_uninitialized` method on virtual arrays, which adds only the selected values to the output. That is a nice improvement in some cases, corresponding to the "Without Threading" column in the chart below. The next change is to call that function in parallel on slices of the output. To avoid generating too much code, we can avoid templating based on the type and devirtualizing completely. The test input is a 4 million point grid, generated by the grid primitive node. Color and 2D vector attributes were also transferred to the points. | Test | Before | Final No Threading | Final | Change | | --------- | ------ | ------------------ | ------ | ------ | | All Verts | 209 ms | 186 ms | 170 ms | 0.8x | | 1% | 148 ms | 143 ms | 133 ms | 0.9x | | All Faces | 326 ms | 303 ms | 87 ms | 0.27x | | 1% Faces | 70 ms | 68 ms | 34 ms | 0.49x | Differential Revision: https://developer.blender.org/D14661
2022-05-05Cleanup: unused argument warningsCampbell Barton
2022-05-04Subdivision node: add input for vertex creasesKévin Dietrich
This adds an input to the Subdivision node to specify a field to use for controling vertex creases. Common code with edge creasing was extracted into utility functions to avoid redundancy. Differential Revision: https://developer.blender.org/D14199
2022-05-04Nodes: Add general Combine/Separate Color nodesHallam Roberts
Inspired by D12936 and D12929, this patch adds general purpose "Combine Color" and "Separate Color" nodes to Geometry, Compositor, Shader and Texture nodes. - Within Geometry Nodes, it replaces the existing "Combine RGB" and "Separate RGB" nodes. - Within Compositor Nodes, it replaces the existing "Combine RGBA/HSVA/YCbCrA/YUVA" and "Separate RGBA/HSVA/YCbCrA/YUVA" nodes. - Within Texture Nodes, it replaces the existing "Combine RGBA" and "Separate RGBA" nodes. - Within Shader Nodes, it replaces the existing "Combine RGB/HSV" and "Separate RGB/HSV" nodes. Python addons have not been updated to the new nodes yet. **New shader code** In node_color.h, color.h and gpu_shader_material_color_util.glsl, missing methods hsl_to_rgb and rgb_to_hsl are added by directly converting existing C code. They always produce the same result. **Old code** As requested by T96219, old nodes still exist but are not displayed in the add menu. This means Python scripts can still create them as usual. Otherwise, versioning replaces the old nodes with the new nodes when opening .blend files. Differential Revision: https://developer.blender.org/D14034
2022-05-04Merge branch 'blender-v3.2-release'Jacques Lucke
2022-05-04Fix T97375: changing node tree from Python is very slowJacques Lucke
The issue was that the `NodeTreeRef` acceleration data structure was rebuild much more often than necessary. That happened because the Map Range node accidentally tagged the node tree for change even though it did not actually change. Differential Revision: https://developer.blender.org/D14842
2022-05-04Cleanup: Adjust variable names, miscellaneous changesHans Goudey
Use `src` and `dst` instead of less common variable names, less redundant logic, simpler use of const, and "typename" for template arguments instead of "class".
2022-05-03Fix T93179: geonodes UVs and Vertex colors do not work in EEVEEKévin Dietrich
Overwriting UV map or vertex color data in Geometry nodes will move the layers to another CustomData channel, and as such, will make attribute lookup fail from the UVMap and Vertex Color nodes in EEVEE as the CustomDataType will also be modified (i.e. no longer `CD_MTFACE` or `CD_MCOL`). As discussed in T93179, the solution is to use `CD_PROP_AUTO_FROM_NAME` so that the render engine is able to find the attributes. This also makes EEVEE emulate Cycles behaviour in this regard. `attr_load_uv` and `attr_load_color` are also removed in favor of the generic attribute API in the various GLSL shaders. Although `CD_PROP_AUTO_FROM_NAME` is now used even for UV maps, the active UV map is still used in case the attribute name is empty, to preserve the old behavior. Differential Revision: https://developer.blender.org/D13730
2022-05-03Fix T93272: Material index mapping missing for mesh boolean nodeHans Goudey
This commit implements copying of materials and material indices from all of the boolean node's input meshes. The materials are added to the final mesh in the order that they appear when looking through the materials of the input meshes in the same order of the multi-socket input node. All material remapping is done with mesh-level materials. Object-level materials are not considered, since the meshes don't come from objects. Merging all materials rather than just the materials on the first mesh requires a change to the boolean-mesh conversion. This subtly changes the behavior for object linked materials, but in a good way I think; now the material remap arrays are respected no matter the number of materials on the first mesh input. Differential Revision: https://developer.blender.org/D14788
2022-05-01Material: Hide material output socket Thickness as it is not used for nowClément Foucault
This is a EEVEE-Next feature that is not yet implemented. Ideally the socket should only be displayed when EEVEE is in the selected target engine.
2022-04-28Fix T93546: Fill curve node ignores last point of non-cylic curvesHans Goudey
The node is meant to consider all curves cyclic, which means that it shouldn't account for one fewer segment on non-cyclic curves.
2022-04-28Cleanup: Remove disabled optimization codeHans Goudey
Addressing the TODO from the comment isn't a priority at the moment, and should be solved a bit more generally anyway.
2022-04-27Fix T93285: Wrong instance order when instancing a collectionGermano Cavalcante
At least on the Mac, `std::sort` sometimes passes the same value in the `a` and `b` parameters. The `true` return is only for cases where `a` is less than `b`.
2022-04-26Geometry Nodes: Move named attribute nodes out of experimentalHans Goudey
Remove the experimental option for named attributes nodes show they are always available. Ref T91742
2022-04-26Geometry Nodes: refactor array devirtualizationJacques Lucke
Goals: * Better high level control over where devirtualization occurs. There is always a trade-off between performance and compile-time/binary-size. * Simplify using array devirtualization. * Better performance for cases where devirtualization wasn't used before. Many geometry nodes accept fields as inputs. Internally, that means that the execution functions have to accept so called "virtual arrays" as inputs. Those can be e.g. actual arrays, just single values, or lazily computed arrays. Due to these different possible virtual arrays implementations, access to individual elements is slower than it would be if everything was just a normal array (access does through a virtual function call). For more complex execution functions, this overhead does not matter, but for small functions (like a simple addition) it very much does. The virtual function call also prevents the compiler from doing some optimizations (e.g. loop unrolling and inserting simd instructions). The solution is to "devirtualize" the virtual arrays for small functions where the overhead is measurable. Essentially, the function is generated many times with different array types as input. Then there is a run-time dispatch that calls the best implementation. We have been doing devirtualization in e.g. math nodes for a long time already. This patch just generalizes the concept and makes it easier to control. It also makes it easier to investigate the different trade-offs when it comes to devirtualization. Nodes that we've optimized using devirtualization before didn't get a speedup. However, a couple of nodes are using devirtualization now, that didn't before. Those got a 2-4x speedup in common cases. * Map Range * Random Value * Switch * Combine XYZ Differential Revision: https://developer.blender.org/D14628
2022-04-25Geometry Nodes: Add "Named" to "Remove Attribute" node nameHans Goudey
The goal is to be consistent with the other two nodes that deal with named attributes. Ref T97512
2022-04-25Curves: Cache the number of curves of each typeHans Goudey
Remembering the number of curves of every type makes it fast to know whether processing specific to a single curve type has to be done. This information was accessed in quite a few places, so this should be an overall reduction in overhead for the new curves type. The cache is computed eagerly, in other words every time after changing the curve types. In order to reduce verbosity I added helper functions for some common ways to set the types. Differential Revision: https://developer.blender.org/D14732
2022-04-25Geometry Nodes: improve ui when trying to remove built-in attributesJacques Lucke
* If removing an attribute failed (even though it exists), don't log it as being used. * Make warning message a bit more informative. Differential Revision: https://developer.blender.org/D14750
2022-04-25Fix memory leak in cryptomatteSergey Sharybin
Since cbf033c0551 the `matte_id` will be allocated in the node storage for the forward compatibility purposes. However, this field was never freed, leading to memory leak. Causes annoying popup on macOS when running Cycles tests, for example render_passes_cryptomatte_asset.blend Differential Revision: https://developer.blender.org/D14728
2022-04-22Cleanup: spelling in commentsCampbell Barton
2022-04-21Geometry Nodes: better support for byte color attributesJacques Lucke
Since {rBeae36be372a6b16ee3e76eff0485a47da4f3c230} the distinction between float and byte colors is more explicit in the ui. So far, geometry nodes couldn't really deal with byte colors in general. This patch fixes that. There is still only one color socket, which contains float colors. Conversion to and from byte colors is done when read from or writing to attributes. * Support writing to byte color attributes in Store Named Attribute node. * Support converting to/from byte color in attribute conversion operator. * Support propagating byte color attributes. * Add all the implicit conversions from byte colors to the other types. * Display byte colors as integers in spreadsheet. Differential Revision: https://developer.blender.org/D14705
2022-04-20Cleanup: spelling in commentsCampbell Barton
2022-04-20Mesh: Avoid unnecessary normal calculation and dirty tagsHans Goudey
This is mostly a cleanup to avoid hardcoding the eager calculation of normals it isn't necessary, by reducing calls to `BKE_mesh_calc_normals` and by removing calls to `BKE_mesh_normals_tag_dirty` when the mesh is newly created and already has dirty normals anyway. This reduces boilerplate code and makes the "dirty by default" state more clear. Any regressions from this commit should be easy to fix, though the lazy calculation is solid enough that none are expected.
2022-04-19Fix: Incorrect info message in set material nodeHans Goudey
The node does have support for curves since c4f7f59c659f7d986e.
2022-04-19GPU: Fix Adresse Sanitizer errorsClément Foucault
2022-04-19GPU: Replace `GPUMaterialVolumeGrid` by `GPUMaterialAttribute`Clément Foucault
This is to make the codegen and shading nodes object type agnostic. This is essential for flexibility of the engine to use the nodetree as it see fits. The essential volume attributes struct properties are moved to the `GPUMaterialAttribute` which see its final input name set on creation. The binding process is centralized into `draw_volume.cc` to avoid duplicating the code between multiple engines. It mimics the hair attributes process. Volume object grid transforms and other per object uniforms are packed into one UBO per object. The grid transform is now based on object which simplify the matrix preparations. This also gets rid of the double transforms and use object info orco factors for volume objects. Tagging @brecht because he did the initial implementation of Volume Grids.
2022-04-18Fix T97002: Preserve multi socket link orderLeon Schittek
Preserve multi socket link order when copying nodes or adding a new group input sockets by linking directly to multi inputs from the group input node's extension socket. This is done by also copying the `multi_input_socket_index` when the new links are created by copying existing or temporary links. Reviewed By: Hans Goudey Differential Revision: http://developer.blender.org/D14535
2022-04-18Nodes: Remove unnecessary RNA pointer creationHans Goudey
`rna_NodeSocket_refine` and `rna_Node_refine` take significant time when building the `NodeTreeRef` acceleration data structure, but they aren't used at all. This commit removes their eager calculation and instead creates them on-demand in the `rna()` functions. They also aren't inlined to avoid including `RNA_prototypes.h` in the header. Differential Revision: https://developer.blender.org/D14674
2022-04-17Cleanup: Use C++ Array typeHans Goudey
2022-04-15Fix T97363: Duplicate elements node doesn't tag loose edgesHans Goudey
2022-04-15Curves: Port curve to mesh node to the new data-blockHans Goudey
This commit changes the Curve to Mesh node to work with `Curves` instead of `CurveEval`. The change ends up basically completely rewriting the node, since the different attribute storage means that the decisions made previously don't make much sense anymore. The main loops are now "for each attribute: for each curve combination" rather than the other way around, with the goal of taking advantage of the locality of curve attributes. This improvement is quite noticeable with many small curves; I measured a 4-5x improvement (around 4-5s to <1s) when converting millions of curves to tens of millions of faces. I didn't obverse any change in performance compared to 3.1 with fewer curves though. The changes also solve an algorithmic flaw where any interpolated attributes would be evaluated for every curve combination instead of just once per curve. This can be a large improvement when there are many profile curves. The code relies heavily on a function `foreach_curve_combination` which calculates some basic information about each combination and calls a templated function. I made assumptions about unnecessary reads being removed by compiler optimizations. For further performance improvements in the future that might be an area to investigate. Another might be using a "for a group of curves: for each attribute: for each curve" pattern to increase the locality of memory access. Differential Revision: https://developer.blender.org/D14642
2022-04-14GPU: Make nodetree GLSL Codegen render engine agnosticClément Foucault
This commit removes all EEVEE specific code from the `gpu_shader_material*.glsl` files. It defines a clear interface to evaluate the closure nodes leaving more flexibility to the render engine. Some of the long standing workaround are fixed: - bump mapping support is no longer duplicating a lot of node and is instead compiled into a function call. - bump rewiring to Normal socket is no longer needed as we now use a global `g_data.N` for that. Closure sampling with upstread weight eval is now supported if the engine needs it. This also makes all the material GLSL sources use `GPUSource` for better debugging experience. The `GPUFunction` parsing now happens in `GPUSource` creation. The whole `GPUCodegen` now uses the `ShaderCreateInfo` and is object type agnostic. Is has also been rewritten in C++. This patch changes a view behavior for EEVEE: - Mix shader node factor imput is now clamped. - Tangent Vector displacement behavior is now matching cycles. - The chosen BSDF used for SSR might change. - Hair shading may have very small changes on very large hairs when using hair polygon stripes. - ShaderToRGB node will remove any SSR and SSS form a shader. - SSS radius input now is no longer a scaling factor but defines an average radius. The SSS kernel "shape" (radii) are still defined by the socket default values. Appart from the listed changes no other regressions are expected.
2022-04-14Geometry Nodes: show used named attributes in nodesJacques Lucke
This adds a new node editor overlay that helps users to see where named attributes are used. This is important, because named attributes can have name collisions between independent node groups which can lead to hard to find issues. Differential Revision: https://developer.blender.org/D14618
2022-04-13Fix: compilation error with MSVCRay Molenkamp
Similar issue as e22fd7247adc.
2022-04-13Cover some DNA files with C++ utility macrosSergey Sharybin
Solves compilation warning with Clang, and moves manipulation with DNA structures to the designed way for C++. The tests and few other places are update to the new code by Jacques. Ref T96847 Maniphest Tasks: T96847 Differential Revision: https://developer.blender.org/D14625
2022-04-12Cleanup: pass vectors by referenceJacques Lucke
Passing them by value caused measurable overhead for me.