Commit Graph

1485 Commits

Author SHA1 Message Date
bartus
7207015a58 Fix #125070: Handle "Unit Scale" correctly in the STL and PLY importers
When importing an STL file with the "Scene Unit" option enabled, we
should divide by the Unit Scale instead of multiply (which was already
done when Exporting with "Unit Scale" enabled)

The PLY importer had the same issue.

The prior "legacy" implementation did this correctly:
b42d686277/io_mesh_stl/__init__.py (L110)

Co-authored-by: Jesse Yurkovich <jesse.y@gmail.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/124718
2024-08-13 19:22:58 +02:00
Michael Kowalski
f30689e12c Fix: USD instancing export errors
Fixed two errors when exporting to USD with Instancing enabled:

Ensuring the mesh prototype prim exists before referencing it to
avoid the "Unresolved reference prim path" error messages in the
console.

Adding the Root Prim path prefix to the prototype reference path.

Pull Request: https://projects.blender.org/blender/blender/pulls/126210
2024-08-12 16:35:51 +02:00
Jesse Yurkovich
cb9ca2f7a7 Fix: USD: Write vertex crease data correctly and add tests
While adding test coverage for mesh subdivision surface scenarios, a few
problems were noticed with vertex crease support.

This PR fixes:
- Used incorrect `crease_sharpnesses` instead of `corner_sharpnesses`
- Used incorrect value for an "infinitely sharp" vertex crease
- Unnecessarily wrote out Blender's `crease_vert` attribute as a primvar

Tests are added which validate everything we support.

Pull Request: https://projects.blender.org/blender/blender/pulls/126209
2024-08-12 01:50:34 +02:00
Jesse Yurkovich
56779c7bb0 Fix: USD: Ensure mesh velocity data is written sparsely and add tests
The mesh velocity data was not using the UsdUtilsSparseValueWriter and
was writing out data for all frames even if the velocity didn't change.

Adds test coverage for this scenario as well as other situations where a
MeshSequenceCache (MSC) would be required:
- Ensures that when positions vary a MSC is added
- Ensures that when velocities vary a MSC is added (see blender/blender@c862d40e09)
- Ensures that when attributes vary a MSC is added (see blender/blender@3c394d39f2)

Pull Request: https://projects.blender.org/blender/blender/pulls/126208
2024-08-11 23:36:40 +02:00
Jesse Yurkovich
ef2e1f8423 Fix #126160: Incorrect string returned from usd::make_safe_name
When a multi-byte character needed to be turned into a single "_", the
final returned string would be too large in size.

Resize it to the exact number of bytes required and add test coverage.

Pull Request: https://projects.blender.org/blender/blender/pulls/126164
2024-08-10 05:59:05 +02:00
Campbell Barton
b1be5b15c4 Cleanup: various non functional changes
Remove struct, use string copy macros.
2024-08-10 11:32:43 +10:00
Jesse Yurkovich
3c394d39f2 Fix: USD: Write sparse attribute data correctly
The common code which writes out attribute data was seemingly not
performing the right sequence of calls for the UsdUtilsSparseValueWriter
to actually write sparse data.

See PR for a test file and .usda files produced with 4.1 and now with
this change applied.

Pull Request: https://projects.blender.org/blender/blender/pulls/126113
2024-08-09 19:48:52 +02:00
Jesse Yurkovich
5835ea1eaf Build: C++20: Properly implement some definitions of operator==
Several `operator==` methods were mis-implemented; they were not defined
as `const` when implemented as part of the class rather than as friends.
C++20 is more strict about this now.

Example errors: https://godbolt.org/z/h8G5jaoha

Ref #125881

Pull Request: https://projects.blender.org/blender/blender/pulls/126121
2024-08-09 19:48:05 +02:00
Aras Pranckevicius
983687ebfc Tests: extend OBJ test coverage for #126065 2024-08-09 14:49:17 +03:00
Scurest
86e7668b11 Fix #117367: OBJ importer does not correctly import vertex colors when not all vertices have them
Lift certain incorrect assumptions about the order of vertices in
an OBJ file when processing vertex colors, which could lead to
missing or randomly permuted colors.

