[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59882] branches/soc-2013-cycles_volume/ intern/cycles/kernel: - lookup is now performed using OpenVDB's sampler, using trilinear interpolation.
Rafael Campos
rafaelcdn at gmail.com
Fri Sep 6 18:03:16 CEST 2013
Revision: 59882
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59882
Author: jehuty
Date: 2013-09-06 16:03:15 +0000 (Fri, 06 Sep 2013)
Log Message:
-----------
- lookup is now performed using OpenVDB's sampler, using trilinear interpolation.
Modified Paths:
--------------
branches/soc-2013-cycles_volume/intern/cycles/kernel/osl/osl_services.cpp
branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_definitions.h
branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_lookup.h
branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_util.h
branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_volume.cpp
branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_volume.h
Modified: branches/soc-2013-cycles_volume/intern/cycles/kernel/osl/osl_services.cpp
===================================================================
--- branches/soc-2013-cycles_volume/intern/cycles/kernel/osl/osl_services.cpp 2013-09-06 14:32:59 UTC (rev 59881)
+++ branches/soc-2013-cycles_volume/intern/cycles/kernel/osl/osl_services.cpp 2013-09-06 16:03:15 UTC (rev 59882)
@@ -815,11 +815,9 @@
if (VDBTextureSystem::valid_vdb_file(filename)) {
VDBTextureSystem::Ptr volume_ts = vdb_ts;
-
- std::cout << "Before lookup. FILE: " << filename.string() << " ; POINT: " << P << std::endl;
status = volume_ts->perform_lookup(filename, thread_info,
options, P, dPdx, dPdy, dPdz, result);
- std::cout << "After lookup. Status: " << status << " ; Result: " << *result << std::endl;
+ //std::cout << "Lookup. Status: " << status << " ; Point: " << P << " Result: " << *result << std::endl;
}
else
{
Modified: branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_definitions.h
===================================================================
--- branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_definitions.h 2013-09-06 14:32:59 UTC (rev 59881)
+++ branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_definitions.h 2013-09-06 16:03:15 UTC (rev 59882)
@@ -64,20 +64,21 @@
VDBVolumeFile(ustring filename) : file(filename.string())
{
file.open();
-
+ std::cout << "Opening file: " << filename.string() << std::endl;
grids = file.getGrids();
for(int i = 0; i < grids->size(); i++)
{
VDBAccessorPtr ptr(new VDBAccessor((*grids)[i]));
accessors.push_back(ptr);
}
-
+
meta = file.getMetadata();
version = file.version();
+ //std::cout << "Opened file. AccessorVector has " << accessors.size() << " elements." << std::endl;
+ file.close();
}
~VDBVolumeFile()
{
- file.close();
accessors.clear();
}
Modified: branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_lookup.h
===================================================================
--- branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_lookup.h 2013-09-06 14:32:59 UTC (rev 59881)
+++ branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_lookup.h 2013-09-06 16:03:15 UTC (rev 59882)
@@ -20,6 +20,7 @@
#define __VDB_LOOKUP_H__
#include <openvdb/openvdb.h>
+#include <openvdb/tools/Interpolation.h> // for sampling mechanisms
CCL_NAMESPACE_BEGIN
@@ -36,6 +37,7 @@
VDB_GRID_VEC3D
} VDB_GridType;
+
class VDBAccessor {
public:
VDBAccessor(openvdb::GridBase::Ptr grid);
@@ -47,16 +49,26 @@
void vdb_lookup_single_point(int i, int j, int k, float *result);
void vdb_lookup_multiple_points(int i[], int j[], int k[], float *result);
+
private:
openvdb::GridBase::Ptr m_grid;
VDB_GridType m_type;
template <typename GridType>
+ void vdb_lookup_nearest_neighbor(float i, float j, float k, float *result);
+
+ template <typename GridType>
+ void vdb_lookup_trilinear(float i, float j, float k, float *result);
+
+ template <typename GridType>
typename GridType::ValueType vdb_lookup_single_point(int i, int j, int k);
template <typename GridType>
typename GridType::ValueType* vdb_lookup_multiple_points(int i[], int j[], int k[], int num);
+
+ template <typename GridType>
+ typename GridType::TreeType::template ValueAccessor<typename GridType::TreeType> get_value_accessor();
};
VDBAccessor::VDBAccessor(openvdb::GridBase::Ptr grid)
@@ -88,6 +100,7 @@
return m_grid;
}
+
template <typename VectorType>
void copyVectorToFloatArray(VectorType &vec, float *array, int num)
{
@@ -139,12 +152,13 @@
template <typename GridType>
typename GridType::ValueType VDBAccessor::vdb_lookup_single_point(int i, int j, int k)
{
- GridType typedGrid = *(openvdb::gridPtrCast<GridType>(m_grid));
- typename GridType::ValueType result;
- openvdb::math::Coord xyz(i, j, k);
+ typename GridType::Ptr grid = openvdb::gridPtrCast<GridType>(getGridPtr());
+ typename GridType::Accessor acc = grid->getAccessor();
- result = typedGrid.tree().getValue(xyz);
- return result;
+ openvdb::tools::GridSampler<openvdb::tree::ValueAccessor<typename GridType::TreeType>, openvdb::tools::PointSampler> sampler(acc);
+ openvdb::Vec3d p(i, j, k);
+
+ return sampler.wsSample(p);
}
template <typename GridType>
@@ -166,6 +180,7 @@
return result;
}
+
CCL_NAMESPACE_END
#endif /* __VDB_LOOKUP_H__ */
Modified: branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_util.h
===================================================================
--- branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_util.h 2013-09-06 14:32:59 UTC (rev 59881)
+++ branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_util.h 2013-09-06 16:03:15 UTC (rev 59882)
@@ -48,7 +48,7 @@
void OpenVDBUtil::initialize_library()
{
- openvdb::initialize();
+ openvdb::initialize(); std::cout << "initialized lib." << std::endl;
}
// Open file to check header information and determine
Modified: branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_volume.cpp
===================================================================
--- branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_volume.cpp 2013-09-06 14:32:59 UTC (rev 59881)
+++ branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_volume.cpp 2013-09-06 16:03:15 UTC (rev 59882)
@@ -20,13 +20,14 @@
#include "vdb_util.h"
#include "vdb_lookup.h"
#include "vdb_volume.h"
+#include <ctime>
CCL_NAMESPACE_BEGIN
VDBTextureSystem::Ptr VDBTextureSystem::init() {
OpenVDBUtil::initialize_library();
Ptr vdb_ts(new VDBTextureSystem());
-
+ std::cout << "Initialized VDBTextureSystem" << std::endl;
return vdb_ts;
}
@@ -67,32 +68,19 @@
}
if (!accessor) return false;
-
- /*
- float x, y, z = 0;
- x = OpenVDBUtil::nearest_neighbor(P[0]);
- y = OpenVDBUtil::nearest_neighbor(P[1]);
- z = OpenVDBUtil::nearest_neighbor(P[2]);
- */
- //accessor->vdb_lookup_single_point(x, y, z, result);
+ for (int i = 0; i < options.nchannels; i++)
+ result[i] = 0;
- openvdb::tools::GridSampler<openvdb::FloatTree, openvdb::tools::BoxSampler>
- sampler(openvdb::gridPtrCast<openvdb::FloatGrid>(accessor->getGridPtr())->constTree(), accessor->getGridPtr()->transform());
- openvdb::Vec3d p(P[0], P[1], P[2]);
- *result = sampler.wsSample(p);
- // VDBLookup::vdb_lookup_single_point(grid, x, y, z, result);
+ accessor->vdb_lookup_single_point(P[0], P[1], P[2], result);
- // *result = VDBLookup<openvdb::Int32Grid>::vdb_lookup_single_point(*intGrid, (int)x, (int)y, (int)z);
-
return true;
}
}
-VDBTextureSystem::VDBMap::const_iterator VDBTextureSystem::add_vdb_to_map(ustring filename)
+VDBTextureSystem::VDBMap::const_iterator VDBTextureSystem::add_vdb_to_map(const ustring &filename)
{
VDBFilePtr vdb_sp(new VDBVolumeFile(filename));
-
return (vdb_files.insert(std::make_pair(filename, vdb_sp))).first;
}
Modified: branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_volume.h
===================================================================
--- branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_volume.h 2013-09-06 14:32:59 UTC (rev 59881)
+++ branches/soc-2013-cycles_volume/intern/cycles/kernel/textures/vdb_volume.h 2013-09-06 16:03:15 UTC (rev 59882)
@@ -51,7 +51,7 @@
private:
VDBMap vdb_files;
- VDBMap::const_iterator add_vdb_to_map(ustring filename);
+ VDBMap::const_iterator add_vdb_to_map(const ustring &filename);
};
CCL_NAMESPACE_END
More information about the Bf-blender-cvs
mailing list