Commit Graph

1873 Commits

Author SHA1 Message Date
Brecht Van Lommel
4653b65f7c Logging: Add DEBUG, TRACE severity, replace numeric levels
The numeric levels have no obvious meaning. This removes the distinction
between severity and levels, instead there is a single list of named levels
with defined meaning.

Debug means information that's mainly useful for developers, and trace is for
very verbose code execution tracing.

Pull Request: https://projects.blender.org/blender/blender/pulls/140244
2025-07-09 20:59:26 +02:00
Jesse Yurkovich
26a511df7a Merge branch 'blender-v4.5-release' 2025-07-08 19:45:03 -07:00
Jesse Yurkovich
a8f543f6a8 Fix: USD: Add MeshSequenceCache modifier for animated crease values
The mesh importer was only checking for animated positions, velocities,
and primvars when determining if a cache modifier needed to be used.
Extend this to crease values (and normals) too.

The added test ensures a base level of coverage here.

Related to: #141633

Pull Request: https://projects.blender.org/blender/blender/pulls/141643
2025-07-09 04:44:30 +02:00
Jesse Yurkovich
779f6cb387 Merge branch 'blender-v4.5-release' 2025-07-07 21:20:02 -07:00
Michael B Johnson
a5f915d3d3 Fix: USD: Correct the exported extents for point instancers
Adds and corrects the extent attributes of USD PointInstancer prims.
Extents are now computed for PointInstancers just before the USD stage
is saved and during the export finalization step. The unit test has been
updated accordingly.

This PR also marks all point instancers' prototypes as over after the
extent calculation is done, including the prototypes used by nested
point instancers. This follows the official USD recommendation to place
prototypes under a point instancer marked as over:
https://openusd.org/docs/api/class_usd_geom_point_instancer.html#:~:text=place%20them%20under%20a%20prim%20that%20is%20just%20an%20%22over%22

Authored by Apple: Zili Zhou (Liz)

Co-authored-by: Zili (Liz) Zhou <zili_zhou@apple.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/141299
2025-07-08 06:19:32 +02:00
Campbell Barton
0ceedc2a7d Cleanup: various non-functional changes in C++ 2025-07-05 09:03:09 +10:00
Aras Pranckevicius
65ce05eae7 Merge branch 'blender-v4.5-release' 2025-07-04 11:37:22 +03:00
Aras Pranckevicius
641824753a Fix #141434: OBJ importer should apply bounds clamp size to the whole scene
It was applying the bounds clamp to each object individually,
which changed spatial relationships between objects. Make the logic
match what used to be done in the Python OBJ importer back in the day.

Pull Request: https://projects.blender.org/blender/blender/pulls/141446
2025-07-04 10:36:18 +02:00
Hans Goudey
1f92fd7577 Refactor: Use AttrType instead of CustomData type in attribute API
Change `eCustomDataType` to `bke::AttrType` for uses of the attribute
API (the `AttributeAccessor` one anyway). I didn't touch any values that
might be saved in files; those should be handled on a case by case basis.

Part of #122398

Pull Request: https://projects.blender.org/blender/blender/pulls/141301
2025-07-01 22:14:26 +02:00
Jesse Yurkovich
2683c876f0 Fix: Increase maximum collection name length for Collection Export
Follow up to fdaaea6328

The initial collection export code used the wrong define.

Pull Request: https://projects.blender.org/blender/blender/pulls/141239
2025-07-01 20:14:35 +02:00
Jesse Yurkovich
636444ae10 Fix: USD: Use correct ReportList if collection cannot be found for export
The `worker_status` hasn't been initialized yet because the job hasn't
started. Use the incoming `reports` list directly.

Pull Request: https://projects.blender.org/blender/blender/pulls/141242
2025-06-30 15:00:45 -07:00
Jesse Yurkovich
2a1ad5bf6c Fix: USD: Use correct ReportList if collection cannot be found for export
The `worker_status` hasn't been initialized yet because the job hasn't
started. Use the incoming `reports` list directly.