Replaces the list-of-blocks representation, attuned to assumptions
that the verts in an object form a contiguous subrange, with a
flat array better suited for random-access.

Co-authored-by: scurest <scurest@users.noreply.github.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/126065
2024-08-09 08:53:49 +02:00
Jesse Yurkovich
c862d40e09 Fix: USD: Ensure animated velocities are loaded correctly in rare case
If velocity attributes are the only thing being animated, we would fail
to add the cache modifier. This prevents velocity attribute data from
being updated as the timeline changes.

This is a rather rare case. Typically if velocity is changing that would
imply the positions of the mesh are also changing, and the positions
will add the modifier correctly in that case.

Pull Request: https://projects.blender.org/blender/blender/pulls/126105
2024-08-08 21:54:18 +02:00
Jacques Lucke
d74d8ceb23 Cleanup: move BKE_packedFile.h to C++
Part of #103343.
2024-08-08 15:13:20 +02:00
Jacques Lucke
5861b078f7 Core: rename ID.flag and ID.tag values
Previously, values for `ID.flag` and `ID.tag` used the prefixes `LIB_` and
`LIB_TAG` respectively. This was somewhat confusing because it's not really
related to libraries in general. This patch changes the prefix to `ID_FLAG_` and
`ID_TAG_`. This makes it more obvious what they correspond to, simplifying code.

Pull Request: https://projects.blender.org/blender/blender/pulls/125811
2024-08-07 12:12:17 +02:00
Jesse Yurkovich
2f7b66f634 Fix #123972: Hydra storm crash with USD sub-d meshes
When using the USD export method with Hydra storm[1], problems can occur
because of how this was integrated alongside the direct Hydra method.
The direct hydra support was initially added in Blender 4.0 and the USD
option was integrated at the same time in order to provide a mechanism
for comparison and double-checking each implementation.

In the context of this bug, for Viewport previews and renders, the Hydra
engine is initially triggered and executed as part of an "engine update"
call from the various v3d draw managers. During this call the USD export
is attempted.

For sub-d meshes the USD export machinery will, by default, attempt to
apply the correct Subdivision Scheme attribute to mesh data. That means
it will export the unsubdivided base mesh with an attribute letting the
downstream receiver of the data know they should do the subdivision on
their own. This subdivision scheme support was added in 4.1.

However, in order to do this, USD must first disable the Subdivision
modifiers in Blender before exporting the mesh. Disabling modifiers
triggers depsgraph processing and, unfortunately, this processing will
also trigger an "engine update" for Hydra... again.

Reentrancy is not supported here. See stack trace in original bug.

So, instead, change the USD export option to output a subdivided mesh to
begin with. This has the following ramifications:

- Viewport material preview and render modes no longer crash when sub-d
  is used

- While F12/final renders did not crash, changing this option will now
  properly render the subdivided geometry when using the USD export
  method. Allowing our USD / Hydra render tests to align more closely.
  The direct Hydra option was already pre-subdividing mesh data anyhow.

  This will require updating the USD reference render images.

- The underlying integration issue is not fixed. Triggering a USD export
  inside the "engine update" call path seems error-prone and can lead to
  similar issues in the future.

Pull Request: https://projects.blender.org/blender/blender/pulls/125840
2024-08-06 21:42:54 +02:00
Devashish Lal
f6e6f2b2d2 Geometry Nodes: PLY import node
This commit adds a PLY format import node, part of the current Google
Summer of Code Project [0]. The importer is refactored to output a mesh,
and a node is added to wrap around the importer. The node supports error
messages from the importer. The node is hidden behind an experimental
option for now, like the others.

0: https://devtalk.blender.org/t/gsoc-2024-geometry-nodes-file-import-nodes/34482)

Pull Request: https://projects.blender.org/blender/blender/pulls/125587
2024-08-05 14:54:54 +02:00
Jesse Yurkovich
fe672bd479 Cleanup: USD: const correctness fixes
Apply `const` to variables, arguments, and methods. Also includes a few
variable shadowing changes that were noticed along the way.

All changes should have no user visible effects.

