From ea54cbe1b42efb3107285c89685f555c06997062 Mon Sep 17 00:00:00 2001 From: Michael Kowalski Date: Tue, 3 Aug 2021 11:55:53 +0200 Subject: USD: add USD importer This is an initial implementation of a USD importer. This work is comprised of Tangent Animation's open source USD importer, combined with features @makowalski had implemented. The design is very similar to the approach taken in the Alembic importer. The core functionality resides in a collection of "reader" classes, each of which is responsible for converting an instance of a USD prim to the corresponding Blender Object representation. The flow of control for the conversion can be followed in the `import_startjob()` and `import_endjob()` functions in `usd_capi.cc`. The `USDStageReader` class is responsible for traversing the USD stage and instantiating the appropriate readers. Reviewed By: sybren, HooglyBoogly Differential Revision: https://developer.blender.org/D10700 --- source/blender/makesdna/DNA_cachefile_defaults.h | 1 + source/blender/makesdna/DNA_cachefile_types.h | 26 ++++++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) (limited to 'source/blender/makesdna') diff --git a/source/blender/makesdna/DNA_cachefile_defaults.h b/source/blender/makesdna/DNA_cachefile_defaults.h index d37994bb488..521b72567d4 100644 --- a/source/blender/makesdna/DNA_cachefile_defaults.h +++ b/source/blender/makesdna/DNA_cachefile_defaults.h @@ -36,6 +36,7 @@ .scale = 1.0f, \ .object_paths ={NULL, NULL}, \ \ + .type = 0, \ .handle = NULL, \ .handle_filepath[0] = '\0', \ .handle_readers = NULL, \ diff --git a/source/blender/makesdna/DNA_cachefile_types.h b/source/blender/makesdna/DNA_cachefile_types.h index 04c99c6c4b1..b38c7827ea5 100644 --- a/source/blender/makesdna/DNA_cachefile_types.h +++ b/source/blender/makesdna/DNA_cachefile_types.h @@ -31,6 +31,13 @@ extern "C" { struct GSet; +/* CacheFile::type */ +typedef enum { + CACHEFILE_TYPE_ALEMBIC = 1, + CACHEFILE_TYPE_USD = 2, + CACHE_FILE_TYPE_INVALID = 0, +} eCacheFileType; + /* CacheFile::flag */ enum { CACHEFILE_DS_EXPAND = (1 << 0), @@ -44,13 +51,13 @@ enum { }; #endif -/* Representation of an object's path inside the Alembic file. +/* Representation of an object's path inside the archive. * Note that this is not a file path. */ -typedef struct AlembicObjectPath { - struct AlembicObjectPath *next, *prev; +typedef struct CacheObjectPath { + struct CacheObjectPath *next, *prev; char path[4096]; -} AlembicObjectPath; +} CacheObjectPath; /* CacheFile::velocity_unit * Determines what temporal unit is used to interpret velocity vectors for motion blur effects. */ @@ -63,7 +70,7 @@ typedef struct CacheFile { ID id; struct AnimData *adt; - /** Paths of the objects inside of the Alembic archive referenced by this CacheFile. */ + /** Paths of the objects inside of the archive referenced by this CacheFile. */ ListBase object_paths; /** 1024 = FILE_MAX. */ @@ -84,14 +91,17 @@ typedef struct CacheFile { short flag; short draw_flag; /* UNUSED */ - char _pad[3]; + /* eCacheFileType enum. */ + char type; + + char _pad[2]; char velocity_unit; - /* Name of the velocity property in the Alembic file. */ + /* Name of the velocity property in the archive. */ char velocity_name[64]; /* Runtime */ - struct AbcArchiveHandle *handle; + struct CacheArchiveHandle *handle; char handle_filepath[1024]; struct GSet *handle_readers; } CacheFile; -- cgit v1.2.3