Pull Request: https://projects.blender.org/blender/blender/pulls/141242
2025-06-30 23:59:01 +02:00
Jesse Yurkovich
3e58b6dd6a Cleanup: USD: Various non-functional changes for usd_light_convert.cc
- Remove dead conditionals from usage of `bke::node_add_static_node`
  with known node types
- Include-what-you-use additions

Pull Request: https://projects.blender.org/blender/blender/pulls/141188
2025-06-30 20:55:37 +02:00
Jesse Yurkovich
72de50483e Cleanup: USD: Prevent some unneeded char to string conversions
Notably, there were several code paths which could end up converting to
strings, sometimes multiple times, when passing data into USD APIs.

Reduce the use of raw `char *` in the asset interface and use
`std::string` instead to match what will be passed into USD. Using
string views, of any variety, will not help here since the APIs don't
natively support those.

Pull Request: https://projects.blender.org/blender/blender/pulls/140997
2025-06-26 20:13:25 +02:00
Jesse Yurkovich
8219e2202f Cleanup: USD: Various non-functional changes for usd_hook.cc
Follow our C++ coding guidelines related to member variable naming and
ordering within classes.

Pull Request: https://projects.blender.org/blender/blender/pulls/140785
2025-06-23 19:25:36 +02:00
Jesse Yurkovich
0b45984b44 Merge branch 'blender-v4.5-release' 2025-06-20 11:47:09 -07:00
Jesse Yurkovich
5c25a24528 Fix: USD: Prevent unreachable assert when processing String attributes
Incoming string attributes from USD have never been fully processed yet
they were added to our list of convertible types. This list originally
came from the Mesh reader before it was made common, but for Meshes the
string type was being skipped elsewhere so there was no harm. Now that
Point Clouds and Curves use this common code, it does matter.

Files containing string attributes for these object types will hit the
`BLI_assert_unreachable` call inside `copy_primvar_to_blender_attribute`
and trace an error to the console requesting the user to file bugs. This
was discovered while looking into the old Moana scene.

Remove the string entry for now as there's no regression in behavior and
it prevents the assert from firing (functionally harmless in Release
builds but the output to the terminal is unnecessary).

Pull Request: https://projects.blender.org/blender/blender/pulls/140681
2025-06-20 20:46:32 +02:00
Mattias Fredriksson
f27358fde7 Refactor: OBJ import, split file reading & parsing
Improve readability of the parse function for the OBJ importer.
Currently the behavior for parsing input data is nested with reading
and buffering the input stream in the same function. Separating
the problems into two separate functions makes the code easier
to read and understand. This avoids having 100+ lines of parsing
logic entwined with logic for reading/buffering the file.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/140388
2025-06-19 09:03:16 +02:00
Jesse Yurkovich
2a86a93349 Merge branch 'blender-v4.5-release' 2025-06-18 14:55:49 -07:00
Jesse Yurkovich
5e5c51215a Fix: USD: Only process displacement if there's a valid source specified
Some USD files have the displacement input specified in the shader but
do not have it marked as an output in either the shader or the material.

Skip processing if we do not have a valid displacement source.

Pull Request: https://projects.blender.org/blender/blender/pulls/140619
2025-06-18 23:55:04 +02:00
Jesse Yurkovich
fe45895064 Merge branch 'blender-v4.5-release' 2025-06-18 11:26:07 -07:00
Jesse Yurkovich
bcd5af34f9 Fix: USD: Traverse through UsdShadeNodeGraph nodes during material import
Follow connections through `UsdShadeNodeGraph` nodes when reading
materials rather than looking only for `UsdShadeShader` nodes.

Found while investigating the Intel Sponza research sample:
https://www.intel.com/content/www/us/en/developer/topic-technology/graphics-research/samples.html

Pull Request: https://projects.blender.org/blender/blender/pulls/140565
2025-06-18 20:25:29 +02:00
BaiGave-1
d74c23b3b4 IO: OBJ: Add material name collision import setting
Similar to the same setting in USD: default keeps current behavior
(each material in each import creates a new material in Blender),
"Reference Existing" choice uses already existing materials, when
their names match.