Pull Request: https://projects.blender.org/blender/blender/pulls/125873
2024-08-04 22:42:08 +02:00
Jesse Yurkovich
892bdf3134 USD: support color4f types in addition to color3f
Support the USD `color4f` (and related) types during import and use this
type when writing out Blender's color attributes.

This roundtrips Blender data correctly and will properly load data from
many more USD files as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/125839
2024-08-04 04:34:15 +02:00
Campbell Barton
99af19932e Cleanup: spelling in comments 2024-07-30 12:38:16 +10:00
Campbell Barton
1d0d8cdab5 Unbreak building WITH_USD 2024-07-30 12:20:26 +10:00
Jesse Yurkovich
4b6ed00b3e Cleanup: Don't depend on ordering when setting USDExportParams
Access each parameter by name instead of depending on ordering.

Also reorder the parameters to better indicate their groupings, making
things a bit easier to see at a glance what is possible to be set.

Pull Request: https://projects.blender.org/blender/blender/pulls/125620
2024-07-29 22:38:40 +02:00
Charles Wardlaw
8a97f31e76 USD: Use Asset Resolver to resolve texture paths
This patch uses the USD AssetResolver to deal with texture paths.
Functionally, adding this patch should make no functional differences in
the way textures are written.

If textures are specified as assets instead of file paths, at current
the file will error on load and the textures will not be assigned. These
should now be processed correctly.

See PR for example file and testing scenarios.

Co-authored-by: kiki <charles@skeletalstudios.com>
Co-authored-by: Jesse Yurkovich <jesse.y@gmail.com>
Co-authored-by: Charles Wardlaw <cwardlaw@nvidia.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/122747
2024-07-29 20:00:48 +02:00
Campbell Barton
111a40239a Cleanup: match argument names for function & declarations
Match function and declaration names, picking names based on
consistency with related code & clarity.

Also changes for old conventions, missed in previous cleanups:

- name -> filepath
- tname -> newname
- maxlen -> maxncpy
2024-07-27 13:32:51 +10:00
Campbell Barton
62afbbef9b Cleanup: use const variables & args, pass args by reference 2024-07-25 10:17:40 +10:00
Campbell Barton
d3fbc56021 Cleanup: various cppcheck warnings
Avoid shadowing, use const args & match function & declaration args.
2024-07-22 09:58:43 +10:00
Aras Pranckevicius
fe1bf4897d Fix #120253: Batch export of STL files incorrectly handles .stl suffix
When path to export is in the form if "/some/folder/.stl", any
regular path functions (BLI_path_suffix, BLI_path_extension_replace
etc.) would not treat it as having ".stl" extension, but rather
as a hidden file called ".stl".

And so BLI_path_suffix would turn it into "/some/folder/.stlCube".
To prevent this, detect this exact case when the whole basename
is just ".stl", and remove the ".stl" part before using other path
functions.

Pull Request: https://projects.blender.org/blender/blender/pulls/125179
2024-07-21 16:24:45 +02:00
Jesse Yurkovich
ec4fc2d34a CMake: Modernize the optional TBB dependency
This continues the cmake modernization effort and introduces support for
allowing our optional dependencies to integrate properly. TBB is added
here as it's proven troublesome to maintain correctly.

Currently the only Blender project which uses the TBB headers directly
is `blenlib`.  However, all downstream projects which require blenlib as
their dependency, and wish to properly make use of its threading
facilities, needed to define various TBB items in their CMake files. Not
only is this unnecessary and arcane, but several projects didn't do this
and ended up not using threading as well as producing ODR violations
along the way[1].

This PR makes TBB a modern dependency and exposes it PUBLIC'ly from
`blenlib`.  All downstream projects which depend on blenlib will now
receive everything they require from TBB automatically. This includes
the `WITH_TBB` define, the headers, and the library itself.

[1] blender/blender@05241f47f5

Pull Request: https://projects.blender.org/blender/blender/pulls/124916
2024-07-19 23:30:56 +02:00
Bastien Montagne
c607ead4b7 Refactor: Makesrna: move generated code further in C++.
This commit moves generated `RNA_blender.h`, `RNA_prototype.h` and
`RNA_blender_cpp.h` headers to become C++ header files.

