[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