forked from bartvdbraak/blender
e2c671e34c
This splits the data reading logic from the AlembicObject class and moves it to separate files to better enforce a separation of concern. The goal was to simplify and improve the logic to read data from an Alembic archive. Since the procedural loads data for the entire animation, this requires looping over the frame range and looking up data for each frame. Previously those loops would be duplicated over the entire code causing divergences in how we might skip or deduplicate data across frames (if only some data change over time and not other on the same object, e.g. vertices and triangles might not have the same animation times), and therefore, bugs. Now, we only use a single function with callback to loop over the geometry data for each requested frame, and another one to loop over attributes. Given how attributes are accessed it is a bit tricky to simplify further and only use a ingle function, however, this is left as a further improvement as it is not impossible. To read the data, we now use a set of structures to hold which data to read. Those structures might seem redundant with the Alembic schemas as they are somewhat a copy of the schemas' structures, however they will allow us in the long run to treat the data of one object type as the data of another object type (e.g. to ignore subdivision, or only loading the vertices as point clouds). For attributes, this new system allows us to read arbitrary attributes, although with some limitations still: * only subdivision and polygon meshes are supported due to lack of examples for curve data; * some data types might be missing: we support float, float2, float3, booleans, normals, uvs, rgb, and rbga at the moment, other types can be trivially added * some attribute scopes (or domains) are not handled, again, due to lack of example files * color types are always interpreted as vertex colors
178 lines
2.9 KiB
CMake
178 lines
2.9 KiB
CMake
# Copyright 2011-2020 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.
|
|
|
|
set(INC
|
|
..
|
|
../../glew-mx
|
|
../../sky/include
|
|
)
|
|
|
|
set(INC_SYS
|
|
${GLEW_INCLUDE_DIR}
|
|
)
|
|
|
|
set(SRC
|
|
alembic.cpp
|
|
alembic_read.cpp
|
|
attribute.cpp
|
|
background.cpp
|
|
bake.cpp
|
|
buffers.cpp
|
|
camera.cpp
|
|
colorspace.cpp
|
|
constant_fold.cpp
|
|
coverage.cpp
|
|
denoising.cpp
|
|
film.cpp
|
|
geometry.cpp
|
|
graph.cpp
|
|
hair.cpp
|
|
image.cpp
|
|
image_oiio.cpp
|
|
image_sky.cpp
|
|
image_vdb.cpp
|
|
integrator.cpp
|
|
jitter.cpp
|
|
light.cpp
|
|
merge.cpp
|
|
mesh.cpp
|
|
mesh_displace.cpp
|
|
mesh_subdivision.cpp
|
|
nodes.cpp
|
|
procedural.cpp
|
|
object.cpp
|
|
osl.cpp
|
|
particles.cpp
|
|
curves.cpp
|
|
scene.cpp
|
|
session.cpp
|
|
shader.cpp
|
|
sobol.cpp
|
|
stats.cpp
|
|
svm.cpp
|
|
tables.cpp
|
|
tile.cpp
|
|
volume.cpp
|
|
)
|
|
|
|
set(SRC_HEADERS
|
|
alembic.h
|
|
alembic_read.h
|
|
attribute.h
|
|
bake.h
|
|
background.h
|
|
buffers.h
|
|
camera.h
|
|
colorspace.h
|
|
constant_fold.h
|
|
coverage.h
|
|
denoising.h
|
|
film.h
|
|
geometry.h
|
|
graph.h
|
|
hair.h
|
|
image.h
|
|
image_oiio.h
|
|
image_sky.h
|
|
image_vdb.h
|
|
integrator.h
|
|
light.h
|
|
jitter.h
|
|
merge.h
|
|
mesh.h
|
|
nodes.h
|
|
object.h
|
|
osl.h
|
|
particles.h
|
|
procedural.h
|
|
curves.h
|
|
scene.h
|
|
session.h
|
|
shader.h
|
|
sobol.h
|
|
stats.h
|
|
svm.h
|
|
tables.h
|
|
tile.h
|
|
volume.h
|
|
)
|
|
|
|
set(LIB
|
|
cycles_bvh
|
|
cycles_device
|
|
cycles_subd
|
|
cycles_util
|
|
)
|
|
|
|
if(CYCLES_STANDALONE_REPOSITORY)
|
|
list(APPEND LIB extern_sky)
|
|
else()
|
|
list(APPEND LIB bf_intern_sky)
|
|
endif()
|
|
|
|
if(WITH_CYCLES_OSL)
|
|
list(APPEND LIB
|
|
cycles_kernel_osl
|
|
)
|
|
|
|
SET_PROPERTY(SOURCE osl.cpp PROPERTY COMPILE_FLAGS ${RTTI_DISABLE_FLAGS})
|
|
endif()
|
|
|
|
if(WITH_OPENCOLORIO)
|
|
add_definitions(-DWITH_OCIO)
|
|
include_directories(
|
|
SYSTEM
|
|
${OPENCOLORIO_INCLUDE_DIRS}
|
|
)
|
|
list(APPEND LIB
|
|
${OPENCOLORIO_LIBRARIES}
|
|
)
|
|
if(WIN32)
|
|
add_definitions(-DOpenColorIO_SKIP_IMPORTS)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_OPENVDB)
|
|
add_definitions(-DWITH_OPENVDB ${OPENVDB_DEFINITIONS})
|
|
list(APPEND INC_SYS
|
|
${OPENVDB_INCLUDE_DIRS}
|
|
)
|
|
list(APPEND LIB
|
|
${OPENVDB_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
if(WITH_ALEMBIC)
|
|
add_definitions(-DWITH_ALEMBIC)
|
|
list(APPEND INC_SYS
|
|
${ALEMBIC_INCLUDE_DIRS}
|
|
)
|
|
list(APPEND LIB
|
|
${ALEMBIC_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
if(WITH_NANOVDB)
|
|
list(APPEND INC_SYS
|
|
${NANOVDB_INCLUDE_DIRS}
|
|
)
|
|
endif()
|
|
|
|
include_directories(${INC})
|
|
include_directories(SYSTEM ${INC_SYS})
|
|
|
|
add_definitions(${GL_DEFINITIONS})
|
|
|
|
cycles_add_library(cycles_render "${LIB}" ${SRC} ${SRC_HEADERS})
|