blender/intern/cycles/render/CMakeLists.txt
Kévin Dietrich e2c671e34c Alembic Procedural: refactor data reading
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
2021-05-03 16:19:50 +02:00

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})