Co-authored-by: BaiGave <107305554+BaiGave@users.noreply.github.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/140280
2025-06-17 17:03:58 +02:00
Jesse Yurkovich
9cc09611da Cleanup: IO: Various cleanups for the AbstractHierarchyIterator
Various non-functional cleanups for the AbstractHierarchyIterator.
- Use const in more places
- Remove unused headers

Pull Request: https://projects.blender.org/blender/blender/pulls/140508
2025-06-17 06:16:01 +02:00
Jesse Yurkovich
9353fc280d Cleanup: Improve precompiled header for USD
Improve the selection of headers included in the precompiled header.

This reduces build time of the full `io/usd` directory by 12 to 19%.

Laptop i7-8750h: Average 30.3 sec --> 24.5 sec
Desktop i7-13700k: Average 12.1 sec --> 10.7 sec

Pull Request: https://projects.blender.org/blender/blender/pulls/140418
2025-06-16 22:51:58 +02:00
Mattias Fredriksson
407dcb39d4 Tests: EXPECT_EQ_SPAN utility macro
Replaces pointer based EXPECT_EQ_ARRAY with EXPECT_EQ_SPAN in most cases
as they already used spans (or span compatible datastructures).
Currently EXPECT_EQ_ARRAY only takes in one size variable and doesn't
compare the  number of elements between arguments (requiring an
additional line to do so).

This should make the code cleaner and safer. Goal is also to promote
the use Spans in new test code.

Pull Request: https://projects.blender.org/blender/blender/pulls/140340
2025-06-16 20:31:00 +02:00
Hans Goudey
c16ee2c939 Refactor: Use C++ bounds corners function
Remove the last uses of `BKE_boundbox_init_from_minmax` in
favor of the newer `bounds::corners`. Besides clearer naming
and better ergonomics, it's also inline-able which seems to be a
good thing for such a simple function.

In order to get the same behavior as before I changed the
C++ bounds function to give the same vertex order as the
older function.

Pull Request: https://projects.blender.org/blender/blender/pulls/140401
2025-06-16 15:49:14 +02:00
Aras Pranckevicius
d9ef240311 Merge branch 'blender-v4.5-release' 2025-06-14 22:15:36 +03:00
Aras Pranckevicius
074fcfe1a5 Fix #138834: FBX importer sets pivots incorrectly in some cases
Fix the rest of #138834, pivot adjustment was not done
when rotation pivot and scaling pivot inside FBX were not matching.

Pull Request: https://projects.blender.org/blender/blender/pulls/140411
2025-06-14 21:14:27 +02:00
Campbell Barton
bb9d491ca5 Merge branch 'blender-v4.5-release' 2025-06-14 16:02:07 +10:00
Campbell Barton
fb3b1043d3 Cleanup: spelling in comments (make check_spelling_*) 2025-06-14 16:01:04 +10:00
Campbell Barton
c482c52346 Cleanup: sort CMake file lists 2025-06-14 15:57:33 +10:00
Jesse Yurkovich
3fa1344dd7 Merge branch 'blender-v4.5-release' 2025-06-13 16:11:31 -07:00
Michael B Johnson
07342407d3 USD: Add support for Point Instancing during Export
Adds a Point Instancing exporter based on the existing
USDPointInstancerReader. Covers both round-trip and Blender-native
workflows. Exports 'Instance on Points' setups as USDGeomPointInstancer,
supporting objects, collections, and nested prototypes.

A warning is shown during export if invalid prototype references are
detected. These would occur if an instancer attempts to instance itself.

This feature is currently gated behind an off-by-default export option
(`use_instancing`) as there are still a few cases which can yield
incorrect results.

Further details in the PR.
Ref: #139758

Authored by Apple: Zili (Liz) Zhou

Pull Request: https://projects.blender.org/blender/blender/pulls/139760
2025-06-14 01:10:55 +02:00
Miguel Pozo
f4e6ad4d24 Core: Use VectorList for duplilists
Replace Listbase with a VectorList for duplist generation.

Performing one heap allocation for each dupli becomes very costly on
scenes with many instances.
Using a VectorList can make playback up to 15% faster.

