This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/io/alembic/ABC_alembic.h
Kévin Dietrich b5dcf74636 Cycles: add support for rendering deformation motion blur from Alembic caches.
This patch adds the ability to render motion blur from Alembic caches.
The motion blur data is derived from a velocity attribute whose name has
to be defined by the user through the MeshSequenceCache modifier, with a
default value of ".velocities", which is the standard name in Alembic
for the velocity property, although other software may ignore it and
write velocity with their own naming convention (e.g. "v" in Houdini).

Furthermore, a property was added to define how the velocity vectors
are interpreted with regard to time : frame or second. "Frame"
means that the velocity is already scaled by the time step and we do not
need to modify it for it to look proper. "Second" means that the unit
the velocity was measured in is in seconds and so has to be scaled by
some time step computed here as being the time between two frames (1 /
FPS, which would be typical for a simulation). This appears to be
common, and is the default behavior.

Another property was added to control the scale of the velocity to
further modify the look of the motion blur.

Reviewed By: brecht, sybren

Differential Revision: https://developer.blender.org/D2388
2020-08-03 03:44:40 +02:00

144 lines
4.4 KiB
C++

/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#pragma once
/** \file
* \ingroup balembic
*/
#ifdef __cplusplus
extern "C" {
#endif
struct CacheReader;
struct ListBase;
struct Main;
struct Mesh;
struct Object;
struct Scene;
struct bContext;
typedef struct AbcArchiveHandle AbcArchiveHandle;
int ABC_get_version(void);
struct AlembicExportParams {
double frame_start;
double frame_end;
unsigned int frame_samples_xform;
unsigned int frame_samples_shape;
double shutter_open;
double shutter_close;
bool selected_only;
bool uvs;
bool normals;
bool vcolors;
bool apply_subdiv;
bool curves_as_mesh;
bool flatten_hierarchy;
bool visible_objects_only;
bool renderable_only;
bool face_sets;
bool use_subdiv_schema;
bool packuv;
bool triangulate;
bool export_hair;
bool export_particles;
/* See MOD_TRIANGULATE_NGON_xxx and MOD_TRIANGULATE_QUAD_xxx
* in DNA_modifier_types.h */
int quad_method;
int ngon_method;
float global_scale;
};
/* The ABC_export and ABC_import functions both take a as_background_job
* parameter, and return a boolean.
*
* When as_background_job=true, returns false immediately after scheduling
* a background job.
*
* When as_background_job=false, performs the export synchronously, and returns
* true when the export was ok, and false if there were any errors.
*/
bool ABC_export(struct Scene *scene,
struct bContext *C,
const char *filepath,
const struct AlembicExportParams *params,
bool as_background_job);
bool ABC_import(struct bContext *C,
const char *filepath,
float scale,
bool is_sequence,
bool set_frame_range,
int sequence_len,
int offset,
bool validate_meshes,
bool as_background_job);
AbcArchiveHandle *ABC_create_handle(struct Main *bmain,
const char *filename,
struct ListBase *object_paths);
void ABC_free_handle(AbcArchiveHandle *handle);
void ABC_get_transform(struct CacheReader *reader,
float r_mat_world[4][4],
float time,
float scale);
/* Either modifies current_mesh in-place or constructs a new mesh. */
struct Mesh *ABC_read_mesh(struct CacheReader *reader,
struct Object *ob,
struct Mesh *current_mesh,
const float time,
const char **err_str,
int flags);
bool ABC_mesh_topology_changed(struct CacheReader *reader,
struct Object *ob,
struct Mesh *existing_mesh,
const float time,
const char **err_str);
void CacheReader_incref(struct CacheReader *reader);
void CacheReader_free(struct CacheReader *reader);
struct CacheReader *CacheReader_open_alembic_object(struct AbcArchiveHandle *handle,
struct CacheReader *reader,
struct Object *object,
const char *object_path);
bool ABC_has_vec3_array_property_named(struct CacheReader *reader, const char *name);
/* r_vertex_velocities should point to a preallocated array of num_vertices floats */
int ABC_read_velocity_cache(struct CacheReader *reader,
const char *velocity_name,
float time,
float fps,
int num_vertices,
float *r_vertex_velocities);
#ifdef __cplusplus
}
#endif