10 # include <openvdb/tools/Dense.h>
13 # include <nanovdb/util/OpenToNanoVDB.h>
19 struct NumChannelsOp {
22 template<
typename Gr
idType,
typename FloatGr
idType,
typename FloatDataType,
int channels>
23 bool operator()(
const openvdb::GridBase::ConstPtr &)
31 openvdb::CoordBBox bbox;
34 template<
typename Gr
idType,
typename FloatGr
idType,
typename FloatDataType,
int channels>
35 bool operator()(
const openvdb::GridBase::ConstPtr &grid)
37 openvdb::tools::Dense<FloatDataType, openvdb::tools::LayoutXYZ> dense(bbox,
38 (FloatDataType *)pixels);
39 openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<GridType>(grid), dense);
46 nanovdb::GridHandle<> nanogrid;
49 template<
typename Gr
idType,
typename FloatGr
idType,
typename FloatDataType,
int channels>
50 bool operator()(
const openvdb::GridBase::ConstPtr &grid)
52 if constexpr (!std::is_same_v<GridType, openvdb::MaskGrid>) {
54 FloatGridType floatgrid(*openvdb::gridConstPtrCast<GridType>(grid));
55 if constexpr (std::is_same_v<FloatGridType, openvdb::FloatGrid>) {
57 nanogrid = nanovdb::openToNanoVDB<nanovdb::HostBuffer,
58 typename FloatGridType::TreeType,
59 nanovdb::FpN>(floatgrid);
62 else if (precision == 16) {
63 nanogrid = nanovdb::openToNanoVDB<nanovdb::HostBuffer,
64 typename FloatGridType::TreeType,
65 nanovdb::Fp16>(floatgrid);
70 nanogrid = nanovdb::openToNanoVDB(floatgrid);
72 catch (
const std::exception &
e) {
73 VLOG_WARNING <<
"Error converting OpenVDB to NanoVDB grid: " <<
e.what();
85 : grid_name(grid_name), grid(grid_)
107 if (!openvdb::grid_type_operation(grid, op)) {
111 metadata.
channels = op.num_channels;
118 openvdb::FloatGrid &pruned_grid = *openvdb::gridPtrCast<openvdb::FloatGrid>(grid);
119 openvdb::tools::pruneInactive(pruned_grid.tree());
120 nanogrid = nanovdb::openToNanoVDB(pruned_grid);
123 op.precision = precision;
124 if (!openvdb::grid_type_operation(grid, op)) {
127 nanogrid = std::move(op.nanogrid);
132 bbox = grid->evalActiveVoxelBoundingBox();
137 openvdb::Coord dim = bbox.dim();
138 metadata.
width = dim.x();
139 metadata.
height = dim.y();
140 metadata.
depth = dim.z();
146 if (precision == 0) {
149 else if (precision == 16) {
175 for (
int row = 0; row < 3; row++) {
176 index_to_object[row][
col] = (
float)grid_matrix[
col][row];
188 openvdb::Coord
min = bbox.min();
196 # ifndef WITH_NANOVDB
212 memcpy(pixels, nanogrid.data(), nanogrid.size());
220 openvdb::grid_type_operation(grid, op);
238 return grid == other_loader.grid;
262 openvdb::GridBase::ConstPtr VDBImageLoader::get_grid()
typedef float(TangentPoint)[2]
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
VDBImageLoader(const string &grid_name)
virtual bool equals(const ImageLoader &other) const override
virtual bool load_metadata(const ImageDeviceFeatures &features, ImageMetaData &metadata) override
virtual void cleanup() override
virtual bool is_vdb_loader() const override
virtual string name() const override
virtual bool load_pixels(const ImageMetaData &metadata, void *pixels, const size_t pixels_size, const bool associate_alpha) override
#define CCL_NAMESPACE_END
SyclQueue void void size_t num_bytes void
Eigen::Matrix< float, 4, 4 > Mat4f
@ IMAGE_DATA_TYPE_NANOVDB_FP16
@ IMAGE_DATA_TYPE_NANOVDB_FLOAT
@ IMAGE_DATA_TYPE_NANOVDB_FLOAT3
@ IMAGE_DATA_TYPE_NANOVDB_FPN