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-08-31Mesh: Move material indices to a generic attributeHans Goudey
This patch moves material indices from the mesh `MPoly` struct to a generic integer attribute. The builtin material index was already exposed in geometry nodes, but this makes it a "proper" attribute accessible with Python and visible in the "Attributes" panel. The goals of the refactor are code simplification and memory and performance improvements, mainly because the attribute doesn't have to be stored and processed if there are no materials. However, until 4.0, material indices will still be read and written in the old format, meaning there may be a temporary increase in memory usage. Further notes: * Completely removing the `MPoly.mat_nr` after 4.0 may require changes to DNA or introducing a new `MPoly` type. * Geometry nodes regression tests didn't look at material indices, so the change reveals a bug in the realize instances node that I fixed. * Access to material indices from the RNA `MeshPolygon` type is slower with this patch. The `material_index` attribute can be used instead. * Cycles is changed to read from the attribute instead. * BMesh isn't changed in this patch. Theoretically it could be though, to save 2 bytes per face when less than two materials are used. * Eventually we could use a 16 bit integer attribute type instead. Ref T95967 Differential Revision: https://developer.blender.org/D15675
2022-08-31Nodes: move NodeTreeRef functionality into node runtime dataJacques Lucke
The purpose of `NodeTreeRef` was to speed up various queries on a read-only `bNodeTree`. Not that we have runtime data in nodes and sockets, we can also store the result of some queries there. This has some benefits: * No need for a read-only separate node tree data structure which increased complexity. * Makes it easier to reuse cached queries in more parts of Blender that can benefit from it. A downside is that we loose some type safety that we got by having different types for input and output sockets, as well as internal and non-internal links. This patch also refactors `DerivedNodeTree` so that it does not use `NodeTreeRef` anymore, but uses `bNodeTree` directly instead. To provide a convenient API (that is also close to what `NodeTreeRef` has), a new approach is implemented: `bNodeTree`, `bNode`, `bNodeSocket` and `bNodeLink` now have C++ methods declared in `DNA_node_types.h` which are implemented in `BKE_node_runtime.hh`. To make this work, `makesdna` now skips c++ sections when parsing dna header files. No user visible changes are expected. Differential Revision: https://developer.blender.org/D15491
2022-08-31Cleanup: obj: simplify import/export syntax handling codeAras Pranckevicius
I want to add support for PBR materials extension to OBJ, but the way current I/O code syntax handling was done made it quite cumbersome to extend the number of MTL textures/parameters. Simplify all that by removing FormatHandler template on "syntax" that gets routed through keyword enums, and instead just have simple `write_obj_*` and `write_mtl_*` functions. Simplify MTLMaterial to not contain a map of textures (that is always fully filled with all possible textures), instead now there's a simple array. Rename `tex_map_XX` to `MTLTexMap`. All this does not affect behavior or performance, but it does result in 170 fewer lines of code, and saves a couple kilobytes of executable size.
2022-08-31Mesh: Avoid redundant custom data layer initializationHans Goudey
In all these cases, it was clear that the layer values were set right after the layer was created anyway. So there's no point in using calloc or setting the values to zero first. See 25237d2625078c6d for more info.
2022-08-30Attributes: Improve custom data initialization optionsHans Goudey
When allocating new `CustomData` layers, often we do redundant initialization of arrays. For example, it's common that values are allocated, set to their default value, and then set to some other value. This is wasteful, and it negates the benefits of optimizations to the allocator like D15082. There are two reasons for this. The first is array-of-structs storage that makes it annoying to initialize values manually, and the second is confusing options in the Custom Data API. This patch addresses the latter. The `CustomData` "alloc type" options are rearranged. Now, besides the options that use existing layers, there are two remaining: * `CD_SET_DEFAULT` sets the default value. * Usually zeroes, but for colors this is white (how it was before). * Should be used when you add the layer but don't set all values. * `CD_CONSTRUCT` refers to the "default construct" C++ term. * Only necessary or defined for non-trivial types like vertex groups. * Doesn't do anything for trivial types like `int` or `float3`. * Should be used every other time, when all values will be set. The attribute API's `AttributeInit` types are updated as well. To update code, replace `CD_CALLOC` with `CD_SET_DEFAULT` and `CD_DEFAULT` with `CD_CONSTRUCT`. This doesn't cause any functional changes yet. Follow-up commits will change to avoid initializing new layers where the correctness is clear. Differential Revision: https://developer.blender.org/D15617
2022-08-30GPencil: Improve Thickness handling for Outline operatorAntonio Vazquez
Actually, when you increase the thickness of the stroke in the outline conversion, the shape of the stroke changes and becomes thicker. This commit includes a new algorithm to correct this problem. A new `Keep Shape` parameter allows you to disable it because, for artist reasons, it may be good to keep the old algorithm and change the shape.
2022-08-30Cleanup: Use const for custom data layersHans Goudey
2022-08-28Cleanup: replace NULL with nullptr for C++ filesCampbell Barton
2022-08-24Cleanup: use determinant_m3(m) < 0 to implement is_negative_m3/m4Campbell Barton
Use a more direct method of checking if a matrix is negative instead of using cross & dot product. Also replace some determinant_m3() < 0 checks with is_negative_m3.
2022-08-23Merge branch 'blender-v3.3-release'Richard Antalik
2022-08-23Cleanup: formatCampbell Barton
2022-08-23Merge branch 'blender-v3.3-release'Philipp Oeser
2022-08-23Fix: OBJ import unused parameter warningPhilipp Oeser
Since {rB2542fda14d85}, `r_node` is an unused parameter. Changed `load_texture_image` to reflect that. Differential Revision: https://developer.blender.org/D15759
2022-08-23Cleanup: match names between functions & declarationsCampbell Barton
2022-08-17Cleanup: Remove redundant use of evaluated non-mesh objectsHans Goudey
Metaball, curve, text, and surface objects use the geometry component system to add evaluated mesh object instances to the dependency graph "for render engine" iterator. Therefore it is unnecessary to process those object types in these loops-- it would either be redundant work or a no-op.
2022-08-17Metaball: Evaluate metaball objects as mesh componentsHans Goudey
With the ultimate goal of simplifying drawing and evaluation, this patch makes the following changes and removes code: - Use `Mesh` instead of `DispList` for evaluated basis metaballs. - Remove all `DispList` drawing code, which is now unused. - Simplify code that converts evaluated metaballs to meshes. - Store the evaluated mesh in the evaluated geometry set. This has the following indirect benefits: - Evaluated meshes from metaball objects can be used in geometry nodes. - Renderers can ignore evaluated metaball objects completely - Cycles rendering no longer has to convert to mesh from `DispList`. - We get closer to removing `DispList` completely. - Optimizations to mesh rendering will also apply to metaball objects. The vertex normals on the evaluated mesh are technically invalid; the regular calculation wouldn't reproduce them. Metaball objects don't support modifiers though, so it shouldn't be a problem. Eventually we can support per-vertex custom normals (T93551). Differential Revision: https://developer.blender.org/D14593
2022-08-17Cleanup: strip blank lines around comment blocksCampbell Barton
2022-08-16Cleanup: use a structure for Alembic import parametersKévin Dietrich
Also renammed some parameters and sprinkled a dash of documentation.
2022-08-16Merge branch 'blender-v3.3-release'Aras Pranckevicius
2022-08-16Fix T100421: OBJ importer in 3.3 does not keep the vertex orderAras Pranckevicius
While fixing T100302 (rBd76583cb4a1) I did not realize that the change in imported vertex order would actually matter. Turns out, it does for morph targets / mesh shape keys. So redo the fix in a way that does not change the vertex order. Fixes T100421.
2022-08-12Cleanup: repeated words in commentsCampbell Barton
2022-08-11Mesh: Move hide flags to generic attributesHans Goudey
This commit moves the hide status of mesh vertices, edges, and faces from the `ME_FLAG` to optional generic boolean attributes. Storing this data as generic attributes can significantly simplify and improve code, as described in T95965. The attributes are called `.hide_vert`, `.hide_edge`, and `.hide_poly`, using the attribute name semantics discussed in T97452. The `.` prefix means they are "UI attributes", so they still contain original data edited by users, but they aren't meant to be accessed procedurally by the user in arbitrary situations. They are also be hidden in the spreadsheet and the attribute list by default, Until 4.0, the attributes are still written to and read from the mesh in the old way, so neither forward nor backward compatibility are affected. This means memory requirements will be increased by one byte per element when the hide status is used. When the flags are removed completely, requirements will decrease when hiding is unused. Further notes: * Some code can be further simplified to skip some processing when the hide attributes don't exist. * The data is still stored in flags for `BMesh`, necessitating some complexity in the conversion to and from `Mesh`. * Access to the "hide" property of mesh elements in RNA is slower. The separate boolean arrays should be used where possible. Ref T95965 Differential Revision: https://developer.blender.org/D14685
2022-08-11obj: support importing multiple files at onceAras Pranckevicius
Implemented the same way as STL or GPencil SVG importers: loop over the input files, import one by one. Has been requested by the community for quite a long time (e.g. https://blender.community/c/rightclickselect/Jhbbbc/), as well as 3rd party addons to implement just this (https://github.com/p2or/blender-batch-import-wavefront-obj).
2022-08-11Merge branch 'blender-v3.3-release'Aras Pranckevicius
2022-08-11Fix T98781: OBJ exporter wrongly writing default material socket values when ↵Aras Pranckevicius
textures are present Report T98781 and part of T97642: the MTLMaterial info only captures image nodes and the default socket values. When the image information is present, do not emit the socket defaults - the .MTL spec states they are multiplied together, but the default value is not used in blender when the socket is connected. Also contains svn tests repository update to extend the test coverage, and update test expectation outputs.
2022-08-10Merge branch 'blender-v3.3-release'Aras Pranckevicius
2022-08-10obj: Also find .mtl images by their basename, if all else fails (T77801)Aras Pranckevicius
While T77801 itself is working as expected in the new C++ obj importer, the repro file there uses absolute paths to material images, yet the images themselves are right there in the current folder. The old python based importer did find them, since it was doing a really complex image search. My understanding is that while C++ importer was developed, it was decided to not do that -- however just the "basename file in the mtl directory" sounds simple enough and gets the repro case file work correctly.
2022-08-10Merge branch 'blender-v3.3-release'Aras Pranckevicius
2022-08-10Fix T100302: New OBJ importer produces too many vertices when faces don't ↵Aras Pranckevicius
span a continuous range As part of the previous fix (D15410), the importer got code to track min & max vertex indices used as part of the mesh faces. However, if faces refer to a "sparse" (i.e. non-contiguous) subset of all vertices, then the imported mesh would contain all the vertices between min & max range. Replace that with proper tracking of actually used vertex indices for each imported mesh. Fixes T100302. This does affect import performance a tiny bit, e.g. importing Blender 3.0 splash scene goes 21.7s -> 22.1s, and importing rungholt.obj goes 2.37s -> 2.48s. Importer related tests have a bunch of vertex changes in them, since now vertices are added in the order that the faces are referring to them. Which incidentally matches the order that the Python based importer was creating them too.
2022-08-09Merge branch 'blender-v3.3-release'Campbell Barton
2022-08-09Fix memory leak exporting to colladaCampbell Barton
2022-08-09Cleanup: sort cmake file-listsCampbell Barton
2022-08-04T90535: import UDIM textures from USDMichael Kowalski
Added logic to the USD Preview Surface importer to convert UDIM textures. Reviewed by: Sybren and Jesse Differential Revision: https://developer.blender.org/D15379
2022-08-04Cleanup: Move RNA path functions into own C++ fileJulian Eisel
NOTE: This is committed to the 3.3 branch as part of D15606, which we decided should go to this release still (by Bastien, Dalai and me). That is because these are important usability fixes/improvements to have for the LTS release. Adds `rna_path.cc` and `RNA_path.h`. `rna_access.c` is a quite big file, which makes it rather hard and inconvenient to navigate. RNA path functions form a nicely coherent unit that can stand well on it's own, so it makes sense to split them off to mitigate the problem. Moreover, I was looking into refactoring the quite convoluted/overloaded `rna_path_parse()`, and found that some C++ features may help greatly with that. So having that code compile in C++ would be helpful to attempt that. Differential Revision: https://developer.blender.org/D15540 Reviewed by: Brecht Van Lommel, Campbell Barton, Bastien Montagne
2022-08-04Merge branch 'blender-v3.3-release'Hans Goudey
2022-08-04Fix: Avoid OBJ importer assert seting normals on mesh with no facesHans Goudey
2022-08-03Merge branch 'blender-v3.3-release'Aras Pranckevicius
2022-08-03Fix T97769: new OBJ exporter does not replace spaces in object namesAras Pranckevicius
The Python based exporter was replacing spaces with underscores in object/group names, mostly to handle cases where names could begin or end with spaces. The new exporter was not doing that. Note: spaces in material names were already handled by the new exporter. Fixes T97769. Updated test coverage expectations; one of the test files has an object with a space in the name.
2022-08-02GPencil: Fix compiler warningAntonio Vazquez
The variable can never be NULL and the comparison was wrong.
2022-08-02Merge branch 'blender-v3.3-release'Hans Goudey
2022-08-02Fix: Use evaluated materials in OBJ exporterHans Goudey
Since 1a81d268a19f2f140, materials on object data can change during evaluation. But a different function is necessary to retrieve materials taking that into account. Solves part of T96721. Differential Revision: https://developer.blender.org/D15595
2022-08-02GPencil: Allow import several SVG at timeAntonio Vazquez
For SVG is very convenient to be able to import several SVG in one operation. Each SVG is imported as a new Grease Pencil object. Also, now the SVG file name is used as Object name. Important: As all SVG imported are converted to Grease Pencil object in the same location of the 3D cursor, the SVG imported are not moved and the result may require a manual fix of location. The same is applied for depth order, the files are imported in alphabetic order according to the File list. Reviewed By: mendio, pepeland Differential Revision: https://developer.blender.org/D14865
2022-08-01Merge branch 'blender-v3.3-release'Aras Pranckevicius
2022-08-01Fix T99502: OBJ/MTL import: behavior changed for missing texture filesAras Pranckevicius
Python based OBJ importer, as well as glTF2 importer, are creating "placeholder" images for texture images that can't be found. These are empty textures (displayed as magenta), but with their file paths set so that File > External Data > Report Missing Files can report them as missing. Make the new C++ OBJ importer do the same as well. Fixes T99502.
2022-08-01USD import: Handle material purposeMichael Kowalski
This is a partial fix for T90535. USD allows binding materials generically as well as for a specific purpose. I.e., purpose may be generic (unspecified) or one of - Full: truest representation of the scene - Preview: lightweight material for preview Curently, only generically bound materials, with unspecified purpose (allPurpose), are imported. This issue is preventing preview materials from being imported in the Alab scene. This patch adds logic to attempt to fall back on importing preview or full materials, in that order, if there is no generic material bound to the mesh. Reviewed by: Sybren Differential Revision: https://developer.blender.org/D15352
2022-08-01Merge branch 'blender-v3.3-release'Aras Pranckevicius
2022-08-01Fix T100076: OBJ import: new importer doesn't use //relative/image/pathsAras Pranckevicius
The Python based importer had logic to immediately turn image paths into relative-to-blender-file paths, if user preference for relative paths is used (which is on by default). The new importer code did not have that. Fixes T100076.
2022-07-31Merge branch 'blender-v3.3-release'Aras Pranckevicius
2022-07-31Fix T100075: OBJ import: images loaded multiple times instead of being reusedAras Pranckevicius
The new OBJ/MTL importer was creating a new image for any referenced texture, even if another material (or another property of the same material) already referenced the same texture. Make it use BKE_image_load_exists function just like Collada or USD importers do. Fixes T100075. Extended test coverage to count imported images; without the fix import_cubes_with_textures_rel would have incorrectly created 5 images instead of 4.
2022-07-30Cleanup: braces around statements in OBJ parserAras Pranckevicius