forked from bartvdbraak/blender
d7d40745fa
* Split render/ into scene/ and session/. The scene/ folder now contains the scene and its nodes. The session/ folder contains the render session and associated data structures like drivers and render buffers. * Move top level kernel headers into new folders kernel/camera/, kernel/film/, kernel/light/, kernel/sample/, kernel/util/ * Move integrator related kernel headers into kernel/integrator/ * Move OSL shaders from kernel/shaders/ to kernel/osl/shaders/ For patches and branches, git merge and rebase should be able to detect the renames and move over code to the right file.
135 lines
4.4 KiB
C++
135 lines
4.4 KiB
C++
/*
|
|
* Copyright 2021 Blender Foundation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#ifdef WITH_ALEMBIC
|
|
|
|
# include <Alembic/AbcCoreFactory/All.h>
|
|
# include <Alembic/AbcGeom/All.h>
|
|
|
|
# include "util/util_vector.h"
|
|
|
|
CCL_NAMESPACE_BEGIN
|
|
|
|
class AlembicProcedural;
|
|
class AttributeRequestSet;
|
|
class Progress;
|
|
struct CachedData;
|
|
|
|
/* Maps a FaceSet whose name matches that of a Shader to the index of said shader in the Geometry's
|
|
* used_shaders list. */
|
|
struct FaceSetShaderIndexPair {
|
|
Alembic::AbcGeom::IFaceSet face_set;
|
|
int shader_index;
|
|
};
|
|
|
|
/* Data of an IPolyMeshSchema that we need to read. */
|
|
struct PolyMeshSchemaData {
|
|
Alembic::AbcGeom::TimeSamplingPtr time_sampling;
|
|
size_t num_samples;
|
|
Alembic::AbcGeom::MeshTopologyVariance topology_variance;
|
|
|
|
Alembic::AbcGeom::IP3fArrayProperty positions;
|
|
Alembic::AbcGeom::IInt32ArrayProperty face_indices;
|
|
Alembic::AbcGeom::IInt32ArrayProperty face_counts;
|
|
|
|
Alembic::AbcGeom::IN3fGeomParam normals;
|
|
|
|
vector<FaceSetShaderIndexPair> shader_face_sets;
|
|
|
|
// Unsupported for now.
|
|
Alembic::AbcGeom::IV3fArrayProperty velocities;
|
|
};
|
|
|
|
void read_geometry_data(AlembicProcedural *proc,
|
|
CachedData &cached_data,
|
|
const PolyMeshSchemaData &data,
|
|
Progress &progress);
|
|
|
|
/* Data of an ISubDSchema that we need to read. */
|
|
struct SubDSchemaData {
|
|
Alembic::AbcGeom::TimeSamplingPtr time_sampling;
|
|
size_t num_samples;
|
|
Alembic::AbcGeom::MeshTopologyVariance topology_variance;
|
|
|
|
Alembic::AbcGeom::IInt32ArrayProperty face_counts;
|
|
Alembic::AbcGeom::IInt32ArrayProperty face_indices;
|
|
Alembic::AbcGeom::IP3fArrayProperty positions;
|
|
|
|
Alembic::AbcGeom::IInt32ArrayProperty crease_indices;
|
|
Alembic::AbcGeom::IInt32ArrayProperty crease_lengths;
|
|
Alembic::AbcGeom::IFloatArrayProperty crease_sharpnesses;
|
|
|
|
vector<FaceSetShaderIndexPair> shader_face_sets;
|
|
|
|
// Those are unsupported for now.
|
|
Alembic::AbcGeom::IInt32ArrayProperty corner_indices;
|
|
Alembic::AbcGeom::IFloatArrayProperty corner_sharpnesses;
|
|
Alembic::AbcGeom::IInt32Property face_varying_interpolate_boundary;
|
|
Alembic::AbcGeom::IInt32Property face_varying_propagate_corners;
|
|
Alembic::AbcGeom::IInt32Property interpolate_boundary;
|
|
Alembic::AbcGeom::IInt32ArrayProperty holes;
|
|
Alembic::AbcGeom::IStringProperty subdivision_scheme;
|
|
Alembic::AbcGeom::IV3fArrayProperty velocities;
|
|
};
|
|
|
|
void read_geometry_data(AlembicProcedural *proc,
|
|
CachedData &cached_data,
|
|
const SubDSchemaData &data,
|
|
Progress &progress);
|
|
|
|
/* Data of a ICurvesSchema that we need to read. */
|
|
struct CurvesSchemaData {
|
|
Alembic::AbcGeom::TimeSamplingPtr time_sampling;
|
|
size_t num_samples;
|
|
Alembic::AbcGeom::MeshTopologyVariance topology_variance;
|
|
|
|
Alembic::AbcGeom::IP3fArrayProperty positions;
|
|
|
|
Alembic::AbcGeom::IInt32ArrayProperty num_vertices;
|
|
|
|
float default_radius;
|
|
float radius_scale;
|
|
|
|
// Those are unsupported for now.
|
|
Alembic::AbcGeom::IV3fArrayProperty velocities;
|
|
// if this property is invalid then the weight for every point is 1
|
|
Alembic::AbcGeom::IFloatArrayProperty position_weights;
|
|
Alembic::AbcGeom::IN3fGeomParam normals;
|
|
Alembic::AbcGeom::IFloatGeomParam widths;
|
|
Alembic::AbcGeom::IUcharArrayProperty orders;
|
|
Alembic::AbcGeom::IFloatArrayProperty knots;
|
|
|
|
// TODO(@kevindietrich): type, basis, wrap
|
|
};
|
|
|
|
void read_geometry_data(AlembicProcedural *proc,
|
|
CachedData &cached_data,
|
|
const CurvesSchemaData &data,
|
|
Progress &progress);
|
|
|
|
void read_attributes(AlembicProcedural *proc,
|
|
CachedData &cache,
|
|
const Alembic::AbcGeom::ICompoundProperty &arb_geom_params,
|
|
const Alembic::AbcGeom::IV2fGeomParam &default_uvs_param,
|
|
const AttributeRequestSet &requested_attributes,
|
|
Progress &progress);
|
|
|
|
CCL_NAMESPACE_END
|
|
|
|
#endif
|