Most scenes will have lower performance improvements,
but none of the ones I tested were slower.

VectorLists also have the advantage of being able to query the size of
the duplilist.

Pull Request: https://projects.blender.org/blender/blender/pulls/138947
2025-06-13 16:28:54 +02:00
Jesse Yurkovich
283666675c Merge branch 'blender-v4.5-release' 2025-06-12 10:33:38 -07:00
Jesse Yurkovich
37f8616bd5 Fix #140225: Always ensure mesh topology is up to date during USD import
It is possible for a mesh to change topology across frames but still be
detected as not needing a topology update.

Until we can make a finer-grained check against the before and after
topology, unconditionally ensure it's updated for now.

Adds a new test that checks a few frames of changing topology that is
similar, but not the same.

Pull Request: https://projects.blender.org/blender/blender/pulls/140253
2025-06-12 19:32:43 +02:00
Jesse Yurkovich
449b1ca5a7 Merge branch 'blender-v4.5-release' 2025-06-11 15:52:42 -07:00
Jesse Yurkovich
fe0aa375ac Fix: USD: Correctly process point instancers using overs for the prototypes
The canonical way to define Point Instancers in USD is to use "overs"
for the prototype instances[1]. However, our current support was coded
and tested against setups using Scope prims to contain the prototypes
instead.

Both approaches are valid USD, but we need to support the canonical way
which we so far did not; the overs were incorrectly excluded from
processing.

Original patch from Michael Kowalski

[1] https://openusd.org/release/api/class_usd_geom_point_instancer.html#UsdGeomPointInstancer_protoProcessing

Pull Request: https://projects.blender.org/blender/blender/pulls/140232
2025-06-12 00:52:07 +02:00
Campbell Barton
11b21a5993 Merge branch 'blender-v4.5-release' 2025-06-07 12:40:35 +10:00
Campbell Barton
def2a2d049 Logging: remove explicit newlines
CLOG adds newlines, including them in the string adds a blank line.
2025-06-07 12:13:16 +10:00
Aras Pranckevicius
5ad6d42c83 IO: Remove Collada import/export
Removes Collada import/export (has been deprecated since 4.2).

Pull Request: https://projects.blender.org/blender/blender/pulls/139337
2025-06-06 08:38:57 +02:00
Laurynas Duburas
46bc894570 Fix: Curves: Custom knots in Curves and GP operators
Current strategy to deal with operators not supporting custom NURBS
knots is to fall back to calculated knots for curves of the custom mode
but with no `CurvesGeometry::custom_knots` allocated. Such curves are
the result of operators that copy only `Point` and `Curve` domains. This
way the problem is only postponed. It is not possible to add new custom
knot curves to such `CurvesGeometry` as custom knot offsets are
calculated all together and there is no way to distinguish between old
curves with lost knots and new ones. This is more a future problem.

The actual problem in `main` can be shown with an attached blend file
(see PR) by applying `Subdivide` to some points and then adding new
`Bezier` curve to the same object. This particular problem could be
addressed somewhere in `realize_instances.cc` but the actual problem
would persist.

This PR handles custom knots in all places where `BKE_defgroup_copy_list`
is iused, and where `bke::curves::copy_only_curve_domain` is called.
Here the assumption is made that only these places can copy custom knots
modes without copying custom knots. Depending on operator logic knots are
handled most often in one of two ways:
 - `bke::curves::nurbs::copy_custom_knots`:
   copies custom knots for all curves excluding `selection`. Knot modes
   for excluded curves are altered from the custom mode to calculated.
   This way only curves modified by the operator will loose custom knots.
 - `bke::curves::nurbs::update_custom_knot_modes;`
   alters all curves to calculated mode.

In some places (e.g. `reorder.cc`) it is possible to deal with knots
without side effects.