It also removes the now useless `RNA_EXTERN_C` defines, and just
directly use the `extern` keyword. We do not need anymore `extern "C"`
declarations here.

Pull Request: https://projects.blender.org/blender/blender/pulls/124469
2024-07-15 16:39:45 +02:00
Campbell Barton
8fdb190278 Cleanup: typos in comments (duplicate words) 2024-07-14 18:55:43 +10:00
Campbell Barton
9fb0d3c3ef Cleanup: spelling in comments 2024-07-13 16:56:57 +10:00
Jesse Yurkovich
05241f47f5 CMake: Add WITH_TBB definition for the projects that require it
The `WITH_TBB` define needs to be set in order for code using the
various parallel threading helpers [1][2] to actually be multi-threaded.

The affected projects did not have `WITH_TBB` defined and were using the
single-thread variant of all affected APIs.

Additionally, in the case of `EnumerableThreadSpecific`, this results in
an ODR violation where there are 2 versions of the same class linked
into our final binary. One with TBB members and one without.

--------
[1] Namely code using the `BLI_task.hh`, `BLI_sort.hh`, and `BLI_enumerable_thread_specific.hh` headers
[2] `EnumerableThreadSpecific`, `parallel_for_each`, `parallel_reduce`, `parallel_invoke`, `isolate_task`, `parallel_sort`

Pull Request: https://projects.blender.org/blender/blender/pulls/124283
2024-07-10 23:01:38 +02:00
Aras Pranckevicius
6f0620161d Fix #123949: OBJ importer should not set face sharpness when vertex normals are present
Having both custom vertex normals and the "is the face sharp?"
attribute on a mesh leads to some non-intuitive behaviours. Instead,
make the behaviour more aligned with OBJ format description wording,
which says "When vertex normals are present, they supersede
smoothing groups" (https://paulbourke.net/dataformats/obj/).

Pull Request: https://projects.blender.org/blender/blender/pulls/124366
2024-07-09 16:59:17 +02:00
Hans Goudey
8762290658 Fix: Windows build error after recent cleanup
Just switch back to the C allocator API here, I don't know how we're
supposed to allocate DNA types with `DNA_DEFINE_CXX_METHODS`.
2024-07-08 15:48:31 -04:00
Hans Goudey
792efafa2c Cleanup: Miscellaneous changes to OBJ/import nodes
- Sort add menu alphabetically
- Use forward declaration for GeometrySet again
- Use `this->` to access class methods
- Use `MEM_cnew`
- Fix typo
- Pass Span by value
- Pass MutableSpan instead of Vector &
- Remove unnecessary whitespace
- Use `BLI_SCOPED_DEFER` for freeing non-RAII objects
- Use `is_empty()` instead of `size() == 0`
- Use `GeometrySet::from_mesh` ability to handle null argument
2024-07-08 15:12:42 -04:00
Devashish Lal
4b884f737c Geometry Nodes: OBJ Import Node
Add a node similar to the STL import node (d1455c4138) that
imports OBJ files, including both meshes and curves. The output consists
of a geometry instance for each mesh/curve in the file.

There are a few improvements to address in the future: Currently the node
has no inputs besides the file path. Options may be exposed in the future.
Materials are also not imported yet, because creating material data-blocks
during evaluation may not be trivial.

This is part of a GSoC project:
https://devtalk.blender.org/t/gsoc-2024-geometry-nodes-file-import-nodes/34482

Pull Request: https://projects.blender.org/blender/blender/pulls/123967
2024-07-08 20:20:38 +02:00
Jesse Yurkovich
5bb5cfd97a Merge branch 'blender-v4.2-release' 2024-07-08 09:07:07 -07:00
Jesse Yurkovich
7d6835f043 Fix #124075: Read Alembic point cloud velocity data
This regressed during the change to use GeometrySets in ea256346a8.

Pull Request: https://projects.blender.org/blender/blender/pulls/124077
2024-07-08 17:56:43 +02:00
Jesse Yurkovich
f9b2edbf01 Fix #124009: Clamp material index when uploading mesh through Hydra
Prevent crash from a mesh created around the time of Blender 4.0 with
bad (negative) material indices on some faces.

