Revision 602ecbd by Jacques Lucke November 26, 2021, 14:33 (GMT) |
Geometry Nodes: optimize Set Position node 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. |
Revision eb7827e by Michael Jones November 26, 2021, 13:58 (GMT) |
Cycles: Fix film convert address space mismatch on Metal This patch fixes an address space mismatch in the film convert kernels on Metal. The `film_get_pass_pixel_...` functions take a `ccl_private` result pointer, but the film convert kernels pass a `ccl_global` memory pointer. Specialising the pass-fetch functions with templates results in compilation errors on Visual Studio, so instead this patch just adds an intermediate local on Metal. Reviewed By: brecht Differential Revision: https://developer.blender.org/D13350 |
Revision 12a83db by Germano Cavalcante November 26, 2021, 13:49 (GMT) |
Fix T93290: Rotation without contraint after extrude has wrong axis The default orientation of the mode was being indicated as overridden, although the one of constraint was used. |
Revision f86331a by Jacques Lucke November 26, 2021, 13:47 (GMT) |
Geometry Nodes: deduplicate virtual array implementations For some underlying data (e.g. spans) we had two virtual array implementations. One for the mutable and one for the immutable case. Now that most code does not deal with the virtual array implementations directly anymore (since rBrBd4c868da9f97a), we can get away with sharing one implementation for both cases. This means that we have to do a `const_cast` in a few places, but this is an implementation detail that does not leak into "user code" (only when explicitly casting a `VArrayImpl` to a `VMutableArrayImpl`, which should happen nowhere). |
Revision ef88047 by Philipp Oeser November 26, 2021, 13:40 (GMT) |
Fix T89081: Freestyle noise seed of zero crash This leads to division by zero in Freestyle's NoiseShader which also crashes blender. Not sure if we really need a do_version patch for old files, as an alternative we could also force a positive number in the NoiseShader. This patch does not do either, just force a positive range in RNA from now on. Maniphest Tasks: T89081 Differential Revision: https://developer.blender.org/D13332 |
Revision a773cd3 by Philipp Oeser November 26, 2021, 13:32 (GMT) |
Fix T93130: Frame Selected with selected paint mask does not work This broke with {rB20fac2eca723} (which landed in 2.63), so long standing bug. Convention for paint modes is: - when no paint mask is active, `Frame Selected` will focus the last stroke - when paint mask is active, `Frame Selected` will focus the selected mask faces To check the right vert coords we have to offset with `mp->loopstart`. Maniphest Tasks: T93130 Differential Revision: https://developer.blender.org/D13247 |
Revision 35c3644 by Philipp Oeser November 26, 2021, 13:24 (GMT) |
Fix T93117: Texture paint clone tool crash in certain situation Caused by {rBaf162658e127}, so long standing bug. When changing clone slots (report involved a quite complicated sequence of selecting textures and undo -- but I think this could happen in more situations) code checks for UV of new clone slot. However, since above commit the slot and the clone slot were mixed up, so in this case the responsible NULL check (for when no UV is assigned) wasnt working. Now correct this (NULL check the clone slot uv -- instead of the paint slot UV). note: not sure why low level CustomData functions actually dont do the name NULL checks themselves (seems like callers are always responsible). Maniphest Tasks: T93117 Differential Revision: https://developer.blender.org/D13378 |
Revision 6334286 by Jacques Lucke November 26, 2021, 12:29 (GMT) |
Fix: error in previous commit Forgot to actually slice the span in rB6b5e1cfacab4c4605ec2d7bfef360389afe849be. |
Revision b066d58 by Dalai Felinto November 26, 2021, 12:05 (GMT) |
CMake mini-rewrite: Sync code check with BKE_blender_version_is_alpha Reproduce the logic we already do in C (BKE_blender_version_is_alpha) and the CMake file. Otherwise it can get out of sync if we add/rename the non-alpha release cycles. No functional change. Differential Revision: https://developer.blender.org/D13379 |
Revision 236be8e by Philipp Oeser November 26, 2021, 10:46 (GMT) |
Fix T93380: Texture paint clone tool crash without clone image This was crashing using the clone tool without a clone image assigned. Caused by {rB9111ea78acf4}. Since above commit, `BKE_image_acquire_ibuf` was using `ima->runtime` without checking for NULL first. Since callers are not required to check for this, just return early here. note: there is still a memory leak using the clone tool without a clone image assigned (but this was also the case before said commit and needs to be investigated separately). Maniphest Tasks: T93380 Differential Revision: https://developer.blender.org/D13377 |
Revision dcc500e by Bastien Montagne November 26, 2021, 10:08 (GMT) |
BKE_bpath: Add minimal unittests. This is far from a complete coverage, but should catch most of potential issues when rewriting this code. |
November 26, 2021, 10:08 (GMT) |
MaskEditor: draw active layer on top Instead of drawing the mask layers in the sequence of their occurence, draw the active mask *always* on top. Implementation: - move drawing loop for splines to separate static function - draw active mask last Example: lowest layer is active, yet still drawn on top. {F12140355} This is part of an effort to make mask editing more intuitive & easy to use: https://developer.blender.org/T93097 Reviewed By: sergey Differential Revision: https://developer.blender.org/D13372 |
Revision 658fd8d by Jacques Lucke November 26, 2021, 10:06 (GMT) |
Geometry Nodes: refactor multi-threading in field evaluation 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 ``` |
November 26, 2021, 09:57 (GMT) |
Clarify a confusing comment. Affect and effect are too confusing for non-native english speakers (like me). Also BAKING_MASK_MARGIN doesn't exist anymore in the code. Reviewed By: sergey Differential Revision: https://developer.blender.org/D13361 |
Revision 6b5e1cf by Jacques Lucke November 26, 2021, 09:08 (GMT) |
Geometry Nodes: better devirtualization for sliced virtual arrays Under some circumstances that can lead to more than a 2x performance increase, because math nodes can better optimize for the case when the slice is a single value or span. |
Revision 2cda65a by Jacques Lucke November 26, 2021, 08:59 (GMT) |
Geometry Nodes: avoid allocation when construct varray for single value Previously, `GVArray::ForSingle` would always allocate a copy of the passed in value. Now it only does so when the value is too large or not trivial. |
Revision 8015433 by Jeroen Bakker November 26, 2021, 07:16 (GMT) |
Revision e3cf7eb by Jeroen Bakker November 26, 2021, 07:00 (GMT) |
Cleanup: Silence clang-tidy warning. |
Revision a073e1e by Jeroen Bakker November 26, 2021, 06:59 (GMT) |
Cleanup: Silence clang-tidy warnings. |
Revision 7b5a6f4 by Brecht Van Lommel November 25, 2021, 17:33 (GMT) |
Merge branch 'blender-v3.0-release' |
|