PR also adds `BLI_assert` in `load_curve_knots` function to check if
`CurvesGeometry::custom_knots` exists for custom mode curves. Thus
versioning code is needed addressing the issue in files in case such
already exists.
Pull Request: https://projects.blender.org/blender/blender/pulls/139554
2025-06-04 20:43:15 +02:00
Jesse Yurkovich
04bc3f155e Fix #137662: Auto-validate meshes during USD import if we detect bad faces
A small number of USD files in the wild contain invalid face index data
for some of their meshes. This leads to asserts in debug builds and
crashes for users in retail builds(sometimes). There is already an
import option to Validate Meshes but it turns out that we, and most
other importers, perform validation too late. We crash before getting to
that validate option (see notes).

This PR implements a cheap detection mechanism and will auto-fix if we
detect broken data. The detection may not find all types of bad data but
it will detect what is known to fail today for duplicate vertex indices.

We immediately validate/fix before loading in the rest of the data. The
downside is that this will mean no additional data will be loaded.
Normals, edge creases, velocities, UVs, and all other attributes will be
lost because the incoming data arrays will no longer align.

It should be noted also that Alembic has also chosen this approach. It's
check is significantly weaker though and can be improved separately if
needed.

If auto-fix is triggered, it will typically appear as one trace on the
terminal.
```
WARN (io.usd): <path...>\io\usd\intern\usd_reader_mesh.cc:684
read_mesh_sample: Invalid face data detected for mesh
'/degenerate/m_degenerate'. Automatic correction will be used.
```

A more general downside of these fixes is that this applies to each
frame of animated mesh data. The mesh will be fixed, and re-fixed, on
every frame update when the frame in question contains bad data.

For well-behaved USD scenes, the penalty for this check is between 2-4%.
For broken USD scenes, it depends on how many meshes need the fixup. In
the case of the Intel 4004 Moore Lane scene, the penalty is a 2.7x
slowdown in import time (4.5 s to 12.5 s).

Pull Request: https://projects.blender.org/blender/blender/pulls/138633
2025-06-03 19:26:34 +02:00
Campbell Barton
87fb14fc42 Cleanup: spelling in comments (make check_spelling_*)
Also use doxgen doc-strings.
2025-06-03 10:01:38 +10:00
Hans Goudey
77b14f2dcb Cleanup: Grammar: Fallback vs. fall back
The former is a noun or adjective, the latter is a verb.
2025-06-02 17:13:56 -04:00
Aras Pranckevicius
ba0b1acb4e Fix #139656: FBX importer does not set normalmap textures as "non-color"
Normal maps (and generally all other non-color textures) were not
marked as non-color in the new FBX importer.

Pull Request: https://projects.blender.org/blender/blender/pulls/139725
2025-06-02 15:15:05 +02:00
Leon Schittek
8242eeb7ab Grease Pencil: Support exporting animated SVGs
Extend the existing SVG exporter so it can export frame-by-frame
animations as animated SVGs.

The animation data is fully contained inside the SVG. Each frame
is stored inside a `<g>` group that has the visibility turned off.
Then a `<use>` element displays the current frame using its `href`.
Inside the `<use>` element the `href` property is animated
with an `<animate>` tag that cycles through all the different frames.

To ensure unique element IDs within the file, the IDs of elements
user-defined names with user defined names are suffixed with
an continuously incrementing counter formatted as hex.

Pull Request: https://projects.blender.org/blender/blender/pulls/131173
2025-06-02 11:41:15 +02:00
Campbell Barton
b4b2518c5b Build: resolve build error with USD enabled 2025-06-01 15:09:25 +10:00
Maxime-Cots
efd871e9ef USD: Implement new DomeLight_1 Schema for Import
Handle the `DomeLight_1` schema for import and translate to a World
material like what was already done for the original `DomeLight` schema.

The primary difference is that the new schema provides a `poleAxis`
attribute that authoring applications can use to remove ambiguity for
the orientation of the HDRI texture. Some care was made to match
`usdview` with a set of hand-crafted files. However, after matching,
some real scenes ended up displaying differently. These were corrected
but this could mean there's still issues that will need investigation
and fixing in the future.

Co-authored-by: Nig3l <nig3lpro@gmail.com>
Co-authored-by: Jesse Yurkovich <jesse.y@gmail.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/137761
2025-05-31 01:15:19 +02:00