The Poly Haven folks were poked to fix the actual asset as well but it's
simple enough for us to clamp in this code path, especially since we
were already doing it for the upper bound.

Pull Request: https://projects.blender.org/blender/blender/pulls/124026
2024-07-08 17:55:50 +02:00
Philipp Oeser
782b9a80fe Merge branch 'blender-v4.2-release' 2024-07-08 16:04:28 +02:00
Philipp Oeser
93585602a1 Fix #100164: Alembic import: Ensure mesh normals are normalized
Similar to !124267 and !124261

This normal data is eventually passed into `BKE_mesh_set_custom_normals`
and through to `mesh_normals_corner_custom_set` which expects normals to
actually be normalized per its documentation.

Not doing so would yield meshes with incorrect "sharp" data for affected
edges.

Thx @OmarEmaraDev for the initial patch

Pull Request: https://projects.blender.org/blender/blender/pulls/124336
2024-07-08 16:03:52 +02:00
Jesse Yurkovich
74c282f532 Merge branch 'blender-v4.2-release' 2024-07-07 12:28:30 -07:00
Jesse Yurkovich
f49780b888 Fix #120590: USD: Ensure mesh normals are actually normalized
This normal data is eventually passed into `BKE_mesh_set_custom_normals`
and through to `mesh_normals_corner_custom_set` which expects normals to
actually be normalized per its documentation.

Not doing so would yield meshes with incorrect "sharp" data for affected
edges.

Pull Request: https://projects.blender.org/blender/blender/pulls/124267
2024-07-07 21:27:01 +02:00
Jesse Yurkovich
8d26b2b80d Merge branch 'blender-v4.2-release' 2024-07-05 11:21:12 -07:00
Charles Wardlaw
5224b1cab2 Fix #124206: USD: Always export animation transforms, even when identity
Now the export only skips identity transforms on static exports, to save
space.

Co-authored-by: Charles Wardlaw <cwardlaw@nvidia.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/124251
2024-07-05 20:19:47 +02:00
Aras Pranckevicius
8ba25aed02 Merge branch 'blender-v4.2-release'
# Conflicts:
#	tests/data
2024-07-05 12:13:17 +03:00
Aras Pranckevicius
b238df312d Fix #123918: STL exporter does not reverse faces for mirrored objects
Old python STL exporter, as well as other exporters like OBJ,
reverse the face order when object being exported has odd number
of negative scales in the matrix. The C++ STL exporter was lacking
that, resulting in the exported object looking "inside out".

The extra branch inside triangle export inner loop has no measurable
performance impact, probably because it is entirely predictable.

Pull Request: https://projects.blender.org/blender/blender/pulls/124219
2024-07-05 11:08:22 +02:00
Michael Kowalski
95a335b70e Merge remote-tracking branch 'origin/blender-v4.2-release' 2024-07-03 19:27:21 -04:00
Michael Kowalski
94c184d2a7 USD: custom properties export improvements
Added a new custom_properties_namespace USD export option, to
allow replacing or omitting the current default "userProperties"
namespace prefix.

Note that this option does not apply to names that already have a prefix
(e.g., it would apply to name "bar" but not "foo:bar").  It also does not apply
to the  internal Blender "object_name" and "data_name" properties which
always have the prefix "userProperties:blender".

Also added logic to handle ":" namespace delimiters in property names.

Pull Request: https://projects.blender.org/blender/blender/pulls/124067
2024-07-04 00:45:30 +02:00
Ray Molenkamp
3094e2a144 Merge remote-tracking branch 'origin/blender-v4.2-release' 2024-07-03 14:24:22 -06:00
Jesse Yurkovich
e9ba414799 Fix #124103: Build error when using WITH_USD but not WITH_HYDRA
Move a few functions to a common location so that they're all accessible
from both USD and Hydra.

Pull Request: https://projects.blender.org/blender/blender/pulls/124119
2024-07-03 22:02:53 +02:00
Jesse Yurkovich
20ecdd628d Merge branch 'blender-v4.2-release' 2024-06-30 12:07:24 -07:00